Lieutenant Novikov 15 Опубликовано 17 Августа 2021 Здравствуйте. В общем дело такое: в ЧН почему-то отключёны звуки раненых НПС, то есть все они лежат ранеными молча. Я решил это исправить, для этого отредактировать файл 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()(), но постоянно сталкиваюсь с следующей ошибкой Скрытый текст 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 45 минут назад, 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 Поделиться этим сообщением Ссылка на сообщение