• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Selection Hero System (v1.3)

Hello Guys
I came today to present you guys my new system, it is a simple selection heroes system done in GUI, very easy to copy and use, and is also very practical. so without further ado, lets start.

As I already said, this is a system made ​​entirely in GUI, it is very easy to import, and can be configured and used by anyone, even users with little or even no experience with triggers.


map contains a folder called "How To Install" it is all you need to know to configure the system.


  • Setup
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Base Configurations --------
      • Set SHS_Conf_Region_Start = Inicio <gen>
      • Set SHS_Sys_Point_Interface = ((Center of Showcase <gen>) offset by 90.00 towards 180.00 degrees)
      • Set SHS_Conf_Total_Heroes = 3
      • Set SHS_Conf_Angle_Init = 270.00
      • Set SHS_Conf_SpecialEffect = Abilities\Spells\Human\ReviveHuman\ReviveHuman.mdl
      • -------- Color Configurations --------
      • Set SHS_Sys_IndexValue = 1
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cffff0000
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff0000ff
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff01c59d
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff370037
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cffffff00
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cffff8000
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff00ff00
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cffff80ff
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff808080
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff66a3d5
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff004020
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_PlayerColor[SHS_Sys_IndexValue] = |cff492121
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • Set SHS_Sys_IndexValue = 1
      • -------- Hero Configurations --------
      • -------- Paladin --------
      • Set SHS_Hero[SHS_Sys_IndexValue] = Paladin
      • Set SHS_Description_Name[SHS_Sys_IndexValue] = Paladin
      • Set SHS_Description_Type[SHS_Sys_IndexValue] = Tank,Support
      • Set SHS_Description_STR[SHS_Sys_IndexValue] = 22 + 2.7 Per Level.
      • Set SHS_Description_AGI[SHS_Sys_IndexValue] = 13 + 1.5 Per Level.
      • Set SHS_Description_INT[SHS_Sys_IndexValue] = 17 + 1.8 Per Level.
      • Set SHS_Description_AttributePrima[SHS_Sys_IndexValue] = Strength.
      • Set SHS_Description_Abilities[SHS_Sys_IndexValue] = Holy Light, Divine Shield, Devotion Aura.
      • Set SHS_Description_Ultimate[SHS_Sys_IndexValue] = Ressurection.
      • Set SHS_Description_Damage[SHS_Sys_IndexValue] = 24 - 34
      • Set SHS_Description_Defense[SHS_Sys_IndexValue] = 2
      • Set SHS_Description_AttackRange[SHS_Sys_IndexValue] = 100
      • Set SHS_Description_AttackType[SHS_Sys_IndexValue] = Melee
      • Set SHS_Description_MovementSpeed[SHS_Sys_IndexValue] = 270
      • Set SHS_Description_Description[SHS_Sys_IndexValue] = A powerful warrior with powers based on light element.
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • -------- Warden --------
      • Set SHS_Hero[SHS_Sys_IndexValue] = Warden
      • Set SHS_Description_Name[SHS_Sys_IndexValue] = Warden
      • Set SHS_Description_Type[SHS_Sys_IndexValue] = DPS
      • Set SHS_Description_STR[SHS_Sys_IndexValue] = 18 + 2.4 Per Level.
      • Set SHS_Description_AGI[SHS_Sys_IndexValue] = 20 + 1.6 Per Level.
      • Set SHS_Description_INT[SHS_Sys_IndexValue] = 15 + 2 Per Level.
      • Set SHS_Description_AttributePrima[SHS_Sys_IndexValue] = Agility.
      • Set SHS_Description_Abilities[SHS_Sys_IndexValue] = Blink, Fan of Knives, Shadow Strike.
      • Set SHS_Description_Ultimate[SHS_Sys_IndexValue] = Vegeance.
      • Set SHS_Description_Damage[SHS_Sys_IndexValue] = 22 - 42
      • Set SHS_Description_Defense[SHS_Sys_IndexValue] = 0
      • Set SHS_Description_AttackRange[SHS_Sys_IndexValue] = 100
      • Set SHS_Description_AttackType[SHS_Sys_IndexValue] = Melee
      • Set SHS_Description_MovementSpeed[SHS_Sys_IndexValue] = 320
      • Set SHS_Description_Description[SHS_Sys_IndexValue] = An elven assassin, high dexterity and agility.
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
      • -------- Blood Mage --------
      • Set SHS_Hero[SHS_Sys_IndexValue] = Blood Mage
      • Set SHS_Description_Name[SHS_Sys_IndexValue] = Blood Mage
      • Set SHS_Description_Type[SHS_Sys_IndexValue] = DPS,Support
      • Set SHS_Description_STR[SHS_Sys_IndexValue] = 18 + 2 Per Level.
      • Set SHS_Description_AGI[SHS_Sys_IndexValue] = 14 + 1 Per Level.
      • Set SHS_Description_INT[SHS_Sys_IndexValue] = 19 + 3 Per Level.
      • Set SHS_Description_AttributePrima[SHS_Sys_IndexValue] = Intelligence.
      • Set SHS_Description_Abilities[SHS_Sys_IndexValue] = Flame Strike, Banish, Siphon Mana.
      • Set SHS_Description_Ultimate[SHS_Sys_IndexValue] = Phoenix.
      • Set SHS_Description_Damage[SHS_Sys_IndexValue] = 21 - 27
      • Set SHS_Description_Defense[SHS_Sys_IndexValue] = 0
      • Set SHS_Description_AttackRange[SHS_Sys_IndexValue] = 600
      • Set SHS_Description_AttackType[SHS_Sys_IndexValue] = Distance
      • Set SHS_Description_MovementSpeed[SHS_Sys_IndexValue] = 300
      • Set SHS_Description_Description[SHS_Sys_IndexValue] = a mage elf with incredible powers of destruction.
      • Set SHS_Sys_IndexValue = (SHS_Sys_IndexValue + 1)
  • Startup
    • Events
      • Time - Elapsed game time is 0.10 seconds
    • Conditions
    • Actions
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) slot status) Equal to Is playing
              • ((Player((Integer A))) controller) Equal to User
            • Then - Actions
              • Set SHS_Sys_PlayerIntegerA = (Player((Integer A)))
              • Set SHS_Sys_NumberPlayerIntegerA = (Player number of SHS_Sys_PlayerIntegerA)
              • Set SHS_Sys_Angle_Rotate[SHS_Sys_NumberPlayerIntegerA] = SHS_Conf_Angle_Init
              • Set SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA] = 1
              • Unit - Create 1 |cff000000.|r [Dummy] for SHS_Sys_PlayerIntegerA at SHS_Sys_Point_Interface facing Default building facing degrees
              • Set SHS_Sys_SelectDummy[SHS_Sys_NumberPlayerIntegerA] = (Last created unit)
              • Unit - Create 1 SHS_Hero[1] for Neutral Passive at SHS_Sys_Point_Interface facing SHS_Sys_Angle_Rotate[SHS_Sys_NumberPlayerIntegerA] degrees
              • Set SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA] = (Last created unit)
              • Custom script: call UnitAddAbility(udg_SHS_HeroActualGraphics[udg_SHS_Sys_NumberPlayerIntegerA], 'Aloc')
              • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 100.00% transparency
              • Custom script: if GetLocalPlayer() == udg_SHS_Sys_PlayerIntegerA then
              • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
              • Custom script: endif
              • Multiboard - Create a multiboard with 2 columns and 22 rows, titled Informations
              • Set SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] = (Last created multiboard)
              • For each (Integer B) from 1 to 22, do (Actions)
                • Loop - Actions
                  • Multiboard - Set the display style for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row (Integer B) to Show text and Hide icons
                  • Multiboard - Set the display style for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 2, row (Integer B) to Show text and Hide icons
                  • Multiboard - Set the width for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row (Integer B) to 30.00% of the total screen width
                  • Multiboard - Set the width for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 2, row (Integer B) to 0.00% of the total screen width
              • Multiboard - Set the display style for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 5 to Show text and Show icons
              • Multiboard - Set the display style for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 6 to Show text and Show icons
              • Multiboard - Set the display style for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 7 to Show text and Show icons
              • Multiboard - Set the icon for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 5 to UI\Widgets\Console\Human\infocard-heroattributes-str.blp
              • Multiboard - Set the icon for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 6 to UI\Widgets\Console\Human\infocard-heroattributes-agi.blp
              • Multiboard - Set the icon for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 7 to UI\Widgets\Console\Human\infocard-heroattributes-int.blp
              • Set SHS_Sys_SelectTime[SHS_Sys_NumberPlayerIntegerA] = True
              • Set SHS_Sys_TotalPlayerUse = (SHS_Sys_TotalPlayerUse + 1)
              • Trigger - Run Multiboard Update <gen> (checking conditions)
            • Else - Actions
      • Trigger - Turn on Camera Fix <gen>
  • Camera Fix
    • Events
      • Time - Every 0.01 seconds of game time
    • Conditions
    • Actions
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SHS_Sys_SelectTime[(Integer A)] Equal to True
            • Then - Actions
              • Set SHS_Sys_PlayerIntegerA = (Player((Integer A)))
              • Set SHS_Sys_NumberPlayerIntegerA = (Player number of SHS_Sys_PlayerIntegerA)
              • Camera - Apply Selection Hero Cam <gen> for SHS_Sys_PlayerIntegerA over 0.00 seconds
              • Camera - Lock camera target for SHS_Sys_PlayerIntegerA to SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA], offset by (0.00, 0.00) using Default rotation
              • Selection - Select SHS_Sys_SelectDummy[SHS_Sys_NumberPlayerIntegerA] for SHS_Sys_PlayerIntegerA
            • Else - Actions
  • Multiboard Update
    • Events
    • Conditions
    • Actions
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SHS_Sys_SelectTime[(Integer A)] Equal to True
            • Then - Actions
              • Set SHS_Sys_PlayerIntegerA = (Player((Integer A)))
              • Set SHS_Sys_NumberPlayerIntegerA = (Player number of SHS_Sys_PlayerIntegerA)
              • Multiboard - Show SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA]
              • Multiboard - Maximize SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA]
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 1 to (|cff80ff00Name:|r + SHS_Description_Name[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 3 to (|cff80ff00Type:|r + SHS_Description_Type[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 5 to (|cffff2f2fStrengtht:|r + SHS_Description_STR[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 6 to (|cff00ff00Agility:|r + SHS_Description_AGI[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 7 to (|cff1a1affIntelligence:|r + SHS_Description_INT[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 8 to (|cffffff04Primary Attribute:|r + SHS_Description_AttributePrima[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 10 to (|cff80ff00Abilities:|r + SHS_Description_Abilities[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 11 to (|cff80ff00Ultimate:|r + SHS_Description_Ultimate[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 13 to (|cff80ff00Attack Damage:|r + SHS_Description_Damage[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 14 to (|cff80ff00Defense:|r + SHS_Description_Defense[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 16 to (|cff80ff00Attack Range:|r + SHS_Description_AttackRange[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 17 to (|cff80ff00Attack Type:|r + SHS_Description_AttackType[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 19 to (|cff80ff00Movement Speed:|r + SHS_Description_MovementSpeed[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]])
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 21 to |cffff0000 ...
              • Multiboard - Set the text for SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA] item in column 1, row 22 to SHS_Description_Description[SHS_HeroActualValue[SHS_Sys_NumberPlayerIntegerA]]
            • Else - Actions
  • Next Button
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to Next
    • Actions
      • Set SHS_Sys_PlayerOwnerUnit = (Owner of (Triggering unit))
      • Set SHS_Sys_NumberTriggeringUnit = (Player number of SHS_Sys_PlayerOwnerUnit)
      • Set SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] = (SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] Greater than SHS_Conf_Total_Heroes
        • Then - Actions
          • Set SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] = 1
          • Unit - Remove SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] from the game
          • Unit - Create 1 SHS_Hero[SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit]] for Neutral Passive at SHS_Sys_Point_Interface facing SHS_Conf_Angle_Init degrees
          • Set SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] = (Last created unit)
          • Custom script: call UnitAddAbility(udg_SHS_HeroActualGraphics[udg_SHS_Sys_NumberTriggeringUnit], 'Aloc')
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 100.00% transparency
          • Custom script: if GetLocalPlayer() == udg_SHS_Sys_PlayerOwnerUnit then
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
          • Custom script: endif
          • Trigger - Run Multiboard Update <gen> (checking conditions)
          • Set SHS_Sys_Angle_Rotate[SHS_Sys_NumberTriggeringUnit] = SHS_Conf_Angle_Init
        • Else - Actions
          • Unit - Remove SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] from the game
          • Unit - Create 1 SHS_Hero[SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit]] for Neutral Passive at SHS_Sys_Point_Interface facing SHS_Conf_Angle_Init degrees
          • Set SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] = (Last created unit)
          • Custom script: call UnitAddAbility(udg_SHS_HeroActualGraphics[udg_SHS_Sys_NumberTriggeringUnit], 'Aloc')
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 100.00% transparency
          • Custom script: if GetLocalPlayer() == udg_SHS_Sys_PlayerOwnerUnit then
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
          • Custom script: endif
          • Trigger - Run Multiboard Update <gen> (checking conditions)
          • Set SHS_Sys_Angle_Rotate[SHS_Sys_NumberTriggeringUnit] = SHS_Conf_Angle_Init
  • Previous Button
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to Previous
    • Actions
      • Set SHS_Sys_PlayerOwnerUnit = (Owner of (Triggering unit))
      • Set SHS_Sys_NumberTriggeringUnit = (Player number of SHS_Sys_PlayerOwnerUnit)
      • Set SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] = (SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] Less than 1
        • Then - Actions
          • Set SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit] = SHS_Conf_Total_Heroes
          • Unit - Remove SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] from the game
          • Unit - Create 1 SHS_Hero[SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit]] for Neutral Passive at SHS_Sys_Point_Interface facing SHS_Conf_Angle_Init degrees
          • Set SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] = (Last created unit)
          • Custom script: call UnitAddAbility(udg_SHS_HeroActualGraphics[udg_SHS_Sys_NumberTriggeringUnit], 'Aloc')
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 100.00% transparency
          • Custom script: if GetLocalPlayer() == udg_SHS_Sys_PlayerOwnerUnit then
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
          • Custom script: endif
          • Trigger - Run Multiboard Update <gen> (checking conditions)
          • Set SHS_Sys_Angle_Rotate[SHS_Sys_NumberTriggeringUnit] = SHS_Conf_Angle_Init
        • Else - Actions
          • Unit - Remove SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] from the game
          • Unit - Create 1 SHS_Hero[SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit]] for Neutral Passive at SHS_Sys_Point_Interface facing SHS_Conf_Angle_Init degrees
          • Set SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] = (Last created unit)
          • Custom script: call UnitAddAbility(udg_SHS_HeroActualGraphics[udg_SHS_Sys_NumberTriggeringUnit], 'Aloc')
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 100.00% transparency
          • Custom script: if GetLocalPlayer() == udg_SHS_Sys_PlayerOwnerUnit then
          • Animation - Change SHS_HeroActualGraphics[SHS_Sys_NumberPlayerIntegerA]'s vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
          • Custom script: endif
          • Trigger - Run Multiboard Update <gen> (checking conditions)
          • Set SHS_Sys_Angle_Rotate[SHS_Sys_NumberTriggeringUnit] = SHS_Conf_Angle_Init
  • Rotate Button
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to Rotate
    • Actions
      • Set SHS_Sys_PlayerOwnerUnit = (Owner of (Triggering unit))
      • Set SHS_Sys_NumberTriggeringUnit = (Player number of SHS_Sys_PlayerOwnerUnit)
      • Set SHS_Sys_Angle_Rotate[SHS_Sys_NumberTriggeringUnit] = (SHS_Sys_Angle_Rotate[SHS_Sys_NumberTriggeringUnit] + 20.00)
      • Unit - Move SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] instantly to SHS_Sys_Point_Interface, facing SHS_Sys_Angle_Rotate[SHS_Sys_NumberTriggeringUnit] degrees
  • Select Button
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to Select
    • Actions
      • Set SHS_Sys_PlayerOwnerUnit = (Owner of (Triggering unit))
      • Set SHS_Sys_NumberTriggeringUnit = (Player number of SHS_Sys_PlayerOwnerUnit)
      • Set SHS_Sys_SelectTime[SHS_Sys_NumberTriggeringUnit] = False
      • Set SHS_Sys_TotalPlayerUse = (SHS_Sys_TotalPlayerUse - 1)
      • Multiboard - Destroy SHS_Sys_Multiboard[SHS_Sys_NumberTriggeringUnit]
      • Camera - Reset camera for SHS_Sys_PlayerOwnerUnit to standard game-view over 0.00 seconds
      • Unit - Remove SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] from the game
      • Unit - Remove SHS_Sys_SelectDummy[SHS_Sys_NumberTriggeringUnit] from the game
      • Unit - Create 1 SHS_Hero[SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit]] for SHS_Sys_PlayerOwnerUnit at (Center of SHS_Conf_Region_Start) facing Default building facing degrees
      • Selection - Select (Last created unit) for SHS_Sys_PlayerOwnerUnit
      • Camera - Pan camera for SHS_Sys_PlayerOwnerUnit to (Center of SHS_Conf_Region_Start) over 0.00 seconds
      • Special Effect - Create a special effect attached to the origin of (Last created unit) using SHS_Conf_SpecialEffect
      • Special Effect - Destroy (Last created special effect)
      • Game - Display to (All players) the text: (SHS_Sys_PlayerColor[SHS_Sys_NumberTriggeringUnit] + ((Name of SHS_Sys_PlayerOwnerUnit) + (|r + (Chose + (|cff80ffff + (SHS_Description_Name[SHS_HeroActualValue[SHS_Sys_NumberTriggeringUnit]] + .|r))))))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SHS_Sys_TotalPlayerUse Less than or equal to 0
        • Then - Actions
          • Trigger - Turn off Camera Fix <gen>
          • Custom script: call RemoveLocation(udg_SHS_Sys_Point_Interface)
        • Else - Actions
  • Random Button
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to Random
    • Actions
      • Set SHS_Sys_PlayerOwnerUnit = (Owner of (Triggering unit))
      • Set SHS_Sys_NumberTriggeringUnit = (Player number of SHS_Sys_PlayerOwnerUnit)
      • Set SHS_Sys_SelectTime[SHS_Sys_NumberTriggeringUnit] = False
      • Set SHS_Sys_TotalPlayerUse = (SHS_Sys_TotalPlayerUse - 1)
      • Set SHS_Sys_RandomNumber = (Random integer number between 1 and SHS_Conf_Total_Heroes)
      • Multiboard - Destroy SHS_Sys_Multiboard[SHS_Sys_NumberTriggeringUnit]
      • Camera - Reset camera for SHS_Sys_PlayerOwnerUnit to standard game-view over 0.00 seconds
      • Unit - Remove SHS_HeroActualGraphics[SHS_Sys_NumberTriggeringUnit] from the game
      • Unit - Remove SHS_Sys_SelectDummy[SHS_Sys_NumberTriggeringUnit] from the game
      • Unit - Create 1 SHS_Hero[SHS_Sys_RandomNumber] for SHS_Sys_PlayerOwnerUnit at (Center of SHS_Conf_Region_Start) facing Default building facing degrees
      • Selection - Select (Last created unit) for SHS_Sys_PlayerOwnerUnit
      • Camera - Pan camera for SHS_Sys_PlayerOwnerUnit to (Center of SHS_Conf_Region_Start) over 0.00 seconds
      • Special Effect - Create a special effect attached to the origin of (Last created unit) using SHS_Conf_SpecialEffect
      • Special Effect - Destroy (Last created special effect)
      • Game - Display to (All players) the text: (SHS_Sys_PlayerColor[SHS_Sys_NumberTriggeringUnit] + ((Name of SHS_Sys_PlayerOwnerUnit) + (|r + (Randomed + (|cff80ffff + (SHS_Description_Name[SHS_Sys_RandomNumber] + .|r))))))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SHS_Sys_TotalPlayerUse Less than or equal to 0
        • Then - Actions
          • Trigger - Turn off Camera Fix <gen>
          • Custom script: call RemoveLocation(udg_SHS_Sys_Point_Interface)
        • Else - Actions



Version 1.1
-Camera, I traded pan cam by lock cam
-fix the events of "Buttons Triggers"
-fixed the file map
-add little cooldown for "next" and "previous" buttons
-fixed the function of "Rotate" button

Version 1.2
-Fixed Previous button
-added the option of set initial angle
-added the option of set Special Effect used when choose the hero
-added one variable for arrays of Setup
-removed some unnecessary actions
-added variables for (Player(Integer A)), (Player Number of (Player (Integer A))), (Player Number of (Owner of Trigerring unit)), (Owner of triggering unit)
-added the function to stop the "Cam fixed and Mult Update" trigger when unnecessary
-update the intalations info
-removed the "Heroes Dummies" units and variable.
-The system now, create real heroes adding locust ability.
-replaced the spells base of Next and Previous Button

Version 1.3
-Multiboard updates only when necessary
-only one variable to point
-all players can share the same region
-removes the interface point when it becomes unnecessary
-repaired the icons of buttons "Select", "Random"
-updated information about installation and configuration


Felipe Gormadoc (Creation and Development)
Maker (For some suggestions and help)
ap0calypse and shadowvzs ( By help with GetLocalPlayer function)


Please give me credits for use this system.

Keywords:
Select,Selection,Hero,System,RPG,ORPG,Choose,Pick,Random,Felipe,Gormadoc,GUI,Simple,practice,easy
Contents

Selection Hero System (Map)

Reviews
Selection Hero System (v1.3) | Reviewed by Maker | 15th Mar 2013 APPROVED There are no bugs (that I could find) LeakSet SHS_Sys_Point_Interface = ((Center of Showcase <gen>) offset by 90.00 towards 180.00 degrees)...

Moderator

M

Moderator


Selection Hero System (v1.3) | Reviewed by Maker | 15th Mar 2013
APPROVED


126248-albums6177-picture66521.png


  • There are no bugs (that I could find)
126248-albums6177-picture66523.png


  • Leak
    • Set SHS_Sys_Point_Interface = ((Center of Showcase <gen>) offset by 90.00 towards 180.00 degrees)
  • The camera is not completely locked,
    it moves if I scroll with mouse wheel
  • You could turn off the button triggers when everyone has
    picked a hero
[tr]




Selection Hero System (v1.2) | Reviewed by Maker | 4th Mar 2013
NEEDS FIX


126248-albums6177-picture66522.png

  • Leak
    • Set SHS_Sys_Point_Interface[SHS_Sys_NumberPlayerIntegerA] = ((Center of...offset by...)
  • You have location leak when you create the selected real hero
  • Cam Fixed and Mult Update trigger should not set the multiboard texts
    every 0.01 seconds, neither should it min/max the board that often
  • The multiborad displaying method is not MUI, it will display all multiborads to every player
126248-albums6177-picture66523.png


  • It would be nice if all players could share the same location.
    If one uses the same for eveyone now, the units are overlapped.
  • You have missing passive icons.
126248-albums6177-picture66524.png

[tr]


Selection Hero System (v1.1) | Reviewed by Maker | 3rd Mar 2013
NEEDS FIX


126248-albums6177-picture66522.png

  • Leaks
    • Set Point_Interface[(Integer A)] = ((Center of Regions_Interface[(Integer A)]) offset by...)
    • Unit - Create 1 |cff000000.|r [Dummy] for (Player((Integer A))) at (Center of...
  • You have location leaks when you create the selected real hero
  • Cam Fixed and Mult Update trigger should not set the multiboard texts
    every 0.01 seconds, neither should it min/max the board that often
126248-albums6177-picture66523.png


  • A useful trick when setting up the heroes is to use a variable for the index.
    Set integer = 0
    Set HeroDummy[variable] = x, set Hero[variable] = y and so on.
  • Use a variable for Player number of (Player(Integer A))) in Startup trigger
  • You don't need the dummy unit types, create units based on the hero types
    with triggers. Give the units Locust ability to make them unselectable
  • Abilities with no cooldown would be better for Next and Previous buttons
126248-albums6177-picture66524.png

[tr]
 
Level 37
Joined
Mar 6, 2006
Messages
9,240
  • Leaks
    • Set Point_Interface[(Integer A)] = ((Center of Regions_Interface[(Integer A)]) offset by...
    • Unit - Create 1 |cff000000.|r [Dummy] for (Player((Integer A))) at (Center of Regions_Interface[(Player number of (Player((Integer A))))]) ...
    • Camera - Pan camera for (Player((Integer A))) to (Center of Regions_Interface[(Player number of (Player((Integer A))))]) over 0.00 seconds
  • You could use a variable for player number and use the variable when referencing multiboard index
  • The camera can be locked in a better way. Try panning over 0.1 seconds
  • Fix the file type of the map
  • Use Begins casting an ability event
  • Use an ability that can be casted faster, now there is a short cooldow
  • You don't need dummy units in object editor, add Locust to the created units
 
- Maker
Hey man, thanks for tips.

- Chaosy
if you discover a leak or bug let me know please.

i updated the system, i fix:
-Camera, I traded pan cam by lock cam
-fix the events of "Buttons Triggers"
-fixed the file map
-add little cooldown for "next" and "previous" buttons
-fixed the function of "Rotate" button
 
Last edited:
Level 33
Joined
Apr 24, 2012
Messages
5,113
@Maker

This are my additional reviews.

-For the configurables,you dont need arrays.All you need is a hashtable and a trigger which registers values.
Here is an example:

set Hero = Palladin
set Level = 5
Trigger - Run Register<gen>

That will the configuration looks as an example.

For registration:

Hashtable - Save Hero as Key of Key in MyHash
Hashtable - Save Level as Key of Key in MyHash

this registers the values inside the hashtable.You can use it via loading it.
Here are some examples the uses this kind of method:
http://www.hiveworkshop.com/forums/...n-window-v1-0-a-226393/?prev=status=a&u=Almia
http://www.hiveworkshop.com/forums/spells-569/compressed-tavern-v1-4-a-223378/?prev=status=a&u=Almia
http://www.hiveworkshop.com/forums/...rce-cost-v1-1-a-223384/?prev=status=a&u=Almia
http://www.hiveworkshop.com/forums/...-218548/?prev=status=a&d=list&r=20&u=defskull
http://www.hiveworkshop.com/forums/...-228697/?prev=status=a&d=list&r=20&u=defskull
http://www.hiveworkshop.com/forums/...-218904/?prev=status=a&d=list&r=20&u=defskull

- Cache the following values to increase speed:
(Player number of (Owner of (Triggering unit)))
(Owner of (Triggering unit))
(Player(Integer A))
[(Player number of (Player((Integer A))))

-Your system uses Integer A. We in this site guarantee to not support this because there is a possibility that using this for every trigger can crash the map(based on my experience). Just create a new integer variable to replace integer A. Also,Integer A is slow

-There are so many constant values inside the system.Please create a new trigger to have the main system configurable,like these values:
Abilities\Spells\Human\ReviveHuman\ReviveHuman.mdl
Set Angle_Rotate[(Integer A)] = 270.00
Etc.

-Your system lacks in prefixes.You should add it so that it wont collide in the maps of the users if they accidentally have the same name of variables.

- Colors inside the description of multiboard(|cff80ff00Name,(|cff80ff00Type:|r ,etc) should be configurable

There you have my extra reviews.
 
Level 9
Joined
Jun 4, 2007
Messages
205
After spending about an hour looking for a hero selection system for my map, I chose yours, here is why:
-Easy to configure, only edit the hero types and texts
-Absolute no need to know JASS or advanced triggering to implement
-Can be used by multiple people
-Doesnt use large ingame images(will not need a large portion of the map to place)
-Simple and describes hero well

Suggestion: add a -repick command to take the player back to the multiboard and allow to chance the hero.

+rep
 
Cause it has some flaws in its code. i used it in one of my, not on hive uploaded, projects and had to overwork it first :|.

How to fix:
  1. A Easy fix would be to lower frequenzy in the Trigger Camera Fix from 0.01 -> 0.03, this saves alot of performance.
  2. Trigger Startup: Move The Action: Trigger - Run Multiboard Update <gen> (checking conditions) out of the Loop, Cause it just just doesn't make much sense to update all tables every time a Playing player was found.
  3. Well it doesn't felt MPI for me at my Lan Plays, you need to make "show Multiboard" only for local player -> each player sees only its own table.
I did that this way:
  • Custom script: if GetLocalPlayer() == udg_SHS_Sys_PlayerIntegerA then
  • Multiboard - Show SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA]
  • Multiboard - Maximize SHS_Sys_Multiboard[SHS_Sys_NumberPlayerIntegerA]
  • Custom script: endif
 
Top