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

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

8 минут назад, Labadal сказал:

где вызывать эти функцию?

 

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

при загрузке игры читай оттуда сохраненное значение

 

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

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

@AndreySol 
Есть некий предмет ,который:
1. возможно использовать только когда надет костюм
2. при каждом использовании отнимает одну энергию этого костюма

В целом, нужно: записывать переменную при сохранении/читать при загрузке/присвоить ей значение 10 в начале игры

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

God save Hatsune Miku!

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

что это означает процент шанса

В оригинале вероятность появления новых артов в аномалиях после выброса 17%. 

 

10.11.2021 в 09:44, Space.Marine сказал:

if math.random(1,100) > 17 then

 

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

Сохранить, вроде как, получилось. 
При сохранении такой вылет: 

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

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...shadow of chernobyl\gamedata\scripts\xr_logic.script:1181: attempt to index local 'obj' (a nil value)

как только не загружал: 
load_variable("energy")
load_variable(energy)
load_variable("energy",nil)
load_variable("energy",0)

 Варианты?

upd: ошибся, данный вылет при загрузке сейва. 
При сохранении всё работает. 

 

Есть, конечно, вариант, что я вызываю функцию не там, хотя не знаю, вызов идёт в самом конце функции function actor_binder:load(reader) в бинде сталкера

 

God save Hatsune Miku!

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

вызов идёт в самом конце функции function actor_binder:load(reader) в бинде сталкера

Лучше, на мой взгляд, загружать сохраненное в net_spawn в том же биндере, после строки db.add_actor(self.object). Не знаю, что за load_variable у тебя, но если использовать штатные ф-ции(которых примеры тебе выше уже привели), то все должно работать.

 

Цитата

присвоить ей значение 10 в начале игры

Это делай в скрипте, ранее загрузки сохраненного значения.

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

@AndreySol 

load_variable это как раз и есть та функция, что мне выше привели

-- Загружаем переменную
function load_variable(variable_name, value_if_not_found)
   return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)
end

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

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

God save Hatsune Miku!

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

Варианты?

Вообще-то. Варианты зависят от того, какова цель всего этого действа.

Если а) Сделать комбез с энергопитанием. То можно брать давно сделанные (Более 10 лет назад!!!), готовые, отработанные и надежные решения. Ну или поискать другие готовые аналоги, если этот чем-то не нравится. аналогов за 10 с лишним лет, сделано было предостаточно.

Если б) Разобраться в скриптах, освоить луа, "сделать самому". (На самом деле единственная внятная причина, объясняющая почему не взять готовое) - то можно было бы, свои вопросы на форуме адресовать не телепатам, а обычным форумчанам. Так скорее помогут, правда. Пока в твоих постах нет ни твоего кода, ни логов вылетов, они адресованы скорее телепатам и гадалкам. Некоторые конечно пытаются угадывать, что там у тебя происходит. Правильно ли они угадывают? Это никому не известно. Если ты хочешь разобраться, то множить неизвестные - не лучшее решение.

  • Спасибо 1
  • Согласен 3

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

2. Научится при загрузке сохранения её считывать оттуда

Как минимум, хочу именно в этом разобраться.  

God save Hatsune Miku!

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

1. Научится сохранять переменную в Pstor

local x = 10 -- твоя переменная
xr_logic.pstor_store(db.actor, "my_unique_x", x) -- Сохранена.

 

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

при загрузке сохранения её считывать оттуда

local def_val = 0 -- Значение по умолчанию. Если окажется, что переменная не сохранялась
local x = xr_logic.pstor_retrieve(db.actor, "my_unique_x", def_val) -- Загружено.

 

  • Спасибо 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.

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

@Zander_driver вот результаты: 
 

Скрытый текст
В файле en.script обьявляю переменную:
energy = 10
В файле bind_stalker.script: 
Сохраняю: 
В функции function actor_binder:save(packet) таким образом: xr_logic.pstor_store(db.actor, "nrg", en.energy)
Загружаю: 
В функции function actor_binder:net_spawn(data) после строчки: db.add_actor(self.object) таким образом: 
	 
