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

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

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

  

Пытаюсь избавиться от зависимости от 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 ядер, 32 потока, 5.75 ГГц); 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

Ссылка на комментарий
03.02.2024 в 16:39, Balavnik сказал:

Например npc:id() прокатит? Или это метод клиента и не прокатит?

Прокатит-непрокатит, покатит-непокатит... вам не надоело в асфальтовый каток играться?

Можно же изначально писать функции устойчивые к нештатным ситуациям/готовые распознать что угодно в рамках разумно-ожидаемого.

function get_id(obj)
	if obj ~= nil then
    	if type(obj.id) == 'function' then return obj:id() end -- Если получен клиентский объект, возвращаем его ID
    	if type(obj.id) == 'number' then return obj.id end -- Если получен серверный объект, возвращаем его ID
    end
  	return nil -- Если объект не получен, или не имеет поля id в ожидаемом формате. Значит это не клиентский и не серверный объект, и возвращать нечего.
end

 

  • Нравится 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.

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

прекрасно работала

Так чего перестала??

  • Согласен 1

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

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

в диалоге

Ок.

2 минуты назад, Balavnik сказал:

А функция xyz прекрасно работала

И работает. Записывает координаты в глобальный вектор.

Таки он тебе зачем? :) "До определенного момента" - именно потому что глобальный...

  • Согласен 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.

Ссылка на комментарий
4 минуты назад, mole venomous сказал:

 чего перестала

Не удалось выяснить. 

 

3 минуты назад, Zander_driver сказал:

 он тебе зачем

Ну, я делал по образу и подобию солянок. Смотрел, какие конструкции там используются, и переносил в свои файлы. Проверял пару раз - работало.

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

Устал.

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

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

я делал по образу и подобию солянок.

Это очень плохой метод работы. Не рекомендую, так ты коллекционируешь чужие ошибки.

Ну и вообще, писать свой сырой код в _g.script это не то что моветон, а категорически противопоказано до тех пор пока ты не чувствуешь себя в скриптах как рыба в воде. _g.script инициализируется до всех остальных скриптов, до вообще всего, и он должен быть идеально отлажен, т.к. любые косяки в нем могут обрушить очень много чего.

Всякие тесты, пробы пера и т.д. и т.п. делай в своих сторонних файлах. Не в _g.script.

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

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

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

@Zander_driver Понял. А короткие имена делать или нет? Допустим я создал функцию create в balavnik_script, а в _g.script объявил переменную create = balavnik_script.create. Так можно делать? Иначе не очень удобно каждый раз обращаться.

Устал.

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

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

Так можно, но как правило не надо.

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

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

Метод вектора set не возвращает сам вектор.

А это тут при чём? Значения запишутся в pos_only через set и потом вернётся. return же прописан.
Имхо, хороший метод, при условии, что используется для разовой установки координат (для alife():create() тех же), в остальных случаях уже нужен свой vector().
 

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

А короткие имена делать или нет?

У нас лично используется для часто используемых функций, чтобы легче было к ним обращаться, но, как правильно @Zander_driver сказал, надо сначала чувствовать себя в скриптах как рыба в воде. :grin2:

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

а в _g.script объявил переменную create = balavnik_script.create. Так можно делать? Иначе не очень удобно каждый раз обращаться.

у тебя что миллион строк кода, что если ты будешь писать create вместо alife():create() или вместо balavnik_script.create? для текстового редактора при копи-пасте все равно в этом случае сколько символов копировать:)

  • Нравится 1
  • Смешно 1
Ссылка на комментарий
14 часов назад, Balavnik сказал:

Ну, я делал по образу и подобию солянок.

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

https://github.com/dsh2dsh/op2ogse

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

скажите, как сделать чтоб трассеры работали когда, глушитель установлен.

сразу благодарен.

 

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

Помогите решить проблему. При убийстве нпс оружие дропаеться (не всегда) со 100% состоянием как это фиксить? 

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

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

  • Жуть! 1
Ссылка на комментарий
7 часов назад, Colder сказал:

как это фиксить?

Изменять состояние оружия в death_manager.script, как надо тебе.

  • Нравится 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.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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