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

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


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

@Kirgudu Спасибо, буду пробовать, на крайний случай придется отказаться от такого задания)
Еще вопрос есть, ответь пожалуйста если сможешь.
В ЧН (в данном случае в Faction Commander) проблема со спавном монстров, они попросту не появляются хотя все точки спавна для них есть, секция sim_faction в all,spawn тоже, частенько такую формулировку ловлю в консоли:
! Cannot find saved game couldn't_find_spawn_section_for_mar_sim_faction_monster,_science_=_6
! [LUA][ERROR] ERROR: Couldn't find spawn_section for mar_sim_faction_monster, science = 6
Как это победить? (я знаю, что как-то связано со спавном монстров (возможно поэтому даже) и в ОГСМ это победили, но путей решения нет нигде на данный момент)

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

@!Stars! не могу сказать точно. С Faction Commander никогда не то что не работал, но и не использовал в игре, не хотелось и вряд ли захочется.
Проблему такую в ОГСМ, честно говоря, не особо помню, хотя в последней версии (1.8 CE) лично исправлял много ошибок симуляции. Разве что вспоминается, что для монстров, в отличие от полноценных группировок, получение и возврат секции спавна был необязателен - и то, что я сейчас вижу (но не могу с ходу объяснить), это вроде бы подтверждает...
Если всё так, достаточно в скрипте sim_faction.script в местах, предшествующих указанному вылету (там их несколько похожих), добавить проверку на то, что расчёт делается не для монстров.
См. строку 299 этого скрипта из мода ОГСМ и похожие выше, при сравнении со скриптом из оригинала (if not self.player_name == "monster" and ...).
Но я не поручусь, что данное изменение - единственное требующееся, слишком давно вносил эти правки. Надо пробовать.

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

@Kirgudu Все равно спасибо, буду искать и копать, хотя бы уже есть зацепки какой скрипт и где копать.
Еще буквально маленький вопрос, касаемо заданий в игре.
Есть ли вменяемый букварь по ЧН, как создавать квесты, принеси подай, убийство НПС, заранее огромное спасибо)

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

@!Stars! Я таких не знаю. Специалистов по ЧН мало, регулярно заходящих на форум ещё меньше, а тех, кто захочет или сможет поделиться знаниями, раз, два и обчёлся.

От меня ответа ждать не стоит, всегда интересовался больше технической стороной дела - читай, скриптами - в конфиги же предпочитаю не лезть, хоть и могу. Но если вдруг у меня возникло бы такое желание, то пошёл изучать то, что сделано до меня, в том числе и в оригинале. Поверь, инфы там вполне достаточно.
https://stalkerin.gameru.net/wiki/ - здесь ещё можно поискать, хотя почти уверен, что по ЧН мало что найдётся.

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

Товарищи спецы, подскажите, не соображу, что забываю сделать.

Платформа эта: OGSM CS 1.8 CE Fixes. Маловероятно, что как-то влияет в данном случае.


Имеется такой простенький бред, вызывается из bind_stalker.actor_binder:update(delta)

Скрытый текст
local food_rad =
    { ["bread"] = true, ["kolbasa"] = true, ["cheese"] = true, }

local idle_time, sect = 0, nil

function rad_food()
  
if device().precache_frame >1 then return end

    if (idle_time or 0) < time_global() then
        if db.actor and db.actor:alive() and db.actor.radiation > 0.1 then
        idle_time = time_global() + 60*1000
        local rad_food_news = false
            db.actor:iterate_inventory(function (temp,item)
            if item == nil or alife():object(item:id()) == nil then return end
            sect = item:section()
            if food_rad[sect] and math.random() > 0.5 then
            --*/ "местечковое" удаление и спаун предметов в инвентаре ГГ
                fsm.remove_item(item)
                fsm.spawn_item_in_inv(sect.."_rad")
            --*/
                if not rad_food_news then
                    local news_caption = game.translate_string("st_actor_name")
                    local news_text = "%c[ui_red]"..game.translate_string("food_got_worse")
                    db.actor:give_game_news(news_caption, news_text, "ui_npc_u_actor", 0, 10000)
                    xr_sound.set_sound_play(db.actor:id(), "pda_sos")
                    rad_food_news = true                        
                end        
            end
            end, db.actor)
        end
    end
end

 

Суть: проверяем по дельте времени уровень радиации ГГ и удаляем/добавляем ему в инвентарь соответствующие предметы.

 

При "горячей" загрузке (из гл. меню, не выходя из игры):

stack trace:
001B:00000000 xrEngine.exe
[error][      87]    : Параметр задан неверно.

 

При смерти ГГ:

stack trace:
[error][       8]    : Недостаточно памяти для обработки команды.

 

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

@Купер Внутри iterate_inventory не нужно ничего удалять/спавнить.

Обычно все найденные item'ы запоминаются в таблицу, а после выхода из iterate_inventory удаляются.

  • Согласен 1
  • Полезно 1

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

Мимо, к сожалению. Где-то в другом месте туплю:

Скрытый текст
local food_rad =
    { ["bread"] = true, ["kolbasa"] = true, ["cheese"] = true, }
local idle_time, sect = 0, nil

