Malandrinus 615 Опубликовано 8 Мая 2013 Поделиться Опубликовано 8 Мая 2013 @Alex535, а кто сказал, что это скрипт? Все эффекты контролёра внутри движка. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Alex535 1 Опубликовано 9 Мая 2013 Поделиться Опубликовано 9 Мая 2013 @Malandrinus, Ну допустим я хочу изменить эти параметры , они же наверняка где-то прописаны. Так же как и параметры схемы sr_psy_antenna. Ссылка на комментарий
Shredder 49 Опубликовано 9 Мая 2013 Поделиться Опубликовано 9 Мая 2013 Вот и ищи в секции контроллера, все что найдешь - твое, все остальное в движке. Ссылка на комментарий
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 Ссылка на комментарий
Malandrinus 615 Опубликовано 9 Мая 2013 Поделиться Опубликовано 9 Мая 2013 Alex535, схема пси-антенны не имеет никакого отношения к контролёру. Эффект от антенны достаточно простой: постпроцесс + периодический спавн фантомов. Причём это всё сделано скриптами. Контролёр же управляется целиком и полностью движком, скриптового в нём вообще нет ни строчки. Поведение его и эффекты, связанные с ним, достаточно сложные: проверка видимости актора с его стороны, расстояния до актора, телепатические хиты, постэффекты, звуки, эффекторы камеры. Всего и не скажешь, поскольку оно там внутри, и как работает - до конца не ясно. Посему твоё желание сделать схему радара как у контролёра просто невыполнимо, да и смысла не имеет по большому счёту, поскольку радар - это не контролёр и не может иметь всех его особенностей поведения. Вообще, непонятно, что ты там так заморачиваешься с этим радаром. Все эффекты урона, которые здесь можно придумать - это периодический хит телепатического типа и может быть постпроцесс + эффектор камеры типа опьянения, чтобы изображение качалось и двоилось. Скомбинируй по вкусу, и всех делов. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Alex535 1 Опубликовано 10 Мая 2013 Поделиться Опубликовано 10 Мая 2013 (изменено) @Malandrinus, Хорошо. Значит, у контролёра тип хита -wound, следовательно - надо поставить его в sr_psy_antenna.script, и будет мне счастье. Только не могу понять, какой тип урона использует эта схема? Изменено 10 Мая 2013 пользователем Alex535 Ссылка на комментарий
volazar 151 Опубликовано 10 Мая 2013 Поделиться Опубликовано 10 Мая 2013 (изменено) следовательно - надо поставить его в sr_psy_antenna.script, Зачем его туда подставлять? У пси антенны уже прописан свой урон. Точно такое же влияние на пси здоровье, как и у контролера. Разве что оно постоянное, а не во время атаки. Вспоминайте Янтарь и Радар. Вам остается только заюзать схему sr_psy_antenna! Ну и по нужде прописать вывод всяких постэффектов как описал выше malandrinus. И получится не хуже атаки контролера, если не лучше. ЗЫ: Это хит wound. Подробнее описано в том же самом sr_psy_antenna.script. Изменено 10 Мая 2013 пользователем volazar Ссылка на комментарий
Alex535 1 Опубликовано 10 Мая 2013 Поделиться Опубликовано 10 Мая 2013 (изменено) @volazar, Хорошо, я уловил это, но поменять урон можно точно. У этой схемы урон в виде типа wound . Здоровье отнимается промежутками, у контроллёра - оно отнимается плавно. Получается, надо просто тупо изучить всё содержимое этого скрипта и самостоятельно редактировать параметры урона. Хорошо. Просто поставить хит у пси антенны на telepatic. Изменено 10 Мая 2013 пользователем Alex535 Ссылка на комментарий
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() не срабатывает, и вообще нужно обратиться к координатам заспавненного объекта в другой функции запускающейся таймером. Весь код готов, в этом ничего сложного нет, а вот к динамическим координатам обратиться мозгов не хватает.Заранее спасибо! Ссылка на комментарий
ColR_iT 171 Опубликовано 18 Мая 2013 Поделиться Опубликовано 18 Мая 2013 mumie, не очень ясно что же такое "динамическая позиция", но всё же... В данном случае, функции получения гейм- и левел- вертекса не будут работать, к слову функция определения позиции тоже, т.к. применимы они к онлайновому объекту, а у тебя obj - серверный, именно серверный объект возвращает функция create. Воспользуйся свойствами объекта position, m_game_vertex_id, m_level_vertex_id для получения координат, гейм- и левел-вертексов соответственно. Ссылка на комментарий
*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, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
toxictrace 1 Опубликовано 19 Мая 2013 Поделиться Опубликовано 19 Мая 2013 Доброго времени суток. Может тут кто-нибудь ответит. Подскажите, плз, есть ли возможность в ЗП вычислить на каком game vertex't лежит level vertex ? Имея только level vertex. (В пределах левела, конечно) Когда умрёшь, увидишь кнопки "О'кей" и "Главное меню"Под ними "Новая" и "Выход" И неактивная "Назад" Ссылка на комментарий
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 соответственно минимальный и максимальный гейм вертексы для текущего уровня. Ссылка на комментарий
А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-ных кнопок была нажата? Ссылка на комментарий
Charsi 440 Опубликовано 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 Ссылка на комментарий
АuReN 0 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 Charsi, Увы такая передача переменных не работает. Ссылка на комментарий
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 Ссылка на комментарий
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 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Shredder 49 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 Да? А ты пробовал? Ничего, что при нажатии на любую кнопку id в функции OnBtnClick(id) будет всегда равен последнему. Т.к. в каждой функции ты оставил ссылку на одну и ту же переменную, значение которой в конце цикла будет равно последнему числу. Поэтому, ещё неизвестно, кого куда занесло... Ссылка на комментарий
Artos 99 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 (изменено) Shredder, советую подучить матчасть (в частности о таком понятии как "замыкания", aka "closures") или хотя бы, прежде чем кидаться репликами, самому проверить на практике... Данный код давным давно применяется в моем моде, да и не только в нем. Суть установки коллбэка - НЕ выполнять его в самом цикле, а именно задавать нужную функцию, которая должна сработать при нажатии кнопки (иль ином событии с нею). Т.о. в самом цикле (предполагаю он выполняется в InitControls) регистрируются имена объектов для последующей установки на эти объекты( по их именам) коллбэков. Предложенный выше вариант, для всех кнопок устанавливает единый обработчик, которому передается индекс нажатой кнопки... Что и требуется автору вопроса. Но, и ни что не мешает и каждой кнопке назначить собственный обработчик. В общем думаем головою, а не ... руками. ;-) Изменено 21 Мая 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти