Пример #1
0
        private void ResolveReceiveWorldStatus(NwWorldStatus status)
        {
            for (var i = 0; i < status.Players.Length; i++)
            {
                var          p = status.Players[i];
                WalkerPlayer player;
                if ((player = worldData.Players.Find(pl => pl.SessionID == p.SessionID)) != null)
                {
                    player.Update(p);
                }
                else
                {
                    JoinPlayer(p);
                }
            }
            foreach (var p in worldData.Players)
            {
                WalkerPlayer player;
                if ((player = Array.Find(status.Players, pl => pl.SessionID == p.SessionID)) == null)
                {
                    LeavePlayer(player);
                }
            }

            foreach (var o in status.WorldObjects)
            {
                if (SyncWorldObjects.Exists(obj => obj.Hash == o.Hash))
                {
                    continue;
                }

                try
                {
                    var wo = Resources.Objects[o.ObjectHash];

                    if (wo.ItemType == "Put")
                    {
                        PutGameObject(o, true);
                    }
                    else if (wo.ItemType == "Use")
                    {
                        ItemUse(o, Array.Find(status.Players, pl => pl.UserID == o.UserID), true);
                    }
                }
                catch { }
            }

            foreach (var obj in SyncWorldObjects)
            {
                NwWalkerGameObject wo;
                if ((wo = Array.Find(status.WorldObjects, o => o.Hash == obj.Hash)) != null)
                {
                    continue;
                }

                RemoveGameObject(obj);
            }
        }