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

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


Мало информации.

Эти binder-ы у тебя по-порядку срабатывают?

Это я к чему? Вот есть у тебя 20 binder-ов. Как ты знаешь что отработали все 20, а не какой-то 2 раза, а какой-то ни разу?

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

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

@UnLoaded, нужные объекты (биндеры) занеси в таблицу и каждый акторский (например) апдейт проходись по ним и находи максимальное значение. После каждой итерации сбрасывай его в 0.

 

Про другой момент уже сказал Nazgool - у каждого объекта своя частота обновления. Например, у монстров она достаточно низкая, так еще и зависит от расстояния до актора (чем дальше - тем медленнее).

Ссылка на комментарий
Требуется из строки вида, например, «aaa_bbb_ccc_ddd» вытащить подстроку от первого символа и до последнего подчёркивания включительно, то есть «aaa_bbb_ccc_», и присвоить это значение переменной средствами сталкеровского Lua.

 

просто Lua это сделать просто, вот так, например,

string.sub (str,1,string.len(str)-string.find (string.reverse (str),"_")+1)

 

а присвоить "сталкеровской переменной" можно попробовать вот так:

local str = "aaa_bbb_ccc_ddd"

local sep = '_'

local new_str = string.sub (str,1,string.len(str)-string.find (string.reverse (str),sep)+1)

 

разделитель (sep) может быть любой.

 

Согласен, примерно так же я сделал это в первую очередь.

Но не хотелось оставлять столь монструозное выражение, поэтому и спросил про регулярки.

Собственно, @Карлан и @Shredder дали выше исчерпывающий ответ.

Kirgudu

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

Необходимо для ф-ции SetColor(DWORD colorполучить DWORD-значение имея четыре значения r, g, b и a. Помню, где-то видел вроде ф-цию, но не могу найти. Подскажите.

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

Добрый день!
Как можно с помощью скрипта забиндить определенную анимацию у ГГ?

Например: чтобы как в CS:GO ГГ при нажатии клавиши "T" воспроизводил анимацию "игры" с оружием (когда он рожок достает)

Ссылка на комментарий
@madrazor, в проекте X-Ray Extensions есть функция для проигрывания худовых анимаций. Там же есть каллбэк для актера на нажатие клавиш.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

Хотел бы получить помощь по спейсрестикторам. Скопирил файл с некоего сайта, как спавнить (СР).

----------
-- чтение формы из нет-пакета
----------
function r_shape(packet)
local s
local st = {}
st.count = packet:r_u8()
st.shapes = {}
for i=1, st.count do
s = {}
s.type = packet:r_u8()
if s.type == 0 then
s.center = packet:r_vec3()
s.radius = packet:r_float()
else
s.axis_x = packet:r_vec3()
s.axis_y = packet:r_vec3()
s.axis_z = packet:r_vec3()
s.offset = packet:r_vec3()
end
st.shapes = s
end
return st
end

----------
-- запись формы в нет-пакет
----------
function w_shape(packet, st)
local s
packet:w_u8(st.count)
for i=1, st.count do
s = st.shapes
packet:w_u8(s.type)
if s.type == 0 then
packet:w_vec3(s.center)
packet:w_float(s.radius)
else
packet:w_vec3(s.axis_x)
packet:w_vec3(s.axis_y)
packet:w_vec3(s.axis_z)
packet:w_vec3(s.offset)
end
end
end

----------
-- перепаковка нет-пакета созданного скриптом рестрикта
----------
function rewrite_restrictor(se_obj, custom, radius)
local packet = net_packet()
se_obj:STATE_Write(packet)
local game_vertex_id = packet:r_u16()
local distance = packet:r_float()
local direct_control = packet:r_s32()
local level_vertex_id = packet:r_s32()
local object_flags = packet:r_s32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_s32()
local spawn_story_id = packet:r_s32()
local shape = r_shape(packet)
local restrictor_type = packet:r_u8()

custom_data = custom
shape = {}
shape.count = 1
shape.shapes = {}
shape.shapes[1] = {}
shape.shapes[1].type = 0
shape.shapes[1].center = vector():set(0,0,0)
shape.shapes[1].radius = radius

packet:w_u16(game_vertex_id)
packet:w_float(distance)
packet:w_s32(direct_control)
packet:w_s32(level_vertex_id)
packet:w_s32(object_flags)
packet:w_stringZ(custom_data)
packet:w_s32(story_id)
packet:w_s32(spawn_story_id)
w_shape(packet, shape)
packet:w_u8(restrictor_type)
se_obj:STATE_Read(packet, packet:w_tell() - packet:r_tell())
end

 

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

Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч.

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

Спавню спейсрестиктор, но доходя до нужной точки не получаю инфопоршень. Такое чувство, что рестиктор не спавница.

function create_asb_restr()

local se_obj = alife():create("space_restrictor", vector():set(30.895565032959,-11.312034225464, 385.34494018555), 335849, 1814)
local custom = "[logic]\cfg = scripts\res_point_1.ltx"
rewrite_restrictor(se_obj, custom, 3.0)
end

логика
[logic]
active = sr_idleone

[sr_idleone]
on_actor_inside = {+start_as_zapis} nil %+ok_zapis_as%

 

 

после выдачи поршня должен выдаваться квест.

Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч.

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

@nego, спавн рестра правильный. Логика тоже...Но!

[sr_idle@one]

Вот так по уму надо писать...ибо секция логики должна быть sr_idle.

К тому же не вижу смысла в one, секция то у тебя одна. Двигло и так поймет))

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

@UnLoaded, это вроде как не перенос, хотя в ЛУА я дуб дубом))

Вот так короче - да...

local custom = "[logic]\ncfg = scripts\\restr.ltx"
Ссылка на комментарий

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

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

Пока самый производительный вариант какой приходит в голову - держать "в кармане" табличку с ид тех серверных объектов, для которых меня интересует отслеживать их существование/удаление. И на апдейте получать эти объекты alife():object(id) и по ряду признаков проверять что это все еще они, а не какие то другие.

Но вариант этот мягко говоря не очень... есть другие варианты?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

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

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Он точно только в нужном мне случае вызывается?

 

Еще такой вдогонку вопрос.

У сталкеров-нпс есть obj:on_register(), и obj:on_spawn()

у монстров только obj:on_register()

 

В чем смысловое/функциональное различие?

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

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

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@Zander_driver, можно для объекта алайфа переопределить методы create и release своими функциями, в которые, например, добавить триггеры соответствующих событий.

local sim = alife()

sim._create = sim.create
sim.create = function(self, section,...)
	get_console():execute("load ~sim~create:"..section)
	return sim._create(self, section,...)
end

sim._release = sim.release
sim.release = function(self, sobj)
	get_console():execute("load ~sim~release:"..sobj:section_name())
	sim._release(self, sobj)
end

_G.alife = function() return sim end

 

 

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

:offtopic:

@nego, кстати...к слову пришлось.

У тов. @Charsi в подписи есть плагин Луа для Нотепад++. А в этом плагине есть функция проверки синтаксиса. Так вот она четко показывает ошибку в функции спавна рестра.

 

invalid escape sequence near '\c'

 

Пишем \ncfg, проверяем...О чудо!

 

Syntax OK!

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

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

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

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

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

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

Войти

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

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

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