Name | Type | is_array | initial_value |
Abilities | string | Yes | |
Abilities_Items | itemcode | Yes | |
Ability_ultimate_Limit | integer | Yes | 0 |
AfterDamageEvent | real | No | |
AI_WarGolem | integer | No | 0 |
angry_totem | integer | Yes | |
angry_totem_timer | timer | Yes | |
AOEDamageEvent | real | No | |
AOEDamageSource | unit | No | |
ARMOR_TYPE_ETHEREAL | integer | No | |
ARMOR_TYPE_FLESH | integer | No | |
ARMOR_TYPE_METAL | integer | No | |
ARMOR_TYPE_NONE | integer | No | |
ARMOR_TYPE_STONE | integer | No | |
ARMOR_TYPE_WOOD | integer | No | |
ArmorTypeDebugStr | string | Yes | |
armorUp_stats | real | Yes | |
assasin_blade | integer | Yes | |
assasin_blade_timer | timer | Yes | |
ASTCount | integer | No | |
ATTACK_TYPE_CHAOS | integer | No | |
ATTACK_TYPE_HERO | integer | No | |
ATTACK_TYPE_MAGIC | integer | No | |
ATTACK_TYPE_NORMAL | integer | No | |
ATTACK_TYPE_PIERCE | integer | No | |
ATTACK_TYPE_SIEGE | integer | No | |
ATTACK_TYPE_SPELLS | integer | No | |
AttackTypeDebugStr | string | Yes | |
bknockback_hashtable | hashtable | No | |
bloodheart_temp_group | group | No | |
bonus_gold_to_top3 | integer | No | 0 |
boostersCD_hashtable | hashtable | No | |
boss_spells | abilcode | Yes | |
chance | integer | No | |
chance_2 | integer | No | |
chance_3 | integer | No | |
channel_dummies | group | No | |
chestgold_count | integer | Yes | |
cleared_level | boolean | Yes | |
colors | playercolor | Yes | |
CONVERTED_ATTACK_TYPE | attacktype | Yes | |
CONVERTED_DAMAGE_TYPE | damagetype | Yes | |
CP_HiddenItems | item | Yes | |
CP_HiddenItemsIndex | integer | No | |
CP_Item | item | No | |
CP_Point | location | No | |
CP_PointIsWalkable | boolean | No | |
CP_Rect | rect | No | |
creeps_enrage | integer | No | 0 |
current_wave | integer | No | 0 |
DAMAGE_TYPE_ACID | integer | No | |
DAMAGE_TYPE_COLD | integer | No | |
DAMAGE_TYPE_DEATH | integer | No | |
DAMAGE_TYPE_DEFENSIVE | integer | No | |
DAMAGE_TYPE_DEMOLITION | integer | No | |
DAMAGE_TYPE_DISEASE | integer | No | |
DAMAGE_TYPE_DIVINE | integer | No | |
DAMAGE_TYPE_ENHANCED | integer | No | |
DAMAGE_TYPE_FIRE | integer | No | |
DAMAGE_TYPE_FORCE | integer | No | |
DAMAGE_TYPE_LIGHTNING | integer | No | |
DAMAGE_TYPE_MAGIC | integer | No | |
DAMAGE_TYPE_MIND | integer | No | |
DAMAGE_TYPE_NORMAL | integer | No | |
DAMAGE_TYPE_PLANT | integer | No | |
DAMAGE_TYPE_POISON | integer | No | |
DAMAGE_TYPE_SHADOW_STRIKE | integer | No | |
DAMAGE_TYPE_SLOW_POISON | integer | No | |
DAMAGE_TYPE_SONIC | integer | No | |
DAMAGE_TYPE_SPIRIT_LINK | integer | No | |
DAMAGE_TYPE_UNIVERSAL | integer | No | |
DAMAGE_TYPE_UNKNOWN | integer | No | |
DamageEvent | real | No | |
DamageEventAmount | real | No | |
DamageEventAOE | integer | No | |
DamageEventAOEGroup | group | No | |
DamageEventArmorPierced | real | No | |
DamageEventArmorT | integer | No | |
DamageEventAttackT | integer | No | |
DamageEventDamageT | integer | No | |
DamageEventDefenseT | integer | No | |
DamageEventLevel | integer | No | |
DamageEventOverride | boolean | No | |
DamageEventPrevAmt | real | No | |
DamageEventSource | unit | No | |
DamageEventTarget | unit | No | |
DamageEventTrigger | trigger | No | |
DamageEventType | integer | No | |
DamageEventWeaponT | integer | No | |
DamageModifierEvent | real | No | |
DamageScalingUser | real | No | |
DamageScalingWC3 | real | No | |
DamageTypeBlocked | integer | No | |
DamageTypeCode | integer | No | |
DamageTypeCriticalStrike | integer | No | |
DamageTypeDebugStr | string | Yes | |
DamageTypeExplosive | integer | No | |
DamageTypeHeal | integer | No | |
DamageTypePure | integer | No | |
DamageTypePureExplosive | integer | No | |
DamageTypeReduced | integer | No | |
DeathEvent | real | No | |
debugcounter | integer | No | |
decimate_timer | timer | Yes | |
DEFENSE_TYPE_DIVINE | integer | No | |
DEFENSE_TYPE_FORTIFIED | integer | No | |
DEFENSE_TYPE_HEAVY | integer | No | |
DEFENSE_TYPE_HERO | integer | No | |
DEFENSE_TYPE_LIGHT | integer | No | |
DEFENSE_TYPE_MEDIUM | integer | No | |
DEFENSE_TYPE_NORMAL | integer | No | |
DEFENSE_TYPE_UNARMORED | integer | No | |
DefenseTypeDebugStr | string | Yes | |
demonic_blade_timer | timer | Yes | |
divinity_gauntlet_dmg | real | Yes | 1.00 |
Draft_choose_amount | integer | Yes | |
Draft_ChooseShop | unit | Yes | |
Draft_haschosen | boolean | Yes | |
Draft_hero_building | unit | Yes | |
Draft_item_options1 | itemcode | Yes | |
Draft_item_options2 | itemcode | Yes | |
Draft_item_options3 | itemcode | Yes | |
Draft_item_options4 | itemcode | Yes | |
Draft_item_options5 | itemcode | Yes | |
Draft_items_paused | boolean | Yes | |
Draft_ItemShop | unit | Yes | |
Draft_NumberofChosen | integer | Yes | |
Draft_regions | rect | Yes | |
Draft_rerolled | integer | Yes | |
Draft_trait_options1 | abilcode | Yes | |
Draft_trait_options2 | abilcode | Yes | |
Draft_trait_options3 | abilcode | Yes | |
Draft_trait_temp_num | integer | No | |
Draft_UpgradeShop | unit | Yes | |
end_boss | unit | No | |
end_boss_sound | sound | Yes | |
end_spell_int | integer | No | 0 |
end_temp_int | integer | No | |
end_voidtear | destructable | No | |
ending_dialog | dialog | No | |
ending_dialog_button | button | Yes | |
EnhancedDamageTarget | unit | No | |
enrage_timer | timer | No | |
final_pvp_lastopponent | unit | Yes | |
final_pvp_lives | integer | Yes | |
FinalDuels_timer | timer | No | |
FinalDuels_wins | integer | Yes | |
firehand_pseudo_chance | integer | Yes | 4 |
floating_text_enabled | boolean | Yes | true |
floating_text_table | hashtable | No | |
floating_text_targets | group | Yes | |
force_pull_hashtable | hashtable | No | |
Frenzy_count | integer | Yes | |
froststrike_dmg | real | Yes | |
GetLocalPlayer | player | No | |
gloves_spell_mastery | integer | Yes | |
Goldamount | integer | Yes | |
grim_stats_hp | integer | Yes | |
grim_stats_mana | integer | Yes | |
handle_temp | handle | No | |
handle_temp1 | handle | No | |
heal_amount | real | No | |
HEAL_CHECK_INTERVAL | real | No | |
heal_count | integer | No | |
heal_diff | real | No | |
heal_exitwhen | integer | No | |
heal_indexRef | integer | Yes | |
heal_indices | integer | Yes | |
heal_inSys | boolean | Yes | |
heal_integer | integervar | No | |
heal_lastLife | real | Yes | |
heal_life | real | No | |
heal_regen | real | Yes | |
heal_target | unit | No | |
HEAL_THRESHOLD | real | No | |
heal_timer | timer | No | |
HealEvent | real | No | |
healpot | integer | Yes | |
healpot_timer1 | timer | Yes | |
healpot_timer2 | timer | Yes | |
healpot_timer3 | timer | Yes | |
helm_used | boolean | Yes | |
heresy_bonus | real | No | |
heresy_hero | unit | Yes | |
heresy_timer | timer | Yes | |
Hotkey_Abilities | abilcode | Yes | |
Hotkey_Htable | hashtable | No | |
Hotkeys | string | Yes | |
Icon_pos | real | Yes | 0.07 |
Icon_pos_temp | real | No | |
iconpath | string | No | |
income_gold | integer | No | 400 |
income_wood | real | No | 10.00 |
Infinity_Tome | abilcode | Yes | |
infinityclaws_pseudo_chance | integer | Yes | 2 |
infoboard | multiboard | No | |
IntegerC | integer | No | |
IntegerD | integer | No | |
invpot_effect | effect | Yes | |
invpot_timer | timer | Yes | |
invpotcd_timer | timer | Yes | |
is_pvpround | boolean | No | |
IsDamageAttack | boolean | No | |
IsDamageCode | boolean | No | |
IsDamageMelee | boolean | No | |
IsDamageRanged | boolean | No | |
IsDamageSpell | boolean | No | |
item_25 | integer | Yes | |
item_35 | integer | Yes | |
item_35_SpecialEffect | effect | Yes | |
item_37 | integer | Yes | |
item_37_Unit | unit | Yes | |
item_6 | integer | Yes | |
item_6_SpecialEffect | effect | Yes | |
item_9 | integer | Yes | |
item_9_SpecialEffect | effect | Yes | |
item_energy_staff | effect | Yes | |
javelin_counter | integer | Yes | |
javelin_target | unit | Yes | |
keg_pseudo_chance | integer | Yes | 10 |
kill_selected_unit | unit | Yes | |
killblow_stats | integer | Yes | |
LethalDamageEvent | real | No | |
LethalDamageHP | real | No | |
lose_temp_int | integer | No | |
lvl1_trait_taken | boolean | Yes | |
lvl2_trait5 | integer | Yes | |
lvl2_trait7 | integer | Yes | |
lvl2_trait_taken | boolean | Yes | |
lvl3_trait3 | integer | Yes | |
lvl3_trait4 | integer | Yes | |
lvl3_trait_taken | boolean | Yes | |
lvl3_wave_num | integer | No | |
manapot | integer | Yes | |
manapot_timer1 | timer | Yes | |
manapot_timer2 | timer | Yes | |
manapot_timer3 | timer | Yes | |
map_reveal | fogmodifier | Yes | |
maxabilities | hashtable | No | |
maxabilities_counter | integer | Yes | |
move_bknockback_group | group | No | |
move_boosters_group | group | No | |
move_force_pull_group | group | No | |
move_projectiles_group | group | No | |
move_telekinesis_group | group | No | |
NextDamageType | integer | No | |
NICKActivePlayers | force | No | |
NICKAllStatsColour | integer | No | |
NICKAllStatsShop | unit | No | |
NICKBeltofGiantStrengthGroup | group | No | |
NICKBeltofGiantStrengthInteger | integer | Yes | |
NICKBerserkerSpearGroup | group | No | |
NICKBootsofQuelThalasGroup | group | No | |
NICKBootsofQuelThalasInteger | integer | Yes | |
NickClawsofFrenzyTimer | timer | Yes | |
NICKDamageDummyArray | unit | Yes | |
NICKDuelsGroup | group | No | |
NICKDuelsWonGroup | group | No | |
NICKDuelUnitArray | unit | Yes | |
NICKFirehandGauntletsAllUnits | group | No | |
NICKFirehandGauntletsGroup | group | No | |
NICKFrenzyTraitDMG | integer | No | |
NICKGladiatorsAxeBoolean | boolean | Yes | true |
NICKGladiatorsAxeTimer | timer | Yes | |
NICKHashtable | hashtable | No | |
NICKHashtable2 | hashtable | No | |
NICKHashtable3 | hashtable | No | |
NICKHashtable4 | hashtable | No | |
NICKHashtable5 | hashtable | No | |
NICKHashtable6 | hashtable | No | |
NICKHeroArray | unit | Yes | |
NICKLevelUpFix | integer | Yes | |
NICKLevelUpFix_2 | integer | Yes | |
NICKLevelUpFix_3 | integer | Yes | |
NICKLightningJavelinCharges | integer | Yes | |
NICKMagicDaggerInteger | integer | Yes | |
NICKMagicDaggerReal | real | Yes | |
NICKManaShieldAbsorb | real | Yes | |
NICKManaShieldEffect | effect | Yes | |
NICKManaShieldTimer | timer | Yes | |
NICKObsidianRingGroup | group | No | |
NICKObsidianRingInteger | integer | Yes | |
NICKPeriodicTimer | timer | No | |
NICKPhoenixClawDamage | real | No | |
NICKPhoenixClawDMGType | integer | No | |
NICKPhoenixClawGroup | group | No | |
NICKRobeoftheMagiGroup | group | No | |
NICKRobeoftheMagiInteger | integer | Yes | |
NICKSerathilTimer | timer | Yes | |
NICKSkullofGuldanGroup | group | No | |
NICKSkullofGuldanInteger | integer | Yes | |
NICKStormHammerCharges | integer | Yes | |
NICKStormHammerTimer | timer | Yes | |
NICKTempText | string | No | |
NICKVoteCount | integer | No | |
NICKWandofSorcery | integer | Yes | |
nuhcounter | integer | No | |
NumberOfAbilities | integer | No | 94 |
orb_of_kil_activated | boolean | Yes | |
orb_of_kil_trait | integer | Yes | |
orb_of_kil_trait_count | integer | Yes | |
orb_unit | unit | Yes | |
orboflightning_pseudo_chance | integer | Yes | 10 |
overwhelm_trait | integer | Yes | |
pig | integer | No | |
pig_point | location | No | |
pillage_pseudo_chance | integer | Yes | 3 |
pillage_stats | integer | Yes | |
pillar_effect | effect | Yes | |
pillar_item_type | itemcode | Yes | |
player_arena | rect | Yes | |
player_colors | string | Yes | |
player_dead | boolean | Yes | |
portal_summoning_timer | timer | Yes | |
portal_trait_count | integer | Yes | |
pvp_last_player | unit | No | |
pvp_timer | timer | No | |
r_temp_num | integer | No | |
r_temp_num_2 | integer | No | |
r_temp_num_3 | integer | No | |
rainbowpot_best | integer | Yes | |
rainbowpot_bonusstats | integer | Yes | |
rainbowpot_used | boolean | Yes | |
rainbowpot_worst | integer | Yes | |
random_heroes | unitcode | Yes | |
randommode_selected | boolean | No | |
regen_buildup | real | Yes | |
REGEN_EVENT_INTERVAL | real | No | |
REGEN_STRENGTH_VALUE | real | No | |
REGEN_THRESHOLD | real | No | |
regen_timeleft | real | Yes | |
ReinforcedPlating_count | integer | Yes | |
ressed_timer | timer | Yes | |
retraining_Ability | abilcode | Yes | |
retraining_item_type | itemcode | Yes | |
retraining_levelof_Ability | integer | Yes | |
revival_heroes | group | No | |
revival_spots | rect | Yes | |
revived_hero | unit | No | |
reward_cd_ability | abilcode | No | |
reward_cd_ability_2 | abilcode | No | |
reward_cd_ability_3 | abilcode | No | |
reward_cd_ability_Copy | abilcode | No | |
reward_cheapitem | itemcode | No | |
reward_cheapitem_2 | itemcode | No | |
reward_cheapitem_3 | itemcode | No | |
reward_cheapitem_Copy | itemcode | No | |
reward_chosenbutton_num | integer | No | |
reward_chosenbutton_num_2 | integer | No | |
reward_chosenbutton_num_3 | integer | No | |
reward_dialog | dialog | No | |
reward_dialog_2 | dialog | No | |
reward_dialog_3 | dialog | No | |
reward_dialog_button | button | Yes | |
reward_dialog_button_2 | button | Yes | |
reward_dialog_button_3 | button | Yes | |
reward_expensiveitem | itemcode | No | |
reward_expensiveitem_2 | itemcode | No | |
reward_expensiveitem_3 | itemcode | No | |
reward_expensiveitem_Copy | itemcode | No | |
reward_learn_option_taken | integer | Yes | |
reward_learn_option_taken_2 | integer | Yes | |
reward_learn_option_taken_3 | integer | Yes | |
reward_learn_option_taken_Copy | integer | Yes | |
reward_lifesteal | real | No | |
reward_lifesteal_2 | real | No | |
reward_lifesteal_3 | real | No | |
reward_lifesteal_Copy | real | No | |
reward_list_randomnum | integer | Yes | |
reward_list_randomnum2 | integer | Yes | |
reward_list_randomnum3 | integer | Yes | |
reward_list_randomnumP1_1 | integer | Yes | |
reward_list_randomnumP1_2 | integer | Yes | |
reward_list_randomnumP2_1 | integer | Yes | |
reward_list_randomnumP2_2 | integer | Yes | |
reward_list_randomnumP3_1 | integer | Yes | |
reward_list_randomnumP3_2 | integer | Yes | |
reward_manaregen_pillar | real | No | |
reward_manaregen_pillar_Copy | real | No | |
reward_regen | real | No | |
reward_regen_2 | real | No | |
reward_regen_3 | real | No | |
reward_regen_Copy | real | No | |
reward_returndmg_pillar | integer | No | |
reward_returndmg_pillar_Copy | integer | No | |
reward_spelldmg | real | Yes | |
reward_spelldmg_2 | real | Yes | |
reward_spelldmg_3 | real | Yes | |
reward_spelldmg_Copy | real | Yes | |
reward_stats_perlvl | integer | Yes | |
reward_stats_perlvl_2 | integer | Yes | |
reward_stats_perlvl_3 | integer | Yes | |
reward_stats_perlvl_Copy | integer | Yes | |
reward_trigger | trigger | Yes | |
reward_trigger_2 | trigger | Yes | |
reward_trigger_3 | trigger | Yes | |
reward_trigger_list | trigger | Yes | |
reward_trigger_list_2 | trigger | Yes | |
reward_trigger_list_3 | trigger | Yes | |
reward_trigger_taken | boolean | Yes | |
reward_trigger_taken_2 | boolean | Yes | |
reward_trigger_taken_3 | boolean | Yes | |
reward_upsummons | integer | Yes | |
reward_upsummons_2 | integer | Yes | |
reward_upsummons_3 | integer | Yes | |
reward_upsummons_Copy | integer | Yes | |
rollint | integer | No | |
searingBlade | integer | Yes | |
searingBlade_auraUnit | unit | Yes | |
Sec_5 | integer | No | 5 |
shop_cheapitem_amount | integer | No | |
shop_cheapitem_type | itemcode | No | |
sonicspeed_trait | integer | Yes | |
spawn_chance1 | integer | No | |
spawn_chance2 | integer | No | |
spawn_chance3 | integer | No | |
spawn_everyone_cleared | boolean | No | |
spawn_num | integer | Yes | |
spawn_point | location | Yes | |
spawn_point_1 | location | Yes | |
spawn_point_2 | location | Yes | |
spawn_point_3 | location | Yes | |
spawn_waves | integer | No | |
spawn_waves_complete | boolean | Yes | |
spelldamage | real | Yes | 1.00 |
staff_pseudo_chance | integer | Yes | 7 |
start_timer | timer | No | |
SteelWeapons_count | integer | Yes | |
stormbolt_hashtable | hashtable | No | |
stormhammer | integer | Yes | |
stormhammer_SpecialEffect | effect | Yes | |
sund_used | boolean | Yes | |
telekinesis_hashtable | hashtable | No | |
temp_Abilities | abilcode | Yes | |
temp_Abilities_1 | abilcode | Yes | |
temp_Abilities_2 | abilcode | Yes | |
temp_Abilities_3 | abilcode | Yes | |
temp_ability | ability | No | |
temp_Ability | abilcode | No | |
temp_Ability_2 | abilcode | No | |
temp_Ability_3 | abilcode | No | |
temp_ability_code | abilcode | No | |
temp_bol | boolean | No | |
temp_bol_2 | boolean | No | |
temp_bol_3 | boolean | No | |
temp_int | integer | No | |
temp_int_2 | integer | No | |
temp_int_3 | integer | No | |
temp_integr | integer | Yes | |
temp_item | item | No | |
temp_num | integer | No | |
temp_num_2 | integer | No | |
temp_num_3 | integer | No | |
temp_Point | location | No | |
temp_real | real | No | |
temp_string | string | No | |
temp_string2 | string | No | |
temp_Unit | unit | No | |
temp_unit_group | group | No | |
temp_UnitGroup | group | No | |
thorniumweapons_trait | integer | Yes | |
time_day | integer | No | 1 |
time_week | integer | No | 1 |
Totalgold | integer | No | |
trait1 | integer | Yes | |
trait10 | integer | Yes | 0 |
trait10_Copy | integer | Yes | 0 |
trait10_SpecialEffect | effect | Yes | |
trait11 | integer | Yes | |
trait12 | integer | Yes | |
trait3 | integer | Yes | |
trait3_2 | integer | Yes | |
trait5 | integer | Yes | |
trait5_timer | timer | Yes | |
trait6 | integer | Yes | |
trait8 | integer | Yes | |
trait9 | integer | Yes | |
trait_picked_ability1 | abilcode | Yes | |
trait_picked_ability2 | abilcode | Yes | |
trait_picked_ability3 | abilcode | Yes | |
trait_picked_count | integer | Yes | |
UDex | integer | No | |
UDexGen | integer | No | |
UDexNext | integer | Yes | |
UDexPrev | integer | Yes | |
UDexRecycle | integer | No | |
UDexUnits | unit | Yes | |
UDexWasted | integer | No | |
unit_type_temp | unitcode | No | |
unit_type_temp_2 | unitcode | No | |
unit_type_temp_3 | unitcode | No | |
UnitIndexerEnabled | boolean | No | |
UnitIndexEvent | real | No | |
UnitIndexLock | integer | Yes | |
Vitality_count | integer | Yes | |
walls_effect | effect | Yes | |
walls_warning_timer | timer | No | |
warsong_hero | unit | No | |
wave_cleared | boolean | No | |
wave_diff_lvl | integer | No | |
wave_temp_num | integer | No | |
wave_temp_num_2 | integer | No | |
wave_temp_num_3 | integer | No | |
wave_timer | timer | No | |
wavesDecay_effect | weathereffect | No | |
wavesDecay_timer | timer | No | |
wavesDecay_timer_window | timerdialog | No | |
wavesDecay_warning_timer | timer | No | |
WEAPON_TYPE_AM_CHOP | integer | No | |
WEAPON_TYPE_CH_SLICE | integer | No | |
WEAPON_TYPE_CL_SLICE | integer | No | |
WEAPON_TYPE_CM_SLICE | integer | No | |
WEAPON_TYPE_MH_BASH | integer | No | |
WEAPON_TYPE_MH_CHOP | integer | No | |
WEAPON_TYPE_MH_SLICE | integer | No | |
WEAPON_TYPE_MH_STAB | integer | No | |
WEAPON_TYPE_ML_CHOP | integer | No | |
WEAPON_TYPE_ML_SLICE | integer | No | |
WEAPON_TYPE_MM_BASH | integer | No | |
WEAPON_TYPE_MM_CHOP | integer | No | |
WEAPON_TYPE_MM_SLICE | integer | No | |
WEAPON_TYPE_MM_STAB | integer | No | |
WEAPON_TYPE_NONE | integer | No | |
WEAPON_TYPE_RH_BASH | integer | No | |
WEAPON_TYPE_WH_BASH | integer | No | |
WEAPON_TYPE_WH_SLICE | integer | No | |
WEAPON_TYPE_WL_BASH | integer | No | |
WEAPON_TYPE_WL_SLICE | integer | No | |
WEAPON_TYPE_WL_STAB | integer | No | |
WEAPON_TYPE_WM_BASH | integer | No | |
WEAPON_TYPE_WM_SLICE | integer | No | |
WEAPON_TYPE_WM_STAB | integer | No | |
WeaponTypeDebugStr | string | Yes | |
weather_effect | weathereffect | No | |
winner_hero | unit | No | |
winner_player | player | No |
//===========================================================================
//
// Damage Engine 5.4.2.2 - update requires copying of the JASS script
//
//===========================================================================
library DamageEngine initializer Init
globals
private timer alarm = CreateTimer()
private boolean alarmSet = false
//Values to track the original pre-spirit Link/defensive damage values
private boolean canKick = true
private boolean totem = false
private real lastAmount = 0.00
private real lastPrevAmt = 0.00
private integer lastType = 0
private boolean lastCode = false
private real lastPierced = 0.00
private integer armorType = 0
private integer lastArmor = 0
private integer lastPrevArmor = 0
private integer defenseType = 0
private integer lastDefense = 0
private integer lastPrevDefense = 0
//Stuff to track recursive UnitDamageTarget calls.
private boolean eventsRun = false
private boolean kicking = false
private integer damageStack = 0
private unit array sourceStack
private unit array targetStack
private real array amountStack
private attacktype array attackTStack
private damagetype array damageTStack
private weapontype array weaponTStack
private integer array userTrigStack
private integer array typeStack
//Added in 5.4 to silently eliminate infinite recursion.
private integer userTrigs = 9
private integer eventTrig = 0
private integer array nextTrig
private trigger array userTrig
private boolean array trigFrozen
//Added/re-tooled in 5.4.1 to allow forced recursion (for advanced users only).
private constant integer LIMBO = 16 //Recursion will never go deeper than LIMBO.
private integer array levelsDeep //How deep the user recursion currently is.
public boolean inception = false //You must set DamageEngine_inception = true before dealing damage to utlize this.
//When true, it allows your trigger to potentially go recursive up to LIMBO.
private boolean dreaming = false
private boolean array inceptionTrig //Added in 5.4.2 to simplify the inception variable for very complex DamageEvent trigger.
private integer sleepLevel = 0
private group proclusGlobal = CreateGroup() //track sources of recursion
private group fischerMorrow = CreateGroup() //track targets of recursion
//Improves readability in the code to have these as named constants.
private constant integer MOD_EVENT = 1
private constant integer SHIELD_EVENT = 4
private constant integer DAMAGE_EVENT = 5
private constant integer ZERO_EVENT = 6
private constant integer AFTER_EVENT = 7
private constant integer LETHAL_EVENT = 8
private constant integer AOE_EVENT = 9
//private string crashStr = ""
endglobals
//GUI Vars:
/*
Retained from 3.8 and prior:
----------------------------
unit udg_DamageEventSource
unit udg_DamageEventTarget
unit udg_EnhancedDamageTarget
group udg_DamageEventAOEGroup
integer udg_DamageEventAOE
integer udg_DamageEventLevel
real udg_DamageModifierEvent
real udg_DamageEvent
real udg_AfterDamageEvent
real udg_DamageEventAmount
real udg_DamageEventPrevAmt
real udg_AOEDamageEvent
boolean udg_DamageEventOverride
boolean udg_NextDamageType
boolean udg_DamageEventType
boolean udg_IsDamageSpell
//Added in 5.0:
boolean udg_IsDamageMelee
boolean udg_IsDamageRanged
unit udg_AOEDamageSource
real udg_LethalDamageEvent
real udg_LethalDamageHP
real udg_DamageScalingWC3
integer udg_DamageEventAttackT
integer udg_DamageEventDamageT
integer udg_DamageEventWeaponT
//Added in 5.1:
boolean udg_IsDamageCode
//Added in 5.2:
integer udg_DamageEventArmorT
integer udg_DamageEventDefenseT
//Addded in 5.3:
real DamageEventArmorPierced
real udg_DamageScalingUser
//Added in 5.4.2 to allow GUI users to re-issue the exact same attack and damage type at the attacker.
attacktype array udg_CONVERTED_ATTACK_TYPE
damagetype array udg_CONVERTED_DAMAGE_TYPE
*/
private function RunTrigs takes integer i returns nothing
local integer cat = i
//if dreaming then
// call BJDebugMsg("Tried to run triggers while triggers were already running.")
// return
//endif
set dreaming = true
//call BJDebugMsg("Start of event running")
loop
set i = nextTrig[i]
exitwhen i == 0
exitwhen cat == MOD_EVENT and (udg_DamageEventOverride or udg_DamageEventType*udg_DamageEventType == 4)
exitwhen cat == SHIELD_EVENT and udg_DamageEventAmount <= 0.00
exitwhen cat == LETHAL_EVENT and udg_LethalDamageHP > 0.405
//set crashStr = "Bout to inspect " + I2S(i)
if not trigFrozen[i] and IsTriggerEnabled(userTrig[i]) then
set eventTrig = i
//set crashStr = "Bout to evaluate " + I2S(i)
if TriggerEvaluate(userTrig[i]) then
//set crashStr = "Bout to execute " + I2S(i)
call TriggerExecute(userTrig[i])
endif
//set crashStr = "Ran " + I2S(i)
//call BJDebugMsg("Ran " + I2S(i))
//if not (udg_DamageEventPrevAmt == 0.00 or udg_DamageScalingWC3 == 0.00 or udg_DamageEventAmount == 0.00) then
// if cat == MOD_EVENT then
// set udg_DamageScalingUser = udg_DamageEventAmount/udg_DamageEventPrevAmt
// elseif cat == SHIELD_EVENT then
// set udg_DamageScalingUser = udg_DamageEventAmount/udg_DamageEventPrevAmt/udg_DamageScalingWC3
// endif
//elseif udg_DamageEventPrevAmt == 0.00 then
// call BJDebugMsg("Prev amount 0.00 and User Amount " + R2S(udg_DamageEventAmount))
//elseif udg_DamageEventAmount == 0.00 then
// call BJDebugMsg("User amount 0.00 and Prev Amount " + R2S(udg_DamageEventPrevAmt))
//elseif udg_DamageScalingWC3 == 0.00 then
// call BJDebugMsg("WC3 amount somehow 0.00")
//endif
//set crashStr = "Filtered " + I2S(i)
//elseif i > 9 then
// if trigFrozen[i] then
// call BJDebugMsg("User Trigger is frozen")
// else
// call BJDebugMsg("User Trigger is off")
// endif
endif
endloop
//call BJDebugMsg("End of event running")
set dreaming = false
endfunction
private function OnAOEEnd takes nothing returns nothing
if udg_DamageEventAOE > 1 then
call RunTrigs(AOE_EVENT)
set udg_DamageEventAOE = 1
endif
set udg_DamageEventLevel = 1
set udg_EnhancedDamageTarget = null
set udg_AOEDamageSource = null
call GroupClear(udg_DamageEventAOEGroup)
endfunction
private function AfterDamage takes nothing returns nothing
if udg_DamageEventPrevAmt != 0.00 and udg_DamageEventDamageT != udg_DAMAGE_TYPE_UNKNOWN then
call RunTrigs(AFTER_EVENT)
endif
endfunction
private function Finish takes nothing returns nothing
local integer i = 0
local integer exit
if eventsRun then
//call BJDebugMsg("events ran")
set eventsRun = false
call AfterDamage()
endif
if canKick and not kicking then
//call BJDebugMsg("can kick")
if damageStack > 0 then
set kicking = true
//call BJDebugMsg("Clearing queued damage instances: " + I2S(damageStack))
loop
set exit = damageStack
set sleepLevel = sleepLevel + 1
loop
set udg_NextDamageType = typeStack[i]
//call BJDebugMsg("Stacking on " + R2S(amountStack[i]))
call UnitDamageTarget(sourceStack[i], targetStack[i], amountStack[i], true, false, attackTStack[i], damageTStack[i], weaponTStack[i])
call AfterDamage()
set i = i + 1 //Need to loop bottom to top to make sure damage order is preserved.
exitwhen i == exit
endloop
//call BJDebugMsg("Exit at: " + I2S(i))
exitwhen i == damageStack
endloop
//call BJDebugMsg("Terminate at at: " + I2S(i))
set sleepLevel = 0
loop
set i = i - 1
set trigFrozen[userTrigStack[i]] = false //Only re-enable recursive triggers AFTER all damage is dealt.
set levelsDeep[userTrigStack[i]] = 0 //Reset this stuff if the user tried some nonsense
exitwhen i == 0
endloop
//call BJDebugMsg("Cleared queued damage instances: " + I2S(damageStack))
set damageStack = 0 //Can only be set after all the damage has successfully ended.
set kicking = false
endif
call GroupClear(proclusGlobal)
call GroupClear(fischerMorrow)
//elseif kicking then
// call BJDebugMsg("Somehow still kicking")
//else
// call BJDebugMsg("Cannot kick")
endif
endfunction
private function ResetArmor takes nothing returns nothing
if udg_DamageEventArmorPierced != 0.00 then
call BlzSetUnitArmor(udg_DamageEventTarget, BlzGetUnitArmor(udg_DamageEventTarget) + udg_DamageEventArmorPierced)
endif
if armorType != udg_DamageEventArmorT then
call BlzSetUnitIntegerField(udg_DamageEventTarget, UNIT_IF_ARMOR_TYPE, armorType) //revert changes made to the damage instance
endif
if defenseType != udg_DamageEventDefenseT then
call BlzSetUnitIntegerField(udg_DamageEventTarget, UNIT_IF_DEFENSE_TYPE, defenseType)
endif
endfunction
private function FailsafeClear takes nothing returns nothing
//call BJDebugMsg("Damage from " + GetUnitName(udg_DamageEventSource) + " to " + GetUnitName(udg_DamageEventTarget) + " has been messing up Damage Engine.")
//call BJDebugMsg(R2S(udg_DamageEventAmount) + " " + " " + R2S(udg_DamageEventPrevAmt) + " " + udg_AttackTypeDebugStr[udg_DamageEventAttackT] + " " + udg_DamageTypeDebugStr[udg_DamageEventDamageT])
call ResetArmor()
set canKick = true
set totem = false
set udg_DamageEventAmount = 0.00
set udg_DamageScalingWC3 = 0.00
if udg_DamageEventDamageT != udg_DAMAGE_TYPE_UNKNOWN then
call RunTrigs(DAMAGE_EVENT) //Run the normal on-damage event based on this failure.
set eventsRun = true //Run the normal after-damage event based on this failure.
endif
call Finish()
endfunction
private function WakeUp takes nothing returns nothing
set alarmSet = false //The timer has expired. Flag off to allow it to be restarted when needed.
//if dreaming then
// set dreaming= false
// call BJDebugMsg("Timer set dreaming to False")
// call BJDebugMsg(crashStr)
//endif
if totem then
//Something went wrong somewhere; the WarCraft 3 engine didn't run the DAMAGED event despite running the DAMAGING event.
call FailsafeClear()
else
if not canKick and damageStack > 0 then
//call BJDebugMsg("Damage Engine recursion deployment was failing with application of: " + R2S(udg_DamageEventAmount))
set canKick = true
endif
call Finish() //Wrap up any outstanding damage instance
endif
call OnAOEEnd() //Reset things so they don't perpetuate for AoE/Level target detection
set udg_DamageEventPrevAmt = 0.00 //Added in 5.4.2.1 to try to squash the Cold Arrows glitch (failed to do it)
endfunction
private function CalibrateMR takes nothing returns nothing
set udg_IsDamageMelee = false
set udg_IsDamageRanged = false
set udg_IsDamageSpell = udg_DamageEventAttackT == 0 //In Patch 1.31, one can just check the attack type to find out if it's a spell.
if udg_DamageEventDamageT == udg_DAMAGE_TYPE_NORMAL and not udg_IsDamageSpell then //This damage type is the only one that can get reduced by armor.
set udg_IsDamageMelee = IsUnitType(udg_DamageEventSource, UNIT_TYPE_MELEE_ATTACKER)
set udg_IsDamageRanged = IsUnitType(udg_DamageEventSource, UNIT_TYPE_RANGED_ATTACKER)
if udg_IsDamageMelee and udg_IsDamageRanged then
set udg_IsDamageMelee = udg_DamageEventWeaponT > 0// Melee units play a sound when damaging
set udg_IsDamageRanged = not udg_IsDamageMelee // In the case where a unit is both ranged and melee, the ranged attack plays no sound.
endif // The Huntress has a melee sound for her ranged projectile, however it is only an issue
endif //if she also had a melee attack, because by default she is only UNIT_TYPE_RANGED_ATTACKER.
endfunction
private function OnPreDamage takes nothing returns boolean
local unit src = GetEventDamageSource()
local unit tgt = GetTriggerUnit()
local real amt = GetEventDamage()
local attacktype at = BlzGetEventAttackType()
local damagetype dt = BlzGetEventDamageType()
local weapontype wt = BlzGetEventWeaponType()
//call BJDebugMsg("First damage event running")
if dreaming then
//call BJDebugMsg("Dreaming")
if amt != 0.00 then
//Store recursive damage into a queue from index "damageStack" (0-15)
//This damage will be fired after the current damage instance has wrapped up its events.
//This damage can only be caused by triggers.
set amountStack[damageStack] = amt
set sourceStack[damageStack] = src
set targetStack[damageStack] = tgt
set attackTStack[damageStack] = at
set damageTStack[damageStack] = dt
set weaponTStack[damageStack] = wt
set userTrigStack[damageStack] = eventTrig
if udg_NextDamageType == 0 then
set typeStack[damageStack] = udg_DamageTypeCode
else
set typeStack[damageStack] = udg_NextDamageType
endif
//Next block added in 5.4.1 to allow *some* control over whether recursion should kick
//in. Also it's important to track whether the source and target were both involved at
//some earlier point, so this is a more accurate and lenient method than before.
set inception = inception or inceptionTrig[eventTrig]
call GroupAddUnit(proclusGlobal, udg_DamageEventSource)
call GroupAddUnit(fischerMorrow, udg_DamageEventTarget)
if kicking and IsUnitInGroup(src, proclusGlobal) and IsUnitInGroup(tgt, fischerMorrow) then
if inception and not trigFrozen[eventTrig] then
set inceptionTrig[eventTrig] = true
if levelsDeep[eventTrig] < sleepLevel then
set levelsDeep[eventTrig] = levelsDeep[eventTrig] + 1
if levelsDeep[eventTrig] >= LIMBO then
set trigFrozen[eventTrig] = true
endif
endif
else
set trigFrozen[eventTrig] = true
endif
endif
set damageStack = damageStack + 1
//call BJDebugMsg("damageStack: " + I2S(damageStack) + " levelsDeep: " + I2S(levelsDeep[eventTrig]) + " sleepLevel: " + I2S(sleepLevel))
call BlzSetEventDamage(0.00) //queue the damage instance instead of letting it run recursively
endif
else
if not kicking then
//Added 25 July 2017 to detect AOE damage or multiple single-target damage
if alarmSet then
if totem then
if dt != DAMAGE_TYPE_SPIRIT_LINK and dt != DAMAGE_TYPE_DEFENSIVE and dt != DAMAGE_TYPE_PLANT then
//if 'totem' is still set and it's not due to spirit link distribution or defense retaliation,
//the next function must be called as a debug. This reverts an issue I created in patch 5.1.3.
call FailsafeClear()
else
set totem = false
set lastAmount = udg_DamageEventAmount
set lastPrevAmt = udg_DamageEventPrevAmt //Store the actual pre-armor value.
set lastType = udg_DamageEventType //also store the damage type.
set lastCode = udg_IsDamageCode //store this as well.
set lastArmor = udg_DamageEventArmorT
set lastPrevArmor = armorType
set lastDefense = udg_DamageEventDefenseT
set lastPrevDefense = defenseType
set lastPierced = udg_DamageEventArmorPierced
set canKick = false
endif
else
call Finish()
endif
if src != udg_AOEDamageSource then //Source has damaged more than once
call OnAOEEnd() //New damage source - unflag everything
set udg_AOEDamageSource = src
elseif tgt == udg_EnhancedDamageTarget then
set udg_DamageEventLevel= udg_DamageEventLevel + 1 //The number of times the same unit was hit.
elseif not IsUnitInGroup(tgt, udg_DamageEventAOEGroup) then
set udg_DamageEventAOE = udg_DamageEventAOE + 1 //Multiple targets hit by this source - flag as AOE
endif
else
call TimerStart(alarm, 0.00, false, function WakeUp)
set alarmSet = true
set udg_AOEDamageSource = src
set udg_EnhancedDamageTarget= tgt
endif
call GroupAddUnit(udg_DamageEventAOEGroup, tgt)
endif
set udg_DamageEventType = udg_NextDamageType
if udg_NextDamageType != 0 then
set udg_DamageEventType = udg_NextDamageType
set udg_IsDamageCode = true //New in 5.1 - requested by chopinski to allow user to detect Code damage
endif
set udg_DamageEventOverride = dt == null //Got rid of NextDamageOverride in 5.1 for simplicity
set udg_DamageEventPrevAmt = amt
set udg_DamageEventSource = src
set udg_DamageEventTarget = tgt
set udg_DamageEventAmount = amt
set udg_DamageEventAttackT = GetHandleId(at)
set udg_DamageEventDamageT = GetHandleId(dt)
set udg_DamageEventWeaponT = GetHandleId(wt)
call CalibrateMR() //Set Melee and Ranged settings.
set udg_DamageEventArmorT = BlzGetUnitIntegerField(udg_DamageEventTarget, UNIT_IF_ARMOR_TYPE) //Introduced in Damage Engine 5.2.0.0
set udg_DamageEventDefenseT = BlzGetUnitIntegerField(udg_DamageEventTarget, UNIT_IF_DEFENSE_TYPE)
set armorType = udg_DamageEventArmorT
set defenseType = udg_DamageEventDefenseT
set udg_DamageEventArmorPierced = 0.00
set udg_DamageScalingUser = 1.00
set udg_DamageScalingWC3 = 1.00
if amt != 0.00 then
if not udg_DamageEventOverride then
call RunTrigs(MOD_EVENT)
//All events have run and the pre-damage amount is finalized.
call BlzSetEventAttackType(ConvertAttackType(udg_DamageEventAttackT))
call BlzSetEventDamageType(ConvertDamageType(udg_DamageEventDamageT))
call BlzSetEventWeaponType(ConvertWeaponType(udg_DamageEventWeaponT))
if udg_DamageEventArmorPierced != 0.00 then
call BlzSetUnitArmor(udg_DamageEventTarget, BlzGetUnitArmor(udg_DamageEventTarget) - udg_DamageEventArmorPierced)
endif
if armorType != udg_DamageEventArmorT then
call BlzSetUnitIntegerField(udg_DamageEventTarget, UNIT_IF_ARMOR_TYPE, udg_DamageEventArmorT) //Introduced in Damage Engine 5.2.0.0
endif
if defenseType != udg_DamageEventDefenseT then
call BlzSetUnitIntegerField(udg_DamageEventTarget, UNIT_IF_DEFENSE_TYPE, udg_DamageEventDefenseT) //Introduced in Damage Engine 5.2.0.0
endif
call BlzSetEventDamage(udg_DamageEventAmount)
endif
//call BJDebugMsg("Ready to deal " + R2S(udg_DamageEventAmount))
set totem = true
else
call RunTrigs(ZERO_EVENT)
set canKick = true
call Finish()
endif
endif
set src = null
set tgt = null
set inception = false
set udg_NextDamageType = 0
return false
endfunction
//The traditional on-damage response, where armor reduction has already been factored in.
private function OnDamage takes nothing returns boolean
local real r = GetEventDamage()
//call BJDebugMsg("Second damage event running")
if dreaming or udg_DamageEventPrevAmt == 0.00 then
//if dreaming then
// call BJDebugMsg("Dreaming")
//else
// call BJDebugMsg("Prev amount is zero")
//endif
return false
endif
if totem then
set totem = false //This should be the case in almost all circumstances
else
call AfterDamage() //Wrap up the outstanding damage instance
set canKick = true
//Unfortunately, Spirit Link and Thorns Aura/Spiked Carapace fire the DAMAGED event out of sequence with the DAMAGING event,
//so I have to re-generate a buncha stuff here.
set udg_DamageEventSource = GetEventDamageSource()
set udg_DamageEventTarget = GetTriggerUnit()
set udg_DamageEventAmount = lastAmount
set udg_DamageEventPrevAmt = lastPrevAmt
set udg_DamageEventAttackT = GetHandleId(BlzGetEventAttackType())
set udg_DamageEventDamageT = GetHandleId(BlzGetEventDamageType())
set udg_DamageEventWeaponT = GetHandleId(BlzGetEventWeaponType())
set udg_DamageEventType = lastType
set udg_IsDamageCode = lastCode
set udg_DamageEventArmorT = lastArmor
set udg_DamageEventDefenseT = lastDefense
set udg_DamageEventArmorPierced = lastPierced
set armorType = lastPrevArmor
set defenseType = lastPrevDefense
call CalibrateMR() //Apply melee/ranged settings once again.
endif
call ResetArmor()
if udg_DamageEventAmount != 0.00 and r != 0.00 then
set udg_DamageScalingWC3 = r / udg_DamageEventAmount
elseif udg_DamageEventAmount > 0.00 then
set udg_DamageScalingWC3 = 0.00
else
set udg_DamageScalingWC3 = 1.00
set udg_DamageScalingUser = udg_DamageEventAmount / udg_DamageEventPrevAmt
endif
set udg_DamageEventAmount = udg_DamageEventAmount*udg_DamageScalingWC3
if udg_DamageEventAmount > 0.00 then
//This event is used for custom shields which have a limited hit point value
//The shield here kicks in after armor, so it acts like extra hit points.
call RunTrigs(SHIELD_EVENT)
set udg_LethalDamageHP = GetWidgetLife(udg_DamageEventTarget) - udg_DamageEventAmount
if udg_LethalDamageHP <= 0.405 then
call RunTrigs(LETHAL_EVENT) //Added 10 May 2019 to detect and potentially prevent lethal damage. Instead of
//modifying the damage, you need to modify LethalDamageHP instead (the final HP of the unit).
set udg_DamageEventAmount = GetWidgetLife(udg_DamageEventTarget) - udg_LethalDamageHP
if udg_DamageEventType < 0 and udg_LethalDamageHP <= 0.405 then
call SetUnitExploded(udg_DamageEventTarget, true) //Explosive damage types should blow up the target.
endif
endif
set udg_DamageScalingUser = udg_DamageEventAmount/udg_DamageEventPrevAmt/udg_DamageScalingWC3
endif
call BlzSetEventDamage(udg_DamageEventAmount) //Apply the final damage amount.
if udg_DamageEventDamageT != udg_DAMAGE_TYPE_UNKNOWN then
call RunTrigs(DAMAGE_EVENT)
endif
set eventsRun = true
if udg_DamageEventAmount == 0.00 then
call Finish()
endif
return false
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_DAMAGED) //Thanks to this I no longer have to create an event for every unit in the map.
call TriggerAddCondition(trig, Filter(function OnDamage))
set trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_DAMAGING) //The new 1.31 event which fires before damage.
call TriggerAddCondition(trig, Filter(function OnPreDamage))
set trig = null
endfunction
public function DebugStr takes nothing returns nothing
local integer i = 0
loop
set udg_CONVERTED_ATTACK_TYPE[i] = ConvertAttackType(i)
exitwhen i == 6
set i = i + 1
endloop
set i = 0
loop
set udg_CONVERTED_DAMAGE_TYPE[i] = ConvertDamageType(i)
exitwhen i == 26
set i = i + 1
endloop
set udg_AttackTypeDebugStr[0] = "SPELLS" //ATTACK_TYPE_NORMAL in JASS
set udg_AttackTypeDebugStr[1] = "NORMAL" //ATTACK_TYPE_MELEE in JASS
set udg_AttackTypeDebugStr[2] = "PIERCE"
set udg_AttackTypeDebugStr[3] = "SIEGE"
set udg_AttackTypeDebugStr[4] = "MAGIC"
set udg_AttackTypeDebugStr[5] = "CHAOS"
set udg_AttackTypeDebugStr[6] = "HERO"
set udg_DamageTypeDebugStr[0] = "UNKNOWN"
set udg_DamageTypeDebugStr[4] = "NORMAL"
set udg_DamageTypeDebugStr[5] = "ENHANCED"
set udg_DamageTypeDebugStr[8] = "FIRE"
set udg_DamageTypeDebugStr[9] = "COLD"
set udg_DamageTypeDebugStr[10] = "LIGHTNING"
set udg_DamageTypeDebugStr[11] = "POISON"
set udg_DamageTypeDebugStr[12] = "DISEASE"
set udg_DamageTypeDebugStr[13] = "DIVINE"
set udg_DamageTypeDebugStr[14] = "MAGIC"
set udg_DamageTypeDebugStr[15] = "SONIC"
set udg_DamageTypeDebugStr[16] = "ACID"
set udg_DamageTypeDebugStr[17] = "FORCE"
set udg_DamageTypeDebugStr[18] = "DEATH"
set udg_DamageTypeDebugStr[19] = "MIND"
set udg_DamageTypeDebugStr[20] = "PLANT"
set udg_DamageTypeDebugStr[21] = "DEFENSIVE"
set udg_DamageTypeDebugStr[22] = "DEMOLITION"
set udg_DamageTypeDebugStr[23] = "SLOW_POISON"
set udg_DamageTypeDebugStr[24] = "SPIRIT_LINK"
set udg_DamageTypeDebugStr[25] = "SHADOW_STRIKE"
set udg_DamageTypeDebugStr[26] = "UNIVERSAL"
set udg_WeaponTypeDebugStr[0] = "NONE" //WEAPON_TYPE_WHOKNOWS in JASS
set udg_WeaponTypeDebugStr[1] = "METAL_LIGHT_CHOP"
set udg_WeaponTypeDebugStr[2] = "METAL_MEDIUM_CHOP"
set udg_WeaponTypeDebugStr[3] = "METAL_HEAVY_CHOP"
set udg_WeaponTypeDebugStr[4] = "METAL_LIGHT_SLICE"
set udg_WeaponTypeDebugStr[5] = "METAL_MEDIUM_SLICE"
set udg_WeaponTypeDebugStr[6] = "METAL_HEAVY_SLICE"
set udg_WeaponTypeDebugStr[7] = "METAL_MEDIUM_BASH"
set udg_WeaponTypeDebugStr[8] = "METAL_HEAVY_BASH"
set udg_WeaponTypeDebugStr[9] = "METAL_MEDIUM_STAB"
set udg_WeaponTypeDebugStr[10] = "METAL_HEAVY_STAB"
set udg_WeaponTypeDebugStr[11] = "WOOD_LIGHT_SLICE"
set udg_WeaponTypeDebugStr[12] = "WOOD_MEDIUM_SLICE"
set udg_WeaponTypeDebugStr[13] = "WOOD_HEAVY_SLICE"
set udg_WeaponTypeDebugStr[14] = "WOOD_LIGHT_BASH"
set udg_WeaponTypeDebugStr[15] = "WOOD_MEDIUM_BASH"
set udg_WeaponTypeDebugStr[16] = "WOOD_HEAVY_BASH"
set udg_WeaponTypeDebugStr[17] = "WOOD_LIGHT_STAB"
set udg_WeaponTypeDebugStr[18] = "WOOD_MEDIUM_STAB"
set udg_WeaponTypeDebugStr[19] = "CLAW_LIGHT_SLICE"
set udg_WeaponTypeDebugStr[20] = "CLAW_MEDIUM_SLICE"
set udg_WeaponTypeDebugStr[21] = "CLAW_HEAVY_SLICE"
set udg_WeaponTypeDebugStr[22] = "AXE_MEDIUM_CHOP"
set udg_WeaponTypeDebugStr[23] = "ROCK_HEAVY_BASH"
set udg_DefenseTypeDebugStr[0] = "LIGHT"
set udg_DefenseTypeDebugStr[1] = "MEDIUM"
set udg_DefenseTypeDebugStr[2] = "HEAVY"
set udg_DefenseTypeDebugStr[3] = "FORTIFIED"
set udg_DefenseTypeDebugStr[4] = "NORMAL" //Typically deals flat damage to all armor types
set udg_DefenseTypeDebugStr[5] = "HERO"
set udg_DefenseTypeDebugStr[6] = "DIVINE"
set udg_DefenseTypeDebugStr[7] = "UNARMORED"
set udg_ArmorTypeDebugStr[0] = "NONE" //ARMOR_TYPE_WHOKNOWS in JASS, added in 1.31
set udg_ArmorTypeDebugStr[1] = "FLESH"
set udg_ArmorTypeDebugStr[2] = "METAL"
set udg_ArmorTypeDebugStr[3] = "WOOD"
set udg_ArmorTypeDebugStr[4] = "ETHEREAL"
set udg_ArmorTypeDebugStr[5] = "STONE"
endfunction
//This function exists mainly to make it easier to switch from another DDS, like PDD.
function UnitDamageTargetEx takes unit src, unit tgt, real amt, boolean a, boolean r, attacktype at, damagetype dt, weapontype wt returns boolean
if udg_NextDamageType == 0 then
set udg_NextDamageType = udg_DamageTypeCode
endif
call UnitDamageTarget(src, tgt, amt, a, r, at, dt, wt)
return dreaming
endfunction
public function SetupEvent takes trigger whichTrig, string var, integer index returns nothing
local integer max = 1
local integer off = 0
local integer exit = 0
local integer i
if var == "udg_DamageModifierEvent" then //MOD_EVENT 1-4 -> Events 1-4
if index < 3 then
set exit = index + 1
endif
if nextTrig[1] == 0 then
set nextTrig[1] = 2
set nextTrig[2] = 3
set trigFrozen[2] = true
set trigFrozen[3] = true
endif
set max = 4
elseif var == "udg_DamageEvent" then //DAMAGE_EVENT 1,2 -> Events 5,6
set max = 2
set off = 4
elseif var == "udg_AfterDamageEvent" then //AFTER_EVENT -> Event 7
set off = 6
elseif var == "udg_LethalDamageEvent" then //LETHAL_EVENT -> Event 8
set off = 7
elseif var == "udg_AOEDamageEvent" then //AOE_EVENT -> Event 9
set off = 8
else
return
endif
set i = IMaxBJ(IMinBJ(index, max), 1) + off
//call BJDebugMsg("Root index: " + I2S(i))
loop
set index = i
set i = nextTrig[i]
exitwhen i == exit
endloop
set userTrigs = userTrigs + 1 //User list runs from index 10 and up
set nextTrig[index] = userTrigs
set nextTrig[userTrigs] = exit
set userTrig[userTrigs] = whichTrig
//call BJDebugMsg("Registered " + I2S(userTrigs) + " to " + I2S(index))
endfunction
private function PreSetup takes trigger whichTrig, string var, limitop op, real value returns nothing
call SetupEvent(whichTrig, var, R2I(value))
endfunction
hook TriggerRegisterVariableEvent PreSetup
endlibrary
function Pillage takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "PillageFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "PillageFrameIcon", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.10)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtonsDisabled\\DISBTNPillage", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Every 4th kill allows you activate this trait - gain |cffffd900200 gold|r.|n|nAlso gives a 10%% chance when killing an enemy to spawn gold coins.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Pillage")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_Pillage_activated, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Bag takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "BagFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.04)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Grants 6000 gold.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Chest of Gold")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNChestOfGold",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Bag2 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "BagFrame2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.04)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Grants 6000 gold.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Chest of Gold")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNChestOfGold",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Bag3 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "BagFrame3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.04)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Grants 6000 gold.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Chest of Gold")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNChestOfGold",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Assblade takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "AssbladeFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "AssbladeFrameIcon", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.10)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNDaggerOfEscape", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Teleports behind a random enemy within 800 range.|nHas a 25 second cooldown.|n|cff00ff00Passive|r: Increases damage dealt by |cfffa5e1930%%|r when damaging an enemy from behind.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Assassin's Blade")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_assasin_blade_activated, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Decimate takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "DecimateFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.1)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Attacking a unit charges your next basic attack to deal |cfffa5e19+150|r damage and stun the enemy for 2 seconds.|n|NHas a 14 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Decimate")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNDizzy",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function EClaws takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "EClawsFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases spell damage by 20%%")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Ethereal Claws")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNAdvancedStrengthOfTheWild",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Experience takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "ExperienceFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases experience gained from killing units by 40%%")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Experience Bonus")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNTomeBrown",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function FirstBlood takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "FirstBloodFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.09)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Damaging an enemy whose at maximum health with a basic attack increases the damage dealt by |cfffa5e19300%%|r|n|nHas a 1 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "First Blood")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNThoriumRanged",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Grim takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "GrimFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Gain +10 mana whenever you kill an enemy.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Grimoire of Souls")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNNecromancerMaster",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Keg takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "KegFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.09)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r |cffffcc00Unique Effect:|r Killing an enemy gives a 25%% chance to spawn a barrel containing all sorts of powerups.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Keg of Ale")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNBarrel",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function KillingBlow takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "KillingBlowFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.08)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Killing an enemy from behind with an attack increases the hero's base damage by 4.|nMaximum 100 bonus damage.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Killing Blow")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNSacrifice",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function LifeSteal takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "LifeStealFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Recover hit points equal to |cfffa5e197%%|r of All damage dealt to an enemy unit.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Life Steal")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNVampiricAura",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function MoonGlaive takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "MoonGlaiveFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Gives the ability to strike an additional unit with a bouncing glaive attack that deals 300 damage.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Moon Glaive")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNUpgradeMoonGlaive",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function MoonStone takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "MoonStoneFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r When casting a spell regenerate 200 mana.|n|nHas a 4 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "MoonStone")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNMoonStone",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function OrbofKil takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "OrbofKilFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "OrbofKilFrameIcon", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.10)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtonsDisabled\\DISBTNUsedSoulGem", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Your next instance of Spell Damage deals |cfffa5e12+40%%|r area of effect damage at the position of the enemy.|n|nCan only be charged by damaging enemies 10 times.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Orb of Kil'jaeden")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_orb_of_kil_activated, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Overwhelm takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "OverwhelmFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Gain +15%% attack damage for each summon you control.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Overwhelm")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNRegenerationAura",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function PermImmo takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "ArmUpFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Gain |cfffa5e19+0.3|r armor whenever you kill an enemy while being below 50%% health.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Armor Up")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNHumanArmorUpOne",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Portal takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "PortalFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.11)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Every 25 seconds summons a random friendly creep with |cfffa5e19+120%%|r of the Hero's base attack damage.|n|nLasts for 35 seconds.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Portal of Summoning")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNDarkSummoning",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Reincarnation takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "ReincarnationFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.10)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Upon taking lethal damage brings your hero back to life with |cfffa5e191600|r health. Has a 3 minute cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Reincarnation")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNAnkh",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function SummonScroll takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "SummonScrollFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.08)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Summoned units heal themselves for |cfffa5e1930%%|r of the damage they deal.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Summoner's Regeneration Scroll")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNScrollOfRegenerationGreen",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function SonicSpeed takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "SonicSpeedFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Grants the hero +100 movement speed.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Sonic Speed")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNAnimalWarTraining",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function TomePower takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "TomePowerFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.08)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases primary attribute stat gained from leveling up by +2")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Tome Power")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNTome",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function UnholyArmor takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "UnholyArmorFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Gain |cfffa5e19+30|r Armor but changes your armor type to Light.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Unholy Armor")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNImprovedUnholyArmor",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Hides takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "HidesFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Gain |cfffa5e12+1500|r health but slows your attack cooldown by 15%%.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Reinforced Hides")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNImprovedReinforcedHides",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Plating takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "PlatingFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases armor by 9.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Reinforced Hides")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNLeatherUpgradeTwo",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Plating2 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "PlatingFrame2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases armor by 9.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Reinforced Hides")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNLeatherUpgradeTwo",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Plating3 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "PlatingFrame3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases armor by 9.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Reinforced Hides")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNLeatherUpgradeTwo",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Frenzy takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "FrenzyFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Reduces your attack cooldown by 20%% but reduces your base damage by 40")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Frenzy")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNGhoulFrenzy",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Frenzy2 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "FrenzyFrame2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Reduces your attack cooldown by 20%% but reduces your base damage by 40")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Frenzy")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNGhoulFrenzy",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Frenzy3 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "FrenzyFrame3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Reduces your attack cooldown by 20%% but reduces your base damage by 40")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Frenzy")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNGhoulFrenzy",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function TomeofPower takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "TomeofPowerFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Adds |cfffa5e19+30|r stats to your primary attribute")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Tome of Power")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNTomeRed",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function SteelWeapons takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "SteelWeaponsFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases base attack damage by 50")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Steel Weapons")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNOrcMeleeUpOne",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function SteelWeapons2 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "SteelWeaponsFrame2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases base attack damage by 50")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Steel Weapons")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNOrcMeleeUpOne",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function SteelWeapons3 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "SteelWeaponsFrame3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases base attack damage by 50")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Steel Weapons")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNOrcMeleeUpOne",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function ThoriumWeapons takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "ThoriumWeaponsFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.07)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increases base attack damage by 100 but lowers movement speed by 40")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Thorium Weapons")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNOrcMeleeUpTwo",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Vitality takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "VitalityFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increase Health by +750")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Vitality")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNSkeletalLongevity",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Vitality2 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "VitalityFrame2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increase Health by +750")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Vitality")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNSkeletalLongevity",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Vitality3 takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "VitalityFrame3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.05)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Increase Health by +750")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Vitality")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNSkeletalLongevity",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function SMastery takes nothing returns nothing
local framehandle face = BlzCreateFrameByType("BACKDROP", "SMasteryFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
local framehandle faceHover = BlzCreateFrameByType("FRAME", "FaceFrame", face,"", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", face, 0, 0)
call BlzFrameSetAllPoints(faceHover, face)
call BlzFrameSetTooltip(faceHover, tooltip)
call BlzFrameSetSize(face, 0.039, 0.039)
call BlzFrameSetAbsPoint(face, FRAMEPOINT_CENTER, udg_Icon_pos_temp, 0.189)
// call BlzFrameSetAbsPoint(tooltip, FRAMEPOINT_CENTER, udg_Icon_pos_temp , 0.189)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, face, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00Unique Effect:|r Reduces the cooldown of your last learned ability by 40%%")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Spell Mastery")
call BlzFrameSetTexture(face, "ReplaceableTextures\\CommandButtons\\BTNDoom",0, true)
call BlzFrameSetVisible(face, false)
endfunction
function Healpot takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "HealpotFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "HealpotFrameIcon", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNPotionGreenSmall", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Heals 700 hit points when used. Has a 40 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Potion of Healing")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_potion_of_healing, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Healpot2 takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "HealpotFrame2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "HealpotFrameIcon2", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNPotionGreenSmall", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Heals 700 hit points when used. Has a 40 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Potion of Healing")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_potion_of_healing, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Healpot3 takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "HealpotFrame3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "HealpotFrameIcon3", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNPotionGreenSmall", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Heals 700 hit points when used. Has a 40 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Potion of Healing")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_potion_of_healing, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Manapot takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "ManapotFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "ManapotFrameIcon", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNPotionBlueSmall", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Restores 1000 mana when used. Has a 30 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Potion of Mana")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_potion_of_mana, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Manapot2 takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "ManapotFrame2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "ManapotFrameIcon2", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNPotionBlueSmall", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Restores 1000 mana when used. Has a 30 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Potion of Mana")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_potion_of_mana, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Manapot3 takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "ManapotFrame3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "ManapotFrameIcon3", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNPotionBlueSmall", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Restores 1000 mana when used. Has a 30 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Potion of Mana")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_potion_of_mana, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
function Invpot takes nothing returns nothing
local framehandle buttonFrame = BlzCreateFrameByType("GLUEBUTTON", "InvpotFrame", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "ScoreScreenTabButtonTemplate", 0)
local framehandle buttonIconFrame = BlzCreateFrameByType("BACKDROP", "InvpotFrameIcon", buttonFrame, "", 0)
local framehandle tooltip = BlzCreateFrame("BoxedText", buttonIconFrame, 0, 0)
call BlzFrameSetAllPoints(buttonIconFrame, buttonIconFrame)
call BlzFrameSetTooltip(buttonFrame, tooltip)
call BlzFrameSetSize(buttonFrame, 0.039, 0.039)
call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.189, 0.189)
call BlzFrameSetAllPoints(buttonIconFrame, buttonFrame)
call BlzFrameSetPoint(tooltip, FRAMEPOINT_BOTTOM, buttonIconFrame, FRAMEPOINT_TOP, 0.0, 0.0)
call BlzFrameSetSize(tooltip, 0.3, 0.06)
call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNLesserInvulneralbility", 0, true)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue", 0), "|cffffcc00On Use:|r Makes the Hero invulnerable for 5 seconds when used. Has a 40 second cooldown.")
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle", 0), "Potion of Invulnerability")
call BlzFrameSetVisible(buttonFrame, false)
call BlzTriggerRegisterFrameEvent(gg_trg_potion_of_invulnerability, buttonFrame, FRAMEEVENT_CONTROL_CLICK)
endfunction
globals
string array SHero
framehandle array UName
framehandle array UIcon
framehandle array TIcon
framehandle array FIcon
framehandle array TTIcon
framehandle array TLiveT
framehandle array TLiveI
framehandle array USkill
framehandle array UTrait
string array SSkill
string array STrait
framehandle array TSkill
framehandle array TTrait
framehandle array FSkill
framehandle array FTrait
framehandle array TTSkill
framehandle array TTTrait
framehandle PF
framehandle UIB
framehandle UIB2
framehandle array FTeam
boolean UIOn
trigger TrigUI
real BX = .640
real BY = .495
endglobals
function AddText takes string s, real x, real y returns framehandle
local framehandle f = BlzCreateFrameByType("TEXT", "", PF, "", 0)
call BlzFrameSetText(f, s)
call BlzFrameSetAbsPoint(f, FRAMEPOINT_TOPLEFT, BX+x, BY-y-.001)
call BlzFrameSetScale(f, 1.1)
return f
endfunction
function AddIcon takes string s, real x, real y returns framehandle
local framehandle f = BlzCreateFrameByType("BACKDROP", "", PF, "", 0)
call BlzFrameSetTexture(f, s, 0, true)
call BlzFrameSetAbsPoint(f, FRAMEPOINT_TOPLEFT, BX+x, BY-y+.00005)
call BlzFrameSetSize(f, .013, .013)
return f
endfunction
function AddHero takes unit u returns nothing
local player p = GetOwningPlayer(u)
local integer i = GetUnitTypeId(u)
local string s = BlzGetAbilityIcon(i)
local integer z = GetConvertedPlayerId(p)*10
call BlzFrameSetTexture(UIcon[z], s, 0, true)
set SHero[z] = SubString(s, 35, 99)
set s = GetObjectName(i)
call BlzFrameSetSize(TTIcon[z], I2R(StringLength(s))/150+.025, .022)
call BlzFrameSetText(TIcon[z], s)
call BlzFrameSetVisible(FIcon[z], true)
endfunction
function AddAbility takes player p, integer i, integer a returns nothing
local integer z = GetConvertedPlayerId(p)*10
local integer l = StringLength(BlzGetAbilityIcon(a))
local string s = SubString(BlzGetAbilityIcon(a), 0, l-4)
if SubString(s, l-1, l) == "On" and SubString(s, l-5, l) !="WalkOn" then
set s=SubString(s, 0, l-2)
endif
if SubString(s, 20, 27) == "Passive" then
set s=SubString(s, 0, 20)+"CommandButtons/"+SubString(s, 38, 99)
endif
if SubString(s, l-17, 99) == "Immolation" then
set s=s+"On"
endif
call BlzFrameSetTexture(USkill[z+i], s, 0, true)
call BlzFrameSetVisible(USkill[z+i], true)
call BlzFrameSetVisible(FSkill[z+i], true)
set SSkill[z+i] = SubString(s, 35, 99)
set s = GetObjectName(a)
set l = StringLength(s)
set s = SubString(s, 0, l-2)
call BlzFrameSetSize(TTSkill[z+i], I2R(l)/150+.016, .022)
call BlzFrameSetText(TSkill[z+i], s)
endfunction
function Unlearn takes player p, integer i returns nothing
local integer z = GetConvertedPlayerId(p)*10
set i=i+1
call BlzFrameSetVisible(USkill[z+i], false)
call BlzFrameSetVisible(FSkill[z+i], false)
endfunction
function AddTrait takes player p, integer i, integer a returns nothing
local integer z = GetConvertedPlayerId(p)*10
local string s = BlzGetAbilityIcon(a)
call BlzFrameSetTexture(UTrait[z+i], s, 0, true)
call BlzFrameSetVisible(UTrait[z+i], true)
set STrait[z+i] = SubString(s, 35, 99)
set s=GetObjectName(a)
call BlzFrameSetSize(TTTrait[z+i], I2R(StringLength(s))/150+.025, .022)
call BlzFrameSetText(TTrait[z+i], s)
endfunction
function CheckActive takes integer i returns boolean
return GetPlayerController(Player(i-1))==MAP_CONTROL_USER and GetPlayerSlotState(Player(i-1))==PLAYER_SLOT_STATE_PLAYING
endfunction
function EndPlayer takes player p returns nothing
local integer z = GetConvertedPlayerId(p)*10
local integer i
local string s
local string sd = "ReplaceableTextures/CommandButtonsDisabled/DIS"
call BlzFrameSetText(UName[z], "|cff5a5a5a"+GetPlayerName(p))
if SHero[z] != null then
set s = SHero[z]
else
set s="BTNSelectHeroOn"
endif
set s=sd+s
call BlzFrameSetTexture(UIcon[z], s, 0, true)
set i = 1
loop
exitwhen i>7
if SSkill[z+i] != null then
call BlzFrameSetTexture(USkill[z+i], sd+SSkill[z+i], 0, true)
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i>3
if STrait[z+i] != null then
call BlzFrameSetTexture(UTrait[z+i], sd+STrait[z+i], 0, true)
endif
set i = i + 1
endloop
endfunction
function ReturnPlayer takes player p returns nothing
local integer x
local integer i = GetConvertedPlayerId(p)
local integer z = i*10
local string s = "ReplaceableTextures/CommandButtons/"
call BlzFrameSetText(UName[z], udg_player_colors[i]+GetPlayerName(p))
call BlzFrameSetTexture(UIcon[z], BlzGetAbilityIcon(GetUnitTypeId(udg_NICKHeroArray[i])), 0, true)
set x = 1
loop
exitwhen x>7
if SSkill[z+x] != null then
call BlzFrameSetTexture(USkill[z+x], s+SSkill[z+x], 0, true)
endif
set x = x + 1
endloop
set x = 1
loop
exitwhen x>3
if STrait[z+x] != null then
call BlzFrameSetTexture(UTrait[z+x], s+STrait[z+x], 0, true)
endif
set x = x + 1
endloop
endfunction
function FinalBoard takes nothing returns nothing
local integer i = 0
loop
exitwhen i>7
if CheckActive(i*3+1) or CheckActive(i*3+2) or CheckActive(i*3+3) then
call BlzFrameSetVisible(TLiveT[i+1], true)
call BlzFrameSetVisible(TLiveI[i+1], true)
endif
set i = i+1
endloop
endfunction
function SwapUI takes nothing returns nothing
local player p = GetTriggerPlayer()
if GetLocalPlayer()==GetTriggerPlayer() then
call StartSound(gg_snd_MouseClick1)
call BlzFrameSetEnable(BlzGetTriggerFrame(), false)
call BlzFrameSetEnable(BlzGetTriggerFrame(), true)
if UIOn == true then
set UIOn=false
call BlzFrameSetVisible(PF, false)
call BlzFrameSetTexture(UIB2, "ui/widgets/glues/gluescreen-checkbox-background", 0, false)
elseif UIOn == false then
set UIOn=true
call BlzFrameSetVisible(PF, true)
call BlzFrameSetTexture(UIB2, "ui/widgets/glues/gluescreen-checkbox-backgroundpressed", 0, false)
endif
endif
endfunction
function InitMB takes nothing returns nothing
local player p
local integer i
local integer i2
local integer z
local real y = -.025
local framehandle f
local framehandle f2
local framehandle f3
local framehandle f4
set PF = BlzCreateFrameByType("BACKDROP", "", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
call BlzFrameSetAbsPoint(PF, FRAMEPOINT_TOPLEFT, BX-.005, BY+.026)
call BlzFrameSetTexture(PF, "Textures/Black32", 0, true)
set i = 1
set i2 = 0
call BlzFrameSetSize(PF, .293, y+.028)
loop
exitwhen i>8
set p = Player(i-1)
if GetPlayerController(p)==MAP_CONTROL_USER and GetPlayerSlotState(p)==PLAYER_SLOT_STATE_PLAYING then
if i !=1 then
set y=y+.003
endif
set z = i*10
set TLiveT[i] = AddText("1", .268, y)
set TLiveI[i] = AddIcon("ReplaceableTextures/CommandButtons/BTNheart", .275, y)
call BlzFrameSetVisible(TLiveT[i], false)
call BlzFrameSetVisible(TLiveI[i], false)
set UName[z] = AddText(udg_player_colors[i]+GetPlayerName(p), 0, y)
set f = AddIcon("", .083,y)
call BlzFrameSetTexture(f, "ReplaceableTextures/CommandButtons/BTNSelectHeroOn", 0, true)
set UIcon[z]=f
set f2=BlzCreateFrameByType("FRAME", "", f, "", 0)
call BlzFrameSetVisible(f2, false)
set FIcon[z]=f2
set f3=BlzCreateFrame("BoxedText", f, 0, 0)
call BlzFrameSetAllPoints(f2, f)
call BlzFrameSetTooltip(f2, f3)
call BlzFrameSetPoint(f3, FRAMEPOINT_RIGHT, f, FRAMEPOINT_LEFT, -.002, 0)
set TTIcon[z]=f3
set f4=BlzGetFrameByName("BoxedTextTitle", 0)
call BlzFrameSetScale(f3, .85)
set TIcon[z]=f4
set i2 = 1
loop
exitwhen i2>7
set f=AddIcon("", .100+.014*i2, y)
call BlzFrameSetVisible(f, false)
set USkill[z+i2]=f
set f2=BlzCreateFrameByType("FRAME", "", f,"", 0)
set FSkill[z+i2]=f2
set f3=BlzCreateFrame("BoxedText", f, 0, 0)
call BlzFrameSetAllPoints(f2, f)
call BlzFrameSetTooltip(f2, f3)
call BlzFrameSetPoint(f3, FRAMEPOINT_RIGHT, f, FRAMEPOINT_LEFT, -.002, 0)
set TTSkill[z+i2]=f3
set f4=BlzGetFrameByName("BoxedTextTitle", 0)
call BlzFrameSetScale(f3, .85)
set TSkill[z+i2]=f4
set i2 = i2 + 1
endloop
set i2 = 1
loop
exitwhen i2>3
set f=AddIcon("", .211+.014*i2, y)
call BlzFrameSetVisible(f, false)
set UTrait[z+i2]=f
set f2=BlzCreateFrameByType("FRAME", "", f,"", 0)
set FTrait[z+i2]=f2
set f3=BlzCreateFrame("BoxedText", f, 0, 0)
call BlzFrameSetAllPoints(f2, f)
call BlzFrameSetTooltip(f2, f3)
call BlzFrameSetPoint(f3, FRAMEPOINT_RIGHT, f, FRAMEPOINT_LEFT, -.002, 0)
set TTTrait[z+i2]=f3
set f4=BlzGetFrameByName("BoxedTextTitle", 0)
call BlzFrameSetScale(f3, .85)
set TTrait[z+i2]=f4
set i2 = i2 + 1
endloop
set y=y+.014
endif
set i = i + 1
endloop
call BlzFrameSetSize(PF, .293, y+.028)
set f = BlzCreateFrameByType("BUTTON", "", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
set f2 = BlzCreateFrameByType("BACKDROP", "", f, "", 0)
set UIB = f
set UIB2 = f2
call BlzFrameSetAllPoints(f2, f)
call BlzFrameSetAbsPoint(f, FRAMEPOINT_TOPLEFT, .91, .536)
call BlzFrameSetSize(f, .015, .015)
call BlzFrameSetTexture(f2, "ui/widgets/glues/gluescreen-checkbox-backgroundpressed", 0, false)
set f3=BlzCreateFrame("BoxedText", f, 0, 0)
call BlzFrameSetTooltip(f, f3)
call BlzFrameSetPoint(f3, FRAMEPOINT_RIGHT, f, FRAMEPOINT_LEFT, -.002, 0)
call BlzFrameSetSize(f3, .04, .022)
set f4=BlzGetFrameByName("BoxedTextTitle", 0)
call BlzFrameSetScale(f3, .85)
call BlzFrameSetText(f4, "Info")
call BlzFrameSetVisible(PF, false)
call BlzFrameSetVisible(UIB, false)
set UIOn = false
set TrigUI = CreateTrigger()
call BlzTriggerRegisterFrameEvent(TrigUI, f, FRAMEEVENT_CONTROL_CLICK)
set i = 0
loop
exitwhen i>23
call TriggerRegisterPlayerChatEvent(TrigUI, Player(i), "-info", true)
set i = i + 1
endloop
endfunction