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|37493127
png
500599
400`479``||dinamicheskie_adresa_pamjati_chast_3_struktura_obekta|1499752920