MAD_LEX 2 Опубликовано 16 Июня 2023 Подскажите пожалуйста - правил treasure_manager - пытался встроить отображение содержимого тайников на метке карты как в ОП 2.2. в частности правил так --' Выдача тайника function CTreasure:give_treasure(k, npc, friend) local v = self.treasure_info[k] local sim = alife() local sobj = sim:story_object(v.target) if sobj then news_manager.send_treasure(v.name) local txt_items = "%c[255,238,155,23] " if has_level.map_add_object_spot_ser(sobj.id, "treasure") then for i = 1, 65534 do local item = alife():object(i) if item and item.parent_id == sobj.id then txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item:section_name(), "inv_name")) end --' Пометить на карте local text = "%c[255,238,155,23]" .. game.translate_string(v.name) .. "\\n" .. "%c[default]" .. game.translate_string(v.description) level.map_add_object_spot_ser(sobj.id, "treasure", text.."\\n"..txt_items) не работат, что я накорявил нетак? Поделиться этим сообщением Ссылка на сообщение
MAD_LEX 2 Опубликовано 17 Июня 2023 @Купер , спасибо это сдвинуло с места - сумел нормально загрузиться и даже играть до выдачи тайника, при выдаче вылет. Насколько понимаю по логу ругается на это [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, да и то чисто шаблонными вещами - помогите кто может Поделиться этим сообщением Ссылка на сообщение
MAD_LEX 2 Опубликовано 17 Июня 2023 (изменено) @Купер это не оригинал NS, это оригинал ОП 2.2. вот отсюда по заголовку "Содержимое тайника в метке на карте" . В оригинале ОП такого нет, но это было абсолютно работоспособно и удобно (по крайней мере мне) поскольку NS сейчас топ -было бы очень удобно иметь такую правку именно на NS а не на ОП. Спасибо попроюуб сегодня, отпишусь что как Изменено 17 Июня 2023 пользователем MAD_LEX Поделиться этим сообщением Ссылка на сообщение
MAD_LEX 2 Опубликовано 28 Июня 2023 Реализованная Купером правка на отображение содержимого тайника при снятии с трупа гугуол диск 2 Поделиться этим сообщением Ссылка на сообщение