Сейчас 21:25:36 Вторник, 7 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Регистрация получения урона
Регистрация получения урона
RaiN_SДата: Вторник, 29 Января 2013, 11:44:18 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Привет.
Код
function Trig_X1_5I2I1a_Conditions takes nothing returns boolean
     return GetUnitAbilityLevel(GetAttacker(), 'A00M') > 0
endfunction

function Trig_X1_5I2I1a_Actions takes nothing returns nothing
     set udg_Attacker = GetAttacker()
     set udg_Attacked = GetTriggerUnit()
endfunction

//===========================================================================
function InitTrig_X1_5I2I1a takes nothing returns nothing
     set gg_trg_X1_5I2I1a = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_X1_5I2I1a, EVENT_PLAYER_UNIT_ATTACKED )
     call TriggerAddCondition( gg_trg_X1_5I2I1a, Condition( function Trig_X1_5I2I1a_Conditions ) )
     call TriggerAddAction( gg_trg_X1_5I2I1a, function Trig_X1_5I2I1a_Actions )
endfunction


Код
function Trig_X1_5I2I1b_Conditions takes nothing returns boolean
     return GetEventDamageSource() == udg_Attacker
endfunction

function Trig_X1_5I2I1b_Actions takes nothing returns nothing
     if GetUnitAbilityLevel(GetEventDamageSource(), 'A00M') > 1 then
         call SetUnitAbilityLevel( GetEventDamageSource(), 'A00M', GetUnitAbilityLevel(GetEventDamageSource(), 'A00M') - 1)
     else
         call UnitRemoveAbility( GetEventDamageSource(),  'A00M')
     endif
     set udg_Attacker = null
     set udg_Attacked = null
     endfunction

//===========================================================================
function InitTrig_X1_5I2I1b takes nothing returns nothing
     set gg_trg_X1_5I2I1b = CreateTrigger(  )
     call TriggerRegisterUnitEvent( gg_trg_X1_5I2I1b, udg_Attacked, EVENT_UNIT_DAMAGED )
     call TriggerAddCondition( gg_trg_X1_5I2I1b, Condition( function Trig_X1_5I2I1b_Conditions ) )
     call TriggerAddAction( gg_trg_X1_5I2I1b, function Trig_X1_5I2I1b_Actions )
endfunction


Во втором триггере не работает событие. Подскажите, пожалуйста, где косяк.
P.s. сама способность по действию подобна Overpower у Ursa.


 

BorodachДата: Вторник, 29 Января 2013, 13:02:46 | Сообщение # 2
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
udg_Attacked не работает
сделай все в 1 триггере, только создай глобальную переменную типа Триггер и замени gg_trg_X1_5I2I1b на название своей переменной.
Как то так должно быть
Код
function Trig_X1_5I2I1a_Conditions takes nothing returns boolean
return GetUnitAbilityLevel(GetAttacker(), 'A00M') > 0
endfunction

function Trig_X1_5I2I1b_Conditions takes nothing returns boolean
return GetEventDamageSource() == udg_Attacker
endfunction

function Trig_X1_5I2I1b_Actions takes nothing returns nothing
if GetUnitAbilityLevel(GetEventDamageSource(), 'A00M') > 1 then
call SetUnitAbilityLevel( GetEventDamageSource(), 'A00M', GetUnitAbilityLevel(GetEventDamageSource(), 'A00M') - 1)
else
call UnitRemoveAbility( GetEventDamageSource(),  'A00M')
endif
set udg_Attacker = null
set udg_Attacked = null
endfunction

function Trig_X1_5I2I1a_Actions takes nothing returns nothing
set udg_Attacker = GetAttacker()
set udg_Attacked = GetTriggerUnit()
call TriggerRegisterUnitEvent( gg_trg_X1_5I2I1b, udg_Attacked, EVENT_UNIT_DAMAGED )
call TriggerAddCondition( gg_trg_X1_5I2I1b, Condition( function Trig_X1_5I2I1b_Conditions ) )
call TriggerAddAction( gg_trg_X1_5I2I1b, function Trig_X1_5I2I1b_Actions )
endfunction

