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

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


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

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 ядер, 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.

Ссылка на комментарий
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
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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