Hello,
I have been battling with this error for some time now and I really can’t find the source of its problem.
I am creating a multi player game where the server keeps track of all players and their health. I have some functions that go through all the players, stored in a hashtable, which take or add energy to them.
The problem is so strange that in one function I go through the hashtable without any error and remove their energy. When I use the exact same code on a different function to add energy I always get this error:
For the sake of it, I will share the two functions here and maybe you can help me with it!
This RemoveDailyEnergy is working properly
public void RemoveDailyEnergy()
{
Debug.Log("RemoveDailyEnergy");
if (Network.isServer)
{
NetworkViewID[] tmpPlayers = new NetworkViewID[players.Count];
players.Keys.CopyTo(tmpPlayers, 0);
foreach (NetworkViewID player in tmpPlayers)
{
Debug.Log("Remove energy: " + player);
NetworkView tmp = NetworkView.Find(player);
if ((int)players[player] <= dailyEnergyModifier)
{
tmp.RPC("KillPlayer", RPCMode.AllBuffered, player);
players.Remove(player);
teams.Remove(player);
usernames.Remove(player);
}
else
{ //remove energy from player
players[player] = (int)players[player] - dailyEnergyModifier;
if (tmp.isMine)
tmp.gameObject.GetComponent<PlayerHarvestWater>().RemoveEnergy(player, (int)players[player], false);
else
tmp.RPC("RemoveEnergy", player.owner, player, (int)players[player], false);
}
}
}
}
This one isn’t:
public void SetPlayersEnergy(int newEnergy)
{
if (Network.isServer)
{
initialEnergy = newEnergy;
NetworkViewID[] tmpPlayers = new NetworkViewID[players.Count];
players.Keys.CopyTo(tmpPlayers, 0);
foreach (NetworkViewID player in tmpPlayers)
{
Debug.Log("Set energy: " + player);
try
{
NetworkView tmp = NetworkView.Find(player);
players[player] = newEnergy;
if (tmp.isMine)
tmp.gameObject.GetComponent<PlayerHarvestWater>().AddEnergy(player, (int)players[player]);
else
tmp.RPC("AddEnergy", player.owner, player, (int)players[player]);
}
catch (System.Exception e)
{
Debug.Log(e.StackTrace);
}
}
}
}
The error happens on this line:
NetworkView tmp = NetworkView.Find(player);
Any help will be really appreciated!!! Thanks