Jump to content

Recommended Posts

Malandrinus    596

@Alex535, а кто сказал, что это скрипт? Все эффекты контролёра внутри движка.


 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Alex535    1

@Malandrinus,  Ну допустим я хочу изменить эти параметры , они же наверняка где-то прописаны. Так же как и параметры схемы sr_psy_antenna.

Share this post


Link to post
Share on other sites
Shredder    47

Вот и ищи в секции контроллера, все что найдешь - твое, все остальное в движке.

Share this post


Link to post
Share on other sites
Alex535    1

@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

Edited by ColR_iT

Share this post


Link to post
Share on other sites
Malandrinus    596

Alex535,

схема пси-антенны не имеет никакого отношения к контролёру. Эффект от антенны достаточно простой: постпроцесс + периодический спавн фантомов. Причём это всё сделано скриптами. Контролёр же управляется целиком и полностью движком, скриптового в нём вообще нет ни строчки. Поведение его и эффекты, связанные с ним, достаточно сложные: проверка видимости актора с его стороны, расстояния до актора, телепатические хиты, постэффекты, звуки, эффекторы камеры. Всего и не скажешь, поскольку оно там внутри, и как работает - до конца не ясно. Посему твоё желание сделать схему радара как у контролёра просто невыполнимо, да и смысла не имеет по большому счёту, поскольку радар - это не контролёр и не может иметь всех его особенностей поведения.

 

Вообще, непонятно, что ты там так заморачиваешься с этим радаром. Все эффекты урона, которые здесь можно придумать - это периодический хит телепатического типа и может быть постпроцесс + эффектор камеры типа опьянения, чтобы изображение качалось и двоилось. Скомбинируй по вкусу, и всех делов.


 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Share this post


Link to post
Share on other sites
Alex535    1

@Malandrinus, Хорошо. Значит, у контролёра тип хита -wound, следовательно - надо поставить его в sr_psy_antenna.script, и будет мне счастье. Только не могу понять, какой тип урона использует эта схема?

Edited by Alex535

Share this post


Link to post
Share on other sites
volazar    9

следовательно - надо поставить его в sr_psy_antenna.script,

Зачем его туда подставлять? У пси антенны уже прописан свой урон. Точно такое же влияние на пси здоровье, как и у контролера. Разве что оно постоянное, а не во время атаки. Вспоминайте Янтарь и Радар. Вам остается только заюзать схему sr_psy_antenna! Ну и по нужде прописать вывод всяких постэффектов как описал выше malandrinus. И получится не хуже атаки контролера, если не лучше.

ЗЫ: Это хит wound. Подробнее описано в том же самом sr_psy_antenna.script.

Edited by volazar

Share this post


Link to post
Share on other sites
Alex535    1

@volazar, Хорошо, я уловил это, но поменять урон можно точно. У этой схемы урон в виде типа wound  . Здоровье отнимается промежутками, у контроллёра - оно отнимается плавно. Получается, надо просто тупо изучить всё содержимое этого скрипта и самостоятельно редактировать параметры урона. Хорошо. Просто поставить хит у пси антенны на telepatic. 

Edited by Alex535

Share this post


Link to post
Share on other sites
mumie    2

Привет, извиняюсь за глупый вопрос, но как определить динамически позицию, левел и гэйм вертексы заспавненного объекта?
А теперь поясню:
В инвентаре есть 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() не срабатывает, и вообще нужно обратиться к координатам заспавненного объекта в другой функции запускающейся таймером. Весь код готов, в этом ничего сложного нет, а вот к динамическим  координатам обратиться мозгов не хватает.
Заранее спасибо!

Share this post


Link to post
Share on other sites
ColR_iT    162

mumie, не очень ясно что же такое "динамическая позиция", но всё же...

В данном случае, функции получения гейм- и левел- вертекса не будут работать, к слову функция определения позиции тоже, т.к. применимы они к онлайновому объекту, а у тебя obj - серверный, именно серверный объект возвращает функция create. Воспользуйся свойствами объекта position, m_game_vertex_id, m_level_vertex_id для получения координат, гейм- и левел-вертексов соответственно.
 

Share this post


Link to post
Share on other sites
*Shoker*    313

Всё работает, просто ты перепутал типы объекта. В игре у почти каждого объекта есть клиентская и серверная часть.

Функцией 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: Извиняюсь за кривой пост, когда копирую текст он копируется вместе с задним фоном и форматированием. Забыл как выключить это.

 

 

Edited by *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Share this post


Link to post
Share on other sites
toxictrace    1

Доброго времени суток. Может тут кто-нибудь ответит. Подскажите, плз, есть ли возможность в ЗП вычислить на каком game vertex't лежит  level vertex ? Имея только level vertex. (В пределах левела, конечно)

 


Когда умрёшь, увидишь кнопки

"О'кей" и "Главное меню"
Под ними "Новая" и "Выход"

И неактивная "Назад"

 

Share this post


Link to post
Share on other sites
Shredder    47

На сколько я знаю, только методом перебора:

 

 
----
-- Получение ближайшего гейм-вертекса по левел-вертексу
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 соответственно минимальный и максимальный гейм вертексы для текущего уровня.

Share this post


Link to post
Share on other sites
АuReN    0
Всем доброго времни суток. Есть 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-ных кнопок была нажата?

Share this post


Link to post
Share on other sites
Charsi    436

А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

 

 

 

Share this post


Link to post
Share on other sites
АuReN    0

Charsi, Увы такая передача переменных не работает.

Share this post


Link to post
Share on other sites
Shredder    47


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

Share this post


Link to post
Share on other sites
Artos    97

Что-то совсем не в ту сторону заносить советчиков стало... 

 

 

А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

Edited by Artos
  • Thanks 1

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites
Shredder    47

Да? А ты пробовал? Ничего, что при нажатии на любую кнопку id в функции OnBtnClick(id) будет всегда равен последнему. Т.к. в каждой функции ты оставил ссылку на одну и ту же переменную, значение которой в конце цикла будет равно последнему числу. Поэтому, ещё неизвестно, кого куда занесло...

Share this post


Link to post
Share on other sites
Artos    97

Shredder, советую подучить матчасть (в частности о таком понятии как "замыкания", aka "closures") или хотя бы, прежде чем кидаться репликами, самому проверить на практике...  :crazy:

 

Данный код давным давно применяется в моем моде, да и не только в нем.

Суть установки коллбэка - НЕ выполнять его в самом цикле, а именно задавать нужную функцию, которая должна сработать при нажатии кнопки (иль ином событии с нею).

Т.о. в самом цикле (предполагаю он выполняется в InitControls) регистрируются имена объектов для последующей установки на эти объекты( по их именам) коллбэков.

Предложенный выше вариант, для всех кнопок устанавливает единый обработчик, которому передается индекс нажатой кнопки... Что и требуется автору вопроса.

Но, и ни что не мешает и каждой кнопке назначить собственный обработчик.

В общем думаем головою, а не ... руками. ;-)

Edited by Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

AMK-Team.ru

×
×
  • Create New...