• 🏆 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!

Forgotten_Warlord's RPG Combopack v2.3

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Contains XP system as well as a more advanced hero selection system.
Should be leak free.

GUI all players that are users



  • HSInitialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Game - Display to (All players) the text: Up/Down Arrows will...
      • -------- Set Hero Choices, Each with individual Numbers --------
      • Set HSHeroTitleColor = |cffe1ab44
      • Set HSUnitTypes[1] = Paladin
      • Set HSUnitTypes[2] = Archmage
      • Set HSUnitTypes[3] = Mountain King
      • Set HSUnitTypes[4] = Blood Mage
      • -------- Set Hero Information --------
      • Set HSHeroInfoColor = |cff4f9bc6
      • Set HSHeroInfo[1] = Paladin's Information!
      • Set HSHeroInfo[2] = Archmage's Information!
      • Set HSHeroInfo[3] = Mountain King's Information!
      • Set HSHeroInfo[4] = Blood Mage's Information!
      • -------- Set this to the number of Choices --------
      • Set HSUnitNumberOfTypes = 4
      • -------- Now For the SetUp // DO NOT EDIT BELOW --------
      • Set HSTempPlayerGroup = (All players matching (((Matching player) controller) Equal to User))
      • Player Group - Pick every player in HSTempPlayerGroup and do (Actions)
        • Loop - Actions
          • Visibility - Disable fog of war
          • Visibility - Disable black mask
          • Set HSHeroNumber[(Player number of (Picked player))] = 1
          • Set HSRotation[(Player number of (Picked player))] = 270.00
          • Set HSTempSpawnPoint = ((Picked player) start location)
          • Unit - Create 1 HSUnitTypes[HSHeroNumber[(Player number of (Picked player))]] for Neutral Passive at HSTempSpawnPoint facing HSRotation[(Player number of (Picked player))] degrees
          • Set HSHero[(Player number of (Picked player))] = (Last created unit)
          • Game - Display to (Player group((Picked player))) the text: ((HSHeroTitleColor + (Name of (Last created unit))) + ((HSHeroInfoColor + : ) + HSHeroInfo[HSHeroNumber[(Player number of (Triggering player))]]))
          • Custom script: call RemoveLocation(udg_HSTempSpawnPoint)
          • Camera - Set (Picked player)'s camera Distance to target to 450.00 over 0.00 seconds
          • Camera - Set (Picked player)'s camera Angle of attack to 354.00 over 0.00 seconds
          • Camera - Set (Picked player)'s camera Height Offset to 155.00 over 0.00 seconds
          • Camera - Lock camera target for (Picked player) to (Last created unit), offset by (0.00, 0.00) using Default rotation
          • Set HSHeroSelectionEnabler[(Player number of (Picked player))] = True
          • Trigger - Add to HSPanDown <gen> the event (Player - (Picked player) Presses the Down Arrow key)
          • Trigger - Add to HSPanUp <gen> the event (Player - (Picked player) Presses the Up Arrow key)
          • Trigger - Add to HSRotateLeftDisable <gen> the event (Player - (Picked player) Releases the Left Arrow key)
          • Trigger - Add to HSRotateLeftEnable <gen> the event (Player - (Picked player) Presses the Left Arrow key)
          • Trigger - Add to HSRotateRightDisable <gen> the event (Player - (Picked player) Releases the Right Arrow key)
          • Trigger - Add to HSRotateRightEnable <gen> the event (Player - (Picked player) Presses the Right Arrow key)
          • Trigger - Add to Repick <gen> the event (Player - (Picked player) types a chat message containing -repick as An exact match)
          • Trigger - Add to Selecting <gen> the event (Player - (Picked player) Selects a unit)
          • Player Group - Add (Picked player) to HSPlayerGroup
      • Wait 0.00 seconds
      • Custom script: call DestroyForce(udg_HSTempPlayerGroup)
      • Trigger - Turn on HSPanUp <gen>
      • Trigger - Turn on HSPanDown <gen>
      • Trigger - Turn on HSRotateLeftEnable <gen>
      • Trigger - Turn on HSRotateRightEnable <gen>
      • Trigger - Turn on HSRotateLeftDisable <gen>
      • Trigger - Turn on HSRotateRightDisable <gen>
      • Trigger - Turn on Selecting <gen>
      • Trigger - Turn on HSRotationLoop <gen>



  • HSPanUp
    • Events
    • Conditions
      • HSHeroSelectionEnabler[(Player number of (Triggering player))] Equal to True
    • Actions
      • Set HSTempSpawnPoint = ((Triggering player) start location)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HSHeroNumber[(Player number of (Triggering player))] Less than HSUnitNumberOfTypes
        • Then - Actions
          • Set HSHeroNumber[(Player number of (Triggering player))] = (HSHeroNumber[(Player number of (Triggering player))] + 1)
        • Else - Actions
          • Set HSHeroNumber[(Player number of (Triggering player))] = 1
      • Unit - Remove HSHero[(Player number of (Triggering player))] from the game
      • Unit - Create 1 HSUnitTypes[HSHeroNumber[(Player number of (Triggering player))]] for Neutral Passive at HSTempSpawnPoint facing HSRotation[(Player number of (Triggering player))] degrees
      • Set HSHero[(Player number of (Triggering player))] = (Last created unit)
      • Cinematic - Clear the screen of text messages for (Player group((Triggering player)))
      • Game - Display to (Player group((Triggering player))) the text: ((HSHeroTitleColor + (Name of (Last created unit))) + ((HSHeroInfoColor + : ) + HSHeroInfo[HSHeroNumber[(Player number of (Triggering player))]]))
      • Custom script: call RemoveLocation(udg_HSTempSpawnPoint)
      • Camera - Set (Triggering player)'s camera Distance to target to 450.00 over 0.00 seconds
      • Camera - Set (Triggering player)'s camera Angle of attack to 354.00 over 0.00 seconds
      • Camera - Set (Triggering player)'s camera Height Offset to 155.00 over 0.00 seconds
      • Camera - Lock camera target for (Triggering player) to (Last created unit), offset by (0.00, 0.00) using Default rotation



  • HSPanDown
    • Events
    • Conditions
      • HSHeroSelectionEnabler[(Player number of (Triggering player))] Equal to True
    • Actions
      • Set HSTempSpawnPoint = ((Triggering player) start location)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HSHeroNumber[(Player number of (Triggering player))] Greater than 1
        • Then - Actions
          • Set HSHeroNumber[(Player number of (Triggering player))] = (HSHeroNumber[(Player number of (Triggering player))] - 1)
        • Else - Actions
          • Set HSHeroNumber[(Player number of (Triggering player))] = HSUnitNumberOfTypes
      • Unit - Remove HSHero[(Player number of (Triggering player))] from the game
      • Unit - Create 1 HSUnitTypes[HSHeroNumber[(Player number of (Triggering player))]] for Neutral Passive at HSTempSpawnPoint facing HSRotation[(Player number of (Triggering player))] degrees
      • Cinematic - Clear the screen of text messages for (Player group((Triggering player)))
      • Game - Display to (Player group((Triggering player))) the text: ((HSHeroTitleColor + (Name of (Last created unit))) + ((HSHeroInfoColor + : ) + HSHeroInfo[HSHeroNumber[(Player number of (Triggering player))]]))
      • Set HSHero[(Player number of (Triggering player))] = (Last created unit)
      • Custom script: call RemoveLocation(udg_HSTempSpawnPoint)
      • Camera - Set (Triggering player)'s camera Distance to target to 450.00 over 0.00 seconds
      • Camera - Set (Triggering player)'s camera Angle of attack to 354.00 over 0.00 seconds
      • Camera - Set (Triggering player)'s camera Height Offset to 155.00 over 0.00 seconds
      • Camera - Lock camera target for (Triggering player) to (Last created unit), offset by (0.00, 0.00) using Default rotation



  • HSRotateLeftEnable
    • Events
    • Conditions
      • HSHeroSelectionEnabler[(Player number of (Triggering player))] Equal to True
    • Actions
      • Set HSRotateLeftLoop[(Player number of (Triggering player))] = True
      • Trigger - Turn on HSRotationLoop <gen>



  • HSRotateLeftDisable
    • Events
    • Conditions
      • HSHeroSelectionEnabler[(Player number of (Triggering player))] Equal to True
    • Actions
      • Set HSRotateLeftLoop[(Player number of (Triggering player))] = False



  • HSRotateRightEnable
    • Events
  • Conditions
    • HSHeroSelectionEnabler[(Player number of (Triggering player))] Equal to True
    • Actions
      • Set HSRotateRightLoop[(Player number of (Triggering player))] = True
      • Trigger - Turn on HSRotationLoop <gen>



  • HSRotateRightDisable
    • Events
  • Conditions
    • HSHeroSelectionEnabler[(Player number of (Triggering player))] Equal to True
    • Actions
      • Set HSRotateRightLoop[(Player number of (Triggering player))] = False



  • HSRotationLoop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Set HSTempRotationGroup = (All players)
      • Player Group - Pick every player in HSTempRotationGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • HSRotateLeftLoop[(Player number of (Picked player))] Equal to True
            • Then - Actions
              • Set HSRotation[(Player number of (Picked player))] = (HSRotation[(Player number of (Picked player))] - 8.00)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • HSRotateRightLoop[(Player number of (Picked player))] Equal to True
                • Then - Actions
                  • Set HSRotation[(Player number of (Picked player))] = (HSRotation[(Player number of (Picked player))] + 8.00)
                • Else - Actions
          • Unit - Make HSHero[(Player number of (Picked player))] face HSRotation[(Player number of (Picked player))] over (Current turn speed of HSHero[(Player number of (Picked player))]) seconds
      • Custom script: call DestroyForce(udg_HSTempRotationGroup)



  • Selecting
    • Events
    • Conditions
      • HSHeroSelectionEnabler[(Player number of (Triggering player))] Equal to True
      • (Triggering unit) Equal to HSHero[(Player number of (Triggering player))]
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • HSDoubleClick[(Player number of (Triggering player))] Equal to True
        • Then - Actions
          • -------- ONLY EDIT THE POINT --------
          • Set HSTempSpawnPoint = (Position of HSHero[(Player number of (Triggering player))])
          • Unit - Move HSHero[(Player number of (Triggering player))] instantly to HSTempSpawnPoint
          • Camera - Reset camera for (Triggering player) to standard game-view over 0.00 seconds
          • Camera - Pan camera for (Picked player) to HSTempSpawnPoint over 0.00 seconds
          • Selection - Select HSHero[(Player number of (Triggering player))]
          • Unit - Change ownership of HSHero[(Player number of (Triggering player))] to (Triggering player) and Change color
          • Custom script: call RemoveLocation(udg_HSTempSpawnPoint)
          • Player Group - Remove (Triggering player) from HSPlayerGroup
          • Set HSHeroSelectionEnabler[(Player number of (Triggering player))] = False
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Number of players in HSPlayerGroup) Equal to 0
            • Then - Actions
              • Trigger - Turn off HSPanDown <gen>
              • Trigger - Turn off HSPanUp <gen>
              • Trigger - Turn off HSRotateLeftDisable <gen>
              • Trigger - Turn off HSRotateLeftEnable <gen>
              • Trigger - Turn off HSRotateRightDisable <gen>
              • Trigger - Turn off HSRotateRightEnable <gen>
              • Trigger - Turn off HSRotationLoop <gen>
              • Trigger - Turn off Selecting <gen>
            • Else - Actions
        • Else - Actions
          • Set HSDoubleClick[(Player number of (Triggering player))] = True
          • Wait 0.80 seconds
          • Set HSDoubleClick[(Player number of (Triggering player))] = False



  • Repick
    • Events
    • Conditions
    • Actions
      • Custom Script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units owned by (Triggering player)) and do (Actions)
        • Loop - Actions
          • Unit - Remove (Picked unit) from the game
      • Set HSHeroNumber[(Player number of (Triggering player))] = 1
      • Set HSRotation[(Player number of (Triggering player))] = 270.00
      • Set HSTempSpawnPoint = ((Triggering player) start location)
      • Unit - Create 1 HSUnitTypes[HSHeroNumber[(Player number of (Triggering player))]] for Neutral Passive at HSTempSpawnPoint facing HSRotation[(Player number of (Triggering player))] degrees
      • Set HSHero[(Player number of (Triggering player))] = (Last created unit)
      • Custom script: call RemoveLocation(udg_HSTempSpawnPoint)
      • Camera - Set (Triggering player)'s camera Distance to target to 450.00 over 0.00 seconds
      • Camera - Set (Triggering player)'s camera Angle of attack to 354.00 over 0.00 seconds
      • Camera - Set (Triggering player)'s camera Height Offset to 155.00 over 0.00 seconds
      • Camera - Lock camera target for (Triggering player) to (Last created unit), offset by (0.00, 0.00) using Default rotation
      • Set HSHeroSelectionEnabler[(Player number of (Triggering player))] = True
      • Trigger - Turn on HSPanUp <gen>
      • Trigger - Turn on HSPanDown <gen>
      • Trigger - Turn on HSRotateLeftEnable <gen>
      • Trigger - Turn on HSRotateRightEnable <gen>
      • Trigger - Turn on HSRotateLeftDisable <gen>
      • Trigger - Turn on HSRotateRightDisable <gen>
      • Trigger - Turn on Selecting <gen>
      • Player Group - Add (Triggering player) to HSPlayerGroup







  • XPInitialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- This is the base XP before level factors in. --------
      • Set XPBase = 32.30
      • -------- The levels a unit can be higher than you while still recieving maximume XP --------
      • -------- *All levels after will have drastically reduced XP --------
      • Set XPMaxLevel = 7.00
      • -------- This will be multiplied buy the xp when gain from a higher than max unit. Reduction increases per level --------
      • Set XPMaxLevelReduction = 0.05
      • -------- The levels below a unit can recieve XP --------
      • Set XPMinLevel = 4.00
      • -------- Reduction is multiplied times XP when unit is = or less than hero level - min level --------
      • Set XPMinLevelReduction = 0.00



  • XPGain
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • Set XPTempPoint = (Position of (Triggering unit))
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units within 1200.00 of XPTempPoint) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True
              • ((Owner of (Picked unit)) controller) Equal to User
            • Then - Actions
              • Set XPGain = (XPBase x ((Real((Level of (Triggering unit)))) - ((Real((Hero level of (Picked unit)))) / 10.00)))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Level of (Triggering unit)) Greater than ((Hero level of (Picked unit)) + (Integer(XPMaxLevel)))
                • Then - Actions
                  • Set XPGain = (XPGain x (XPMinLevelReduction x ((Real((Level of (Triggering unit)))) x XPMaxLevelReduction)))
                  • Hero - Add (Integer(XPGain)) experience to (Picked unit), Show level-up graphics
                  • Floating Text - Create floating text that reads (String((Integer(XPGain)))) above (Picked unit) with Z offset 0.00, using font size 8.00, color (100.00%, 0.00%, 100.00%), and 5.00% transparency
                  • Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
                  • Floating Text - Change (Last created floating text): Disable permanence
                  • Floating Text - Change the lifespan of (Last created floating text) to 5.00 seconds
                  • Floating Text - Change the fading age of (Last created floating text) to 4.00 seconds
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Level of (Triggering unit)) Less than ((Hero level of (Picked unit)) - (Integer(XPMinLevel)))
                    • Then - Actions
                      • Set XPGain = (XPGain x XPMinLevelReduction)
                      • Hero - Add (Integer(XPGain)) experience to (Picked unit), Show level-up graphics
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • XPGain Greater than or equal to 1.00
                        • Then - Actions
                          • Floating Text - Create floating text that reads (String((Integer(XPGain)))) above (Picked unit) with Z offset 0.00, using font size 5.00, color (100.00%, 0.00%, 100.00%), and 0.00% transparency
                          • Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
                          • Floating Text - Change (Last created floating text): Disable permanence
                          • Floating Text - Change the lifespan of (Last created floating text) to 5.00 seconds
                          • Floating Text - Change the fading age of (Last created floating text) to 4.00 seconds
                        • Else - Actions
                    • Else - Actions
                      • Hero - Add (Integer(XPGain)) experience to (Picked unit), Show level-up graphics
                      • Floating Text - Create floating text that reads (String((Integer(XPGain)))) above (Picked unit) with Z offset 0.00, using font size 10.00, color (100.00%, 0.00%, 100.00%), and 0.00% transparency
                      • Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
                      • Floating Text - Change (Last created floating text): Disable permanence
                      • Floating Text - Change the lifespan of (Last created floating text) to 5.00 seconds
                      • Floating Text - Change the fading age of (Last created floating text) to 4.00 seconds
            • Else - Actions
      • Custom script: call RemoveLocation(udg_XPTempPoint)



  • LevelUp
    • Events
      • Unit - A unit Gains a level
    • Conditions
    • Actions
      • Unit - Set life of (Triggering unit) to 100.00%
      • Unit - Set mana of (Triggering unit) to 100.00%







  • DDInitialization
    • Events
      • Map initialization
      • Unit - A unit enters (Playable map area)
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DDInitialization Equal to False
        • Then - Actions
          • Custom script: set bj_wantDestroyGroup = true
          • Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
            • Loop - Actions
              • Trigger - Add to DamageDetection <gen> the event (Unit - (Picked unit) Takes damage)
        • Else - Actions
      • Set DDInitialization = True
      • Trigger - Add to DamageDetection <gen> the event (Unit - (Triggering unit) Takes damage)



  • DamageDetection
    • Events
    • Conditions
    • Actions
      • Set DDTempDamage = (Integer((Damage taken)))
      • Floating Text - Create floating text that reads (String(DDTempDamage)) above (Triggering unit) with Z offset 0.00, using font size 10.00, color (100.00%, 30.00%, 0.00%), and 10.00% transparency
      • Floating Text - Set the velocity of (Last created floating text) to 70.00 towards 90.00 degrees
      • Floating Text - Change (Last created floating text): Disable permanence
      • Floating Text - Change the lifespan of (Last created floating text) to 5.00 seconds
      • Floating Text - Change the fading age of (Last created floating text) to 4.00 seconds



  • DDAbilityDetection
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
    • Actions
      • Floating Text - Create floating text that reads ({ + ((Name of (Ability being cast)) + })) above (Triggering unit) with Z offset 0.00, using font size 10.00, color (0.00%, 0.00%, 100.00%), and 10.00% transparency
      • Floating Text - Set the velocity of (Last created floating text) to 25.00 towards 90.00 degrees
      • Floating Text - Change (Last created floating text): Disable permanence
      • Floating Text - Change the lifespan of (Last created floating text) to 3.00 seconds
      • Floating Text - Change the fading age of (Last created floating text) to 2.00 seconds







  • BountyAward
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • Set BSTempPoint = (Position of (Triggering unit))
      • Set BSTempGold = (10 x (Level of (Triggering unit)))
      • Set BSTempCounter = 0
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units within 1200.00 of BSTempPoint matching (((Owner of (Matching unit)) controller) Equal to User)) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True
            • Then - Actions
              • Player Group - Add (Owner of (Picked unit)) to BSPlayerGroup
              • Set BSTempCounter = (BSTempCounter + 1)
            • Else - Actions
      • Unit Group - Pick every unit in (Units within 1200.00 of BSTempPoint matching (((Owner of (Matching unit)) controller) Equal to User)) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True
            • Then - Actions
              • Floating Text - Create floating text that reads (+ + (String((BSTempGold / BSTempCounter)))) above (Picked unit) with Z offset 0.00, using font size 10.00, color (100.00%, 100.00%, 0.00%), and 0.00% transparency
              • Floating Text - Set the velocity of (Last created floating text) to 30.00 towards 90.00 degrees
              • Floating Text - Change (Last created floating text): Disable permanence
              • Floating Text - Change the lifespan of (Last created floating text) to 5.00 seconds
              • Floating Text - Change the fading age of (Last created floating text) to 4.00 seconds
            • Else - Actions
      • Player Group - Pick every player in BSPlayerGroup and do (Actions)
        • Loop - Actions
          • Player - Add (BSTempGold / BSTempCounter) to (Picked player) Current gold
          • Player Group - Remove (Picked player) from BSPlayerGroup
      • Custom script: call DestroyForce(udg_BSPlayerGroup)
      • Custom script: call RemoveLocation(udg_BSTempPoint)







  • CRInitialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Custom script: set bj_wantDestroyGroup = true
      • Set CRCounter = 1
      • Unit Group - Pick every unit in (Units in (Playable map area) owned by Neutral Hostile) and do (Actions)
        • Loop - Actions
          • Unit - Set the custom value of (Picked unit) to CRCounter
          • Set CRRespawnPoint[CRCounter] = (Position of (Picked unit))
          • Set CRCounter = (CRCounter + 1)



  • CRUnitDies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Owner of (Triggering unit)) Equal to Neutral Hostile
    • Actions
      • Wait 60.00 seconds
      • Unit - Create 1 (Unit-type of (Triggering unit)) for Neutral Hostile at CRRespawnPoint[(Custom value of (Triggering unit))] facing Default building facing degrees
      • Unit - Set the custom value of (Last created unit) to (Custom value of (Triggering unit))







  • HRInitialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Set revive points up! --------
      • Set HRRespawnPoint[1] = (Center of Region 000 <gen>)
      • Set HRRespawnPoint[2] = (Center of Region 001 <gen>)
      • Set HRRespawnPoint[3] = (Center of Region 002 <gen>)
      • -------- Set number of revive points! --------
      • Set HRNumberOfRespawnPoints = 3
      • -------- Set Gold and Lumber Penalty --------
      • Set HRGoldPenalty = 6
      • Set HRLumberPenalty = 0
      • -------- Penalty Color Code --------
      • Set HRPenaltyColorCode = |cffFF0000



  • HRHeroDies
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Triggering unit) is A Hero) Equal to True
      • ((Owner of (Triggering unit)) controller) Equal to User
    • Actions
      • Set HRTempPoint = (Position of (Triggering unit))
      • Set HRDistanceMeter = (Distance between HRTempPoint and HRRespawnPoint[(Random integer number between 1 and HRNumberOfRespawnPoints)])
      • For each (Integer HRInt) from 1 to HRNumberOfRespawnPoints, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between HRTempPoint and HRRespawnPoint[HRInt]) Less than HRDistanceMeter
            • Then - Actions
              • Set HRDistanceMeter = (Distance between HRTempPoint and HRRespawnPoint[HRInt])
              • Set HRTempPointInt = HRInt
            • Else - Actions
      • Player - Add (-1 x (HRGoldPenalty x (Hero level of (Triggering unit)))) to (Owner of (Triggering unit)) Current gold
      • Player - Add (-1 x (HRLumberPenalty x (Hero level of (Triggering unit)))) to (Owner of (Triggering unit)) Current lumber
      • Camera - Pan camera for (Owner of (Triggering unit)) to HRRespawnPoint[HRTempPointInt] over 0.50 seconds
      • Hero - Instantly revive (Triggering unit) at HRRespawnPoint[HRTempPointInt], Hide revival graphics
      • Game - Display to (Player group((Owner of (Triggering unit)))) the text: (HRPenaltyColorCode + (Death Penalty: + ((String((-1 x (HRGoldPenalty x (Hero level of (Triggering unit)))))) + ( gold and + ((String((-1 x (HRLumberPenalty x (Hero level of (Triggering unit)))))) + lumber.)))))
      • Selection - Select (Triggering unit) for (Owner of (Triggering unit))
      • Custom script: call RemoveLocation(udg_HRTempPoint)




