00077. Динамические адреса памяти. ( Часть 3 - структура объекта )

Динамические адреса памяти. ( Часть 3 - структура объекта )|Всем привет! Как вы уже догадались по названию урока речь пойдёт о структуре объекта.|wmysterio|wmysterio||||Эта структура не очень большая, в отличии от актёра и автомобиля. Разнообразности тоже немного. Сегодня мы сделаем простой пример - сделаем "эффект бьющегося сердца". Для начала, создадим объект. Серце имеет ID 1240, поэтому на всякий случай загрузим модель и создадим объект на Гроув стрит:

{$CLEO}
0000:

:objStruct
thread 'objStruct'
wait 0
model.Load(1240)
038B: load_requested_models

:objStruct1
wait 0
if
model.Available(1240)
jf @objStruct1
0@ = object.Create(1240, 2493.6321, -1670.4906, 13.3359)

0A93: end_custom_thread

Дальше получаем адрес структуры объекта опкодом:

0A98: 1@ = object 0@ struct

Здесь: 1@ - переменная, в которой будет хранится адрес 0@ - сам объект

Сморим в базе данных Структуру объекта и узнаём адрес, отвечающий за размер объекта:

0A8E: 2@ = 1@ + 0x15C

Дальше нам понадобится 2 цикла FOR, что бы увеличивать и уменьшать объект:

for 3@ = 1.5 to 5.0 step 0.5
 0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0
 wait 50
end

for 3@ = 4.5 downto 1.0 step 0.5
 0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0
 wait 50
end

Цикл будет задавать размер объекту. Каждые 50 миллисекунд размер объекта будет увеличиваться на 0.5 в первом цикле и увеличиваться на 0.5 во втором цикле. Чтобы создать "эффект бьющегося сердца" нам понадобится ещё один цикл, который будет выполнятся, пока объект существует. Естественно for-ы будут вложены в этот цикл. Общий скрипт таков:

{$CLEO}
0000:

:objStruct
thread 'objStruct'
wait 0
model.Load(1240)
038B: load_requested_models

:objStruct1
wait 0
if
model.Available(1240)
jf @objStruct1
0@ = object.Create(1240, 2493.6321, -1670.4906, 13.3359)
0A98: 1@ = object 0@ struct
0A8E: 2@ = 1@ + 0x15C

while 03CA: object 0@ exists

 for 3@ = 1.5 to 5.0 step 0.5
 0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0
 wait 50
 end
 
 for 3@ = 4.5 downto 1.0 step 0.5
 0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0
 wait 50
 end

wait 0
end

0A93: end_custom_thread

Запускаем игру, и видим, что на Гроув сердце и в правду бьющееся:

Увы, анимацию я не смог вклеить, сложил две картинки, но вы можете скомпилировать этот код и посмотреть на результат.|956|1|0|37493127png500599400`479``||dinamicheskie_adresa_pamjati_chast_3_struktura_obekta|1499752920

Last updated