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

Скриптование


Svoboда

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

Я зря что-ли столько времени убил на это руководство?

Блин, чувак, ну а как ты это руководство выложил? Неизвестно где, неизвестно когда. Тут же нет телепатов, чтобы знать, что кто-то там делал мануалы. Да банально в подпись забить и ссылку в шапку - уже какой-то прок будет.

 

Мне например тоже интересна некоторая информация, но ведь её же не найти...

 

З.Ы. мануал на родном языке - вдвойне приятно, спасибо.

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Интересно, а можно ли скриптом добавить к игровым объектам новый метод (например: db.actor:my_method())? По идее, достаточно иметь ссылку на CScriptGameObject, но вот я что-то не припомню, есть ли такое в оригинале...

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Примерно так

Спасибо, немного переделал таким образом:

local game_object = {}
local game_object_mt = getmetatable(db.actor)
local game_object_idx = game_object_mt.__index
function game_object_mt.__index(t, k)
	return game_object[k] or game_object_idx(t, k)
end

-- методы
function game_object.get_id(self)
	if self:is_game_object() then
		return self:id()
	end
	return -1
end

-- вызовы
log1("id = "..db.actor:get_id())
log1("id = "..db.actor:active_item():get_id())
Всё пашет, только онлайновый актор нужен)) Изменено пользователем Shadows
  • Полезно 1

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Вместо method(obj) писать obj:method()? Явно же не для подобного.

Например для совместимости кода от разных платформ.

 

Я вижу, что ты сделал только для actor-а.

Для оружия, коробок, неписей и т.д. этот код также работает. Я же там не спроста вывожу айди для активного предмета в руках. Изменено пользователем Shadows

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Даже не знаю куда писать... Либо сюда, либо сразу в справочник, но суть в чём:

 

Есть код 1:

local s = get_hud():GetCustomStatic("static")
if not s then
    s = get_hud():AddCustomStatic("static")
end

s:wnd():SetText("text")
И код 2:

get_hud():AddCustomStatic("static", true):wnd():SetText("text")
Первый код вешает апдейт актора, а второй нет. Почему так? Исходники смотрел, там вроде всё нормально.

 

З.Ы. второй аргумент AddCustomStatic означает, что сначала будет произведен поиск статика с таким же именем и в случае успеха, он будет возвращен вместо создания нового (т.е. эквивалент функции GetCustomStatic).

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

2 Shadows: а проверки с логом добавить ? s = get_hud():AddCustomStatic("static") - вот здесь статик точно возвращается ?

local s = get_hud():AddCustomStatic("static")
if s and s:wnd() then
	log1("yes")
else
	log1("no")
end
--> yes

Да и во втором варианте кода же работает.

 

SDrawStaticStruct* CUIGameCustom::AddCustomStatic			(LPCSTR id, bool bSingleInstance)
{
	if(bSingleInstance){
		st_vec::iterator it = std::find(m_custom_statics.begin(),m_custom_statics.end(), id);
		if(it!=m_custom_statics.end())
			return &(*it);
	}
	
	CUIXmlInit xml_init;
	m_custom_statics.push_back		(SDrawStaticStruct());
	SDrawStaticStruct& sss			= m_custom_statics.back();

	sss.m_static					= xr_new<CUIStatic>();
	sss.m_name						= id;
	xml_init.InitStatic				(*m_msgs_xml, id, 0, sss.m_static);
	float ttl						= m_msgs_xml->ReadAttribFlt(id, 0, "ttl", -1);
	if(ttl>0.0f)
		sss.m_endTime				= Device.fTimeGlobal + ttl;

	return &sss;
}

 

 

@7.9, нет, там метод.

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Может у тебя в биндере дальше переменная s используется?

Не используется.

 

так на какой строчке биндер вешается?

s:wnd():SetText("text")

 

Причем именно на апдейте надо это делать. При единичном вызове все нормально работает почему-то.

 

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

Задай zoom_enabled = off в конфиге. Хотя не уверен, что сработает в ЧН, но в ТЧ 100% пашет.
  • Спасибо 1

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

 

 

