Перевод скрипта 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)