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

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

_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/

Я уперся только в то, что счетчик стоит на месте – сам апдейт есть.

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

Шпаргалка

@Norman Eisenherz 3 дня выясняли что не так с апдейтом, почему он не работает, даже в игру полез проверять, как оказалось, что все работало, а дело совсем в другом :facepalm:Я же об этом еще в этом посте спрашивал...

 

Значит кури класс CRenderDevice - https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkcijam-i-klassam/?do=findComment&comment=272244

 

time_global()\device().time_global() в меню использовать смысла нет, пробуй другие счетчики, например device().frame, а дельта между кадрами device().f_time_delta (у меня тоже нулевая, но я дальше главменю не загружал).

 

Работу всего этого можно тестить с включенным vsync, залочит на 60 кадров, без него будет улетать на сотни-тысячи, разницу в показаниях видно будет сразу, "другой ПК" не нужен.

 

P.S. Вопрос риторический - зачем считать время (его мы не получим), если можно считать скорость и расстояние (скролла)? Единственное, как учесть FPS, но это см. выше.

Изменено пользователем RayTwitty
  • Спасибо 1
  • Нравится 1

Telegram-канал RayTwitty Space

Эксперимент с device() описан чуть выше.

 

10 hours ago, RayTwitty said:

можно считать скорость и расстояние (скролла)

Их можно считать на уровне скриптов? Не просто править множителями до уровня "так пойдет"?

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

Шпаргалка

14 часов назад, Norman Eisenherz сказал:

Их можно считать на уровне скриптов? Не просто править множителями до уровня "так пойдет"?

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

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

  • Спасибо 1
  • Нравится 1

Telegram-канал RayTwitty Space

Подсветка при выборе смещается с шагом, равным высоте элемента списка – можно регулировать только частоту переключения. Отношение 5:1 или 50:1 – как раз результат теста в игре, и множители подставлены на уровне ощущений.

 

Движок обычный, и начинку я могу только читать.

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

Шпаргалка

@Norman Eisenherz если важно получить время, то скорее всего без правок движка никак. Или хотя бы расширить кастрированные луашные пространства имен ("лайтовые правки движка") - io, os и т.д. Вроде давно были эти библиотеки внедренные в xrLua.dll или проброшенные туда, без правки основного движка (xrGame.dll, .exe etc). Суть наводки - может быть можно будет получить текущее время системы в мс и уже это ловить на сталкерском апдейте вместо time_global().

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

Telegram-канал RayTwitty Space

Вопрос, как повесить функцию на взрыв гранаты (платформа ЗП, граната Ф-1 или РГД-5).  Например кидаем гранату и после взрыва используется аптечка (антирад, еда) или в месте взрыва появляется какой-нибудь предмет (мутант)?     

Или повесить функцию на исчезновение болта (после того как кинем, болт исчезает и на его месте пояляется предмет или используется предмет из инвентаря.

Кто-то делал дезориентацию НПС гранатой "Заря-2" в ТЧ? В OLR такой фишки нет...

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

Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится.

img.php?nick=Balavnik&sert=2&text=t6

Есть мод на умное выпадение частей монстров, если в кость запчасти попала пуля, часть не выдаётся. Так вот там кости учитываются по номерам. Вопрос - где номера эти костей в моделях смотреть? Как эта нумерация высчитывается?

@ted.80 , благодарю. Нашёл тулзу для просчёта, dump_ogf. Позволяет узнать всё о модели.

https://synthira.ru/load/drugie_igry/s_t_a_l_k_e_r/s_t_a_l_k_e_r_2/dump_ogf/24-1-0-3265

  • Спасибо 1
  • Нравится 1
  • Полезно 1

Ищу готовый скрипт, который обводит рамочками в оптике людей и мутантов.

Как добавить в скрипт проверку, что в опциях игры нажата определённая кнопка-"флажок"? Сама кнопка в опциях "Игра" успешно добавлена, флажок работает.

[ТЧ 1.0006]
Задача: добавить субтитры к звуку "val_rob_guard_jeer" – угроза от охранника на ферме в ТД после покупки "гаусски за 800".

 

В [xr_meet] приветствия вычитываются по шаблону "расстояние | анимация@звук | …" – добавлять в логику действие %…% без правок скрипта бесполезно.
Попытался просто вывести название звука в сообщение в указанных ниже местах скрипта – никакой реакции.

 

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

 

[Edit] После перезапуска игры обработался вызов meet_manager.sound. Снимаю вопрос.

 

Spoiler
[xr_meet.script]
function action_meet_wait:execute ()
	…
				xr_sound.set_sound(self.object, meet_manager.sound, nil, idle_timeout)
				sms(meet_manager.sound)				-- тут

…
function Cmeet_manager:update()
	…
		self.state,self.sound = self.state_zone,self.sound_zone
	else
		self.state,self.sound = self:process_meet()
	end

	sms(self.sound)					-- тут

 

 

Изменено пользователем Norman Eisenherz
  • Нравится 1

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

Шпаргалка

Снова нужна помошь, опять Новый Арсенал 7, соотв. ОГСР 2020г.
Мне нужно найти и удалить один предмет в инвентаре из нескольких одинаковых, когда делаю так:
 

local item, sil_items
		db.actor:iterate_ruck(
			function(dummy, item)
				if item.section == sil_sect then
					table.insert(sil_items, item:id())
				end
			end
		)
		if sil_items[1] ~= nil then 
			db.actor:mark_item_dropped(level.object_by_id(sil_items[1]))
			alife():release(alife():object(sil_items[1]))
		else
			return
		end

получаю ошибку вида "attempt to index a local sil_items (a nil value)"
Что я натворил не так?!

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

AMD Ryzen 5 3600, 32GB DDR4-3200, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, CoP SGM Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM, ОП-2.2 ZC!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

12 часов назад, Black_Raven_03 сказал:
local item, sil_items

 

Налицо ошибка объявления переменной. В таком виде движок ничего не знает о том, что sil_items - это таблица, и считает, что это простая переменная, значение по умолчанию которой - nil. Индексировать действительно нечего. Чтобы исправить ситуацию, достаточно в первой строке написать так:

12 часов назад, Black_Raven_03 сказал:
local item, sil_items = nil, {}

 

то есть присвоить начальные значения переменным явным образом.

  • Спасибо 1
  • Нравится 2
  • Полезно 1

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

@Black_Raven_03 При таких условиях можно прямо указать предмет:

local item = db.actor:object(sect)

if item then

   alife():release( alife():object( item:id() ) )

end

 

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

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

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

Шпаргалка

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

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

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

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

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

Войти

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

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

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