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

Advanced Exp and Bounty System v 1.0

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
  • Like
Reactions: Marcos DAB
Some of my systems made for my map. I think the tittle says everything but I explain it.
Bounty system: Gives X gold for the owner of killing unit and gives half of X gold for owners of allies in a range. The values given for each ally can differ.
Exp system: Gives X exp for the owner of killing unit and gives 75% of X exp for owners of allies in a range. The values given for each ally can differ.
Floating texts are only shown for the correct players.


  • Initialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- The rate of experience gain can depend on the number of players in the game --------
      • For each (Integer A) from 1 to 10, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • And - All (Conditions) are true
                • Conditions
                  • ((Player((Integer A))) slot status) Equal to Is playing
                  • ((Player((Integer A))) controller) Equal to User
            • Then - Actions
              • Set PlayerNumber = (PlayerNumber + 1)
            • Else - Actions
      • Set ExpGain = (1.20 - (0.05 x (Real(PlayerNumber))))
  • Bounty and Exp
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • Set TempUnit = (Dying unit)
      • Set TempPoint[2] = (Position of TempUnit)
      • -------- Setting the gold gained by the kill. --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • And - All (Conditions) are true
            • Conditions
              • (Level of TempUnit) Greater than 0
              • (Level of TempUnit) Less than or equal to 5
        • Then - Actions
          • Set Bounty = (Random real number between 6.00 and 14.00)
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • And - All (Conditions) are true
                • Conditions
                  • (Level of TempUnit) Greater than 5
                  • (Level of TempUnit) Less than or equal to 10
            • Then - Actions
              • Set Bounty = (Random real number between 13.50 and 21.50)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • And - All (Conditions) are true
                    • Conditions
                      • (Level of TempUnit) Greater than 10
                      • (Level of TempUnit) Less than or equal to 15
                • Then - Actions
                  • Set Bounty = (Random real number between 21.00 and 29.00)
                • Else - Actions
                  • Set Bounty = (Random real number between 28.50 and 36.50)
                  • -------- Aaaaand until you want --------
      • Set BountyExpGroup = (Units within 900.00 of TempPoint[2] matching ((((Matching unit) belongs to an enemy of Neutral Hostile) Equal to True) and ((((Matching unit) is A Hero) Equal to True) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) is an illusion) Equa
      • -------- Setting the exp gained by the kill. --------
      • Set ExpPoint = (Random integer number between (3 + (4 x (Level of TempUnit))) and (9 + (4 x (Level of TempUnit))))
      • Set ExpPointR = ((Real(ExpPoint)) x ExpGain)
      • Set ExpGainINT1 = (Integer(ExpPointR))
      • Unit Group - Pick every unit in BountyExpGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Level of TempUnit) Equal to (Level of (Picked unit))
            • Then - Actions
            • Else - Actions
              • -------- Checks the level difference. If it's too big the hero don't get any exp points. --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Level of TempUnit) Equal to ((Level of (Picked unit)) + 1)
                      • (Level of TempUnit) Equal to ((Level of (Picked unit)) - 1)
                • Then - Actions
                  • Set ExpPointR = (ExpPointR x 0.90)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (Level of TempUnit) Equal to ((Level of (Picked unit)) + 2)
                          • (Level of TempUnit) Equal to ((Level of (Picked unit)) - 2)
                    • Then - Actions
                      • Set ExpPointR = (ExpPointR x 0.80)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Or - Any (Conditions) are true
                            • Conditions
                              • (Level of TempUnit) Equal to ((Level of (Picked unit)) + 3)
                              • (Level of TempUnit) Equal to ((Level of (Picked unit)) - 3)
                        • Then - Actions
                          • Set ExpPointR = (ExpPointR x 0.70)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Or - Any (Conditions) are true
                                • Conditions
                                  • (Level of TempUnit) Equal to ((Level of (Picked unit)) + 4)
                                  • (Level of TempUnit) Equal to ((Level of (Picked unit)) - 4)
                            • Then - Actions
                              • Set ExpPointR = (ExpPointR x 0.60)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Or - Any (Conditions) are true
                                    • Conditions
                                      • (Level of TempUnit) Equal to ((Level of (Picked unit)) + 5)
                                      • (Level of TempUnit) Equal to ((Level of (Picked unit)) - 5)
                                • Then - Actions
                                  • Set ExpPointR = (ExpPointR x 0.50)
                                • Else - Actions
                                  • Set ExpPointR = 0.00
          • Set TempInt = (Player number of (Owner of (Picked unit)))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Or - Any (Conditions) are true
                • Conditions
                  • (Picked unit) Equal to (Killing unit)
                  • (Owner of (Picked unit)) Equal to (Owner of (Killing unit))
            • Then - Actions
              • Set ExpGainINT2 = (Integer(ExpPointR))
              • Player - Add (Integer(Bounty)) to (Player(TempInt)) Current gold
              • Hero - Add ExpGainINT2 experience to (Picked unit), Show level-up graphics
              • Custom script: if GetOwningPlayer(GetEnumUnit()) == GetLocalPlayer() then
              • Floating Text - Create floating text that reads (+ + (String((Integer(Bounty))))) at TempPoint[2] with Z offset 0.00, using font size 11.00, color (80.00%, 80.00%, 25.00%), and 0.00% transparency
              • Floating Text - Set the velocity of (Last created floating text) to 80.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.50 seconds
              • Floating Text - Create floating text that reads (+ + ((String(ExpGainINT2)) + Exp)) at TempPoint[2] with Z offset 50.00, using font size 11.00, color (20.00%, 20.00%, 80.00%), and 0.00% transparency
              • Floating Text - Set the velocity of (Last created floating text) to 80.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.50 seconds
              • Custom script: endif
            • Else - Actions
              • Set ExpPointR = (ExpPointR x 0.75)
              • Set ExpGainINT2 = (Integer(ExpPointR))
              • Player - Add (Integer((Bounty x 0.50))) to (Player(TempInt)) Current gold
              • Hero - Add ExpGainINT2 experience to (Picked unit), Show level-up graphics
              • Custom script: if GetOwningPlayer(GetEnumUnit()) == GetLocalPlayer() then
              • Floating Text - Create floating text that reads (+ + (String((Integer((Bounty x 0.50)))))) at TempPoint[2] with Z offset 0.00, using font size 11.00, color (80.00%, 80.00%, 25.00%), and 0.00% transparency
              • Floating Text - Set the velocity of (Last created floating text) to 80.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.50 seconds
              • Floating Text - Create floating text that reads (+ + ((String(ExpGainINT2)) + Exp)) at TempPoint[2] with Z offset 50.00, using font size 11.00, color (20.00%, 20.00%, 80.00%), and 0.00% transparency
              • Floating Text - Set the velocity of (Last created floating text) to 80.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.50 seconds
              • Custom script: endif
      • Custom script: call DestroyGroup(udg_BountyExpGroup)
      • Custom script: call RemoveLocation( udg_TempPoint[2] )
