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/
Malandrinus 615 Опубликовано 8 Мая 2013 Поделиться Опубликовано 8 Мая 2013 @Alex535, а кто сказал, что это скрипт? Все эффекты контролёра внутри движка. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-774911
Alex535 1 Опубликовано 9 Мая 2013 Поделиться Опубликовано 9 Мая 2013 @Malandrinus, Ну допустим я хочу изменить эти параметры , они же наверняка где-то прописаны. Так же как и параметры схемы sr_psy_antenna. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-775005
Shredder 49 Опубликовано 9 Мая 2013 Поделиться Опубликовано 9 Мая 2013 Вот и ищи в секции контроллера, все что найдешь - твое, все остальное в движке. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-775008
Alex535 1 Опубликовано 9 Мая 2013 Поделиться Опубликовано 9 Мая 2013 (изменено) @Shredder,В секции контроллёра указывается его иммунитет, параметры хита относительно актёра, модели, конфиги разные, звуки. Сам хит (параметры, эффекты, анимации) расписан где-то... аналогом расписан хит пси-излучения схемы sr_psy_antenna в скрипте sr_psy_antenna.script . Я лишь хочу указать тот же хит в пси-излучении этой схемы, что и при контролёре. Прекрати страдать ерундой. Всего в игре 12 типов урона: burn = 0, shock = 1, strike = 2, wound = 3, radiation = 4, telepatic = 5, chemical_burn = 6, explosion = 7, fire_wound = 8, wound_2 = 9, physic_strike = 10, max = 11 Предпоследние два в конфигах не используются, разве что упоминаются в actor.ltx. О последнем вообще ничего не известно. ColR_iT Изменено 9 Мая 2013 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-775010
Malandrinus 615 Опубликовано 9 Мая 2013 Поделиться Опубликовано 9 Мая 2013 Alex535, схема пси-антенны не имеет никакого отношения к контролёру. Эффект от антенны достаточно простой: постпроцесс + периодический спавн фантомов. Причём это всё сделано скриптами. Контролёр же управляется целиком и полностью движком, скриптового в нём вообще нет ни строчки. Поведение его и эффекты, связанные с ним, достаточно сложные: проверка видимости актора с его стороны, расстояния до актора, телепатические хиты, постэффекты, звуки, эффекторы камеры. Всего и не скажешь, поскольку оно там внутри, и как работает - до конца не ясно. Посему твоё желание сделать схему радара как у контролёра просто невыполнимо, да и смысла не имеет по большому счёту, поскольку радар - это не контролёр и не может иметь всех его особенностей поведения. Вообще, непонятно, что ты там так заморачиваешься с этим радаром. Все эффекты урона, которые здесь можно придумать - это периодический хит телепатического типа и может быть постпроцесс + эффектор камеры типа опьянения, чтобы изображение качалось и двоилось. Скомбинируй по вкусу, и всех делов. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-775138
Alex535 1 Опубликовано 10 Мая 2013 Поделиться Опубликовано 10 Мая 2013 (изменено) @Malandrinus, Хорошо. Значит, у контролёра тип хита -wound, следовательно - надо поставить его в sr_psy_antenna.script, и будет мне счастье. Только не могу понять, какой тип урона использует эта схема? Изменено 10 Мая 2013 пользователем Alex535 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-775280
volazar 154 Опубликовано 10 Мая 2013 Поделиться Опубликовано 10 Мая 2013 (изменено) следовательно - надо поставить его в sr_psy_antenna.script, Зачем его туда подставлять? У пси антенны уже прописан свой урон. Точно такое же влияние на пси здоровье, как и у контролера. Разве что оно постоянное, а не во время атаки. Вспоминайте Янтарь и Радар. Вам остается только заюзать схему sr_psy_antenna! Ну и по нужде прописать вывод всяких постэффектов как описал выше malandrinus. И получится не хуже атаки контролера, если не лучше. ЗЫ: Это хит wound. Подробнее описано в том же самом sr_psy_antenna.script. Изменено 10 Мая 2013 пользователем volazar Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-775284
Alex535 1 Опубликовано 10 Мая 2013 Поделиться Опубликовано 10 Мая 2013 (изменено) @volazar, Хорошо, я уловил это, но поменять урон можно точно. У этой схемы урон в виде типа wound . Здоровье отнимается промежутками, у контроллёра - оно отнимается плавно. Получается, надо просто тупо изучить всё содержимое этого скрипта и самостоятельно редактировать параметры урона. Хорошо. Просто поставить хит у пси антенны на telepatic. Изменено 10 Мая 2013 пользователем Alex535 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-775287
mumie 2 Опубликовано 18 Мая 2013 Поделиться Опубликовано 18 Мая 2013 Привет, извиняюсь за глупый вопрос, но как определить динамически позицию, левел и гэйм вертексы заспавненного объекта?А теперь поясню:В инвентаре есть item мы "съедаем" его и он спавниться на позиции ГГ, иак вот как можно с течением времени заспавнить на эти координаты другие объекты? Знаю что можно сделать так: local pos = db.actor:position() local vid = db.actor:level_vertex_id() local gvid = db.actor:game_vertex_id() local obj=alife():create(spawn_item, pos, vid, gvid) obj:position() ...но с obj:level_vertex_id() и obj:game_vertex_id() не срабатывает, и вообще нужно обратиться к координатам заспавненного объекта в другой функции запускающейся таймером. Весь код готов, в этом ничего сложного нет, а вот к динамическим координатам обратиться мозгов не хватает.Заранее спасибо! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-776766
ColR_iT 171 Опубликовано 18 Мая 2013 Поделиться Опубликовано 18 Мая 2013 mumie, не очень ясно что же такое "динамическая позиция", но всё же... В данном случае, функции получения гейм- и левел- вертекса не будут работать, к слову функция определения позиции тоже, т.к. применимы они к онлайновому объекту, а у тебя obj - серверный, именно серверный объект возвращает функция create. Воспользуйся свойствами объекта position, m_game_vertex_id, m_level_vertex_id для получения координат, гейм- и левел-вертексов соответственно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-776792
*Shoker* 322 Опубликовано 18 Мая 2013 Поделиться Опубликовано 18 Мая 2013 (изменено) Всё работает, просто ты перепутал типы объекта. В игре у почти каждого объекта есть клиентская и серверная часть. Функцией alife():create() ты создаёшь СЕРВЕРНЫЙ объект (а у него свои функции и свойства)А уже в апдейте ты (как один из вариантов) получаешь клиентский объект для которого функции position(), level_vertex_id() и прочие существуют. Собственно в твоём примере надо obj:position() заменить на obj.position Аналогично obj:game_vertex_id() на obj.m_game_vertex_id Откуда я это знаю? Открываешь scripts\lua_help.script Дальше ты должен знать название класса серверного объекта предмета который ты спавнишь (это уже сам как нить найдёшь), но в принципе этим можно пренебречь поскольку функции практически одинаковы для всех объектов. Допустим ты спавнишь сталкера, у него серверный класс это class cse_alife_creature_abstract Ищешь его в lua_help.script local obj=alife():create(spawn_item, pos, vid, gvid) В obj будет хранится именно объект серверного класса. Вообще если посмотришь этот класс то увидишь что функций position() и прочих в нём нету. Однако в замен есть СВОЙСТВА C++ class cse_alife_creature_abstract : cse_alife_dynamic_object_visual { property group; property id; property m_game_vertex_id; property m_level_vertex_id; property m_story_id; property online; property parent_id; property position; property script_version; ...И вот тут ты как раз можешь получить свою позицию. local pos = obj.position Чтобы в дальнейшем не путаться советую серверные объекты обозначать как sobj или типа того, просто чтобы самому была видна разница. Ну а клиентский объект можно получить через функцию local obj = level.object_by_id(<id-объекта>) Почему не сделать так? local sobj = alife():create(spawn_item, pos, vid, gvid) local obj = level.object_by_id(sobj.id) obj:position() Потому что когда ты спавнишь объект, создаётся его серверная часть (sobj) однако клиентской (obj) ещё не существует, она будет создана лишь на следующих апдейтах. PS: Извиняюсь за кривой пост, когда копирую текст он копируется вместе с задним фоном и форматированием. Забыл как выключить это. Изменено 18 Мая 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-776795
toxictrace 1 Опубликовано 19 Мая 2013 Поделиться Опубликовано 19 Мая 2013 Доброго времени суток. Может тут кто-нибудь ответит. Подскажите, плз, есть ли возможность в ЗП вычислить на каком game vertex't лежит level vertex ? Имея только level vertex. (В пределах левела, конечно) Когда умрёшь, увидишь кнопки "О'кей" и "Главное меню"Под ними "Новая" и "Выход" И неактивная "Назад" Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-776820
Shredder 49 Опубликовано 19 Мая 2013 Поделиться Опубликовано 19 Мая 2013 На сколько я знаю, только методом перебора: ---- -- Получение ближайшего гейм-вертекса по левел-вертексу function anomalies_manager:get_game_vertex(lv) local lname = level.name() local new_gv = 0 local min_dist = 100000 local pos = level.vertex_position(lv) for a = self.game_vertex_min, self.game_vertex_max do g1 = game_graph():vertex(a):game_point() if g1:distance_to(pos)<min_dist then min_dist = g1:distance_to(pos) new_gv = a end end return new_gv end self.game_vertex_min, self.game_vertex_max соответственно минимальный и максимальный гейм вертексы для текущего уровня. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-776825
АuReN 0 Опубликовано 20 Мая 2013 Поделиться Опубликовано 20 Мая 2013 Всем доброго времни суток. Есть n кол-во кнопок. for id=1,n do btn = CUIButton() btn:SetWindowName("Button_"..id) btn:InitTexture("button_tex_"..id) btn:Init(id*50,id*50,50,50) self:Register(btn) self:AttachChild(btn) self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, self.function, self) end Как определить какая из этих n-ных кнопок была нажата? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-777109
Charsi 441 Опубликовано 20 Мая 2013 Поделиться Опубликовано 20 Мая 2013 АuReN, например так: self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, self:get_callback_by_id(id)) function class_name:get_callback_by_id(btn_id) return function() get_console():execute("load ~~обрабатываем кнопку "..btn_id) end end Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-777132
АuReN 0 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 Charsi, Увы такая передача переменных не работает. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-777202
Shredder 49 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, loadstring("имя_скрипта.on_db_click('" .. id .. "')")) function on_db_click(id) get_console():execute("load ~~~нажата " .. id) end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-777265
Artos 99 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 (изменено) Что-то совсем не в ту сторону заносить советчиков стало... АuReN, по сути у тебя уже все есть и нужно только нормально расписать строку: self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, self.function, self) а точнее саму функцию (self.function), которую вызывает коллбэк при двойном клике по каждой кнопке. Если все хочется одной функцией сделать, то это может быть, например так: self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, function() self:OnBtnClick(id) end, self) Ну а уже в этой 'OnBtnClick', которая в том же классе(!), и делай что нужно с получаемым аргументом, соответствующим индексу нажатой кнопки: function MyClass:OnBtnClick(id) news_manager.send_tip( db.actor, "нажата " .. tostring(id) ) end Изменено 21 Мая 2013 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-777302
Shredder 49 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 Да? А ты пробовал? Ничего, что при нажатии на любую кнопку id в функции OnBtnClick(id) будет всегда равен последнему. Т.к. в каждой функции ты оставил ссылку на одну и ту же переменную, значение которой в конце цикла будет равно последнему числу. Поэтому, ещё неизвестно, кого куда занесло... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-777322
Artos 99 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 (изменено) Shredder, советую подучить матчасть (в частности о таком понятии как "замыкания", aka "closures") или хотя бы, прежде чем кидаться репликами, самому проверить на практике... Данный код давным давно применяется в моем моде, да и не только в нем. Суть установки коллбэка - НЕ выполнять его в самом цикле, а именно задавать нужную функцию, которая должна сработать при нажатии кнопки (иль ином событии с нею). Т.о. в самом цикле (предполагаю он выполняется в InitControls) регистрируются имена объектов для последующей установки на эти объекты( по их именам) коллбэков. Предложенный выше вариант, для всех кнопок устанавливает единый обработчик, которому передается индекс нажатой кнопки... Что и требуется автору вопроса. Но, и ни что не мешает и каждой кнопке назначить собственный обработчик. В общем думаем головою, а не ... руками. ;-) Изменено 21 Мая 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/256/#findComment-777326
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти