diff options
Diffstat (limited to 'OpenSim/Region')
16 files changed, 324 insertions, 291 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 6834606..3c2575d 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -218,7 +218,13 @@ namespace OpenSim | |||
218 | 218 | ||
219 | m_console.Commands.AddCommand("region", false, "debug packet", | 219 | m_console.Commands.AddCommand("region", false, "debug packet", |
220 | "debug packet <level>", | 220 | "debug packet <level>", |
221 | "Turn on packet debugging", Debug); | 221 | "Turn on packet debugging", |
222 | "If level > 255 then all incoming and outgoing packets are logged.\n" | ||
223 | + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n" | ||
224 | + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n" | ||
225 | + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n" | ||
226 | + "If level <= 0 then no packets are logged.", | ||
227 | Debug); | ||
222 | 228 | ||
223 | m_console.Commands.AddCommand("region", false, "debug scene", | 229 | m_console.Commands.AddCommand("region", false, "debug scene", |
224 | "debug scene <cripting> <collisions> <physics>", | 230 | "debug scene <cripting> <collisions> <physics>", |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index b80d17d..d2d2607 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -36,7 +36,6 @@ using Nini.Config; | |||
36 | using OpenMetaverse; | 36 | using OpenMetaverse; |
37 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
38 | using OpenSim.Framework.Communications; | 38 | using OpenSim.Framework.Communications; |
39 | |||
40 | using OpenSim.Framework.Console; | 39 | using OpenSim.Framework.Console; |
41 | using OpenSim.Framework.Servers; | 40 | using OpenSim.Framework.Servers; |
42 | using OpenSim.Framework.Servers.HttpServer; | 41 | using OpenSim.Framework.Servers.HttpServer; |
@@ -356,7 +355,9 @@ namespace OpenSim | |||
356 | } | 355 | } |
357 | catch (Exception e) | 356 | catch (Exception e) |
358 | { | 357 | { |
359 | m_log.ErrorFormat("[STARTUP]: Registration of region with grid failed, aborting startup - {0}", e.StackTrace); | 358 | m_log.ErrorFormat( |
359 | "[STARTUP]: Registration of region with grid failed, aborting startup due to {0} {1}", | ||
360 | e.Message, e.StackTrace); | ||
360 | 361 | ||
361 | // Carrying on now causes a lot of confusion down the | 362 | // Carrying on now causes a lot of confusion down the |
362 | // line - we need to get the user's attention | 363 | // line - we need to get the user's attention |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 092c96e..3d4269f 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -37,6 +37,7 @@ using System.Xml; | |||
37 | using log4net; | 37 | using log4net; |
38 | using OpenMetaverse; | 38 | using OpenMetaverse; |
39 | using OpenMetaverse.Packets; | 39 | using OpenMetaverse.Packets; |
40 | using OpenMetaverse.Messages.Linden; | ||
40 | using OpenMetaverse.StructuredData; | 41 | using OpenMetaverse.StructuredData; |
41 | using OpenSim.Framework; | 42 | using OpenSim.Framework; |
42 | using OpenSim.Framework.Client; | 43 | using OpenSim.Framework.Client; |
@@ -59,7 +60,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
59 | public class LLClientView : IClientAPI, IClientCore, IClientIM, IClientChat, IClientIPEndpoint, IStatsCollector | 60 | public class LLClientView : IClientAPI, IClientCore, IClientIM, IClientChat, IClientIPEndpoint, IStatsCollector |
60 | { | 61 | { |
61 | /// <value> | 62 | /// <value> |
62 | /// Debug packet level. At the moment, only 255 does anything (prints out all in and out packets). | 63 | /// Debug packet level. See OpenSim.RegisterConsoleCommands() for more details. |
63 | /// </value> | 64 | /// </value> |
64 | protected int m_debugPacketLevel = 0; | 65 | protected int m_debugPacketLevel = 0; |
65 | 66 | ||
@@ -3407,6 +3408,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3407 | 3408 | ||
3408 | avp.Sender.IsTrial = false; | 3409 | avp.Sender.IsTrial = false; |
3409 | avp.Sender.ID = agentID; | 3410 | avp.Sender.ID = agentID; |
3411 | m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString()); | ||
3410 | OutPacket(avp, ThrottleOutPacketType.Task); | 3412 | OutPacket(avp, ThrottleOutPacketType.Task); |
3411 | } | 3413 | } |
3412 | 3414 | ||
@@ -4199,94 +4201,101 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4199 | 4201 | ||
4200 | public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) | 4202 | public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags) |
4201 | { | 4203 | { |
4202 | ParcelPropertiesPacket updatePacket = (ParcelPropertiesPacket)PacketPool.Instance.GetPacket(PacketType.ParcelProperties); | 4204 | ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage(); |
4203 | // TODO: don't create new blocks if recycling an old packet | ||
4204 | 4205 | ||
4205 | updatePacket.ParcelData.AABBMax = landData.AABBMax; | 4206 | updateMessage.AABBMax = landData.AABBMax; |
4206 | updatePacket.ParcelData.AABBMin = landData.AABBMin; | 4207 | updateMessage.AABBMin = landData.AABBMin; |
4207 | updatePacket.ParcelData.Area = landData.Area; | 4208 | updateMessage.Area = landData.Area; |
4208 | updatePacket.ParcelData.AuctionID = landData.AuctionID; | 4209 | updateMessage.AuctionID = landData.AuctionID; |
4209 | updatePacket.ParcelData.AuthBuyerID = landData.AuthBuyerID; | 4210 | updateMessage.AuthBuyerID = landData.AuthBuyerID; |
4210 | 4211 | ||
4211 | updatePacket.ParcelData.Bitmap = landData.Bitmap; | 4212 | updateMessage.Bitmap = landData.Bitmap; |
4212 | 4213 | ||
4213 | updatePacket.ParcelData.Desc = Utils.StringToBytes(landData.Description); | 4214 | updateMessage.Desc = landData.Description; |
4214 | updatePacket.ParcelData.Category = (byte)landData.Category; | 4215 | updateMessage.Category = landData.Category; |
4215 | updatePacket.ParcelData.ClaimDate = landData.ClaimDate; | 4216 | updateMessage.ClaimDate = Util.ToDateTime(landData.ClaimDate); |
4216 | updatePacket.ParcelData.ClaimPrice = landData.ClaimPrice; | 4217 | updateMessage.ClaimPrice = landData.ClaimPrice; |
4217 | updatePacket.ParcelData.GroupID = landData.GroupID; | 4218 | updateMessage.GroupID = landData.GroupID; |
4218 | updatePacket.ParcelData.GroupPrims = landData.GroupPrims; | 4219 | updateMessage.GroupPrims = landData.GroupPrims; |
4219 | updatePacket.ParcelData.IsGroupOwned = landData.IsGroupOwned; | 4220 | updateMessage.IsGroupOwned = landData.IsGroupOwned; |
4220 | updatePacket.ParcelData.LandingType = landData.LandingType; | 4221 | updateMessage.LandingType = (LandingType) landData.LandingType; |
4221 | updatePacket.ParcelData.LocalID = landData.LocalID; | 4222 | updateMessage.LocalID = landData.LocalID; |
4222 | 4223 | ||
4223 | if (landData.Area > 0) | 4224 | if (landData.Area > 0) |
4224 | { | 4225 | { |
4225 | updatePacket.ParcelData.MaxPrims = parcelObjectCapacity; | 4226 | updateMessage.MaxPrims = parcelObjectCapacity; |
4226 | } | 4227 | } |
4227 | else | 4228 | else |
4228 | { | 4229 | { |
4229 | updatePacket.ParcelData.MaxPrims = 0; | 4230 | updateMessage.MaxPrims = 0; |
4230 | } | 4231 | } |
4231 | 4232 | ||
4232 | updatePacket.ParcelData.MediaAutoScale = landData.MediaAutoScale; | 4233 | updateMessage.MediaAutoScale = Convert.ToBoolean(landData.MediaAutoScale); |
4233 | updatePacket.ParcelData.MediaID = landData.MediaID; | 4234 | updateMessage.MediaID = landData.MediaID; |
4234 | updatePacket.ParcelData.MediaURL = Util.StringToBytes256(landData.MediaURL); | 4235 | updateMessage.MediaURL = landData.MediaURL; |
4235 | updatePacket.ParcelData.MusicURL = Util.StringToBytes256(landData.MusicURL); | 4236 | updateMessage.MusicURL = landData.MusicURL; |
4236 | updatePacket.ParcelData.Name = Util.StringToBytes256(landData.Name); | 4237 | updateMessage.Name = landData.Name; |
4237 | updatePacket.ParcelData.OtherCleanTime = landData.OtherCleanTime; | 4238 | updateMessage.OtherCleanTime = landData.OtherCleanTime; |
4238 | updatePacket.ParcelData.OtherCount = 0; //TODO: Unimplemented | 4239 | updateMessage.OtherCount = 0; //TODO: Unimplemented |
4239 | updatePacket.ParcelData.OtherPrims = landData.OtherPrims; | 4240 | updateMessage.OtherPrims = landData.OtherPrims; |
4240 | updatePacket.ParcelData.OwnerID = landData.OwnerID; | 4241 | updateMessage.OwnerID = landData.OwnerID; |
4241 | updatePacket.ParcelData.OwnerPrims = landData.OwnerPrims; | 4242 | updateMessage.OwnerPrims = landData.OwnerPrims; |
4242 | updatePacket.ParcelData.ParcelFlags = landData.Flags; | 4243 | updateMessage.ParcelFlags = (ParcelFlags) landData.Flags; |
4243 | updatePacket.ParcelData.ParcelPrimBonus = simObjectBonusFactor; | 4244 | updateMessage.ParcelPrimBonus = simObjectBonusFactor; |
4244 | updatePacket.ParcelData.PassHours = landData.PassHours; | 4245 | updateMessage.PassHours = landData.PassHours; |
4245 | updatePacket.ParcelData.PassPrice = landData.PassPrice; | 4246 | updateMessage.PassPrice = landData.PassPrice; |
4246 | updatePacket.ParcelData.PublicCount = 0; //TODO: Unimplemented | 4247 | updateMessage.PublicCount = 0; //TODO: Unimplemented |
4247 | 4248 | ||
4248 | updatePacket.ParcelData.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0; | 4249 | updateMessage.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0; |
4249 | updatePacket.ParcelData.RegionDenyIdentified = (regionFlags & (uint)RegionFlags.DenyIdentified) > 0; | 4250 | updateMessage.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0; |
4250 | updatePacket.ParcelData.RegionDenyTransacted = (regionFlags & (uint)RegionFlags.DenyTransacted) > 0; | 4251 | |
4251 | updatePacket.ParcelData.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0; | 4252 | //updateMessage.RegionDenyIdentified = (regionFlags & (uint)RegionFlags.DenyIdentified) > 0; |
4252 | 4253 | //updateMessage.RegionDenyTransacted = (regionFlags & (uint)RegionFlags.DenyTransacted) > 0; | |
4253 | updatePacket.ParcelData.RentPrice = 0; | 4254 | |
4254 | updatePacket.ParcelData.RequestResult = request_result; | 4255 | updateMessage.RentPrice = 0; |
4255 | updatePacket.ParcelData.SalePrice = landData.SalePrice; | 4256 | updateMessage.RequestResult = (ParcelResult) request_result; |
4256 | updatePacket.ParcelData.SelectedPrims = landData.SelectedPrims; | 4257 | updateMessage.SalePrice = landData.SalePrice; |
4257 | updatePacket.ParcelData.SelfCount = 0; //TODO: Unimplemented | 4258 | updateMessage.SelectedPrims = landData.SelectedPrims; |
4258 | updatePacket.ParcelData.SequenceID = sequence_id; | 4259 | updateMessage.SelfCount = 0; //TODO: Unimplemented |
4260 | updateMessage.SequenceID = sequence_id; | ||
4259 | if (landData.SimwideArea > 0) | 4261 | if (landData.SimwideArea > 0) |
4260 | { | 4262 | { |
4261 | updatePacket.ParcelData.SimWideMaxPrims = parcelObjectCapacity; | 4263 | updateMessage.SimWideMaxPrims = parcelObjectCapacity; |
4262 | } | 4264 | } |
4263 | else | 4265 | else |
4264 | { | 4266 | { |
4265 | updatePacket.ParcelData.SimWideMaxPrims = 0; | 4267 | updateMessage.SimWideMaxPrims = 0; |
4266 | } | 4268 | } |
4267 | updatePacket.ParcelData.SimWideTotalPrims = landData.SimwidePrims; | 4269 | updateMessage.SimWideTotalPrims = landData.SimwidePrims; |
4268 | updatePacket.ParcelData.SnapSelection = snap_selection; | 4270 | updateMessage.SnapSelection = snap_selection; |
4269 | updatePacket.ParcelData.SnapshotID = landData.SnapshotID; | 4271 | updateMessage.SnapshotID = landData.SnapshotID; |
4270 | updatePacket.ParcelData.Status = (byte)landData.Status; | 4272 | updateMessage.Status = (ParcelStatus) landData.Status; |
4271 | updatePacket.ParcelData.TotalPrims = landData.OwnerPrims + landData.GroupPrims + landData.OtherPrims + | 4273 | updateMessage.TotalPrims = landData.OwnerPrims + landData.GroupPrims + landData.OtherPrims + |
4272 | landData.SelectedPrims; | 4274 | landData.SelectedPrims; |
4273 | updatePacket.ParcelData.UserLocation = landData.UserLocation; | 4275 | updateMessage.UserLocation = landData.UserLocation; |
4274 | updatePacket.ParcelData.UserLookAt = landData.UserLookAt; | 4276 | updateMessage.UserLookAt = landData.UserLookAt; |
4275 | updatePacket.Header.Zerocoded = true; | 4277 | |
4278 | updateMessage.MediaType = landData.MediaType; | ||
4279 | updateMessage.MediaDesc = landData.MediaDescription; | ||
4280 | updateMessage.MediaWidth = landData.MediaWidth; | ||
4281 | updateMessage.MediaHeight = landData.MediaHeight; | ||
4282 | updateMessage.MediaLoop = landData.MediaLoop; | ||
4283 | updateMessage.ObscureMusic = landData.ObscureMusic; | ||
4284 | updateMessage.ObscureMedia = landData.ObscureMedia; | ||
4276 | 4285 | ||
4277 | try | 4286 | try |
4278 | { | 4287 | { |
4279 | IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>(); | 4288 | IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>(); |
4280 | if (eq != null) | 4289 | if (eq != null) |
4281 | { | 4290 | { |
4282 | eq.ParcelProperties(updatePacket, this.AgentId); | 4291 | eq.ParcelProperties(updateMessage, this.AgentId); |
4283 | } | 4292 | } else { |
4293 | m_log.Warn("No EQ Interface when sending parcel data."); | ||
4294 | } | ||
4284 | } | 4295 | } |
4285 | catch (Exception ex) | 4296 | catch (Exception ex) |
4286 | { | 4297 | { |
4287 | m_log.Error("Unable to send parcel data via eventqueue - exception: " + ex.ToString()); | 4298 | m_log.Error("Unable to send parcel data via eventqueue - exception: " + ex.ToString()); |
4288 | m_log.Warn("sending parcel data via UDP"); | ||
4289 | OutPacket(updatePacket, ThrottleOutPacketType.Task); | ||
4290 | } | 4299 | } |
4291 | } | 4300 | } |
4292 | 4301 | ||
@@ -11166,8 +11175,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11166 | /// handles splitting manually</param> | 11175 | /// handles splitting manually</param> |
11167 | protected void OutPacket(Packet packet, ThrottleOutPacketType throttlePacketType, bool doAutomaticSplitting) | 11176 | protected void OutPacket(Packet packet, ThrottleOutPacketType throttlePacketType, bool doAutomaticSplitting) |
11168 | { | 11177 | { |
11169 | if (m_debugPacketLevel >= 255) | 11178 | if (m_debugPacketLevel > 0) |
11170 | m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type); | 11179 | { |
11180 | bool outputPacket = true; | ||
11181 | |||
11182 | if (m_debugPacketLevel <= 255 | ||
11183 | && (packet.Type == PacketType.SimStats || packet.Type == PacketType.SimulatorViewerTimeMessage)) | ||
11184 | outputPacket = false; | ||
11185 | |||
11186 | if (m_debugPacketLevel <= 200 | ||
11187 | && | ||
11188 | (packet.Type == PacketType.ImagePacket | ||
11189 | || packet.Type == PacketType.ImageData | ||
11190 | || packet.Type == PacketType.LayerData | ||
11191 | || packet.Type == PacketType.CoarseLocationUpdate)) | ||
11192 | outputPacket = false; | ||
11193 | |||
11194 | if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.AvatarAnimation || packet.Type == PacketType.ViewerEffect)) | ||
11195 | outputPacket = false; | ||
11196 | |||
11197 | if (outputPacket) | ||
11198 | m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type); | ||
11199 | } | ||
11171 | 11200 | ||
11172 | m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting); | 11201 | m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting); |
11173 | } | 11202 | } |
@@ -11238,15 +11267,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11238 | /// Entryway from the client to the simulator. All UDP packets from the client will end up here | 11267 | /// Entryway from the client to the simulator. All UDP packets from the client will end up here |
11239 | /// </summary> | 11268 | /// </summary> |
11240 | /// <param name="Pack">OpenMetaverse.packet</param> | 11269 | /// <param name="Pack">OpenMetaverse.packet</param> |
11241 | public void ProcessInPacket(Packet Pack) | 11270 | public void ProcessInPacket(Packet packet) |
11242 | { | 11271 | { |
11243 | if (m_debugPacketLevel >= 255) | 11272 | if (m_debugPacketLevel > 0) |
11244 | m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack.Type); | 11273 | { |
11274 | bool outputPacket = true; | ||
11275 | |||
11276 | if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate) | ||
11277 | outputPacket = false; | ||
11278 | |||
11279 | if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage) | ||
11280 | outputPacket = false; | ||
11281 | |||
11282 | if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation)) | ||
11283 | outputPacket = false; | ||
11284 | |||
11285 | if (outputPacket) | ||
11286 | m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type); | ||
11287 | } | ||
11245 | 11288 | ||
11246 | if (!ProcessPacketMethod(Pack)) | 11289 | if (!ProcessPacketMethod(packet)) |
11247 | m_log.Warn("[CLIENT]: unhandled packet " + Pack.Type); | 11290 | m_log.Warn("[CLIENT]: unhandled packet " + packet.Type); |
11248 | 11291 | ||
11249 | PacketPool.Instance.ReturnPacket(Pack); | 11292 | PacketPool.Instance.ReturnPacket(packet); |
11250 | } | 11293 | } |
11251 | 11294 | ||
11252 | private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket) | 11295 | private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket) |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index d56145a..6555b54 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -173,16 +173,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
173 | UUID itemID = UUID.Zero; | 173 | UUID itemID = UUID.Zero; |
174 | if (sp != null) | 174 | if (sp != null) |
175 | { | 175 | { |
176 | foreach(SceneObjectGroup grp in sp.Attachments) | 176 | foreach(SceneObjectGroup grp in sp.GetAttachments(AttachmentPt)) |
177 | { | 177 | { |
178 | if (grp.GetAttachmentPoint() == (byte)AttachmentPt) | 178 | itemID = grp.GetFromItemID(); |
179 | { | 179 | if (itemID != UUID.Zero) |
180 | itemID = grp.GetFromItemID(); | 180 | DetachSingleAttachmentToInv(itemID, remoteClient); |
181 | break; | 181 | } |
182 | } | ||
183 | } | ||
184 | if (itemID != UUID.Zero) | ||
185 | DetachSingleAttachmentToInv(itemID, remoteClient); | ||
186 | } | 182 | } |
187 | 183 | ||
188 | if (group.GetFromItemID() == UUID.Zero) | 184 | if (group.GetFromItemID() == UUID.Zero) |
@@ -196,12 +192,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
196 | 192 | ||
197 | SetAttachmentInventoryStatus(remoteClient, AttachmentPt, itemID, group); | 193 | SetAttachmentInventoryStatus(remoteClient, AttachmentPt, itemID, group); |
198 | 194 | ||
199 | group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent); | 195 | AttachToAgent(sp, group, AttachmentPt, attachPos, silent); |
200 | |||
201 | // In case it is later dropped again, don't let | ||
202 | // it get cleaned up | ||
203 | group.RootPart.RemFlag(PrimFlags.TemporaryOnRez); | ||
204 | group.HasGroupChanged = false; | ||
205 | } | 196 | } |
206 | else | 197 | else |
207 | { | 198 | { |
@@ -529,6 +520,78 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
529 | remoteClient.SendInventoryItemCreateUpdate(item, 0); | 520 | remoteClient.SendInventoryItemCreateUpdate(item, 0); |
530 | } | 521 | } |
531 | } | 522 | } |
532 | } | 523 | } |
524 | |||
525 | /// <summary> | ||
526 | /// Attach this scene object to the given avatar. | ||
527 | /// </summary> | ||
528 | /// | ||
529 | /// This isn't publicly available since attachments should always perform the corresponding inventory | ||
530 | /// operation (to show the attach in user inventory and update the asset with positional information). | ||
531 | /// | ||
532 | /// <param name="sp"></param> | ||
533 | /// <param name="so"></param> | ||
534 | /// <param name="attachmentpoint"></param> | ||
535 | /// <param name="AttachOffset"></param> | ||
536 | /// <param name="silent"></param> | ||
537 | protected void AttachToAgent(ScenePresence avatar, SceneObjectGroup so, uint attachmentpoint, Vector3 AttachOffset, bool silent) | ||
538 | { | ||
539 | // don't attach attachments to child agents | ||
540 | if (avatar.IsChildAgent) return; | ||
541 | |||
542 | // m_log.DebugFormat("[ATTACHMENTS MODULE]: Adding attachment {0} to avatar {1}", Name, avatar.Name); | ||
543 | |||
544 | so.DetachFromBackup(); | ||
545 | |||
546 | // Remove from database and parcel prim count | ||
547 | m_scene.DeleteFromStorage(so.UUID); | ||
548 | m_scene.EventManager.TriggerParcelPrimCountTainted(); | ||
549 | |||
550 | so.RootPart.AttachedAvatar = avatar.UUID; | ||
551 | |||
552 | //Anakin Lohner bug #3839 | ||
553 | lock (so.Children) | ||
554 | { | ||
555 | foreach (SceneObjectPart p in so.Children.Values) | ||
556 | { | ||
557 | p.AttachedAvatar = avatar.UUID; | ||
558 | } | ||
559 | } | ||
560 | |||
561 | if (so.RootPart.PhysActor != null) | ||
562 | { | ||
563 | m_scene.PhysicsScene.RemovePrim(so.RootPart.PhysActor); | ||
564 | so.RootPart.PhysActor = null; | ||
565 | } | ||
566 | |||
567 | so.AbsolutePosition = AttachOffset; | ||
568 | so.RootPart.AttachedPos = AttachOffset; | ||
569 | so.RootPart.IsAttachment = true; | ||
570 | |||
571 | so.RootPart.SetParentLocalId(avatar.LocalId); | ||
572 | so.SetAttachmentPoint(Convert.ToByte(attachmentpoint)); | ||
573 | |||
574 | avatar.AddAttachment(so); | ||
575 | |||
576 | if (!silent) | ||
577 | { | ||
578 | // Killing it here will cause the client to deselect it | ||
579 | // It then reappears on the avatar, deselected | ||
580 | // through the full update below | ||
581 | // | ||
582 | if (so.IsSelected) | ||
583 | { | ||
584 | m_scene.SendKillObject(so.RootPart.LocalId); | ||
585 | } | ||
586 | |||
587 | so.IsSelected = false; // fudge.... | ||
588 | so.ScheduleGroupForFullUpdate(); | ||
589 | } | ||
590 | |||
591 | // In case it is later dropped again, don't let | ||
592 | // it get cleaned up | ||
593 | so.RootPart.RemFlag(PrimFlags.TemporaryOnRez); | ||
594 | so.HasGroupChanged = false; | ||
595 | } | ||
533 | } | 596 | } |
534 | } \ No newline at end of file | 597 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs index 0c6cb1b..35b70de 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs | |||
@@ -34,6 +34,7 @@ using System.Threading; | |||
34 | using log4net; | 34 | using log4net; |
35 | using Nini.Config; | 35 | using Nini.Config; |
36 | using OpenMetaverse; | 36 | using OpenMetaverse; |
37 | using OpenMetaverse.Messages.Linden; | ||
37 | using OpenMetaverse.Packets; | 38 | using OpenMetaverse.Packets; |
38 | using OpenMetaverse.StructuredData; | 39 | using OpenMetaverse.StructuredData; |
39 | using OpenSim.Framework; | 40 | using OpenSim.Framework; |
@@ -137,10 +138,11 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
137 | { | 138 | { |
138 | if (!queues.ContainsKey(agentId)) | 139 | if (!queues.ContainsKey(agentId)) |
139 | { | 140 | { |
141 | /* | ||
140 | m_log.DebugFormat( | 142 | m_log.DebugFormat( |
141 | "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", | 143 | "[EVENTQUEUE]: Adding new queue for agent {0} in region {1}", |
142 | agentId, m_scene.RegionInfo.RegionName); | 144 | agentId, m_scene.RegionInfo.RegionName); |
143 | 145 | */ | |
144 | queues[agentId] = new Queue<OSD>(); | 146 | queues[agentId] = new Queue<OSD>(); |
145 | } | 147 | } |
146 | 148 | ||
@@ -200,7 +202,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
200 | 202 | ||
201 | private void ClientClosed(UUID AgentID, Scene scene) | 203 | private void ClientClosed(UUID AgentID, Scene scene) |
202 | { | 204 | { |
203 | m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", AgentID, m_scene.RegionInfo.RegionName); | 205 | //m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", AgentID, m_scene.RegionInfo.RegionName); |
204 | 206 | ||
205 | int count = 0; | 207 | int count = 0; |
206 | while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5) | 208 | while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5) |
@@ -284,7 +286,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
284 | // Reuse open queues. The client does! | 286 | // Reuse open queues. The client does! |
285 | if (m_AvatarQueueUUIDMapping.ContainsKey(agentID)) | 287 | if (m_AvatarQueueUUIDMapping.ContainsKey(agentID)) |
286 | { | 288 | { |
287 | m_log.DebugFormat("[EVENTQUEUE]: Found Existing UUID!"); | 289 | //m_log.DebugFormat("[EVENTQUEUE]: Found Existing UUID!"); |
288 | EventQueueGetUUID = m_AvatarQueueUUIDMapping[agentID]; | 290 | EventQueueGetUUID = m_AvatarQueueUUIDMapping[agentID]; |
289 | } | 291 | } |
290 | else | 292 | else |
@@ -365,7 +367,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
365 | { | 367 | { |
366 | // Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say! | 368 | // Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say! |
367 | array.Add(EventQueueHelper.KeepAliveEvent()); | 369 | array.Add(EventQueueHelper.KeepAliveEvent()); |
368 | m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", pAgentId, m_scene.RegionInfo.RegionName); | 370 | //m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", pAgentId, m_scene.RegionInfo.RegionName); |
369 | } | 371 | } |
370 | else | 372 | else |
371 | { | 373 | { |
@@ -394,8 +396,8 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
394 | responsedata["keepalive"] = false; | 396 | responsedata["keepalive"] = false; |
395 | responsedata["reusecontext"] = false; | 397 | responsedata["reusecontext"] = false; |
396 | responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events); | 398 | responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events); |
399 | //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", pAgentId, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); | ||
397 | return responsedata; | 400 | return responsedata; |
398 | //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", agentID, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); | ||
399 | } | 401 | } |
400 | 402 | ||
401 | public Hashtable NoEvents(UUID requestID, UUID agentID) | 403 | public Hashtable NoEvents(UUID requestID, UUID agentID) |
@@ -461,7 +463,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
461 | { | 463 | { |
462 | // Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say! | 464 | // Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say! |
463 | array.Add(EventQueueHelper.KeepAliveEvent()); | 465 | array.Add(EventQueueHelper.KeepAliveEvent()); |
464 | m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", agentID, m_scene.RegionInfo.RegionName); | 466 | //m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", agentID, m_scene.RegionInfo.RegionName); |
465 | } | 467 | } |
466 | else | 468 | else |
467 | { | 469 | { |
@@ -697,9 +699,9 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
697 | //m_log.InfoFormat("########### eq ChatterBoxSessionAgentListUpdates #############\n{0}", item); | 699 | //m_log.InfoFormat("########### eq ChatterBoxSessionAgentListUpdates #############\n{0}", item); |
698 | } | 700 | } |
699 | 701 | ||
700 | public void ParcelProperties(ParcelPropertiesPacket parcelPropertiesPacket, UUID avatarID) | 702 | public void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID) |
701 | { | 703 | { |
702 | OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesPacket); | 704 | OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesMessage); |
703 | Enqueue(item, avatarID); | 705 | Enqueue(item, avatarID); |
704 | } | 706 | } |
705 | 707 | ||
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs index e9bcae3..6294935 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueHelper.cs | |||
@@ -30,6 +30,7 @@ using System.Net; | |||
30 | using OpenMetaverse; | 30 | using OpenMetaverse; |
31 | using OpenMetaverse.Packets; | 31 | using OpenMetaverse.Packets; |
32 | using OpenMetaverse.StructuredData; | 32 | using OpenMetaverse.StructuredData; |
33 | using OpenMetaverse.Messages.Linden; | ||
33 | 34 | ||
34 | namespace OpenSim.Region.CoreModules.Framework.EventQueue | 35 | namespace OpenSim.Region.CoreModules.Framework.EventQueue |
35 | { | 36 | { |
@@ -309,116 +310,6 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
309 | return chatterBoxSessionAgentListUpdates; | 310 | return chatterBoxSessionAgentListUpdates; |
310 | } | 311 | } |
311 | 312 | ||
312 | public static OSD ParcelProperties(ParcelPropertiesPacket parcelPropertiesPacket) | ||
313 | { | ||
314 | OSDMap parcelProperties = new OSDMap(); | ||
315 | OSDMap body = new OSDMap(); | ||
316 | |||
317 | OSDArray ageVerificationBlock = new OSDArray(); | ||
318 | OSDMap ageVerificationMap = new OSDMap(); | ||
319 | ageVerificationMap.Add("RegionDenyAgeUnverified", | ||
320 | OSD.FromBoolean(parcelPropertiesPacket.AgeVerificationBlock.RegionDenyAgeUnverified)); | ||
321 | ageVerificationBlock.Add(ageVerificationMap); | ||
322 | body.Add("AgeVerificationBlock", ageVerificationBlock); | ||
323 | |||
324 | // LL sims send media info in this event queue message but it's not in the UDP | ||
325 | // packet we construct this event queue message from. This should be refactored in | ||
326 | // other areas of the code so it can all be send in the same message. Until then we will | ||
327 | // still send the media info via UDP | ||
328 | |||
329 | //OSDArray mediaData = new OSDArray(); | ||
330 | //OSDMap mediaDataMap = new OSDMap(); | ||
331 | //mediaDataMap.Add("MediaDesc", OSD.FromString("")); | ||
332 | //mediaDataMap.Add("MediaHeight", OSD.FromInteger(0)); | ||
333 | //mediaDataMap.Add("MediaLoop", OSD.FromInteger(0)); | ||
334 | //mediaDataMap.Add("MediaType", OSD.FromString("type/type")); | ||
335 | //mediaDataMap.Add("MediaWidth", OSD.FromInteger(0)); | ||
336 | //mediaDataMap.Add("ObscureMedia", OSD.FromInteger(0)); | ||
337 | //mediaDataMap.Add("ObscureMusic", OSD.FromInteger(0)); | ||
338 | //mediaData.Add(mediaDataMap); | ||
339 | //body.Add("MediaData", mediaData); | ||
340 | |||
341 | OSDArray parcelData = new OSDArray(); | ||
342 | OSDMap parcelDataMap = new OSDMap(); | ||
343 | OSDArray AABBMax = new OSDArray(3); | ||
344 | AABBMax.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMax.X)); | ||
345 | AABBMax.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMax.Y)); | ||
346 | AABBMax.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMax.Z)); | ||
347 | parcelDataMap.Add("AABBMax", AABBMax); | ||
348 | |||
349 | OSDArray AABBMin = new OSDArray(3); | ||
350 | AABBMin.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMin.X)); | ||
351 | AABBMin.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMin.Y)); | ||
352 | AABBMin.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMin.Z)); | ||
353 | parcelDataMap.Add("AABBMin", AABBMin); | ||
354 | |||
355 | parcelDataMap.Add("Area", OSD.FromInteger(parcelPropertiesPacket.ParcelData.Area)); | ||
356 | parcelDataMap.Add("AuctionID", OSD.FromBinary(uintToByteArray(parcelPropertiesPacket.ParcelData.AuctionID))); | ||
357 | parcelDataMap.Add("AuthBuyerID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.AuthBuyerID)); | ||
358 | parcelDataMap.Add("Bitmap", OSD.FromBinary(parcelPropertiesPacket.ParcelData.Bitmap)); | ||
359 | parcelDataMap.Add("Category", OSD.FromInteger((int)parcelPropertiesPacket.ParcelData.Category)); | ||
360 | parcelDataMap.Add("ClaimDate", OSD.FromInteger(parcelPropertiesPacket.ParcelData.ClaimDate)); | ||
361 | parcelDataMap.Add("ClaimPrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.ClaimPrice)); | ||
362 | parcelDataMap.Add("Desc", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.Desc))); | ||
363 | parcelDataMap.Add("GroupID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.GroupID)); | ||
364 | parcelDataMap.Add("GroupPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.GroupPrims)); | ||
365 | parcelDataMap.Add("IsGroupOwned", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.IsGroupOwned)); | ||
366 | parcelDataMap.Add("LandingType", OSD.FromInteger(parcelPropertiesPacket.ParcelData.LandingType)); | ||
367 | parcelDataMap.Add("LocalID", OSD.FromInteger(parcelPropertiesPacket.ParcelData.LocalID)); | ||
368 | parcelDataMap.Add("MaxPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.MaxPrims)); | ||
369 | parcelDataMap.Add("MediaAutoScale", OSD.FromInteger((int)parcelPropertiesPacket.ParcelData.MediaAutoScale)); | ||
370 | parcelDataMap.Add("MediaID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.MediaID)); | ||
371 | parcelDataMap.Add("MediaURL", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.MediaURL))); | ||
372 | parcelDataMap.Add("MusicURL", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.MusicURL))); | ||
373 | parcelDataMap.Add("Name", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.Name))); | ||
374 | parcelDataMap.Add("OtherCleanTime", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OtherCleanTime)); | ||
375 | parcelDataMap.Add("OtherCount", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OtherCount)); | ||
376 | parcelDataMap.Add("OtherPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OtherPrims)); | ||
377 | parcelDataMap.Add("OwnerID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.OwnerID)); | ||
378 | parcelDataMap.Add("OwnerPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OwnerPrims)); | ||
379 | parcelDataMap.Add("ParcelFlags", OSD.FromBinary(uintToByteArray(parcelPropertiesPacket.ParcelData.ParcelFlags))); | ||
380 | parcelDataMap.Add("ParcelPrimBonus", OSD.FromReal(parcelPropertiesPacket.ParcelData.ParcelPrimBonus)); | ||
381 | parcelDataMap.Add("PassHours", OSD.FromReal(parcelPropertiesPacket.ParcelData.PassHours)); | ||
382 | parcelDataMap.Add("PassPrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.PassPrice)); | ||
383 | parcelDataMap.Add("PublicCount", OSD.FromInteger(parcelPropertiesPacket.ParcelData.PublicCount)); | ||
384 | parcelDataMap.Add("RegionDenyAnonymous", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionDenyAnonymous)); | ||
385 | parcelDataMap.Add("RegionDenyIdentified", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionDenyIdentified)); | ||
386 | parcelDataMap.Add("RegionDenyTransacted", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionDenyTransacted)); | ||
387 | |||
388 | parcelDataMap.Add("RegionPushOverride", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionPushOverride)); | ||
389 | parcelDataMap.Add("RentPrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.RentPrice)); | ||
390 | parcelDataMap.Add("RequestResult", OSD.FromInteger(parcelPropertiesPacket.ParcelData.RequestResult)); | ||
391 | parcelDataMap.Add("SalePrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SalePrice)); | ||
392 | parcelDataMap.Add("SelectedPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SelectedPrims)); | ||
393 | parcelDataMap.Add("SelfCount", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SelfCount)); | ||
394 | parcelDataMap.Add("SequenceID", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SequenceID)); | ||
395 | parcelDataMap.Add("SimWideMaxPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SimWideMaxPrims)); | ||
396 | parcelDataMap.Add("SimWideTotalPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SimWideTotalPrims)); | ||
397 | parcelDataMap.Add("SnapSelection", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.SnapSelection)); | ||
398 | parcelDataMap.Add("SnapshotID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.SnapshotID)); | ||
399 | parcelDataMap.Add("Status", OSD.FromInteger((int)parcelPropertiesPacket.ParcelData.Status)); | ||
400 | parcelDataMap.Add("TotalPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.TotalPrims)); | ||
401 | |||
402 | OSDArray UserLocation = new OSDArray(3); | ||
403 | UserLocation.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLocation.X)); | ||
404 | UserLocation.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLocation.Y)); | ||
405 | UserLocation.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLocation.Z)); | ||
406 | parcelDataMap.Add("UserLocation", UserLocation); | ||
407 | |||
408 | OSDArray UserLookAt = new OSDArray(3); | ||
409 | UserLookAt.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLookAt.X)); | ||
410 | UserLookAt.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLookAt.Y)); | ||
411 | UserLookAt.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLookAt.Z)); | ||
412 | parcelDataMap.Add("UserLookAt", UserLookAt); | ||
413 | |||
414 | parcelData.Add(parcelDataMap); | ||
415 | body.Add("ParcelData", parcelData); | ||
416 | parcelProperties.Add("body", body); | ||
417 | parcelProperties.Add("message", OSD.FromString("ParcelProperties")); | ||
418 | |||
419 | return parcelProperties; | ||
420 | } | ||
421 | |||
422 | public static OSD GroupMembership(AgentGroupDataUpdatePacket groupUpdatePacket) | 313 | public static OSD GroupMembership(AgentGroupDataUpdatePacket groupUpdatePacket) |
423 | { | 314 | { |
424 | OSDMap groupUpdate = new OSDMap(); | 315 | OSDMap groupUpdate = new OSDMap(); |
@@ -495,5 +386,14 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
495 | return placesReply; | 386 | return placesReply; |
496 | } | 387 | } |
497 | 388 | ||
389 | public static OSD ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage) | ||
390 | { | ||
391 | OSDMap message = new OSDMap(); | ||
392 | message.Add("message", OSD.FromString("ParcelProperties")); | ||
393 | OSD message_body = parcelPropertiesMessage.Serialize(); | ||
394 | message.Add("body", message_body); | ||
395 | return message; | ||
396 | } | ||
397 | |||
498 | } | 398 | } |
499 | } | 399 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 6decf54..2ac2324 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -641,7 +641,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
641 | } | 641 | } |
642 | 642 | ||
643 | // Fire on_rez | 643 | // Fire on_rez |
644 | group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 0); | 644 | group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 1); |
645 | rootPart.ParentGroup.ResumeScripts(); | 645 | rootPart.ParentGroup.ResumeScripts(); |
646 | 646 | ||
647 | rootPart.ScheduleFullUpdate(); | 647 | rootPart.ScheduleFullUpdate(); |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 15dc301..3e79ec0 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -33,6 +33,8 @@ using System.Reflection; | |||
33 | using log4net; | 33 | using log4net; |
34 | using Nini.Config; | 34 | using Nini.Config; |
35 | using OpenMetaverse; | 35 | using OpenMetaverse; |
36 | using OpenMetaverse.StructuredData; | ||
37 | using OpenMetaverse.Messages.Linden; | ||
36 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
37 | using OpenSim.Framework.Capabilities; | 39 | using OpenSim.Framework.Capabilities; |
38 | using OpenSim.Framework.Servers; | 40 | using OpenSim.Framework.Servers; |
@@ -1066,7 +1068,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1066 | { | 1068 | { |
1067 | for (int y = 0; y < inc_y; y++) | 1069 | for (int y = 0; y < inc_y; y++) |
1068 | { | 1070 | { |
1069 | |||
1070 | ILandObject currentParcel = GetLandObject(start_x + x, start_y + y); | 1071 | ILandObject currentParcel = GetLandObject(start_x + x, start_y + y); |
1071 | 1072 | ||
1072 | if (currentParcel != null) | 1073 | if (currentParcel != null) |
@@ -1353,8 +1354,68 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1353 | { | 1354 | { |
1354 | return RemoteParcelRequest(request, path, param, agentID, caps); | 1355 | return RemoteParcelRequest(request, path, param, agentID, caps); |
1355 | })); | 1356 | })); |
1356 | } | 1357 | UUID parcelCapID = UUID.Random(); |
1358 | caps.RegisterHandler("ParcelPropertiesUpdate", | ||
1359 | new RestStreamHandler("POST", "/CAPS/" + parcelCapID, | ||
1360 | delegate(string request, string path, string param, | ||
1361 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) | ||
1362 | { | ||
1363 | return ProcessPropertiesUpdate(request, path, param, agentID, caps); | ||
1364 | })); | ||
1365 | } | ||
1366 | private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps) | ||
1367 | { | ||
1368 | IClientAPI client; | ||
1369 | if ( ! m_scene.TryGetClient(agentID, out client) ) { | ||
1370 | m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString() ); | ||
1371 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); | ||
1372 | } | ||
1373 | |||
1374 | ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage(); | ||
1375 | OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request); | ||
1376 | |||
1377 | properties.Deserialize(args); | ||
1378 | |||
1379 | LandUpdateArgs land_update = new LandUpdateArgs(); | ||
1380 | int parcelID = properties.LocalID; | ||
1381 | land_update.AuthBuyerID = properties.AuthBuyerID; | ||
1382 | land_update.Category = properties.Category; | ||
1383 | land_update.Desc = properties.Desc; | ||
1384 | land_update.GroupID = properties.GroupID; | ||
1385 | land_update.LandingType = (byte) properties.Landing; | ||
1386 | land_update.MediaAutoScale = (byte) Convert.ToInt32(properties.MediaAutoScale); | ||
1387 | land_update.MediaID = properties.MediaID; | ||
1388 | land_update.MediaURL = properties.MediaURL; | ||
1389 | land_update.MusicURL = properties.MusicURL; | ||
1390 | land_update.Name = properties.Name; | ||
1391 | land_update.ParcelFlags = (uint) properties.ParcelFlags; | ||
1392 | land_update.PassHours = (int) properties.PassHours; | ||
1393 | land_update.PassPrice = (int) properties.PassPrice; | ||
1394 | land_update.SalePrice = (int) properties.SalePrice; | ||
1395 | land_update.SnapshotID = properties.SnapshotID; | ||
1396 | land_update.UserLocation = properties.UserLocation; | ||
1397 | land_update.UserLookAt = properties.UserLookAt; | ||
1398 | land_update.MediaDescription = properties.MediaDesc; | ||
1399 | land_update.MediaType = properties.MediaType; | ||
1400 | land_update.MediaWidth = properties.MediaWidth; | ||
1401 | land_update.MediaHeight = properties.MediaHeight; | ||
1402 | land_update.MediaLoop = properties.MediaLoop; | ||
1403 | land_update.ObscureMusic = properties.ObscureMusic; | ||
1404 | land_update.ObscureMedia = properties.ObscureMedia; | ||
1405 | |||
1406 | ILandObject land; | ||
1407 | lock (m_landList) | ||
1408 | { | ||
1409 | m_landList.TryGetValue(parcelID, out land); | ||
1410 | } | ||
1357 | 1411 | ||
1412 | if (land != null) { | ||
1413 | land.UpdateLandProperties(land_update, client); | ||
1414 | } else { | ||
1415 | m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID); | ||
1416 | } | ||
1417 | return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty()); | ||
1418 | } | ||
1358 | // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the | 1419 | // we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the |
1359 | // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. | 1420 | // "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to. |
1360 | // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x | 1421 | // So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 6864629..499b60c 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -229,6 +229,13 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
229 | newData.SnapshotID = args.SnapshotID; | 229 | newData.SnapshotID = args.SnapshotID; |
230 | newData.UserLocation = args.UserLocation; | 230 | newData.UserLocation = args.UserLocation; |
231 | newData.UserLookAt = args.UserLookAt; | 231 | newData.UserLookAt = args.UserLookAt; |
232 | newData.MediaType = args.MediaType; | ||
233 | newData.MediaDescription = args.MediaDescription; | ||
234 | newData.MediaWidth = args.MediaWidth; | ||
235 | newData.MediaHeight = args.MediaHeight; | ||
236 | newData.MediaLoop = args.MediaLoop; | ||
237 | newData.ObscureMusic = args.ObscureMusic; | ||
238 | newData.ObscureMedia = args.ObscureMedia; | ||
232 | 239 | ||
233 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); | 240 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
234 | 241 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs index e093f0a..81e4952 100644 --- a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs +++ b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs | |||
@@ -28,6 +28,7 @@ | |||
28 | using System.Net; | 28 | using System.Net; |
29 | using OpenMetaverse; | 29 | using OpenMetaverse; |
30 | using OpenMetaverse.Packets; | 30 | using OpenMetaverse.Packets; |
31 | using OpenMetaverse.Messages.Linden; | ||
31 | using OpenMetaverse.StructuredData; | 32 | using OpenMetaverse.StructuredData; |
32 | 33 | ||
33 | namespace OpenSim.Region.Framework.Interfaces | 34 | namespace OpenSim.Region.Framework.Interfaces |
@@ -54,7 +55,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
54 | uint ttl, UUID transactionID, bool fromGroup, byte[] binaryBucket); | 55 | uint ttl, UUID transactionID, bool fromGroup, byte[] binaryBucket); |
55 | void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID toAgent, bool canVoiceChat, | 56 | void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID toAgent, bool canVoiceChat, |
56 | bool isModerator, bool textMute); | 57 | bool isModerator, bool textMute); |
57 | void ParcelProperties(ParcelPropertiesPacket parcelPropertiesPacket, UUID avatarID); | 58 | void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID); |
58 | void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID); | 59 | void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID); |
59 | } | 60 | } |
60 | } | 61 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 2ac46e2..0674e62 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1940,7 +1940,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1940 | 1940 | ||
1941 | // We can only call this after adding the scene object, since the scene object references the scene | 1941 | // We can only call this after adding the scene object, since the scene object references the scene |
1942 | // to find out if scripts should be activated at all. | 1942 | // to find out if scripts should be activated at all. |
1943 | group.CreateScriptInstances(param, true, DefaultScriptEngine, 2); | 1943 | group.CreateScriptInstances(param, true, DefaultScriptEngine, 3); |
1944 | 1944 | ||
1945 | group.ScheduleGroupForFullUpdate(); | 1945 | group.ScheduleGroupForFullUpdate(); |
1946 | 1946 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index db081cc..56ac2c2 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2376,7 +2376,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2376 | return false; | 2376 | return false; |
2377 | } | 2377 | } |
2378 | 2378 | ||
2379 | newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 1); | 2379 | newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 2); |
2380 | 2380 | ||
2381 | newObject.ResumeScripts(); | 2381 | newObject.ResumeScripts(); |
2382 | 2382 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 2c242c9..e7175c5 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1845,7 +1845,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1845 | copy.UpdateGroupRotationR(rot); | 1845 | copy.UpdateGroupRotationR(rot); |
1846 | } | 1846 | } |
1847 | 1847 | ||
1848 | copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 0); | 1848 | copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1); |
1849 | copy.HasGroupChanged = true; | 1849 | copy.HasGroupChanged = true; |
1850 | copy.ScheduleGroupForFullUpdate(); | 1850 | copy.ScheduleGroupForFullUpdate(); |
1851 | copy.ResumeScripts(); | 1851 | copy.ResumeScripts(); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 40a8f83..64a6dd5 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -977,77 +977,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
977 | } | 977 | } |
978 | } | 978 | } |
979 | 979 | ||
980 | /// <summary> | ||
981 | /// Attach this scene object to the given avatar. | ||
982 | /// </summary> | ||
983 | /// <param name="agentID"></param> | ||
984 | /// <param name="attachmentpoint"></param> | ||
985 | /// <param name="AttachOffset"></param> | ||
986 | public void AttachToAgent(UUID agentID, uint attachmentpoint, Vector3 AttachOffset, bool silent) | ||
987 | { | ||
988 | ScenePresence avatar = m_scene.GetScenePresence(agentID); | ||
989 | if (avatar != null) | ||
990 | { | ||
991 | // don't attach attachments to child agents | ||
992 | if (avatar.IsChildAgent) return; | ||
993 | |||
994 | // m_log.DebugFormat("[SOG]: Adding attachment {0} to avatar {1}", Name, avatar.Name); | ||
995 | |||
996 | DetachFromBackup(); | ||
997 | |||
998 | // Remove from database and parcel prim count | ||
999 | m_scene.DeleteFromStorage(UUID); | ||
1000 | m_scene.EventManager.TriggerParcelPrimCountTainted(); | ||
1001 | |||
1002 | m_rootPart.AttachedAvatar = agentID; | ||
1003 | |||
1004 | //Anakin Lohner bug #3839 | ||
1005 | lock (m_parts) | ||
1006 | { | ||
1007 | foreach (SceneObjectPart p in m_parts.Values) | ||
1008 | { | ||
1009 | p.AttachedAvatar = agentID; | ||
1010 | } | ||
1011 | } | ||
1012 | |||
1013 | if (m_rootPart.PhysActor != null) | ||
1014 | { | ||
1015 | m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor); | ||
1016 | m_rootPart.PhysActor = null; | ||
1017 | } | ||
1018 | |||
1019 | AbsolutePosition = AttachOffset; | ||
1020 | m_rootPart.AttachedPos = AttachOffset; | ||
1021 | m_rootPart.IsAttachment = true; | ||
1022 | |||
1023 | m_rootPart.SetParentLocalId(avatar.LocalId); | ||
1024 | SetAttachmentPoint(Convert.ToByte(attachmentpoint)); | ||
1025 | |||
1026 | avatar.AddAttachment(this); | ||
1027 | |||
1028 | if (!silent) | ||
1029 | { | ||
1030 | // Killing it here will cause the client to deselect it | ||
1031 | // It then reappears on the avatar, deselected | ||
1032 | // through the full update below | ||
1033 | // | ||
1034 | if (IsSelected) | ||
1035 | { | ||
1036 | m_scene.SendKillObject(m_rootPart.LocalId); | ||
1037 | } | ||
1038 | |||
1039 | IsSelected = false; // fudge.... | ||
1040 | ScheduleGroupForFullUpdate(); | ||
1041 | } | ||
1042 | } | ||
1043 | else | ||
1044 | { | ||
1045 | m_log.WarnFormat( | ||
1046 | "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present", | ||
1047 | UUID, agentID, Scene.RegionInfo.RegionName); | ||
1048 | } | ||
1049 | } | ||
1050 | |||
1051 | public byte GetAttachmentPoint() | 980 | public byte GetAttachmentPoint() |
1052 | { | 981 | { |
1053 | return m_rootPart.Shape.State; | 982 | return m_rootPart.Shape.State; |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index fbb3177..cc9355e 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2464,7 +2464,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2464 | m_controllingClient.SendAvatarDataImmediate(this); | 2464 | m_controllingClient.SendAvatarDataImmediate(this); |
2465 | 2465 | ||
2466 | SendInitialFullUpdateToAllClients(); | 2466 | SendInitialFullUpdateToAllClients(); |
2467 | SendAppearanceToAllOtherAgents(); | ||
2468 | } | 2467 | } |
2469 | 2468 | ||
2470 | /// <summary> | 2469 | /// <summary> |
@@ -3383,6 +3382,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
3383 | m_attachments.Add(gobj); | 3382 | m_attachments.Add(gobj); |
3384 | } | 3383 | } |
3385 | } | 3384 | } |
3385 | |||
3386 | /// <summary> | ||
3387 | /// Get the scene object attached to the given point. | ||
3388 | /// </summary> | ||
3389 | /// <param name="attachmentPoint"></param> | ||
3390 | /// <returns>Returns an empty list if there were no attachments at the point.</returns> | ||
3391 | public List<SceneObjectGroup> GetAttachments(uint attachmentPoint) | ||
3392 | { | ||
3393 | List<SceneObjectGroup> attachments = new List<SceneObjectGroup>(); | ||
3394 | |||
3395 | lock (m_attachments) | ||
3396 | { | ||
3397 | foreach (SceneObjectGroup so in m_attachments) | ||
3398 | { | ||
3399 | if (attachmentPoint == so.RootPart.AttachmentPoint) | ||
3400 | attachments.Add(so); | ||
3401 | } | ||
3402 | } | ||
3403 | |||
3404 | return attachments; | ||
3405 | } | ||
3386 | 3406 | ||
3387 | public bool HasAttachments() | 3407 | public bool HasAttachments() |
3388 | { | 3408 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index af42dae..b51b410 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -9137,8 +9137,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9137 | // we send to all | 9137 | // we send to all |
9138 | landData.MediaID = new UUID(texture); | 9138 | landData.MediaID = new UUID(texture); |
9139 | landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; | 9139 | landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; |
9140 | landData.MediaSize[0] = width; | 9140 | landData.MediaWidth = width; |
9141 | landData.MediaSize[1] = height; | 9141 | landData.MediaHeight = height; |
9142 | landData.MediaType = mediaType; | 9142 | landData.MediaType = mediaType; |
9143 | 9143 | ||
9144 | // do that one last, it will cause a ParcelPropertiesUpdate | 9144 | // do that one last, it will cause a ParcelPropertiesUpdate |
@@ -9224,8 +9224,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9224 | list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaType)); | 9224 | list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaType)); |
9225 | break; | 9225 | break; |
9226 | case ParcelMediaCommandEnum.Size: | 9226 | case ParcelMediaCommandEnum.Size: |
9227 | list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[0])); | 9227 | list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaWidth)); |
9228 | list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[1])); | 9228 | list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaHeight)); |
9229 | break; | 9229 | break; |
9230 | default: | 9230 | default: |
9231 | ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url; | 9231 | ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url; |