Суть ідеї
Створення на льоту робочих аномалій, гелікоптерів, переходів між рівнями, рестрикторів, точок відтворення та інших об'єктів, конструктор яких задає не всі необхідні для повноцінного функціонування параметри.
Ідея проста.
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) Варто спробувати погратися з аномаліями, що створюються під час активації артефактів. Якщо у них таймер не зовнішній, то є шанс регулювання часу життя. Посилання на серверний об'єкт можна отримати через біндер, наприклад.