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

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


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

Подскажите, почему может вылетать:
 

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

[03.10.22 01:21:28.159] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR:
... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:51: attempt to concatenate a nil value
stack traceback:
    [C]: in function '__concat'
    ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:51: in function 'init'
    ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:67: in function 'apply_arm_set'
    ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:109: in function 'on_item_to_slot'
    ...e.r. Тень Чернобыля\gamedata\scripts\bind_stalker.script:161: in function <...e.r. Тень Чернобыля\gamedata\scripts\bind_stalker.script:160>
[03.10.22 01:21:28.159] *********************************************************************************
[03.10.22 01:21:28.159] 
FATAL ERROR

[error]Expression    : FATAL ERROR
[error]Function      : CScriptEngine::lua_pcall_failed
[error]File          : d:\ogsr-engine-main1\ogsr_engine\common_ai\script_engine.cpp
[error]Line          : 52
[error]Description   : [CScriptEngine::lua_pcall_failed]: ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:51: attempt to concatenate a nil value

[03.10.22 01:21:28.159] ***************************[ScriptCrashHandler]**********************************
[03.10.22 01:21:28.159] stack traceback:
    [C]: in function '__concat'
    ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:51: in function 'init'
    ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:67: in function 'apply_arm_set'
    ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:109: in function 'on_item_to_slot'
    ...e.r. Тень Чернобыля\gamedata\scripts\bind_stalker.script:161: in function <...e.r. Тень Чернобыля\gamedata\scripts\bind_stalker.script:160>
[03.10.22 01:21:28.159]     Locals: 
[03.10.22 01:21:28.159]      string (*temporary) : ... Тень Чернобыля\gamedata\scripts\ogsr_outfit_arms.script:51: attempt to concatenate a nil value
[03.10.22 01:21:28.159]     End
[03.10.22 01:21:28.159]     Locals: 
[03.10.22 01:21:28.159]      Table: def_set
[03.10.22 01:21:28.159]              string def_set.1 : act\act_arm_perchatka_cs
[03.10.22 01:21:28.160] Can't dump script call stack - Engine corrupted
[03.10.22 01:21:28.160] ********************************************************************************
[03.10.22 01:21:28.160] !![LogStackTrace] Thread: [UNKNOWN]
[03.10.22 01:21:28.467] !!stack trace:

Сам скрипт:
 

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

-- Based on jr_outfit_arms.script by Lordmuzer

local arm_config = {
    ["textures_to_replace"] = {
        "act\\act_arm_perchatka_cs",
        "act\\act_arm_perchatka_cs_bump",
    },

    -- special arm set when no outfit in slot
    ["no_outfit"] = {
        "hands\\act_arm_bandit",
        "hands\\act_arm_bandit_bump",
    },
    
    ["stalker_outfit"] = {
        "hands\\act_arm_stalker",
        "hands\\act_arm_stalker_bump",
    },
    
    ["bandit_balon"] = {
        "hands\\act_arm_bandit_balon",
        "hands\\act_arm_bandit_balon_bump",
    },

    ["seva"] = {
        "hands\\act_arm_seva",
        "hands\\act_arm_seva_bump",
    },
}

local texture_normal, texture_bump, texture_bump_fix = false, false, false
local texture_normal_css, texture_bump_css, texture_bump_fix_css = false, false, false
local render = get_console():get_string("renderer")

local function init()
    local def_set = arm_config[ "textures_to_replace" ]

    local textures = texture_find(def_set[1] .. "*")

    for name, tex in pairs(textures) do
        if string.find(name, "_bump#") then
            texture_bump_fix = tex
        elseif string.find(name, "_bump") then
            texture_bump = tex
        else
            texture_normal = tex
        end
    end

----------------------------------------------------------------
    local textures_css = texture_find(def_set[3] .. "*")

    for name, tex in pairs(textures_css) do
        if string.find(name, "_bump#") then
            texture_bump_fix_css = tex
        elseif string.find(name, "_bump") then
            texture_bump_css = tex
        else
            texture_normal_css = tex
        end
    end

end

local last_config = false
local function apply_arm_set(new_config)
    if not texture_normal or not texture_normal_css then init() end
    if not texture_normal or not texture_normal_css then
            return 
    end

    if new_config ~= last_config then
        last_config = new_config

        local new_set = arm_config[ new_config ]
        ASSERT(new_set, "unknown arm_config: [%s]", new_config)

        texture_normal:load(new_set[1])
            if render ~= "renderer_r1" then
                texture_bump:load(new_set[2])
                texture_bump_fix:load(new_set[2] .. "#")
            end

        texture_normal_css:load(new_set[3])
            if render ~= "renderer_r1" then
                texture_bump_css:load(new_set[4])
                texture_bump_fix_css:load(new_set[4] .. "#")
            end
    end