Keywords:
experience, rpg, orpg, bounty, advanced, system, gain, earn, get, local, player, show, floating, text,
Contents

Just another Warcraft III map (Map)

Reviews
12.12 IcemanBo: For long time as NeedsFix. Rejected. Bribe: - This needs to run for players 1-12, not 1-10. - It doesn't adjust if a player leaves mid-game. Possible suggestion. - Use (Triggering unit) not (Dying unit) - You don't need to...

Moderator

M

Moderator

12.12
IcemanBo: For long time as NeedsFix. Rejected.

Bribe:

- This needs to run for players 1-12, not 1-10.
- It doesn't adjust if a player leaves mid-game. Possible suggestion.
- Use (Triggering unit) not (Dying unit)
- You don't need to add an "And" block for conditions - it automatically checks if all are true. Also, it's useless to re-check the minimum when previous if's already ruled-out the minimum, you should just be checking the maximum.
- Point arrays are slow, just make 2-3 normal point variables and use those instead.
- Take advantage of the bj_wantDestroyGroup custom script instead of group set/pick/destroy as it's faster.
- (Level of TempUnit) you reference a lot, you should store this into an integer variable to speed things up.
- Same with (Level of (Picked unit))
- The floating text should be configurable from the initialization block.
 
Level 4
Joined
Jul 24, 2010
Messages
85
- I don't like EXP system. Most RPG map, Creep level is spreading. (For example, this is still a good example, 30 31 33 37 38) Your system will be ruined. (Not including map with creep level 1-1000) As I have played, only korean map have complete sequence of creep level.
- Stop using If/Then/Else. Store bounty to array variable in map initialization. So you can just call it like Bounty[GetUnitLevel(TriggeringUnit())] something like this. It will make your system run much much more faster.
- What the... is this (It is difinitely Too simple)
  • Set ExpPoint = (Random integer number between (3 + (4 x (Level of TempUnit))) and (9 + (4 x (Level of TempUnit))))
You just give 4 more exp point per level ?? Hero Require EXP system is different. If I use this system, I must have play for a whole day to one level my hero. (RPG max level is not 10 but 100)
- You don't have to rewrite the same code inside If/Then/Else.

