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

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

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

@Hind строка 41 в dmb.script. Не может найти dmbpolygon.

  • Спасибо 1

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

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

@Houdini_oneвот это я дал, забыл что в другой геймдате копаюсь)

А по поводу.. Даже не знаю как выразиться, в нижнем левом углу есть текст, где указывается версия.. Как её отредактировать, и написать там то - что захочется?

 

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

@Hind ui_main_menu.script, строка 36.

  • Спасибо 1
  • Полезно 1

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

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

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

И в прицнипе, как сделать так, чтобы при определённом действии производился звук? 

 

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

И при быстром сохранении тоже игрался рандомный саунд

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

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

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

[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". Текст преобразует влёт. Я так делал, скачал какой-то мод, там кириллица была кракозябрами. Преобразовал легко.

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

Каким образом подцепить на клавишу выполнение скрипта?

Изменено пользователем Hind
забыл дописать
Ссылка на комментарий
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:

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


Подарки

  • 5
  • 3
  • 3
  • 2
  • Ссылка на комментарий

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

    ×
    ×
    • Создать...