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); } }