Skip to content

Адаптация модов под этот движок

xrSimpodin edited this page Mar 2, 2024 · 2 revisions

Здесь описаны основные правки и проблемы, с которыми мы сталкивались при адаптациях. Решил задокументировать, пока всё помню, вдруг кому-то ещё пригодится.

  • Надо заменить в скриптах:
_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 мы рекомендуем использовать ЗП-погоду, например эту или любую другую. ТЧ-погода работать будет, но корректное её отображение на новых шейдерах не гарантируется.