end


function on_first_update()
    local outfit = db.actor:item_in_slot(6)
    if not outfit then
        apply_arm_set("no_outfit")
    elseif outfit and not (texture_normal or texture_normal_css) then
        local arm_set = get_string(outfit:section(), "arm_set")
        ASSERT(arm_set, "arm_set not found in section [%s]", outfit:section())
        apply_arm_set(arm_set)
    end
end

function on_item_to_slot(obj)
    local outfit = db.actor:item_in_slot(6)
    if outfit then
        local arm_set = get_string(outfit:section(), "arm_set")
        ASSERT(arm_set, "arm_set not found in section [%s]", outfit:section())
        apply_arm_set(arm_set)
    end
end

function check_drop(obj)
    if not obj:is_outfit() then return end

    local outfit = db.actor:item_in_slot(6)
    if not outfit then
        apply_arm_set("no_outfit")
    end
end
 

 

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий

Всем привет.

@Houdini_one, я в скриптах не шарю совсем, но я бы сделал без таблицы, или что там в начале.

If no_smoking then no_perchi

elseif exo then iron_perchi

elseif seva then varezhki

end

Как-то так.

З.Ы. Этот скрипт не использовать нигде, работать не будет!

Ссылка на комментарий

@Orсhello на соседнем форуме подсказали, было дело в значении там, [3], осталось от старого мода.

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий
12 hours ago, Houdini_one said:

Возьми с оригинала какой-то скрипт, скопируй, переименуй как надо, удали содержимое и вставь своё - должно работать.

Кодировку можно сменить несколько проще: в любом своем файле вырезать весь текст, выбрать в настройках файла ANSI, вставить текст обратно.

 

@Orсhello Как раз по таблице "костюм = перчатки" проще сопоставлять, и код нагляднее, чем if … then … elseif … then под каждую пару.

  • Согласен 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

А как исправить файлы ,в которых всё сплошником идёт? Смена кодировки не помогает, вырезание и вставка тоже.

Помню что, по моему скачивал какой-то плагин к нотепаду, какой не помню. И как там в нём работать, с тем плагином, тоже не помню... Да главное знать какой это плагин.

К примеру в SRP-master там абсолютно во всех файлах сплошником идёт. Нотепадом читается нормально, изменяется тоже, а вот нормальным не сделать его. 

Нормальным, это чтоб блокнотом нормально читался.

Три года назад исправлял так некоторые конфиги оружия оружейного пака LADC.

А вот сейчас столкнулся с модом, где абсолютно все файлы такие)))

С нотепадом не очень то удобно работать, долго. Это надо лишний раз нажимать, потом убирать всё от туда. С блокнотом намного удобней и быстрей. Он у меня по умолчанию открывает все файлы.

Ссылка на комментарий
15 часов назад, Hind сказал:

А как сделать чтобы при убийстве сталкера / мутанта воспроизводился рандомный саунд из списка?

На сталкерине есть статья. где приходят сообщения о смерти сталкеров.
Измени выдачу сообщения на таблицу рандомных звуков и их проигрыш.

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий

@alex5773 Если речь о переносах строк, то, например, Akelpad их распознает правильно. По форматированию это тот же "блокнот", только с настройками цвета и прочих параметров, не влияющих на сам текст.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

Да не, спасибо, мне бы хотелось название плагина узнать(может кто знает), чтоб нормальными файлы сделать.

Можно конечно копировать текст в нотепаде, потом там же создавать новый файл, и вставлять в него.

Но так не очень то и быстро. С плагином побыстрей было бы. Там он сам исправляет файлы. И по моему все сразу в папке, если не ошибаюсь.

Да даже если и по одному, и то быстрей, чем создавать новые файлы.

Хотя по моему там сразу в указанной папке исправляет все файлы.

 

Хотя извиняюсь, вспомнил, в LADC они читались блокнотом, но если им исправить, то файл становился не рабочим.

 

Это в другом моде каком-то так же было как сейчас. Вот в нём исправлял плагином тем, а в LADC просто кодировка была сбита.

Т.е блокнотом просто и не найти ничего в файле, там всё сплошником. Да, именно нет переноса строк.

Так-то это не мешает игре конечно.

