Name | Type | is_array | initial_value |
AllUnits | group | No | |
AllUnitsTemp | group | No | |
BlAbilityMain | abilcode | No | |
BlCaster | unit | Yes | |
BlCustomValue | integer | No | |
BlDummyGroup | group | No | |
BlInterval | real | Yes | |
BlRealDamage | real | Yes | |
BlRealDuration | real | Yes | |
BlRealInterval | real | Yes | |
BlTarget | unit | Yes | |
BringerGroups | hashtable | No | |
CasterDummy | unitcode | No | |
Channels | group | No | |
Chaos | group | No | |
Choice | integer | No | |
Choice1 | integer | No | |
Confirm_level1 | dialog | No | |
Confirm_level2 | dialog | No | |
Confirm_level3 | dialog | No | |
Confirm_level4 | dialog | No | |
Confirm_level5 | dialog | No | |
Confirm_level6 | dialog | No | |
Confirm_level7 | dialog | No | |
Confused | group | No | |
CurrentTree | unit | No | |
CustomRaceAI | force | No | |
EmpoweredMines | group | No | |
Entangling | group | No | |
Exploiting | boolean | No | false |
Extractors | group | No | |
Facing | real | No | |
FiAbilityMain | abilcode | No | |
FiCustomValue | integer | No | |
FiDestructible | destructable | Yes | |
FiDummyGroup | group | No | |
FiRealDistance | real | No | |
FiRealDuration | real | Yes | |
FissureDestructible | destructablecode | No | |
FiTargetPoint | location | No | |
FlickerDamageDealt | real | No | |
Flickering | group | No | |
FlickerTimer | timer | No | |
FlickerUnit | unit | No | |
FocusCount | integer | 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 | |
GoldInMine | integer | No | |
HiddenDummy | unitcode | No | |
HitPoints | real | No | |
ImAbilityDummy | abilcode | No | |
ImAbilityMain | abilcode | No | |
ImAirGroup | group | Yes | |
ImCaster | unit | Yes | |
ImCasterLoc | location | Yes | |
ImCustomValue | integer | No | |
ImDamagedGroup | group | Yes | |
ImDummyGroup | group | No | |
ImIntegerCount | integer | Yes | |
ImpaleDummy | unitcode | No | |
ImpaleSpikeDummy | unitcode | No | |
ImRealAngle | real | Yes | |
ImRealDeceleration | real | Yes | |
ImRealDistance | real | Yes | |
ImRealTimer | real | Yes | |
ImSubCaster | unit | Yes | |
ImSubCustomValue | integer | No | |
ImSubDummyGroup | group | No | |
IsSelected | boolean | No | |
LaserBeamDummy | unitcode | No | |
LBAbilityDummy | abilcode | No | |
LBAbilityMain | abilcode | No | |
LBCaster | unit | Yes | |
LBCustomValue | integer | No | |
LBDummy | unit | Yes | |
LBDummyGroup | group | No | |
LBInteger | integer | Yes | |
LBRealDamage | real | Yes | |
LBRealOffsetAmount | real | Yes | |
LBTarget | unit | Yes | |
LBTargetLoc | location | No | |
level1_Amte | unitcode | Yes | |
level1_Amte_Upgrade | unitcode | Yes | |
level1_Amte_Upgrade_Second | unitcode | Yes | |
level1_bug | unitcode | Yes | |
level1_bug_Upgrade | unitcode | Yes | |
level1_bug_Upgrade_Second | unitcode | Yes | |
level1_corrupt | unitcode | Yes | |
level1_corrupt_Upgrade | unitcode | Yes | |
level1_corrupt_Upgrade_Second | unitcode | Yes | |
level1_Demia | unitcode | Yes | |
level1_DemiaUpgrade | unitcode | Yes | |
level1_DemiaUpgrade_Second | unitcode | Yes | |
level1_demon | unitcode | Yes | |
level1_demon_Upgrade | unitcode | Yes | |
level1_demon_Upgrade_Second | unitcode | Yes | |
level1_draenei | unitcode | Yes | |
level1_draenei_Upgrade | unitcode | Yes | |
level1_draenei_Upgrade_Second | unitcode | Yes | |
level1_Drikta | unitcode | Yes | |
level1_Drikta_Upgrade | unitcode | Yes | |
level1_Drikta_Upgrade_Second | unitcode | Yes | |
level1_elf | unitcode | Yes | |
level1_elf_Upgrade | unitcode | Yes | |
level1_elf_Upgrade_Second | unitcode | Yes | |
level1_Emek | unitcode | Yes | |
level1_Emek_Upgrade | unitcode | Yes | |
level1_Emek_Upgrade_Second | unitcode | Yes | |
level1_human | unitcode | Yes | |
level1_human_Upgrade | unitcode | Yes | |
level1_human_Upgrade_Second | unitcode | Yes | |
level1_kobold | unitcode | Yes | |
level1_kobold_Upgrade | unitcode | Yes | |
level1_kobold_Upgrade_Second | unitcode | Yes | |
level1_murloc | unitcode | Yes | |
level1_murloc_Upgrade | unitcode | Yes | |
level1_murloc_Upgrade_Second | unitcode | Yes | |
level1_nature | unitcode | Yes | |
level1_nature_Upgrade | unitcode | Yes | |
level1_nature_Upgrade_Second | unitcode | Yes | |
level1_orc | unitcode | Yes | |
level1_orc_Upgrade | unitcode | Yes | |
level1_orc_Upgrade_Second | unitcode | Yes | |
level1_quill | unitcode | Yes | |
level1_quill_Upgrade | unitcode | Yes | |
level1_quill_Upgrade_Second | unitcode | Yes | |
level1_Rachnessa | unitcode | Yes | |
level1_Rachnessa_Upgrade | unitcode | Yes | |
level1_Rachnessa_Upgrade_Secon | unitcode | Yes | |
level1_Random | button | No | |
level1_select_Amte | button | No | |
level1_select_bug | button | No | |
level1_select_corrupt | button | No | |
level1_select_Demia | button | No | |
level1_select_demon | button | No | |
level1_select_draenei | button | No | |
level1_select_Drikta | button | No | |
level1_select_elf | button | No | |
level1_select_Emek | button | No | |
level1_select_human | button | No | |
level1_select_kobold | button | No | |
level1_select_murloc | button | No | |
level1_select_nature | button | No | |
level1_select_orc | button | No | |
level1_select_quill | button | No | |
level1_select_Rachnessa | button | No | |
level1_select_undead | button | No | |
level1_undead | unitcode | Yes | |
level1_undead_Upgrade | unitcode | Yes | |
level1_undead_Upgrade_Second | unitcode | Yes | |
level2_Amte | unitcode | Yes | |
level2_Demia | unitcode | Yes | |
level2_Drikta | unitcode | Yes | |
level2_Emek | unitcode | Yes | |
level2_furbolg | unitcode | Yes | |
level2_priest | unitcode | Yes | |
level2_Rachnessa | unitcode | Yes | |
level2_Random | button | No | |
level2_select_Amte | button | No | |
level2_select_Demia | button | No | |
level2_select_Drikta | button | No | |
level2_select_Emek | button | No | |
level2_select_furbolg | button | No | |
level2_select_priest | button | No | |
level2_select_Rachnessa | button | No | |
level2_select_Rachnessa_2 | button | No | |
level2_select_shade | button | No | |
level2_select_siren | button | No | |
level2_select_sorceress | button | No | |
level2_select_spirit_walker | button | No | |
level2_shade | unitcode | Yes | |
level2_siren | unitcode | Yes | |
level2_sorceress | unitcode | Yes | |
level2_spirit_walker | unitcode | Yes | |
level3_Amte | unitcode | Yes | |
level3_claw | unitcode | Yes | |
level3_Demia | unitcode | Yes | |
level3_Drikta | unitcode | Yes | |
level3_dryad | unitcode | Yes | |
level3_Emek | unitcode | Yes | |
level3_forest_troll | unitcode | Yes | |
level3_Rachnessa | unitcode | Yes | |
level3_Random | button | No | |
level3_rifleman | unitcode | Yes | |
level3_select_Amte | button | No | |
level3_select_claw | button | No | |
level3_select_Demia | button | No | |
level3_select_Drikta | button | No | |
level3_select_dryad | button | No | |
level3_select_Emek | button | No | |
level3_select_forest_troll | button | No | |
level3_select_Rachnessa | button | No | |
level3_select_rifleman | button | No | |
level3_select_spiderling | button | No | |
level3_select_talon_druid | button | No | |
level3_spiderling | unitcode | Yes | |
level3_talon_druid | unitcode | Yes | |
level4_Amte | unitcode | Yes | |
level4_barge | unitcode | Yes | |
level4_bat | unitcode | Yes | |
level4_blue_dragon | unitcode | Yes | |
level4_centaur | unitcode | Yes | |
level4_Demia | unitcode | Yes | |
level4_Drikta | unitcode | Yes | |
level4_Emek | unitcode | Yes | |
level4_faerie | unitcode | Yes | |
level4_Rachnessa | unitcode | Yes | |
level4_Random | button | No | |
level4_select_Amte | button | No | |
level4_select_barge | button | No | |
level4_select_bat | button | No | |
level4_select_blue_dragon | button | No | |
level4_select_centaur | button | No | |
level4_select_Demia | button | No | |
level4_select_Drikta | button | No | |
level4_select_Emek | button | No | |
level4_select_faerie | button | No | |
level4_select_Rachnessa | button | No | |
level5_ghost_pirate | unitcode | Yes | |
level5_navy | unitcode | Yes | |
level5_pirate | unitcode | Yes | |
level5_privateer | unitcode | Yes | |
level5_Random | button | No | |
level5_select_ghost_pirate | button | No | |
level5_select_navy | button | No | |
level5_select_pirate | button | No | |
level5_select_privateer | button | No | |
level6_Amte | unitcode | Yes | |
level6_Demia | unitcode | Yes | |
level6_Drikta | unitcode | Yes | |
level6_Emek | unitcode | Yes | |
level6_flying_machine | unitcode | Yes | |
level6_gargoyle | unitcode | Yes | |
level6_green_dragon | unitcode | Yes | |
level6_hippogryph | unitcode | Yes | |
level6_ogre | unitcode | Yes | |
level6_Rachnessa | unitcode | Yes | |
level6_Random | button | No | |
level6_select_Amte | button | No | |
level6_select_Demia | button | No | |
level6_select_Drikta | button | No | |
level6_select_Emek | button | No | |
level6_select_flying_machine | button | No | |
level6_select_gargoyle | button | No | |
level6_select_green_dragon | button | No | |
level6_select_hippogryph | button | No | |
level6_select_ogre | button | No | |
level6_select_Rachnessa | button | No | |
level7_Amte | unitcode | Yes | |
level7_black_dragon | unitcode | Yes | |
level7_bronze_dragon | unitcode | Yes | |
level7_Demia | unitcode | Yes | |
level7_Drikta | unitcode | Yes | |
level7_Emek | unitcode | Yes | |
level7_gryphon | unitcode | Yes | |
level7_Rachnessa | unitcode | Yes | |
level7_Random | button | No | |
level7_red_dragon | unitcode | Yes | |
level7_select_Amte | button | No | |
level7_select_black_dragon | button | No | |
level7_select_bronze_dragon | button | No | |
level7_select_Demia | button | No | |
level7_select_Drikta | button | No | |
level7_select_Emek | button | No | |
level7_select_gryphon | button | No | |
level7_select_Rachnessa | button | No | |
level7_select_red_dragon | button | No | |
level7_select_spirit_wyvern | button | No | |
level7_spirit_wyvern | unitcode | Yes | |
NEXT | button | No | |
No_level1 | button | No | |
No_level2 | button | No | |
No_level3 | button | No | |
No_level4 | button | No | |
No_level5 | button | No | |
No_level6 | button | No | |
No_level7 | button | No | |
OrderPoint | location | No | |
PlayerArray | boolean | Yes | |
PlayerCount | integer | No | 0 |
PowerLevel | integer | No | 0 |
PowerLevel1 | button | No | |
PowerLevel2 | button | No | |
PowerLevel3 | button | No | |
PowerLevel4 | button | No | |
PowerLevel5 | button | No | |
PowerLevel6 | button | No | |
PowerLevel7 | button | No | |
PreConfused | group | No | |
PreShielded | group | No | |
PREVIOUS | button | No | |
RaAbilityMain | abilcode | No | |
RaCasterLoc | location | No | |
RaGroup | group | No | |
Random0 | integer | No | |
Random1 | real | No | |
Random2 | real | No | |
Random3 | real | No | |
RaOffset | location | No | |
RavageArea | real | No | |
Ready | integer | No | 0 |
Repairing | group | No | |
RippingWaveDummy | unitcode | No | |
RWAbilityMain | abilcode | No | |
RWBoolean | boolean | Yes | |
RWCaster | unit | Yes | |
RWCasterLoc | location | No | |
RWCustomValue | integer | No | |
RWDamagedGroup | group | Yes | |
RWDummy | unit | Yes | |
RWDummyGroup | group | No | |
RWReal | real | Yes | |
RWRealDamage | real | Yes | |
RWRealDamageMinor | real | Yes | |
RWRealDistance | real | Yes | |
RWRealDuration | real | Yes | |
RWRealInterval | real | Yes | |
RWRealSpeed | real | Yes | |
Select0 | dialog | No | |
Select1_1 | dialog | No | |
Select1_2 | dialog | No | |
Select2 | dialog | No | |
Select3 | dialog | No | |
Select4 | dialog | No | |
Select5 | dialog | No | |
Select6 | dialog | No | |
Select7 | dialog | No | |
select_Amte | button | No | |
select_Changeling | button | No | |
select_Customize | button | No | |
select_Demia | button | No | |
select_Drikta | button | No | |
select_Emek | button | No | |
select_Rachnessa | button | No | |
select_Random | button | No | |
select_Void | button | No | |
SelectedUnits | group | No | |
SelectingPlayer | player | No | |
SelectPowerLevel | dialog | No | |
Shielded | group | No | |
STAbilityMain | abilcode | No | |
STCaster | unit | Yes | |
STCustomValue | integer | No | |
STDummyGroup | group | No | |
STRealDuration | real | Yes | |
Taverns | unitcode | Yes | |
TearTheWorldWeather | boolean | No | false |
TempBoolean | boolean | No | |
TempCustom | integer | No | |
TempInt | integer | No | |
TempOffset | location | No | |
TempOrder | ordercode | No | |
TempPlayer | player | No | |
TempPlayerGroup | force | No | |
TempPoint | location | No | |
TempReal | real | No | |
tempUnit | unit | No | |
TempUnit | unit | No | |
TempUnitGroup | group | No | |
TempUnitGroup2 | group | No | |
TempUnitGroup3 | group | No | |
TextOwner | force | No | |
Trees | group | No | |
UniqueValue | integer | No | 1 |
upgrades_backpack | techcode | Yes | |
upgrades_generic | techcode | Yes | |
upgrades_leve1_Amte | techcode | Yes | |
upgrades_leve1_Demia | techcode | Yes | |
upgrades_leve1_Drikta | techcode | Yes | |
upgrades_leve1_Emek | techcode | Yes | |
upgrades_level1_bug | techcode | Yes | |
upgrades_level1_corrupt | techcode | Yes | |
upgrades_level1_demon | techcode | Yes | |
upgrades_level1_draenei | techcode | Yes | |
upgrades_level1_elf | techcode | Yes | |
upgrades_level1_elf_2 | techcode | Yes | |
upgrades_level1_elf_6 | techcode | Yes | |
upgrades_level1_human | techcode | Yes | |
upgrades_level1_kobold | techcode | Yes | |
upgrades_level1_Lumber | techcode | Yes | |
upgrades_level1_murloc | techcode | Yes | |
upgrades_level1_nature | techcode | Yes | |
upgrades_level1_Orc_6 | techcode | Yes | |
upgrades_level1_quill | techcode | Yes | |
upgrades_level1_Rachnessa | techcode | Yes | |
upgrades_level1_undead | techcode | Yes | |
upgrades_level2_Amte | techcode | Yes | |
upgrades_level2_Amte_6 | techcode | Yes | |
upgrades_level2_Demia | techcode | Yes | |
upgrades_level2_Drikta | techcode | Yes | |
upgrades_level2_Drikta_6 | techcode | Yes | |
upgrades_level2_Emek | techcode | Yes | |
upgrades_level2_furbolg_6 | techcode | Yes | |
upgrades_level2_priest | techcode | Yes | |
upgrades_level2_priest_6 | techcode | Yes | |
upgrades_level2_Rachnessa | techcode | Yes | |
upgrades_level2_Rachnessa_2 | techcode | Yes | |
upgrades_level2_shade | techcode | Yes | |
upgrades_level2_siren | techcode | Yes | |
upgrades_level2_sorceress | techcode | Yes | |
upgrades_level2_spiritwalker | techcode | Yes | |
upgrades_level3_Amte | techcode | Yes | |
upgrades_level3_claw | techcode | Yes | |
upgrades_level3_Demia | techcode | Yes | |
upgrades_level3_Drikta | techcode | Yes | |
upgrades_level3_dryad | techcode | Yes | |
upgrades_level3_Emek | techcode | Yes | |
upgrades_level3_foresttroll | techcode | Yes | |
upgrades_level3_Rachnessa | techcode | Yes | |
upgrades_level3_rifleman | techcode | Yes | |
upgrades_level3_spiderling | techcode | Yes | |
upgrades_level3_talondruid | techcode | Yes | |
upgrades_level4_Amte | techcode | Yes | |
upgrades_level4_barge | techcode | Yes | |
upgrades_level4_bat | techcode | Yes | |
upgrades_level4_blue_dragon | techcode | Yes | |
upgrades_level4_centaur | techcode | Yes | |
upgrades_level4_Demia | techcode | Yes | |
upgrades_level4_Drikta | techcode | Yes | |
upgrades_level4_Emek | techcode | Yes | |
upgrades_level4_faerie_dragon | techcode | Yes | |
upgrades_level4_Rachnessa | techcode | Yes | |
upgrades_level5_ghost_pirate | techcode | Yes | |
upgrades_level5_navy | techcode | Yes | |
upgrades_level5_pirate | techcode | Yes | |
upgrades_level5_privateer | techcode | Yes | |
upgrades_level6_Amte | techcode | Yes | |
upgrades_level6_Demia | techcode | Yes | |
upgrades_level6_Drikta | techcode | Yes | |
upgrades_level6_Emek | techcode | Yes | |
upgrades_level6_flying_machine | techcode | Yes | |
upgrades_level6_gargoyle | techcode | Yes | |
upgrades_level6_green_dragon | techcode | Yes | |
upgrades_level6_hippogryph | techcode | Yes | |
upgrades_level6_ogre | techcode | Yes | |
upgrades_level6_Rachnessa | techcode | Yes | |
upgrades_level7_Amte | techcode | Yes | |
upgrades_level7_black_dragon | techcode | Yes | |
upgrades_level7_bronze_dragon | techcode | Yes | |
upgrades_level7_Demia | techcode | Yes | |
upgrades_level7_Drikta | techcode | Yes | |
upgrades_level7_Emek | techcode | Yes | |
upgrades_level7_gryphon | techcode | Yes | |
upgrades_level7_Rachnessa | techcode | Yes | |
upgrades_level7_red_dragon | techcode | Yes | |
upgrades_level7_spirit_wyvern | techcode | Yes | |
UserSelecting | boolean | No | |
VoidFocuses | group | No | |
Yes_level1 | button | No | |
Yes_level2 | button | No | |
Yes_level3 | button | No | |
Yes_level4 | button | No | |
Yes_level5 | button | No | |
Yes_level6 | button | No | |
Yes_level7 | button | No |
function Trig_Void_Func001Func013001002002 takes nothing returns boolean
return ( GetUnitTypeId(GetFilterUnit()) == 'ewsp' )
endfunction
function Trig_Void_Func001Func013A takes nothing returns nothing
call RemoveUnit( GetEnumUnit() )
endfunction
function Trig_Void_Func001Func014001002 takes nothing returns boolean
return ( GetUnitTypeId(GetFilterUnit()) == 'etol' )
endfunction
function Trig_Void_Func001Func014A takes nothing returns nothing
call ReplaceUnitBJ( GetEnumUnit(), 'h02R', bj_UNIT_STATE_METHOD_RELATIVE )
call GroupAddUnitSimple( GetLastReplacedUnitBJ(), udg_Trees )
endfunction
function Trig_Void_Func001Func018C takes nothing returns boolean
if ( not ( udg_Ready == udg_PlayerCount ) ) then
return false
endif
return true
endfunction
function Trig_Void_Actions takes nothing returns nothing
call EnableTrigger( gg_trg_Warp_Point )
call EnableTrigger( gg_trg_Warp_Decay )
call EnableTrigger( gg_trg_Unmakers_Off_Blight )
call SetPlayerStateBJ( udg_SelectingPlayer, PLAYER_STATE_RESOURCE_FOOD_CAP, 75 )
call SetPlayerStateBJ( udg_SelectingPlayer, PLAYER_STATE_FOOD_CAP_CEILING, 75 )
call SetPlayerStateBJ( udg_SelectingPlayer, PLAYER_STATE_RESOURCE_GOLD, 0 )
call SetPlayerUnitAvailableBJ( 'n051', false, udg_SelectingPlayer )
call SetPlayerUnitAvailableBJ( 'n04N', false, udg_SelectingPlayer )
call SetPlayerTechMaxAllowedSwap( 'E009', 1, udg_SelectingPlayer )
call SetPlayerTechMaxAllowedSwap( 'O01U', 1, udg_SelectingPlayer )
call SetPlayerTechMaxAllowedSwap( 'N050', 1, udg_SelectingPlayer )
call SetPlayerTechMaxAllowedSwap( 'U02J', 1, udg_SelectingPlayer )
call ForGroupBJ( GetRandomSubGroup(5, GetUnitsOfPlayerMatching(udg_SelectingPlayer, Condition(function Trig_Void_Func001Func013001002002))), function Trig_Void_Func001Func013A )
call ForGroupBJ( GetUnitsOfPlayerMatching(udg_SelectingPlayer, Condition(function Trig_Void_Func001Func014001002)), function Trig_Void_Func001Func014A )
call CreateNUnitsAtLoc( 1, 'h00B', udg_SelectingPlayer, GetUnitLoc(GetLastReplacedUnitBJ()), bj_UNIT_FACING )
call CreateNUnitsAtLoc( 2, 'h02X', udg_SelectingPlayer, GetUnitLoc(GetLastReplacedUnitBJ()), bj_UNIT_FACING )
endfunction
//===========================================================================
function InitTrig_Void takes nothing returns nothing
set gg_trg_Void = CreateTrigger( )
call TriggerAddAction( gg_trg_Void, function Trig_Void_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
//*********************************************************************************************
//* 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 -- *
//* 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 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