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(); } }
private void QueryForNearybyActors() { PositionsInBoundsPacket packet = new PositionsInBoundsPacket(cameraBounds.min.x, cameraBounds.max.x, cameraBounds.min.y, cameraBounds.max.y); //Debug.Log(cameraBounds.min.x + "," + cameraBounds.min.y + "," + cameraBounds.max.x + "," + cameraBounds.max.y); SubPacket sp = new SubPacket(GamePacketOpCode.NearbyActorsQuery, Data.CHARACTER_ID, 0, packet.GetBytes(), SubPacketTypes.GamePacket); connection.Send(BasePacket.CreatePacket(sp, PacketProcessor.isAuthenticated, false)); }