------------**UPDATES**------------

UPDATE
Added some features, fixed some minor leaks.
New features include:
Creep Respawn system
and
Hero Revive system


UPDATE:
Added bounty system that is determined by how many are in your group.
Added Ability Detection
Added Damage Detection



Due to the simplicity of the new features, I will not be posting these triggers.


UPDATE:
POSTED TRIGGERS ARE NOT UP TO DATE DUE TO THE AMOUNT OF TIME IT TAKES TO UPDATE: but fixed them to the suggestion below.



Keywords:
RPG, XP, Experience, Exp, Hero, Selection, System, bounty, gold, damage, detect, ability, detection
Contents

Hero Selection and Exp Systems (Map)

Reviews
17:59, 1st Mar 2011 Bribe: Permanently rejected because it's full of leaks and conflicts with a lot of other systems, Forgotten_Warlord has made a point he will not update this.

Moderator

M

Moderator

17:59, 1st Mar 2011
Bribe:

Permanently rejected because it's full of leaks and conflicts with a lot of other systems, Forgotten_Warlord has made a point he will not update this.
 
Level 16
Joined
May 1, 2008
Messages
1,605
Moin moin =)

=== My personal vote: APPROVAL [4/5] ===

Ok after downloading and testing I got the following review:

First of all I have to say, that I'm surprised. For the last 2 - 3 days nearly only s**t is uploading here ( sorry not all but many stuff ) and now you come up with a good system - I like it. But I have some improvements for you:

