Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
Nazgool 250 Опубликовано 6 Сентября 2015 Поделиться Опубликовано 6 Сентября 2015 @UnLoaded, Мало информации. Эти binder-ы у тебя по-порядку срабатывают? Это я к чему? Вот есть у тебя 20 binder-ов. Как ты знаешь что отработали все 20, а не какой-то 2 раза, а какой-то ни разу? Другими словами, можно как-то понять, когда нужно выводить максимальное значение? Ссылка на комментарий
RayTwitty 510 Опубликовано 6 Сентября 2015 Поделиться Опубликовано 6 Сентября 2015 @UnLoaded, нужные объекты (биндеры) занеси в таблицу и каждый акторский (например) апдейт проходись по ним и находи максимальное значение. После каждой итерации сбрасывай его в 0. Про другой момент уже сказал Nazgool - у каждого объекта своя частота обновления. Например, у монстров она достаточно низкая, так еще и зависит от расстояния до актора (чем дальше - тем медленнее). Ссылка на комментарий
Serge! 127 Опубликовано 10 Сентября 2015 Поделиться Опубликовано 10 Сентября 2015 (изменено) Требуется из строки вида, например, «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 Изменено 10 Сентября 2015 пользователем Kirgudu 1 Ссылка на комментарий
UnLoaded 313 Опубликовано 13 Сентября 2015 Поделиться Опубликовано 13 Сентября 2015 Необходимо для ф-ции SetColor(DWORD color) получить DWORD-значение имея четыре значения r, g, b и a. Помню, где-то видел вроде ф-цию, но не могу найти. Подскажите. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 13 Сентября 2015 Поделиться Опубликовано 13 Сентября 2015 @UnLoaded, Так попробуй: CustomStatic:wnd():SetColor(GetRGB(255, 255, 255, 255)) 1 Ссылка на комментарий
UnLoaded 313 Опубликовано 13 Сентября 2015 Поделиться Опубликовано 13 Сентября 2015 @TIGER_VLAD Во! Оно самое, только GetARGB(...). 1 1 Ссылка на комментарий
madrazor 10 Опубликовано 16 Сентября 2015 Поделиться Опубликовано 16 Сентября 2015 Добрый день!Как можно с помощью скрипта забиндить определенную анимацию у ГГ? Например: чтобы как в CS:GO ГГ при нажатии клавиши "T" воспроизводил анимацию "игры" с оружием (когда он рожок достает) Ссылка на комментарий
naxac 2 475 Опубликовано 16 Сентября 2015 Поделиться Опубликовано 16 Сентября 2015 @madrazor, в проекте X-Ray Extensions есть функция для проигрывания худовых анимаций. Там же есть каллбэк для актера на нажатие клавиш. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
nego 35 Опубликовано 18 Сентября 2015 Поделиться Опубликовано 18 Сентября 2015 (изменено) Хотел бы получить помощь по спейсрестикторам. Скопирил файл с некоего сайта, как спавнить (СР). ------------ чтение формы из нет-пакета----------function r_shape(packet)local slocal st = {}st.count = packet:r_u8()st.shapes = {}for i=1, st.count dos = {}s.type = packet:r_u8()if s.type == 0 thens.center = packet:r_vec3()s.radius = packet:r_float()elses.axis_x = packet:r_vec3()s.axis_y = packet:r_vec3()s.axis_z = packet:r_vec3()s.offset = packet:r_vec3()endst.shapes = sendreturn stend------------ запись формы в нет-пакет----------function w_shape(packet, st)local spacket:w_u8(st.count)for i=1, st.count dos = st.shapespacket:w_u8(s.type)if s.type == 0 thenpacket:w_vec3(s.center)packet:w_float(s.radius)elsepacket:w_vec3(s.axis_x)packet:w_vec3(s.axis_y)packet:w_vec3(s.axis_z)packet:w_vec3(s.offset)endendend------------ перепаковка нет-пакета созданного скриптом рестрикта----------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 = customshape = {}shape.count = 1shape.shapes = {}shape.shapes[1] = {}shape.shapes[1].type = 0shape.shapes[1].center = vector():set(0,0,0)shape.shapes[1].radius = radiuspacket: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 Изменено 18 Сентября 2015 пользователем nego Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч. Ссылка на комментарий
UnLoaded 313 Опубликовано 18 Сентября 2015 Поделиться Опубликовано 18 Сентября 2015 Хотел бы получить помощь по спейсрестикторам Ну так и чего тебе надобно конкретно ? Ссылка на комментарий
nego 35 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 Спавню спейсрестиктор, но доходя до нужной точки не получаю инфопоршень. Такое чувство, что рестиктор не спавница. 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% после выдачи поршня должен выдаваться квест. Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч. Ссылка на комментарий
_Val_ 2 225 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 (изменено) @nego, спавн рестра правильный. Логика тоже...Но! [sr_idle@one] Вот так по уму надо писать...ибо секция логики должна быть sr_idle. К тому же не вижу смысла в one, секция то у тебя одна. Двигло и так поймет)) Изменено 19 Сентября 2015 пользователем _Val_ Ссылка на комментарий
UnLoaded 313 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 "[logic]\cfg = scripts\res_point_1.ltx" Да и тут похоже ошибка: перенос строки будет кажись так "\n", а у тебя просто слэш. Ссылка на комментарий
_Val_ 2 225 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 @UnLoaded, это вроде как не перенос, хотя в ЛУА я дуб дубом)) Вот так короче - да... local custom = "[logic]\ncfg = scripts\\restr.ltx" Ссылка на комментарий
Zander_driver 10 342 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 Как бы с минимальными затратами получить событие удаления серверного объекта? Вот есть у нас произвольно когда-то созданный серверный объект (или его ид... не суть важно же?), ему может быть есть а может быть нету клиентского соответствия. И как только вдруг, кто-то где-то неизвестно зачем его удалил, то вызываем свои действия. Пока самый производительный вариант какой приходит в голову - держать "в кармане" табличку с ид тех серверных объектов, для которых меня интересует отслеживать их существование/удаление. И на апдейте получать эти объекты 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. Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 obj:on_unregister() - не ? 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Zander_driver 10 342 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 Он точно только в нужном мне случае вызывается? Еще такой вдогонку вопрос. У сталкеров-нпс есть 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. Ссылка на комментарий
RayTwitty 510 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 @Zander_driver, в ХЕ есть коллбек на удаление объекта через alife():release(). Возможно это то, что тебе нужно. Ссылка на комментарий
Charsi 440 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 @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 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
_Val_ 2 225 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 @nego, кстати...к слову пришлось. У тов. @Charsi в подписи есть плагин Луа для Нотепад++. А в этом плагине есть функция проверки синтаксиса. Так вот она четко показывает ошибку в функции спавна рестра. invalid escape sequence near '\c' Пишем \ncfg, проверяем...О чудо! Syntax OK! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти