Сповіщення
Очистити все

SoC. Один із методів спавна


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
7 місяців тому
 

Суть ідеї

Створення на льоту робочих аномалій, гелікоптерів, переходів між рівнями, рестрикторів, точок відтворення та інших об'єктів, конструктор яких задає не всі необхідні для повноцінного функціонування параметри.

Ідея проста.

1 ) Створюємо об'єкт стандартним методом: 
local obj = alife ( ) : create ( ... )
 
2 ) Створюємо екземпляр класу net_packet:
local packet = net_packet ( )
 
3 ) Зберігаємо стан об'єкта в пакет:
obj: STATE_Write ( packet )
 
4 ) Зчитуємо _все_ збережені властивості у змінні:
local property1 = packet:r_u32 ( )
...
local propertyN = packet:r_float ( )
 
5 ) Записуємо ці змінні знову, змінюючи або доповнюючи необхідні параметри:
packet:w_u32 ( property1 )
...
propertyN = new_value
packet:w_float ( propertyN )
 
6 ) Зчитуємо модифікований стан об'єкта:
packet:r_seek ( 0 )
obj:STATE_Read ( packet, packet:w_tell ( ) )

Де брати список параметрів, що зберігаються, та їх розміри? Найвірніший спосіб - дизасемблювання методів STATE_Write та STATE_Read всіх класів виду CSE_ALife... у xrGame.dll. Простіший - дивитися методи state_read "класів" cse_alife_... в acdc.pl (це альтернативний редактор all.spawn). Але там можуть бути помилки.

Внизу ви знайдете приклад коду, який скриптом створює робочу електру та вертоліт (біля ніг гравця і на 50 метрів вище гравця відповідно).

Найкраще дивитися на Кордоні. Гелікоптер ні на що не реагує, але це нормально. Йому потрібно або логіку через custom_data прописувати, або ручками смикати керуючі методи.

Нюанси

1) Для деяких типів об'єктів бажано смикати UPDATE_Write/UPDATE_Read. Дивіться в тому ж acdc.pl методи update_read (якщо є).

2) Варто спробувати погратися з аномаліями, що створюються під час активації артефактів. Якщо у них таймер не зовнішній, то є шанс регулювання часу життя. Посилання на серверний об'єкт можна отримати через біндер, наприклад.


   
Цитата