а в чём проблема, вражеский юнит входит в область, выбрать всех юнитов в этой области и записать их суммарное значение, потом выбрать всех союзных в этой области и тоже записать суммарное значение, в конце просто сравниваешь эти числа
а ты вообще дебажил что показывает "истекшее время таймера"? может там вообще другое число
но в принципе, суть в том, что триггер срабатывает при инициализации и изначально он выключен, как оно должно работать?
Заказчик: MaxIKor Способность: Отточенная стрельба Выполнено: Да
инструкция по импорту
скопируй папку к себе в карту, на основе яда создай абилку для героя (можешь просто скопировать из карты), в триггере DamageEventGUI указываешь эту абилку и в коде триггера DamageEvent заклинания от этого яда, так же в коде есть время, через которое нужно удалять стаки с юнита (там стоит 3 сек), в принципе там больше нечего изменять
не уверен есть ли какие-то баги и в принципе если будут трудности с импортом, можешь написать, я попробую исправить/помочь
код
делал на вджассе
library DamageEventLib
globals
private constant hashtable H = InitHashtable( )
private constant timer TempTimer = CreateTimer( )
private constant group TempGroup = CreateGroup( )
endglobals
private struct UnitStruct
integer attacker
integer damaged
integer count
timer t
endstruct
private function RemoveStacks takes nothing returns nothing
local timer t = GetExpiredTimer( )
local UnitStruct A = LoadInteger( H, GetHandleId( t ), 0 )
call RemoveSavedInteger( H, A.attacker, A.damaged )
call FlushChildHashtable( H, GetHandleId( t ) )
call DestroyTimer( t )
set A.t = null
set A.count = 0
set A.attacker = 0
set A.damaged = 0
call A.destroy( )
set t = null
endfunction
private function DamageEvent_Actions takes nothing returns nothing
local UnitStruct A
set udg_damaged = GetTriggerUnit( )
if GetUnitAbilityLevel( udg_damaged, 'Bssd' ) > 0 then // заклинания яда
call UnitRemoveAbility( udg_damaged, 'Bssd' )
set udg_damage = GetEventDamage( )
set udg_attacker = GetEventDamageSource( )
set A = LoadInteger( H, GetHandleId( udg_attacker ), GetHandleId( udg_damaged ) )
if A == 0 then
set A = UnitStruct.create( )
set A.t = CreateTimer( )
set A.attacker = GetHandleId( udg_attacker )
set A.damaged = GetHandleId( udg_damaged )
call SaveInteger( H, A.attacker, A.damaged, A )
call SaveInteger( H, GetHandleId( A.t ), 0, A )
endif
call TimerStart( A.t, 3.00, false, function RemoveStacks ) // через какое время удалить стаки ( 3.00 сек )
set A.count = A.count + 1
set udg_count = A.count
call TriggerExecute( gg_trg_DamageEventGUI )
set A.count = udg_count
endif
endfunction
//===========================================================================
private function Regist_2 takes nothing returns boolean
call TriggerRegisterUnitEvent( gg_trg_DamageEvent, GetTriggerUnit( ), EVENT_UNIT_DAMAGED )
return false
endfunction
private function Regist_1 takes nothing returns boolean
call TriggerRegisterUnitEvent( gg_trg_DamageEvent, GetFilterUnit( ), EVENT_UNIT_DAMAGED )
return false
endfunction
private function Regist takes nothing returns nothing
if gg_trg_DamageEvent != null then
call DestroyTrigger( gg_trg_DamageEvent )
endif
set gg_trg_DamageEvent = CreateTrigger( )
call GroupEnumUnitsInRect( TempGroup, bj_mapInitialPlayableArea, Condition( function Regist_1 ) )
call TriggerAddAction( gg_trg_DamageEvent, function DamageEvent_Actions )
call TimerStart( TempTimer, 600.00, false, function Regist )
endfunction
function InitTrig_DamageEvent takes nothing returns nothing
local region rectRegion = CreateRegion( )
local trigger trg = CreateTrigger( )
call RegionAddRect( rectRegion, bj_mapInitialPlayableArea )
call TriggerRegisterEnterRegion( trg, rectRegion, null )
call TriggerAddCondition( trg, Condition( function Regist_2 ) )
call TimerStart( TempTimer, 0.00, false, function Regist )
set trg = null
set rectRegion = null
endfunction
endlibrary
» WarCraft 3 / Внимание вопрос
» WarCraft 3 / Внимание вопрос
» WarCraft 3 / Руны
» WarCraft 3 / Совмещение TextTag и GetlocalPlayer. Десинхронизация.
» WarCraft 3 / Совмещение TextTag и GetlocalPlayer. Десинхронизация.
» WarCraft 3 / Совмещение TextTag и GetlocalPlayer. Десинхронизация.
» WarCraft 3 / Совмещение TextTag и GetlocalPlayer. Десинхронизация.
» WarCraft 3 / Таймер
» WarCraft 3 / Мясные монстры
проблема в том что я вряд ли возьмусь за собственную карту
» WarCraft 3 / Мясные монстры
хорошая работа
» WarCraft 3 / Таймер
но в принципе, суть в том, что триггер срабатывает при инициализации и изначально он выключен, как оно должно работать?
» WarCraft 3 / Мясные монстры
» WarCraft 3 / Прыжок сларка на гуи
» WarCraft 3 / Прыжок сларка на гуи
» WarCraft 3 / Прыжок сларка на гуи
и делаем прыжок, ничего сложного
» WarCraft 3 / Как активировать триггер, при выкидании предмета в область?
» WarCraft 3 / During The Dark Portal
» WarCraft 3 / Способности и алгоритмы на заказ
Заклинание готово!
Способность: Отточенная стрельба
Выполнено: Да
не уверен есть ли какие-то баги и в принципе если будут трудности с импортом, можешь написать, я попробую исправить/помочь
» WarCraft 3 / Способности и алгоритмы на заказ
Заказ принят
Способность: Отточенная стрельба
Спелл будет завершен к: возможно сегодня
Ред. rsfghd
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Триггер смены владельца здания.
Ред. rsfghd
» WarCraft 3 / Триггер смены владельца здания.
» WarCraft 3 / Триггер смены владельца здания.
» WarCraft 3 / Триггер смены владельца здания.
» WarCraft 3 / Хэш-таблица 1.26a