[Simple] Which player has most kills. Sorting Integer

Discussion in 'World Editor Help' started by RandomUser1, Jul 5, 2016.

  1. RandomUser1

    RandomUser1 New Member

    Ratings:
    +0 / 0 / -0
    Just as the tittle states. It may be simple for some by i do not know how to find this especially when you have 8 players.

    The map at the start caculates how many players are in-game and places the total number in "Players" (Integer)

    Then i have "PlayerKills" (Integer) How do i find out who has the most kills? I dont need 2nd place or 3rd just who has the most of all players.

    Varible List (Both Integer's)
    PlayerKills [array] =
    Players =

    I know i can create individual Trigger pages for each player and checking if the kills are higher then the other but this would be a very ineffecient way and i assume there has to be a better way GUI or Jass
     
    Last edited: Jul 5, 2016
  2. jonas

    jonas Member

    Ratings:
    +40 / 4 / -0
    Add a variable for player with max kills. Loop through the players and if a player has more kills than the current max, make that player the one with max.
     
  3. RandomUser1

    RandomUser1 New Member

    Ratings:
    +0 / 0 / -0
    Thank you!! I think i got it. I will leave this incase anyone else needs help with the same issue.
    Code:
    Untitled Trigger
        Events
            Player - Player 1 (Red) skips a cinematic sequence
        Conditions
        Actions
            Set NumberOfPlayers = 5
            Set PlayerScores[(Player number of Player 1 (Red))] = (Random integer number between 1 and 100)
            Set PlayerScores[(Player number of Player 2 (Blue))] = (Random integer number between 1 and 100)
            Set PlayerScores[(Player number of Player 3 (Teal))] = (Random integer number between 1 and 100)
            Set PlayerScores[(Player number of Player 4 (Purple))] = (Random integer number between 1 and 100)
            Set PlayerScores[(Player number of Player 5 (Yellow))] = (Random integer number between 1 and 100)
            For each (Integer A) from 1 to NumberOfPlayers, do (Actions)
                Loop - Actions
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            PlayerScores[(Integer A)] Greater than Max
                        Then - Actions
                            Set Max = PlayerScores[(Integer A)]
                            Set WinnerPlayer = (Integer A)
                        Else - Actions
            Game - Display to (All players) the text: (The player with the highest points is  + (Player  + (String(WinnerPlayer))))
            Game - Display to (All players) the text: (String(PlayerScores[(Player number of Player 1 (Red))]))
            Game - Display to (All players) the text: (String(PlayerScores[(Player number of Player 2 (Blue))]))
            Game - Display to (All players) the text: (String(PlayerScores[(Player number of Player 3 (Teal))]))
            Game - Display to (All players) the text: (String(PlayerScores[(Player number of Player 4 (Purple))]))
            Game - Display to (All players) the text: (String(PlayerScores[(Player number of Player 5 (Yellow))]))
            Set Max = 0
     
    Last edited: Jul 5, 2016
  4. RandomUser1

    RandomUser1 New Member

    Ratings:
    +0 / 0 / -0
    Weird. I tried to turn it into jass. It is about 80% accurate?
    JASS:
        local integer i
        set udg_NumberOfPlayers = 5
        set udg_PlayerScores[GetConvertedPlayerId(Player(0))] = GetRandomInt(1, 100)
        set udg_PlayerScores[GetConvertedPlayerId(Player(1))] = GetRandomInt(1, 100)
        set udg_PlayerScores[GetConvertedPlayerId(Player(2))] = GetRandomInt(1, 100)
        set udg_PlayerScores[GetConvertedPlayerId(Player(3))] = GetRandomInt(1, 100)
        set udg_PlayerScores[GetConvertedPlayerId(Player(4))] = GetRandomInt(1, 100)
        set i = 0
        loop
            exitwhen i >= udg_NumberOfPlayers
            if udg_Max < udg_PlayerScores[i] then
                set udg_Max = udg_PlayerScores[i]
                set udg_WinnerPlayer = i
            endif
            set i = i + 1
        endloop
        call DisplayTextToForce( GetPlayersAll(), ( "The player with the highest points is " + ( "Player " + I2S(udg_WinnerPlayer) ) ) )
        call DisplayTextToForce( GetPlayersAll(), I2S(udg_PlayerScores[GetConvertedPlayerId(Player(0))]) )
        call DisplayTextToForce( GetPlayersAll(), I2S(udg_PlayerScores[GetConvertedPlayerId(Player(1))]) )
        call DisplayTextToForce( GetPlayersAll(), I2S(udg_PlayerScores[GetConvertedPlayerId(Player(2))]) )
        call DisplayTextToForce( GetPlayersAll(), I2S(udg_PlayerScores[GetConvertedPlayerId(Player(3))]) )
        call DisplayTextToForce( GetPlayersAll(), I2S(udg_PlayerScores[GetConvertedPlayerId(Player(4))]) )
        set udg_Max = 0
     
    Last edited: Jul 5, 2016
  5. tom_mai78101

    tom_mai78101 The Helper Connoisseur / Ex-MineCraft Host Staff Member

    Ratings:
    +946 / 4 / -1
    At this point, how would you deem it to be correct?

    Also, you know you can do 2 more loops? It will look nicer.
     
  6. RandomUser1

    RandomUser1 New Member

    Ratings:
    +0 / 0 / -0
    EDIT: After several hours of attempting to fix it. I managed to get it to work. Thank you to all that helped :)
     
    Last edited: Jul 5, 2016
  7. tom_mai78101

    tom_mai78101 The Helper Connoisseur / Ex-MineCraft Host Staff Member

    Ratings:
    +946 / 4 / -1
    If possible, please post your working code!
     

Share This Page