//TESH.scrollpos=84
//TESH.alwaysfold=0
function AAdd takes integer i1, integer i2, integer i3, unit u returns nothing
if i1 == i2 then
call UnitAddAbilityBJ( i3, u )
endif
endfunction
//===========================================================================
// Counts key structures owned by a player and his or her allies, including
// structures currently upgrading or under construction.
//
// Key structures: Town Hall, Great Hall, Tree of Life, Necropolis
//
function LivingPlayerHallsFilter takes nothing returns boolean
return (IsUnitAliveBJ(GetFilterUnit()) and IsUnitType(GetFilterUnit(),UNIT_TYPE_TOWNHALL))
endfunction
function CountLivingPlayerTownHalls takes player whichPlayer returns integer
local group g
local integer matchedCount
local boolexpr b=Filter(function LivingPlayerHallsFilter)
set g = CreateGroup()
call GroupEnumUnitsOfPlayer(g, whichPlayer, b)
set matchedCount = CountUnitsInGroup(g)
call DestroyGroup(g)
call DestroyBoolExpr(b)
set b=null
set g=null
return matchedCount
endfunction
function Custom_MeleeGetAllyKeyStructureCount takes player whichPlayer returns integer
local integer playerIndex
local player indexPlayer
local integer keyStructs
// Count the number of buildings controlled by all not-yet-defeated co-allies.
set keyStructs = 0
set playerIndex = 0
loop
set indexPlayer = Player(playerIndex)
if (PlayersAreCoAllied(whichPlayer, indexPlayer)) then
set keyStructs = keyStructs + CountLivingPlayerTownHalls(indexPlayer)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "townhall", true, true)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "greathall", true, true)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "treeoflife", true, true)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "necropolis", true, true)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h030", true, true)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h01C", true, true)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h012", true, true)
// set keyStructs = keyStructs + GetPlayerTypedUnitCount(indexPlayer, "custom_h013", true, true)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h013',indexPlayer)//Never use group functions for this, just count living units for player. Much better idea.
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h014',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h015',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h01C',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h01E',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h01F',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h012',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h02F',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h02J',indexPlayer)
// set keyStructs = keySructs + CountLivingPlayerUnitsOfTypeId('h030',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h000',indexPlayer)//Non-modded human custom ids
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h00D',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('h00E',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('o00C',indexPlayer)//Non-modded orc custom ids
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('o00D',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('o00E',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('e00M',indexPlayer)//Non-modded night elf custom ids
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('e00N',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('e00O',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('u00C',indexPlayer)//Non-modded undead custom ids
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('u00D',indexPlayer)
// set keyStructs = keyStructs + CountLivingPlayerUnitsOfTypeId('u00E',indexPlayer)
endif
set playerIndex = playerIndex + 1
exitwhen playerIndex == bj_MAX_PLAYERS
endloop
return keyStructs
endfunction
//===========================================================================
function Custom_MeleePlayerIsCrippled takes player whichPlayer returns boolean
local integer allyStructures = MeleeGetAllyStructureCount(whichPlayer)
local integer allyKeyStructures = Custom_MeleeGetAllyKeyStructureCount(whichPlayer)
// Dead teams are not considered to be crippled.
return (allyStructures > 0) and (allyKeyStructures <= 0)
endfunction
//===========================================================================
// Test each player to determine if anyone has become crippled.
//
function Custom_MeleeCheckForCrippledPlayers takes nothing returns nothing
local integer playerIndex
local player indexPlayer
local force crippledPlayers = CreateForce()
local boolean isNowCrippled
local race indexRace
// The "finish soon" exposure of all players overrides any "crippled" exposure
if bj_finishSoonAllExposed then
return
endif
// Check each player to see if he or she has been crippled or uncrippled.
set playerIndex = 0
loop
set indexPlayer = Player(playerIndex)
set isNowCrippled = Custom_MeleePlayerIsCrippled(indexPlayer)
if (not bj_playerIsCrippled[playerIndex] and isNowCrippled) then
// Player became crippled; start their cripple timer.
set bj_playerIsCrippled[playerIndex] = true
call TimerStart(bj_crippledTimer[playerIndex], bj_MELEE_CRIPPLE_TIMEOUT, false, function MeleeCrippledPlayerTimeout)
if (GetLocalPlayer() == indexPlayer) then
// Use only local code (no net traffic) within this block to avoid desyncs.
// Show the timer window.
call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], true)
// Display a warning message.
call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, "|cffffcc00"+udg_RevealWarning+"|r")
endif
elseif (bj_playerIsCrippled[playerIndex] and not isNowCrippled) then
// Player became uncrippled; stop their cripple timer.
set bj_playerIsCrippled[playerIndex] = false
call PauseTimer(bj_crippledTimer[playerIndex])
if (GetLocalPlayer() == indexPlayer) then
// Use only local code (no net traffic) within this block to avoid desyncs.
// Hide the timer window for this player.
call TimerDialogDisplay(bj_crippledTimerWindows[playerIndex], false)
// Display a confirmation message if the player's team is still alive.
if (MeleeGetAllyStructureCount(indexPlayer) > 0) then
if (bj_playerIsExposed[playerIndex]) then
call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, GetLocalizedString("CRIPPLE_UNREVEALED"))
else
call DisplayTimedTextToPlayer(indexPlayer, 0, 0, bj_MELEE_CRIPPLE_MSG_DURATION, GetLocalizedString("CRIPPLE_UNCRIPPLED"))
endif
endif
endif
// If the player granted shared vision, deny that vision now.
call MeleeExposePlayer(indexPlayer, false)
endif
set playerIndex = playerIndex + 1
exitwhen playerIndex == bj_MAX_PLAYERS
endloop
endfunction
//===========================================================================
// Determine if the lost unit should result in any defeats or victories.
//
function Custom_MeleeCheckLostUnit takes unit lostUnit returns nothing
local player lostUnitOwner = GetOwningPlayer(lostUnit)
// We only need to check for mortality if this was the last building.
if (GetPlayerStructureCount(lostUnitOwner, true) <= 0) then
call MeleeCheckForLosersAndVictors()
endif
// Check if the lost unit has crippled or uncrippled the player.
// (A team with 0 units is dead, and thus considered uncrippled.)
call Custom_MeleeCheckForCrippledPlayers()
endfunction
//===========================================================================
// Determine if the gained unit should result in any defeats, victories,
// or cripple-status changes.
//
function Custom_MeleeCheckAddedUnit takes unit addedUnit returns nothing
local player addedUnitOwner = GetOwningPlayer(addedUnit)
// If the player was crippled, this unit may have uncrippled him/her.
if (bj_playerIsCrippled[GetPlayerId(addedUnitOwner)]) then
call Custom_MeleeCheckForCrippledPlayers()
endif
endfunction
//===========================================================================
function Custom_MeleeTriggerActionConstructCancel takes nothing returns nothing
call Custom_MeleeCheckLostUnit(GetCancelledStructure())
endfunction
//===========================================================================
function Custom_MeleeTriggerActionUnitDeath takes nothing returns nothing
if (IsUnitType(GetDyingUnit(), UNIT_TYPE_STRUCTURE)) then
call Custom_MeleeCheckLostUnit(GetDyingUnit())
endif
endfunction
//===========================================================================
function Custom_MeleeTriggerActionUnitConstructionStart takes nothing returns nothing
call Custom_MeleeCheckAddedUnit(GetConstructingStructure())
endfunction
//===========================================================================
function Custom_MeleeTriggerActionAllianceChange takes nothing returns nothing
call MeleeCheckForLosersAndVictors()
call Custom_MeleeCheckForCrippledPlayers()
endfunction
//===========================================================================
function MeleeInitVictoryDefeatCustomized takes nothing returns nothing
local trigger trig
local integer index
local player indexPlayer
// Create a timer window for the "finish soon" timeout period, it has no timer
// because it is driven by real time (outside of the game state to avoid desyncs)
set bj_finishSoonTimerDialog = CreateTimerDialog(null)
// Set a trigger to fire when we receive a "finish soon" game event
set trig = CreateTrigger()
call TriggerRegisterGameEvent(trig , EVENT_GAME_TOURNAMENT_FINISH_SOON)
call TriggerAddAction(trig , function MeleeTriggerTournamentFinishSoon)
// Set a trigger to fire when we receive a "finish now" game event
set trig = CreateTrigger()
call TriggerRegisterGameEvent(trig , EVENT_GAME_TOURNAMENT_FINISH_NOW)
call TriggerAddAction(trig , function MeleeTriggerTournamentFinishNow)
// Set up each player's mortality code.
set index = 0
loop
set indexPlayer = Player(index)
// Make sure this player slot is playing.
if ( GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING ) then
set bj_meleeDefeated[index]=false
set bj_meleeVictoried[index]=false
// Create a timer and timer window in case the player is crippled.
set bj_playerIsCrippled[index]=false
set bj_playerIsExposed[index]=false
set bj_crippledTimer[index]=CreateTimer()
set bj_crippledTimerWindows[index]=CreateTimerDialog(bj_crippledTimer[index])
call TimerDialogSetTitle(bj_crippledTimerWindows[index] , MeleeGetCrippledTimerMessage(indexPlayer))
// Set a trigger to fire whenever a building is cancelled for this player.
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig , indexPlayer , EVENT_PLAYER_UNIT_CONSTRUCT_CANCEL , null)
call TriggerAddAction(trig , function Custom_MeleeTriggerActionConstructCancel)
// Set a trigger to fire whenever a unit dies for this player.
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig , indexPlayer , EVENT_PLAYER_UNIT_DEATH , null)
call TriggerAddAction(trig , function Custom_MeleeTriggerActionUnitDeath)
// Set a trigger to fire whenever a unit begins construction for this player
set trig = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(trig , indexPlayer , EVENT_PLAYER_UNIT_CONSTRUCT_START , null)
call TriggerAddAction(trig , function Custom_MeleeTriggerActionUnitConstructionStart)
// Set a trigger to fire whenever this player defeats-out
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig , indexPlayer , EVENT_PLAYER_DEFEAT)
call TriggerAddAction(trig , function MeleeTriggerActionPlayerDefeated)
// Set a trigger to fire whenever this player leaves
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig , indexPlayer , EVENT_PLAYER_LEAVE)
call TriggerAddAction(trig , function MeleeTriggerActionPlayerLeft)
// Set a trigger to fire whenever this player changes his/her alliances.
set trig = CreateTrigger()
call TriggerRegisterPlayerAllianceChange(trig , indexPlayer , ALLIANCE_PASSIVE)
call TriggerRegisterPlayerStateEvent(trig , indexPlayer , PLAYER_STATE_ALLIED_VICTORY , EQUAL , 1)
call TriggerAddAction(trig , function Custom_MeleeTriggerActionAllianceChange)
else
set bj_meleeDefeated[index]=true
set bj_meleeVictoried[index]=false
// Handle leave events for observers
if ( IsPlayerObserver(indexPlayer) ) then
// Set a trigger to fire whenever this player leaves
set trig = CreateTrigger()
call TriggerRegisterPlayerEvent(trig , indexPlayer , EVENT_PLAYER_LEAVE)
call TriggerAddAction(trig , function MeleeTriggerActionPlayerLeft)
endif
endif
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
// Test for victory / defeat at startup, in case the user has already won / lost.
// Allow for a short time to pass first, so that the map can finish loading.
call TimerStart(CreateTimer() , 2.0 , false , function Custom_MeleeTriggerActionAllianceChange)
endfunction
Name | Type | is_array | initial_value |
bankGroup | group | No | |
countRes | integer | No | |
DayAbility | abilcode | Yes | |
GetLocalPlayer | player | No | |
HideSpot | location | No | |
NightAbility | abilcode | Yes | |
PickedPlayer | player | No | |
Player | player | No | |
PlayerCode | integer | No | |
point | location | No | |
RevealWarning | string | No | You will be revealed to your opponents unless you build a town-hall type structure. |
Supplier | boolean | Yes | |
SupplierUnit | unit | Yes | |
t | techcode | No | |
Tier2 | boolean | Yes | |
Tier2Unit | unit | Yes | |
Tier3 | boolean | Yes | |
Tier3Unit | unit | Yes | |
u | unit | No | |
ug | group | No | |
ut | unitcode | No |
function Skill_Paladin takes unit u, integer level returns nothing
// HOLY LIGHT
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AHhb' )
// DEVOTION AURA
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AHad' )
// DIVINE SHIELD
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AHds' )
// RESURRECTION
elseif (level == 6) then
call SelectHeroSkill( u, 'AHre' )
endif
endfunction
function Skill_Archmage takes unit u, integer level returns nothing
// WATER ELEMENTAL
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AHwe' )
// BRILLIANCE AURA
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AHbz' )
// BLIZZARD
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AHab' )
// MASS TELEPORT
elseif (level == 6) then
call SelectHeroSkill( u, 'AHmt' )
endif
endfunction
function Skill_MountainKing takes unit u, integer level returns nothing
// STORM BOLT
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AHtb' )
// BASH
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AHbh' )
// THUNDER CLAP
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AHtc' )
// AVATAR
elseif (level == 6) then
call SelectHeroSkill( u, 'AHav' )
endif
endfunction
function Skill_Bloodmage takes unit u, integer level returns nothing
// FLAME STRIKE
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AHfs' )
// SIPHON MANA
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AHdr' )
// BANISH
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AHbn' )
// PHOENIX
elseif (level == 6) then
call SelectHeroSkill( u, 'AHpx' )
endif
endfunction
function Skill_Blademaster takes unit u, integer level returns nothing
// WINDWALK
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AOwk' )
// CRITICAL STRIKE
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AOcr' )
// MIRROR IMAGE
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AOmi' )
// BLADESTORM
elseif (level == 6) then
call SelectHeroSkill( u, 'AOww' )
endif
endfunction
function Skill_Farseer takes unit u, integer level returns nothing
// FERAL SPIRIT
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AOsf' )
// CHAIN LIGHTNING
elseif (level == 2 or level == 4 or level == 7) then
call SelectHeroSkill( u, 'AOcl' )
// FAR SIGHT
elseif (level == 8 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AOfs' )
// EARTHQUAKE
elseif (level == 6) then
call SelectHeroSkill( u, 'AOeq' )
endif
endfunction
function Skill_Chieftain takes unit u, integer level returns nothing
// WARSTOMP
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AOws' )
// ENDURENCE AURA
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AOae' )
// SHOCKWAVE
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AOsh' )
// REINCARNATION
elseif (level == 6) then
call SelectHeroSkill( u, 'AOre' )
endif
endfunction
function Skill_ShadowHunter takes unit u, integer level returns nothing
// HEALING WAVE
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AOhw' )
// HEX
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AOhx' )
// SERPENT WARD
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AOsw' )
// BIG BAD VODOO
elseif (level == 6) then
call SelectHeroSkill( u, 'AOvd' )
endif
endfunction
function Skill_DeathKnight takes unit u, integer level returns nothing
// DEATH COIL
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AUdc' )
// UNHOLY AURA
elseif (level == 2 or level == 4 or level == 7) then
call SelectHeroSkill( u, 'AUau' )
// DEATH PACT
elseif (level == 8 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AUdp' )
// ANIMATE DEAD
elseif (level == 6) then
call SelectHeroSkill( u, 'AUan' )
endif
endfunction
function Skill_Lich takes unit u, integer level returns nothing
// FROST NOVA
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AUfn' )
// DARK RITUAL
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AUdr' )
// FROST ARMOR
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AUfu' )
// DEATH AND DECAY
elseif (level == 6) then
call SelectHeroSkill( u, 'AUdd' )
endif
endfunction
function Skill_Dreadlord takes unit u, integer level returns nothing
// CARRION SWARM
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AUcs' )
// VAMPIRIC AURA
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AUav' )
// SLEEP
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AUsl' )
// INFERNO
elseif (level == 6) then
call SelectHeroSkill( u, 'AUin' )
endif
endfunction
function Skill_CryptLord takes unit u, integer level returns nothing
// CARRION BEETLES
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AUcb' )
// SPIKED CARAPACE
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AUts' )
// IMPALE
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AUim' )
// LOCUST SWARM
elseif (level == 6) then
call SelectHeroSkill( u, 'AUls' )
endif
endfunction
function Skill_Priestress takes unit u, integer level returns nothing
// SEARING ARROW
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AEfa' )
// TRUESHOT AURA
elseif (level == 2 or level == 4 or level == 7) then
call SelectHeroSkill( u, 'AEar' )
// SCOUT
elseif (level == 8 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AEst' )
// STARFALL
elseif (level == 6) then
call SelectHeroSkill( u, 'AEsf' )
endif
endfunction
function Skill_Keeper takes unit u, integer level returns nothing
// FORCE OF NATURE
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AEfn' )
// ENTANGLING ROOTS
elseif (level == 2 or level == 4 or level == 7) then
call SelectHeroSkill( u, 'AEer' )
// THORNS AURA
elseif (level == 8 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AEah' )
// TRANQUILITY
elseif (level == 6) then
call SelectHeroSkill( u, 'AEtq' )
endif
endfunction
function Skill_DemonHunter takes unit u, integer level returns nothing
// MANA BURN
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AEmb' )
// EVASION
elseif (level == 2 or level == 4 or level == 7) then
call SelectHeroSkill( u, 'AEev' )
// IMMOLATION
elseif (level == 8 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AEim' )
// METAMORPHOSIS
elseif (level == 6) then
call SelectHeroSkill( u, 'AEme' )
endif
endfunction
function Skill_Warden takes unit u, integer level returns nothing
// SHADOW STRIKE
if (level == 1 or level == 3 or level == 5) then
call SelectHeroSkill( u, 'AEsh' )
// BLINK
elseif (level == 2 or level == 4 or level == 8) then
call SelectHeroSkill( u, 'AEbl' )
// FAN OF KNIVES
elseif (level == 7 or level == 9 or level == 10) then
call SelectHeroSkill( u, 'AEfk' )
// VENGEANCE
elseif (level == 6) then
call SelectHeroSkill( u, 'AEsv' )
endif
endfunction
////////////////////////////////////////////////////////////////////////////////////////
//
// Find hero and level
//
////////////////////////////////////////////////////////////////////////////////////////
function Trig_Choose_Hero_Spell_Actions takes unit u returns nothing
local integer level
set level = GetHeroLevel(u)
//////////////////////////////
// HUMAN
if (GetUnitRace(u) == RACE_HUMAN) then
//////////////////////////////
// PALADIN
if (GetUnitTypeId(u) == 'Hpal' ) then
call Skill_Paladin(u, level)
// ARCHMAGE
elseif (GetUnitTypeId(u) == 'Hamg' ) then
call Skill_Archmage(u, level)
// MOUNTAIN KING
elseif (GetUnitTypeId(u) == 'Hmkg' ) then
call Skill_MountainKing(u, level)
// BLOODMAGE
elseif (GetUnitTypeId(u) == 'Hblm' ) then
call Skill_Bloodmage(u, level)
endif
//////////////////////////////
// ORC
elseif (GetUnitRace(u) == RACE_ORC) then
//////////////////////////////
// BLADEMASTER
if (GetUnitTypeId(u) == 'Obla' ) then
call Skill_Blademaster(u, level)
// FARSEER
elseif (GetUnitTypeId(u) == 'Ofar' ) then
call Skill_Farseer(u, level)
// TAUREN CHIEFTAIN
elseif (GetUnitTypeId(u) == 'Otch' ) then
call Skill_Chieftain(u, level)
// SHADOW HUNTER
elseif (GetUnitTypeId(u) == 'Oshd' ) then
call Skill_ShadowHunter(u, level)
endif
//////////////////////////////
// UNDEAD
elseif (GetUnitRace(u) == RACE_UNDEAD) then
//////////////////////////////
// DEATH KNIGHT
if (GetUnitTypeId(u) == 'Udea' ) then
call Skill_DeathKnight(u, level)
// LICH
elseif (GetUnitTypeId(u) == 'Ulic' ) then
call Skill_Lich(u, level)
// DREADLORD
elseif (GetUnitTypeId(u) == 'Udre' ) then
call Skill_Dreadlord(u, level)
// CRYPT LORD
elseif (GetUnitTypeId(u) == 'Ucrl' ) then
call Skill_CryptLord(u, level)
endif
//////////////////////////////
// NIGHT ELF
elseif (GetUnitRace(u) == RACE_NIGHTELF) then
//////////////////////////////
// KEEPER OF THE GROVE
if (GetUnitTypeId(u) == 'Ekee' ) then
call Skill_Keeper(u, level)
// PRIESTRESS OF THE M
elseif (GetUnitTypeId(u) == 'Emoo' ) then
call Skill_Priestress(u, level)
// DEMON HUNTER
elseif (GetUnitTypeId(u) == 'Edem' ) then
call Skill_DemonHunter(u, level)
// WARDEN
elseif (GetUnitTypeId(u) == 'Ewar' ) then
call Skill_Warden(u, level)
endif
//////////////////////////////
endif
endfunction
//===========================================================================
//function InitTrig_Choose_Hero_Spell takes nothing returns nothing
// set gg_trg_Choose_Hero_Spell = CreateTrigger( )
// call TriggerAddAction( gg_trg_Choose_Hero_Spell, function Trig_Choose_Hero_Spell_Actions )
//endfunction
function Trig_Invisible_Move_Actions takes nothing returns nothing
local player p = GetTriggerPlayer()
if GetPlayerTechCountSimple('R009', GetTriggerPlayer()) == 1 then
call SetPlayerAbilityAvailableBJ( true, 'A00N', p )
call SetPlayerAbilityAvailableBJ( false, 'A00O', p )
if GetPlayerTechCountSimple('R006', p) == 1 then
call SetPlayerAbilityAvailableBJ( true, 'A00C', p )
call SetPlayerAbilityAvailableBJ( false, 'A00L', p )
endif
endif
set p = null
endfunction
//===========================================================================
function InitTrig_InvisibleMove takes nothing returns nothing
set gg_trg_InvisibleMove = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_InvisibleMove, EVENT_PLAYER_UNIT_RESEARCH_FINISH )
call TriggerAddAction( gg_trg_InvisibleMove, function Trig_Invisible_Move_Actions )
endfunction
function Trig_HeroAbilityEnable_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer a = GetLearnedSkillBJ()
call AAdd (a,'A01G','A00A',u)
call AAdd (a,'A00T','AItj',u)
call AAdd (a,'A00W','A00X',u)
set u = null
endfunction
//===========================================================================
function InitTrig_AbilityEnable takes nothing returns nothing
set gg_trg_AbilityEnable = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_AbilityEnable, EVENT_PLAYER_HERO_SKILL )
call TriggerAddAction( gg_trg_AbilityEnable, function Trig_HeroAbilityEnable_Actions )
endfunction
function Trig_Tower_Speed_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
call AAdd (GetUnitTypeId(u),'h00O','S000',u)
set u = null
endfunction
//===========================================================================
function InitTrig_TowerSpeed takes nothing returns nothing
set gg_trg_TowerSpeed = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_TowerSpeed, EVENT_PLAYER_UNIT_CONSTRUCT_FINISH )
call TriggerAddAction( gg_trg_TowerSpeed, function Trig_Tower_Speed_Actions )
endfunction
function Trig_Breeze_Aura_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
if UnitHasBuffBJ(u, 'B005') and IsUnitType(u, UNIT_TYPE_HERO) then
call AddSpecialEffectTargetUnitBJ( "origin", u, "Abilities\\Spells\\Human\\Heal\\HealTarget.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
call SetUnitLifePercentBJ( GetTriggerUnit(), GetUnitLifePercent(u) + 5.00 )
endif
set u = null
endfunction
//===========================================================================
function InitTrig_BreezeAura takes nothing returns nothing
set gg_trg_BreezeAura = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_BreezeAura, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( gg_trg_BreezeAura, function Trig_Breeze_Aura_Actions )
endfunction
function Trig_Reinforcement_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer i = GetUnitTypeId(u)
if i == 'h00H' or i == 'h005' then
call UnitRemoveTypeBJ( UNIT_TYPE_SUMMONED, u)
endif
set u = null
endfunction
//===========================================================================
function InitTrig_Reinforcement takes nothing returns nothing
set gg_trg_Reinforcement = CreateTrigger( )
call TriggerRegisterEnterRectSimple( gg_trg_Reinforcement, GetPlayableMapRect() )
call TriggerAddAction( gg_trg_Reinforcement, function Trig_Reinforcement_Actions )
endfunction