Перейти к контенту

[CS] Ковыряемся в файлах


Halford

Рекомендуемые сообщения

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


Помогите кто нибудь, вообще не могу понять что тут за проблема, даже приблизительно.

Поделиться этим сообщением


Ссылка на сообщение
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], но что это значит не могу понять. Я скину конечно, если смогу от ошибки избавиться

Поделиться этим сообщением


Ссылка на сообщение

 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

Поделиться этим сообщением


Ссылка на сообщение

Здравствуйте!

Подскажите где прописываются персонажи выдающие награды за задания группировок? Дело такое: решил полностью восстановить группировку Экологов, прописал спам, профили, аи и т.д. Но столкнулся с одной проблемой, НПС группировки выдают квесты, но почему-то не выдают наград, я прописал профессору Сахарову диалог:<actor_dialog>tm_reward_task</actor_dialog>, но все равно получить награду не получается, он говорит что не за что выдавать.

Поделиться этим сообщением


Ссылка на сообщение

@Купер из симуляции. В файл 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 но, ничего не нашёл такого, где надо бы группировку прописывать.

 

 

Поделиться этим сообщением


Ссылка на сообщение

Всем привет

Я вот задался таким вопросом, а возможно ли сделать так, что бы на карте в ПДА отображались только дружественные/нейтральные сквады, а вражеские и мутанты нет? Было бы довольно реалистично.

Поделиться этим сообщением


Ссылка на сообщение

@Norman Eisenherz а в каком файле это задается? Если правильно думаю, в папке configs\ui этот файл так? Но не могу что-то найти файл,только для миникарты в худе есть.

Поделиться этим сообщением


Ссылка на сообщение

Привет всем

Вообщем такое дело, наткнулся на очень странный баг/ограничение. При добавлении новых группировок в список ПДА (там где отношения с ними, файл pda.script и строчка [pda_rank_communities] в game_relations.ltx), по какой-то причине нельзя добавить больше 9 группировок. Что самое интересно, если добавить больше 9 группировок, то почему-то исчезают из списка сталкеры, то есть добавленная 10 группировка их заменяет. Если добавлять дальше, одиннадцатую например, то она уже просто не появиться. С чем может быть связанно такое ограничении? Вроде нигде не нашёл заданное именно значение 9. И как возможно убрать это ограничение?

Поделиться этим сообщением


Ссылка на сообщение

Здравствуйте, это опять я.

Вообщем у меня случился такой вылет:  

 

Скрытый текст

[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

Что менял уже не смогу описать, ибо многое менял, а этот проклятый вылет, один из самых коварных - непостоянный, в результате вычислить причину методом перебора не получится. Дело ещё в том что вылет только на территории Агропрома: два раза на базе и один раз у болота, а не каких изменений со звуком на Агропроме я не делал. Может ли вообще такое быть что дело не в озвучке? Может кто сталкивался с таким вылетом?

Поделиться этим сообщением


Ссылка на сообщение

@Купер Я вроде бы разобрался, когда добавлял озвучку НПС из ЗП (музыку, анекдоты), при добавлении озвучки долговцам в противогазе (human 03), ошибся в нумерации файлов, пропустив число 20 в музыке. Сейчас вроде бы вылета нет, хотя может из-за редкости я на него просто не попадаю, но в принципе пропуск числа логично объясняет место вылета (база Долга Агропром) и редкость (должно выпасть именно это число и плюс редкость игры на гитаре именно этим НПС).

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

Всем привет. В Сталкер вики прочел такую инфу:

"Из-за опечаток в файлах игры, ящики лагерей в ангаре Яра ...(и т.д.)... никогда не наполняются предметами, даже если у соответствующей подлокации расположен отряд." Ну я решил это исправить. Проблема в том что я не могу понять как вообще работают ящики в ЧН. Вот например ящик на блокпосте: 

Скрытый текст

 

[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 =... хотя ящик там есть и рабочий. Как такое может быть?

Поделиться этим сообщением


Ссылка на сообщение

@imcrazyhoudini 
И как это число поменять? Чем вскрывать xrGame? WinHex такие строки не находит. Это все из исходников.
По поводу зомби, точно не знаю, но вроде в файлах по 
адресу configs/scripts/локация/файл. У меня один раз была запара, когда я создал отдельный профиль снайперов, и они посреди блокпоста стояли, не хотели точки занимать. А всё потому что в файле esc_military_base_logic.ltx оказалась такая строчка где указан профиль: suitable = {=check_npc_name(sim_fc_military_)} true. Наверно для других локаций тоже такое есть. Там вроде можно даже фракции прописывать.

@!Stars! 
Если у тебя получиться, скинишь файл? В ЛС или какой-нибудь раздел, ну или хотя бы описание способа как отредактировал. Буду благодарен.

@Norman Eisenherz понято, спасибо.

Изменено пользователем Lieutenant Novikov
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

@imcrazyhoudini precondition_cond в файле faction_zombied.ltx задан? У меня например такая штука стоит: precondition_cond = {+yan_go_to_red_forest_cut6} true, false. Хотя не знаю на сколько она влияет

Поделиться этим сообщением


Ссылка на сообщение

@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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...