Unity bug? NetworkView Find problem

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

bump

Please help, I’m getting out of time to solve this!!!

You might want to try posting this in the Networking Section…