Скрипт от Anomaly на CoC перевести
Доброе утро дорогие читатели и пользователи платформы mail ru, нужна помощь знающих людей. Играю в Global War на платформе Зов Чернобыля (CoC) и решил добавить в виде аддона экзоскелет от SGM Geoneziz, экзоскелет перенес все сделал, а вот на то чтобы нпс не видели при надевании этой брони главного героя, смог найти лишь в Anomaly, но беда в том, что он видимо не подтягивается и не хочет работать. Я перенес также по попути gamedata/scripts, и все, видимо скрипт нужно переделать под CoC, но как я без понятия, в общем, помогите кто сможет. Внизу код этого скрипта. Я увы не знаю скриптинг и так далее связанное с этим и потому мне сложно понять, что нужно поменять и где
function ReadOutfitBlindnessKoeff(section)
if ini_sys:line_exist(section,"npc_blindness_koeff") then
return ini_sys:r_float(section,"npc_blindness_koeff")
else
return 80
end
end
function transparent_gg()
local range1, id, obj_around, alife_obj, dist_act_npc
local outfit_in_slot=db.actor:item_in_slot(7)
if db.actor == nil then
return nil
end
if db.actor:item_in_slot(7) == nil then
range1 = 80
elseif outfit_in_slot~=nil and ReadOutfitBlindnessKoeff(outfit_in_slot:section())>0.0 then
range1 = ReadOutfitBlindnessKoeff(outfit_in_slot:section())
else
range1 = 80
end
for id = 1, 65534 do
obj_around = level.object_by_id(id)
if obj_around ~= nil and IsStalker(obj_around) then
alife_obj = alife_object(id)
if alife_obj then
dist_act_npc = db.actor:position():distance_to(alife_obj.position)
end
if dist_act_npc <= 120 then
if obj_around then
obj_around:set_range(range1)
end
else
if obj_around then
obj_around:set_range(80)
end
end
end
end
end
function timer_trans()
timer_transparent = timer_transparent + 1
if timer_transparent >= 50 then
timer_transparent = 0
transparent_gg()
end
end
Для адаптации этого скрипта из Anomaly для использования в Call of Chernobyl будет необходимо внести несколько изменений. Поскольку но же игры использует схожие, но не тот же движок и структуры данных, мы изменим проверки выполнимых функций и исправим логику соответствующим образом для CoC. Основные этапы включают проверку доступной функции и редактуры логики находятся в программе CoC. Наши шаги do adaptation :андации: 1. Проверим наличие функции и объектов, применяемых в Coc. 2. Перепишем функции для использования в CoC. Шаги адаптации 1. Импортирование всех модулей: убедимся, что все используемые модули и библиотека доступны. 2. Адаптация функции ReadOutfitBlindnessKoeff. Если структура INI-файлов схожа, для этой функции не потребуется практически никаких изменений. 3. Адаптация основной логики: в функциях transparent_gg и timer_trans нам нужно убедиться, функции и методы применимы в средах Coc. обновленного: скрипт:
local timer_transparent = 0
function ReadOutfitBlindnessKoeff(section)
if ini_sys:line_exist(section, "npc_blindness_koeff") then
return ini_sys:r_float(section, "npc_blindness_koeff")
else
return 80
end
end
function transparent_gg()
local range1, id, obj_around, alife_obj, dist_act_npc
local outfit_in_slot = db.actor:item_in_slot(7)
if db.actor == nil then
return nil
end
if db.actor:item_in_slot(7) == nil then
range1 = 80
elseif outfit_in_slot ~= nil and ReadOutfitBlindnessKoeff(outfit_in_slot:section()) > 0.0 then
range1 = ReadOutfitBlindnessKoeff(outfit_in_slot:section())
else
range1 = 80
end
for id = 1, 65534 do
obj_around = level.object_by_id(id)
if obj_around ~= nil and IsStalker(obj_around) then
alife_obj = alife_object(id)
if alife_obj then
dist_act_npc = db.actor:position():distance_to(alife_obj.position)
end
if dist_act_npc <= 120 then
if obj_around then
obj_around:set_range(range1)
end
else
if obj_around then
obj_around:set_range(80)
end
end
end
end
end
function timer_trans()
timer_transparent = timer_transparent + 1
if timer_transparent >= 50 then
timer_transparent = 0
transparent_gg()
end
end
-- Регистрация функций для таймера (если используется в CoC)
function on_game_update()
timer_trans()
end
-- Регистрация функции обновления игры
if game_events then
game_events.on_game_update:add(on_game_update)
end
1. Регистрация функции обновления: Убедитесь, что функция on_game_update правильно зарегистрирована в системе событий CoC. Это может потребовать модификации существующего скрипта или добавления нового обработчика событий.
2. Проверка методов: Убедитесь, что все используемые методы, такие как level.object_by_id, db.actor :position, и другие, доступны и работают в CoC.
Дополнительные шаги
Если скрипт не работает после внесения изменений, выполните следующие шаги:
1. Проверка ошибок: Проверьте журнал ошибок игры, чтобы увидеть, какие функции или методы вызывают проблемы.
2. Отладка: Временно добавьте дополнительные сообщения об ошибках и отладочные сообщения в ключевых точках скрипта, чтобы лучше понять, где возникают проблемы.
Этот подход должен помочь вам адаптировать скрипт из Anomaly для использования в Call of Chernobyl (CoC).
Перевод скрипта Anomaly для CoC
Скрипт, который вы предоставили, реализует скрытность игрока от NPC при надевании определенной брони. Он делает это, изменяя видимость игрока для NPC.
Вот как переделать скрипт для CoC:
1. Создание скрипта в CoC
• Создайте файл с именем transparent_gg.script в папке gamedata/scripts вашей игры CoC.
• Откройте этот файл в текстовом редакторе.
2. Замена функций
• ReadOutfitBlindnessKoeff(): Эта функция должна быть заменена на функцию из CoC, которая читает значение коэффициента невидимости из конфигурационного файла брони.
o Например, если вы сохранили коэффициент в секции [exoskeleton_name] с ключом npc_blindness_koeff, замените функцию на:
• function ReadOutfitBlindnessKoeff(section)
• return ini_sys:r_float(section, "npc_blindness_koeff") or 80
• end
• IsStalker(): Эта функция должна быть заменена на функцию из CoC, которая проверяет, является ли объект NPC.
o Например, в CoC можно использовать функцию object.is _actor():
• function IsStalker(obj_around)
• return not obj_around:is_actor() and obj_around:is_alive()
• end
3. Замена переменных
• db.actor : В CoC доступ к игроку осуществляется через переменную game.actor .
• level.object_by_id(): Эта функция остается без изменений, но помните, что в CoC доступ к объектам осуществляется через переменную level.
4. Модификация логики
• timer_transparent: Используйте таймер для вызова функции transparent_gg() в нужное время. В CoC таймеры работают немного по-другому.
o Добавьте в код вызов функции game.add_timer() для запуска таймера.
o Замените timer_transparent на переменную таймера в CoC.
o Убедитесь, что функция transparent_gg() правильно обновляет таймер.
Полный код для CoC:
function ReadOutfitBlindnessKoeff(section)
return ini_sys:r_float(section, "npc_blindness_koeff") or 80
end
function IsStalker(obj_around)
return not obj_around:is_actor() and obj_around:is_alive()
end
function transparent_gg()
local range1, id, obj_around, alife_obj, dist_act_npc
local outfit_in_slot = game.actor :item_in_slot(7)
if outfit_in_slot == nil then
range1 = 80
elseif outfit_in_slot ~= nil and ReadOutfitBlindnessKoeff(outfit_in_slot:section()) > 0.0 then
range1 = ReadOutfitBlindnessKoeff(outfit_in_slot:section())
else
range1 = 80
end
for id = 1, 65534 do
obj_around = level.object_by_id(id)
if obj_around ~= nil and IsStalker(obj_around) then
alife_obj = alife_object(id)
if alife_obj then
dist_act_npc = game.actor :position():distance_to(alife_obj.position)
end
if dist_act_npc <= 120 then
if obj_around then
obj_around:set_range(range1)
end
else
if obj_around then
obj_around:set_range(80)
end
end
end
end
end
function timer_trans()
transparent_gg()
end
game.add_timer("timer_trans", 0.1, true, timer_trans)
На SOS