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