Overf1rst 1 496 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 18 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 13 декабря, 2022 (изменено) Neptun А активное и выделенное задание - это разные объекты? У таска есть статус selected, но статуса active нет. Изменено 13 декабря, 2022 пользователем denis2000 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 697 Опубликовано 13 декабря, 2022 (изменено) Neptun в смысле, надо что-то делать с каждым выделенным заданием, а не с каким-то определенным? Опиши что именно хочешь сделать Изменено 13 декабря, 2022 пользователем M31 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 884 Опубликовано 13 декабря, 2022 14 минут назад, denis2000 сказал: Neptun А активное и выделенное задание - это разные объекты? У таска есть статус selected, но статуса active нет Активное, значит Гг его взял, выделенное - он его отслеживает. Игра походу так это видит. Статус такой тоже видел и даже писал проверку под него, но как-то не задалось, может, неправильно делал? Дополнено 2 минуты спустя 6 минут назад, M31 сказал: Neptun в смысле, надо что-то делать с каждым выделенным заданием без списков заданий? Опиши что именно хочешь сделать Если список заданий, которые Гг взял, они в пда все отмечены. Когда нажимаешь на tab, то появляются подробности текущего задания, игрок может менять текущее задание на любое доступное. Мне нужно проверить, что игрок отслеживает какое-то (абсолютно любое, ведь заданий может и не быть вовсе) текущее задание, опираясь от этого я совершу ряд иных манипуляций с данным заданием. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 697 Опубликовано 13 декабря, 2022 (изменено) 58 минут назад, Neptun сказал: что игрок отслеживает какое-то (абсолютно любое, ведь заданий может и не быть вовсе) текущее задание, опираясь от этого я совершу ряд иных манипуляций с данным заданием Есть подготовленный список id заданий и соответствующих им действий или будешь делать одинаковое действие с любым выбранным игроком заданием? Вот что хочу узнать Изменено 13 декабря, 2022 пользователем M31 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 884 Опубликовано 13 декабря, 2022 13 минут назад, M31 сказал: Есть подготовленный список id заданий и соответствующих им действий или будешь делать одинаковое действие с любым выбранным игроком заданием? Вот что хочу узнать Второе. Любое выбранное игроком задание. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 697 Опубликовано 13 декабря, 2022 Neptun если с self.status не работает, можно в check_task проверять db.actor:is_active_task. Только делай проверку на то, что выбранное задание сменилось, постоянно проверяться будет. Например, в начале файла добавляешь local act_task = "", и в check_task if act_task == "" or (db.actor:is_active_task(self.t) and act_task ~= self.id) then act_task = self.id ... end Ну как вариант, если других способов не подскажут Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 13 декабря, 2022 1 час назад, Neptun сказал: Статус такой тоже видел и даже писал проверку под него, но как-то не задалось, может, неправильно делал? По эксперементировал сейчас и судя по всему статус selected вообще движком не выставляется. Скорее всего метод предложенный уважаемым M31 и придется использовать (если конечно движок не редактировать). 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pastalker56 107 Опубликовано 13 декабря, 2022 Здравствуйте, ещё раз, как убрать мини-карту и панель быстрых предметов. Очень много смотрел про это,но там меняли их координаты,а мне надо чтобы вообще в игре их не было. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 884 Опубликовано 13 декабря, 2022 1 час назад, M31 сказал: Neptun если с self.status не работает, можно в check_task проверять db.actor:is_active_task. Только делай проверку на то, что выбранное задание сменилось, постоянно проверяться будет. Например, в начале файла добавляешь local act_task = "", и в check_task if act_task == "" or (db.actor:is_active_task(self.t) and act_task ~= self.id) then act_task = self.id ... end Ну как вариант, если других способов не подскажут Р Действительно, работает: переключаю задания, происходит обновление, но только один раз, к сожалению, проблема ведь в том, что задание в процессе игры обновляется, а функция продолжает читать старые данные. Есть ли способ впихнуть обновление действия? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BASE1707 58 Опубликовано 13 декабря, 2022 30 минут назад, Pastalker56 сказал: их координаты,а мне надо чтобы вообще в игре их не было. Костыльный вариант: 1) Слоты быстрого использования: сдвинуть элементы с худа, а сам функционал загасить unbind'ами через get_console(). При этом стоить помнить, что пользователь может вернуть функционал через консоль (конечно, если не выводить данное действие на апдейт, чего делать категорически не советую). 2) Миникарту также можно вывести за пределы экрана, при этом пиликающие звуки заменить $no_sound'ом. Если же нужно ограниченить функциональность на уровне движка (полностью выпиливать не советую, потому что у Вас есть все шансы поломать другие механики, ибо опыта, как пониманию, в C/C++ нет): 1) Отключить работу самих кейбиндов можно в xrGame/ActorInput.cpp, для этого достаточно подрезать кейсы с kQUICK_USE_1 по kQUICK_USE_4. Статики на экране можно либо попросту сдвинуть за границы худа, либо отследить их инициализацию и зачистить все упоминания (чего, опять же, делать не советую). 2) Миникарта (CUIZoneMap) отрисовывается в методе Draw() класса CUIMainIngameWnd (xrGame/ui/UIMainIngameWnd.cpp). Достаточно закомментировать соответствующую строчку кода. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kion 64 Опубликовано 13 декабря, 2022 (изменено) FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_pcall_failed [error]File : C:\xray\stcop_engine\src\xrServerEntities\script_engine.cpp [error]Line : 213 [error]Description : <no expression> [error]Arguments : LUA error: ...r. call of pripyat\gamedata\scripts\xr_conditions.script:698: attempt to index field 'actor' (a nil value) Помогите, вылетает при save-load. Заранее спасибо Изменено 13 декабря, 2022 пользователем Kion Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 697 Опубликовано 13 декабря, 2022 Neptun какие данные у задания считываются? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 884 Опубликовано 14 декабря, 2022 2 часа назад, M31 сказал: Neptun какие данные у задания считываются? Его target. Пробовал добавить условия else, но игра почему-то выводила данные предыдущего задания, то есть если я выбрал задание 2, то данные о метке идут с задания 1, и наоборот: выбрал задание 1, данные от задания 2; если выбрал задание 3, а перешёл от задания 1, то получаю данные задания 1. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 14 декабря, 2022 В 03.12.2022 в 14:22, GameCube сказал: Люди, кто-нибудь знает как сделать чтобы сталкеры во время выброса двигались в укрытия, а то они как сидели , так и сидят на своих коврах. Укрытия я вроде везде прописал. Но можете перечислить список файлов где надо вносить изменения, может что пропустил. Заранее спасибо. GameCube По хорошему NPC должны "сами" решать, как реагировать на выброс. А именно куда и как прятаться и прятаться ли. А не руководствоваться прописанными ltx-костылями-скриптами. Которые для большинства NPC как раз отсутствуют. Если, конечно, они не какие-то особенные квестовые товарищи со специфичным уникальным поведением именно в выброс. Эта задача решается добавлением поведенческой схемы с околовысшим приоритетом. На птичьем языке это выглядит так: class "eva_surgeon" (property_evaluator) -- v460 npc should react to surge if he is got no exclusive/dynamic surge job already function eva_surgeon:__init(storage, eva_name) super(nil, eva_name) self.st = storage self.engaged = false end function eva_surgeon:evaluate() if doin(self.cooldown) then return self.engaged end local npc = alive_stalker(self.object) -- v456 assert, zombied not allowed if not npc then self.cooldown = ttt_time() + 88888888 -- permanent ban; this doubles ban established at set_scheme (for tst -- v444) self.engaged = false state_mgr.beh_set(self.object and self.object:id(), "npc_wanna_hide_from_surge", false) -- v416 script behaviour processing return false end self.cooldown = ttt_time() + math.random(24000, 36000) -- update animpoint eva just once per 5 seconds (+- crowd disperse), unless action is triggered local nid = npc:id() if xr_conditions.surge_started() and not npc:critically_wounded() -- oopse -- or state_mgr_movement.stucked[nid] -- v469 tst centralized antistuck protocol then -- v461 off glitching dynamic walker action -- local st = db.storage[nid] -- local as = st and st.active_section -- -- debug23(nid, 3, "%s %s eva_surgeon:eva as %s", nid, self.object:name(), as) -- if type(as) ~= "string" -- or not as:find("surge") -- npc already should be reacting -- then -- debug23(nid, 3, "%s %s npc_wanna_hide_from_surge true", nid, self.object:name()) state_mgr.beh_set(nid, "npc_wanna_hide_from_surge", true) self.engaged = true return true -- end end -- debug23(npc:id(), 3, "%s eva_reflex false", npc:id()) state_mgr.beh_set(nid, "npc_wanna_hide_from_surge", false) -- v416 script behaviour processing self.engaged = false return false end class "act_surgeon" (action_base) function act_surgeon:__init (npc, action_name, storage) super(nil, action_name) self.st = storage end vars.surge_covers = {} function act_surgeon:initialize() action_base.initialize(self) -- npc should choose the nearest level/online cover; level covers are preselected at load local nearest_dist = 88888888 local nearest_vert local npc = self.object local npc_pos = npc:position() for vert, pos in pairs(vars.surge_covers) do local dist = npc_pos:distance_to_sqr(pos) if dist < nearest_dist then nearest_dist = dist nearest_vert = vert end end self.vertex = nearest_vert if self.vertex then if vars.surge_cover_vertexes[self.vertex] then local vertexes = vars.surge_cover_vertexes[self.vertex] local vert local n = {} for k,_ in pairs(vertexes) do n[#n + 1] = k end local num = #n for i=1, num do -- CPU hung/lock preventor local v = n[math.random(num)] if not db.used_level_vertex_ids[v] and npc:accessible(v) then vert = v break end end if vert then self.vertex = vert end end self.pos = level.vertex_position(self.vertex) debug32(3, "%s act_surgeon:ini %s %s", npc:id(), npc:name(), self.vertex) end end function act_surgeon:execute() action_base.execute(self) if doin(self.cooldown or 1) then return end self.cooldown = ttt_time() + math.random(12000, 18000) local npc = alive_stalker(self.object) -- zombied not allowed: they are immune to any surges if not self.vertex or not npc then return end local nid = npc:id() move_mgr.mm_disable(nid) local state local dist = npc:position():distance_to_sqr(self.pos) if dist < 4 then state = random_choice( "guard", -- "guard_chasovoy", "guard_na", -- "threat", -- "threat_danger", -- "threat_heli", -- "threat_na", "hide", "hide_na", "caution", "ward", "fold_arms", "search", "sit", "psy_pain", "smoking_stand", "ispug", "drunk_stand", "probe_stand", "probe_crouch", "animpoint_stay_ohrana", "drink_vodka_stand" ) local timing = vars.anim_special_timings[state] if timing then self.cooldown = ttt_time() + timing else self.cooldown = self.cooldown + math.random(23000, 69000) end ttt_lib.send_to_vertex(nid, npc:level_vertex_id(), "act_surgeon@ttt@3488", state) elseif dist < 64 then state = random_choice("sneak_run_no_wpn", "walk", "walk", "run") ttt_lib.send_to_vertex(nid, self.vertex, "act_surgeon@ttt@3491", state) elseif dist < 1024 then state = random_choice("walk", "run", "run", "sprint") ttt_lib.send_to_vertex(nid, self.vertex, "act_surgeon@ttt@3491", state) else state = random_choice("run", "sprint", "sprint") ttt_lib.send_to_vertex(nid, self.vertex, "act_surgeon@ttt@3491", state) end state_mgr.set_state(npc, state, nil, nil, {look_mod = look.path_dir}) debug23(nid, 3, "%s act_surgeon:exe %s %s %s->%s(%s)", nid, npc:name(), state, npc:level_vertex_id(), self.vertex, round(npc:position():distance_to(level.vertex_position(self.vertex)))) end function act_surgeon:finalize() action_base.finalize(self) end После чего эта пара evaluator/action должна быть грамотно прописана среди прочих схем. Язык назван "птичьим", потому что это из самописной скриптовой реализации, где вся сердцевина скриптового "ИИ" полностью переписана (это под Аномалию). Привожу как пример и общий принцип. Конкретно в моей реализации NPC побежит до ближайшего укрытия, где не будет кучковаться в одну точку, а рассредоточится по помещению и будет реагировать разнообразно. Также у меня из-за наивысшего приоритета прекращается стрельба. Но это по вкусу. Как-то так... 1 Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GameCube 4 Опубликовано 14 декабря, 2022 BarmaGlot ну в оригинальном зп, обычные дефолтные нпсы бегут к ближайшему укрытию. Прикол в том что, если я буду в укрытии, то они выживут, а если я буду не в укрытии, они также погибают как и гг. Вот я и подумал как дать им команду идти в укрытие. То есть они сами должны идти? Без всяких правок в файлах? Дополнено 0 минут спустя Kion что перед вылетом делали? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 884 Опубликовано 14 декабря, 2022 42 минуты назад, GameCube сказал: BarmaGlot ну в оригинальном зп, обычные дефолтные нпсы бегут к ближайшему укрытию. Прикол в том что, если я буду в укрытии, то они выживут, а если я буду не в укрытии, они также погибают как и гг. Вот я и подумал как дать им команду идти в укрытие. То есть они сами должны идти? Без всяких правок в файлах? Дополнено 0 минут спустя Kion что перед вылетом делали? В way прописывается путь surge для каждого смарта отдельно. Если правильно прописать, то дефолтные нпс без логики сами пойдут к укрытию. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 697 Опубликовано 14 декабря, 2022 (изменено) Neptun можно где-нибудь в if task_updated and not(self.dont_send_update_news) then делать act_task = "". Или в другое условие прописать, но чтобы выше проверки на is_active_task было Изменено 14 декабря, 2022 пользователем M31 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BarmaGlot 244 Опубликовано 14 декабря, 2022 4 часа назад, GameCube сказал: в оригинальном зп, обычные дефолтные нпсы бегут к ближайшему укрытию. Прикол в том что, если я буду в укрытии, то они выживут, а если я буду не в укрытии, они также погибают как и гг. Вот я и подумал как дать им команду идти в укрытие. То есть они сами должны идти? Без всяких правок в файлах? GameCube Именно, как бы "сами", как бы "подумав". Это, действительно, со стороны должно казаться "думанием, искусственным интеллектом" (и, по факту, его натуральный зачаток). В противовес (или, скорее в дополнение) той "логике", что там в ltx-скриптах "наглухо" прописана мод-мейкером, как вот Neptun говорит: 3 часа назад, Neptun сказал: В way прописывается путь surge для каждого смарта отдельно. Если правильно прописать, то дефолтные нпс без логики сами пойдут к укрытию. Беда в том, что эта ltx-логика может и часто бывает не прописана вовсе или прописана неграмотно, ну и всякие разные ситуации "недефолтные". А в парадигме "думания" NPC натурально будет "думать" так же как и человек, расставляя приоритеты для широкого спектра своих действий и/или "инстинктов". 1 Я логи в баню удалил, а вот за за рейдеры – не помню! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GameCube 4 Опубликовано 14 декабря, 2022 BarmaGlot понял, то есть можно не заморачиваться по этому поводу. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kion 64 Опубликовано 14 декабря, 2022 (изменено) 6 часов назад, GameCube сказал: Kion что перед вылетом делали? Карту локации в ПДА добавлял Изменено 14 декабря, 2022 пользователем Kion Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pastalker56 107 Опубликовано 14 декабря, 2022 Здравствуйте, как сделать так чтобы в инвентаре отображались скрытые предметы, типа фонарик,нож... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GameCube 4 Опубликовано 14 декабря, 2022 Kion сбой в скриптах. В каких файлах делали изменения? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 951 Опубликовано 14 декабря, 2022 Pastalker56 Они не в инвентаре а в слотах - это раз. Чтобы их отображать нужно отрисовывать соответствующие слоты движком (костыли в расчет не берем) - это два. 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kion 64 Опубликовано 14 декабря, 2022 7 минут назад, GameCube сказал: Kion сбой в скриптах. В каких файлах делали изменения? GameCube game_maps_single, только как этот файл может повлиять на логику? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GameCube 4 Опубликовано 14 декабря, 2022 Kion тоже не понимаю. Ошибки есть? Может неправильно что прописали. Или проблема в другом. Ещё какие-нибудь файлы до вылета изменяли? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты