diff options
Diffstat (limited to 'OpenSim')
3 files changed, 85 insertions, 46 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs index b166588..68a484a 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs | |||
@@ -59,6 +59,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments | |||
59 | 59 | ||
60 | public void AddRegion(Scene scene) | 60 | public void AddRegion(Scene scene) |
61 | { | 61 | { |
62 | } | ||
63 | |||
64 | public void RemoveRegion(Scene scene) | ||
65 | { | ||
66 | } | ||
67 | |||
68 | public void RegionLoaded(Scene scene) | ||
69 | { | ||
62 | m_scene = scene; | 70 | m_scene = scene; |
63 | 71 | ||
64 | IScriptModuleComms comms = scene.RequestModuleInterface<IScriptModuleComms>(); | 72 | IScriptModuleComms comms = scene.RequestModuleInterface<IScriptModuleComms>(); |
@@ -73,14 +81,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments | |||
73 | } | 81 | } |
74 | } | 82 | } |
75 | 83 | ||
76 | public void RemoveRegion(Scene scene) | ||
77 | { | ||
78 | } | ||
79 | |||
80 | public void RegionLoaded(Scene scene) | ||
81 | { | ||
82 | } | ||
83 | |||
84 | public void Close() | 84 | public void Close() |
85 | { | 85 | { |
86 | } | 86 | } |
@@ -120,6 +120,34 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments | |||
120 | if (!m_scene.TryGetScenePresence(item.PermsGranter, out target)) | 120 | if (!m_scene.TryGetScenePresence(item.PermsGranter, out target)) |
121 | return; | 121 | return; |
122 | 122 | ||
123 | if (target.UUID != hostPart.ParentGroup.OwnerID) | ||
124 | { | ||
125 | uint effectivePerms = hostPart.ParentGroup.GetEffectivePermissions(); | ||
126 | |||
127 | if ((effectivePerms & (uint)PermissionMask.Transfer) == 0) | ||
128 | return; | ||
129 | |||
130 | hostPart.ParentGroup.SetOwnerId(target.UUID); | ||
131 | hostPart.ParentGroup.SetRootPartOwner(hostPart.ParentGroup.RootPart, target.UUID, target.ControllingClient.ActiveGroupId); | ||
132 | |||
133 | if (m_scene.Permissions.PropagatePermissions()) | ||
134 | { | ||
135 | foreach (SceneObjectPart child in hostPart.ParentGroup.Parts) | ||
136 | { | ||
137 | child.Inventory.ChangeInventoryOwner(target.UUID); | ||
138 | child.TriggerScriptChangedEvent(Changed.OWNER); | ||
139 | child.ApplyNextOwnerPermissions(); | ||
140 | } | ||
141 | } | ||
142 | |||
143 | hostPart.ParentGroup.RootPart.ObjectSaleType = 0; | ||
144 | hostPart.ParentGroup.RootPart.SalePrice = 10; | ||
145 | |||
146 | hostPart.ParentGroup.HasGroupChanged = true; | ||
147 | hostPart.ParentGroup.RootPart.SendPropertiesToClient(target.ControllingClient); | ||
148 | hostPart.ParentGroup.RootPart.ScheduleFullUpdate(); | ||
149 | } | ||
150 | |||
123 | attachmentsModule.AttachObject(target, hostPart.ParentGroup, (uint)attachmentPoint, false, true, true); | 151 | attachmentsModule.AttachObject(target, hostPart.ParentGroup, (uint)attachmentPoint, false, true, true); |
124 | } | 152 | } |
125 | } | 153 | } |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index 3f19370..cef2cfd 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | |||
@@ -177,16 +177,17 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
177 | if (m_avatars.ContainsKey(agentID)) | 177 | if (m_avatars.ContainsKey(agentID)) |
178 | { | 178 | { |
179 | ScenePresence sp; | 179 | ScenePresence sp; |
180 | scene.TryGetScenePresence(agentID, out sp); | 180 | if (scene.TryGetScenePresence(agentID, out sp)) |
181 | 181 | { | |
182 | // m_log.DebugFormat( | 182 | m_log.DebugFormat( |
183 | // "[NPC MODULE]: Moving {0} to {1} in {2}, noFly {3}, landAtTarget {4}", | 183 | "[NPC MODULE]: Moving {0} to {1} in {2}, noFly {3}, landAtTarget {4}", |
184 | // sp.Name, pos, scene.RegionInfo.RegionName, noFly, landAtTarget); | 184 | sp.Name, pos, scene.RegionInfo.RegionName, noFly, landAtTarget); |
185 | |||
186 | sp.MoveToTarget(pos, noFly, landAtTarget); | ||
187 | sp.SetAlwaysRun = running; | ||
188 | 185 | ||
189 | return true; | 186 | sp.MoveToTarget(pos, noFly, landAtTarget); |
187 | sp.SetAlwaysRun = running; | ||
188 | |||
189 | return true; | ||
190 | } | ||
190 | } | 191 | } |
191 | } | 192 | } |
192 | 193 | ||
@@ -200,12 +201,13 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
200 | if (m_avatars.ContainsKey(agentID)) | 201 | if (m_avatars.ContainsKey(agentID)) |
201 | { | 202 | { |
202 | ScenePresence sp; | 203 | ScenePresence sp; |
203 | scene.TryGetScenePresence(agentID, out sp); | 204 | if (scene.TryGetScenePresence(agentID, out sp)) |
204 | 205 | { | |
205 | sp.Velocity = Vector3.Zero; | 206 | sp.Velocity = Vector3.Zero; |
206 | sp.ResetMoveToTarget(); | 207 | sp.ResetMoveToTarget(); |
207 | 208 | ||
208 | return true; | 209 | return true; |
210 | } | ||
209 | } | 211 | } |
210 | } | 212 | } |
211 | 213 | ||
@@ -223,9 +225,6 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
223 | { | 225 | { |
224 | if (m_avatars.ContainsKey(agentID)) | 226 | if (m_avatars.ContainsKey(agentID)) |
225 | { | 227 | { |
226 | ScenePresence sp; | ||
227 | scene.TryGetScenePresence(agentID, out sp); | ||
228 | |||
229 | m_avatars[agentID].Say(channel, text); | 228 | m_avatars[agentID].Say(channel, text); |
230 | 229 | ||
231 | return true; | 230 | return true; |
@@ -241,9 +240,6 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
241 | { | 240 | { |
242 | if (m_avatars.ContainsKey(agentID)) | 241 | if (m_avatars.ContainsKey(agentID)) |
243 | { | 242 | { |
244 | ScenePresence sp; | ||
245 | scene.TryGetScenePresence(agentID, out sp); | ||
246 | |||
247 | m_avatars[agentID].Shout(channel, text); | 243 | m_avatars[agentID].Shout(channel, text); |
248 | 244 | ||
249 | return true; | 245 | return true; |
@@ -260,11 +256,13 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
260 | if (m_avatars.ContainsKey(agentID)) | 256 | if (m_avatars.ContainsKey(agentID)) |
261 | { | 257 | { |
262 | ScenePresence sp; | 258 | ScenePresence sp; |
263 | scene.TryGetScenePresence(agentID, out sp); | 259 | if (scene.TryGetScenePresence(agentID, out sp)) |
264 | sp.HandleAgentRequestSit(m_avatars[agentID], agentID, partID, Vector3.Zero); | 260 | { |
265 | // sp.HandleAgentSit(m_avatars[agentID], agentID); | 261 | sp.HandleAgentRequestSit(m_avatars[agentID], agentID, partID, Vector3.Zero); |
266 | 262 | // sp.HandleAgentSit(m_avatars[agentID], agentID); | |
267 | return true; | 263 | |
264 | return true; | ||
265 | } | ||
268 | } | 266 | } |
269 | } | 267 | } |
270 | 268 | ||
@@ -277,9 +275,6 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
277 | { | 275 | { |
278 | if (m_avatars.ContainsKey(agentID)) | 276 | if (m_avatars.ContainsKey(agentID)) |
279 | { | 277 | { |
280 | ScenePresence sp; | ||
281 | scene.TryGetScenePresence(agentID, out sp); | ||
282 | |||
283 | m_avatars[agentID].Whisper(channel, text); | 278 | m_avatars[agentID].Whisper(channel, text); |
284 | 279 | ||
285 | return true; | 280 | return true; |
@@ -296,10 +291,12 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
296 | if (m_avatars.ContainsKey(agentID)) | 291 | if (m_avatars.ContainsKey(agentID)) |
297 | { | 292 | { |
298 | ScenePresence sp; | 293 | ScenePresence sp; |
299 | scene.TryGetScenePresence(agentID, out sp); | 294 | if (scene.TryGetScenePresence(agentID, out sp)) |
300 | sp.StandUp(); | 295 | { |
296 | sp.StandUp(); | ||
301 | 297 | ||
302 | return true; | 298 | return true; |
299 | } | ||
303 | } | 300 | } |
304 | } | 301 | } |
305 | 302 | ||
@@ -312,6 +309,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
312 | { | 309 | { |
313 | if (m_avatars.ContainsKey(agentID)) | 310 | if (m_avatars.ContainsKey(agentID)) |
314 | return m_avatars[agentID].Touch(objectID); | 311 | return m_avatars[agentID].Touch(objectID); |
312 | |||
315 | return false; | 313 | return false; |
316 | } | 314 | } |
317 | } | 315 | } |
@@ -322,9 +320,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
322 | { | 320 | { |
323 | NPCAvatar av; | 321 | NPCAvatar av; |
324 | if (m_avatars.TryGetValue(agentID, out av)) | 322 | if (m_avatars.TryGetValue(agentID, out av)) |
325 | { | ||
326 | return av.OwnerID; | 323 | return av.OwnerID; |
327 | } | ||
328 | } | 324 | } |
329 | 325 | ||
330 | return UUID.Zero; | 326 | return UUID.Zero; |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 0bb933c..2f02f1f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -2466,8 +2466,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2466 | if (!npcModule.CheckPermissions(npcId, m_host.OwnerID)) | 2466 | if (!npcModule.CheckPermissions(npcId, m_host.OwnerID)) |
2467 | return new LSL_Vector(0, 0, 0); | 2467 | return new LSL_Vector(0, 0, 0); |
2468 | 2468 | ||
2469 | Vector3 pos = World.GetScenePresence(npcId).AbsolutePosition; | 2469 | ScenePresence sp = World.GetScenePresence(npcId); |
2470 | return new LSL_Vector(pos.X, pos.Y, pos.Z); | 2470 | |
2471 | if (sp != null) | ||
2472 | { | ||
2473 | Vector3 pos = sp.AbsolutePosition; | ||
2474 | return new LSL_Vector(pos.X, pos.Y, pos.Z); | ||
2475 | } | ||
2471 | } | 2476 | } |
2472 | 2477 | ||
2473 | return new LSL_Vector(0, 0, 0); | 2478 | return new LSL_Vector(0, 0, 0); |
@@ -2535,9 +2540,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2535 | return new LSL_Rotation(Quaternion.Identity.X, Quaternion.Identity.Y, Quaternion.Identity.Z, Quaternion.Identity.W); | 2540 | return new LSL_Rotation(Quaternion.Identity.X, Quaternion.Identity.Y, Quaternion.Identity.Z, Quaternion.Identity.W); |
2536 | 2541 | ||
2537 | ScenePresence sp = World.GetScenePresence(npcId); | 2542 | ScenePresence sp = World.GetScenePresence(npcId); |
2538 | Quaternion rot = sp.Rotation; | ||
2539 | 2543 | ||
2540 | return new LSL_Rotation(rot.X, rot.Y, rot.Z, rot.W); | 2544 | if (sp != null) |
2545 | { | ||
2546 | Quaternion rot = sp.Rotation; | ||
2547 | return new LSL_Rotation(rot.X, rot.Y, rot.Z, rot.W); | ||
2548 | } | ||
2541 | } | 2549 | } |
2542 | 2550 | ||
2543 | return new LSL_Rotation(Quaternion.Identity.X, Quaternion.Identity.Y, Quaternion.Identity.Z, Quaternion.Identity.W); | 2551 | return new LSL_Rotation(Quaternion.Identity.X, Quaternion.Identity.Y, Quaternion.Identity.Z, Quaternion.Identity.W); |
@@ -2559,7 +2567,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2559 | return; | 2567 | return; |
2560 | 2568 | ||
2561 | ScenePresence sp = World.GetScenePresence(npcId); | 2569 | ScenePresence sp = World.GetScenePresence(npcId); |
2562 | sp.Rotation = LSL_Api.Rot2Quaternion(rotation); | 2570 | |
2571 | if (sp != null) | ||
2572 | sp.Rotation = LSL_Api.Rot2Quaternion(rotation); | ||
2563 | } | 2573 | } |
2564 | } | 2574 | } |
2565 | 2575 | ||
@@ -2737,6 +2747,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2737 | { | 2747 | { |
2738 | CheckThreatLevel(ThreatLevel.High, "osNpcTouch"); | 2748 | CheckThreatLevel(ThreatLevel.High, "osNpcTouch"); |
2739 | m_host.AddScriptLPS(1); | 2749 | m_host.AddScriptLPS(1); |
2750 | |||
2740 | INPCModule module = World.RequestModuleInterface<INPCModule>(); | 2751 | INPCModule module = World.RequestModuleInterface<INPCModule>(); |
2741 | int linkNum = link_num.value; | 2752 | int linkNum = link_num.value; |
2742 | if (module != null || (linkNum < 0 && linkNum != ScriptBaseClass.LINK_THIS)) | 2753 | if (module != null || (linkNum < 0 && linkNum != ScriptBaseClass.LINK_THIS)) |
@@ -2744,12 +2755,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2744 | UUID npcId; | 2755 | UUID npcId; |
2745 | if (!UUID.TryParse(npcLSL_Key, out npcId) || !module.CheckPermissions(npcId, m_host.OwnerID)) | 2756 | if (!UUID.TryParse(npcLSL_Key, out npcId) || !module.CheckPermissions(npcId, m_host.OwnerID)) |
2746 | return; | 2757 | return; |
2758 | |||
2747 | SceneObjectPart part = null; | 2759 | SceneObjectPart part = null; |
2748 | UUID objectId; | 2760 | UUID objectId; |
2749 | if (UUID.TryParse(LSL_String.ToString(object_key), out objectId)) | 2761 | if (UUID.TryParse(LSL_String.ToString(object_key), out objectId)) |
2750 | part = World.GetSceneObjectPart(objectId); | 2762 | part = World.GetSceneObjectPart(objectId); |
2763 | |||
2751 | if (part == null) | 2764 | if (part == null) |
2752 | return; | 2765 | return; |
2766 | |||
2753 | if (linkNum != ScriptBaseClass.LINK_THIS) | 2767 | if (linkNum != ScriptBaseClass.LINK_THIS) |
2754 | { | 2768 | { |
2755 | if (linkNum == 0 || linkNum == ScriptBaseClass.LINK_ROOT) | 2769 | if (linkNum == 0 || linkNum == ScriptBaseClass.LINK_ROOT) |
@@ -2764,6 +2778,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2764 | return; | 2778 | return; |
2765 | } | 2779 | } |
2766 | } | 2780 | } |
2781 | |||
2767 | module.Touch(npcId, part.UUID); | 2782 | module.Touch(npcId, part.UUID); |
2768 | } | 2783 | } |
2769 | } | 2784 | } |