1) In the HS Initialization trigger you have a part where you pick up ( all players ) and check if there are users. In this part you should add following triggers:
  • Trigger - Add to (Trigger) the event (Player - (Picked player) Presses/release the An Arrow key)
Do this for every trigger, you use those events and delete the events from the these triggers, where you use this event. This will save memory.
( You can do this for any trigger to reduce the value of event triggers )

2) In the trigger "HSRotationLoop" at the beginning you pick up a player group. You should use a player group variable and clear it at the end of the loop with
  • Custom script: call DestroyForce(udg_Force)
I know Player force leaks are rar, but they exist and this how you avoid them.

3) In your "XPGain" trigger you pick at second a unit group. When you pick a unit group in any case it's leak. So type this custom script DIRECTLY BEFORE you pick the unit group:
  • Custom script: set bj_wantDestroyGroup = true
.
This is easier, else you have to store this unit group into a variable and pick all units from the variable.

Ok that's all for now because don't see anything what can be improved for now. All in all, as I said, I'm surprised and I like your system, so I will give the approval status and [4/5]. Good job! But the thing is it's only 4/5 and I think about 5/5, but somehow I don't know. Maybe this whole system can be improved for the last point, but I don't know now =S

NOTE: My review is nothing against you nor your spell. These are just some points that need to be fixed.

