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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
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 / Начинающий игродел на Unreal Engine / Мимокрокодил.

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@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 / Начинающий игродел на Unreal Engine / Мимокрокодил.

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@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  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

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

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

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

 

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

  • Спасибо 1
  • Согласен 2
  • Полезно 1

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил.

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.


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

--/ определяем название секции патронов в активном стволе 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!

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

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

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

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

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

Войти

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

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

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