Lieutenant Novikov 15 Опубликовано 17 Августа 2021 Здравствуйте. В общем дело такое: в ЧН почему-то отключёны звуки раненых НПС, то есть все они лежат ранеными молча. Я решил это исправить, для этого отредактировать файл xr.wounded.script, а конкретно эту часть: xr.wounded.script (Показать) wound_manager_state = xr_logic.pstor_retrieve(self.object, "wounded_state") wound_manager_sound = xr_logic.pstor_retrieve(self.object, "wounded_sound") local synsound = nil if wound_manager_state == "true" then local h = hit() h.power = 0 h.direction = self.object:direction() h.bone = "bip01_spine" h.draftsman = db.actor h.impulse = 0 h.type = hit.wound self.object:hit(h) else -- является ли текущий звук синхронным для текущего стейта for k,v in pairs(self.a.syndata) do if v.state == wound_manager_state and v.sound == wound_manager_sound then synsound = wound_manager_sound end end --' жрание аптечек и прочей срани. --' Использовать можно только если нам можно сейчас есть аптечку. if self.a.use_medkit == true then wound_manager:eat_medkit() end local emerg = nil if wound_manager_state == "psy_shoot" then emerg = {animation_nout = true} end state_mgr.set_state(self.object, wound_manager_state, nil, nil, {look_object = victim}, emerg, synsound) end if synsound == nil then -- нужно отыграть фоновый if self.sound ~= wound_manager_sound then self.sound = wound_manager_sound if self.sound == "nil" then -- xr_sound.set_sound(self.object, nil) else -- xr_sound.set_sound(self.object, wound_manager_sound) end end else -- нужно зарубить фоновый if self.sound ~= nil then self.sound = "nil" -- xr_sound.set_sound(self.object, nil) end end end Сначала я попытался просто раскомментировать строки (чтобы стало как SoC), затем поставил local перед wound_manager_sound, затем заменил xr_sound.set_sound(self.object на xr_sound.set_sound_play(self.object:id()(), но постоянно сталкиваюсь с следующей ошибкой Error (Показать) FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp [error]Line : 180 [error]Description : <no expression> [error]Arguments : LUA error: ....t.a.l.k.e.r. - clear sky\gamedata\scripts\_g.script:975: bad argument #2 to 'format' (string expected, got nil) При том в логе пишется перед вылетом: ! [LUA][ERROR] ERROR: INCORRECT LOAD [_sound_actor_save].[0][138229]. Помогите кто нибудь, вообще не могу понять что тут за проблема, даже приблизительно. Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 18 Августа 2021 18.08.2021 в 11:33, MegaStalker сказал: Ну вот тебе же пишут: _g.script, что-то не так с форматом. Попробуй сравнить фрагменты из SoC и CS, вдруг там найдется решение. И кстати, если заработает - скинешь мне? Хочу посмотреть, опробовать. Да уж сравнивал, и SoC файлом, и c COP файлом, даже копировал эти фрагменты, не помогает. Последняя надежда, на то что проблема в script_sound, там какое-то странное несовпадение с аналогичным в COP, но пока понять не могу почему. А лог на _g.script — самый бесполезный, ибо он вообще информации не даёт, как я понял. Этот лог у меня вообще выскакивал даже когда я просто в профиле бандита, в строчке:<snd_config>characters_voice\human_01\bandit\</snd_config> пробел лишний поставил. Вот и вся информационная "польза" этого лога, который ссылался на _g.script, вообще не имевшего к ошибке отношения. Тут единственная зацепка это:! [LUA][ERROR] ERROR: INCORRECT LOAD [_sound_actor_save].[0][138229], но что это значит не могу понять. Я скину конечно, если смогу от ошибки избавиться Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 18 Августа 2021 h0N0r Спасибо большое, это помогло! Так вообщем выкладываю результат: В файле xr_wounded.script Меняем (Показать) wound_manager_state = xr_logic.pstor_retrieve(self.object, "wounded_state") wound_manager_sound = xr_logic.pstor_retrieve(self.object, "wounded_sound") local synsound = nil if wound_manager_state == "true" then local h = hit() h.power = 0 h.direction = self.object:direction() h.bone = "bip01_spine" h.draftsman = db.actor h.impulse = 0 h.type = hit.wound self.object:hit(h) else -- является ли текущий звук синхронным для текущего стейта for k,v in pairs(self.a.syndata) do if v.state == wound_manager_state and v.sound == wound_manager_sound then synsound = wound_manager_sound end end --' жрание аптечек и прочей срани. --' Использовать можно только если нам можно сейчас есть аптечку. if self.a.use_medkit == true then wound_manager:eat_medkit() end local emerg = nil if wound_manager_state == "psy_shoot" then emerg = {animation_nout = true} end state_mgr.set_state(self.object, wound_manager_state, nil, nil, {look_object = victim}, emerg, synsound) end if synsound == nil then -- нужно отыграть фоновый if self.sound ~= wound_manager_sound then self.sound = wound_manager_sound if self.sound == "nil" then -- xr_sound.set_sound(self.object, nil) else -- xr_sound.set_sound(self.object, wound_manager_sound) end end else -- нужно зарубить фоновый if self.sound ~= nil then self.sound = "nil" -- xr_sound.set_sound(self.object, nil) end end end На (Показать) wound_manager_state = xr_logic.pstor_retrieve(self.object, "wounded_state") wound_manager_sound = xr_logic.pstor_retrieve(self.object, "wounded_sound") if wound_manager_state == "true" then local h = hit() h.power = 0 h.direction = self.object:direction() h.bone = "bip01_spine" h.draftsman = db.actor h.impulse = 0 h.type = hit.wound self.object:hit(h) else --' жрание аптечек и прочей срани. --' Использовать можно только если нам можно сейчас есть аптечку. if self.a.use_medkit == true then wound_manager:eat_medkit() end if tostring(wound_manager_state) == "nil" then print_table(self.a.hp_state) print_table(self.a.hp_state_see) abort("wrong wounded animation %s", self.object:name()) end state_mgr.set_state(self.object, wound_manager_state, nil, nil, {look_object = victim}, nil) end -- нужно отыграть фоновый if wound_manager_sound == "nil" then xr_sound.set_sound_play(self.object:id(), nil) else xr_sound.set_sound_play(self.object:id(), wound_manager_sound) end end дальше в файле script_sound.ltx добавляем в начале в список help_heavy далее [help_heavy] type = npc npc_prefix = true avail_communities = (группировки которые будут озвучиваться ) path = help\wounded_heavy\help_ shuffle = rnd idle = 4,8,100 Начинайте новую игру Ещё я восстановил звуки спящим НПС (может кому понадобиться): Спящие (Показать) В файле xr_sleeper.script заменяем строчки -- xr_sound.set_sound(self.object, "sleep") -- xr_sound.set_sound(self.object, nil) на строчки: xr_sound.set_sound_play(self.object:id(), "sleep") xr_sound.set_sound_play(self.object:id(), nil) дальше в файле script_sound.ltx добавляем в начале в список sleep далее [sleep] type = npc npc_prefix = true avail_communities = (группировки которые будут озвучиваться ) path = states\sleep\sleep_ shuffle = rnd idle = 7,13,100 2 Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 10 Октября 2021 Здравствуйте! Подскажите где прописываются персонажи выдающие награды за задания группировок? Дело такое: решил полностью восстановить группировку Экологов, прописал спам, профили, аи и т.д. Но столкнулся с одной проблемой, НПС группировки выдают квесты, но почему-то не выдают наград, я прописал профессору Сахарову диалог:<actor_dialog>tm_reward_task</actor_dialog>, но все равно получить награду не получается, он говорит что не за что выдавать. Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 12 Октября 2021 @Купер из симуляции. В файл tm_sim.ltx я добавил: Текст (Показать) sim_defend_smart_ecolog sim_defend_smart_delay_ecolog sim_capture_smart_ecolog sim_eliminate_smart_ecolog sim_eliminate_resource_smart_ecolog sim_eliminate_path_smart_ecolog [sim_defend_smart_ecolog]:sim_defend_smart faction = ecolog reward_money = {~50} 3000, 2500 reward_item = {~50} grenade_f1:ammo_5.45x39_ap:ammo_5.45x39_ap, medkit_scientic:medkit_scientic:antirad:antirad:antirad prior = 5 [sim_defend_smart_delay_ecolog]:sim_defend_smart_delay (тоже самое что и в первом, только другая награда) [sim_capture_smart_ecolog]:sim_capture_smart (тоже самое что и в первом, только другая награда) [sim_eliminate_smart_ecolog]:sim_eliminate_smart (тоже самое что и в первом, только другая награда) [sim_eliminate_resource_smart_ecolog]:sim_eliminate_resource_smart (тоже самое что и в первом, только другая награда) [sim_eliminate_path_smart_ecolog]:sim_eliminate_path_smart (тоже самое что и в первом, только другая награда) И как уже говорил, профессору Сахарову прописал диалог на вознаграждение:<actor_dialog>tm_reward_task</actor_dialog>. Тестировал так — первый тест: сквад Монолита напал на сквад Экологов, мне выпало задания защитить сквад, я помог экологам, но награду Сахаров не выдал. Второй квест: специально для теста заспаунил сквад экологов в Рыжем лесу, взял задания у лидера сквада квест "Принести танковый пулемет" (он выдается любым НПС не зависимо от группировки), принёс, но задание "получить награду" опять не высветилось. Что-то видимо пропустил при прописывании, но не могу понять что, уже облазил файлы task_dialogs.script, task_manager.script, task_objects.script но, ничего не нашёл такого, где надо бы группировку прописывать. Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 18 Ноября 2021 Всем привет Я вот задался таким вопросом, а возможно ли сделать так, что бы на карте в ПДА отображались только дружественные/нейтральные сквады, а вражеские и мутанты нет? Было бы довольно реалистично. Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 21 Ноября 2021 @Norman Eisenherz а в каком файле это задается? Если правильно думаю, в папке configs\ui этот файл так? Но не могу что-то найти файл,только для миникарты в худе есть. Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 28 Января 2022 Привет всем Вообщем такое дело, наткнулся на очень странный баг/ограничение. При добавлении новых группировок в список ПДА (там где отношения с ними, файл pda.script и строчка [pda_rank_communities] в game_relations.ltx), по какой-то причине нельзя добавить больше 9 группировок. Что самое интересно, если добавить больше 9 группировок, то почему-то исчезают из списка сталкеры, то есть добавленная 10 группировка их заменяет. Если добавлять дальше, одиннадцатую например, то она уже просто не появиться. С чем может быть связанно такое ограничении? Вроде нигде не нашёл заданное именно значение 9. И как возможно убрать это ограничение? Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 6 Февраля 2022 Здравствуйте, это опять я. Вообщем у меня случился такой вылет: Вылет (Показать) [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp [error]Line : 180 [error]Description : <no expression> [error]Arguments : LUA error: ...e.r. - clear sky\gamedata\scripts\sound_theme.script:213: bad argument #1 to 'gsub' (string expected, got nil) По этому адресу есть следующая строчка: строчка (Показать) local snd_st, num_copy = string.gsub(snd, "\\", "_") if self.group_snd then self.can_play_group_sound = false else if db.storage[npc_id].object:name() == "yan_stalker_sakharov" then --printf("can_play_sound theme[%s]",self.section) end self.can_play_sound[npc_id] = false end Что менял уже не смогу описать, ибо многое менял, а этот проклятый вылет, один из самых коварных - непостоянный, в результате вычислить причину методом перебора не получится. Дело ещё в том что вылет только на территории Агропрома: два раза на базе и один раз у болота, а не каких изменений со звуком на Агропроме я не делал. Может ли вообще такое быть что дело не в озвучке? Может кто сталкивался с таким вылетом? Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 9 Февраля 2022 @Купер Я вроде бы разобрался, когда добавлял озвучку НПС из ЗП (музыку, анекдоты), при добавлении озвучки долговцам в противогазе (human 03), ошибся в нумерации файлов, пропустив число 20 в музыке. Сейчас вроде бы вылета нет, хотя может из-за редкости я на него просто не попадаю, но в принципе пропуск числа логично объясняет место вылета (база Долга Агропром) и редкость (должно выпасть именно это число и плюс редкость игры на гитаре именно этим НПС). 1 Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 9 Сентября 2022 Всем привет. В Сталкер вики прочел такую инфу: "Из-за опечаток в файлах игры, ящики лагерей в ангаре Яра ...(и т.д.)... никогда не наполняются предметами, даже если у соответствующей подлокации расположен отряд." Ну я решил это исправить. Проблема в том что я не могу понять как вообще работают ящики в ЧН. Вот например ящик на блокпосте: Ящик (Показать) [6526] ; cse_abstract properties section_name = inventory_box name = esc_smart_terrain_3_16_box position = -122.246948242188, -30.0499992370605, -391.723419189453 direction = 0, 0, 0 id = 65535 version = 124 script_version = 8 spawn_id = 2920 ; cse_alife_object properties game_vertex_id = 472 level_vertex_id = 25 object_flags = 0xffffff3f ; cse_visual properties visual_name = dynamics\equipment_cache\equipment_box_02_case но в smart_terrain_3_16 почему написана такая строчка: respawn = esc_equipment_box_02_base_3_16. Название разное. В связи с чем это может быть связано, может есть файл где названия респама привязаны к названию ящика? Но я такой не нашёл. И как я понял в ЧН ящики берут список генерируемых предметов из файлов death_.ltx, а не ph_box_.ltx П.С. сейчас увидел что в смарте деревни новичков вообще нет строчки respawn =... хотя ящик там есть и рабочий. Как такое может быть? Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 23 Марта 2023 @Norman Eisenherz а какую программу использовал для распаковки? WinHex что-то такие строки не находит. Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 23 Марта 2023 @Norman Eisenherz к этим: Показать […\UIRankingWnd.h] class CUIRankingWnd : public CUIWindow, public CUIWndCallback … enum { max_factions = 9 }; Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 24 Марта 2023 (изменено) @imcrazyhoudini И как это число поменять? Чем вскрывать xrGame? WinHex такие строки не находит. Это все из исходников. По поводу зомби, точно не знаю, но вроде в файлах по адресу configs/scripts/локация/файл. У меня один раз была запара, когда я создал отдельный профиль снайперов, и они посреди блокпоста стояли, не хотели точки занимать. А всё потому что в файле esc_military_base_logic.ltx оказалась такая строчка где указан профиль: suitable = {=check_npc_name(sim_fc_military_)} true. Наверно для других локаций тоже такое есть. Там вроде можно даже фракции прописывать.@!Stars! Если у тебя получиться, скинишь файл? В ЛС или какой-нибудь раздел, ну или хотя бы описание способа как отредактировал. Буду благодарен.@Norman Eisenherz понято, спасибо. Изменено 24 Марта 2023 пользователем Lieutenant Novikov 1 Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 8 Апреля 2023 @imcrazyhoudini precondition_cond в файле faction_zombied.ltx задан? У меня например такая штука стоит: precondition_cond = {+yan_go_to_red_forest_cut6} true, false. Хотя не знаю на сколько она влияет Поделиться этим сообщением Ссылка на сообщение
Lieutenant Novikov 15 Опубликовано 9 Апреля 2023 @imcrazyhoudini Хм... загадка. Попробуй ещё вставить эту строчку: precondition_power = -1, у меня при замене этого числа, не происходил спам/респам на точках спама. Вот можешь посмотреть как у меня записано, может поможет Показать [expansion_base] base_squad_number = 0 precondition_power = -1 respawn_idle_time = 75 respawn_hours = 0,1,2,3,4,5,22,23 [expansion_0]:expansion_base base_squad_number = 0 precondition_cond = {+yan_go_to_red_forest_cut6} true, false sim_prior = prior_0 [expansion_1]:expansion_base base_squad_number = 30 precondition_cond = false [expansion_2]:expansion_base [prior_0] base = 100, 0.2 territory = 80, 0 @imcrazyhoudini И вот ещё, в файле sim_board.script время активности группировки посмотри, может не совпадает с временем спама 1 Поделиться этим сообщением Ссылка на сообщение