private void ParcelInfoReplyHandler(Packet packet, Simulator simulator) { if (ParcelInfoParcel != null) { ParcelInfoReplyPacket reply = (ParcelInfoReplyPacket)packet; if (!reply.Data.ParcelID.Equals(ParcelInfoParcel.ID)) { Client.Log("Received a ParcelInfoReply for " + reply.Data.ParcelID.ToString() + ", looking for " + ParcelInfoParcel.ID.ToString(), Helpers.LogLevel.Warning); // Build and resend the ParcelInfoRequest packet ParcelInfoRequestPacket request = new ParcelInfoRequestPacket(); request.AgentData.AgentID = Client.Network.AgentID; request.AgentData.SessionID = Client.Network.SessionID; request.Data.ParcelID = ParcelInfoParcel.ID; Client.Network.SendPacket(request); return; } ParcelInfoParcel.SimName = Helpers.FieldToString(reply.Data.SimName); ParcelInfoParcel.ActualArea = reply.Data.ActualArea; ParcelInfoParcel.GlobalPosition.X = reply.Data.GlobalX; ParcelInfoParcel.GlobalPosition.Y = reply.Data.GlobalY; ParcelInfoParcel.GlobalPosition.Z = reply.Data.GlobalZ; ParcelInfoParcel.Name = Helpers.FieldToString(reply.Data.Name); ParcelInfoParcel.Desc = Helpers.FieldToString(reply.Data.Desc); ParcelInfoParcel.SalePrice = reply.Data.SalePrice; ParcelInfoParcel.OwnerID = reply.Data.OwnerID; ParcelInfoParcel.SnapshotID = reply.Data.SnapshotID; ParcelInfoParcel.Dwell = reply.Data.Dwell; // Get RegionHandle from GlobalX/GlobalY uint handleX = (uint)Math.Floor(ParcelInfoParcel.GlobalPosition.X / 256.0F); handleX *= 256; uint handleY = (uint)Math.Floor(ParcelInfoParcel.GlobalPosition.Y / 256.0F); handleY *= 256; // FIXME: Helpers function needed //ParcelInfoParcel.RegionHandle = new U64(handleX, handleY); // Get SimPosition from GlobalX/GlobalY and RegionHandle ParcelInfoParcel.SimPosition.X = ParcelInfoParcel.GlobalPosition.X - (float)handleX; ParcelInfoParcel.SimPosition.Y = ParcelInfoParcel.GlobalPosition.Y - (float)handleY; ParcelInfoParcel.SimPosition.Z = ParcelInfoParcel.GlobalPosition.Z; Finished = true; } }
private void ParcelInfoRequestHandler(Packet packet, LLAgent agent) { ParcelInfoRequestPacket request = (ParcelInfoRequestPacket)packet; SceneParcel parcel; if (m_parcels.TryGetParcel(request.Data.ParcelID, out parcel)) { Vector3d scenePosition = m_scene.MinPosition; Vector3 aabbMin, aabbMax; ParcelInfoReplyPacket reply = new ParcelInfoReplyPacket(); reply.AgentData.AgentID = agent.ID; reply.Data.ActualArea = ParcelManager.GetParcelArea(parcel, out aabbMin, out aabbMax); reply.Data.AuctionID = 0; reply.Data.BillableArea = reply.Data.ActualArea; reply.Data.Desc = Utils.StringToBytes(parcel.Desc); reply.Data.Dwell = parcel.Dwell; reply.Data.Flags = (byte)parcel.Flags; reply.Data.GlobalX = (float)scenePosition.X + aabbMin.X; reply.Data.GlobalY = (float)scenePosition.Y + aabbMin.Y; reply.Data.GlobalZ = 0f; // FIXME: reply.Data.Name = Utils.StringToBytes(parcel.Name); reply.Data.OwnerID = parcel.OwnerID; reply.Data.ParcelID = parcel.ID; reply.Data.SalePrice = parcel.SalePrice; reply.Data.SimName = Utils.StringToBytes(m_scene.Name); reply.Data.SnapshotID = parcel.SnapshotID; m_udp.SendPacket(agent, reply, ThrottleCategory.Task, false); } else { m_log.Warn(agent.Name + " requested info for unknown parcel " + request.Data.ParcelID); } }
/// <summary> /// Request basic information for a single parcel /// </summary> /// <param name="parcelID">Simulator-local ID of the parcel</param> public void RequestParcelInfo(UUID parcelID) { ParcelInfoRequestPacket request = new ParcelInfoRequestPacket(); request.AgentData.AgentID = Client.Self.AgentID; request.AgentData.SessionID = Client.Self.SessionID; request.Data.ParcelID = parcelID; Client.Network.SendPacket(request); }
/// <summary> /// Request basic information for a single parcel /// </summary> /// <param name="parcelID">Simulator-local ID of the parcel</param> public void InfoRequest(UUID parcelID) { ParcelInfoRequestPacket request = new ParcelInfoRequestPacket(); request.AgentData.AgentID = Network.AgentID; request.AgentData.SessionID = Network.SessionID; request.Data.ParcelID = parcelID; Network.SendPacket(request); }