public void AddPlayer(Session playerSession, Replica character) { ushort characterNetworkId = 0; bool generateNetworkId = false; if (characterNetworkIdCache.ContainsKey(character.ObjectId)) { characterNetworkId = characterNetworkIdCache[character.ObjectId]; if (objects.ContainsValue(characterNetworkId)) { generateNetworkId = true; } } else { generateNetworkId = true; } if (generateNetworkId) { characterNetworkId = GenerateNetworkId(); characterNetworkIdCache[character.ObjectId] = characterNetworkId; } Quicksicle.Core.Server.Instance.Logger.Log("Constructing " + character.Name + " with network ID " + characterNetworkId); foreach (Replica replica in objects.Keys) { ushort networkId = objects[replica]; ConstructToPlayer(replica, networkId, playerSession); } ConstructToPlayer(character, characterNetworkId, playerSession); foreach (Session otherPlayerSession in playerSessions) { ConstructToPlayer(character, characterNetworkId, otherPlayerSession); } playerSession.ActiveCharacterReplica = character; objects[character] = characterNetworkId; playerSessions.Add(playerSession); }
public void RemovePlayer(Session playerSession) { Replica replica = playerSession.ActiveCharacterReplica; if (replica != null) { ushort networkId = objects[replica]; objects.Remove(replica); playerSessions.Remove(playerSession); foreach (Session otherPlayerSession in playerSessions) { DestructToPlayer(networkId, otherPlayerSession); } DestructToPlayer(networkId, playerSession); playerSession.ActiveCharacterReplica = null; } }