Greetings and Peace
Dr. Boom
 
Level 16
Joined
May 1, 2008
Messages
1,605
Moin moin =)

Now I know, what could be missing:

First, the "choose system" starts with the paladin. But when I start the map and see the paladin first, the paladin description isn't shown. Also if I use -repick, the system starts with the paladin but the description isn't shown too.

Also, just an idea, how about sounds? That you create a boolean and a sound variable. In the sound variable with array, you store the sound of the hero. Maybe the ready sound or something. Now if someone set the boolean variable to true, the sounds are played and when false, they're not.

Slight note, when the system starts with the paladin, I select him and press up or down, then the selection is removed. Maybe you add something "if unit is selected - then select the new hero too - else not".

Yes that's all and I don't know what there can be improved more only write everything in vJass =D
Joke but I really think to change my 4/5 to 5/5, because I tested it more times and I like it more and more.

Greetings and Peace
Dr. Boom
 
DOnt worry will take me roughly 25 min to add those. Bounty system I might go into depth with though. But just need to get home to my computer to work on it and those will be added. It will be a nice RPG starter pack. I may perfect my old save/load system to it but that would take at least 2 days to recreate it from scratch. Though I guess I could actually make it simpler now that I'm thinking about it in my head while typing o_O I could make the everything a set code, then add a - for code breaks, and add a numeric, alphabetic code scrambler, that goes by integers/variables that correspond with eachother. We'll see, there are already enough save/load systems in the hive that are better than what I can do, most likely.

