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

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

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

А можно спавнить предмет по условию? Спавн скриптом - не предлагать, ибо мне нужно заспавнить предмет там, где нет АИ-сетки, в итоге предмет куда-то теряется из-за этого. Предмет ставлю в СДК, убираю использование АИ-сетки и все ок, но предмет есть на старте игры. Для живых объектов есть, к примеру, секция [spawner], а для предметов..? Есть ли что-то подобное? 

GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

JNCR — Coming Soon...

i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


Подарки

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

    @HellRatz, скорее всего, условного спона у объектов не предусмотрено. А почему скриптом не предлагать? Совершенно спокойно спонятся предметы там, где АИ-сетки нет и в помине.

    Есть ещё один способ, но это уже совсем через... ну, вы поняли. Смысл таков: ставим предмет там, где это необходимо (в СДК или редактируя all.spawn), затем при старте игры игры удаляем его скриптом, а когда нужно - восстанавливаем обратно, тоже скриптом. В этом случае предмет будет иметь те же координаты, наклон, поворот, и т.д.

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

     

     

    Совершенно спокойно спонятся предметы там, где АИ-сетки нет и в помине.

    Подсказали логику для таких объектов, чтобы не уезжали. Лично у меня объекты тупо не появляются (Уезжают куда-то?) при спавне скриптом. Попробую еще с логикой.

    GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

    JNCR — Coming Soon...

    i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


    Подарки

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

    Если не появляются там где надо, значит или не там заспавнили, или не заспавнили вовсе.

    И таки да, скриптом можно спавнить без АИ-сетки, и задавать положение-наклон-поворот через нетпакет.

    Добавлено  HellRatz,

    Странно. Координаты точно правильные. Ок, посмотрю еще.

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

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

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

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

    Не подскажите есть ли консольная команда на закрытие инвентаря?
    get_console():execute("inventory_close") не пашет.

    Пробовал через

    get_hud():HidePdaMenu()

    get_hud():HideActorMenu()

    Тоже не получается.

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

    @e1_nin0, обязательно консольная? Есть вот у меня например такая скриптовая функция (Закрывает любое активное открытое окно)

    --// Закрываем инвентарь.
    function actor_disable_inventory()
    -- закрываем верхнее окно:
    local wnd = level.main_input_receiver()
    if wnd then
    wnd:GetHolder():start_stop_menu(wnd, true)
    end
    end
    • Спасибо 1

    GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

    JNCR — Coming Soon...

    i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


    Подарки

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

    Пардон, похоже я ненароком ввел всех в заблуждение.

    При изучении логов я нашел одну особенность - при количестве секций в аллспавне менее 10991 происходит вышеупомянутый вылет. Поднял базовый аллспавн мода (последний номер секции в нем - 10990), удалил на пробу 1 секцию - и тот же вылет. Получается, если у меня были заспавнены новые объекты (количество стало 11006), то и появилась возможность удалить соответствующее число секций без последствий...

    Если я все правильно понял, нужно уменьшить каким-то образом этот "минимум" = 10991. Но как?

    New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

    Русификатор для игры Vendetta: Curse of Raven's Cry

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

     

     

    Если я все правильно понял, нужно уменьшить каким-то образом этот "минимум" = 10991. Но как?

    Для начала можно задаться вопросом откуда-почему этот минимум происходит.
    что-то у меня закралось подозрение, а не делается ли у вас где-то в скриптах спавн или еще какое действие с объектом по его секции в аллспавне? как раз по значению 10991

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

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

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

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

    Вот так да. Столкнулся с такой вещью, как ограничение кол-ва секций логики для объекта. Долго парил, почему у меня вылетает при создании игры с логом:

    * Loading spawn registry...
    
     FATAL ERROR
    [error]Expression    : error handler is invoked!
    [error]Function      : invalid_parameter_handler
    [error]File          : E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp
    [error]Line          : 804
    [error]Description   :

    Оказывается, если у объекта больше 20 секций, то будет такой вылет. :az1000106:

    Изменено пользователем HellRatz
    • Полезно 3

    GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

    JNCR — Coming Soon...

    i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


    Подарки

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

    Zander_driver, 10991 - это как бы "рабочий" минимум. Получается, последняя секция 10990 + начальная секция под номером 0 = 10991, так я понимаю? При нормальной загрузке в логе идет такой отрезок:

    Создание новой игры...
    * Creating new game...
    * Loading spawn registry...
    * 11007 spawn points are successfully loaded
    * Saving spawns...
    * Saving objects...
    * 20546 objects are successfully saved
    * Game all.sav is successfully saved to file 'd:\games\s.t.a.l.k.e.r - shadow of chernobyl\userdata\savedgames\all.sav'
    * New game is successfully created!
    * phase time: 6932 ms

    и так далее...

    Вылет наблюдается уже при "10990 spawn points are successfully loaded", при "10991 spawn points are successfully loaded" игра еще грузится.

    А вот теперь самое интересное: покопавшись, я выявил, что у моих новых секций строчки "spawn_id" дублируют уже имеющиеся. Я "как полагается" :)  довел их соответственно до 11006. И, как и ожидалось, при удалении одной единственной секции происходит тот самый вылет, но уже:

     

    Создание новой игры...
    * Creating new game...
    * Loading spawn registry...
    * 11006 spawn points are successfully loaded
    stack trace:

    0023:04BDF915 xrGame.dll

     

    Выходит, удаление секций лимитируется самым последним spawn_id? Если да, то как от этого избавиться?

    New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

    Русификатор для игры Vendetta: Curse of Raven's Cry

    Ссылка на комментарий
    @Jekyll,насколько я понял из постов на других ресурсах, ты пытаешься вычистить секции аномалий. И при этом в используемом тобой моде, наверняка, есть скрипты "динамических аномалий". Попробуй поискать причину в них. т.е. отключи для начала "ДинАномалии".
    • Полезно 1
    Ссылка на комментарий

    @Jekyll

    Ну ты уже такого насочинял...

    Если я не ошибаюсь, параметр spawn_id в секциях распакованного all.spawn'а не имеет никакого отношения непосредственно к игре и движку, а проставляется утилитой распаковки\запаковки all.spawn'а. Возьми из шапки темы "Universal ACDC и другие perl-скрипты" раздела "Инструментарий" нормальную версию uACDC, освой и не парься. Я, по необходимости, удалял любое кол-во секций в произвольном порядке и вышеуказанный параметр вообще не трогал в оставшихся секциях - после запаковки и последующей распаковки uACDC сам его обновит.

    Изменено пользователем UnLoaded
    Добавлено BFG,

    Можно вообще удалить все строки с этим параметром и спокойно упаковать. Ни на что не влияет.

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

    Ок, попробую предложенные варианты. Благодарю всех за участие.

     

    Кстати, насчет сочинительства) Если нужно придумать описание монстра, его запчасти или артефакта - я к вашим услугам)

     

    New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

    Русификатор для игры Vendetta: Curse of Raven's Cry

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

    Возвращаясь к смене визуала НПС. После долгих проб и ошибок получилось это:

    function test_visual_clear()


    local ltx = system_ini() -- Указали конфиги
    if ltx then
    local outfit = db.actor:item_in_slot(6) -- Как выглядит ГГ
    if outfit then
    local osect = outfit:section()
    local visual = ltx:r_string(osect, "actor_visual") -- Получили visual_name = actors\svoboda\stalker_sv_nauchniy.ogf
    local sim = alife()
    local obj = sim:story_object(9700) -- Вот и жертва.
    local pk = m_netpk.net_cse_visual(obj,nil) -- Запишем в пакет его visual_name
    if pk:isOk() then -- Если пакет записан верно
    local data = pk:get() -- получаем таблицу
    if data ~= nil then
    if visual ~= nil then
    data.visual_name = visual -- присвоим нужный визуал ; cse_visual properties
    pk:set(data) -- и наконец то присвоим изменение.
    local description = pk:dumpDesc() -- возвращает строку, содержащую читабельное описание пакета (его можно, например, вывести в лог)
    end
    end
    end
    end
    end
    end

    Вставлял в код проверки, всё проходит до data.visual_name = visual, а pk:set(data) уже не срабатывает. Как впрочем и смена визуала.

    В se_stalker.script добавил

    if self.cb_netpk then self.cb_netpk(self, packet) end -- коллбэк для изменения свойств пакета
    cse_alife_human_stalker.STATE_Write (self, packet)

    Подскажите, где ошибка.

    Использую m_netpk

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

    @ins33

    Не так давно, я тут находил схему "Компаньоны". Там, среди прочего, есть переодевание НПСа, взятого компаньоном, в более крутую броню. Это то, что тебе нуно. Подсмотри там, как реализовано...

     

    Насчет твоей ф-ции - чтоб применился новый визуал непися, необходимо "передернуть" его офф\он лайн. Это есть в m_netpk...

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

    @ins33, данные объекта читаются так:

    local pk = get_netpk(sobj)
    Ссылка на комментарий

    Сейчас написал так:

    function test_visual()
    local sobj = alife():object("esc_wolf")
    if sobj then
    local pk = get_netpk(sobj,0)
    if pk:isOk() then
    local visuals = {[[actors\hero\stalker_killer]]}
    local status = pk:setCallback( function(data)
    data.visual_name = visuals
    end )
    end
    end
    end

    Волк на долю секунды пропадает, поворачивается на ЮГ(?), визуал не меняет.

    Подскажите, где ошибка:

    local visuals = {[[actors\hero\stalker_killer]]}

    или тут

    data.visual_name = visuals

    Или у меня полностью не правильный подход?

    Изменено пользователем ins33
    Ссылка на комментарий

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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