Hardest point of making EXP, bounty system is not just code and floating text, BUT HOW TO BALANCE it. That's why no one dare to summit it.

Anyway, you dare :) Waiting for update. I will cheer for you. :goblin_yeah:
 
Level 16
Joined
Jun 24, 2009
Messages
1,409
I think its too simple to be named system.

The best reason I uploaded this because most of the GUI triggerers don't know how to show texts for only one player. And the system: "Make it most useful and as simple as possible"

- I don't like EXP system. Most RPG map, Creep level is spreading. (For example, this is still a good example, 30 31 33 37 38) Your system will be ruined. (Not including map with creep level 1-1000) As I have played, only korean map have complete sequence of creep level.
- Stop using If/Then/Else. Store bounty to array variable in map initialization. So you can just call it like Bounty[GetUnitLevel(TriggeringUnit())] something like this. It will make your system run much much more faster.
- What the... is this (It is difinitely Too simple)

You just give 4 more exp point per level ?? Hero Require EXP system is different. If I use this system, I must have play for a whole day to one level my hero. (RPG max level is not 10 but 100)
- You don't have to rewrite the same code inside If/Then/Else.

Hardest point of making EXP, bounty system is not just code and floating text, BUT HOW TO BALANCE it. That's why no one dare to summit it.

Anyway, you dare :) Waiting for update. I will cheer for you. :goblin_yeah:

Well I can hardly understand you ~.~ But.
I think it's currently okay and balanced.
At level 1 the hero need 200 Exp to level up. Now at a level one kill the hero can gain around 10 Exp. 20 kill is your whole day?
Dude, what?
Explained it.
I'm on it.

To make this more complicated and worth someone's time to use it, exp should be given to ally units based on their distance to the kill and the damage % they did to the unit. Just some ideas...
3/5 You should also make exp and bounty more configurable.

I'm on it ~.~

Bribe said:
Bribe:

- This needs to run for players 1-12, not 1-10.
- It doesn't adjust if a player leaves mid-game. Possible suggestion.
- Use (Triggering unit) not (Dying unit)
- You don't need to add an "And" block for conditions - it automatically checks if all are true. Also, it's useless to re-check the minimum when previous if's already ruled-out the minimum, you should just be checking the maximum.
- Point arrays are slow, just make 2-3 normal point variables and use those instead.
- Take advantage of the bj_wantDestroyGroup custom script instead of group set/pick/destroy as it's faster.
- (Level of TempUnit) you reference a lot, you should store this into an integer variable to speed things up.
- Same with (Level of (Picked unit))
- The floating text should be configurable from the initialization block.
The system only uses one location now ~.~ I just forgot to change that variable because I just copied this from my ORPG. It has a trigger that checks if the player leaves.
 
Last edited:
Level 4
Joined
Jul 24, 2010
Messages
85
Well I can hardly understand you ~.~ But.
I think it's currently okay and balanced.
At level 1 the hero need 200 Exp to level up. Now at a level one kill the hero can gain around 10 Exp. 20 kill is your whole day?

That's because you always test with level 1. That's will be melee map not RPG system. Nowaday, 90% of RPG map have Limit level at least 100+.

Level 1 = 0
Level 2 = ((Level (1-0) Exp)*1)+(1*100)+100 = 0+100+100 = 200
Level 3 = ((Level (2-1) Exp)*1)+(2*100)+100 = 200+200+100 = 500
Level 4 = ((Level (3-1) Exp)*1)+(3*100)+100 = 500+300+100 = 900
Level 5 = ((Level (4-1) Exp)*1)+(4*100)+100 = 900+400+100 = 1400
Level 6 = ((Level (5-1) Exp)*1)+(5*100)+100 = 1400+500+100 = 2000
Level 7 = ((Level (6-1) Exp)*1)+(6*100)+100 = 2000+600+100 = 2700
Level 8 = ((Level (7-1) Exp)*1)+(7*100)+100 = 2700+700+100 = 3500
Level 9 = ((Level (8-1) Exp)*1)+(8*100)+100 = 3500+800+100 = 4400
Level 10 = ((Level (9-1) Exp)*1)+(9*100)+100 = 4400+900+100 = 5400
From my calculating, Level 50 hero need 127400 exp.

You gain 209 exp for killing level-50 creep.(Only level 50 creep not including 48,49...) You must spend time killing 600 of them. Isn't that a whole day ? Don't tell me that RPG are limit at level 10 or 20.

I don't accept AFK or Bot or patroling players in RPG map, do you ?

Don't forget to do as I said before >_<
Put all creep-bounty to integer array. It will make your trigger run faster.
 
Top