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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Nazgool 251 Опубликовано 6 Сентября 2015 Поделиться Опубликовано 6 Сентября 2015 @UnLoaded, Мало информации. Эти binder-ы у тебя по-порядку срабатывают? Это я к чему? Вот есть у тебя 20 binder-ов. Как ты знаешь что отработали все 20, а не какой-то 2 раза, а какой-то ни разу? Другими словами, можно как-то понять, когда нужно выводить максимальное значение? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-962780
RayTwitty 575 Опубликовано 6 Сентября 2015 Поделиться Опубликовано 6 Сентября 2015 @UnLoaded, нужные объекты (биндеры) занеси в таблицу и каждый акторский (например) апдейт проходись по ним и находи максимальное значение. После каждой итерации сбрасывай его в 0. Про другой момент уже сказал Nazgool - у каждого объекта своя частота обновления. Например, у монстров она достаточно низкая, так еще и зависит от расстояния до актора (чем дальше - тем медленнее). Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-962800
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-963520
UnLoaded 313 Опубликовано 13 Сентября 2015 Поделиться Опубликовано 13 Сентября 2015 Необходимо для ф-ции SetColor(DWORD color) получить DWORD-значение имея четыре значения r, g, b и a. Помню, где-то видел вроде ф-цию, но не могу найти. Подскажите. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-964181
TIGER_VLAD 361 Опубликовано 13 Сентября 2015 Поделиться Опубликовано 13 Сентября 2015 @UnLoaded, Так попробуй: CustomStatic:wnd():SetColor(GetRGB(255, 255, 255, 255)) 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-964187
UnLoaded 313 Опубликовано 13 Сентября 2015 Поделиться Опубликовано 13 Сентября 2015 @TIGER_VLAD Во! Оно самое, только GetARGB(...). 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-964212
madrazor 10 Опубликовано 16 Сентября 2015 Поделиться Опубликовано 16 Сентября 2015 Добрый день!Как можно с помощью скрипта забиндить определенную анимацию у ГГ? Например: чтобы как в CS:GO ГГ при нажатии клавиши "T" воспроизводил анимацию "игры" с оружием (когда он рожок достает) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-964814
naxac 2 595 Опубликовано 16 Сентября 2015 Поделиться Опубликовано 16 Сентября 2015 @madrazor, в проекте X-Ray Extensions есть функция для проигрывания худовых анимаций. Там же есть каллбэк для актера на нажатие клавиш. Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-964819
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 Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965127
UnLoaded 313 Опубликовано 18 Сентября 2015 Поделиться Опубликовано 18 Сентября 2015 Хотел бы получить помощь по спейсрестикторам Ну так и чего тебе надобно конкретно ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965129
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% после выдачи поршня должен выдаваться квест. Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965171
_Val_ 2 401 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 (изменено) @nego, спавн рестра правильный. Логика тоже...Но! [sr_idle@one] Вот так по уму надо писать...ибо секция логики должна быть sr_idle. К тому же не вижу смысла в one, секция то у тебя одна. Двигло и так поймет)) Изменено 19 Сентября 2015 пользователем _Val_ Блин... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965183
UnLoaded 313 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 "[logic]\cfg = scripts\res_point_1.ltx" Да и тут похоже ошибка: перенос строки будет кажись так "\n", а у тебя просто слэш. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965195
_Val_ 2 401 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 @UnLoaded, это вроде как не перенос, хотя в ЛУА я дуб дубом)) Вот так короче - да... local custom = "[logic]\ncfg = scripts\\restr.ltx" Блин... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965247
Zander_driver 10 348 Опубликовано 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. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965249
Dennis_Chikin 3 665 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 obj:on_unregister() - не ? 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965252
Zander_driver 10 348 Опубликовано 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. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965254
RayTwitty 575 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 @Zander_driver, в ХЕ есть коллбек на удаление объекта через alife():release(). Возможно это то, что тебе нужно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965269
Charsi 441 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965274
_Val_ 2 401 Опубликовано 19 Сентября 2015 Поделиться Опубликовано 19 Сентября 2015 @nego, кстати...к слову пришлось. У тов. @Charsi в подписи есть плагин Луа для Нотепад++. А в этом плагине есть функция проверки синтаксиса. Так вот она четко показывает ошибку в функции спавна рестра. invalid escape sequence near '\c' Пишем \ncfg, проверяем...О чудо! Syntax OK! Блин... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/333/#findComment-965282
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти