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

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

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

Знать бы, что вы имеете в виду...

Метод, запрашивающий текущую величину кровотечения, возвращает число с плавающей точкой, т.е. float. Значения от 0 до X, где Х часто бывает намного больше единицы. Не знаю, какой там возможный максимум, при этих "больше единицы", ГГ склеивает ласты довольно быстро, за несколько секунд.

Тогда могли бы, пожалуйста, сказать при каком значении кровотечения, у ГГ (в цифрах. Допустим 0.5 или 1, я не знаю) в gamedata\configs\creatures\actor.ltx, параметр bleeding_v указывается.
В оригинале Зов Припяти этот параметр равен: bleeding_v = 0.002   ;потеря крови при номинальной ране в секунду
Но при каком значении кровотечения, у ГГ, будет вытекать 0.002 здоровья?

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

Но при каком значении кровотечения, у ГГ, будет вытекать 0.002 здоровья?

Понятия не имею. Как не имею и установленного оригинала ЗП на данный момент, чтобы это выяснять.

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

  • Спасибо 1

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

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

Господа, а каким образом можно реализовать сохранение\загрузку значения своей глобальной переменной? Условная глобальная переменная всегда будет иметь какое-то одно числовое значение, которое будет изменяться. Каким образом её правильно объявить как глобальную, чтобы она писалась в сейв и читалась потом? 

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

