-
Notifications
You must be signed in to change notification settings - Fork 88
Адаптация модов под этот движок
Здесь описаны основные правки и проблемы, с которыми мы сталкивались при адаптациях. Решил задокументировать, пока всё помню, вдруг кому-то ещё пригодится.
- Надо заменить в скриптах:
_g -> _G -- Такой гениальный способ обращения к глобальному пространству встречается, например, в некоторых скриптах АМК. Не исключено, что и где-то ещё. Так вообще нельзя делать, т.к. при обращении к _g, _g.script загружался ещё раз, что не известно к чему могло привести. Мы эти грабли убрали, т.к. глобальное пространство должно инититься движком только один раз после старта Lua. При попытке обращения к _g будет вылет.
4294967296 -> 4294967295 -- u32(-1) -- невалидные vertex_id/story_id, возможно что-то ещё. Почему там раньше было 4294967296 - понятия не имею, но в куче скриптов было именно так.
255 -- NO_ACTIVE_SLOT для :activate_slot(...) и прочих методов, принимающих номер слота. Раньше эти методы принимали u32 (соотв. 4294967295), теперь - u8. И ещё, -1 туда передавать тоже не надо. Надо именно 255.
- Иногда в скриптах clsid напрямую сравнивают с числами. Здесь такое работать не будет. Вот простой пример кода, который будет работать некорректно:
function get_anoms(npc, radius)
local anoms = {}
local pos = npc:position()
for i= 1, 65534 do
local obj = level.object_by_id(i)
if obj ~= nil and obj:clsid() >= 168 and obj:clsid() <= 181 then
local dist = pos:distance_to(obj:position())
if dist < radius then
table.insert(anoms, obj)
end
end
end
return anoms
end
А вот это корректный код:
function get_anoms(npc, radius)
local anomaly_classes = {
[clsid.zone_acid_fog] = true,
[clsid.zone_bfuzz] = true,
[clsid.zone_bfuzz_s] = true,
[clsid.zone_dead] = true,
[clsid.zone_galant_s] = true,
[clsid.zone_galantine] = true,
[clsid.zone_mbald_s] = true,
[clsid.zone_mincer] = true,
[clsid.zone_mincer_s] = true,
[clsid.zone_mosquito_bald] = true,
[clsid.ameba_zone] = true,
[clsid.zone_rusty_hair] = true,
[clsid.torrid_zone] = true,
[clsid.zone_radioactive] = true
}
local anoms = {}
local pos = npc:position()
for i= 1, 65534 do
local obj = level.object_by_id(i)
if obj and anomaly_classes[obj:clsid()] then
local dist = pos:distance_to(obj:position())
if dist < radius then
table.insert(anoms, obj)
end
end
end
return anoms
end
- Не работает аура контроллёра, что делать? Добавить в конфиг контроллёра:
;------------------------------------------------------------------------
; Influences
;------------------------------------------------------------------------
psy_linear_factor = 1.0 ;1.5
psy_quadratic_factor = 0
psy_max_distance = 25 ;33.0
psy_max_power = 6.4
psy_sound = monsters\controller\controller_presence_l
psy_pp_effector_name = postprocess_psi_aura ;psy_antenna
psy_pp_highest_at = 0.05
[postprocess_psi_aura]
pp_eff_name = radiation.ppe
pp_eff_cyclic = 1
pp_eff_overlap = true
radius_min = 0.5
radius_max = 1.1
- Химера не атакует, а просто прыгает вокруг. Что делать? Попробовать вот такие параметры для её конфига, с ними должно быть норм:
jump_min_distance = 0.5
jump_max_distance = 15.0
jump_max_angle = 3.14
jump_max_height = 3.5
- Транспорт со скриптовым управлением, который должен ехать по путям, не едет/едет не туда/глючит. Что делать?
Заменить в
ph_car.script
в двух местах:
local curVel = self.car:CurrentVel():magnitude()
на
local Vel = self.car:CurrentVel()
local curVel = math.sqrt(Vel.x * Vel.x + Vel.y * Vel.y)
-
Убрать мультиплеерный код из скриптов меню, т.к. в этом движке нет мультиплеера. Вообще рекомендую использовать скрипты меню, идущие в комплекте с движком, т.к в них поправлены утечки памяти, убраны тормоза, добавлены опции для новых настроек графики и не только.
-
Если используются функции/каллбеки и тп. из X-Ray Extensions, их придётся адаптировать/заменять на аналоги из этого движка. Очень много примеров такой адаптации можно найти здесь и здесь.
-
Начиная с версии 2.1.414 мы рекомендуем использовать ЗП-погоду, например эту или любую другую. ТЧ-погода работать будет, но корректное её отображение на новых шейдерах не гарантируется.