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

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

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

@Balavnik у тебя неправильная функция, чтоб убить например Фаната, тебе надо найти его уникальный номер объекта SID, который прописывается в алл-спавне и можно найти или там или в оригинальном файле game_story_ids.ltx для ТЧ там все основные персы прописаны, тогда ты можешь удалить именно этот объект, а не просто какой-то объект с секцией Фаната, которых ты можешь наспавнить спавнеров хоть сто штук:) а тебе нужен один единственный,который спавнится в начале игры через алл-спавн, и для этого нужны эти SIDы чтоб обратиться конкретно к этому уникальному объекту :

 

local npc = level_object_by_sid(тут пишешь ID Фаната)

if npc then
    npc:kill( npc )  ---- типа самоубийство

 

 

  • Полезно 1
Ссылка на комментарий
  • Спасибо 1
  • Нравится 1
Ссылка на комментарий

@CiberZold А можно как-то выудить этот айдишник без открытия сторонних файлов? Например npc:id() прокатит? Или это метод клиента и не прокатит?

P.S.  Никак не могу разобраться с этим, и так крутил, и эдак... Результат один -  attempt to nil value. Даже при использовании амк-функций, работающих везде, кроме моего скрипта.

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

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

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

Можно получить ссылку на онлайн-объект NPC через диалог с ним: motivator_binder:use_callback + проверка obj:alive(). После этого как раз можно читать obj:id().

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

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

Шпаргалка

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

Ранее спрашивал такой вопрос про то ,что странно в моде на ОГСР НПС продавали всё своё оружие, думал что в движке поменяли торговлю, но на днях другой мод перевёл на ОГСР и там НПС оружием основным не торговали, стал ковыряться в оригинальных файлах торговли и выяснил причину:

 

в оригинале ТЧ оказывается всё работает также, но там ПЫСы заморочились и почти все предметы в игре прописали как неторгуемые в trade_generic.ltx ( это главный файл конфига торговли для всех НПС у которых в логике не задан отдельный файл торговли) не важно квестовый непись или симуляционный, если у него нет файла торговли, то торговать он будет через trade_generic.ltx, а там всё что он не покупает и не продаёт должно быть указано, если чего-то не указать он этим торгует с ценами по себестоимости , наряду с теми вещами, что прописаны с конкретными значениями после знака =, так вот в первом моде ничего не было прописано кроме квестовых предметов, потому неписи торговали всем своим оружием, а втором моде - неписям разрешено было торговать только ПМ и обрезами, а остальным оружием - нет, а в оригинале получается НПС, которые не имели своего торгового файла по дефолту в trade_generic вообще никаким оружием не торгуют, потому создавалось впечатление, что не торгуют оружием которое в данный момент в слоте.

 

11 часов назад, Balavnik сказал:

А можно как-то выудить этот айдишник без открытия сторонних файлов?

это стори ид его задаёт сам создатель игры/мода для удобства, ПЫСы например не стеснялись чуть ли не каждой собаке и дверной ручке давать свой SID, так и ты когда делаешь мод, сам задаёшь эти айдишники в аллспавне под будущие квесты или сценки, или что-то надо заспавнить по ай-дишнику в определённый момент объект из алл-спавне по скрипту, Фанат спавнится в оригинале по инфопоршню в аллспавне перед походом в X18 но у него тоже есть свой sid, если в скриптах например в его квесте надо будет у нему обратиться, например что его убить и т.п.

вообще удобная вещь, например есть объект с sid=203  -

чтоб получить клиентский объект пользуем level_object_by_sid (203) как выше писал.

чтоб получить серверный объект - alife():story_object(203), чтоб например вообще удалить объект из игры.

чтоб заспавнить объект из аллспавна  - alife():spawn_id(203), но если он уже есть то игра вылетит, это подходит если объект сначала был удалён из игры, а потом его надо вернуть.

Изменено пользователем CiberZold
  • Нравится 1
Ссылка на комментарий

Ну вот, как-то поломал глобальное пространство имён... От ошибок кругом голова :gamer3:

Вылет при попытке создания объекта через xyz

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

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...of chernobyl\gamedata\scripts\balavnik_script.script:71: attempt to call global 'xyz' (a nil value)

 

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

pos_only = vector()
function xyz(x,y,z)
    return pos_only:set(x,y,z)
end

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

 

Вылет при попытке создания объекта методом alife:create() Вылет с логом LUA error: scripts\_g.script:1331: attempt to index global 'alife' (a function value)

Изменено пользователем Balavnik
  • Жуть! 1

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

Ссылка на комментарий
1 час назад, Balavnik сказал:

attempt to call global 'xyz' (a nil value)

Покажи код, где ты используешь эту функцию.

 

1 час назад, Balavnik сказал:

alife:create()

