Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
            }
        }