Edit: Do you guys want Unit names to be color coded? like...
Paladin: Paladin information goes here!

Too late already implemented. if you guys REALLY want me to post the triggers I will but its a pain in the ass :p
 
Last edited:
Level 5
Joined
Oct 8, 2010
Messages
134
DOnt worry will take me roughly 25 min to add those. Bounty system I might go into depth with though. But just need to get home to my computer to work on it and those will be added. It will be a nice RPG starter pack. I may perfect my old save/load system to it but that would take at least 2 days to recreate it from scratch. Though I guess I could actually make it simpler now that I'm thinking about it in my head while typing o_O I could make the everything a set code, then add a - for code breaks, and add a numeric, alphabetic code scrambler, that goes by integers/variables that correspond with eachother. We'll see, there are already enough save/load systems in the hive that are better than what I can do, most likely.

Edit: Do you guys want Unit names to be color coded? like...
Paladin: Paladin information goes here!

Too late already implemented. if you guys REALLY want me to post the triggers I will but its a pain in the ass :p

Well good luck with the Save/Load system:thumbs_up:
and yeah you should post the triggers.
and it is a good idea to use colour coded names (makes things clearer)
 
ok well, I'll post them, and yes it is all MUI, if you want it to work for only allied players, make sure you add in a condition for allied to owner of killing unit.