local test = 5 
en.energy = xr_logic.pstor_retrieve(db.actor, "nrg", test)

что в итоге: 
При начале новой игры в переменной energy присваивается не 10, как указано в файле en.sctipt, а значение локальной переменной test - из кода загрузки. 
В последующие сейвлоады, при каждой загрузке, ей присваивается значение 5, а не то, которое было сохранено.

 

Скрытый текст
В файле en.script обьявляю переменную:
energy = 10
В файле bind_stalker.script: 
Сохраняю: 
В функции function actor_binder:save(packet) таким образом: xr_logic.pstor_store(db.actor, "nrg", en.energy)
Загружаю: 
В функции function actor_binder:load(reader) таким образом: 
local test = 5 
en.energy = xr_logic.pstor_retrieve(db.actor, "nrg", test)

что в итоге:
При загрузке происходит вылет, с таким вот логом: 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...shadow of chernobyl\gamedata\scripts\xr_logic.script:1181: attempt to index local 'obj' (a nil value)

 

 

Помимо прочего: Я выводил в лог значение сохраненной переменной - сохраняет оно правильно. 

God save Hatsune Miku!

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

load_variable это как раз и есть та функция, что мне выше привели

Не нужная совсем обертка.

 

Попробуй сохранять значение в net_destroy биндера, в самом начале ф-ции.

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

В оригинале вероятность появления новых артов в аномалиях после выброса 17%. 

 

 

Что интересно, в скинутом вами файле этого куска кода просто нет. И, если верить описанию мода, это даёт 100% вероятность спавна. 
Опять же, нихрена бы этого не понял без разъяснений - спасибо.

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

@Labadal, а зачем в функциях actor_binder:save/load использовать pstor? У них же есть свой net_paket?

 

В функции function actor_binder:save(packet):

   packet:w_float(en.energy)

В функции function actor_binder:load(reader):

   en.energy = reader:r_float()

 

Разместить в конце функций, начать новую игру.

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

S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)

Ссылка на комментарий
4 часа назад, Labadal сказал:
При загрузке происходит вылет, с таким вот логом:

При загрузке actor еще не зарегистрирован в db. Поэтому db.actor == nil, о чем лог и сообщает. Запись в пстор вообще говоря, удобнее делать где-нибудь до сейва.

А если именно в save и в load, то лучше через net_packet, как выше уже сказали.

 

P.S. Добавлю только. Для разобраться и для маленьких правок оно конечно нормально, но если захочется сохранять такими методами много всякого разного - следует помнить о том что размер нетпакета ограничен. И, пстор тоже пишется в тот же нетпакет.

  • Спасибо 1
  • Согласен 2
  • Полезно 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.

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


Доброго дня, нашёл такую функцию: 

--/ определяем название секции патронов в активном стволе NPC
function Get_ActiveAmmoSection(oNPC) --/< (npc or nil)
  if not oNPC then oNPC = db.actor end
  local oItem = oNPC and oNPC:active_item()
  if oItem and isWeapon(oItem) then --/ проверка: оружие ли в руках?
    local soWeapon = sim:object(oItem:id())
    if soWeapon then
      local iAmmoType = Get_AmmoType(soWeapon) --/< получаем тип патронов в стволе
      if iAmmoType then
        return Get_AmmoSection(oItem:section(),iAmmoType) --/> "ammo_section" (or nil)
      end
    end
  end
  return nil --/>
end

Но при использовании ругается на sim 
Кто нибудь знает, что это и где его объявить?
В lua helper есть похожая функция, там переменная sim объявлена как:

local sim             = nil --/ переменная, кеширующая функцию alife()

Или, может кто знает другой способ узнать секцию патронов в активном слоте

God save Hatsune Miku!

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

Как можно отследить выстрел из оружия? 
Точнее, вопрос даже в том, можно ли?

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

God save Hatsune Miku!

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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