- Home /
Foreach - what am I doing wrong?
What I am trying to do: The class "Player" saves the stats for each individual. I am trying to find out the local player's rank in the match. I do this by making the variable "plRank" equal to the total amount of player's ingame (this works perfectly fine) and then subtract (--) for each player that has a lower score than the player. For some reason, this value always ends up being "0". Anybody know why?
[RPC]
void ShowMyKill(string MyName)
{
//MyPlayer.Score += 100;
NetworkManager.GetPlayer(MyName).Score += 100;
NetworkManager.GetPlayer(MyName).Kills ++;
MyPlayer.plRank = NetworkManager.Instance.PlayerList.Count;
Debug.Log(MyPlayer.plRank + " b4 getting rank");
foreach(Player pl in NetworkManager.Instance.PlayerList)
{
if(pl.Score <= MyPlayer.Score)
{
MyPlayer.plRank --;
}
}
GUIManager.Instance.CurRank = MyPlayer.plRank;
Debug.Log(MyPlayer.plRank + " after getting Rank");
}
I assume the debug on line 7 prints out something other than 0?
Yes. Your debug actually revealed a lot of very odd bugs in the script....damn -.- First off, the player was also comparing their own score with themselves which partly explains why they would subtract an extra rank...there is another reason but that has nothing to do with the question. Argghhh the joys of coding xD
Another update (sorry these are going out quick): After I killed the player 2 times in a row, the whole thing worked properly. I think that the problem was due to the fact that things were not sent around quick enough and therefore the engine did not have a value to insert for the other player. I'll have to see what I can do about it.
I'd guess the problem is when a player's score is unset it might evaluate to higher than the user's score
Answer by perchik · Apr 07, 2014 at 06:06 PM
yeah I'd do something like:
Debug.Log(MyPlayer.plRank + " b4 getting rank");
foreach(Player pl in NetworkManager.Instance.PlayerList)
{
Debug.Log("comparing against player:" + pl.name );
Debug.Log("his score: "+pl.Score + " and mine: "+myPlayer.Score);
if(pl.Score <= MyPlayer.Score)
{ Debug.Log("before rank change " + MyPlayer.plRank);
MyPlayer.plRank --;
Debug.Log("after rank change" + myPlayer.plRank);
}
}
Debug.Log("done comparing, my rank is now "+ myPlayer.plRank);