Правильно будет alife():create()

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

Покажи код

Вот.

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

function spawn_medusa()
    create("af_medusa", xyz(-124.543, -26.33, -477.87), 127456, 11)
end

 

 

 

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

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

@Prophet13  Точно. Скрин. Уж всё попробовал: амк переустанавливал с переносом моих скриптов, и перераспаковывал геймдату.

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

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

@Balavnik Могу наверно только сказать, что проблема в 1.0004 версии, ибо оригиналы кривее некуда)
Если в _G имеются какие-либо классы, то их стоит переместить в отдельные скрипты, Luabind перестаёт инитить код после кода класса. В мод. движках это всё пофикшено.

Изменено пользователем Prophet13
  • Полезно 2
Ссылка на комментарий

  

Пытаюсь избавиться от зависимости от db архивов.

Настала очередь скриптов, застрял на таком вылете:
 

Спойлер

[04.02.24 20:02:17.294] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR:
e:\hope for life\gamedata\scripts\se_stalker.script:76: attempt to call method 'alive' (a nil value)
stack traceback:
    [C]: in function 'alive'
    e:\hope for life\gamedata\scripts\se_stalker.script:76: in function <e:\hope for life\gamedata\scripts\se_stalker.script:63>
[04.02.24 20:02:17.295] *********************************************************************************
[04.02.24 20:02:17.295]
FATAL ERROR

[error]Expression    : FATAL ERROR
[error]Function      : CScriptEngine::lua_pcall_failed
[error]File          : E:\OGSR-Engine-dev\Perimetr\ogsr_engine\COMMON_AI\script_engine.cpp
[error]Line          : 52
[error]Description   : [CScriptEngine::lua_pcall_failed]: e:\hope for life\gamedata\scripts\se_stalker.script:76: attempt to call method 'alive' (a nil value)

[04.02.24 20:02:17.295] ***************************[ScriptCrashHandler]**********************************
[04.02.24 20:02:17.295] stack traceback:
    [C]: in function 'alive'
    e:\hope for life\gamedata\scripts\se_stalker.script:76: in function <e:\hope for life\gamedata\scripts\se_stalker.script:63>
[04.02.24 20:02:17.295]     Locals:
[04.02.24 20:02:17.295]      string (*temporary) : e:\hope for life\gamedata\scripts\se_stalker.script:76: attempt to call method 'alive' (a nil value)
[04.02.24 20:02:17.295]     End
[04.02.24 20:02:17.295]     Locals:
[04.02.24 20:02:17.295]      Userdata: self
[04.02.24 20:02:17.295]              boolean self.ini_initialized : true
[04.02.24 20:02:17.295]              boolean self.death_droped : false
[04.02.24 20:02:17.295]              boolean self.dont_spawn_online : false
[04.02.24 20:02:17.295]              Table: self.spawner
[04.02.24 20:02:17.295]                      table self.spawner.1 : [...]
[04.02.24 20:02:17.295] Can't dump script call stack - Engine corrupted

Кидаю все скрипты с анпака db архивов - вылет остаётся, возвращаю db архивы - исчезает.
Добавлял меши, конфиги, скрипты с db архивов не возвращая сами db архивы - вылет остаётся.

Куда копать?

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

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

Пытаюсь избавиться от зависимости от db архивов

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

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

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

С проблемкой разобрался - видать случайно когда-то лишнего закинул в распакаванную игру.
В db.script было:
actor = {}, вместо actor = nil.

  • Нравится 1

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

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

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

Ссылка на комментарий
22 часа назад, Balavnik сказал:

pos_only = vector()
function xyz(x,y,z)
    return pos_only:set(x,y,z)
end

Метод вектора set не возвращает сам вектор. А только записывает в него значения. Поэтому такая функция будучи расположенной в _g.script, (И в других скриптах тоже) вернет nil.

А зачем тебе глобальный вектор?

23 часа назад, Balavnik сказал:

Вылет при попытке создания объекта методом alife:create() Вылет с логом LUA error: scripts\_g.script:1331: attempt to index global 'alife' (a function value)

Функция alife() возвращает объект алайфа.
А глобальное пространство имен _g.script, если я верно помню, читается и выполняется до его создания. Так что заниматься спавном чего-то/кого-то непосредственно в _g.script очень глупая идея. Куда спавнить-то, если еще никакую локацию не загрузили. Но, функции для спавна в _g.script располагать можно. Надо только помнить о том, что вызывать их можно при уже загруженной локации, не раньше.

Ты свой спавн когда вызываешь?

  • Согласен 2

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

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

@Zander_driver Вообще я вызываю в диалоге. А функция xyz прекрасно работала до определённого момента. 

Человек измученный нарзаном.

img.php?nick=Balavnik&sert=2&text=t6

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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