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

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

Upd: кстати, вот только в новой соли аналогичную проблему поймал. Правда там вылетает прямо при сохранении. Разбираюсь. Конкретно смотрю, что  у кого сохраняется, и где повиснет.

Ссылка на комментарий
function motivator_binder:save(packet)
--    printf("motivator_binder:save(): self.object:name()='%s'", self.object:name())
    object_binder.save(self, packet)

    packet:w_bool(self.treasure_processed)

    xr_logic.save_obj(self.object, packet)
    dialog_manager.save(self.object, packet)
    trade_manager.save(self.object, packet)
end

Собственно вот, больше там ничего нет.

Учитывая что у меня на руках есть сейв где при загрузке - виснет, но нету такого с которого я мог бы сохраниться и получить суть проблемы в методе save(), а сама проблема пока встретилась единственный раз - я не совсем представляю как мне это ловить...

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

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

local save_ok = 0

function motivator_binder:save(packet)

if save_ok ~= 0 then bind_stalker.error = true; abort( ... ) end

object_binder.save(self, packet)

save_ok = 1

и т.д. после каждой строчки,

save_ok = 0

end

 

В обновлении актора - проверка error и вылет с руганью.

 

 

Для xr_logic я где-то давал код сохранения/загрузки с контролем по осмысленности прямо по ходу действия. Там вылет более надежен, и не надо проверять конец пакета в биндерах.

Изменено пользователем Dennis_Chikin
  • Спасибо 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.

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

@Zander_driver, то, что там 6 строчек - это ничего не значит. Вот тот же trade_manager прекрасно может битый сейв сделать. Из свежих воспоминаний. Соляночный Седой на АТП. Из-за наличия легкого бреда в конфиге торговли, сейв с ним в онлайне получался битый.

Но уже полученный убитый сейв получается никак не оживить

Ну почему не оживить. По тому, что ты показывал, у тебя не записалась онлайновая часть для Сахарова. Ну и бог бы с ним. Убери в скрипте для него abort, загрузись и переспаунь инвалида.

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

Да это то понятно) и одна строчка может бред сотворить.

Меня таки интересуют мои возможности выяснить причины проблем, не дожидаясь когда это всплывет второй раз.

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

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

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

Ранее был известен под ником BoBaH_671.

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

А как заставить Lua работать с Русскими буквами? Вот код и он не работает:

local say = "Гора" -- Текст на Русском языке

local say = say:match("(.)$")

function as()
if say == "а" then
print(say)
end
end

as()

print(say)

Выдает вот такой символ: "�". А сама функция не работает

  • Согласен 1
Ссылка на комментарий
@Dennis_Chikin, что не так? Повторю. Как можно вызывать функции из других скриптов, при это не указывая их имя(скриптов, разумеется). Вот есть _1.script, в нем функция 123, как её вызвать из других скриптов без указания имени скрипта? _1.123(), а я хочу 123(). Где надо свои скрипты регистрировать, чтобы это работало?

Ранее был известен под ником BoBaH_671.

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

 

 

Где надо свои скрипты регистрировать, чтобы это работало?

 

Я не заморачиваюсь с принцпиальностью. Этот твой вызов местного значения, для конкретного документа. Трудно ниже создать функцию?

function 123()

end

 

Неужели твоя функция такая важная, что бы её можно было внедрять в других документах, по твоему желанию. Даже разрабы незаморачивались и делали _1.123()

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий
@Дизель, ну я же задал вопрос. Ответа в твоём посте что-то не вижу, по делу, пожалуйста. Какая разница, для каких мне целей оно надо? Для удобства.

Ранее был известен под ником BoBaH_671.

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

Вот теперь понятно.

 

function _G.blabla()

...

end

 

Или function blabla()

...

end

 

_G.blabla = this.blabla

 

В обоих случах скрипт должен быть сначала хоть раз откуда-нибудь вызван с любой целью.

хоть дернуть за function init() end

 

 

или, для текущего скрипта this.blabla = 123.blabla

и далее везде можно писать просто blabla()

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

@Дизель, give_info, abort. Только они зареганы в _g.script, а я хочу в своём файле сделать подобное.

 

Денис, спасибо, сразу твой пост не заметил. С телефона просто...

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

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий
_g.script,

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

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

