-
Notifications
You must be signed in to change notification settings - Fork 84
Mod adaptation ru RU
PRXPHET edited this page May 27, 2025
·
1 revision
Здесь описаны основные проблемы, с которыми можно столкнуться при адаптациях модов, а также правки, которые нужно внести для работы различных элементов.
- Надо заменить в скриптах:
_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)
Для включения реагирования травы на аномалии, добавьте настройки в конфиги аномалий. В качестве примера, оригинальные параметры из аддона:
;Холодец
bend_grass_blowout = true
bend_grass_blowout_speed = 3.0
bend_grass_blowout_radius = 3.0
;----------------------------------
;Воронка
bend_grass_idle_anim = 3
bend_grass_idle_radius = 4.0
bend_grass_idle_str = 2.0
bend_grass_idle_speed = 1.5
bend_grass_whenactive_str = 3.0
bend_grass_whenactive_speed = 3.0
bend_grass_blowout = true
bend_grass_blowout_duration = 2500
bend_grass_blowout_speed = 6.0
bend_grass_blowout_radius = 20.0
;----------------------------------
;Карусель
bend_grass_idle_anim = 2
bend_grass_idle_radius = 4.0
bend_grass_idle_speed = 1.3
bend_grass_whenactive_anim = 3
bend_grass_whenactive_str = 3.5
bend_grass_whenactive_speed = 4.5
bend_grass_blowout = true
bend_grass_blowout_duration = 5500
bend_grass_blowout_speed = 5.0
bend_grass_blowout_radius = 20.0
;----------------------------------
;Трамплин
bend_grass_idle_anim = 3
bend_grass_idle_radius = 4.0
bend_grass_idle_str = 2.0
bend_grass_idle_speed = 1.5
bend_grass_whenactive_str = 3.0
bend_grass_whenactive_speed = 3.0
bend_grass_blowout = true
bend_grass_blowout_duration = 2500
bend_grass_blowout_speed = 6.0
bend_grass_blowout_radius = 20.0
;----------------------------------
;Электра
bend_grass_blowout = true
bend_grass_blowout_speed = 4.0
bend_grass_blowout_radius = 5.0
;----------------------------------
;Жарка
bend_grass_idle_radius = 3.5
bend_grass_whenactive_anim = 4
bend_grass_whenactive_str = 2.0
bend_grass_whenactive_speed = 3.5
bend_grass_blowout = true
bend_grass_blowout_duration = 2500
bend_grass_blowout_speed = 3.0
bend_grass_blowout_radius = 5.0
Для настройки шейдерного ПНВ/тепловизора используйте следующие команды:
r_pnv_mode -- Режим работы (1 - шейдерный ПНВ, 2 - цветной тепловизор, 3 - чёрно-белый тепловизор)
r_pnv_noise -- Шум
r_pnv_position -- Позиция маски для создания эффекта надевания ПНВ/тепловизора на голову.
r_pnv_radius -- Радиус работы ПНВ.
r_pnv_num_tubes -- Количество трубок ПНВ.
r_pnv_gain_current -- Яркость/сила ПНВ.
r_pnv_washout_thresh -- Порог для размывания источников света.
r_pnv_glitch -- Глитч-эффект.
r_pnv_size_vignet -- Размер виньетки.
r_pnv_alfa_vignete -- Прозрачность краёв виньетки.
- Убрать мультиплеерный код из скриптов меню, т.к. в этом движке нет мультиплеера.
- Рекомендуется использовать скрипты меню, идущие в комплекте с движком, т.к в них поправлены утечки памяти, убраны тормоза, добавлены опции для новых настроек графики и не только.
- Если используются функции/каллбеки и т. п. из X-Ray Extensions, их придётся адаптировать/заменять на аналоги из этого движка. Очень много примеров такой адаптации можно найти здесь и здесь.
- Начиная с версии 2.1.414 мы рекомендуем использовать ЗП-погоду, например эту или любую другую. ТЧ-погода работать будет, но корректное её отображение на новых шейдерах не гарантируется.