Ultimate GUI Hero Pick System 2.3

This bundle is marked as approved. It works and satisfies the submission rules.
Ultimate GUI Hero Pick System
2.3
Created by -Kobas-
Link to JASS version
-------------------------------------------------------------------------
Please if you find any errors or bugs report them to me so I can fix them

Features:
- Easy to understand/edit/import/use.
- Can be mixed with multiboard together.
- Small file size.
- Unique idea, perfect way to show people something new.
- Now MPI as well.


What is different in my system?
You can edit interface and play with it to make it look like anything you want really easily.
How to add more buttons, for example hero icons
You will need to create new destructible doodads just like I did for buttons, edit texture and scaling value :)
Remember to trigger dummy unit as well.
Why so long triggers and so many variables?
Well this system isn't created for 1 player, you can remove all interfaces except undead (example) and just edit variables easily (using another array integer) to make it usable for all players.
You can copy part of triggers as well, they will work perfectly fine alone cuz they use different variable.
Can we add more options to system?
Of course, especially if you are working on Single Player maps, you will find system funny once when you remove 90% of triggers created for other players and interfaces :)
Why GUI, use script instead, trackables and such things?
I won't answer to such question, and I will try to ignore such comments -.-


  • UGHPS Setup
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Player Colors --------
      • Set TextColor[1] = |c00FF0000
      • Set TextColor[2] = |c000042FF
      • Set TextColor[3] = |c001CE6B9
      • Set TextColor[4] = |c00540081
      • Set TextColor[5] = |c00FFFC01
      • Set TextColor[6] = |c00FEBA0E
      • Set TextColor[7] = |c0020C000
      • Set TextColor[8] = |c00E55BB0
      • Set TextColor[9] = |c00959697
      • Set TextColor[11] = |c00FFFFBB
      • Set TextColor[12] = |c00FF00FF
      • -------- Player Interface Regions --------
      • Set UGHPS_InterfaceRegion[1] = Player Interface 1 <gen>
      • Set UGHPS_InterfaceRegion[2] = Player Interface 2 <gen>
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Red Player --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Player multipli value, should be ranged from 100 to 800. Everything above 800 will ruin trigger cuz max array limit will be reached. --------
      • -------- I use 100 cuz 100 - 20 for each hero = 40 more room between. --------
      • Set Integer_i = 100
      • -------- Integer that calculate things, it's easier for me to work like this, if you need different value you can just change 1 variable instead all. --------
      • Set Integer_k = 1
      • -------- Interface Camera --------
      • Set UGHPS_Camera[1] = Interface 1 <gen>
      • -------- Damage --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 1))] = (Center of Damage 1 <gen>)
      • -------- Range --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 2))] = (Center of Range 1 <gen>)
      • -------- Armor --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 3))] = (Center of Armor 1 <gen>)
      • -------- AoE --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 4))] = (Center of AoE 1 <gen>)
      • -------- Support --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 5))] = (Center of Support 1 <gen>)
      • -------- Regeneration --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 6))] = (Center of Regeneration 1 <gen>)
      • -------- Hero Name --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 7))] = (Center of Hero Name 1 <gen>)
      • -------- Hero Class --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 8))] = (Center of Hero 1 <gen>)
      • -------- Hero Introduction --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 9))] = (Center of Intro 1 <gen>)
      • -------- Stats - Attributes --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 10))] = (Center of A 1 <gen>)
      • -------- Hero Spawn Location --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 11))] = (Center of Spawn Location 1 <gen>)
      • -------- OK button --------
      • Set UGHPS_Button_OK = Click 0022 <gen>
      • -------- Random Button --------
      • Set UGHPS_Button_Random = Click 0002 <gen>
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Blue Player --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Player multipli value, should be ranged from 100 to 800. Everything above 800 will ruin trigger cuz max array limit will be reached. --------
      • -------- I use 100 cuz 100 - 20 for each hero = 40 more room between. --------
      • Set Integer_i = 200
      • -------- Integer that calculate things, it's easier for me to work like this, if you need different value you can just change 1 variable instead all. --------
      • Set Integer_k = 1
      • -------- Interface Camera --------
      • Set UGHPS_Camera[2] = Interface 2 <gen>
      • -------- Damage --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 1))] = (Center of Damage 2 <gen>)
      • -------- Range --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 2))] = (Center of Range 2 <gen>)
      • -------- Armor --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 3))] = (Center of Armor 2 <gen>)
      • -------- AoE --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 4))] = (Center of AoE 2 <gen>)
      • -------- Support --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 5))] = (Center of Support 2 <gen>)
      • -------- Regeneration --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 6))] = (Center of Regeneration 2 <gen>)
      • -------- Hero Name --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 7))] = (Center of Hero Name 2 <gen>)
      • -------- Hero Class --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 8))] = (Center of Hero 2 <gen>)
      • -------- Hero Introduction --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 9))] = (Center of Intro 2 <gen>)
      • -------- Stats - Attributes --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 10))] = (Center of A 2 <gen>)
      • -------- Hero Spawn Location --------
      • Set UGHPS_HeroStats[(Integer_i + (Integer_k + 11))] = (Center of Spawn Location 2 <gen>)
      • -------- OK button --------
      • Set UGHPS_Button_OK = Click 0007 <gen>
      • -------- Random Button --------
      • Set UGHPS_Button_Random = Click 0006 <gen>
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- MPI settings --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • For each (Integer A) from 1 to 2, do (Actions)
        • Loop - Actions
          • -------- Disable camera variable for all players --------
          • Set UGHPS_CameraCheck[(Player number of (Player((Integer A))))] = False
          • -------- Add player select unit event to trigger below. --------
          • Trigger - Add to UGHPS Buttons <gen> the event (Player - (Player((Integer A))) Selects a unit)
          • -------- Add player skips cinematic or write xxx to right trigger. --------
          • Trigger - Add to UGHPS Progress <gen> the event (Player - (Player((Integer A))) skips a cinematic sequence)
          • Trigger - Add to UGHPS Progress <gen> the event (Player - (Player((Integer A))) types a chat message containing xxx as An exact match)
          • Trigger - Add to UGHPS Camera x <gen> the event (Time - UGHPS_CameraTimer[(Integer A)] expires)
      • -------- Let's make clickable units transparent (unvisible) --------
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units in (Playable map area) matching (((Unit-type of (Matching unit)) Equal to Click) or ((Unit-type of (Matching unit)) Equal to Settings))) and do (Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 100.00% transparency)
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- HEROES --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Hero destructible model --------
      • -------- RED --------
      • Set UGHPS_HeroModel[((Integer_i x 1) + 20)] = Hero H (Paladin) 0124 <gen>
      • Set UGHPS_HeroModel[((Integer_i x 1) + 40)] = Hero H (Blood Mage) 0247 <gen>
      • Set UGHPS_HeroModel[((Integer_i x 1) + 60)] = Hero H (Ranger) 0154 <gen>
      • -------- BLUE --------
      • Set UGHPS_HeroModel[((Integer_i x 2) + 20)] = Hero H (Paladin) 0141 <gen>
      • Set UGHPS_HeroModel[((Integer_i x 2) + 40)] = Hero H (Blood Mage) 0157 <gen>
      • Set UGHPS_HeroModel[((Integer_i x 2) + 60)] = Hero H (Ranger) 0178 <gen>
      • Set Integer_i = 100
      • For each (Integer A) from 1 to 2, do (Actions)
        • Loop - Actions
          • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
          • -------- Paladin --------
          • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
          • Set Integer_k = 20
          • -------- Hero unit type --------
          • Set UGHPS_HERO_H[((Integer_i x (Integer A)) + Integer_k)] = Paladin
          • -------- Hero destructible model --------
          • Destructible - Hide UGHPS_HeroModel[((Integer_i x (Integer A)) + Integer_k)]
          • -------- Damage --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 1))] = |cFF00FF00IIIIIII|r|cFFFF0000III|r
          • -------- Range --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 2))] = |cFF00FF00II|r|cFFFF0000IIIIIIII|r
          • -------- Armor --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 3))] = |cFF00FF00IIII|r|cFFFF0000IIIIII|r
          • -------- AoE --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 4))] = |cFF00FF00I|r|cFFFF0000IIIIIIIII|r
          • -------- Support --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 5))] = |cFF00FF00IIIII|r|cFFFF0000IIIII|r
          • -------- Regeneration --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 6))] = |cFFFF0000IIIIIIIIII|r
          • -------- Hero Name --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 7))] = Aurrius the Pure
          • -------- Hero Class --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 8))] = |cffffcc00Palladin
          • -------- Hero Introduction --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 9))] = Warrior 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
          • -------- Stats - Attributes --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 10))] = (|cffffcc0022 + 2.7|r) (17 + 1.8) (13 + 1.5)
          • -------- Sound - Hero Selected --------
          • Set UGHPS_Sound[((Integer_i x (Integer A)) + Integer_k)] = HeroSelectedPaladin <gen>
          • -------- Sound - Hero Picked --------
          • Set UGHPS_Sound[((Integer_i x (Integer A)) + (Integer_k + 1))] = HeroPickedPaladin <gen>
          • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
          • -------- Blood Mage --------
          • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
          • Set Integer_k = 40
          • -------- Hero unit type --------
          • Set UGHPS_HERO_H[((Integer_i x (Integer A)) + Integer_k)] = Blood Mage
          • -------- Hero destructible model --------
          • Destructible - Hide UGHPS_HeroModel[((Integer_i x (Integer A)) + Integer_k)]
          • -------- Damage --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 1))] = |cFF00FF00IIIIIII|r|cFFFF0000III|r
          • -------- Range --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 2))] = |cFF00FF00IIIII|r|cFFFF0000IIIII|r
          • -------- Armor --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 3))] = |cFF00FF00IIIIIIII|r|cFFFF0000II|r
          • -------- AoE --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 4))] = |cFFFF0000IIIIIIIIII|r
          • -------- Support --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 5))] = |cFFFF0000IIIIIIIIII|r
          • -------- Regeneration --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 6))] = |cFF00FF00II|r|cFFFF0000IIIIIIII|r
          • -------- Hero Name --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 7))] = Kelen the Destroyer
          • -------- Hero Class --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 8))] = |cffffcc00Blood Mage
          • -------- Hero Introduction --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 9))] = Mystical 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
          • -------- Stats - Attributes --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 10))] = (18 + 2.0) (14 + 1.0) (|cffffcc0019 + 3.0|r)
          • -------- Sound - Hero Selected --------
          • Set UGHPS_Sound[((Integer_i x (Integer A)) + Integer_k)] = HeroSelectedBloodElf <gen>
          • -------- Sound - Hero Picked --------
          • Set UGHPS_Sound[((Integer_i x (Integer A)) + (Integer_k + 1))] = HeroPickedBloodElf <gen>
          • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
          • -------- Ranger --------
          • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
          • Set Integer_k = 60
          • -------- Hero unit type --------
          • Set UGHPS_HERO_H[((Integer_i x (Integer A)) + Integer_k)] = Sylvanas Windrunner
          • -------- Hero destructible model --------
          • Destructible - Hide UGHPS_HeroModel[((Integer_i x (Integer A)) + Integer_k)]
          • -------- Damage --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 1))] = |cFF00FF00IIII|r|cFFFF0000IIIIII|r
          • -------- Range --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 2))] = |cFF00FF00IIIII|r|cFFFF0000IIIII|r
          • -------- Armor --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 3))] = |cFF00FF00IIIIIIII|r|cFFFF0000II|r
          • -------- AoE --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 4))] = |cFF00FF00IIIII|r|cFFFF0000IIIII|r
          • -------- Support --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 5))] = |cFFFF0000IIIIIIIIII|r
          • -------- Regeneration --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 6))] = |cFF00FF00II|r|cFFFF0000IIIIIIII|r
          • -------- Hero Name --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 7))] = Sylvanas Windrunner
          • -------- Hero Class --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 8))] = |cffffcc00Ranger
          • -------- Hero Introduction --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 9))] = Warrior Hero, adept at enhancing ranged attacks and slaying enemies from afar. Can learn Scout, Cold Arrows, Trueshot Aura, and Starfall. |n|n|cffffcc00Attacks land and air units.|r
          • -------- Stats - Attributes --------
          • Set UGHPS_StringAttributes[((Integer_i x (Integer A)) + (Integer_k + 10))] = (18 + 1.9 ) (|cffffcc0019 + 1.5|r) (15 + 2.6)
          • -------- Sound - Hero Selected --------
          • Set UGHPS_Sound[((Integer_i x (Integer A)) + Integer_k)] = HeroSelectedRanger <gen>
          • -------- Sound - Hero Picked --------
          • Set UGHPS_Sound[((Integer_i x (Integer A)) + (Integer_k + 1))] = HeroPickedRanger <gen>
  • UGHPS Camera
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • -------- Each 0.1 sec we create timer that will set camera above system for right player if he use system. --------
      • For each (Integer Integer_c) from 1 to 2, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • UGHPS_CameraCheck[Integer_c] Equal to True
            • Then - Actions
              • Countdown Timer - Start UGHPS_CameraTimer[Integer_c] as a One-shot timer that will expire in 0.00 seconds
            • Else - Actions
  • UGHPS Camera x
    • Events
    • Conditions
    • Actions
      • -------- It's camera system, just copy it, nothing important really --------
      • For each (Integer Integer_c) from 1 to 2, do (Actions)
        • Loop - Actions
          • Custom script: if GetExpiredTimer() == udg_UGHPS_CameraTimer[udg_Integer_c] then
          • Camera - Apply UGHPS_Camera[(Player number of (Player(Integer_c)))] for (Player(Integer_c)) over 0.10 seconds
          • Skip remaining actions
          • Custom script: endif
  • Interface Human
    • Events
      • Unit - A unit Sells a unit
    • Conditions
      • (Unit-type of (Sold unit)) Equal to Human Interface
    • Actions
      • Destructible - Pick every destructible in UGHPS_InterfaceRegion[(Player number of (Owner of (Sold unit)))] and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Destructible-type of (Picked destructible)) Equal to Border NE (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border Orc (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border UD (D)
            • Then - Actions
              • Set point_p = (Position of (Picked destructible))
              • Destructible - Create a Border H (D) at point_p facing 0.00 with scale 1.00 and variation 0
              • Custom script: call RemoveLocation ( udg_point_p)
              • Destructible - Remove (Picked destructible)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Destructible-type of (Picked destructible)) Equal to Border NE (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border Orc (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border UD (DL)
                • Then - Actions
                  • Set point_p = (Position of (Picked destructible))
                  • Destructible - Create a Border H (DL) at point_p facing 0.00 with scale 1.00 and variation 0
                  • Custom script: call RemoveLocation ( udg_point_p)
                  • Destructible - Remove (Picked destructible)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (Destructible-type of (Picked destructible)) Equal to Border NE (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border Orc (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border UD (DR)
                    • Then - Actions
                      • Set point_p = (Position of (Picked destructible))
                      • Destructible - Create a Border H (DR) at point_p facing 0.00 with scale 1.00 and variation 0
                      • Custom script: call RemoveLocation ( udg_point_p)
                      • Destructible - Remove (Picked destructible)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (Destructible-type of (Picked destructible)) Equal to Border NE (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border Orc (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border UD (L)
                        • Then - Actions
                          • Set point_p = (Position of (Picked destructible))
                          • Destructible - Create a Border H (L) at point_p facing 0.00 with scale 1.00 and variation 0
                          • Custom script: call RemoveLocation ( udg_point_p)
                          • Destructible - Remove (Picked destructible)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Or - Any (Conditions) are true
                                • Conditions
                                  • (Destructible-type of (Picked destructible)) Equal to Border NE (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border Orc (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border UD (R)
                            • Then - Actions
                              • Set point_p = (Position of (Picked destructible))
                              • Destructible - Create a Border H (R) at point_p facing 0.00 with scale 1.00 and variation 0
                              • Custom script: call RemoveLocation ( udg_point_p)
                              • Destructible - Remove (Picked destructible)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Or - Any (Conditions) are true
                                    • Conditions
                                      • (Destructible-type of (Picked destructible)) Equal to Border NE (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border Orc (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border UD (U)
                                • Then - Actions
                                  • Set point_p = (Position of (Picked destructible))
                                  • Destructible - Create a Border H (U) at point_p facing 0.00 with scale 1.00 and variation 0
                                  • Custom script: call RemoveLocation ( udg_point_p)
                                  • Destructible - Remove (Picked destructible)
                                • Else - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • Or - Any (Conditions) are true
                                        • Conditions
                                          • (Destructible-type of (Picked destructible)) Equal to Border NE (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border Orc (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border UD (UL)
                                    • Then - Actions
                                      • Set point_p = (Position of (Picked destructible))
                                      • Destructible - Create a Border H (UL) at point_p facing 0.00 with scale 1.00 and variation 0
                                      • Custom script: call RemoveLocation ( udg_point_p)
                                      • Destructible - Remove (Picked destructible)
                                    • Else - Actions
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • Or - Any (Conditions) are true
                                            • Conditions
                                              • (Destructible-type of (Picked destructible)) Equal to Border NE (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border Orc (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border UD (UR)
                                        • Then - Actions
                                          • Set point_p = (Position of (Picked destructible))
                                          • Destructible - Create a Border H (UR) at point_p facing 0.00 with scale 1.00 and variation 0
                                          • Custom script: call RemoveLocation ( udg_point_p)
                                          • Destructible - Remove (Picked destructible)
                                        • Else - Actions
  • Interface Orc
    • Events
      • Unit - A unit Sells a unit
    • Conditions
      • (Unit-type of (Sold unit)) Equal to Orc Interface
    • Actions
      • Destructible - Pick every destructible in UGHPS_InterfaceRegion[(Player number of (Owner of (Sold unit)))] and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Destructible-type of (Picked destructible)) Equal to Border H (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border NE (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border UD (D)
            • Then - Actions
              • Set point_p = (Position of (Picked destructible))
              • Destructible - Create a Border Orc (D) at point_p facing 0.00 with scale 1.00 and variation 0
              • Custom script: call RemoveLocation ( udg_point_p)
              • Destructible - Remove (Picked destructible)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Destructible-type of (Picked destructible)) Equal to Border H (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border NE (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border UD (DL)
                • Then - Actions
                  • Set point_p = (Position of (Picked destructible))
                  • Destructible - Create a Border Orc (DL) at point_p facing 0.00 with scale 1.00 and variation 0
                  • Custom script: call RemoveLocation ( udg_point_p)
                  • Destructible - Remove (Picked destructible)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (Destructible-type of (Picked destructible)) Equal to Border H (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border NE (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border UD (DR)
                    • Then - Actions
                      • Set point_p = (Position of (Picked destructible))
                      • Destructible - Create a Border Orc (DR) at point_p facing 0.00 with scale 1.00 and variation 0
                      • Custom script: call RemoveLocation ( udg_point_p)
                      • Destructible - Remove (Picked destructible)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (Destructible-type of (Picked destructible)) Equal to Border H (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border NE (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border UD (L)
                        • Then - Actions
                          • Set point_p = (Position of (Picked destructible))
                          • Destructible - Create a Border Orc (L) at point_p facing 0.00 with scale 1.00 and variation 0
                          • Custom script: call RemoveLocation ( udg_point_p)
                          • Destructible - Remove (Picked destructible)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Or - Any (Conditions) are true
                                • Conditions
                                  • (Destructible-type of (Picked destructible)) Equal to Border H (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border NE (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border UD (R)
                            • Then - Actions
                              • Set point_p = (Position of (Picked destructible))
                              • Destructible - Create a Border Orc (R) at point_p facing 0.00 with scale 1.00 and variation 0
                              • Custom script: call RemoveLocation ( udg_point_p)
                              • Destructible - Remove (Picked destructible)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Or - Any (Conditions) are true
                                    • Conditions
                                      • (Destructible-type of (Picked destructible)) Equal to Border H (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border NE (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border UD (U)
                                • Then - Actions
                                  • Set point_p = (Position of (Picked destructible))
                                  • Destructible - Create a Border Orc (U) at point_p facing 0.00 with scale 1.00 and variation 0
                                  • Custom script: call RemoveLocation ( udg_point_p)
                                  • Destructible - Remove (Picked destructible)
                                • Else - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • Or - Any (Conditions) are true
                                        • Conditions
                                          • (Destructible-type of (Picked destructible)) Equal to Border H (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border NE (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border UD (UL)
                                    • Then - Actions
                                      • Set point_p = (Position of (Picked destructible))
                                      • Destructible - Create a Border Orc (UL) at point_p facing 0.00 with scale 1.00 and variation 0
                                      • Custom script: call RemoveLocation ( udg_point_p)
                                      • Destructible - Remove (Picked destructible)
                                    • Else - Actions
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • Or - Any (Conditions) are true
                                            • Conditions
                                              • (Destructible-type of (Picked destructible)) Equal to Border H (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border NE (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border UD (UR)
                                        • Then - Actions
                                          • Set point_p = (Position of (Picked destructible))
                                          • Destructible - Create a Border Orc (UR) at point_p facing 0.00 with scale 1.00 and variation 0
                                          • Custom script: call RemoveLocation ( udg_point_p)
                                          • Destructible - Remove (Picked destructible)
                                        • Else - Actions
  • Interface Night Elf
    • Events
      • Unit - A unit Sells a unit
    • Conditions
      • (Unit-type of (Sold unit)) Equal to Night Elf Interface
    • Actions
      • Destructible - Pick every destructible in UGHPS_InterfaceRegion[(Player number of (Owner of (Sold unit)))] and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Destructible-type of (Picked destructible)) Equal to Border H (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border Orc (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border UD (D)
            • Then - Actions
              • Set point_p = (Position of (Picked destructible))
              • Destructible - Create a Border NE (D) at point_p facing 0.00 with scale 1.00 and variation 0
              • Custom script: call RemoveLocation ( udg_point_p)
              • Destructible - Remove (Picked destructible)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Destructible-type of (Picked destructible)) Equal to Border H (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border Orc (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border UD (DL)
                • Then - Actions
                  • Set point_p = (Position of (Picked destructible))
                  • Destructible - Create a Border NE (DL) at point_p facing 0.00 with scale 1.00 and variation 0
                  • Custom script: call RemoveLocation ( udg_point_p)
                  • Destructible - Remove (Picked destructible)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (Destructible-type of (Picked destructible)) Equal to Border H (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border Orc (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border UD (DR)
                    • Then - Actions
                      • Set point_p = (Position of (Picked destructible))
                      • Destructible - Create a Border NE (DR) at point_p facing 0.00 with scale 1.00 and variation 0
                      • Custom script: call RemoveLocation ( udg_point_p)
                      • Destructible - Remove (Picked destructible)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (Destructible-type of (Picked destructible)) Equal to Border H (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border Orc (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border UD (L)
                        • Then - Actions
                          • Set point_p = (Position of (Picked destructible))
                          • Destructible - Create a Border NE (L) at point_p facing 0.00 with scale 1.00 and variation 0
                          • Custom script: call RemoveLocation ( udg_point_p)
                          • Destructible - Remove (Picked destructible)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Or - Any (Conditions) are true
                                • Conditions
                                  • (Destructible-type of (Picked destructible)) Equal to Border H (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border Orc (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border UD (R)
                            • Then - Actions
                              • Set point_p = (Position of (Picked destructible))
                              • Destructible - Create a Border NE (R) at point_p facing 0.00 with scale 1.00 and variation 0
                              • Custom script: call RemoveLocation ( udg_point_p)
                              • Destructible - Remove (Picked destructible)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Or - Any (Conditions) are true
                                    • Conditions
                                      • (Destructible-type of (Picked destructible)) Equal to Border H (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border Orc (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border UD (U)
                                • Then - Actions
                                  • Set point_p = (Position of (Picked destructible))
                                  • Destructible - Create a Border NE (U) at point_p facing 0.00 with scale 1.00 and variation 0
                                  • Custom script: call RemoveLocation ( udg_point_p)
                                  • Destructible - Remove (Picked destructible)
                                • Else - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • Or - Any (Conditions) are true
                                        • Conditions
                                          • (Destructible-type of (Picked destructible)) Equal to Border H (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border Orc (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border UD (UL)
                                    • Then - Actions
                                      • Set point_p = (Position of (Picked destructible))
                                      • Destructible - Create a Border NE (UL) at point_p facing 0.00 with scale 1.00 and variation 0
                                      • Custom script: call RemoveLocation ( udg_point_p)
                                      • Destructible - Remove (Picked destructible)
                                    • Else - Actions
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • Or - Any (Conditions) are true
                                            • Conditions
                                              • (Destructible-type of (Picked destructible)) Equal to Border H (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border Orc (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border UD (UR)
                                        • Then - Actions
                                          • Set point_p = (Position of (Picked destructible))
                                          • Destructible - Create a Border NE (UR) at point_p facing 0.00 with scale 1.00 and variation 0
                                          • Custom script: call RemoveLocation ( udg_point_p)
                                          • Destructible - Remove (Picked destructible)
                                        • Else - Actions
  • Interface Undead
    • Events
      • Unit - A unit Sells a unit
    • Conditions
      • (Unit-type of (Sold unit)) Equal to Undead Interface
    • Actions
      • Destructible - Pick every destructible in UGHPS_InterfaceRegion[(Player number of (Owner of (Sold unit)))] and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Destructible-type of (Picked destructible)) Equal to Border H (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border Orc (D)
                  • (Destructible-type of (Picked destructible)) Equal to Border NE (D)
            • Then - Actions
              • Set point_p = (Position of (Picked destructible))
              • Destructible - Create a Border UD (D) at point_p facing 0.00 with scale 1.00 and variation 0
              • Custom script: call RemoveLocation ( udg_point_p)
              • Destructible - Remove (Picked destructible)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Destructible-type of (Picked destructible)) Equal to Border H (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border Orc (DL)
                      • (Destructible-type of (Picked destructible)) Equal to Border NE (DL)
                • Then - Actions
                  • Set point_p = (Position of (Picked destructible))
                  • Destructible - Create a Border UD (DL) at point_p facing 0.00 with scale 1.00 and variation 0
                  • Custom script: call RemoveLocation ( udg_point_p)
                  • Destructible - Remove (Picked destructible)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (Destructible-type of (Picked destructible)) Equal to Border H (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border Orc (DR)
                          • (Destructible-type of (Picked destructible)) Equal to Border NE (DR)
                    • Then - Actions
                      • Set point_p = (Position of (Picked destructible))
                      • Destructible - Create a Border UD (DR) at point_p facing 0.00 with scale 1.00 and variation 0
                      • Custom script: call RemoveLocation ( udg_point_p)
                      • Destructible - Remove (Picked destructible)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (Destructible-type of (Picked destructible)) Equal to Border H (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border Orc (L)
                              • (Destructible-type of (Picked destructible)) Equal to Border NE (L)
                        • Then - Actions
                          • Set point_p = (Position of (Picked destructible))
                          • Destructible - Create a Border UD (L) at point_p facing 0.00 with scale 1.00 and variation 0
                          • Custom script: call RemoveLocation ( udg_point_p)
                          • Destructible - Remove (Picked destructible)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Or - Any (Conditions) are true
                                • Conditions
                                  • (Destructible-type of (Picked destructible)) Equal to Border H (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border Orc (R)
                                  • (Destructible-type of (Picked destructible)) Equal to Border NE (R)
                            • Then - Actions
                              • Set point_p = (Position of (Picked destructible))
                              • Destructible - Create a Border UD (R) at point_p facing 0.00 with scale 1.00 and variation 0
                              • Custom script: call RemoveLocation ( udg_point_p)
                              • Destructible - Remove (Picked destructible)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Or - Any (Conditions) are true
                                    • Conditions
                                      • (Destructible-type of (Picked destructible)) Equal to Border H (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border Orc (U)
                                      • (Destructible-type of (Picked destructible)) Equal to Border NE (U)
                                • Then - Actions
                                  • Set point_p = (Position of (Picked destructible))
                                  • Destructible - Create a Border UD (U) at point_p facing 0.00 with scale 1.00 and variation 0
                                  • Custom script: call RemoveLocation ( udg_point_p)
                                  • Destructible - Remove (Picked destructible)
                                • Else - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • Or - Any (Conditions) are true
                                        • Conditions
                                          • (Destructible-type of (Picked destructible)) Equal to Border H (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border Orc (UL)
                                          • (Destructible-type of (Picked destructible)) Equal to Border NE (UL)
                                    • Then - Actions
                                      • Set point_p = (Position of (Picked destructible))
                                      • Destructible - Create a Border UD (UL) at point_p facing 0.00 with scale 1.00 and variation 0
                                      • Custom script: call RemoveLocation ( udg_point_p)
                                      • Destructible - Remove (Picked destructible)
                                    • Else - Actions
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • Or - Any (Conditions) are true
                                            • Conditions
                                              • (Destructible-type of (Picked destructible)) Equal to Border H (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border Orc (UR)
                                              • (Destructible-type of (Picked destructible)) Equal to Border NE (UR)
                                        • Then - Actions
                                          • Set point_p = (Position of (Picked destructible))
                                          • Destructible - Create a Border UD (UR) at point_p facing 0.00 with scale 1.00 and variation 0
                                          • Custom script: call RemoveLocation ( udg_point_p)
                                          • Destructible - Remove (Picked destructible)
                                        • Else - Actions
  • UGHPS Progress
    • Events
    • Conditions
    • Actions
      • Set UGHPS_CameraCheck[(Player number of (Triggering player))] = True
      • Camera - Apply UGHPS_Camera[(Player number of (Triggering player))] for (Triggering player) over 0.00 seconds
      • Trigger - Turn on UGHPS Camera <gen>
  • UGHPS Buttons
    • Events
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Click
    • Actions
      • -------- Turn off trigger to fix small bug when player click fast on icon and create few heroes at same time. --------
      • Trigger - Turn off (This trigger)
      • -------- Remove selected unit from player selection. --------
      • Selection - Clear selection for (Triggering player)
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Button Selection --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Paladin --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • (Triggering unit) Equal to Click 0001 <gen>
              • (Triggering unit) Equal to Click 0008 <gen>
        • Then - Actions
          • -------- Hero number --------
          • -------- WARRNING: 20 is integer_k value from setup trigger, we used 20 as multiple there (20 for 1st hero, 40 for 2nd 60 for 3rd) --------
          • Set Integer_k = 20
          • -------- integer_h is variable that define hero, unneeded really but it makes trigger action below more eye kindly. --------
          • Set Integer_h = ((Integer_i x (Player number of (Triggering player))) + Integer_k)
          • -------- Location variable that use position of created unit, used for cleaning leaks :) --------
          • Set point_p = (Position of (Triggering unit))
          • -------- We create effect on hero icon (variable point_p) --------
          • Special Effect - Create a special effect at point_p using Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
          • -------- We destroy same effect to clean leak. --------
          • Special Effect - Destroy (Last created special effect)
          • -------- We destroy point_p to clean leaks. --------
          • Custom script: call RemoveLocation ( udg_point_p)
          • For each (Integer A) from 1 to 3, do (Actions)
            • Loop - Actions
              • -------- WARRNING: 20 is integer_k value from setup trigger, we used 20 as multiple there (20 for 1st hero, 40 for 2nd 60 for 3rd) --------
              • -------- We hide all hero destructibles shown to player --------
              • Destructible - Hide UGHPS_HeroModel[(((Player number of (Triggering player)) x Integer_i) + (20 x (Integer A)))]
          • -------- Now only show right one :) --------
          • Destructible - Show UGHPS_HeroModel[(((Player number of (Triggering player)) x Integer_i) + Integer_k)]
          • -------- Play sound when player click on hero icon --------
          • Sound - Play UGHPS_Sound[((Integer_i x (Player number of (Triggering player))) + Integer_k)] at 100.00% volume, attached to (Triggering unit)
          • -------- Let's remove all text, create new one and store it to variables once again. --------
          • For each (Integer A) from 1 to 11, do (Actions)
            • Loop - Actions
              • Floating Text - Destroy UGHPS_FT[(Integer A)]
              • Floating Text - Create floating text that reads UGHPS_StringAttributes[(((Player number of (Triggering player)) x Integer_i) + (Integer_k + (Integer A)))] at UGHPS_HeroStats[(((Player number of (Triggering player)) x Integer_i) + ((Integer A) + 1))] with Z offset 0.00, using font size 8.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
              • Set UGHPS_FT[(Integer A)] = (Last created floating text)
          • Wait 0.00 seconds
          • Trigger - Turn on (This trigger)
          • Skip remaining actions
        • Else - Actions
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Blood Mage --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • (Triggering unit) Equal to Click 0005 <gen>
              • (Triggering unit) Equal to Click 0009 <gen>
        • Then - Actions
          • -------- Hero number --------
          • -------- WARRNING: 40 is integer_k value from setup trigger, we used 20 as multiple there (20 for 1st hero, 40 for 2nd 60 for 3rd) --------
          • Set Integer_k = 40
          • -------- integer_h is variable that define hero, unneeded really but it makes trigger action below more eye kindly. --------
          • Set Integer_h = ((Integer_i x (Player number of (Triggering player))) + Integer_k)
          • -------- Location variable that use position of created unit, used for cleaning leaks :) --------
          • Set point_p = (Position of (Triggering unit))
          • -------- We create effect on hero icon (variable point_p) --------
          • Special Effect - Create a special effect at point_p using Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
          • -------- We destroy same effect to clean leak. --------
          • Special Effect - Destroy (Last created special effect)
          • -------- We destroy point_p to clean leaks. --------
          • Custom script: call RemoveLocation ( udg_point_p)
          • For each (Integer A) from 1 to 3, do (Actions)
            • Loop - Actions
              • -------- WARRNING: 20 is integer_k value from setup trigger, we used 20 as multiple there (20 for 1st hero, 40 for 2nd 60 for 3rd) --------
              • -------- We hide all hero destructibles shown to player --------
              • Destructible - Hide UGHPS_HeroModel[(((Player number of (Triggering player)) x Integer_i) + (20 x (Integer A)))]
          • -------- Now only show right one :) --------
          • Destructible - Show UGHPS_HeroModel[(((Player number of (Triggering player)) x Integer_i) + Integer_k)]
          • -------- Play sound when player click on hero icon --------
          • Sound - Play UGHPS_Sound[((Integer_i x (Player number of (Triggering player))) + Integer_k)] at 100.00% volume, attached to (Triggering unit)
          • -------- Let's remove all text, create new one and store it to variables once again. --------
          • For each (Integer A) from 1 to 11, do (Actions)
            • Loop - Actions
              • Floating Text - Destroy UGHPS_FT[(Integer A)]
              • Floating Text - Create floating text that reads UGHPS_StringAttributes[(((Player number of (Triggering player)) x Integer_i) + (Integer_k + (Integer A)))] at UGHPS_HeroStats[(((Player number of (Triggering player)) x Integer_i) + ((Integer A) + 1))] with Z offset 0.00, using font size 8.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
              • Set UGHPS_FT[(Integer A)] = (Last created floating text)
          • Wait 0.00 seconds
          • Trigger - Turn on (This trigger)
          • Skip remaining actions
        • Else - Actions
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Ranger --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • (Triggering unit) Equal to Click 0003 <gen>
              • (Triggering unit) Equal to Click 0010 <gen>
        • Then - Actions
          • -------- Hero number --------
          • -------- WARRNING: 60 is integer_k value from setup trigger, we used 20 as multiple there (20 for 1st hero, 40 for 2nd 60 for 3rd) --------
          • Set Integer_k = 60
          • -------- integer_h is variable that define hero, unneeded really but it makes trigger action below more eye kindly. --------
          • Set Integer_h = ((Integer_i x (Player number of (Triggering player))) + Integer_k)
          • -------- Location variable that use position of created unit, used for cleaning leaks :) --------
          • Set point_p = (Position of (Triggering unit))
          • -------- We create effect on hero icon (variable point_p) --------
          • Special Effect - Create a special effect at point_p using Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl
          • -------- We destroy same effect to clean leak. --------
          • Special Effect - Destroy (Last created special effect)
          • -------- We destroy point_p to clean leaks. --------
          • Custom script: call RemoveLocation ( udg_point_p)
          • For each (Integer A) from 1 to 3, do (Actions)
            • Loop - Actions
              • -------- WARRNING: 20 is integer_k value from setup trigger, we used 20 as multiple there (20 for 1st hero, 40 for 2nd 60 for 3rd) --------
              • -------- We hide all hero destructibles shown to player --------
              • Destructible - Hide UGHPS_HeroModel[(((Player number of (Triggering player)) x Integer_i) + (20 x (Integer A)))]
          • -------- Now only show right one :) --------
          • Destructible - Show UGHPS_HeroModel[(((Player number of (Triggering player)) x Integer_i) + Integer_k)]
          • -------- Play sound when player click on hero icon --------
          • Sound - Play UGHPS_Sound[((Integer_i x (Player number of (Triggering player))) + Integer_k)] at 100.00% volume, attached to (Triggering unit)
          • -------- Let's remove all text, create new one and store it to variables once again. --------
          • For each (Integer A) from 1 to 11, do (Actions)
            • Loop - Actions
              • Floating Text - Destroy UGHPS_FT[(Integer A)]
              • Floating Text - Create floating text that reads UGHPS_StringAttributes[(((Player number of (Triggering player)) x Integer_i) + (Integer_k + (Integer A)))] at UGHPS_HeroStats[(((Player number of (Triggering player)) x Integer_i) + ((Integer A) + 1))] with Z offset 0.00, using font size 8.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
              • Set UGHPS_FT[(Integer A)] = (Last created floating text)
          • Wait 0.00 seconds
          • Trigger - Turn on (This trigger)
          • Skip remaining actions
        • Else - Actions
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- OK Button --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Triggering unit) Equal to Click 0022 <gen>
                  • (Triggering unit) Equal to Click 0007 <gen>
              • Integer_h Not equal to 0
        • Then - Actions
          • Set UGHPS_CameraCheck[(Player number of (Triggering player))] = False
          • Unit - Create 1 UGHPS_HERO_H[Integer_h] for (Triggering player) at UGHPS_HeroStats[(((Player number of (Triggering player)) x Integer_i) + 12)] facing Default building facing degrees
          • -------- Let's display message to enemy players --------
          • Set UGHPS_TempForce = (All enemies of (Triggering player))
          • Quest - Display to UGHPS_TempForce the Hint message: (TextColor[(Player number of (Triggering player))] + ((Name of (Triggering player)) + (|r has picked + (Name of (Last created unit)))))
          • Custom script: call DestroyForce (udg_UGHPS_TempForce)
          • -------- Play sound when player select hero --------
          • Sound - Play UGHPS_Sound[((Integer_i x (Player number of (Triggering player))) + (Integer_k + 1))] at 100.00% volume, attached to (Last created unit)
          • -------- Location variable that use position of created unit, used for cleaning leaks :) --------
          • Set point_p = (Position of (Last created unit))
          • Camera - Pan camera for (Triggering player) to point_p over 0.00 seconds
          • Wait 0.00 seconds
          • -------- We create effect on hero spawn location (variable point_p) --------
          • Special Effect - Create a special effect at point_p using Abilities\Spells\Human\Resurrect\ResurrectTarget.mdl
          • -------- We destroy same effect to clean leak. --------
          • Special Effect - Destroy (Last created special effect)
          • Camera - Reset camera for (Triggering player) to standard game-view over 0.00 seconds
          • -------- We destroy point_p to clean leaks. --------
          • Custom script: call RemoveLocation ( udg_point_p)
          • Wait 0.00 seconds
          • Trigger - Turn on (This trigger)
          • Skip remaining actions
        • Else - Actions
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • -------- Random Button --------
      • -------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • (Triggering unit) Equal to Click 0002 <gen>
              • (Triggering unit) Equal to Click 0006 <gen>
        • Then - Actions
          • Set UGHPS_CameraCheck[(Player number of (Triggering player))] = False
          • Set Integer_h = ((Integer_i x (Player number of (Triggering player))) + (20 x (Random integer number between 1 and 3)))
          • Unit - Create 1 UGHPS_HERO_H[Integer_h] for (Triggering player) at UGHPS_HeroStats[(((Player number of (Triggering player)) x Integer_i) + 12)] facing Default building facing degrees
          • -------- Let's display message to enemy players --------
          • Set UGHPS_TempForce = (All enemies of (Triggering player))
          • Quest - Display to UGHPS_TempForce the Hint message: (TextColor[(Player number of (Triggering player))] + ((Name of (Triggering player)) + (|r has randomed + (Name of (Last created unit)))))
          • Custom script: call DestroyForce (udg_UGHPS_TempForce)
          • -------- Play sound when player select hero --------
          • Sound - Play UGHPS_Sound[Integer_h] at 100.00% volume, attached to (Last created unit)
          • -------- Location variable that use position of created unit, used for cleaning leaks :) --------
          • Set point_p = (Position of (Last created unit))
          • Camera - Pan camera for (Triggering player) to point_p over 0.00 seconds
          • Wait 0.00 seconds
          • -------- We create effect on hero spawn location (variable point_p) --------
          • Special Effect - Create a special effect at point_p using Abilities\Spells\Human\Resurrect\ResurrectTarget.mdl
          • -------- We destroy same effect to clean leak. --------
          • Special Effect - Destroy (Last created special effect)
          • Camera - Reset camera for (Triggering player) to standard game-view over 0.00 seconds
          • -------- We destroy point_p to clean leaks. --------
          • Custom script: call RemoveLocation ( udg_point_p)
          • Wait 0.00 seconds
          • Trigger - Turn on (This trigger)
          • Skip remaining actions
        • Else - Actions

Please if you find any errors or bugs report them to me so I can fix them
Change Log

Version 1.0
- Uploaded Spell
Version 1.1
- Added blockade to stop players from creating 2 or more heroes with fast clicking (Thanks to Maker)
- Fixed leak trigger action
- Optimized main trigger a little
- Added more documentation and description (Loading Screen as well)
Version 1.2
- Optimized triggers to max
- New interface design
- Easier to understand/edit/import/use
- Smaller size
Version 1.2b
- Optimized camera triggers (Maker)
Version 2.0 Ultimate
- First MPI version
- New hero stats display
- Removed Spells (for now)
Version 2.1 Ultimate
- Fixed/Optimized triggers
- More comments
Version 2.2 Ultimate
- Added colored text and messages displayed to enemy players when you pick or random your hero
- Added sound when you select or pick hero
- Added Settings button where you can pick 1 between 4 different interfaces
- New system look (Resized models, edited text etc etc)
Version 2.3 Ultimate
Fixed/Improved:
- When pressing ESC, the camera pans to the hero selection screen. Make the camera apply instantly. You can also use fade out, apply cam, fade in.
- One can get two heroes if the OK button is clicked rapidly.
- If one clicks OK before a hero is selected, the camera will pan to the center of the map. This situation is not handled with triggers.
- UGHPS camera timers are not initialized automatically for other indexes than 0 and 1. That means it won't work for player 2. You need to create the other timers yourself.
- You should add the events of UGHPS Camera x trigger in the setup trigger.
- UGHPS Buttons does the checks for the rest of the unit types even if it has found a match already. Use skip remaining actions or put the if/then/elses inside each other.
- P2 hero models aren't initially hidden.
- UGHPS Setup has two events, only use Map Initialization.
- Add importing instructions into the map.

Keywords:
Advanced, GUI, Hero, Pick, System, -Kobas-, Interface, Triggers
Contents

Advanced GUI Hero Pick System (Map)

Reviews
Approved. Great system. Improvements: -The units sold triggers should be turned off when there are no players in the screen -Set the number of players into a variable at map initiliazation, use the variable in UGHPS Camera triggers -Perhaps...

Moderator

M

Moderator

Maker, Ultimate GUI Hero Pick System 2.3, 17th Aug 2011

Approved. Great system.

Improvements:
-The units sold triggers should be turned off when there are no players in the screen
-Set the number of players into a variable at map initiliazation, use the variable in UGHPS Camera triggers
-Perhaps prevent users from selecting more than one unit

Maker, Ultimate GUI Hero Pick System 2.2, 29th Aug 2011

This is a very nice system for selecting heroes. It has good execution and pleasing aesthetics. I'd like to see it used for maps.

However there are still a few issues.

In-game

  • When pressing ESC, the camera pans to the hero selection screen. Make the camera apply instantly. You can also use fade out, apply cam, fade in.
  • One can get two heroes if the OK button is clicked rapidly.
  • If one clicks OK before a hero is selected, the camera will pan to the center of the map. This situation is not handled with triggers.

Triggers

  • UGHPS camera trigger shouldn't be on all the time. Turn it off initially. Only have it on when some player is in the screen.
  • UGHPS camera timers are not initialized automatically for other indexes than 0 and 1. That means it won't work for player 2. You need to create the other timers yourself.
  • You should add the events of UGHPS Camera x trigger in the setup trigger.
  • The interface change triggers should be turned off when no player is in the screen.
  • UGHPS Buttons does the checks for the rest of the unit types even if it has found a match already. Use skip remaining actions or put the if/then/elses inside each other.
  • P2 hero models aren't initially hidden.
  • UGHPS Setup has two events, only use Map Initialization.

General notes

  • Add importing instructions into the map.

Suggestions

  • Using trackables would be even smoother, though you would need to use custom scripts.
  • The screen is visible through black mask and fog of war. Hide all destructibles initially, only show them when a player is in screen, and only for that player. Use GetLocalPlayer().

Status: Needs Fix
 
Level 31
Joined
Feb 5, 2009
Messages
4,359
Wow, this looks really useful, especially for one of my prospective projects O:
Aside from how much I can use it, I just want to say great job, looks fantastic and keep up the good work ^^

EDIT: Woah, that was purely based on the screeny. Tried it ingame, but it didn't even go to the hero select thing or anything. I don't know why, I have the latest version of Frozen Throne, but work for me it did not :(
 
Level 37
Joined
Mar 6, 2006
Messages
9,242
Nice system, good job.

I found one leak, in AGHPS Setup trigger. The wantDestroyGroup should be inside the loop, not before it.

The unit type names don't always show up, I tested with human units. If I keep clicking "next" button, then Mountain King and Paladin texts won't show up anymore.

If I press "select hero" button very quickly, I get two heroes.

I'd prefer trackables over units. No selection circle or having a quick flash in the UI before the unit is deselected.
 
Level 12
Joined
Jun 9, 2009
Messages
1,131
Should be way, way better... currently, it should be done with trackables. http://www.hiveworkshop.com/forums/trigger-gui-editor-tutorials-279/trackables-176983/
Link for trackables in gui.
Should be better if you center it to camera, so it can be FS. :)
Would need more information of buttons. Cause i don't know what button can do, it's not writed. You can't show description in multiboard cause you don't use trackables.
It is useful for beginners who can't handle trackables. i'll give 4/5 to this because of it's usefulness and because it's easly changeable and configurable.
 
Level 11
Joined
Sep 30, 2009
Messages
697
Well this system looks nice and useful for all the GUI user out there. Of course this could be done better with jass and trackables but you don't want to hear that so I never said that ;) For a GUI system it is just great. The only thing I kinda dislike is the fact that you have to create the cameras yourself and its not created by the System.
Also did you create the models yourself? (If not you need to give credits so people using your system can give proper credits themself, too)

Maybe I will create a vJass version if I am finished with my Skilltree System and I find the time for it.

Anyway voted for approval and gave 5/5

EDIT: The minimap is flashing whenever the system isnt selected o_O
 
Wazz said:
EDIT: Woah, that was purely based on the screeny. Tried it ingame, but it didn't even go to the hero select thing or anything. I don't know why, I have the latest version of Frozen Throne, but work for me it did not :(
You need to press "ESC" key, I made it that way so you can run it countless times without restarting map :)

Maker said:
Nice system, good job.
Thanks
Maker said:
I found one leak, in AGHPS Setup trigger. The wantDestroyGroup should be inside the loop, not before it.
Yes you are right, firstly unit group was used without for function so I missed it after edit. Thanks

Maker said:
The unit type names don't always show up, I tested with human units. If I keep clicking "next" button, then Mountain King and Paladin texts won't show up anymore.
This is strange, I tested it few times and it worked perfectly... Will see...

Maker said:
If I press "select hero" button very quickly, I get two heroes.
Will try add turn trigger OFF/ON actions to fix this...

Maker said:
I'd prefer trackables over units. No selection circle or having a quick flash in the UI before the unit is deselected
Yeah but I wanted to make it as much simple as it can be, I even split variables so guys can easily pick what they need... Maybe will I try to optimize it a little, dunno will I replace units :)
defskul said:
I think you should credit for the idea ?
lol what idea, I created system like this 2 months ago, check my Shadow of the Past project :)
I needed 7 hours to edit already created system to show you this :)
88WaRCraFT3 said:
Should be way, way better... currently, it should be done with trackables. Trackables
Link for trackables in gui.
Should be better if you center it to camera, so it can be FS. :)
Would need more information of buttons. Cause i don't know what button can do, it's not writed. You can't show description in multiboard cause you don't use trackables.
It is useful for beginners who can't handle trackables. i'll give 4/5 to this because of it's usefulness and because it's easly changeable and configurable.
You should read description :p
Same answer like that one above, this should be as much simple as it can be so large number of people can learn how to use it or edit it and make even better things.
Axarion said:
EDIT: The minimap is flashing whenever the system isnt selected o_O
Because it set camera bounds to that hero spawn region... It's only effect my test map, should not bother you :)

Thanks to all others who commented and downloaded resource :)

EDIT:

Version 1.1 Uploaded
I fixed some things...

Btw guys you are free to split up Buttons trigger, it will be easier to turn them on or off that way and control whole system...
I keep them all in 1 because I don't really need them, it's test map after all :D
 
Last edited:
Level 1
Joined
Jun 21, 2010
Messages
2
Im newbie dont rage at meXD

As you might notecd i used the same topic on an other reply but this is trueXD how does this work?? i gotten al of the triggers and buttons from the map to my map an i am edditing the button verible things and i get nothing in my head i have never heard of this and im newXD plz send my a fast guide or something(= youtube tutorial isent a bad idea
 
Last edited:
Hey Kobas can you fix the bugs with the 2nd and 4th hero you cant see the names nd also the flashing and also it lags bad when you pick a hero/s. If you don't mind i may use this in my map, the second one in my signature because it seems this system is the only one that suits it :p(unless if I make my own epic one :D). Thx Kobas :D. If you dont fix all the bugs by the time I want it I shall atempt to fix them myself :D.
 
I really like this setup, a work of art! I might use this in the next full-scale map I'm making. 5/5, will review it for memory leaks/etc. soon.
And I would gladly help :D
Hey Kobas can you fix the bugs with the 2nd and 4th hero you cant see the names nd also the flashing and also it lags bad when you pick a hero/s. If you don't mind i may use this in my map, the second one in my signature because it seems this system is the only one that suits it :p(unless if I make my own epic one :D). Thx Kobas :D. If you dont fix all the bugs by the time I want it I shall atempt to fix them myself :D.
I don't have time to work on it right now, sorry, try to do it yourself :)

But I have nice ideas for future, for example destructible can be replaced with unit (this will offer you many more cool things), abyss terrain with alpha tile, hero variable name with just hero name taken from unit and so on...
Also I plan to add hero attributes and description into system as well.
Oh instead of arrows I will use hero icons.

I already created something like this for my project and my minigame (contest entry) so I just need time >.>
 
Level 12
Joined
Jun 10, 2008
Messages
1,043
I know its a noob quesiton, but I've never done this before. Hw do you C&P the triggers? It fucks up all the variables for me, even though in preferences I told it to make unknown variables. Also, for custom heroes, would you just change the hero-type in the first trigger?
 
Level 12
Joined
Jun 10, 2008
Messages
1,043
It makes some of the variables but the triggers are labeled broken, and almost everything is like that. I'll post screenshots tomorrow if nobody can explain why
 
Level 5
Joined
Aug 8, 2008
Messages
113
So can you put in a more indepth way how to add buttons and how to transport this to your own map etc. Can someone download fraps and make a video tutorial
 
Last edited:
Level 16
Joined
Aug 20, 2009
Messages
1,542
sometimes it does that, especially integer type, it happens more frequently. (the variable type becomes blank, and it becomes un-edit able.)

its blizzard's WE afterall :D

if that happens, you need to create the variable which will be missing, before copying it into your map.

nice system kobas, i suggest you add a background for it. to make it looks not so all - black.

anyways, i guess i will use this in my map to make a demonology, and document reading :p. (its like a collection museum, of the monsters you see, and the documents you acquired), seems easy to edit :D
 
Guys just to show you what imagination can do:
00screeny02.jpg
00screeny00.jpg


Wrooks works on it for some time already, will see what will icefrog say about it :)

Actually when I think about it I will recreate this system a little, will add mine arrows and new text textures :)
Expect something a little like this above coded it GUI (tomorrow, week, 2, month >.>).
Also I will probably use trackables this time.
 
Top