function rad_food()
    if (idle_time or 0) < time_global() then
        if db.actor and db.actor:alive() and db.actor.radiation > 0.1 then
        idle_time = time_global() + 60*1000
        local spoiled_items = {}
            db.actor:iterate_inventory(function (temp,item)
            if item == nil or alife():object(item:id()) == nil then return end
            sect = item:section()
            if food_rad[sect] and math.random() > 0.5 then
                table.insert(spoiled_items, item)       
            end
            end, db.actor) 
            for _,item in pairs(spoiled_items) do
                local rad_sec = item:section().."_rad"
                fsm.remove_item(item)
                fsm.spawn_item_in_inv(rad_sec)            
            end
        end
    end
end

Симптоматика та же.

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

@Norman Eisenherz , ага, тоже догадался проверить сейчас на оригинале - проблемы отсутствуют. Видимо, всё-таки да, что-то "местечковое", как ни странно. Хотя казалось бы - каким боком?

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

Да тут уже "по месту", самостоятельно разбираться придётся. Вряд ли кто-то помочь сможет, не факт, что даже автор навскидку проблему определит. Там, в актуальном билде серьёзный рефакторинг кода имеет место быть, по сути - бета на нынешний момент. Вот и гадаешь: сам напортачил или помогли:biggrin:.

Ссылка на комментарий
50 минут назад, Купер сказал:

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

Соавтор актуального кода далеко не весь код писал сам, часто за неимением времени просто вставлял найденную главным автором мода функцию как есть. :)

Так что не определю. Да и вылет лично у меня не повторяется - только что успешно облучил для проверки все три типа еды в инвентаре без каких бы то ни было изменений кода, вылета не было.

 

@WinCap чем обусловлена рекомендация? Я, конечно, и сам могу поискать в движке, но трудно и долго, а ответ, возможно, уже есть готовый.

  • Спасибо 1
Ссылка на комментарий
1 минуту назад, Kirgudu сказал:

чем обусловлена рекомендация?

Да собственно ничем серьезным - примерами из xr_conditions и xr_effects. ПЫСы вроде так делали.

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

Ссылка на комментарий
6 минут назад, WinCap сказал:

примерами из xr_conditions и xr_effects

Ну тогда далеко ходить не надо, есть и обратный пример: cм. функцию death_manager.keep_item, вызываемую из iterate_inventory, и в ней alife():release().
Я подумал, есть запреты, связанные с высвобождением ресурсов на уровне движка, но пока это не подтверждается. Потом при случае пороюсь в плюсах.

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

Всем привет!

ЧН 15.10 Делаю модификацию.
После сохранения квиксейвом и дальнейшей загрузкой этого сейва вылазит такое:

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: ...alker clear sky\gamedata\scripts\bind_stalker.script:527: attempt to concatenate field '?' (a nil value)

Перехожу на 527 строку, а там:


get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])

Только я в своём моде не делал акцент на этом:

                local game_difficulty_by_num = {
                                           [0] = "gd_novice",
                                           [1] = "gd_stalker",
                                           [2] = "gd_veteran",
                                           [3] = "gd_master"
                                                                       }

..самое интересное, что автосейвы, те что применяются при переходе на уровни работают, а квиксейвы ломаются.

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

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

Возможно, нарушен порядок чтения/записи нетпакета ГГ. См. любые недавние изменения со ссылкой на pstor или actor_binder:save() и …load(). Может, таймеры неудачно добавлены?

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

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

Шпаргалка

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

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

возможно из-за того что при квик-сейве игра не ставится на паузу, один скрипт загружает процесс и не даёт корректно отработать записи сейва, в сейв не попадает инфа об уровне сложности, вообще ЧН самый багованный в этом плане, помню поломки квик-сейвов были обычным делом особенно в непропатченной версии)

 

как вариант можно оставить вообще один уровень сложности и эту строку вообще убрать из биндера загрузки сейва, второй вариант в биндер добавить код проверки значения консольного параметра уровня сложности, который стоит в данным момент в usere, и исходя уже из этого значения выставлять уровень сложности при загрузке ,а не из сохранёнки.

  • Спасибо 1
Ссылка на комментарий

@BеST дело не в этом скрипте, откатывай изменения которые делал до сего вылета, у меня на ТЧ такое было.

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

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

@BеST дело не в этом скрипте, откатывай изменения которые делал до сего вылета, у меня на ТЧ такое было.

Да я уже чуть-ли не полный разбор всей gamedata делал, в каждый файл лез, даже который в теории никак не должен относиться сложности игры.
Думаю, CiberZold правильно мне подсказал, что не ставится паузы во время сейва - это действительно так. Почему этого не происходит просто понять не могу.

Ссылка на комментарий
3 часа назад, BеST сказал:

Почему этого не происходит просто понять не могу

Почему - как раз совершенно понятно.

Вот здесь черным по белому написано:

15.02.2024 в 17:49, BеST сказал:

bind_stalker.script:527: attempt to concatenate field '?' (a nil value)

Следовательно, прочитанное из сейва значение сложности игры оказалось nil. А это значит, что при квиксейве - файл сейва записывается неправильно, в искаженном порядке и/или с потерей части информации. Вот и вылетает игра при загрузке такого сейва, т.к. не находит там то, что там быть обязано.

Проверяй все действия, связанные с записью каких-то данных в сейв, где-то там косяки.

  • Нравится 2
  • Согласен 1
  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

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

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

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

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

Войти

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

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

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