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

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

Закрытая тема
 
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
как не умереть от убийственного урона)
в доте у одного чара есть способность Shadow Grave, если не изменяет память. Так вот смысл способности в том что в течении 5ти секунд герой не может умереть. я делаю способность: герой ставит щит на союзника и он получает 0% урона от всех атак. он плохо работает. т.к. в дотовской способности он выжывает а в моей нет. -_-' если вы знаете как в доте то скажите.

вот код функции в которой он получает урон.
Код:
function MagicShield_OnDamage takes nothing returns nothing
    local unit e=GetEventDamageSource()
    local unit u=GetTriggerUnit()
    local real dmg=GetEventDamage()
    
    if dmg>0. then
    call SetUnitState(u,UNIT_STATE_LIFE,GetUnitState(u,UNIT_STATE_LIFE)+dmg)
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\OrbOfDeath\\OrbOfDeathMissile.mdl",u,"chest"))
    endif
    
    set e=null
    set u=null
endfunction
Старый 15.01.2010, 23:33
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,681
Активность:
а чем не угодили каменные доспехи? ставь минимальный урон 99999 и не умирай
// код неочень
Старый 15.01.2010, 23:37
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Цитата:
код неочень

я не удивлен.
...
работает, но видна иконка абилки. можно ее спрятать какнить?

Bee добавил:
код непонравился? мне было бы интересно посмотреть на твой в таком случае

Bee добавил:
это намек своего рода

Bee добавил:
кстати: абилка не спасает от триггерного урона
Старый 15.01.2010, 23:51
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,681
Активность:
мне было бы интересно посмотреть на твой в таком случае
мой вариант:
  • отступы в условии
  • setunitstate => setwidgetlife <3
  • dmg незачем заносить в локалку, ты только теряешь во времени
  • к сожалению, на этом все; код короткий ='(
можно ее спрятать какнить?
можно, но я не скажу при помощи какого спеллбука это делается
кстати: абилка не спасает от триггерного урона
у тебя там что, все настолько тупо?
Старый 15.01.2010, 23:58
9thNerZul
forum/warcraft3
offline
Опыт: 4,884
Активность:
Enein:
а чем не угодили каменные доспехи? ставь минимальный урон 99999 и не умирай
Он имел ввиду, что это от триггерного урона не защищает:).
Зы если атака>чем максимальное кол-во жизней юнит умрет, если у юнита макс. кол-во жизней, то жизни надо восстанавливать спустя 0сек.
Старый 16.01.2010, 00:04
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Цитата:
жизни надо восстанавливать спустя 0сек.

мм... неработает

Bee добавил:
я поставил TriggerSleepAction(0.) после строки с ifом
Старый 16.01.2010, 00:10
ScorpioT1000
Работаем
online
Опыт: отключен
надо юзать событие юнит атакован
Старый 16.01.2010, 00:13
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
поподробнее можно?
Старый 16.01.2010, 00:20
agentex

offline
Опыт: 34,534
Активность:
а чем не угодили каменные доспехи? ставь минимальный урон 99999 и не умирай
оно отражает физ урон онли
Старый 16.01.2010, 00:21
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
да, это не подходит.

Bee добавил:
в доте с бафом абилки, если у тебя 5 хп и если ты получаеш 800 дмг то ты здоров.
Старый 16.01.2010, 00:22
agentex

offline
Опыт: 34,534
Активность:
кстати лучше использовать SetWidgetLife, оно быстрее
agentex добавил:
Bee, выложи полный код спела
Старый 16.01.2010, 00:28
DioD

offline
Опыт: 45,184
Активность:
юнит не будет выживать если урон свыше максимального ХП цели, это не предусмотрено столь простой функцией.
кроме того юнит всё равно будет получать урон если он на полных ХП.
в доте гораздо гораздо сложнее реализованы щиты.
Старый 16.01.2010, 07:16
avatarDr
Neophyte
offline
Опыт: 6,474
Активность:
Если отлавливать последний (смертельный) удар по цели и восстанавливать триггерно здоровье, будет работать? Или юнит успеет перейти в царство мёртвых?
Старый 16.01.2010, 10:55
DioD

