* Minor typing fixes in AssetCache - now uses base types for nearly everything.

* Code Cleanliness Fixes in LLClientView
* Using field instead of local variable for handlerUpdatePrimGroupRotation (if you notice any new oddities with prim group rotation after this patch, please mantis)
0.6.1-post-fixes
Adam Frisby 2008-11-11 17:48:36 +00:00
parent 97816f8c90
commit 1493f7349f
2 changed files with 56 additions and 85 deletions

View File

@ -193,6 +193,7 @@ namespace OpenSim.Framework.Communications.Cache
/// </summary> /// </summary>
/// <param name="assetId"></param> /// <param name="assetId"></param>
/// <param name="callback"> /// <param name="callback">
/// <param name="isTexture"></param>
/// A callback invoked when the asset has either been found or not found. /// A callback invoked when the asset has either been found or not found.
/// If the asset was found this is called with the asset UUID and the asset data /// If the asset was found this is called with the asset UUID and the asset data
/// If the asset was not found this is still called with the asset UUID but with a null asset data reference</param> /// If the asset was not found this is still called with the asset UUID but with a null asset data reference</param>
@ -260,7 +261,7 @@ namespace OpenSim.Framework.Communications.Cache
{ {
// I'm not going over 3 seconds since this will be blocking processing of all the other inbound // I'm not going over 3 seconds since this will be blocking processing of all the other inbound
// packets from the client. // packets from the client.
int pollPeriod = 200; const int pollPeriod = 200;
int maxPolls = 15; int maxPolls = 15;
AssetBase asset; AssetBase asset;
@ -528,18 +529,18 @@ namespace OpenSim.Framework.Communications.Cache
AssetRequestToClient req2 = null; AssetRequestToClient req2 = null;
for (int i = 0; i < num; i++) for (int i = 0; i < num; i++)
{ {
req = (AssetRequest)AssetRequests[i]; req = AssetRequests[i];
if (req2 == null) if (req2 == null)
{ {
req2 = new AssetRequestToClient(); req2 = new AssetRequestToClient();
} }
// Trying to limit memory usage by only creating AssetRequestToClient if needed // Trying to limit memory usage by only creating AssetRequestToClient if needed
//req2 = new AssetRequestToClient(); //req2 = new AssetRequestToClient();
req2.AssetInf = (AssetBase)req.AssetInf; req2.AssetInf = req.AssetInf;
req2.AssetRequestSource = req.AssetRequestSource; req2.AssetRequestSource = req.AssetRequestSource;
req2.DataPointer = req.DataPointer; req2.DataPointer = req.DataPointer;
req2.DiscardLevel = req.DiscardLevel; req2.DiscardLevel = req.DiscardLevel;
req2.ImageInfo = (AssetBase)req.ImageInfo; req2.ImageInfo = req.ImageInfo;
req2.IsTextureRequest = req.IsTextureRequest; req2.IsTextureRequest = req.IsTextureRequest;
req2.NumPackets = req.NumPackets; req2.NumPackets = req.NumPackets;
req2.PacketCounter = req.PacketCounter; req2.PacketCounter = req.PacketCounter;

View File

@ -528,8 +528,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
KickUserPacket kupack = (KickUserPacket)PacketPool.Instance.GetPacket(PacketType.KickUser); KickUserPacket kupack = (KickUserPacket)PacketPool.Instance.GetPacket(PacketType.KickUser);
kupack.UserInfo.AgentID = AgentId; kupack.UserInfo.AgentID = AgentId;
kupack.UserInfo.SessionID = SessionId; kupack.UserInfo.SessionID = SessionId;
kupack.TargetBlock.TargetIP = (uint)0; kupack.TargetBlock.TargetIP = 0;
kupack.TargetBlock.TargetPort = (ushort)0; kupack.TargetBlock.TargetPort = 0;
kupack.UserInfo.Reason = Utils.StringToBytes(message); kupack.UserInfo.Reason = Utils.StringToBytes(message);
OutPacket(kupack, ThrottleOutPacketType.Task); OutPacket(kupack, ThrottleOutPacketType.Task);
// You must sleep here or users get no message! // You must sleep here or users get no message!
@ -744,7 +744,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Ping the client regularly to check that it's still there // Ping the client regularly to check that it's still there
m_clientPingTimer = new Timer(5000); m_clientPingTimer = new Timer(5000);
m_clientPingTimer.Elapsed += new ElapsedEventHandler(CheckClientConnectivity); m_clientPingTimer.Elapsed += CheckClientConnectivity;
m_clientPingTimer.Enabled = true; m_clientPingTimer.Enabled = true;
m_scene.AddNewClient(this, true); m_scene.AddNewClient(this, true);
@ -765,10 +765,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
InitNewClient(); InitNewClient();
ClientLoop(); ClientLoop();
} }
catch (System.Exception e) catch (Exception e)
{ {
if (e is ThreadAbortException) if (e is ThreadAbortException)
throw e; throw;
if (StatsManager.SimExtraStats != null) if (StatsManager.SimExtraStats != null)
StatsManager.SimExtraStats.AddAbnormalClientThreadTermination(); StatsManager.SimExtraStats.AddAbnormalClientThreadTermination();
@ -798,7 +798,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
catch (Exception e2) catch (Exception e2)
{ {
if (e2 is ThreadAbortException) if (e2 is ThreadAbortException)
throw e2; throw;
m_log.ErrorFormat("[CLIENT]: Further exception thrown on forced session logout. {0}", e2); m_log.ErrorFormat("[CLIENT]: Further exception thrown on forced session logout. {0}", e2);
} }
@ -1024,7 +1024,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="regInfo"></param>
public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look) public void MoveAgentIntoRegion(RegionInfo regInfo, Vector3 pos, Vector3 look)
{ {
AgentMovementCompletePacket mov = (AgentMovementCompletePacket)PacketPool.Instance.GetPacket(PacketType.AgentMovementComplete); AgentMovementCompletePacket mov = (AgentMovementCompletePacket)PacketPool.Instance.GetPacket(PacketType.AgentMovementComplete);
@ -1130,7 +1129,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <param name="map">heightmap</param> /// <param name="map">heightmap</param>
public virtual void SendLayerData(float[] map) public virtual void SendLayerData(float[] map)
{ {
ThreadPool.QueueUserWorkItem(new WaitCallback(DoSendLayerData), (object)map); ThreadPool.QueueUserWorkItem(DoSendLayerData, map);
} }
/// <summary> /// <summary>
@ -1161,7 +1160,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
catch (Exception e) catch (Exception e)
{ {
m_log.Warn("[CLIENT]: ClientView.API.cs: SendLayerData() - Failed with exception " + e.ToString()); m_log.Warn("[CLIENT]: ClientView.API.cs: SendLayerData() - Failed with exception " + e);
} }
} }
@ -1250,30 +1249,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(layerpack, ThrottleOutPacketType.Wind); OutPacket(layerpack, ThrottleOutPacketType.Wind);
} }
/// <summary>
/// Sends a set of four patches (x, x+1, ..., x+3) to the client
/// </summary>
/// <param name="map">heightmap</param>
/// <param name="px">X coordinate for patches 0..12</param>
/// <param name="py">Y coordinate for patches 0..15</param>
// private void SendLayerPacket(float[] map, int y, int x)
// {
// int[] patches = new int[4];
// patches[0] = x + 0 + y * 16;
// patches[1] = x + 1 + y * 16;
// patches[2] = x + 2 + y * 16;
// patches[3] = x + 3 + y * 16;
// Packet layerpack = LLClientView.TerrainManager.CreateLandPacket(map, patches);
// OutPacket(layerpack, ThrottleOutPacketType.Land);
// }
/// <summary> /// <summary>
/// Tell the client that the given neighbour region is ready to receive a child agent. /// Tell the client that the given neighbour region is ready to receive a child agent.
/// </summary> /// </summary>
/// <param name="neighbourHandle"></param>
/// <param name="neighbourIP"></param>
/// <param name="neighbourPort"></param>
public void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourEndPoint) public void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourEndPoint)
{ {
IPAddress neighbourIP = neighbourEndPoint.Address; IPAddress neighbourIP = neighbourEndPoint.Address;
@ -1705,7 +1683,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public void SendInventoryItemDetails(UUID ownerID, InventoryItemBase item) public void SendInventoryItemDetails(UUID ownerID, InventoryItemBase item)
{ {
uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All; const uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All;
FetchInventoryReplyPacket inventoryReply = (FetchInventoryReplyPacket)PacketPool.Instance.GetPacket(PacketType.FetchInventoryReply); FetchInventoryReplyPacket inventoryReply = (FetchInventoryReplyPacket)PacketPool.Instance.GetPacket(PacketType.FetchInventoryReply);
// TODO: don't create new blocks if recycling an old packet // TODO: don't create new blocks if recycling an old packet
inventoryReply.AgentData.AgentID = AgentId; inventoryReply.AgentData.AgentID = AgentId;
@ -1750,7 +1729,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <see>IClientAPI.SendBulkUpdateInventory(InventoryItemBase)</see> /// <see>IClientAPI.SendBulkUpdateInventory(InventoryItemBase)</see>
public void SendBulkUpdateInventory(InventoryItemBase item) public void SendBulkUpdateInventory(InventoryItemBase item)
{ {
uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All; const uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All;
BulkUpdateInventoryPacket bulkUpdate BulkUpdateInventoryPacket bulkUpdate
= (BulkUpdateInventoryPacket)PacketPool.Instance.GetPacket(PacketType.BulkUpdateInventory); = (BulkUpdateInventoryPacket)PacketPool.Instance.GetPacket(PacketType.BulkUpdateInventory);
@ -1805,7 +1784,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <see>IClientAPI.SendInventoryItemCreateUpdate(InventoryItemBase)</see> /// <see>IClientAPI.SendInventoryItemCreateUpdate(InventoryItemBase)</see>
public void SendInventoryItemCreateUpdate(InventoryItemBase Item) public void SendInventoryItemCreateUpdate(InventoryItemBase Item)
{ {
uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All; const uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All;
UpdateCreateInventoryItemPacket InventoryReply UpdateCreateInventoryItemPacket InventoryReply
= (UpdateCreateInventoryItemPacket)PacketPool.Instance.GetPacket( = (UpdateCreateInventoryItemPacket)PacketPool.Instance.GetPacket(
@ -2295,11 +2274,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// Send a terse positional/rotation/velocity update about an avatar to the client. This avatar can be that of /// Send a terse positional/rotation/velocity update about an avatar to the client. This avatar can be that of
/// the client itself. /// the client itself.
/// </summary> /// </summary>
/// <param name="regionHandle"></param>
/// <param name="timeDilation"></param>
/// <param name="localID"></param>
/// <param name="position"></param>
/// <param name="velocity"></param>
public void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position, public void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, Vector3 position,
Vector3 velocity, Quaternion rotation) Vector3 velocity, Quaternion rotation)
{ {
@ -2690,7 +2664,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket();
packet.AgentData.TransactionID = UUID.Random(); packet.AgentData.TransactionID = UUID.Random();
packet.AgentData.AgentID = AgentId; packet.AgentData.AgentID = AgentId;
packet.AgentData.SessionID = this.SessionId; packet.AgentData.SessionID = SessionId;
packet.MethodData.Invoice = invoice; packet.MethodData.Invoice = invoice;
packet.MethodData.Method = Utils.StringToBytes("setaccess"); packet.MethodData.Method = Utils.StringToBytes("setaccess");
@ -2714,7 +2688,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
packet.ParamList = returnblock; packet.ParamList = returnblock;
packet.Header.Reliable = false; packet.Header.Reliable = false;
this.OutPacket(packet, ThrottleOutPacketType.Task); OutPacket(packet, ThrottleOutPacketType.Task);
} }
public void SendBannedUserList(UUID invoice, EstateBan[] bl, uint estateID) public void SendBannedUserList(UUID invoice, EstateBan[] bl, uint estateID)
@ -2733,7 +2707,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket();
packet.AgentData.TransactionID = UUID.Random(); packet.AgentData.TransactionID = UUID.Random();
packet.AgentData.AgentID = AgentId; packet.AgentData.AgentID = AgentId;
packet.AgentData.SessionID = this.SessionId; packet.AgentData.SessionID = SessionId;
packet.MethodData.Invoice = invoice; packet.MethodData.Invoice = invoice;
packet.MethodData.Method = Utils.StringToBytes("setaccess"); packet.MethodData.Method = Utils.StringToBytes("setaccess");
@ -2758,7 +2732,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
packet.ParamList = returnblock; packet.ParamList = returnblock;
packet.Header.Reliable = false; packet.Header.Reliable = false;
this.OutPacket(packet, ThrottleOutPacketType.Task); OutPacket(packet, ThrottleOutPacketType.Task);
} }
public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args) public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args)
@ -2766,7 +2740,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
RegionInfoPacket rinfopack = new RegionInfoPacket(); RegionInfoPacket rinfopack = new RegionInfoPacket();
RegionInfoPacket.RegionInfoBlock rinfoblk = new RegionInfoPacket.RegionInfoBlock(); RegionInfoPacket.RegionInfoBlock rinfoblk = new RegionInfoPacket.RegionInfoBlock();
rinfopack.AgentData.AgentID = AgentId; rinfopack.AgentData.AgentID = AgentId;
rinfopack.AgentData.SessionID = this.SessionId; rinfopack.AgentData.SessionID = SessionId;
rinfoblk.BillableFactor = args.billableFactor; rinfoblk.BillableFactor = args.billableFactor;
rinfoblk.EstateID = args.estateID; rinfoblk.EstateID = args.estateID;
rinfoblk.MaxAgents = args.maxAgents; rinfoblk.MaxAgents = args.maxAgents;
@ -2786,7 +2760,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
rinfopack.RegionInfo = rinfoblk; rinfopack.RegionInfo = rinfoblk;
this.OutPacket(rinfopack, ThrottleOutPacketType.Task); OutPacket(rinfopack, ThrottleOutPacketType.Task);
} }
public void SendEstateCovenantInformation(UUID covenant) public void SendEstateCovenantInformation(UUID covenant)
@ -2801,7 +2775,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
edata.EstateOwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; edata.EstateOwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
edata.EstateName = Utils.StringToBytes(m_scene.RegionInfo.EstateSettings.EstateName); edata.EstateName = Utils.StringToBytes(m_scene.RegionInfo.EstateSettings.EstateName);
einfopack.Data = edata; einfopack.Data = edata;
this.OutPacket(einfopack, ThrottleOutPacketType.Task); OutPacket(einfopack, ThrottleOutPacketType.Task);
} }
public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner) public void SendDetailedEstateData(UUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, UUID covenant, string abuseEmail, UUID estateOwner)
@ -2835,7 +2809,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
packet.ParamList = returnblock; packet.ParamList = returnblock;
packet.Header.Reliable = false; packet.Header.Reliable = false;
//System.Console.WriteLine("[ESTATE]: SIM--->" + packet.ToString()); //System.Console.WriteLine("[ESTATE]: SIM--->" + packet.ToString());
this.OutPacket(packet, ThrottleOutPacketType.Task); OutPacket(packet, ThrottleOutPacketType.Task);
} }
#endregion #endregion
@ -2844,13 +2818,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public void SendLandParcelOverlay(byte[] data, int sequence_id) public void SendLandParcelOverlay(byte[] data, int sequence_id)
{ {
ParcelOverlayPacket packet = (ParcelOverlayPacket)PacketPool.Instance.GetPacket(PacketType.ParcelOverlay);
ParcelOverlayPacket packet;
packet = (ParcelOverlayPacket)PacketPool.Instance.GetPacket(PacketType.ParcelOverlay);
packet.ParcelData.Data = data; packet.ParcelData.Data = data;
packet.ParcelData.SequenceID = sequence_id; packet.ParcelData.SequenceID = sequence_id;
packet.Header.Zerocoded = true; packet.Header.Zerocoded = true;
this.OutPacket(packet, ThrottleOutPacketType.Task); OutPacket(packet, ThrottleOutPacketType.Task);
} }
public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
@ -2873,7 +2845,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
updatePacket.ParcelData.GroupID = landData.GroupID; updatePacket.ParcelData.GroupID = landData.GroupID;
updatePacket.ParcelData.GroupPrims = landData.GroupPrims; updatePacket.ParcelData.GroupPrims = landData.GroupPrims;
updatePacket.ParcelData.IsGroupOwned = landData.IsGroupOwned; updatePacket.ParcelData.IsGroupOwned = landData.IsGroupOwned;
updatePacket.ParcelData.LandingType = (byte)landData.LandingType; updatePacket.ParcelData.LandingType = landData.LandingType;
updatePacket.ParcelData.LocalID = landData.LocalID; updatePacket.ParcelData.LocalID = landData.LocalID;
if (landData.Area > 0) if (landData.Area > 0)
@ -2934,7 +2906,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
updatePacket.ParcelData.UserLookAt = landData.UserLookAt; updatePacket.ParcelData.UserLookAt = landData.UserLookAt;
updatePacket.Header.Zerocoded = true; updatePacket.Header.Zerocoded = true;
OutPacket((Packet)updatePacket, ThrottleOutPacketType.Task); OutPacket(updatePacket, ThrottleOutPacketType.Task);
} }
public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID) public void SendLandAccessListData(List<UUID> avatars, uint accessFlag, int localLandID)
@ -2956,13 +2928,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
replyPacket.List = list.ToArray(); replyPacket.List = list.ToArray();
replyPacket.Header.Zerocoded = true; replyPacket.Header.Zerocoded = true;
this.OutPacket((Packet)replyPacket, ThrottleOutPacketType.Task); OutPacket(replyPacket, ThrottleOutPacketType.Task);
} }
public void SendForceClientSelectObjects(List<uint> ObjectIDs) public void SendForceClientSelectObjects(List<uint> ObjectIDs)
{ {
bool firstCall = true; bool firstCall = true;
int MAX_OBJECTS_PER_PACKET = 251; const int MAX_OBJECTS_PER_PACKET = 251;
ForceObjectSelectPacket pack = (ForceObjectSelectPacket)PacketPool.Instance.GetPacket(PacketType.ForceObjectSelect); ForceObjectSelectPacket pack = (ForceObjectSelectPacket)PacketPool.Instance.GetPacket(PacketType.ForceObjectSelect);
ForceObjectSelectPacket.DataBlock[] data; ForceObjectSelectPacket.DataBlock[] data;
while (ObjectIDs.Count > 0) while (ObjectIDs.Count > 0)
@ -2995,7 +2967,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
} }
pack.Data = data; pack.Data = data;
pack.Header.Zerocoded = true; pack.Header.Zerocoded = true;
this.OutPacket((Packet)pack, ThrottleOutPacketType.Task); OutPacket(pack, ThrottleOutPacketType.Task);
} }
} }
@ -3070,21 +3042,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
byte[] pb = pos.GetBytes(); byte[] pb = pos.GetBytes();
Array.Copy(pb, 0, bytes, i, pb.Length); Array.Copy(pb, 0, bytes, i, pb.Length);
i += 12; i += 12;
ushort InternVelocityX;
ushort InternVelocityY;
ushort InternVelocityZ;
Vector3 internDirec = new Vector3(0, 0, 0);
internDirec = new Vector3(velocity.X, velocity.Y, velocity.Z); Vector3 internDirec = new Vector3(velocity.X, velocity.Y, velocity.Z);
internDirec = internDirec / 128.0f; internDirec = internDirec / 128.0f;
internDirec.X += 1; internDirec.X += 1;
internDirec.Y += 1; internDirec.Y += 1;
internDirec.Z += 1; internDirec.Z += 1;
InternVelocityX = (ushort)(32768 * internDirec.X); ushort InternVelocityX = (ushort)(32768 * internDirec.X);
InternVelocityY = (ushort)(32768 * internDirec.Y); ushort InternVelocityY = (ushort)(32768 * internDirec.Y);
InternVelocityZ = (ushort)(32768 * internDirec.Z); ushort InternVelocityZ = (ushort)(32768 * internDirec.Z);
ushort ac = 32767; ushort ac = 32767;
bytes[i++] = (byte)(InternVelocityX % 256); bytes[i++] = (byte)(InternVelocityX % 256);
@ -3208,7 +3176,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
bytes[i++] = (byte)((rw >> 8) % 256); bytes[i++] = (byte)((rw >> 8) % 256);
//rotation vel //rotation vel
ushort rvelx, rvely, rvelz;
Vector3 rvel = new Vector3(rotationalvelocity.X, rotationalvelocity.Y, rotationalvelocity.Z); Vector3 rvel = new Vector3(rotationalvelocity.X, rotationalvelocity.Y, rotationalvelocity.Z);
rvel = rvel / 128.0f; rvel = rvel / 128.0f;
@ -3216,9 +3183,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
rvel.Y += 1; rvel.Y += 1;
rvel.Z += 1; rvel.Z += 1;
//vel //vel
rvelx = (ushort)(32768 * (rvel.X)); ushort rvelx = (ushort)(32768 * (rvel.X));
rvely = (ushort)(32768 * (rvel.Y)); ushort rvely = (ushort)(32768 * (rvel.Y));
rvelz = (ushort)(32768 * (rvel.Z)); ushort rvelz = (ushort)(32768 * (rvel.Z));
bytes[i++] = (byte)(rvelx % 256); bytes[i++] = (byte)(rvelx % 256);
bytes[i++] = (byte)((rvelx >> 8) % 256); bytes[i++] = (byte)((rvelx >> 8) % 256);
@ -3540,6 +3507,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{ {
XmlDocument doc = new XmlDocument(); XmlDocument doc = new XmlDocument();
doc.Load(reader); doc.Load(reader);
if (doc.DocumentElement != null)
foreach (XmlNode nod in doc.DocumentElement.ChildNodes) foreach (XmlNode nod in doc.DocumentElement.ChildNodes)
{ {
if (nod.Attributes["name"] != null) if (nod.Attributes["name"] != null)
@ -3651,7 +3619,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
else else
{ {
// UUID partId = part.UUID; // UUID partId = part.UUID;
UpdatePrimRotation handlerUpdatePrimRotation;
UpdatePrimGroupRotation handlerUpdatePrimGroupRotation; UpdatePrimGroupRotation handlerUpdatePrimGroupRotation;
switch (block.Type) switch (block.Type)
@ -3914,10 +3881,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
float locx; float locx;
float locy; float locy;
float locz; float locz;
uint regionX;
uint regionY;
try try
{ {
uint regionX;
uint regionY;
Helpers.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY); Helpers.LongToUInts(Scene.RegionInfo.RegionHandle, out regionX, out regionY);
locx = Convert.ToSingle(Utils.BytesToString(gmParams[0].Parameter)) - regionX; locx = Convert.ToSingle(Utils.BytesToString(gmParams[0].Parameter)) - regionX;
locy = Convert.ToSingle(Utils.BytesToString(gmParams[1].Parameter)) - regionY; locy = Convert.ToSingle(Utils.BytesToString(gmParams[1].Parameter)) - regionY;
@ -4676,10 +4644,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (handlerUpdatePrimFlags != null) if (handlerUpdatePrimFlags != null)
{ {
byte[] data = Pack.ToBytes(); byte[] data = Pack.ToBytes();
int i = 46; // 46,47,48 are special positions within the packet
bool UsePhysics = (data[i++] != 0) ? true : false; // This may change so perhaps we need a better way
bool IsTemporary = (data[i++] != 0) ? true : false; // of storing this (OMV.FlagUpdatePacket.UsePhysics,etc?)
bool IsPhantom = (data[i++] != 0) ? true : false; bool UsePhysics = (data[46] != 0) ? true : false;
bool IsTemporary = (data[47] != 0) ? true : false;
bool IsPhantom = (data[48] != 0) ? true : false;
handlerUpdatePrimFlags(flags.AgentData.ObjectLocalID, UsePhysics, IsTemporary, IsPhantom, this); handlerUpdatePrimFlags(flags.AgentData.ObjectLocalID, UsePhysics, IsTemporary, IsPhantom, this);
} }
break; break;