/************************************************************************
* Ultimate Hero Pick System
* version: 2.0.0.4 vJass
*
* Created by: -Kobas-
* Credits: ap0calypse (custom interface models)
* maghteridon96 (code optimization)
* Maker (code optimization)
* PurgeandFire111 (http://www.hiveworkshop.com/forums/jass-resources-412/system-track-205760/)
************************************************************************/
library UltimateHeroPickSystem initializer Init
globals
/* ---------- core system globals ---------- */
private hashtable HASH = InitHashtable()
private trigger TRIG_CLICK_HERO = CreateTrigger()
private trigger TRIG_CLICK_OK = CreateTrigger()
private trigger TRIG_CLICK_RND = CreateTrigger()
private trigger TRIG_RUN_SYSTEM = CreateTrigger()
private timer CAMERA_TIMER = CreateTimer()
private camerasetup CAMERA = null
/* Special Effect string shown when we click on hero icon */
private string SFX_CLICK = "Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl"
/* Special Effect string shown when we create hero unit */
private string SFX_PICK = "Abilities\\Spells\\Other\\Awaken\\Awaken.mdl"
/* If set to TRUE it will allow players to pick more than 1 hero */
private boolean ALLOW_MULTI_PICK = false
/* Number of heroes we can pick in case ALLOW_MULTI_PICK = false */
private integer ALLOWED_HERO_NUMBER = 1
/* Show selection to Enemies */
private boolean SHOW_MSG_E = true
/* Show selection to Allies */
private boolean SHOW_MSG_A = true
/* Msg shown when picked */
private string P_PICK = " has choosen "
/* Msg shown when randomed */
private string P_RND = " has randomed "
private integer array HEROES_CREATED
private boolean array SYSTEM_ENABLED
private real array HERO_SPAWN_X
private real array HERO_SPAWN_Y
private integer array HERO_SELECTED
private string array COLOR
/* ---------- end core system globals ---------- */
/* ---------- hero ---------- */
private integer array HERO_ID
private integer HERO_COUNTER = 0
private destructable array HERO_MODEL
/* ---------- end hero ---------- */
/* ---------- stats ---------- */
private integer array STATS_ID
private integer STATS_COUNTER = 0
private texttag array TT_NAME
private real array TT_NAME_X
private real array TT_NAME_Y
private texttag array TT_VALUE
private real array TT_VALUE_X
private real array TT_VALUE_Y
private constant integer STAT_HERONAME = 1
private constant integer STAT_HEROCLASS = 2
private constant integer STAT_ATTRIBUTES = 3
private constant integer STAT_AGILITY = 4
private constant integer STAT_INTELLIGENCE = 5
private constant integer STAT_STRENGTH = 6
private constant integer STAT_STATS = 7
private constant integer STAT_ATTACKSPEED = 8
private constant integer STAT_ATTACKRANGE = 9
private constant integer STAT_ATTACKDAMAGE = 10
private constant integer STAT_ARMOR = 11
private constant integer STAT_MOVEMENTSPEED = 12
private constant integer STAT_DESCRIPTION = 13
/* ---------- end stats ---------- */
endglobals
private function GetRealSize takes real size returns real
return size * 0.023 / 10
endfunction
function ShowDest takes nothing returns nothing
call ShowDestructable(GetEnumDestructable(), true)
endfunction
function HideDest takes nothing returns nothing
call ShowDestructable(GetEnumDestructable(), false)
endfunction
private function ShowSystem takes player p, boolean flag returns nothing
local integer i = 0
if GetLocalPlayer() == p then
if flag then
call EnumDestructablesInRect(gg_rct_SystemRegion, null, function ShowDest)
loop
exitwhen i > STATS_COUNTER
call SetTextTagVisibility(TT_NAME[STATS_ID[i]], true)
call SetTextTagVisibility(TT_VALUE[STATS_ID[i]], true)
call SetTextTagText(TT_VALUE[STATS_ID[i]], " ", 25.00)
set i = i + 1
endloop
set i = 0
loop
exitwhen i > HERO_COUNTER
call ShowDestructable(HERO_MODEL[HERO_ID[i]], false)
set i = i + 1
endloop
else
call EnumDestructablesInRect(gg_rct_SystemRegion, null, function HideDest)
loop
exitwhen i > STATS_COUNTER
call SetTextTagVisibility(TT_NAME[STATS_ID[i]], false)
call SetTextTagVisibility(TT_VALUE[STATS_ID[i]], false)
set i = i + 1
endloop
endif
endif
endfunction
private function SelectHero takes nothing returns nothing
local integer fake_id = GetHandleId(GetTriggeringTrackable())
local integer id = LoadInteger(HASH, fake_id, 0)
local integer i = 0
local integer counter = 0
local real x = LoadReal(HASH, fake_id, 1)
local real y = LoadReal(HASH, fake_id, 2)
local string s = ""
loop
exitwhen counter >12
if SYSTEM_ENABLED[counter] then
if GetLocalPlayer() == Player(counter) then
set HERO_SELECTED[counter] = id
set s = SFX_CLICK
loop
exitwhen i > HERO_COUNTER
call ShowDestructable(HERO_MODEL[HERO_ID[i]], false)
set i = i + 1
endloop
call ShowDestructable(HERO_MODEL[id], true)
set i = 0
loop
exitwhen i > STATS_COUNTER
call SetTextTagVisibility(TT_VALUE[STATS_ID[i]], true)
call SetTextTagText(TT_VALUE[STATS_ID[i]], LoadStr(HASH, id, STATS_ID[i]), GetRealSize(10))
set i = i + 1
endloop
endif
call DestroyEffect(AddSpecialEffect(s,x,y))
endif
set counter = counter + 1
endloop
endfunction
private function RegisterTrack takes player p, integer id, real x, real y, trigger trig returns nothing
local trackable tr
local integer hid
local string s
if GetLocalPlayer() == p then
set s = "war3mapImported\\128x128Track.mdx"
else
set s = ""
endif
set tr = CreateTrackable(s, x, y, 0.00)
set hid = GetHandleId(tr)
call SaveInteger( HASH, hid, 0, id)
call SaveReal( HASH, hid, 1, x )
call SaveReal( HASH, hid, 2, y )
call SavePlayerHandle(HASH, hid, 3, p )
call TriggerRegisterTrackableHitEvent(trig, tr)
set tr = null
endfunction
private function RegisterHeroStat takes integer hid, integer sid, string value returns nothing
call SaveStr(HASH, hid, sid, value)
endfunction
private function RegisterHeroUnit takes integer hid, integer uid returns nothing
call SaveInteger(HASH, hid, -666, uid)
endfunction
private function RegisterHero takes integer id, real x, real y, destructable model, integer uid returns nothing
local integer i = 0
debug if HERO_MODEL[id] != null then
debug call BJDebugMsg("UltimateHeroPickSystem_RegisterHero [id is already used!]")
debug return
debug endif
set HERO_ID[HERO_COUNTER] = id
set HERO_COUNTER = HERO_COUNTER + 1
set HERO_MODEL[id] = model
loop
exitwhen i>12
call RegisterTrack(Player(i), id, x, y, TRIG_CLICK_HERO)
set i = i + 1
endloop
call RegisterHeroUnit(id, uid)
call ShowDestructable(model, false)
endfunction
private function RegisterStat takes integer id, string name, real x1, real y1, real size1, string value, real x2, real y2, real size2 returns nothing
debug if TT_NAME[id] != null or TT_VALUE[id] != null then
debug call BJDebugMsg("UltimateHeroPickSystem_RegisterStat [id is already used!]")
debug return
debug endif
set STATS_ID[STATS_COUNTER] = id
set STATS_COUNTER = STATS_COUNTER + 1
if name != "" then
set TT_NAME[id] = CreateTextTag()
set TT_NAME_X[id] = x1
set TT_NAME_Y[id] = y1
call SetTextTagPos(TT_NAME[id], x1, y1, 25.00)
call SetTextTagText(TT_NAME[id], name, GetRealSize(size1))
call SetTextTagVisibility(TT_NAME[id], false)
endif
if value != "" then
set TT_VALUE[id] = CreateTextTag()
set TT_VALUE_X[id] = x2
set TT_VALUE_Y[id] = y2
call SetTextTagPos(TT_VALUE[id], x2, y2, 25.00)
call SetTextTagText(TT_VALUE[id], value, GetRealSize(size2))
call SetTextTagVisibility(TT_VALUE[id], false)
endif
endfunction
private function PanCamera takes nothing returns nothing
local integer i = 0
loop
exitwhen i > 12
if SYSTEM_ENABLED[i] then
if GetLocalPlayer() == Player(i) then
call CameraSetupApply(CAMERA, true, true)
endif
endif
set i = i + 1
endloop
endfunction
private function RunSystem takes nothing returns nothing
local integer id = GetPlayerId(GetTriggerPlayer())
if HEROES_CREATED[id] >= ALLOWED_HERO_NUMBER then
if ALLOW_MULTI_PICK then
set SYSTEM_ENABLED[id] = true
call ShowSystem(GetTriggerPlayer(), true)
call TimerStart(CAMERA_TIMER, 0.03, true, function PanCamera)
endif
else
set SYSTEM_ENABLED[id] = true
call ShowSystem(GetTriggerPlayer(), true)
call TimerStart(CAMERA_TIMER, 0.03, true, function PanCamera)
endif
endfunction
private function CreateHero takes string hs, player p, integer id returns nothing
local integer pid = GetPlayerId(p)
local integer i = 0
local real x = HERO_SPAWN_X[pid]
local real y = HERO_SPAWN_Y[pid]
local string s = ""
local unit u = null
if HERO_SELECTED[pid] == 0 then
return
endif
if HEROES_CREATED[pid] < ALLOWED_HERO_NUMBER then
set u = CreateUnit(p, LoadInteger(HASH, id, -666), x, y, 0.00)
set HEROES_CREATED[pid] = HEROES_CREATED[pid] + 1
endif
if GetLocalPlayer() == p then
call ResetToGameCamera(0.00)
call PanCameraToTimed(x, y, 0.00)
set s = SFX_PICK
call SelectUnit(u, true)
endif
call DestroyEffect(AddSpecialEffect(s,x,y))
set HERO_SELECTED[pid] = 0
set SYSTEM_ENABLED[pid] = false
loop
exitwhen i > 12
if IsPlayerEnemy(p, Player(i)) and SHOW_MSG_E then
call DisplayTimedTextToPlayer(Player(i), 0,0, 5, COLOR[i] + GetPlayerName(p) + "|r" + hs + GetUnitName(u))
endif
if IsPlayerAlly(p, Player(i)) and SHOW_MSG_A then
call DisplayTimedTextToPlayer(Player(i), 0,0, 5, COLOR[i] + GetPlayerName(p) + "|r" + hs + GetUnitName(u))
endif
set i = i + 1
endloop
call ShowSystem(p, false)
set u = null
endfunction
private function HitOk takes nothing returns nothing
call CreateHero(P_PICK, LoadPlayerHandle(HASH, GetHandleId(GetTriggeringTrackable()), 3), HERO_SELECTED[GetPlayerId(LoadPlayerHandle(HASH, GetHandleId(GetTriggeringTrackable()), 3))])
endfunction
private function HitRandom takes nothing returns nothing
call CreateHero(P_RND, LoadPlayerHandle(HASH, GetHandleId(GetTriggeringTrackable()), 3), HERO_ID[GetRandomInt(0, HERO_COUNTER)])
endfunction
private function Init takes nothing returns nothing
local integer i = 0
loop
exitwhen i > 12
call TriggerRegisterPlayerEvent(TRIG_RUN_SYSTEM, Player(i), EVENT_PLAYER_END_CINEMATIC)
call ShowSystem(Player(i), false)
set HERO_SPAWN_X[i] = -1408.00 //X Coordinate, it's value is shown in WE bottom left corner
set HERO_SPAWN_Y[i] = -1728.00 //Y Coordinate, it's value is shown in WE bottom left corner
call RegisterTrack(Player(i), 666, -2048.00, 1536.00, TRIG_CLICK_OK)
call RegisterTrack(Player(i), 999, -2560.00, 1536.00, TRIG_CLICK_RND)
set i = i + 1
endloop
call TriggerAddAction(TRIG_RUN_SYSTEM, function RunSystem)
call TriggerAddAction(TRIG_CLICK_HERO, function SelectHero)
call TriggerAddAction(TRIG_CLICK_RND , function HitRandom)
call TriggerAddAction(TRIG_CLICK_OK , function HitOk)
/* system camera */
set CAMERA = gg_cam_CAMERA
/* register color codes */
set COLOR[ 0] = "|c00FF0000" // Red Color Code
set COLOR[ 1] = "|c000042FF" // Blue Color Code
set COLOR[ 2] = "|c001CE6B9" // Teal Color Code
set COLOR[ 3] = "|c00540081" // Purple Color Code
set COLOR[ 4] = "|c00FFFC01" // Yellow Color Code
set COLOR[ 5] = "|c00FEBA0E" // Orange Color Code
set COLOR[ 6] = "|c0020C000" // Green Color Code
set COLOR[ 7] = "|c00E55BB0" // Pink Color Code
set COLOR[ 8] = "|c00959697" // Gray Color Code
set COLOR[ 9] = "|c00FFFFBB" // Light Blue Color Code
set COLOR[10] = "|c00FF00FF" // Dark Green Color Code
set COLOR[11] = "|c004E2A04" // Brown Color Code
/* register stats: id name n_x n_y n_s value v_x v_y v_s */
call RegisterStat( STAT_HERONAME , "Hero Name:" , -2592.00, 2368.00, 12.00, "/" , -2304.00, 2368.00, 15.00)
call RegisterStat( STAT_HEROCLASS , "Hero Class:" , -2592.00, 2304.00, 12.00, "/" , -2304.00, 2304.00, 15.00)
call RegisterStat( STAT_ATTRIBUTES , "Attributes:" , -2624.00, 2240.00, 12.00, "" , 0.00, 0.00, 0.00)
call RegisterStat( STAT_AGILITY , "- Agility" , -2560.00, 2176.00, 10.00, "/" , -2304.00, 2176.00, 10.00)
call RegisterStat( STAT_INTELLIGENCE , "- Intelligence" , -2560.00, 2112.00, 10.00, "/" , -2304.00, 2112.00, 10.00)
call RegisterStat( STAT_STRENGTH , "- Strength" , -2560.00, 2048.00, 10.00, "/" , -2304.00, 2048.00, 10.00)
call RegisterStat( STAT_STATS , "Stats:" , -2624.00, 1984.00, 12.00, "" , 0.00, 0.00, 0.00)
call RegisterStat( STAT_ATTACKSPEED , "- Attack Speed" , -2560.00, 1920.00, 10.00, "/" , -2304.00, 1920.00, 10.00)
call RegisterStat( STAT_ATTACKRANGE , "- Attack Range" , -2560.00, 1856.00, 10.00, "/" , -2304.00, 1856.00, 10.00)
call RegisterStat( STAT_ATTACKDAMAGE , "- Attack Damage" , -2560.00, 1792.00, 10.00, "/" , -2304.00, 1792.00, 10.00)
call RegisterStat( STAT_ARMOR , "- Armor" , -2560.00, 1728.00, 10.00, "/" , -2304.00, 1728.00, 10.00)
call RegisterStat( STAT_MOVEMENTSPEED , "- Movement Speed" , -2560.00, 1664.00, 10.00, "/" , -2304.00, 1664.00, 10.00)
call RegisterStat( STAT_DESCRIPTION , "Description:" , -1792.00, 1888.00, 12.00, "/" , -1792.00, 1536.00, 10.00)
/* register heroes: id icon_x icon_y model unit_raw_code */
call RegisterHero( 1, -3200.00 , 2432.00, gg_dest_B00D_1022, 'Hamg') // Archmage
call RegisterHero( 2, -3072.00 , 2432.00, gg_dest_B00J_1299, 'Hblm') // Blood Mage
call RegisterHero( 3, -2944.00 , 2432.00, gg_dest_B00C_1301, 'Hmkg') // Mountain King
call RegisterHero( 4, -2816.00 , 2432.00, gg_dest_B00R_1302, 'Hpal') // Paladin
call RegisterHero( 5, -3200.00 , 2304.00, gg_dest_B00U_1303, 'Obla') // Blademaster
call RegisterHero( 6, -3072.00 , 2304.00, gg_dest_B00K_1304, 'Ofar') // Far Seer
call RegisterHero( 7, -2944.00 , 2304.00, gg_dest_B009_1305, 'Oshd') // Shadow Hunter
call RegisterHero( 8, -2816.00 , 2304.00, gg_dest_B00Q_1307, 'Oshd') // Tauren Chieftain
call RegisterHero( 9, -3200.00 , 2176.00, gg_dest_B00T_1308, 'Ucrl') // Crypt Lord
call RegisterHero( 10, -3072.00 , 2176.00, gg_dest_B00S_1309, 'Udea') // Death Knight
call RegisterHero( 11, -2944.00 , 2176.00, gg_dest_B00P_1310, 'Udre') // Dreadlord
call RegisterHero( 12, -2816.00 , 2176.00, gg_dest_B00G_1306, 'Ulic') // Lich
call RegisterHero( 13, -3200.00 , 2048.00, gg_dest_B01H_1314, 'Edem') // Demon Hunter
call RegisterHero( 14, -3072.00 , 2048.00, gg_dest_B01Y_1313, 'Ekee') // Keeper of the Grove
call RegisterHero( 15, -2944.00 , 2048.00, gg_dest_B01Z_1312, 'Emoo') // Pristress of the Moon
call RegisterHero( 16, -2816.00 , 2048.00, gg_dest_B020_1311, 'Ewar') // Warden
/* register hero stat: hero_id, stat_id, stat_value */
call RegisterHeroStat( 1, STAT_HERONAME , "|cffc3dbffTenn Flamecaster")
call RegisterHeroStat( 1, STAT_HEROCLASS , "|cffc3dbffArchmage")
call RegisterHeroStat( 1, STAT_AGILITY , "|cffc3dbff17 + 1.00")
call RegisterHeroStat( 1, STAT_INTELLIGENCE , "|cffffcc0019 + 3.20|r")
call RegisterHeroStat( 1, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat( 1, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 1, STAT_ATTACKRANGE , "|cffc3dbff600.00")
call RegisterHeroStat( 1, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 1, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 1, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat( 1, STAT_DESCRIPTION , "|cffc3dbffMystical Hero, adept at ranged assaults. Can learn Blizzard, Summon Water Elemental, Brilliance Aura and Mass Teleport. |n|n|cffffcc00Attacks land and air units.|r")
call RegisterHeroStat( 2, STAT_HERONAME , "|cffc3dbffEldin Sunstrider")
call RegisterHeroStat( 2, STAT_HEROCLASS , "|cffc3dbffBlood Mage")
call RegisterHeroStat( 2, STAT_AGILITY , "|cffc3dbff14 + 1.00")
call RegisterHeroStat( 2, STAT_INTELLIGENCE , "|cffffcc0019 + 3.00|r")
call RegisterHeroStat( 2, STAT_STRENGTH , "|cffc3dbff18 + 2.00")
call RegisterHeroStat( 2, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 2, STAT_ATTACKRANGE , "|cffc3dbff600.00")
call RegisterHeroStat( 2, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 2, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 2, STAT_MOVEMENTSPEED , "|cffc3dbff300.00")
call RegisterHeroStat( 2, STAT_DESCRIPTION , "|cffc3dbffMystical Hero, adept at controlling magic and ranged assaults. Can learn Flame Strike, Banish, Siphon Mana and Phoenix. |n|n|cffffcc00Attacks land and air units.|r")
call RegisterHeroStat( 3, STAT_HERONAME , "|cffc3dbffBor Stonebreaker")
call RegisterHeroStat( 3, STAT_HEROCLASS , "|cffc3dbffMountain King")
call RegisterHeroStat( 3, STAT_AGILITY , "|cffc3dbff11 + 1.50")
call RegisterHeroStat( 3, STAT_INTELLIGENCE , "|cffc3dbff15 + 1.50|r")
call RegisterHeroStat( 3, STAT_STRENGTH , "|cffffcc0024 + 3.00")
call RegisterHeroStat( 3, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 3, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat( 3, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 3, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 3, STAT_MOVEMENTSPEED , "|cffc3dbff270.00")
call RegisterHeroStat( 3, STAT_DESCRIPTION , "|cffc3dbffWarrior Hero, adept at offensive combat and disrupting enemy troops. Can learn Storm Bolt, Thunder Clap, Bash and Avatar. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat( 4, STAT_HERONAME , "|cffc3dbffGranis Darkhammer")
call RegisterHeroStat( 4, STAT_HEROCLASS , "|cffc3dbffPaladin")
call RegisterHeroStat( 4, STAT_AGILITY , "|cffc3dbff13 + 1.50")
call RegisterHeroStat( 4, STAT_INTELLIGENCE , "|cffc3dbff17 + 1.80|r")
call RegisterHeroStat( 4, STAT_STRENGTH , "|cffffcc0022 + 2.70")
call RegisterHeroStat( 4, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 4, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat( 4, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 4, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 4, STAT_MOVEMENTSPEED , "|cffc3dbff270.00")
call RegisterHeroStat( 4, STAT_DESCRIPTION , "|cffc3dbffWarrior Hero, exceptional at defense and augmenting nearby friendly troops. Can learn Holy Light, Divine Shield, Devotion Aura and Resurrection. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat( 5, STAT_HERONAME , "|cffc3dbffTojara")
call RegisterHeroStat( 5, STAT_HEROCLASS , "|cffc3dbffBlademaster")
call RegisterHeroStat( 5, STAT_AGILITY , "|cffc3dbff23 + 1.75")
call RegisterHeroStat( 5, STAT_INTELLIGENCE , "|cffffcc0016 + 2.25|r")
call RegisterHeroStat( 5, STAT_STRENGTH , "|cffc3dbff18 + 2.00")
call RegisterHeroStat( 5, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 5, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat( 5, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 5, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 5, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat( 5, STAT_DESCRIPTION , "|cffc3dbffCunning Hero, adept at quickly killing individual units and creating confusion among enemies. Can learn Mirror Image, Wind Walk, Critical Strike and Bladestorm. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat( 6, STAT_HERONAME , "|cffc3dbffGar'dal Grimsight")
call RegisterHeroStat( 6, STAT_HEROCLASS , "|cffc3dbffFar Seer")
call RegisterHeroStat( 6, STAT_AGILITY , "|cffc3dbff18 + 1.00")
call RegisterHeroStat( 6, STAT_INTELLIGENCE , "|cffffcc0019 + 3.00|r")
call RegisterHeroStat( 6, STAT_STRENGTH , "|cffc3dbff15 + 2.00")
call RegisterHeroStat( 6, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 6, STAT_ATTACKRANGE , "|cffc3dbff600.00")
call RegisterHeroStat( 6, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 6, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 6, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat( 6, STAT_DESCRIPTION , "|cffc3dbffMystical Hero, effective at ranged attacks and scouting. Can learn Chain Lightning, Far Sight, Feral Spirit and Earthquake. |n|n|cffffcc00Attacks land and air units.|r")
call RegisterHeroStat( 7, STAT_HERONAME , "|cffc3dbffZul'kis")
call RegisterHeroStat( 7, STAT_HEROCLASS , "|cffc3dbffShadow Hunter")
call RegisterHeroStat( 7, STAT_AGILITY , "|cffffcc0017 + 1.00")
call RegisterHeroStat( 7, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat( 7, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat( 7, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 7, STAT_ATTACKRANGE , "|cffc3dbff600.00")
call RegisterHeroStat( 7, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 7, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 7, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat( 7, STAT_DESCRIPTION , "|cffc3dbffCunning Hero, adept at healing magics and voodoo curses. Can learn Healing Wave, Hex, Serpent Ward and Big Bad Voodoo. |n|n|cffffcc00Attacks land and air units.|r")
call RegisterHeroStat( 8, STAT_HERONAME , "|cffc3dbffMarn Thunderhorn")
call RegisterHeroStat( 8, STAT_HEROCLASS , "|cffc3dbffTauren Chieftain")
call RegisterHeroStat( 8, STAT_AGILITY , "|cffc3dbff17 + 1.00")
call RegisterHeroStat( 8, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat( 8, STAT_STRENGTH , "|cffffcc0014 + 1.80")
call RegisterHeroStat( 8, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 8, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat( 8, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 8, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 8, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat( 8, STAT_DESCRIPTION , "|cffc3dbffWarrior Hero, exceptional at absorbing damage and melee combat. Can learn Shockwave, War Stomp, Endurance Aura and Reincarnation. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat( 9, STAT_HERONAME , "|cffc3dbffThebis-Ra")
call RegisterHeroStat( 9, STAT_HEROCLASS , "|cffc3dbffCrypt Lord")
call RegisterHeroStat( 9, STAT_AGILITY , "|cffffcc0017 + 1.00")
call RegisterHeroStat( 9, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat( 9, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat( 9, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat( 9, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat( 9, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat( 9, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat( 9, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat( 9, STAT_DESCRIPTION , "|cffc3dbffWarrior Hero, adept at summoning insect minions and crushing enemies. Can learn Impale, Spiked Carapace, Carrion Beetles and Locust Swarm. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat(10, STAT_HERONAME , "|cffc3dbffLord Nightsorrow")
call RegisterHeroStat(10, STAT_HEROCLASS , "|cffc3dbffDeath Knight")
call RegisterHeroStat(10, STAT_AGILITY , "|cffc3dbff17 + 1.00")
call RegisterHeroStat(10, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat(10, STAT_STRENGTH , "|cffffcc0014 + 1.80")
call RegisterHeroStat(10, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat(10, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat(10, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat(10, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat(10, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat(10, STAT_DESCRIPTION , "|cffc3dbffWarrior Hero, evil counterpart to the Human Paladin. Can learn Death Coil, Death Pact, Unholy Aura, and Animate Dead. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat(11, STAT_HERONAME , "|cffc3dbffTerrordar")
call RegisterHeroStat(11, STAT_HEROCLASS , "|cffc3dbffDreadlord")
call RegisterHeroStat(11, STAT_AGILITY , "|cffc3dbff17 + 1.00")
call RegisterHeroStat(11, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat(11, STAT_STRENGTH , "|cffffcc0014 + 1.80")
call RegisterHeroStat(11, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat(11, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat(11, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat(11, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat(11, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat(11, STAT_DESCRIPTION , "|cffc3dbffCunning Hero, adept at controlling combat. Can learn Carrion Swarm, Sleep, Vampiric Aura, and Inferno. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat(12, STAT_HERONAME , "|cffc3dbffOrdin Frostbane")
call RegisterHeroStat(12, STAT_HEROCLASS , "|cffc3dbffLich")
call RegisterHeroStat(12, STAT_AGILITY , "|cffc3dbff17 + 1.00")
call RegisterHeroStat(12, STAT_INTELLIGENCE , "|cffffcc0019 + 3.20|r")
call RegisterHeroStat(12, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat(12, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat(12, STAT_ATTACKRANGE , "|cffc3dbff600.00")
call RegisterHeroStat(12, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat(12, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat(12, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat(12, STAT_DESCRIPTION , "|cffc3dbffMystical Hero, particularly adept at cold magic. Can learn Frost Armor, Frost Nova, Dark Ritual and Death And Decay. |n|n|cffffcc00Attacks land and air units.|r")
call RegisterHeroStat(13, STAT_HERONAME , "|cffc3dbffShadowsong")
call RegisterHeroStat(13, STAT_HEROCLASS , "|cffc3dbffDemon Hunter")
call RegisterHeroStat(13, STAT_AGILITY , "|cffffcc0017 + 1.00")
call RegisterHeroStat(13, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat(13, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat(13, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat(13, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat(13, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat(13, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat(13, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat(13, STAT_DESCRIPTION , "|cffc3dbffCunning Hero, adept at maneuvering through battles. Can learn Immolation, Evasion, Mana Burn, and Metamorphosis. |n|n|cffffcc00Attacks land units.|r")
call RegisterHeroStat(14, STAT_HERONAME , "|cffc3dbffLarodar")
call RegisterHeroStat(14, STAT_HEROCLASS , "|cffc3dbffKeeper of the Grove")
call RegisterHeroStat(14, STAT_AGILITY , "|cffc3dbff17 + 1.00")
call RegisterHeroStat(14, STAT_INTELLIGENCE , "|cffffcc0019 + 3.20|r")
call RegisterHeroStat(14, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat(14, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat(14, STAT_ATTACKRANGE , "|cffc3dbff600.00")
call RegisterHeroStat(14, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat(14, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat(14, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat(14, STAT_DESCRIPTION , "|cffc3dbffMystical Hero, adept at using nature spells. Can learn Entangling Roots, Force of Nature, Thorns Aura, and Tranquility. |n|n|cffffcc00Attacks land and air units.|r")
call RegisterHeroStat(15, STAT_HERONAME , "|cffc3dbffKathris Starsong")
call RegisterHeroStat(15, STAT_HEROCLASS , "|cffc3dbffPristress of the Moon")
call RegisterHeroStat(15, STAT_AGILITY , "|cffffcc0017 + 1.00")
call RegisterHeroStat(15, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat(15, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat(15, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat(15, STAT_ATTACKRANGE , "|cffc3dbff600.00")
call RegisterHeroStat(15, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat(15, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat(15, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat(15, STAT_DESCRIPTION , "|cffc3dbffWarrior Hero, adept at enhancing ranged attacks and slaying enemies from afar. Can learn Scout, Searing Arrows, Trueshot Aura, and Starfall. |n|n|cffffcc00Attacks land and air units.|r")
call RegisterHeroStat(16, STAT_HERONAME , "|cffc3dbffAlsa Iron-cell")
call RegisterHeroStat(16, STAT_HEROCLASS , "|cffc3dbffWarden")
call RegisterHeroStat(16, STAT_AGILITY , "|cffffcc0017 + 1.00")
call RegisterHeroStat(16, STAT_INTELLIGENCE , "|cffc3dbff19 + 3.20|r")
call RegisterHeroStat(16, STAT_STRENGTH , "|cffc3dbff14 + 1.80")
call RegisterHeroStat(16, STAT_ATTACKSPEED , "|cffc3dbff2.13")
call RegisterHeroStat(16, STAT_ATTACKRANGE , "|cffc3dbff128.00 |cffffcc00(melee)")
call RegisterHeroStat(16, STAT_ATTACKDAMAGE , "|cffc3dbff21 - 27 |cffffcc00(Hero)")
call RegisterHeroStat(16, STAT_ARMOR , "|cffc3dbff3 |cffffcc00(Hero)")
call RegisterHeroStat(16, STAT_MOVEMENTSPEED , "|cffc3dbff320.00")
call RegisterHeroStat(16, STAT_DESCRIPTION , "|cffc3dbffCunning Hero, adept at entering and escaping combat. Can learn Blink, Fan of Knives, Shadow Strike and Vengeance. |n|n|cffffcc00Attacks land units.|r")
endfunction
endlibrary