Регистрация получения урона
|
|
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
Блокировки:
| Вопрос был в том, что если юнит с данным бафом атаковал и промахнулся, то это учитывалось бы как удар, и счетчик кол-ва атак уменьшался. Ну, раз все так сложно, можно обойтись без реакции на промахи. Всем спасибо.
|
|
|
|