offline
Опыт: 45,184
Активность:
рекомендую (настоятельно) прочитать пост выше, там указано в каких случаях это не работает "так просто"
Старый 16.01.2010, 12:30
reALien

offline
Опыт: 29,211
Активность:
Можно отлавливать событие атаки/каста по нужномц юниту и на мгновение делать его неуязвимым, они срабатывают за долю секунды до получения урона.
Старый 16.01.2010, 12:43
DioD

offline
Опыт: 45,184
Активность:
атака с уроном как и каст не связаны совершенно.
Старый 16.01.2010, 13:07
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
хм... я так подумал а может быть при касте запускать таймер с периодом 0.0000000001?
который проверяет если у воина меньше здоровья чем было то восстановить на то что было.


при касте этой способности я запускаю еще одит триггер который создает дамми воинов которые кружаться вокруг него. это типо красиво. и еще один триггер который каждую секунду отбавляет 1 еденицу от переменной Duration. если Duration меньше или равно 0 то триггер с перемещением дисаблется и удаляется триггер udg_ss_MagicShiled_DmgTrigger. Вот весь код триггера, отвечающий за урон.

» code
Код:
function MagicShield_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A001'
endfunction

function MagicShield_OnDamage takes nothing returns nothing
    local unit e=GetEventDamageSource()
    local unit u=GetTriggerUnit()
    local real dmg=GetEventDamage()
    
    if dmg>0. then
    call SetUnitState(u,UNIT_STATE_LIFE,GetUnitState(u,UNIT_STATE_LIFE)+dmg)
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\OrbOfDeath\\OrbOfDeathMissile.mdl",u,"chest"))
    endif
    
    set e=null
    set u=null
endfunction

function MagicShield_Actions takes nothing returns nothing
    local unit u=GetSpellTargetUnit()
    local trigger t=CreateTrigger()
    
    set udg_ss_MagicShiled_DmgTrigger=t
    
    //call UnitAddAbility(u,'A002')
    
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_DAMAGED)
    call TriggerAddAction(t,function MagicShield_OnDamage)
    
    set t=null
    set u=null
endfunction

//===========================================================================
function InitTrig_MagicShield_Trigger takes nothing returns nothing
    local trigger t=CreateTrigger()
    local integer i=0
    local filterfunc f=Filter(function Link)
    
    loop
    exitwhen i==16
    call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,f)
    set i=i+1
    endloop
    
    call TriggerAddCondition(t,Condition(function MagicShield_Conditions))
    call TriggerAddAction(t,function MagicShield_Actions)
    
    set t=null
    call DestroyFilter(f)
    set f=null
endfunction
Старый 17.01.2010, 18:21
Rewenger
The culprit will not die
offline
Опыт: 35,273
Активность:
Bee, при получении урона можно сделать юнита неуязвимым. И запустить таймер на 0.01 сек, который при экспиратионе будет делать юнита уязвимым. Но лучше, имхо, поставить периодический триггер, потому что неуязвимость спадёт через время, меньшее 0.01. Плюс к тому же неуязвимость на столь короткий промежуток времени в "защите" не отображается.
Лично я это много раз проверял и использовал для процентажно-выборочного уменьшения любого урона по юниту.
Код неочень.
Старый 17.01.2010, 19:18
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Цитата:
Код неочень.

надоели)
я устал смотреть доктора Хауса и устал от серьезного кодинга) я делал GUI героя и просто хотелось что-то сделать галимое, я не старался даже. я не планировал сделать что-то грандиозное. ) так что не надо так говорить больше в этой теме)


Rewenger, щяс попробую ...

*Спустя ~10 минут*
спасибо, Rewenger, ты прав, спасает даже от убийственного урона. Мне было лень работать с таймерами и я подправил немного систему by Ranger21 в барахолке. Правда видна красная надпись "Invulnerable", надо уменьшить немного значение.

спасибо за старания, в принципе тему можно крыть.

Отредактировано Bee, 17.01.2010 в 22:00.
Старый 17.01.2010, 21:54
Doc

offline
Опыт: 63,163
Активность:
В доте все же по другому, потому что если ты за время действия заклинания восстановишь здоровье, сносить его тебе все же будут
Старый 17.01.2010, 23:06
Закрытая тема

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

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

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

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



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