//===========================================================================
function InitTrig_X1_5I2I1a takes nothing returns nothing
set gg_trg_X1_5I2I1a = CreateTrigger(  )
call TriggerRegisterAnyUnitEventBJ( gg_trg_X1_5I2I1a, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( gg_trg_X1_5I2I1a, Condition( function Trig_X1_5I2I1a_Conditions ) )
call TriggerAddAction( gg_trg_X1_5I2I1a, function Trig_X1_5I2I1a_Actions )
endfunction


Karamba


Сообщение отредактировал Borodach - Вторник, 29 Января 2013, 13:03:40
 

RaiN_SДата: Вторник, 29 Января 2013, 13:43:36 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Отлично работает. Спасибо. :)
Теперь еще один нюанс: как сделать так, чтобы он реагировал на промахи, как на нанесение урона?


 

SirNikolasДата: Вторник, 29 Января 2013, 14:35:33 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Лучше оставь эту затею с промахами. Без багов не сделаешь.

 

NaturekidДата: Вторник, 29 Января 2013, 14:39:03 | Сообщение # 5
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
либо смирись с тем, что замах - тоже "полноценная атака"
Либо ставь время анимации = 0...


 

BorodachДата: Вторник, 29 Января 2013, 16:31:19 | Сообщение # 6
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Как вариант в триггере с отловом урона добавить условие что нанесенный урон больше 0

Karamba
 

NaturekidДата: Вторник, 29 Января 2013, 16:37:20 | Сообщение # 7
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Цитата (Borodach)
Как вариант в триггере с отловом урона добавить условие что нанесенный урон больше 0
ну а толку?
Этим ты только баши с дальнего боя и сниженные каменными доспехами урон отследишь...
А если он под оверпауэром заклинанием ударит? баг никуда не делся.
Можно по замаху создавать дамми с временем жизни=времени анимации атаки.
Если кастер отдал приказ какой-то - убивать этот дамми.
А в отлове урона проверять жив ли и тоже убивать, но засчитав удар, если есть дамми. 
Но и это тоже допускает баги.

Добавлено (29 Января 2013, 16:37:20)
---------------------------------------------
убирать а не убивать


 

BorodachДата: Вторник, 29 Января 2013, 16:39:22 | Сообщение # 8
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Цитата (Naturekid)
А если он под оверпауэром заклинанием ударит?
Заклинание к промахам не относится ни как...


Karamba
 

NaturekidДата: Вторник, 29 Января 2013, 16:45:22 | Сообщение # 9
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
чеиа я не догоняю, ты написал что-то, что определяет именно урон от атаки или что?
если нет - то получил урон - счётчик увеличился млм я что-то упустил?

Добавлено (29 Января 2013, 16:45:22)
---------------------------------------------
то есть  врубил скилл - пошёл в бой, но никого не атаковал, к примеру дагоном ударил, счётчик увеличился


 

BorodachДата: Вторник, 29 Января 2013, 17:19:43 | Сообщение # 10
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Проблема не в счетчике от урона.... а от атаки. Вопрос был как отследить если атаковал и промахнулся, чтоб это не посчитало за добавку к урону (по крайней мере я так понял)

Karamba
 

NaturekidДата: Вторник, 29 Января 2013, 17:25:02 | Сообщение # 11
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Ладно пофиг, всё равно там максимум скостылить можно без емдс. А с ней какие-то вопросы отпадают...

 

RaiN_SДата: Среда, 30 Января 2013, 10:50:00 | Сообщение # 12
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Вопрос был в том, что если юнит с данным бафом атаковал и промахнулся, то это учитывалось бы как удар, и счетчик кол-ва атак уменьшался.
Ну, раз все так сложно, можно обойтись без реакции на промахи. Всем спасибо. :)


 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Регистрация получения урона
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz