Name | Type | is_array | initial_value |
A_Orb | real | No | |
A_ORB | unit | Yes | |
Angle | real | Yes | |
ArcaneShiftCaster | unit | No | |
ArcaneShiftDamage | real | No | |
ArcaneShiftPoint | location | No | |
Arrow_point | location | No | |
AvaP | location | Yes | |
AvaP_unit | unit | No | |
Axe | unit | No | |
BarrierAbsorbs | integer | No | |
BerserkCalled | group | No | |
BFGroup | group | No | |
BFLife | real | No | |
BFPoint | location | No | |
BFUnit | unit | No | |
Blink_point | location | No | |
BloodThirst | unit | No | |
BloodThirsted | group | No | |
BloodThirsting | unit | No | |
BlueMinionGold | integer | No | |
Cast_Pos | location | Yes | |
Caster | unit | No | |
Casters | group | No | |
ChampionsPick | player | Yes | |
ChampionsPicks | unit | Yes | |
ChargeCheckGroup | group | No | |
ChargeCount | integer | No | |
ChargeDummy | unit | Yes | |
ChargeEffect | effect | Yes | |
ChargeEffect2 | effect | Yes | |
ChargeEffect3 | effect | Yes | |
ChargeEffectType | string | No | |
ChargeEndPoint | location | No | |
ChargeGroup | group | No | |
ChargehasBuff | integer | Yes | |
ChargeLoop | integervar | No | |
ChargePoint | location | Yes | |
ChargeRun | integer | Yes | |
ChargeRunPoint | location | Yes | |
ChargeStartTime | real | Yes | |
ChargeTarget | unit | Yes | |
ChargeTargetPoint | location | Yes | |
ChargeUnit | unit | Yes | |
ChargeUnitGroup | group | Yes | |
Clarity | real | No | |
CounterHelixCD | integer | No | |
Creep_Integer | integer | No | |
Creep_Point | location | Yes | |
Creep_Positions | location | Yes | |
Creep_Types | unitcode | Yes | |
CreepGold | integer | No | |
CreepItems | itemcode | Yes | |
CreepItemsCount | integer | No | |
CreepsType | unitcode | No | |
CreepsType2nd | unitcode | No | |
CreepsTypeHelbourne | unitcode | Yes | |
CreepsTypeLegion | unitcode | Yes | |
DamageBlockingAbility | abilcode | No | |
DamageEvent | real | No | |
DamageEventAmount | real | No | |
DamageEventCritical | boolean | No | |
DamageEventCriticalOverride | boolean | No | |
DamageEventExplodesUnit | boolean | No | |
DamageEventFilterUnit | unit | No | |
DamageEventOverride | boolean | No | |
DamageEventPrevAmt | real | No | |
DamageEventSource | unit | No | |
DamageEventsWasted | integer | No | |
DamageEventTarget | unit | No | |
DamageEventTrigger | trigger | No | |
DamageEventType | integer | No | |
DamageModifierEvent | real | No | |
DamageTypeDOT | integer | No | |
DamageTypeRanged | integer | No | |
DamageTypeSpell | integer | No | |
DeathDefiedUnit | unit | No | |
DefileLevel | integer | No | |
Dialog | dialog | No | |
DialogButton | button | Yes | |
Die | integer | Yes | |
Distance | real | Yes | |
DmgEvLife | real | No | |
DmgEvN | integer | No | |
DmgEvStack | unit | Yes | |
DmgEvTimer | timer | No | |
DMGS_Ability | abilcode | No | |
DMGS_Block | real | No | |
DMGS_BlockEvent | real | No | |
DMGS_CalculateBlock | trigger | No | |
DMGS_CalculateCrit | trigger | No | |
DMGS_CalculateEvasion | trigger | No | |
DMGS_Colour | string | Yes | |
DMGS_CritAttach | string | No | |
DMGS_CriticalBonus | real | No | |
DMGS_CriticalChance | real | No | |
DMGS_CriticalEvent | real | No | |
DMGS_CriticalPercent | real | No | |
DMGS_CritSFX | string | No | |
DMGS_Evasion | real | No | |
DMGS_EvasionEvent | real | No | |
DMGS_Floater | texttag | Yes | |
DMGS_Phase | integer | Yes | |
DMGS_Reduction | real | No | |
DMGS_ResetAbility | abilcode | No | |
DMGS_Size | real | Yes | |
DMGS_SizeDefault | real | No | |
DMGS_SizeHealthFactor | real | No | |
DMGS_SizeMax | real | No | |
DMGS_SizeMin | real | No | |
DMGS_Text | string | Yes | |
DMGS_TextIndex | integer | No | |
DMGS_TextSizeDecrease | real | Yes | |
DMGS_TextSizeDecreaseBase | real | No | |
DMGS_TextSizeIncrease | real | No | |
DmgTypPrev | integer | No | |
Dummy_Effect | effect | Yes | |
Dummy_Pos | location | Yes | |
Dummy_Unit | unit | Yes | |
Dying_G | group | No | |
Elune_Arrow | unit | Yes | |
EluneArrowEffect | effect | No | |
End_Game_If_All_Gone | boolean | No | |
Enemies | group | No | |
ER_Angel | real | Yes | |
ER_Caster | unit | Yes | |
ER_Group | group | No | |
ER_TARGER | unit | Yes | |
ER_TOCHKA | location | Yes | |
EssenceFluxAngle | real | No | |
EssenceFluxCaster | unit | No | |
EssenceFluxDummy | unit | No | |
EssenceFluxGroup | group | No | |
EssenceFluxMove | location | No | |
EssenceFluxPoint | location | No | |
F_CASTER | unit | No | |
F_DISTANCE | real | No | |
F_Dummy | group | No | |
F_GROUP | group | No | |
F_HASH | hashtable | No | |
F_KEY | integer | No | |
F_POINT | location | No | |
F_TARGET | unit | No | |
FeastAmount | real | No | |
FireSlug_Damage | real | Yes | |
FireSlug_Index | integer | No | |
FireSlug_Temp | integer | No | |
FireSlug_Timer | real | Yes | |
First_Blood | boolean | No | |
FrostNovaCaster | unit | No | |
FrostNovaDamage | real | No | |
FrostNovaGroup | group | No | |
FrostNovaTarget | unit | No | |
FrozenPromiseCaster | unit | No | |
FrozenPromiseDamage | real | No | |
FrozenPromiseGroup | group | No | |
FrozenPromiseTarget | unit | No | |
GDD__Integers | integer | Yes | |
GDD__LeftMapGroup | group | No | |
GDD__TriggerArray | trigger | Yes | |
GDD__UnitArray | unit | Yes | |
GDD_Damage | real | No | |
GDD_DamagedUnit | unit | No | |
GDD_DamageSource | unit | No | |
GDD_Event | real | No | |
GreaterBashCount | integer | No | |
Hashtable | hashtable | No | |
Heal | integer | No | |
HeavyStrikeDamage | real | No | |
HeavyStrikeGroup | group | No | |
HeavyStrikeHash | hashtable | No | |
HeavyStrikeLoc | location | No | |
HeavyStrikeLoop | real | No | |
HeavyStrikeTarget | unit | No | |
HeavyStrikeTimer | real | No | |
HeavyStrikeUnit | unit | No | |
HelbourneSplit | integer | No | |
Heroes | unitcode | Yes | |
HeroesMax | integer | No | |
Hit_Units | group | No | |
Hostile_RevivalTime | integer | No | |
Ignite_Index | integer | No | |
Ignite_Temp | integer | No | |
Ignite_Timer | real | Yes | |
IgniteDamage | integer | Yes | |
IgniteLoop | integer | Yes | |
IgniteTarget | unit | Yes | |
IgniteTrueDamage | integer | Yes | |
IgniteUnit | unit | Yes | |
IlluOrbCaster | unit | No | |
IlluOrbOn | integer | No | |
Integer | integer | No | |
Item_CanBeDisassemble | boolean | Yes | |
Item_Check | integer | No | |
Item_Count | integer | No | |
Item_CustomValue | integer | No | |
Item_DisassembleAbility | abilcode | No | |
Item_DisassembleEffect | string | No | |
Item_DisassemblePoint | location | Yes | |
Item_Effect | string | No | |
Item_EnableOS | boolean | No | |
Item_Fake | itemcode | Yes | |
Item_LoopA | integervar | No | |
Item_LoopB | integervar | No | |
Item_LoopC | integervar | No | |
Item_Mat1 | itemcode | Yes | |
Item_Mat1Amount | integer | Yes | |
Item_Mat2 | itemcode | Yes | |
Item_Mat2Amount | integer | Yes | |
Item_Mat3 | itemcode | Yes | |
Item_Mat3Amount | integer | Yes | |
Item_Mat4 | itemcode | Yes | |
Item_Mat4Amount | integer | Yes | |
Item_Mat5 | itemcode | Yes | |
Item_Mat5Amount | integer | Yes | |
Item_MatMax | integer | Yes | |
Item_Max | integer | No | |
Item_Owner | player | Yes | |
Item_OwneredItem | item | Yes | |
Item_OwnershipException | group | No | |
Item_Point | location | Yes | |
Item_Real | itemcode | Yes | |
Item_RecipeMax | integer | No | |
Item_Result | itemcode | Yes | |
ItemAmount | integer | Yes | |
ItemCount | integer | Yes | |
ItemCounting | integer | No | |
ItemMax | integer | No | |
ItemType | itemcode | Yes | |
IW_Angle | real | No | |
IW_Caster | unit | Yes | |
IW_CurrentIndex | integervar | No | |
IW_Duration | real | Yes | |
IW_Group | group | No | |
IW_Level | integer | Yes | |
IW_MaxIndex | integer | No | |
IW_Point | location | No | |
KarthusUnit | unit | No | |
KB | integervar | No | |
KB_Angle | real | Yes | |
KB_Distance | real | Yes | |
KB_Off | boolean | Yes | |
KB_Point | location | Yes | |
KB_Skip | integer | No | |
KB_Spam | integer | Yes | |
KB_Speed | real | Yes | |
KB_Target | unit | Yes | |
KB_Times | integer | No | |
Kill | integer | Yes | |
Kill_Count | integer | Yes | |
Kill_Waiting_Time | integer | Yes | |
KillMessages_List | string | Yes | |
KillspreeEndMessages_List | string | Yes | |
LastHeroStanding | force | No | |
LayWasteBonusDamage | integer | No | |
LayWasteGroup | group | No | |
LayWasteLevel | integer | No | |
LayWastePoint | location | No | |
LegionSplit | integer | No | |
Level | integer | Yes | |
LivingShadowBoolean | boolean | No | |
LivingShadowCaster | unit | No | |
LivingShadowDummy | unit | No | |
LivingShadowLevel | integer | No | |
LivingShadowTimer | timer | No | |
LivingShadowTimer1 | timer | No | |
LivingShadowTimer2 | timer | No | |
LivingShadowTrueFalse | boolean | No | |
LoopA | integervar | No | |
LoopB | integervar | No | |
LoopCreep | integer | No | |
Make_Kill | boolean | No | |
MB | multiboard | No | |
MUI_1 | integer | No | |
MUI_2 | integer | No | |
MUI_3 | integervar | No | |
MultiKilling_Spree | integer | Yes | |
MysticSplitCD | integer | No | |
NC | unit | No | |
NoherolimitBoolean | boolean | No | |
OneOfKind | unit | No | |
OneOfKindDamage | integer | No | |
OneOfKindStat | integer | No | |
Orb_otrad | group | Yes | |
Orb_point | location | No | |
PerseveranceEffect | effect | No | |
PH_Cast_Point | location | No | |
PH_Caster | unit | Yes | |
PH_Counter | integer | Yes | |
PH_Damage | integer | No | |
PH_Distance | integer | No | |
PH_Dummy | unit | Yes | |
PH_Dummy_Point | location | Yes | |
PH_Effect | unit | No | |
PH_Hook_Angle | real | Yes | |
PH_Hook_Point | location | Yes | |
PH_Hooked_Is | boolean | Yes | |
PH_Hooked_Unit | unit | Yes | |
PH_Index | integer | Yes | |
PH_Near_Point | location | No | |
PH_Table | hashtable | No | |
PH_Target_Point | location | No | |
PickedNumber | integer | No | |
Player_Colors | string | Yes | |
Player_Starting_Gold | integer | No | |
PlayerNames | string | Yes | |
PlayerNum | integer | No | |
Players | force | No | |
Players_Name | string | Yes | |
PlayersCount | integer | No | |
PlayersScourge | force | No | |
PlayersScourgeCount | integer | No | |
PlayersScourgePlaying | force | No | |
PlayersScourgeReverse | force | No | |
PlayersSentinel | force | No | |
PlayersSentinelCount | integer | No | |
PlayersSentinelPlaying | force | No | |
PlayersSentinelReverse | force | No | |
Points | location | Yes | |
RazorShuirkenAngle | real | No | |
RazorShurikenAngle2 | real | No | |
RazorShurikenCaster | unit | No | |
RazorShurikenCaster2 | unit | No | |
RazorShurikenDummy | unit | No | |
RazorShurikenDummy2 | unit | No | |
RazorShurikenGroup | group | No | |
RazorShurikenGroup2 | group | No | |
RazorShurikenMove | location | No | |
RazorShurikenMove2 | location | No | |
RazorShurikenPoint | location | No | |
RazorShurikenPoint2 | location | No | |
RazorShurikenTargetPoint | location | No | |
Real | real | Yes | |
RedMinionGold | integer | No | |
RequiemEffect | effect | No | |
RequiemLevel | integer | No | |
RisingForceDummy | unit | No | |
RisingForcePoint | location | No | |
RiverItems | itemcode | Yes | |
RiverItemsCount | integer | No | |
RiverItemsRegions | location | Yes | |
RiverItemsRegionsCount | integer | No | |
RiverItemsTaken | boolean | Yes | |
RNGInteg | integer | No | |
RNGReal | real | No | |
Roll | integer | No | |
RoyaltyShieldDamage | integer | No | |
RoyaltyShieldGroup | group | No | |
Rupture_Apagado | boolean | Yes | |
Rupture_Integer | integer | No | |
Rupture_Loop | integervar | No | |
RuptureCaster_1 | unit | Yes | |
RuptureCaster_2 | unit | Yes | |
RupturePunto_1 | location | Yes | |
RupturePunto_2 | location | No | |
RuptureTiempo | integer | Yes | |
RuptureTurnoApagado | integer | No | |
Slug_Reload | abilcode | Yes | |
Slug_ReloadBool | boolean | Yes | |
SlugShoots_Caster | unit | Yes | |
SlugShoots_Dummy | unit | Yes | |
SlugShoots_Index | integer | No | |
SlugShoots_Point1 | location | Yes | |
SlugShoots_Point2 | location | Yes | |
SlugShoots_Target | unit | Yes | |
SlugShoots_Temp | integer | No | |
SlugShootsColdDamage | real | Yes | |
SlugShootsDashDamage | real | Yes | |
SlugShootsDummyDistance | real | Yes | |
SlugShootsDummyDistanceAdd | real | Yes | |
SlugShootsDummyDistanceMax | real | Yes | |
SlugShootsFireDamage | real | Yes | |
SlugShootsLevel | integer | No | |
SmiteDamage | integer | Yes | |
SmiteTrueDamage | integer | No | |
Sounds_List | sound | Yes | |
Special | abilcode | Yes | |
SpecialMax | integer | No | |
Specials | abilcode | No | |
Start__orb | location | Yes | |
StoneBombCaster | unit | No | |
StoneBombDummy | unit | No | |
StoneBombPoint | location | Yes | |
StoneBombTarget | unit | No | |
SwACaster | unit | Yes | |
SwACount | integer | Yes | |
SwAInteger1 | integer | No | |
SwAInteger2 | integer | No | |
SwAMax | integer | Yes | |
SwATarget | unit | Yes | |
Target_Pos | location | Yes | |
Target_Unit | unit | Yes | |
Teleport_Caster | unit | Yes | |
Teleport_Effect | effect | Yes | |
Teleport_Group | group | Yes | |
Teleport_MaxTimer | real | Yes | |
Teleport_Picked | group | Yes | |
Teleport_Target | unit | Yes | |
Teleport_Timer | real | Yes | |
Teleport_X | integer | No | |
Teleport_Y | integer | No | |
Temp_Loc | location | No | |
TempInt | integer | No | |
TempInteger | integer | No | |
TempItem | item | No | |
TempUnit | unit | No | |
TestMode | boolean | No | |
TossCounter | integer | No | |
TossGroup | group | No | |
TossPosition | location | Yes | |
TossTimer | timer | No | |
TossUnit | unit | Yes | |
Total_Die | integer | Yes | |
Total_Kill | integer | Yes | |
Total_Messages | integer | No | |
UDex | integer | No | |
UDexGen | integer | No | |
UDexNext | integer | Yes | |
UDexPrev | integer | Yes | |
UDexRecycle | integer | No | |
UDexUnits | unit | Yes | |
UDexWasted | integer | No | |
Undamage_Group | group | Yes | |
UndeadFlashCaster | unit | No | |
UndeadFlashDamage | integer | No | |
UndeadFlashLoop | integer | No | |
UndeadFlashLoops | integer | No | |
UndeadFlashRandomUnit | unit | No | |
UndeadFlashTarget | unit | No | |
UndeadFlashUnitGroup1 | group | No | |
UndeadFlashUnitGroup2 | group | No | |
UnitDamageRegistered | boolean | Yes | |
UnitGroup | group | No | |
UnitIndexerEnabled | boolean | No | |
UnitIndexEvent | real | No | |
UnitIndexLock | integer | Yes | |
VG_Ability_ID | abilcode | No | |
VG_Angle | real | Yes | |
VG_AoE | real | No | |
VG_Cast_Dummy | unit | Yes | |
VG_Caster | unit | Yes | |
VG_Current_Index | integervar | No | |
VG_Damage | real | No | |
VG_Dummy | unit | Yes | |
VG_Dummy_Type | unitcode | No | |
VG_Dummy_Type2 | unitcode | No | |
VG_Max_Index | integer | No | |
VG_Owner | player | Yes | |
VG_Range | real | No | |
VG_TempPoint | location | No | |
VG_TempPoint2 | location | No | |
VG_TempPoint3 | location | No | |
VG_TempUnit | unit | No | |
WallOfpainDummy | unit | No | |
WallOfPainlevel | integer | No |
Credits:
calex3
Hitokiri Vanguard
dhguardianes
Weed
Bribe
dhguardianes
Hemske
Blizzard Entertainment
Stonneash
Darkfang
Kola
JesusHispster
noob_smoke
// GUI-Friendly Damage Detection -- v1.2.1 -- by Weep
// http:// www.thehelper.net/forums/showthread.php?t=137957
//
// Requires: only this trigger and its variables.
//
// -- What? --
// This snippet provides a leak-free, GUI-friendly implementation of an "any unit takes
// damage" event. It requires no JASS knowledge to use.
//
// It uses the Game - Value Of Real Variable event as its method of activating other
// triggers, and passes the event responses through a few globals.
//
// -- Why? --
// The traditional GUI method of setting up a trigger than runs when any unit is damaged
// leaks trigger events. This snippet is easy to implement and removes the need to do
// you own GUI damage detection setup.
//
// -- How To Implement --
// 0. Before you copy triggers that use GDD into a new map, you need to copy over GDD
// with its GDD Variable Creator trigger, or there will be a problem: the variables
// won't be automatically created correctly.
//
// 1. Be sure "Automatically create unknown variables while pasting trigger data" is
// enabled in the World Editor general preferences.
// 2. Copy this trigger category ("GDD") and paste it into your map.
// (Alternately: create the variables listed in the globals block below, create a
// trigger named "GUI Friendly Damage Detection", and paste in this entire text.)
// 3. Create your damage triggers using Game - Value Of Real Variable as the event,
// select GDD_Event as the variable, and leave the rest of the settings to the default
// "becomes Equal to 0.00".
// The event responses are the following variables:
// GDD_Damage is the amount of damage, replacing Event Response - Damage Taken.
// GDD_DamagedUnit is the damaged unit, replacing Event Response - Triggering Unit.
// Triggering Unit can still be used, if you need to use waits.
// Read the -- Notes -- section below for more info.
// GDD_DamageSource is the damaging unit, replacing Event Response - Damage Source.
//
// -- Notes --
// GDD's event response variables are not wait-safe; you can't use them after a wait in
// a trigger. If you need to use waits, Triggering Unit (a.k.a. GetTriggerUnit()) can
// be used in place of GDD_DamageSource. There is no usable wait-safe equivalent to
// Event Damage or Damage Source; you'll need to save the values yourself.
//
// Don't write any values to the variables used as the event responses, or it will mess
// up any other triggers using this snippet for their triggering. Only use their values.
//
// This uses arrays, so can detect damage for a maximum of 8190 units at a time, and
// cleans up data at a rate of 33.33 per second, by default. This should be enough for
// most maps, but if you want to change the rate, change the value returned in the
// GDD_RecycleRate function at the top of the code, below.
//
// By default, GDD will not register units that have Locust at the moment of their
// entering the game, and will not recognize when they take damage (which can only
// happen if the Locust ability is later removed from the unit.) To allow a unit to have
// Locust yet still cause GDD damage events if Locust is removed, you can either design
// the unit to not have Locust by default and add it via triggers after creation, or
// edit the GDD_Filter function at the top of the code, below.
//
// -- Credits --
// Captain Griffin on wc3c.net for the research and concept of GroupRefresh.
//
// Credit in your map not needed, but please include this README.
//
// -- Version History --
// 1.2.1: Minor code cleaning. Added configuration functions. Updated documentation.
// 1.2.0: Made this snippet work properly with recursive damage.
// 1.1.1: Added a check in order to not index units with the Locust ability (dummy units).
// If you wish to check for damage taken by a unit that is unselectable, do not
// give the unit-type Locust in the object editor; instead, add the Locust ability
// 'Aloc' via a trigger after its creation, then remove it.
// 1.1.0: Added a check in case a unit gets moved out of the map and back.
// 1.0.0: First release.
//===================================================================
// Configurables.
function GDD_RecycleRate takes nothing returns real //The rate at which the system checks units to see if they've been removed from the game
return 0.03
endfunction
function GDD_Filter takes unit u returns boolean //The condition a unit has to pass to have it registered for damage detection
return GetUnitAbilityLevel(u, 'Aloc') == 0 //By default, the system ignores Locust units, because they normally can't take damage anyway
endfunction
//===================================================================
// This is just for reference.
// If you use JassHelper, you could uncomment this section instead of creating the variables in the trigger editor.
// globals
// real udg_GDD_Event = 0.
// real udg_GDD_Damage = 0.
// unit udg_GDD_DamagedUnit
// unit udg_GDD_DamageSource
// trigger array udg_GDD__TriggerArray
// integer array udg_GDD__Integers
// unit array udg_GDD__UnitArray
// group udg_GDD__LeftMapGroup = CreateGroup()
// endglobals
//===================================================================
// System code follows. Don't touch!
function GDD_Event takes nothing returns boolean
local unit damagedcache = udg_GDD_DamagedUnit
local unit damagingcache = udg_GDD_DamageSource
local real damagecache = udg_GDD_Damage
set udg_GDD_DamagedUnit = GetTriggerUnit()
set udg_GDD_DamageSource = GetEventDamageSource()
set udg_GDD_Damage = GetEventDamage()
set udg_GDD_Event = 1.
set udg_GDD_Event = 0.
set udg_GDD_DamagedUnit = damagedcache
set udg_GDD_DamageSource = damagingcache
set udg_GDD_Damage = damagecache
set damagedcache = null
set damagingcache = null
return false
endfunction
function GDD_AddDetection takes nothing returns boolean
// if(udg_GDD__Integers[0] > 8190) then
// call BJDebugMsg("GDD: Too many damage events! Decrease number of units present in the map or increase recycle rate.")
// ***Recycle rate is specified in the GDD_RecycleRate function at the top of the code. Smaller is faster.***
// return
// endif
if(IsUnitInGroup(GetFilterUnit(), udg_GDD__LeftMapGroup)) then
call GroupRemoveUnit(udg_GDD__LeftMapGroup, GetFilterUnit())
elseif(GDD_Filter(GetFilterUnit())) then
set udg_GDD__Integers[0] = udg_GDD__Integers[0]+1
set udg_GDD__UnitArray[udg_GDD__Integers[0]] = GetFilterUnit()
set udg_GDD__TriggerArray[udg_GDD__Integers[0]] = CreateTrigger()
call TriggerRegisterUnitEvent(udg_GDD__TriggerArray[udg_GDD__Integers[0]], udg_GDD__UnitArray[udg_GDD__Integers[0]], EVENT_UNIT_DAMAGED)
call TriggerAddCondition(udg_GDD__TriggerArray[udg_GDD__Integers[0]], Condition(function GDD_Event))
endif
return false
endfunction
function GDD_PreplacedDetection takes nothing returns nothing
local group g = CreateGroup()
local integer i = 0
loop
call GroupEnumUnitsOfPlayer(g, Player(i), Condition(function GDD_AddDetection))
set i = i+1
exitwhen i == bj_MAX_PLAYER_SLOTS
endloop
call DestroyGroup(g)
set g = null
endfunction
function GDD_GroupRefresh takes nothing returns nothing
// Based on GroupRefresh by Captain Griffen on wc3c.net
if (bj_slotControlUsed[5063] == true) then
call GroupClear(udg_GDD__LeftMapGroup)
set bj_slotControlUsed[5063] = false
endif
call GroupAddUnit(udg_GDD__LeftMapGroup, GetEnumUnit())
endfunction
function GDD_Recycle takes nothing returns nothing
if(udg_GDD__Integers[0] <= 0) then
return
elseif(udg_GDD__Integers[1] <= 0) then
set udg_GDD__Integers[1] = udg_GDD__Integers[0]
endif
if(GetUnitTypeId(udg_GDD__UnitArray[udg_GDD__Integers[1]]) == 0) then
call DestroyTrigger(udg_GDD__TriggerArray[udg_GDD__Integers[1]])
set udg_GDD__TriggerArray[udg_GDD__Integers[1]] = null
set udg_GDD__TriggerArray[udg_GDD__Integers[1]] = udg_GDD__TriggerArray[udg_GDD__Integers[0]]
set udg_GDD__UnitArray[udg_GDD__Integers[1]] = udg_GDD__UnitArray[udg_GDD__Integers[0]]
set udg_GDD__UnitArray[udg_GDD__Integers[0]] = null
set udg_GDD__Integers[0] = udg_GDD__Integers[0]-1
endif
set udg_GDD__Integers[1] = udg_GDD__Integers[1]-1
endfunction
function GDD_LeaveMap takes nothing returns boolean
local boolean cached = bj_slotControlUsed[5063]
if(udg_GDD__Integers[2] < 64) then
set udg_GDD__Integers[2] = udg_GDD__Integers[2]+1
else
set bj_slotControlUsed[5063] = true
call ForGroup(udg_GDD__LeftMapGroup, function GDD_GroupRefresh)
set udg_GDD__Integers[2] = 0
endif
call GroupAddUnit(udg_GDD__LeftMapGroup, GetFilterUnit())
set bj_slotControlUsed[5063] = cached
return false
endfunction
// ===========================================================================
function InitTrig_GUI_Friendly_Damage_Detection takes nothing returns nothing
local region r = CreateRegion()
call RegionAddRect(r, GetWorldBounds())
call TriggerRegisterEnterRegion(CreateTrigger(), r, Condition(function GDD_AddDetection))
call TriggerRegisterLeaveRegion(CreateTrigger(), r, Condition(function GDD_LeaveMap))
call GDD_PreplacedDetection()
call TimerStart(CreateTimer(), GDD_RecycleRate(), true, function GDD_Recycle)
set r = null
endfunction