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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий
3 минуты назад, Overfirst сказал:

поглядеть, как воспроизведение партиклов реализовано в sr_particle.script

Побыстрому глянул, я так понял, что там апдейт проверяет партикл на проигрывание, если партикл "выключился" - то запускает его по новой...

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

Можно пример секции такого объекта?

не видит physic_object

Можете эту секцию скинуть, она наверно в system.ltx?

*Не нужно

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

Партикл - партиклу рознь. Есть бесконечные, есть те, для которых время ограничено. Последние - да, надо перезапускать, если еще нужны.

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

Есть бесконечные

Time_limit'а нет, может death убрать, что бы партикл играл бесконечно?

И по каким полям в СДК опрделить бесконечный ли партикл?

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

А death - это вообще где ?

И, да, я не уверен, что движок делает с партиклами, хранящимися внутри функций.

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

Так это вообще-то запуск другого элемента, когда закончился основной.

Вообще, на сколько я понял, запускается particle group, а не element, так ? Тогда время надо смотреть для каждого из элементов.

 

И, да, отключенные, но оставленные эффекты и элементы - хороший способ получить странных и загадочных вылетов.

 

p.s. Но вообще это все уже явно не скрипты.

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

Господа, вопрос.

Работаю на довольно сильно измененной скриптовой базе. В какой-то момент стал ловить вылет на юзании неписей, причем только генериков, и только когда по идее должны появиться стандартные фразы "Что интересного можешь рассказать?" и т.д.

Сидорович полностью рабочий. Диалог с Волком проходит безо всяких проблем, пока не тыкнешь "Я попробую" или "Не слабо. Но не пойду". Вылет не содержит никаких отсылок к LUA, лишь ни о чем мне не говорящий стектрейс:

 

stack trace:

0023:0773F45E xrGame.dll

 

Предыдущий снапшот папки scripts такой проблемы не содержит, но изменений с тех пор гора.

Сам вопрос: какова цепочка вызовов функций при юзании генерик-непися (в ванили)? Одним из первых, насколько понимаю, вызывается xr_motivator.motivator_binder:use_callback(). И судя по добавленному дебагу, он отрабатывает от начала и до конца. А далее?

Благодарю.

 

UPD: к слову, death_manager полностью рабочий. Сталкеры убиваются, инвентарь чистится, лут генерится в соответствии с дроп-секциями. Можно обыскать, стянуть предметы, никаких проблем.

UPD2: вылет исправил -- накосячил в dialog_manager. Но цепочку вызовов для общего развития все ж интересно узнать.

 

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

New Level Changer 5.08: Раритеты

ReapeR build 3: Раритеты

 

Я на YouTube: Vincent Vega

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

Доброго времени!

Помогите составить таблицу.

	if box:is_inv_box_empty() then
	  if box:section()=="box" then
		level.start_stop_menu(level.main_input_receiver(), true)
		alife():create("treasure_item", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
		alife():release(alife():object(box:id()))
	  end
	end

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

local box = {

"box",

"box_2",

"box_3"

}

Заранее спасибо.

Важнейшая задача цивилизации - научить человека мыслить.

Ссылка на комментарий
В 18.04.2018 в 22:49, Fenrir02 сказал:

нужна таблица секций рюкзаков

Ну так таблица уже есть. Тебе нужно в ф-ции проверить наличие конкретного тайника в этой таблице ? Тогда так:

таблицу лучше назвать к примеру 

local all_box_table = {"box","box_2","box_3"}
	if box:is_inv_box_empty() then
	  if all_box_table[box:section()] then
		level.start_stop_menu(level.main_input_receiver(), true)
		alife():create("treasure_item", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
		alife():release(alife():object(box:id()))
	  end
	end
  • Спасибо 1
Ссылка на комментарий

 

Оживил непись:

alife():release(obj) ..
obj = alife():create(spawn_id)

Пытаюсь сделать другом, в другом скрипте и не сразу.

		if obj and IAmAStalker[obj:clsid()] and obj:alive() and obj:name() == name then 
				printf("set friend %s",name)
				obj:set_relation(game_object.friend,db.actor)
		end

вылет attempt to call method 'set_relation' (a nil value)

Непись живая, на одном уровне с ГГ, воюет.

Почему может быть вылет?

Прошел Солянку, иду в NLC

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

@qwertyuiop судя по всему, obj у тебя является серверным объектом, а у него нет метода set_relation(). Этот метод есть только у клиентского объекта.

 

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

Вот сейчас интересненького (наверное) на поболтать принес.

Unfortunately, @Bak пока так и не объявился в сети, решил отзеркалить часть лички тут:

 

В 10.04.2018 в 15:11, The ReapeR сказал:

Салют!

 

Заметил интересную особенность с AI additions 2.0f4 для Теней. Я сейчас копаюсь со своим модом, подсмотрел в ZRP 1.09 (http://www.metacognix.com/files/stlkrsoc/index.html) механизм валидации основных модулей еще до открытия главного меню. Если вкратце, там в ui_main_menu добавляется переменная а-ля:

 

local all_good = db and modules and xr_logic

 

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

Ну и вот, если раньше все схемы загружались уже после загрузки спавна, то теперь это происходит дважды: при ините главного меню и на "Сервер: Старт" (тоже по вине ui_main_menu). На этом моменте спавн еще не загружен, clsids, скорее всего, не валидны, A-Life тоже.

А в rx_ai первой строчкой идет rx_utils.init() -> init_clsids() -> запрашивается куча клсидов, далее local alife = alife() и проч. В такой комбинации на нетспавне актора загрузка дропается с логом "attempt to access field actor_net_spawn (a nil value)" на строчке из bind_stalker if rx_ai rx_ai.actor_net_spawn(). Дебаг показал интересненькое: init_clsids() из rx_utils падает на запросе клсида актора, ни rx_utils, ни rx_ai, ни modules далее уже не читаются, потому движок LUA и не видит функцию.

 

Собственно, вопрос, чисто из спортивного интереса. Что в принципе правильнее: исправить инит rx_ai или не заигрывать с модулями (по идее, могу и то, и то)? Насколько адекватно загружать схемы в такую рань, и должны ли они все быть независимыми от этапа инита (SANB и все ванильные модули, включая xr_kamp с оттаскиванием трупов, загружаются без проблем)?

Спасибо)

 

В 15.04.2018 в 11:32, The ReapeR сказал:

А. Насчет дедманов из xr_kamp чуть наврал) Пришлось инит таблицы body_grab_bones перенести в конструктор, так как там запрашиваются клсиды.

По всем rx_* очмного различного инита выполняется за пределами функций, просто в теле. Полностью как следует прибраться пока не смог, загружаю схемы отдельно от вызова modules, позже, на ините спавна.

Кстати, насколько же шатка и зависима от условий загрузка схем в ванили: первый вызов modules приходится на get_stype() в xr_gulag, когда запускается первая gulag:beginJob() для, если не ошибаюсь, раненого Толика. То есть любое вмешательство в данную функцию, либо же референс к modules в каком-либо другом кастомном скрипте раньше данного места приведет к более ранней или поздней загрузке схем (или вообще незагрузке). Явно нигде схемы они не грузят, все юзание modules сводится к запросам значений stype_*.

 

М?

New Level Changer 5.08: Раритеты

ReapeR build 3: Раритеты

 

Я на YouTube: Vincent Vega

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

Ы ?

 

Как бы да, стартовая менюшка - сама по себе, пространства _G, game, level и еще много разных - сами по себе.

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

 

типа так: https://www.dropbox.com/s/miqjdrqmn95nbjn/_init.script?dl=0

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

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

А из-за чего и где неписю может добавляться во входные рестрикторы все аномалии на уровне, кто-нибудь может подсказать? Не всем неписям, только одному (пока одного выявил). Не могу никак разобраться, с какого аномалии ему добавляются. Другим как и положено - обычно по одному рестриктору, накрывающий смарт. В итоге у этого перца список создается длиной больше 4096 байт и игра падает.

Добавляются они в gulag:set_restrictions через add_restrictions, но откуда они взялись у этого нпс?

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

Выявил, что добавляются в amk_anoms.syncronize() (амк-шные динамические аномалии), оттуда корни растут. И почему-то одному неписю, который ничем непримечателен. Длиннющая строка всех аномалий записывается ему в рестрикторы. Ошибка неординарная, но может у кого было подобное. Не могу понять, откуда они тащатся и почему только ему одному.

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

@Zagolski, именно так и действует обход аномалий в АМК. Остальные НПЦ попадают в исключения, а ему одному подрубаются. Надо посмотреть в скриптах условия включчения схемы обхода аномалий. И использовать кстати любую другую схему обхода, по-моему во всех из них в рестрикторы пишутся не все аномалии на уровне, а только ближайшие.

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

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

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

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

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

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

Войти

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

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

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