andreyholkin.gif

rod_cccp.gif

 

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

Этот файл не является "родительским". Он является запускаемым по умолчанию.

http://www.lua.ru/doc/6.html

 

Практическое применение, из модифицированного amk.script:

 

this.parse_custom_data = parse_custom_data -- для идиотов, устраивающих "войны правок"

this.gen_custom_data = gen_custom_data

 

local force_offline = _G.force_offline

if not force_offline then

force_offline = {}

_G.force_offline = force_offline

end

convert_npc = force_offline

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

Добрый день. Где же я упустил ошибку?:

local number = 10
say_tbl_one_ru = {  -- Таблица с русскими ответами. 'Угадай число';
"Не верно. Чуть больше.",
"Не верно. Чуть меньше.",
"Вы угадали! Число равно:"
}
local complexity = 'esay' -- 'esay' - Легко; 'normal' - Срдне; 'hard' - Хардкор; 'random' - Рандомное число от 100, до 10000

function gl()
if complexity == 'esay' then
local cly = 25
elseif complexity == 'normal' then
local cly = 100
elseif complexity == 'hard' then
local cly = 1000
elseif complexity == 'random' then
local ran_data = math.randomseed(os.time())
local ran_data = math.random(100, 10000)
local cly = ran_data
local num = math.random(1, cly)
if number < num then
print(say_tbl_one_ru[1])
elseif number > num then
print(say_tbl_one_ru[2])
elseif number == num then
print(say_tbl_one_ru[3])
end
end
end

gl()
Изменено пользователем Kober(BRUC)
Ссылка на комментарий

@Kober(BRUC)

1. "local cly = 25" и т. п., если не ошибаюсь, видно только в пределах своей ветки if ... else. Следует объявить переменную до if, а внутри только задавать значение.

2. math.randomseed результат не возвращает, а только задаёт случайное смещение для последующего math.random. Присваивание переменной в данном случае лишнее.

3. Выбор фразы для печати ты делаешь в одной из веток внутри if, а не за пределами оного. Конкретно, печать у тебя происходит только в случае опции "random".

4. Судя по всему, навыки чтения кода у тебя не очень высокие. В этом случае, чтобы делать меньше ошибок, будет хорошей практикой использовать отступ для вложенных элементов.

local number = 10
say_tbl_one_ru = {  -- Таблица с русскими ответами. 'Угадай число';
  "Не верно. Чуть больше.",
  "Не верно. Чуть меньше.",
  "Вы угадали! Число равно:"
}
local complexity = 'esay' -- 'esay' - Легко; 'normal' - Срдне; 'hard' - Хардкор; 'random' - Рандомное число от 100, до 10000
 
function gl()
  if complexity == 'esay' then
    local cly = 25
  elseif complexity == 'normal' then
    local cly = 100
  elseif complexity == 'hard' then
    local cly = 1000
  elseif complexity == 'random' then
    local ran_data = math.randomseed(os.time())
    local ran_data = math.random(100, 10000)
    local cly = ran_data
    local num = math.random(1, cly)
    if number < num then
      print(say_tbl_one_ru[1])
    elseif number > num then
      print(say_tbl_one_ru[2])
    elseif number == num then
      print(say_tbl_one_ru[3])
    end
  end
end
 
gl()

local number = 10
say_tbl_one_ru = {  -- Таблица с русскими ответами. 'Угадай число';
  "Не верно. Чуть больше.",
  "Не верно. Чуть меньше.",
  "Вы угадали! Число равно:"
}
local complexity = 'esay' -- 'esay' - Легко; 'normal' - Срдне; 'hard' - Хардкор; 'random' - Рандомное число от 100, до 10000
 
function gl()
  local cly
  if complexity == 'esay' then
    cly = 25
  elseif complexity == 'normal' then
    cly = 100
  elseif complexity == 'hard' then
    cly = 1000
  elseif complexity == 'random' then
    math.randomseed(os.time())
    cly = math.random(100, 10000)
  end

  local num = math.random(1, cly)
  if number < num then
    print(say_tbl_one_ru[1])
  elseif number > num then
    print(say_tbl_one_ru[2])
  else
    print(say_tbl_one_ru[3])
  end
end
 
gl()

 

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

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

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

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

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

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

Войти

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

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

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