private void HandlePositionQuery(SubPacket subPacket)
        {
            var targetActor = subPacket.header.targetId;
            var sourceActor = subPacket.header.sourceId;

            if (WorldServer.mConnectedPlayerList.TryGetValue(targetActor, out Character character))
            {
                PositionPacket positionQuery = new PositionPacket(character.XPos, character.YPos,
                                                                  true, character.CharacterId);
                SubPacket positionQuerySp = new SubPacket(GamePacketOpCode.PositionQuery, 0, targetActor,
                                                          positionQuery.GetBytes(), SubPacketTypes.GamePacket);
                client.QueuePacket(positionQuerySp, true, false); //TODO: isAuthed
            }
            else
            {
                Console.WriteLine("Sending info to {0} that character ID:{1} has disconnected", client.GetFullAddress(), targetActor);
                DisconnectPacket disconnectedPlayer       = new DisconnectPacket(targetActor);
                SubPacket        disconnectedPlayerPacket = new SubPacket(GamePacketOpCode.OtherPlayerDisconnected, 0, targetActor,
                                                                          disconnectedPlayer.GetBytes(), SubPacketTypes.GamePacket);
                client.QueuePacket(disconnectedPlayerPacket, true, false);
            }
        }
Exemple #2
0
    void RelayMovement()
    {
        PositionPacket posPacket = new PositionPacket(gameObject.transform.position.x, gameObject.transform.position.y, true, Data.CHARACTER_ID);
        SubPacket      sp        = new SubPacket(GamePacketOpCode.PositionPacket, Data.CHARACTER_ID, 0, posPacket.GetBytes(), SubPacketTypes.GamePacket);

        connection.Send(BasePacket.CreatePacket(sp, true, false));
    }
        private void HandleNearbyActorsQuery(SubPacket subPacket)
        {
            PositionsInBoundsPacket posInBoundsPacket = new PositionsInBoundsPacket(subPacket.data);

            client.Character.SetCharacterCameraBounds(posInBoundsPacket.XMin, posInBoundsPacket.XMax, posInBoundsPacket.YMin, posInBoundsPacket.YMax);
            bool             foundNearby      = false;
            List <SubPacket> nearbyCharacters = new List <SubPacket>();
            var connectedPlayers = WorldServer.mConnectedPlayerList.Values.ToList();

            foreach (var connectedPlayer in connectedPlayers)
            {
                if ((connectedPlayer.CharacterId != client.Character.CharacterId) && connectedPlayer.XPos > client.Character.BoundsXMin &&
                    connectedPlayer.XPos < client.Character.BoundsXMax && connectedPlayer.YPos > client.Character.BoundsYMin &&
                    connectedPlayer.YPos < client.Character.BoundsYMax)
                {
                    foundNearby = true;
                    PositionPacket packet = new PositionPacket(connectedPlayer.XPos, connectedPlayer.YPos, true, connectedPlayer.CharacterId);
                    SubPacket      sp     = new SubPacket(GamePacketOpCode.NearbyActorsQuery, 0, connectedPlayer.CharacterId, packet.GetBytes(), SubPacketTypes.GamePacket);
                    nearbyCharacters.Add(sp);
                }
            }
            if (foundNearby)
            {
                client.QueuePacket(BasePacket.CreatePacket(nearbyCharacters, true, false));
                client.FlushQueuedSendPackets();
            }
        }