Name | Type | is_array | initial_value |
A_AoE | real | No | |
A_Bool | boolean | No | |
A_Damage | real | No | |
A_Real | real | No | |
A_Speed | real | No | |
Amount | real | No | |
Angle | real | No | |
BR_dummy | unit | No | |
BTB_SPE | effect | No | |
caster | unit | No | |
Caster | unit | No | |
CasterOwner | player | No | |
Cooldown | group | No | |
creepGroup | group | No | |
creepLocation | location | Yes | |
CW_Dummy | unit | No | |
DemoMapPoint | location | No | |
Distance | real | No | |
Duel_GP1 | force | No | |
Duel_GP2 | force | No | |
DuelPG | force | No | |
DuelPoint | location | Yes | |
DummyUnit | unit | No | |
EB_Dummy_creation_loc | location | Yes | |
EB_Dummy_unit_loc | location | No | |
EB_Trigger_unit | unit | No | |
EB_Trigger_unit_loc | location | No | |
EntaglingDummy | group | No | |
FADummy | unit | No | |
FB_Angle | real | No | |
FB_Caster | unit | No | |
FB_Caster_Loc | location | No | |
FB_Group | group | No | |
FB_Level | integer | No | |
FB_Offset | location | Yes | |
FB_TargetPoint | location | No | |
FB_TempLine | real | No | |
FE_Caster | unit | No | |
FE_Dummy | unit | No | |
FE_Facing | real | No | |
FiAbilityMain | abilcode | No | |
FiCustomValue | integer | No | |
FiDestructible | destructable | Yes | |
FiDummyGroup | group | No | |
FinalBlow | group | No | |
FiRealDistance | real | No | |
FissureDestructible | destructable | Yes | |
FissureDummy | unitcode | No | |
FiTargetPoint | location | No | |
FS_dummy | unit | No | |
GDD__Integers | integer | Yes | |
GDD__LeftMapGroup | group | No | |
GDD__TriggerArray | trigger | Yes | |
GDD_Damage | real | No | |
GDD_DamagedUnit | unit | No | |
GDD_DamageSource | unit | No | |
GDD_Event | real | No | |
GDD_UnitArray | unit | Yes | |
GoW_dummy | unit | No | |
GoW_dummy2 | unit | No | |
GroundSlam_Angle | real | No | |
GS_dummy | unit | No | |
Hashtable | hashtable | No | |
Hero_Array | unitcode | Yes | |
HydroJetCasters | group | No | |
HydroJetProjectiles | group | No | |
IB_dummy | unit | No | |
IM_dummy | unit | No | |
Integer | integer | No | |
Kills | integer | No | |
L | location | No | |
MaxTeamKills | integer | No | |
MB_dummy | unit | No | |
NFTreant | unit | No | |
order | integer | No | |
Pyro_dummy | unit | No | |
RandomHero | unit | No | |
RoF_dummy | unit | No | |
RS_Dummy | unit | No | |
RS_SPAngle | real | No | |
RS_TempLoc | location | No | |
RS_TempUnit | unit | No | |
SandFormLoc | location | Yes | |
SandFormUnit | unit | Yes | |
SandStorm | group | No | |
SonarAngle | real | No | |
SpellLevel | integer | No | |
SS_Dummy | unit | No | |
Target | unit | No | |
TargetLoc | location | No | |
TD | terraindeformation | No | |
Team1 | force | No | |
Team1Kills | integer | No | |
Team2 | force | No | |
Team2Kills | integer | No | |
TEMP_SpawnReinforcmentPoint | location | No | |
TEMP_UnitsInRainforcment | group | No | |
tempeff | effect | No | |
TempGroup | group | No | |
TempHandle | handle | No | |
TempInt | integer | No | |
TempInteger | integer | No | |
TempLoc | location | No | |
tempLocation | location | No | |
TempOffset | location | No | |
TempPoint | location | No | |
temppoint | location | No | |
temppoint2 | location | No | |
TempPoint2 | location | No | |
TempPoint3 | location | No | |
TempReal | real | No | |
temprect | rect | No | |
TempUnit | unit | No | |
TempUnit2 | unit | No | |
TheLeaderBoard | leaderboard | No | |
TmpGroup2 | group | No | |
TmpInt | integer | No | |
TmpInt2 | integer | Yes | |
TmpPoint2 | location | No | |
TmpPoint3 | location | No | |
TripleClap_Caster | unit | No | |
Tsunami_dummy | unit | No | |
WB_Dummy | unit | No | |
WB_SpecialEffect | effect | No | |
WF_p | location | No | |
WP_p | location | No | |
x | real | No | |
xLcuRem | unit | Yes |
//*********************************************************************************************
//* GUI-Friendly Damage Detection -- v1.2.0 -- 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 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. *
//* GDD_DamageSource is the damaging unit, replacing Event Response - Damage Source. *
//* *
//* -- Notes -- *
//* 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 have a maximum of 8190 instances at a time, and cleans up *
//* data at a rate of 33.33 per second. This should be enough for most maps. *
//* *
//* -- 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.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. *
//* *
//*********************************************************************************************
//globals
// real udg_GDD_Event
// real udg_GDD_Damage
// 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
//endglobals
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 the number used in the TimerStart line at the bottom of this trigger. Smaller is faster.***
// return
// endif
if(IsUnitInGroup(GetFilterUnit(), udg_GDD__LeftMapGroup)) then
call GroupRemoveUnit(udg_GDD__LeftMapGroup, GetFilterUnit())
else
if(GetUnitAbilityLevel(GetFilterUnit(), 'Aloc') == 0) 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
endif
return false
endfunction
function GDD_PresetDetection takes nothing returns nothing
local group g = CreateGroup()
local integer i = 0
set i = 0
loop
call GroupEnumUnitsOfPlayer(g, Player(i), Condition(function GDD_AddDetection))
call GroupClear(g)
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_PresetDetection()
call TimerStart(CreateTimer(), 0.03, true, function GDD_Recycle)
set r = null
endfunction