right now its just enemy of triggering unit with in 1200 range.

Cant post the triggers right now cause last night we had an emergency and had to drive to town and i dont have my computer.

Do you guys want it to show hero stats under hero information? or would you prefer if that was just manually imputed into the hero information by the map maker? OR just leave it be

Next update I will have the new triggers up.

Edit: UP TO DATE WITH 2 NEW Features.
 
Last edited:
Level 10
Joined
Nov 3, 2009
Messages
686
Things that I didn't like and bugs:

*Example: Using mirror image got 1 illiusion I kill monster and i get instead 20 XP i get 40 xp ! I get experience from fuckin illiusion :D
* Then, bounty system bugged as well, gives gold only 1 time :D Killing first time monster and then it wont give gold anymore
* Then I can see that other players get xp and gold ;( thats totaly sux..
* Dmg Detect system is totaly SPAM of numbers ;(
* Hero choosing system, is it possible to make hero pick somewhere else and when picked move instantly to start zone region ?
* pff... dont remember anymore :D

Please fix this..

EDIT: OK ( Hero choosing system, is it possible to make hero pick somewhere else and when picked move instantly to start zone region ?) fixed :D was easy..
 
Last edited:
Things that I didn't like and bugs:

*Example: Using mirror image got 1 illiusion I kill monster and i get instead 20 XP i get 40 xp ! I get experience from fuckin illiusion :D
* Then, bounty system bugged as well, gives gold only 1 time :D Killing first time monster and then it wont give gold anymore
* Then I can see that other players get xp and gold ;( thats totaly sux..
* Dmg Detect system is totaly SPAM of numbers ;(
* Hero choosing system, is it possible to make hero pick somewhere else and when picked move instantly to start zone region ?
* pff... dont remember anymore :D

Please fix this..

EDIT: OK ( Hero choosing system, is it possible to make hero pick somewhere else and when picked move instantly to start zone region ?) fixed :D was easy..

Well the start region is a point, so yes you can change it...
and I'll look into the illusion bug o_O
Spam, yes but you can make them fade faster, and with slower attacks or single enemies, it wont spam...
and I havnt had that problem with the bounty system
It only adds XP and Gold if you are Allied. But I'll add more options
 
Level 20
Joined
Jul 12, 2010
Messages
1,717
awesome systems man !! :thumbs_up:
im really glad somebody finally made this !!
+rep from me and 5/5 ;p

i got an idea for mproving your hero selection system :ogre_hurrhurr:
how about when we have a hero selected...
we can press a button or say something like -animations
and a list of animations comes up and we can play his animations
for example, attack, stand, walk, death, spell throw, spell slam and many more ;p
i would appreciate it if you could add this option :thumbs_up:
(im only giving you ideas, you don't have to if you don't want to ;p)
 
awesome systems man !! :thumbs_up:
im really glad somebody finally made this !!
+rep from me and 5/5 ;p

i got an idea for mproving your hero selection system :ogre_hurrhurr:
how about when we have a hero selected...
we can press a button or say something like -animations
and a list of animations comes up and we can play his animations
for example, attack, stand, walk, death, spell throw, spell slam and many more ;p
i would appreciate it if you could add this option :thumbs_up:
(im only giving you ideas, you don't have to if you don't want to ;p)

Sounds like an interesting idea for a hero viewer, but if someone wants something like that I'll make it custom for them, otherwise it could end up slowing the system down to be so bulky
 
Level 5
Joined
Oct 8, 2010
Messages
134
Thanks, I'll be upgrading it as time goes on :)
Could you also make a camera system in wich we are able to see our character, have the real wow rpg feeling, but without the stupid click errors ( that you run back while trying to run forewards :ogre_rage:
you know what i mean)
That would be really nice:goblin_good_job:
 
Could you also make a camera system in wich we are able to see our character, have the real wow rpg feeling, but without the stupid click errors ( that you run back while trying to run forewards :ogre_rage:
you know what i mean)
That would be really nice:goblin_good_job:

Well I've made many camera systems, and the best one is by the_witcher its in VJass, not GUI, but it really is the best. I dont have the best luck with tracking terrain height
 

Bribe

Code Moderator
Level 50
Joined
Sep 26, 2009
Messages
9,464
HRHeroDies

Game - Display to (Player group((Owner of (Triggering unit))))

- Leaks

(Owner of (Triggering unit))

- Spammed, store it once into a variable for quick reference.

Creep Respawn

- Custom value of units potentially conflicts with a lot of systems. This needs to use a hashtable instead.

Bounty System

Custom script: call DestroyForce(udg_BSPlayerGroup)

- This isn't a dynamic force (you never re-create it) so destroying it here will cause bugs the next time this action is executed.

You also leak a unit group here, and needlessly "pick all units" twice

DDInitialization

Trigger - Add to DamageDetection <gen> the event (Unit - (Triggering unit) Takes damage)

- This should be placed in the "Else - Actions" part as it wastefully creates an event for a null unit during map initialization.

XPGain

(Picked unit)

- You spam this. You should set that to a variable and use it for quick reference.

HSInitialization

(Picked player)

- You spam this as well.

HSPan Triggers

(Triggering player)

- You spam this as well.

Cinematic - Clear the screen of text messages for (Player group((Triggering player)))
Game - Display to (Player group((Triggering player)))

- Forces leak

HSRotationLoop

You do not need to set (All Players) to a variable, just use it directly.

(Player number of (Picked player))

- You spam this.

HSSelecting

(Player number of (Triggering player))

- Spammed as well.

HSRepicking

(Triggering player) and (Player number) are spammed.

Status: Rejected until updated.
 
Top