Короче ладно, пойдёт и так. А что исправить, можно и нотепадом. А совместить можно и Merge, он видит нормально.

 

 

Ссылка на комментарий

В notepad++ есть фишка "Преобразовать в ANSI". Текст преобразует влёт. Я так делал, скачал какой-то мод, там кириллица была кракозябрами. Преобразовал легко.

Ссылка на комментарий
49 минут назад, Orсhello сказал:

В notepad++ есть фишка "Преобразовать в ANSI". Текст преобразует влёт.

Если это ответ мне, то выше писал, что не канает это. Хоть во что преобразовывай. Помогает только копирование в нотепаде, и там же создание нового файла.

Но это ни к чему. Как говорится "овчинка выделки не стоит".

Ссылка на комментарий

Объясню польностью ситуацию...
Я хочу, чтобы при нажатии на клавишу квиксейва (Ф6) игрались рандомные фразочки героя (как в золотом шаре).
Прописал следующие коллбеки в bind_stalker.script, а именно:
    self.object:set_callback(callback.on_key_press, nil)
    self.object:set_callback(callback.on_key_press, self.on_key_press, self)
Дальше в скрипт затулил саму функцию:
 

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

function actor_binder:on_key_press(key)
  if key == DIK_keys.DIK_F6 then
   dmb.save_game_replics()
  end
end

Здесь сделал послание (если нажимаем ф6, то идёт ссылка на скрипт, где рандомно выбирается саунд для воспроизведения)

Сама функция в dmb.script (где и выбирается саунд)

 

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

function save_game_replics()    
rnd = math.random(1, 10)
if rnd == 1 then 
s_play([[characters_voice\human_04\newbie\reactions\music\reaction_music_1]])    --    Душеуно
end
if rnd == 2 then 
s_play([[characters_voice\human_04\newbie\reactions\music\reaction_music_3]])    --    Ничё так
end
if rnd == 3 then 
s_play([[characters_voice\human_04\newbie\reactions\story\disbelief_3]])    --    Чо с перепою не бывает
end
if rnd == 4 then 
s_play([[characters_voice\human_04\newbie\reactions\story\final_happy_2]])    --    Хорошо то, что хорошо кончается
end
if rnd == 5 then 
s_play([[characters_voice\human_04\newbie\states\starvation\starvation_9]])    --    А я бы щас выпить не отказался
end
if rnd == 6 then 
s_play([[characters_voice\human_04\newbie\states\idle\idle_2]])    --    Свист
end
if rnd == 7 then 
s_play([[characters_voice\human_04\newbie\states\idle\idle_16]])    --    эххх щас бы сальца
end
if rnd == 8 then 
s_play([[characters_voice\human_04\newbie\weather\good_weather\good_weather_1]])    --    Эхх хорошоо!
end
if rnd == 9 then 
s_play([[characters_voice\human_04\newbie\states\fatique\fatique_1]])    --    Надо отдыхать
end
if rnd == 10 then 
s_play([[characters_voice\human_04\newbie\weather\bad_weather_7]])    --    Дерьмо. Кругом одно дерьмо. И идиоты.
end
end


И при нажатии на клавишу - вылет. 

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

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...a.l.k.e.r. Тень Чернобыля\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)


Примечательно: я ради теста сделал при нажатии на ф6 просто спавн хлеба в инвентаре, но ошибка всё равно появляется. 
 

Ссылка на комментарий
19 часов назад, Hind сказал:

чтобы при убийстве сталкера / мутанта воспроизводился рандомный саунд из списка

В xr_motivator.script, ф-ия motivator_binder:death_callback(victim, who), в конец кода можно добавить такое:

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

    local snd_list = {
        [[characters_voice\scenario\sarcofag\monolith_call_3]],  -- path to sound file
        [[characters_voice\scenario\sarcofag\monolith_call_7]],
        [[characters_voice\scenario\sarcofag\monolith_call_4]],
        [[characters_voice\scenario\sarcofag\monolith_call_2]],
    }
    local sound = snd_list[math.random(#snd_list)]
    xr_sound.get_safe_sound_object(sound):play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

 

25 минут назад, Hind сказал:

Прописал следующие коллбеки в bind_stalker.script

 

33 минуты назад, Hind сказал:

ошибка всё равно появляется

А движок какой? :crazy2:

Здесь могла быть ваша реклама.

Ссылка на комментарий

Слева внизу чё написано?

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

yNo6Lftc.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2003-10-2022%2018:47:41.jpg

 

Изменено пользователем mole venomous

Здесь могла быть ваша реклама.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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