XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Toadcop

offline
Опыт: 54,313
Активность:
почему вы не решаете ??? такое чуство что я один имеют прикольные идеи =) а нельзя просто такому юниту добовлять реанкарнацию с 0 кулдаун и остальной фигней ??? и еще напр. триггер с отслеживанием на выбор юнит... объяснять не буду !
Старый 07.06.2006, 16:41
NETRAT

offline
Опыт: 83,712
Активность:
Toadcop а зачем? в этом нет необходимости
Старый 07.06.2006, 16:46
Toadcop

offline
Опыт: 54,313
Активность:
NETRAT Аватор прикольный =) ! это для того что бы юнит 10000% не загнулса ОТ ЛЮБОГО урона !
Старый 07.06.2006, 16:50
DioD

offline
Опыт: 45,134
Активность:
Ну даже не знаю, буду думать, вопрос действительно интересный.
Эта фича нужна непосредственно для системы самонов, где герой и его самон едины, тоесть если самон наносит урон он отлавливается и передаётся в другую функцию где этот-же урон наносит владелец самона.
Система готова на половину, самоны имеют хозяев, но вот урон отлавливается криво.
Старый 07.06.2006, 17:08
NETRAT

offline
Опыт: 83,712
Активность:
Цитата:
Эта фича нужна непосредственно для системы самонов, где герой и его самон едины, тоесть если самон наносит урон он отлавливается и передаётся в другую функцию где этот-же урон наносит владелец самона.
кстати, не так давно думал об этом - типа реферральных ссылок, думаю лучше всего будет хранить id в point value - это должно быть быстрее кеша
Старый 07.06.2006, 17:14
Toadcop

offline
Опыт: 54,313
Активность:
NETRAT
Цитата:
id в point value
- что в 1.20 SetUnitPointValue() от коментили ??? или что ? а то у меня 1.18. там она типа еще не рабочая =) кстати скинти мне соммон.дж. из 1.20 буду очень благодарен ! в раре занимает очень мало !
Старый 07.06.2006, 17:20
DioD

offline
Опыт: 45,134
Активность:
Может быть проблема со смертью этого юнита, тогда ссылка может потеряться.

DioD добавил:
Вот прошу
Старый 07.06.2006, 17:24
Toadcop

offline
Опыт: 54,313
Активность:
DioD ТНХ ! спасибо если не понял ;) !!!
Старый 07.06.2006, 17:31
Celebrate

offline
Опыт: 849
Активность:
DioD хм... тута не нашёл (перезалить не могу, ибо у меня с трафиком проблемы :(). Посмотри мою карту Helfire Defence (на Бру в полигоне лежит) - заклинание Ether Shield.
Старый 07.06.2006, 19:12
NETRAT

offline
Опыт: 83,712
Активность:
DioD то есть думаешь что PointVal при смерти теряется? Насколько мне известно - нет
Старый 07.06.2006, 23:34
DioD

offline
Опыт: 45,134
Активность:
Юнит при смерте должен быть удалён, что-бы очистить всех кого атаковал от тригера, я расчитывал именно так, хотя можно и не извращаться с этим.
Старый 08.06.2006, 08:15
Sergey
Старейший
offline
Опыт: 44,363
Активность:
DioD, ты не совсем прав. У меня был более мощный вариант наработки - назывался Passive Mana Shield. Поищи в наработках на сайте. Да и на форуме он должен быть где-то в Барахолке.

Там никаких полебаний жизней не заметно. Принцип такой - если жизнь полная (или почти полная), то используется событие unilt life become less. Если неполная, то Unit takes damage.
Старый 08.06.2006, 08:35
DioD

offline
Опыт: 45,134
Активность:
Я его скачал, ставлю 1000 хп и 1001 дмг, ну и безконечную ману, юнит умирает.
А остальные примеры на бру и хгм делают колебания заметными.
Старый 08.06.2006, 08:47
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от DioD
Я его скачал, ставлю 1000 хп и 1001 дмг, ну и безконечную ману, юнит умирает.

я хотя незнаю как это будет смотрется, но можно в этом случае удалить из игры этого умершего юнита (чтобы не проигрывалась анимация смерти), и создать в точности таково же юнита с манной = 0, а с жизнями равным = мак.жини - (полученый урон - мана)
Старый 08.06.2006, 09:02
Sergey
Старейший
offline
Опыт: 44,363
Активность:
DioD, твой пример - это скорее изврат. :) Но что мешает усовершенстовать алгоритм на этот случай? Например, методом remal-а.
Старый 08.06.2006, 09:58
Celebrate

offline
Опыт: 849
Активность:
Doid ну я же писал где смотреть. Идея Сергея - а если не хватает макс. жизней идёт добавление силы.

Вот тот самый спелл из Hellfire Defence. Герой создаёт вокруг себя щит, который поглащает 100% повреждений, до тех пор, пока у щита не закончатся жизни.
Код:
function Trig_Efir_Shield_Conditions takes nothing returns boolean
   return ( GetSpellAbilityId() == 'A001' ) and ( GetUnitTypeId(GetTriggerUnit()) == 'H001' )
endfunction

function ES_taction takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local trigger tt = LoadTriggerSCV(t, "trigger")
   call DestroyEffect(LoadEffectSCV(t, "effect"))
   call FlushObjectSCV(tt)
   call DestroyTrigger(tt)
   set tt = null
   call FlushObjectSCV(t)
   call DestroyTimer(t)
   set t = null
endfunction

function Evasion2 takes nothing returns nothing
    local trigger t = GetTriggeringTrigger()
    call SetHeroStr(GetTriggerUnit(), R2I(LoadRealSCV(t, "oldstr")), true)
    call SetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE, LoadRealSCV(t, "life"))
    set t = null
    call DestroyTrigger(GetTriggeringTrigger())
endfunction

function Evasion1 takes nothing returns nothing
    local real max = GetUnitState(GetTriggerUnit(), UNIT_STATE_MAX_LIFE)
    local real life = GetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE)
    local real newlife = GetEventDamage() + life
    local real damage = GetEventDamage()
    local real shieldlife = LoadRealSCV(GetTriggeringTrigger(), "shieldlife")
    local integer oldstr
    local integer needstr 
    local trigger t = null
    local trigger tt = GetTriggeringTrigger()
    local timer tm = null

    if shieldlife <= 0 then
       set tm = LoadTimerSCV(tt, "timer")
       call DestroyEffect(LoadEffectSCV(tm, "effect"))
       call FlushObjectSCV(tm)
       call DestroyTimer(tm)
       set tm = null
       set tt = null
       call DestroyTrigger(GetTriggeringTrigger())
    endif

    if newlife > max then
       set oldstr = GetHeroStr(GetTriggerUnit(), false)
       set needstr = R2I(newlife - max / 25.00) + 1
       call SetHeroStr(GetTriggerUnit(), oldstr + needstr, true)
       set t = CreateTrigger()
       call TriggerRegisterUnitLifeEvent(t, GetTriggerUnit(), LESS_THAN, newlife - 0.01 )
       call TriggerAddAction(t, function Evasion2 )
       call StoreRealSCV(t, "oldstr", oldstr)
       call StoreRealSCV(t, "life", life)
       set t = null
    endif
    call SetUnitState(GetTriggerUnit(), UNIT_STATE_LIFE, newlife)
    call StoreRealSCV(tt, "shieldlife", shieldlife - damage )
    set tt = null
endfunction

function Trig_Efir_Shield_Actions takes nothing returns nothing
   local unit caster = GetTriggerUnit()
   local effect e = AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostArmor\\FrostArmorTarget.mdl", caster, "chest")
   local trigger t = CreateTrigger()
   local timer tt = CreateTimer()
   call TriggerRegisterUnitEvent( t, caster, EVENT_UNIT_DAMAGED )
   call TriggerAddAction( t, function Evasion1 )
   call StoreRealSCV(t, "shieldlife", (GetUnitAbilityLevelSwapped('A001', caster) - 1)* 150 + 200)
   call StoreObjectSCV(tt, "trigger", t)
   call StoreObjectSCV(tt, "effect", e)
   call StoreObjectSCV(t, "timer", tt)
   call TimerStart(tt, 45, false, function ES_taction)
   call PlaySoundOnUnitBJ( gg_snd_EtherShield, 100, caster )
   set e = null
   set t = null
   set tt = null
   set caster = null
endfunction

//===========================================================================
function InitTrig_Ether_Shield takes nothing returns nothing
    set gg_trg_Ether_Shield = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Ether_Shield, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Ether_Shield, Condition( function Trig_Efir_Shield_Conditions ) )
    call TriggerAddAction( gg_trg_Ether_Shield, function Trig_Efir_Shield_Actions )
endfunction
Старый 08.06.2006, 10:05
DioD

offline
Опыт: 45,134
Активность:
Это предназначено не для героя, а для монитора урона от самонов, но смысл один и я не стал мутить в начале и названии темы.
Весь урон должен быть перехвачен и нанесён героем который вызвал самон.
Когда жизни 50% работает отлично, а когда 100% или меньше чем на один удар глючит и я не могу никак сделать, хоть какой пример я не качал не работает и усё.
Конечно можно и так, но имхо игроку будет видно что скачут хелзы.
Старый 08.06.2006, 13:26
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
Бред какой-то... я не пойму чего вы хотите добиться..?
Старый 08.06.2006, 13:28
DioD

offline
Опыт: 45,134
Активность:
Всё очень просто, я ищу тот самый пример на котором основана эта идея.
И как только я его найду, будет всем счастье.
Старый 08.06.2006, 13:31
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
DioD ладно давай ищи...
//Плиз зайди во флудильню, глянь...
Старый 08.06.2006, 13:33
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 01:56.