@_Sk8_AsTeR_, если на старых движках, то смотреть в сторону модуля se_stor от Artos`a, а если на движке OGSR, то почитать про script_vars_storage.

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

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

@_Sk8_AsTeR_, условную одну переменную, не занимающую много места (а числовое значение именно такое), вполне можно сохранять в pstor актора без огорода с дополнительными модулями или новыми движками - см. штатные xr_logic.pstor_store и xr_logic.pstor_retrieve и их применение в оригинале. Вот с таблицами, длинными строками или множественными переменными - другое дело, в этом случае уже стоит последовать совету @Zander_driver.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@Kirgudu, Приветствую! Твой метод работает, но при попытке сохраниться получаю:

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

Arguments     : LUA error: ....t.a.l.k.e.r\gamedata\scripts\fake_net_packet.script:60: bad argument #1 to 'len' (string expected, got table)
 

вот какой кусок кода для теста написал:

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

function edit()
local mmoney = xr_logic.pstor_retrieve(db.actor, bank)
	if mmoney == nil then 
		amk.send_tip("нил", "нил", 1, 15, "common_channel") --отчет что значение = нил
		xr_logic.pstor_store(db.actor, bank, 0) --сразу присвоем переменной нуль
	else
		xr_logic.pstor_store(db.actor, bank, mmoney + 100) --прибавим для теста соточку
		local itog = xr_logic.pstor_retrieve(db.actor, bank) 
		amk.send_tip(itog, itog, 2, 15, "common_channel") -- глянем что получается
	end
end

 

В итоге на экран у меня выводится значение переменной, которая увеличивается на 100 с каждым выполнением функции, т.е. всё работает, однако невозможно сохраниться. Что может быть?

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

@_Sk8_AsTeR_, функциями нужно пользоваться так:

Сохранение переменной: xr_logic.pstor_store(db.actor, "variable_name", value)

Загрузка  переменной: xr_logic.pstor_retrieve(db.actor, "variable_name", default_value)

Изменено пользователем naxac
  • Спасибо 1
  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@naxac, прошу прощения, а я вроде этим же синтаксисом и пользовался:

xr_logic.pstor_store(db.actor, "variable_name", value)  -- твое

xr_logic.pstor_store(db.actor, bank, 0) --моё

 

Где ошибка?

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

string expected, got table

Вот тут...

 

В 14.01.2020 в 10:51, Kirgudu сказал:

условную одну переменную, не занимающую много места (а числовое значение именно такое), вполне можно сохранять в pstor актора без огорода с дополнительными модулями или новыми движками

Одну то можно, но вы ж сами знаете, как это бывает. Где одна, там и две, а где две, там и десять. Вот человек только начал - а уже таблицы в сохранение отправляет.

Так шо я против пстора вашего, и против того чтоб его новичкам советовать.

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

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

xr_logic.pstor_store(db.actor, bank, 0)

Вот если б было написано "bank" - тогда да, то же самое по синтаксису. А так здесь используется некая переменная bank. Что в ней, не таблица ли?

2 часа назад, Zander_driver сказал:

Где одна, там и две, а где две, там и десять. Вот человек только начал - а уже таблицы в сохранение отправляет.

Полностью согласен! Но мы ж тут знания стараемся повышать. Я потому и написал специально: "одну переменную", да ещё и "с числовым значением". Разве что жирным и подчёркнутым не выделил. :)

Умный человек вычленит для себя важное, а глупому и модули с движком не помогут.

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

Что в ней, не таблица ли?

Кстати, интересный момент. Я эту переменную bank вприцнипе нигде и никак не объявлял. Ф-ция pstor_store тем не менее все равно ею оперирует. В какой момент движок начинает думать что это таблица? 

UPD

Аааааа, имя переменной в кавычки, хы.

Проблему устранил, снимаю шляпу перед @Kirgudu 

Тут же вопрос по теме, каким способом и какова вероятность убить сейвы подобными манипуляциями? Есть у вас печальные примеры?

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

Печальные примеры есть у каждого мододела, кто более-менее глубоко погружался в правки скриптов. Моё мнение: если делаешь фигню, но не замечаешь и не исправляешь её, вероятность очень высокая. Особенно плохо, когда последствия вылезают не сразу, вот как сейчас, а где-нибудь на другой локации и спустя несколько часов игры - в таких случаях причину диагностировать бывает очень трудно.
А конкретику для данного случая тебе только двигоправы скажут.

 

Отдельно хочу ещё раз - в дополнение со своей стороны - указать на то, что написал @Zander_driver. Всё это тут не раз объяснялось, но лишний раз повторить не помешает.

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

 

Данные любого объекта, в том числе актора, передаются от клиента к серверу и обратно посредством так называемого нет-пакета, имеющего весьма ограниченный размер. В ТЧ это примерно 8 КБ, в ЧН и ЗП - 16. Учитывая то, что в пстор актора, а значит и в соответствующий нет-пакет, уже пишутся данные в добром десятке, если не больше, модулей оригинала, на долю скриптёра остаётся совсем немного доступного объёма. Именно поэтому:
- добавить в пстор одну-две-три переменные, имеющие простой тип (число, логическое значение, строку, гарантированно имеющую небольшую длину), и на этом остановиться - можно.

- добавить в пстор сегодня 1-2-3 переменные, завтра ещё столько же, потом забыть и через месяц добавить ещё пяток, потом ещё - нельзя! Смотреть в сторону модуля se_stor или нового движка.

- добавить в пстор переменную типа "строка", предельная длина которой неизвестна (и может составлять тысячи знаков) - нельзя! Смотреть в сторону модуля se_stor или нового движка.

- добавить в пстор переменную типа "таблица" - нельзя! Смотреть в сторону модуля se_stor или нового движка.

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

Можно ещё контролировать размер нет-пакетов посредством лога (см. штатные вызовы метода set_save_marker(...), особенно в ответственном за актора модуле bind_stalker), но это уже более высокий пилотаж.

Тогда в большинстве случаев проблем с переполнением нет-пакетов удастся избежать.

 

 

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

@_Sk8_AsTeR_, либо они, либо искажение/потеря каких-либо данных после загрузки. (Второе, как я уже писал, не всегда заметно сразу! Поэтому контроль и ещё раз контроль записи чего-либо куда-либо.)

Например, в одном из модов для ЧН это приводило к тому, что инвентарь какого-либо НПС начинал содержать абсолютно невразумительный набор предметов, а при взаимодействии с этим НПС (с целью, скажем, торговли) следовал вылет.

Поройся в поиске, тут хватает нужных сведений.

Изменено пользователем Kirgudu
  • Спасибо 1
Ссылка на комментарий
11 часов назад, _Sk8_AsTeR_ сказал:

симптоматика

Частенько вылет со ссылкой на ф-ию actor_binder:load(reader) при загрузке уровня сложности из bind_stalker

А если игра загрузилась, многое, что висело на таймерах, не работает.

Изменено пользователем mole venomous
  • Спасибо 1

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

Ссылка на комментарий
В 16.01.2020 в 17:33, _Sk8_AsTeR_ сказал:

@Kirgudu, а какая симптоматика при  переполнении нет пакетов? Битые сейвы, или ещё чего? 

Чаще всего вылеты при загрузке сейва с руганью на несуществующую секцию, что-то типа "ac" или нечто подобное.

  • Спасибо 1

Сталкер - наше всё!

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

Здрасьте.

 

Делаю перебор пустующих, но все еще отмеченных тайников. Запуск после прогрузки (скажем, при использовании бинта) проходит успешно – с выводом списка. Запуск из actor_binder:net_spawn(data) проходит без какого-либо результата – видимо, тайники/метки еще не успевают прогрузиться. Как правильно отложить запуск скрипта, чтобы получать список сразу после загрузки? Пробовал условия if alife(), if level.present(), if device().precache_frame <= 1 – без эффекта.

 

На всякий случай, код:

Spoiler

function search()
	for sid = 5000, 5480 do
		local stash = level_object_by_sid(sid)
		if stash then
			if level_tasks.is_map_spot_present(sid, "treasure") and stash:is_inv_box_empty() then
				local ini = ini_file("misc\\treasure_manager.ltx")
				local n = ini:line_count("list")
				for i = 1, n do
					local useless, sect, empty = ini:r_line("list", i, "", "")
					if string.len(sect) > 0 and ini:r_u32(sect, "target") == sid then
						local name = game.translate_string( ini:r_string(sect, "name") )
						news_manager.send_tip(db.actor, sid .. ": " .. sect .. " = " .. name)
					end
				end
			end
		end
	end
end

 

 

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

Шпаргалка

Ссылка на комментарий
58 минут назад, Norman Eisenherz сказал:

Запуск из actor_binder:net_spawn(data) проходит без какого-либо результата – видимо, тайники/метки еще не успевают прогрузиться.

Не успевают прогрузиться клиентские объекты, да.

 

Тут можно двумя путями пойти.

1) Переписать все действия на работу с только серверными объектами. Оно как бы можно :rolleyes: и тогда спокойно вызывать из нет_спавна актора. Я бы так делал...

2) После нет_спавна подождать некоторое время. 5 секунд например. И тогда уже вызывать свои манипуляции с объектами клиентскими.

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

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

1. Если под проверкой серверных объектов имеется в виду проверка меток напрямую через story_id тайников, то такая проверка выдает все известные тайники на локации, включая те, что давно облутаны и уже не имеют видимых меток.

2. Вот я и спрашиваю, как научить скрипт ждать. Мне известен только костыль через level.client_spawn_manager с ожиданием регистрации лишнего объекта и последующим его удалением, но это занимает не больше 0,5 с.

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

Шпаргалка

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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