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

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


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

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

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

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

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

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

 

 

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

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

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

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

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

Добавлено  HellRatz,

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

Не подскажите есть ли консольная команда на закрытие инвентаря?
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
Ссылка на комментарий

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

При изучении логов я нашел одну особенность - при количестве секций в аллспавне менее 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 ядер, 32 потока, 5.75 ГГц); 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
Ссылка на комментарий

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...

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

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

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 пользователей

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