Мне это нужно для того, чтобы: несколько таких предметов не группировались в инвентаре ГГ

Двиг не группирует предметы с различием состояния менее 0.01, т.е. если изменишь его на 0.0099 то ничего не выйдет.

 

Просто для справки.

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Группирует. Более - не группирует.   Просто для справедливости.

Да, перепутал)) Не группирует, если различие больше 0.01.

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Ещё такой вопрос: как отловить момент перезарядки, разрядки и момент смены типов патронов у оружия? Есть ли флаг или что-то подобное для этого? Я сейчас "ловлю" последний патрон в стволе, но может быть есть более изящный способ?

Если используешь ХЕ, там есть метод получения текущего стейта худа оружия:

uint<state> get_hud_item_state() - возвращает номер текущего стейта.

пример:
local weapon_states = {
	idle = 0,
	fire = 1,
	fire2 = 2,
	reload = 3,
	showing = 4,
	hiding = 5,
	hidden = 6,
	misfire = 7,
	mag_empty = 8,
	switch = 9
}

local state = db.actor:active_item():get_hud_item_state()
if state == weapon_states.reload then
...
end
  • Спасибо 1
  • Полезно 1

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Но может есть другие варианты?

По хорошему, на бы в самом движке перед созданием биндера проверять, а существует ли такой файл\функция вообще. Но если движок не вариант, значит на выходе в онлайн читаем секцию у объекта, в этой секции читаем параметр script_binding, разбиваем строку на [файл].[функция], далее известными способами проверяем наличие и вылетам если чего-то не хватает.

В случае если всё окей, добавляем секцию в табличку "проверенных секций", чтобы несколько раз не сканировать одно и тоже.

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение
@UnLoaded, не у всех объектов, выходящих в онлайн, должен быть биндер. Без чтения конфига не обойтись.
  • Полезно 1

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Ещё такой вариант - перебрать вообще все секции и посмотреть у них параметры биндинга, ну и потом проверить наличие всего необходимого.

 

Другими словами, отладка ещё до выхода объектов в онлайн.

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Ну про перебор уже говорилось ранее.

Ранее говорилось про перебор объектов, я же написал про перебор _секций_. Секций всегда будет меньше, следовательно меньше нагрузка + их нельзя изменять\добавлять без перезагрузки игры.

 

Чтобы так проверить все объекты игры, тоже вообще-то перебор надо устраивать. тогда уж проще так

Ну проверишь в начале уровня, дальше что? Если какой-нибудь новый объект в игре появится, снова проверка? На апдейте будешь делать?)) Изменено пользователем Shadows

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

Кстати а как получить список всех существующих секций? Чтобы перебирать.

Так просто наверно не получить.

 

Я думаю, надо пропарсить system.ltx и все его вложения, найти все строки, которые обозначают секцию (по заданному шаблону), после чего, найденную секцию на всякий случай проверить при помощи section_exist, ну и добавить её в табличку. Далее, пройтись по этой табличке и посмотреть наличие нужного параметра в секциях.

 

Правда, для чтения файла наверно понадобятся расширения RvP (io namespace).

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

@Zander_driver, а причем тут

 

прогнать все возможные комбинации символов с длинной строки до 30, через ltx:section exist

?

 

Я построчное чтение файла предлагал вообще-то.

 

поиск объектов на линии прицеливания или около нее

Проще поставить xray-ex и заюзать трассировку лучей RayPick. Изменено пользователем Shadows

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

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

музыкальное сопровождение.

Штатных функций для проигрывания без онлайного объекта в сталке нет, но можно попытаться через дополнительные библиотеки для луа запустить какой-нибудь mp3-трек прямо в плеере фоном. Помнится в каком-то билде, амбиент-музыка на локацях именно так и была реализована))

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

@macron, а разве имя нужного объекта неизвестно? Зачем эти извраты с измерением расстояния до позиции?

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение

 

 

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

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

Telegram-канал RayTwitty Space

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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