George Wheels 4 Опубликовано 21 Ноября 2020 Надоело запоминать кому что нужно по циклическим заданиям. Написал функцию в gamedata\scripts\kgp.script: Скрытый текст function GetTextDop(section) local ct = cycle_task.CCycleTask() --' Перебираем вендоров TextDop = "\\n-------\\n" for v=0,255 do --' Перебираем задания вендора vendor_string = string.format("%03d", v) if not ct.task_ini:section_exist(vendor_string.."000") then break end -- 'Вендоры кончились for t=0,255 do task_id = vendor_string..string.format("%03d", t) if not ct.task_ini:section_exist(task_id) then if ct.task_ini:section_exist(vendor_string..string.format("%03d", t+1)) then abort("Task manager: numbering chain broken [%s]. Vendor task number must be continuous without gaps.", task_id) end break --' Задания у вендора кончились end task_desc = ct.task_info[task_id] if task_desc.target == section then if ct.task_ini:line_exist(task_id, "once") then --'Если однократное задание выполнено, то вывести информацию зелёным цветом. --'Можно вообще больше не выводить. if task_desc.status == 6 then TextDop = TextDop.."\\n%c[255,1,255,1]" else TextDop = TextDop.."\\n%c[255,255,255,255]" end else TextDop = TextDop.."\\n%c[255,255,255,255]" end --'Вывести тип задания if task_desc.type == 3 or task_desc.type == 4 or task_desc.type == 5 then TextDop = TextDop.."ЦЗ: " elseif task_desc.type == 6 then TextDop = TextDop.."Цепь: " else TextDop = TextDop..task_desc.type..": " end --'Вывести вендора if story_object(task_desc.vendor) ~= nil then TextDop = TextDop..ct:get_vendor_name(story_object(task_desc.vendor)) else TextDop = TextDop..task_desc.vendor end --'Вывести количество if task_desc.target_count ~= nil then TextDop = TextDop..": "..task_desc.target_count end --'Вывести состояние предмета if task_desc.target_cond then TextDop = TextDop..": "..task_desc.target_cond[1].."-"..task_desc.target_cond[2] end end end end return TextDop end В файле gamedata\scripts\amk\safe_storageviewer.script в функции StorageViewer:InventoryListClicked(inventoryControl) вызываю GetDopText(section): есть такая строка self.info_box.frame_description:SetText(descFromIni) дописать свою TextDop = kgp.GetTextDop(section) descFromIni = descFromIni..TextDop self.info_box.frame_description:SetText(descFromIni) Естественно это работает только в новых рюкзаках. Как то-же самое сделать для инвентаря ГГ? 4 Поделиться этим сообщением Ссылка на сообщение
George Wheels 4 Опубликовано 21 Ноября 2020 (изменено) Ещё одна фишка в продолжение предыдущего поста. Файл gamedata\scripts\cycle_task.script - в конце функции function CCycleTask:action_give_task(actor, npc, p1, p2) добавить: Скрытый текст --(KGP if (task_desc.type == self.type.monster_part or task_desc.type == self.type.artefact or task_desc.type == self.type.find_item or task_desc.type == self.type.chain) and (not self.task_ini:line_exist(task_id, "once")) then tar = task_desc.target tcount = task_desc.target_count local itemElector=safe_ItemElector.GetItemElectorClass() if tar ~= nil then if ObjNoCreate[tar] == "no" then else if tcount ~= nil then kgp.create_items_actor(tar,tcount) else kgp.create_items_actor(tar,1) end end else end end --KGP) В kgp.script: function create_items(npc,section,number) for i=1,number do alife():create(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) end end function create_items_actor(itm_section,number) this.create_items(db.actor,itm_section,number) end Взято из sak.script (думаю, что те кто это читает, знают). Для однократных заданий предметы не создаются (что очень легко исправить;). Забыл сказать, что создаются только новые стволы и броня. Чтобы их "убить" до нужного состояния у меня есть ещё функции. Изменено 21 Ноября 2020 пользователем Опричник Поделиться этим сообщением Ссылка на сообщение