• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Combos

Status
Not open for further replies.

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,285
Such systems are easy if you breakdown the problem into different parts.

Firstly, you need to keep track of everyone's combo kills using an integer array where the index maps to the player's hero.
Every time they kill a hero, add 1 (incriment) their combo kill counter by 1. Everytime they die, reset their combo kill counter to 0.
When they kill a hero and their counter is greater than 1, you award them combo gold based on the number size (as well as display easilly generated text and sound).
Obviously team kills should not incriment the combo counter for the player but should reset the TKed player's combos.

For double and tripple kill, you use a timer and an integer (multi kill) array with index for each player and start it when they kill an enemy hero (timeout of 5 seconds is about right). If the timer timesout, they will not be able to receive a multi kill so the multi kill is set to 0. If they make a kill and the multi kill is not 0, then they have made a multi kill and you award bonus gold (as well as sound / text) based on the number it reaches (resetting the timer each time).

Thats all there really is to it...
 
I posted this already somewhere in spell section...
Here you go CnP from one of my maps...

  • Setup
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set TempFirstBlood = True
      • -------- Setup Spree Sounds --------
      • Set Spree_Sounds[1] = No sound
      • Set Spree_Sounds[2] = No sound
      • Set Spree_Sounds[3] = Killing_Spree <gen>
      • Set Spree_Sounds[4] = Dominating <gen>
      • Set Spree_Sounds[5] = MegaKill <gen>
      • Set Spree_Sounds[6] = Unstoppable <gen>
      • Set Spree_Sounds[7] = WhickedSick <gen>
      • Set Spree_Sounds[8] = MonsterKill <gen>
      • Set Spree_Sounds[9] = GodLike <gen>
      • Set Spree_Sounds[10] = HolyShit <gen>
      • -------- Setup Get Spree Text --------
      • Set Spree_Texts[1] = <Empty String>
      • Set Spree_Texts[2] = <Empty String>
      • Set Spree_Texts[3] = |ris on a |cff00FF00killing spree|r!
      • Set Spree_Texts[4] = |ris |cff551A8Bdominating|r!
      • Set Spree_Texts[5] = |rhas a |cffCD1076mega kill|r!
      • Set Spree_Texts[6] = |ris |cffFF8C00unstoppable|r!!
      • Set Spree_Texts[7] = |ris |cff006400wicked sick|r!!
      • Set Spree_Texts[8] = |rhas a |cffFF6EB4monster kill|r!!
      • Set Spree_Texts[9] = |ris |CFFFF0303GODLIKE|r!!!
      • Set Spree_Texts[10] = |ris |c00ff9900beyond GODLIKE|r!!!! Someone KILL HIM!!!
      • -------- Setup End Spree Text --------
      • Set SpreeEnd_Texts[1] = <Empty String>
      • Set SpreeEnd_Texts[2] = <Empty String>
      • Set SpreeEnd_Texts[3] = |cff00FF00killing spree|r
      • Set SpreeEnd_Texts[4] = |cff551A8Bdominating|r
      • Set SpreeEnd_Texts[5] = |cffCD1076mega kill|r
      • Set SpreeEnd_Texts[6] = |cffFF8C00unstoppable|r
      • Set SpreeEnd_Texts[7] = |cff006400wicked sick|r
      • Set SpreeEnd_Texts[8] = |cffFF6EB4monster kill|r
      • Set SpreeEnd_Texts[9] = |CFFFF0303GODLIKE|r
      • Set SpreeEnd_Texts[10] = |c00ff9900beyond GODLIKE|r
      • Custom script: call DestroyTrigger( GetTriggeringTrigger() )
  • Killing System
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Owner of (Killing unit)) Not equal to Neutral Hostile
      • (Owner of (Triggering unit)) Not equal to Neutral Hostile
      • ((Triggering unit) is A Hero) Equal to True
      • ((Triggering unit) is Mechanical) Equal to False
      • ((Triggering unit) is an illusion) Equal to False
    • Actions
      • Custom script: local string Message1
      • Custom script: local string Message2
      • Custom script: local string Message3
      • Custom script: local sound Sound1
      • Custom script: local sound Sound2
      • Custom script: local sound Sound3
      • If (Spree_Count[(Player number of (Owner of (Killing unit)))] Less than 10) then do (Set Spree_Count[(Player number of (Owner of (Killing unit)))] = (Spree_Count[(Player number of (Owner of (Killing unit)))] + 1)) else do (Do nothing)
      • -------- Kill Message --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Spree_Count[(Player number of (Owner of (Triggering unit)))] Less than or equal to 2
        • Then - Actions
          • -------- You didn't end a spree. --------
          • Set General_Integer[1] = 200
          • Player - Add General_Integer[1] to (Owner of (Killing unit)) Current gold
          • Game - Display to (All players) the text: (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + ((|r just pwned + TextColor[(Player number of (Owner of (Triggering unit)))]) + ((Name of (Owner of (Dying unit))) + (|r's head for |CFFFFFF01 + ((String(Genera
        • Else - Actions
          • -------- You did end a spree. --------
          • Set General_Integer[1] = (300 + Spree_Count[(Player number of (Owner of (Triggering unit)))])
          • Game - Display to (All players) the text: (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + ((|r has just ended + TextColor[(Player number of (Owner of (Triggering unit)))]) + ((Name of (Owner of (Dying unit))) + ((|r's + SpreeEnd_Texts[Spree_Count[(P
      • Set Spree_Count[(Player number of (Owner of (Triggering unit)))] = 0
      • -------- Power --------
      • Player - Add 1 to (Owner of (Killing unit)) Current lumber
      • -------- First Blood --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FirstBlood Equal to False
        • Then - Actions
          • Set FirstBlood = True
          • Player - Add 200 to (Owner of (Killing unit)) Current gold
          • Set General_String[1] = (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + (|r + just drew |CFFFF0303first blood!|r (+200 gold))))
          • Custom script: set Message1 = udg_General_String[1]
          • Custom script: set Sound1 = gg_snd_firstblood
        • Else - Actions
      • -------- Spree --------
      • Set General_String[2] = (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + Spree_Texts[Spree_Count[(Player number of (Owner of (Killing unit)))]]))
      • Custom script: set Message2 = udg_General_String[2]
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Spree_Count[(Player number of (Owner of (Killing unit)))] Less than or equal to 2
        • Then - Actions
          • Custom script: set Message2 = ""
        • Else - Actions
      • Custom script: set Sound2 = udg_Spree_Sounds[udg_Spree_Count[GetConvertedPlayerId(GetOwningPlayer(GetKillingUnit()))]]
      • -------- Double/Triple Kill --------
      • Set General_Point[1] = (Center of (Playable map area))
      • Unit - Create 1 0 Dummy Unit for (Owner of (Killing unit)) at General_Point[1] facing Default building facing degrees
      • Unit - Add a 10.00 second Generic expiration timer to (Last created unit)
      • -------- Double Kill... --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in (Units owned by (Owner of (Killing unit)) of type 0 Dummy Unit)) Equal to 2
        • Then - Actions
          • Set General_String[3] = (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + (|r + |rjust got a |c00FFFF00Double Kill|r!)))
          • Custom script: set Message3 = udg_General_String[3]
          • Custom script: set Sound2 = gg_snd_Double_Kill
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Number of units in (Units owned by (Owner of (Killing unit)) of type 0 Dummy Unit)) Equal to 3
            • Then - Actions
              • Set General_String[3] = (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + (|r + |rjust got a |c00FEBA0ETriple Kill|r!!!)))
              • Custom script: set Message3 = udg_General_String[3]
              • Custom script: set Sound3 = gg_snd_triple_kill
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Number of units in (Units owned by (Owner of (Killing unit)) of type 0 Dummy Unit)) Equal to 4
                • Then - Actions
                  • Set General_String[3] = (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + (|r + |rjust got a |c00FF8000Ultra Kill|r!!!)))
                  • Custom script: set Message3 = udg_General_String[3]
                  • Custom script: set Sound3 = gg_snd_UltraKill
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Number of units in (Units owned by (Owner of (Killing unit)) of type 0 Dummy Unit)) Greater than or equal to 5
                    • Then - Actions
                      • Set General_String[3] = (TextColor[(Player number of (Owner of (Killing unit)))] + ((Name of (Owner of (Killing unit))) + (|r + |ris FU |c00FF0000Rampage|r!!!)))
                      • Custom script: set Message3 = udg_General_String[3]
                      • Custom script: set Sound3 = gg_snd_Rampage
                    • Else - Actions
      • -------- Display Messages & Play Sounds --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TempFirstBlood Equal to True
        • Then - Actions
          • Set TempFirstBlood = False
          • Custom script: call PlaySoundBJ( Sound1 )
          • Custom script: if Message1 != "" then
          • Custom script: call DisplayTextToForce( GetPlayersAll(), Message1 )
          • Custom script: endif
        • Else - Actions
      • Custom script: call PlaySoundBJ( Sound2 )
      • Custom script: if Message2 != "" then
      • Custom script: call DisplayTextToForce( GetPlayersAll(), Message2 )
      • Custom script: endif
      • Custom script: call PlaySoundBJ( Sound3 )
      • Custom script: if Message3 != "" then
      • Custom script: call DisplayTextToForce( GetPlayersAll(), Message3 )
      • Custom script: endif
 
Status
Not open for further replies.
Top