@Купер , спасибо это сдвинуло с места - сумел нормально загрузиться и даже играть до выдачи тайника, при выдаче вылет. Насколько понимаю по логу ругается на это
[17.06.23 09:28:22.119] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR:
...l.k.e.r.ns.ogsr\gamedata\scripts\treasure_manager.script:519: attempt to index global 'has_level' (a nil value)
stack traceback:
[C]: in function '__index'
...l.k.e.r.ns.ogsr\gamedata\scripts\treasure_manager.script:519: in function 'give_treasure'
А так, это часть кода из правок к файлу treasure из мода ОП 2.2., котороая позволяет смотреть содержимое тайника на карте - пытаюсь адаптировать под NS OGSR 2023
Compare выдает различия между оригинальным кодом treasure.script из мода ОП 2.2. и поправленным для отображения содержимого тайников на карте в 12 строчек:
Оригинал:
--' Выдача тайника
function CTreasure:give(treasure_id,npc)
if treasure_id==nil then
abort("! ERROR invalid treasure_id from queue!!!")
end
local treasure_info = self.treasure_info[treasure_id]
local obj = story_object(treasure_info.target)
if obj ~= nil then
if obj:clsid() ~= clsid.inventory_box then
abort("Story object [%s] is not an inventory box", treasure_info.target)
end
news_manager.send_treasure(treasure_info.name, object_level_name(obj))
--' Пометить на карте
local text = "%c[255,238,155,23]"..translate(treasure_info.name).."\\n".."%c[default]"..translate(utils.cfg_get_string(self.ini, treasure_id, "description", nil, true, ""))
map_spot(obj.id, "treasure", text)
-- если тайник не именной, то заменим содержимое
if treasure_info.named == false then
treasure_info.items = self:give_item_list(npc)
else
if not self.treasure_info[treasure_id].active then
treasure_info.items = parse_spawns(utils.cfg_get_string(self.ini, treasure_id, "items", nil, true, ""))
else
treasure_info.items={}
end
end
--' Сгенерить вещи
for __,item_info in pairs(treasure_info.items) do
for i=1,item_info.prob do
create(item_info.section, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)
end
end
Поправленная версия:
--' Выдача тайника
function CTreasure:give(treasure_id,npc)
if treasure_id==nil then
abort("! ERROR invalid treasure_id from queue!!!")
end
local treasure_info = self.treasure_info[treasure_id]
local obj = story_object(treasure_info.target)
if obj ~= nil then
if obj:clsid() ~= clsid.inventory_box then
abort("Story object [%s] is not an inventory box", treasure_info.target)
end
news_manager.send_treasure(treasure_info.name, object_level_name(obj))
-- если тайник не именной, то заменим содержимое
if treasure_info.named == false then
treasure_info.items = self:give_item_list(npc)
else
if not self.treasure_info[treasure_id].active then
treasure_info.items = parse_spawns(utils.cfg_get_string(self.ini, treasure_id, "items", nil, true, ""))
else
treasure_info.items={}
end
end
local txt_items = "%c[255,238,155,23] "
if has_map_spot(obj.id, "treasure") then
for i = 1, 65534 do
local item = alife():object(i)
if item and item.parent_id == obj.id then
txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item:section_name(), "inv_name"))
end
end
end
--' Сгенерить вещи
for __,item_info in pairs(treasure_info.items) do
for i=1,item_info.prob do
create(item_info.section, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)
txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item_info.section, "inv_name"))
end
end
--' Пометить на карте
local text = "%c[255,238,155,23]"..translate(treasure_info.name).."\\n".."%c[default]"..translate(utils.cfg_get_string(self.ini, treasure_id, "description", nil, true, ""))
map_spot(obj.id, "treasure", text.."\\n"..txt_items)
вот как можно перенести эту фишку с отображением содержимого тайников на карте в NS OGSR? я попробовал но мне явно не хватает опыта - мой опыт скриптера ограничен OFP, да и то чисто шаблонными вещами - помогите кто может