diff options
Diffstat (limited to '')
16 files changed, 344 insertions, 227 deletions
diff --git a/OpenSim/Data/Tests/InventoryTests.cs b/OpenSim/Data/Tests/InventoryTests.cs index dc03259..9c2a2d6 100644 --- a/OpenSim/Data/Tests/InventoryTests.cs +++ b/OpenSim/Data/Tests/InventoryTests.cs | |||
@@ -323,7 +323,7 @@ namespace OpenSim.Data.Tests | |||
323 | .IgnoreProperty(x => x.InvType) | 323 | .IgnoreProperty(x => x.InvType) |
324 | .IgnoreProperty(x => x.CreatorIdAsUuid) | 324 | .IgnoreProperty(x => x.CreatorIdAsUuid) |
325 | .IgnoreProperty(x => x.Description) | 325 | .IgnoreProperty(x => x.Description) |
326 | .IgnoreProperty(x => x.CreatorId) | 326 | .IgnoreProperty(x => x.CreatorIdentification) |
327 | .IgnoreProperty(x => x.CreatorData)); | 327 | .IgnoreProperty(x => x.CreatorData)); |
328 | 328 | ||
329 | inventoryScrambler.Scramble(expected); | 329 | inventoryScrambler.Scramble(expected); |
@@ -334,7 +334,7 @@ namespace OpenSim.Data.Tests | |||
334 | .IgnoreProperty(x => x.InvType) | 334 | .IgnoreProperty(x => x.InvType) |
335 | .IgnoreProperty(x => x.CreatorIdAsUuid) | 335 | .IgnoreProperty(x => x.CreatorIdAsUuid) |
336 | .IgnoreProperty(x => x.Description) | 336 | .IgnoreProperty(x => x.Description) |
337 | .IgnoreProperty(x => x.CreatorId) | 337 | .IgnoreProperty(x => x.CreatorIdentification) |
338 | .IgnoreProperty(x => x.CreatorData)); | 338 | .IgnoreProperty(x => x.CreatorData)); |
339 | } | 339 | } |
340 | 340 | ||
diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs index cc9fcea..1600bdc 100644 --- a/OpenSim/Framework/AgentCircuitData.cs +++ b/OpenSim/Framework/AgentCircuitData.cs | |||
@@ -302,31 +302,26 @@ namespace OpenSim.Framework | |||
302 | if (args["start_pos"] != null) | 302 | if (args["start_pos"] != null) |
303 | Vector3.TryParse(args["start_pos"].AsString(), out startpos); | 303 | Vector3.TryParse(args["start_pos"].AsString(), out startpos); |
304 | 304 | ||
305 | // DEBUG ON | 305 | m_log.InfoFormat("[AGENTCIRCUITDATA] agentid={0}, child={1}, startpos={2}",AgentID,child,startpos.ToString()); |
306 | m_log.WarnFormat("[AGENTCIRCUITDATA] agentid={0}, child={1}, startpos={2}",AgentID,child,startpos.ToString()); | ||
307 | // DEBUG OFF | ||
308 | 306 | ||
309 | try { | 307 | try { |
310 | // Unpack various appearance elements | 308 | // Unpack various appearance elements |
311 | Appearance = new AvatarAppearance(AgentID); | 309 | Appearance = new AvatarAppearance(AgentID); |
312 | 310 | ||
313 | // Eventually this code should be deprecated, use full appearance | 311 | // Eventually this code should be deprecated, use full appearance |
314 | // packing in packed_appearance | 312 | // packing in packed_appearance |
315 | if (args["appearance_serial"] != null) | 313 | if (args["appearance_serial"] != null) |
316 | Appearance.Serial = args["appearance_serial"].AsInteger(); | 314 | Appearance.Serial = args["appearance_serial"].AsInteger(); |
317 | 315 | ||
318 | if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map)) | 316 | if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map)) |
319 | { | 317 | { |
320 | Appearance.Unpack((OSDMap)args["packed_appearance"]); | 318 | Appearance.Unpack((OSDMap)args["packed_appearance"]); |
321 | // DEBUG ON | 319 | m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance"); |
322 | m_log.WarnFormat("[AGENTCIRCUITDATA] unpacked appearance"); | 320 | } |
323 | // DEBUG OFF | 321 | else |
322 | m_log.Warn("[AGENTCIRCUITDATA] failed to find a valid packed_appearance"); | ||
324 | } | 323 | } |
325 | // DEBUG ON | 324 | catch (Exception e) |
326 | else | ||
327 | m_log.Warn("[AGENTCIRCUITDATA] failed to find a valid packed_appearance"); | ||
328 | // DEBUG OFF | ||
329 | } catch (Exception e) | ||
330 | { | 325 | { |
331 | m_log.ErrorFormat("[AGENTCIRCUITDATA] failed to unpack appearance; {0}",e.Message); | 326 | m_log.ErrorFormat("[AGENTCIRCUITDATA] failed to unpack appearance; {0}",e.Message); |
332 | } | 327 | } |
diff --git a/OpenSim/Framework/AssetLandmark.cs b/OpenSim/Framework/AssetLandmark.cs index 7806c1f..f433235 100644 --- a/OpenSim/Framework/AssetLandmark.cs +++ b/OpenSim/Framework/AssetLandmark.cs | |||
@@ -51,8 +51,16 @@ namespace OpenSim.Framework | |||
51 | string[] parts = temp.Split('\n'); | 51 | string[] parts = temp.Split('\n'); |
52 | int.TryParse(parts[0].Substring(17, 1), out Version); | 52 | int.TryParse(parts[0].Substring(17, 1), out Version); |
53 | UUID.TryParse(parts[1].Substring(10, 36), out RegionID); | 53 | UUID.TryParse(parts[1].Substring(10, 36), out RegionID); |
54 | // the vector is stored with spaces as separators, not with commas ("10.3 32.5 43" instead of "10.3, 32.5, 43") | 54 | // The position is a vector with spaces as separators ("10.3 32.5 43"). |
55 | Vector3.TryParse(parts[2].Substring(10, parts[2].Length - 10).Replace(" ", ","), out Position); | 55 | // Parse each scalar separately to take into account the system's culture setting. |
56 | string[] scalars = parts[2].Substring(10, parts[2].Length - 10).Split(' '); | ||
57 | if (scalars.Length > 0) | ||
58 | System.Single.TryParse(scalars[0], out Position.X); | ||
59 | if (scalars.Length > 1) | ||
60 | System.Single.TryParse(scalars[1], out Position.Y); | ||
61 | if (scalars.Length > 2) | ||
62 | System.Single.TryParse(scalars[2], out Position.Z); | ||
63 | |||
56 | ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle); | 64 | ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle); |
57 | } | 65 | } |
58 | } | 66 | } |
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs index a227338..ce0b2fb 100644 --- a/OpenSim/Framework/ChildAgentDataUpdate.cs +++ b/OpenSim/Framework/ChildAgentDataUpdate.cs | |||
@@ -331,9 +331,7 @@ namespace OpenSim.Framework | |||
331 | 331 | ||
332 | public virtual OSDMap Pack() | 332 | public virtual OSDMap Pack() |
333 | { | 333 | { |
334 | // DEBUG ON | 334 | m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data"); |
335 | m_log.WarnFormat("[CHILDAGENTDATAUPDATE] Pack data"); | ||
336 | // DEBUG OFF | ||
337 | 335 | ||
338 | OSDMap args = new OSDMap(); | 336 | OSDMap args = new OSDMap(); |
339 | args["message_type"] = OSD.FromString("AgentData"); | 337 | args["message_type"] = OSD.FromString("AgentData"); |
@@ -454,9 +452,7 @@ namespace OpenSim.Framework | |||
454 | /// <param name="hash"></param> | 452 | /// <param name="hash"></param> |
455 | public virtual void Unpack(OSDMap args) | 453 | public virtual void Unpack(OSDMap args) |
456 | { | 454 | { |
457 | // DEBUG ON | 455 | m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Unpack data"); |
458 | m_log.WarnFormat("[CHILDAGENTDATAUPDATE] Unpack data"); | ||
459 | // DEBUG OFF | ||
460 | 456 | ||
461 | if (args.ContainsKey("region_id")) | 457 | if (args.ContainsKey("region_id")) |
462 | UUID.TryParse(args["region_id"].AsString(), out RegionID); | 458 | UUID.TryParse(args["region_id"].AsString(), out RegionID); |
@@ -613,10 +609,8 @@ namespace OpenSim.Framework | |||
613 | 609 | ||
614 | if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map) | 610 | if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map) |
615 | Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]); | 611 | Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]); |
616 | // DEBUG ON | ||
617 | else | 612 | else |
618 | m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance"); | 613 | m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance"); |
619 | // DEBUG OFF | ||
620 | 614 | ||
621 | if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array) | 615 | if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array) |
622 | { | 616 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 0df4585..ab1c206 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | |||
@@ -183,7 +183,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
183 | }); | 183 | }); |
184 | } | 184 | } |
185 | 185 | ||
186 | // m_log.WarnFormat("[AVFACTORY]: Complete texture check for {0}",client.AgentId); | 186 | m_log.WarnFormat("[AVFACTORY]: Complete texture check for {0}",client.AgentId); |
187 | } | 187 | } |
188 | 188 | ||
189 | // Process the visual params, this may change height as well | 189 | // Process the visual params, this may change height as well |
@@ -196,12 +196,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
196 | sp.SetHeight(sp.Appearance.AvatarHeight); | 196 | sp.SetHeight(sp.Appearance.AvatarHeight); |
197 | } | 197 | } |
198 | } | 198 | } |
199 | |||
200 | // Send the appearance back to the avatar, not clear that this is needed | ||
201 | sp.ControllingClient.SendAvatarDataImmediate(sp); | ||
202 | // AvatarAppearance avp = sp.Appearance; | ||
203 | // sp.ControllingClient.SendAppearance(avp.Owner,avp.VisualParams,avp.Texture.GetBytes()); | ||
204 | |||
205 | } | 199 | } |
206 | 200 | ||
207 | 201 | ||
@@ -274,21 +268,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
274 | 268 | ||
275 | // Send the appearance to everyone in the scene | 269 | // Send the appearance to everyone in the scene |
276 | sp.SendAppearanceToAllOtherAgents(); | 270 | sp.SendAppearanceToAllOtherAgents(); |
277 | // sp.ControllingClient.SendAvatarDataImmediate(sp); | ||
278 | |||
279 | // Send the appearance back to the avatar | ||
280 | // AvatarAppearance avp = sp.Appearance; | ||
281 | // sp.ControllingClient.SendAppearance(avp.Owner, avp.VisualParams, avp.Texture.GetBytes()); | ||
282 | |||
283 | /* | ||
284 | // this needs to be fixed, the flag should be on scene presence not the region module | ||
285 | // Start the animations if necessary | ||
286 | if (!m_startAnimationSet) | ||
287 | { | ||
288 | sp.Animator.UpdateMovementAnimations(); | ||
289 | m_startAnimationSet = true; | ||
290 | } | ||
291 | */ | ||
292 | } | 271 | } |
293 | 272 | ||
294 | private void HandleAppearanceSave(UUID agentid) | 273 | private void HandleAppearanceSave(UUID agentid) |
@@ -374,6 +353,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
374 | 353 | ||
375 | // m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}", client.AgentId); | 354 | // m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}", client.AgentId); |
376 | 355 | ||
356 | // operate on a copy of the appearance so we don't have to lock anything | ||
377 | AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false); | 357 | AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false); |
378 | 358 | ||
379 | foreach (AvatarWearingArgs.Wearable wear in e.NowWearing) | 359 | foreach (AvatarWearingArgs.Wearable wear in e.NowWearing) |
@@ -388,9 +368,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
388 | SetAppearanceAssets(sp.UUID, ref avatAppearance); | 368 | SetAppearanceAssets(sp.UUID, ref avatAppearance); |
389 | 369 | ||
390 | // could get fancier with the locks here, but in the spirit of "last write wins" | 370 | // could get fancier with the locks here, but in the spirit of "last write wins" |
391 | // this should work correctly | 371 | // this should work correctly, also, we don't need to send the appearance here |
372 | // since the "iswearing" will trigger a new set of visual param and baked texture changes | ||
373 | // when those complete, the new appearance will be sent | ||
392 | sp.Appearance = avatAppearance; | 374 | sp.Appearance = avatAppearance; |
393 | m_scene.AvatarService.SetAppearance(client.AgentId, sp.Appearance); | 375 | QueueAppearanceSave(client.AgentId); |
394 | } | 376 | } |
395 | 377 | ||
396 | private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance) | 378 | private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance) |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index f02a922..b57dc88 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -903,8 +903,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
903 | } | 903 | } |
904 | 904 | ||
905 | agent.MakeChildAgent(); | 905 | agent.MakeChildAgent(); |
906 | |||
906 | // now we have a child agent in this region. Request all interesting data about other (root) agents | 907 | // now we have a child agent in this region. Request all interesting data about other (root) agents |
907 | agent.SendInitialFullUpdateToAllClients(); | 908 | agent.SendOtherAgentsAvatarDataToMe(); |
909 | agent.SendOtherAgentsAppearanceToMe(); | ||
908 | 910 | ||
909 | CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true); | 911 | CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true); |
910 | 912 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 70aceb1..90223b1 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2324,16 +2324,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
2324 | m_log.DebugFormat("[SCENE]: Problem adding scene object {0} in {1} ", sog.UUID, RegionInfo.RegionName); | 2324 | m_log.DebugFormat("[SCENE]: Problem adding scene object {0} in {1} ", sog.UUID, RegionInfo.RegionName); |
2325 | return false; | 2325 | return false; |
2326 | } | 2326 | } |
2327 | 2327 | ||
2328 | newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 2); | 2328 | newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject)); |
2329 | 2329 | ||
2330 | newObject.ResumeScripts(); | 2330 | newObject.ResumeScripts(); |
2331 | 2331 | ||
2332 | // Do this as late as possible so that listeners have full access to the incoming object | 2332 | // Do this as late as possible so that listeners have full access to the incoming object |
2333 | EventManager.TriggerOnIncomingSceneObject(newObject); | 2333 | EventManager.TriggerOnIncomingSceneObject(newObject); |
2334 | 2334 | ||
2335 | TriggerChangedTeleport(newObject); | ||
2336 | |||
2337 | return true; | 2335 | return true; |
2338 | } | 2336 | } |
2339 | 2337 | ||
@@ -2441,7 +2439,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2441 | return true; | 2439 | return true; |
2442 | } | 2440 | } |
2443 | 2441 | ||
2444 | private void TriggerChangedTeleport(SceneObjectGroup sog) | 2442 | private int GetStateSource(SceneObjectGroup sog) |
2445 | { | 2443 | { |
2446 | ScenePresence sp = GetScenePresence(sog.OwnerID); | 2444 | ScenePresence sp = GetScenePresence(sog.OwnerID); |
2447 | 2445 | ||
@@ -2452,13 +2450,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2452 | if (aCircuit != null && (aCircuit.teleportFlags != (uint)TeleportFlags.Default)) | 2450 | if (aCircuit != null && (aCircuit.teleportFlags != (uint)TeleportFlags.Default)) |
2453 | { | 2451 | { |
2454 | // This will get your attention | 2452 | // This will get your attention |
2455 | //m_log.Error("[XXX] Triggering "); | 2453 | //m_log.Error("[XXX] Triggering CHANGED_TELEPORT"); |
2456 | 2454 | ||
2457 | // Trigger CHANGED_TELEPORT | 2455 | return 5; // StateSource.Teleporting |
2458 | sp.Scene.EventManager.TriggerOnScriptChangedEvent(sog.LocalId, (uint)Changed.TELEPORT); | ||
2459 | } | 2456 | } |
2460 | |||
2461 | } | 2457 | } |
2458 | return 2; // StateSource.PrimCrossing | ||
2462 | } | 2459 | } |
2463 | 2460 | ||
2464 | #endregion | 2461 | #endregion |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index db69093..82214bf 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -445,8 +445,36 @@ namespace OpenSim.Region.Framework.Scenes | |||
445 | PhysicsActor actor = m_physicsActor; | 445 | PhysicsActor actor = m_physicsActor; |
446 | if (actor != null) | 446 | if (actor != null) |
447 | m_pos = actor.Position; | 447 | m_pos = actor.Position; |
448 | else | ||
449 | { | ||
450 | // Obtain the correct position of a seated avatar. | ||
451 | // In addition to providing the correct position while | ||
452 | // the avatar is seated, this value will also | ||
453 | // be used as the location to unsit to. | ||
454 | // | ||
455 | // If m_parentID is not 0, assume we are a seated avatar | ||
456 | // and we should return the position based on the sittarget | ||
457 | // offset and rotation of the prim we are seated on. | ||
458 | // | ||
459 | // Generally, m_pos will contain the position of the avatar | ||
460 | // in the sim unless the avatar is on a sit target. While | ||
461 | // on a sit target, m_pos will contain the desired offset | ||
462 | // without the parent rotation applied. | ||
463 | if (m_parentID != 0) | ||
464 | { | ||
465 | SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); | ||
466 | if (part != null) | ||
467 | { | ||
468 | return m_parentPosition + (m_pos * part.GetWorldRotation()); | ||
469 | } | ||
470 | else | ||
471 | { | ||
472 | return m_parentPosition + m_pos; | ||
473 | } | ||
474 | } | ||
475 | } | ||
448 | 476 | ||
449 | return m_parentPosition + m_pos; | 477 | return m_pos; |
450 | } | 478 | } |
451 | set | 479 | set |
452 | { | 480 | { |
@@ -703,7 +731,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
703 | // Note: This won't send data *to* other clients in that region (children don't send) | 731 | // Note: This won't send data *to* other clients in that region (children don't send) |
704 | 732 | ||
705 | // MIC: This gets called again in CompleteMovement | 733 | // MIC: This gets called again in CompleteMovement |
706 | SendInitialFullUpdateToAllClients(); | 734 | // SendInitialFullUpdateToAllClients(); |
735 | SendOtherAgentsAvatarDataToMe(); | ||
736 | SendOtherAgentsAppearanceToMe(); | ||
707 | 737 | ||
708 | RegisterToEvents(); | 738 | RegisterToEvents(); |
709 | SetDirectionVectors(); | 739 | SetDirectionVectors(); |
@@ -1613,7 +1643,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1613 | { | 1643 | { |
1614 | AbsolutePosition = part.AbsolutePosition; | 1644 | AbsolutePosition = part.AbsolutePosition; |
1615 | Velocity = Vector3.Zero; | 1645 | Velocity = Vector3.Zero; |
1616 | SendFullUpdateToAllClients(); | 1646 | SendAvatarDataToAllAgents(); |
1617 | 1647 | ||
1618 | //HandleAgentSit(ControllingClient, m_requestedSitTargetUUID); | 1648 | //HandleAgentSit(ControllingClient, m_requestedSitTargetUUID); |
1619 | } | 1649 | } |
@@ -1688,7 +1718,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1688 | m_parentPosition = Vector3.Zero; | 1718 | m_parentPosition = Vector3.Zero; |
1689 | 1719 | ||
1690 | m_parentID = 0; | 1720 | m_parentID = 0; |
1691 | SendFullUpdateToAllClients(); | 1721 | SendAvatarDataToAllAgents(); |
1692 | m_requestedSitTargetID = 0; | 1722 | m_requestedSitTargetID = 0; |
1693 | if (m_physicsActor != null && m_appearance != null) | 1723 | if (m_physicsActor != null && m_appearance != null) |
1694 | { | 1724 | { |
@@ -2154,7 +2184,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2154 | RemoveFromPhysicalScene(); | 2184 | RemoveFromPhysicalScene(); |
2155 | 2185 | ||
2156 | Animator.TrySetMovementAnimation(sitAnimation); | 2186 | Animator.TrySetMovementAnimation(sitAnimation); |
2157 | SendFullUpdateToAllClients(); | 2187 | SendAvatarDataToAllAgents(); |
2158 | // This may seem stupid, but Our Full updates don't send avatar rotation :P | 2188 | // This may seem stupid, but Our Full updates don't send avatar rotation :P |
2159 | // So we're also sending a terse update (which has avatar rotation) | 2189 | // So we're also sending a terse update (which has avatar rotation) |
2160 | // [Update] We do now. | 2190 | // [Update] We do now. |
@@ -2379,165 +2409,169 @@ namespace OpenSim.Region.Framework.Scenes | |||
2379 | } | 2409 | } |
2380 | 2410 | ||
2381 | /// <summary> | 2411 | /// <summary> |
2382 | /// Tell other client about this avatar (The client previously didn't know or had outdated details about this avatar) | 2412 | /// Do everything required once a client completes its movement into a region and becomes |
2413 | /// a root agent. | ||
2383 | /// </summary> | 2414 | /// </summary> |
2384 | /// <param name="remoteAvatar"></param> | 2415 | private void SendInitialData() |
2385 | public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar) | ||
2386 | { | 2416 | { |
2387 | // 2 stage check is needed. | 2417 | // Moved this into CompleteMovement to ensure that m_appearance is initialized before |
2388 | if (remoteAvatar == null) | 2418 | // the inventory arrives |
2389 | return; | 2419 | // m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance); |
2390 | |||
2391 | IClientAPI cl = remoteAvatar.ControllingClient; | ||
2392 | if (cl == null) | ||
2393 | return; | ||
2394 | 2420 | ||
2395 | if (m_appearance.Texture == null) | 2421 | // This agent just became root. We are going to tell everyone about it. The process of |
2396 | return; | 2422 | // getting other avatars information was initiated in the constructor... don't do it |
2423 | // again here... | ||
2424 | SendAvatarDataToAllAgents(); | ||
2397 | 2425 | ||
2398 | // MT: This is needed for sit. It's legal to send it to oneself, and the name | 2426 | // We have an appearance but we may not have the baked textures. Check the asset cache |
2399 | // of the method is a misnomer | 2427 | // to see if all the baked textures are already here. |
2400 | // | 2428 | if (m_scene.AvatarFactory != null) |
2401 | // if (LocalId == remoteAvatar.LocalId) | 2429 | { |
2402 | // { | 2430 | if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient)) |
2403 | // m_log.WarnFormat("[SCENEPRESENCE]: An agent is attempting to send avatar data to itself; {0}", UUID); | 2431 | { |
2404 | // return; | 2432 | // m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name); |
2405 | // } | 2433 | SendAppearanceToAgent(this); |
2406 | 2434 | ||
2407 | if (IsChildAgent) | 2435 | // If the avatars baked textures are all in the cache, then we have a |
2436 | // complete appearance... send it out, if not, then we'll send it when | ||
2437 | // the avatar finishes updating its appearance | ||
2438 | SendAppearanceToAllOtherAgents(); | ||
2439 | } | ||
2440 | } | ||
2441 | else | ||
2408 | { | 2442 | { |
2409 | m_log.WarnFormat("[SCENEPRESENCE]: A child agent is attempting to send out avatar data; {0}", UUID); | 2443 | m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name); |
2410 | return; | ||
2411 | } | 2444 | } |
2412 | |||
2413 | remoteAvatar.m_controllingClient.SendAvatarDataImmediate(this); | ||
2414 | m_scene.StatsReporter.AddAgentUpdates(1); | ||
2415 | } | 2445 | } |
2416 | 2446 | ||
2417 | /// <summary> | 2447 | /// <summary> |
2418 | /// Tell *ALL* agents about this agent | 2448 | /// Send this agent's avatar data to all other root and child agents in the scene |
2449 | /// This agent must be root. This avatar will receive its own update. | ||
2419 | /// </summary> | 2450 | /// </summary> |
2420 | public void SendInitialFullUpdateToAllClients() | 2451 | public void SendAvatarDataToAllAgents() |
2421 | { | 2452 | { |
2422 | m_perfMonMS = Util.EnvironmentTickCount(); | 2453 | // only send update from root agents to other clients; children are only "listening posts" |
2423 | int avUpdates = 0; | 2454 | if (IsChildAgent) |
2424 | m_scene.ForEachScenePresence(delegate(ScenePresence avatar) | ||
2425 | { | 2455 | { |
2426 | ++avUpdates; | 2456 | m_log.Warn("[SCENEPRESENCE] attempt to send avatar data from a child agent"); |
2427 | 2457 | return; | |
2428 | // Don't update ourselves | 2458 | } |
2429 | if (avatar.LocalId == LocalId) | 2459 | |
2430 | return; | 2460 | m_perfMonMS = Util.EnvironmentTickCount(); |
2431 | |||
2432 | // If this is a root agent, then get info about the avatar | ||
2433 | if (!IsChildAgent) | ||
2434 | { | ||
2435 | SendFullUpdateToOtherClient(avatar); | ||
2436 | } | ||
2437 | 2461 | ||
2438 | // If the other avatar is a root | 2462 | int count = 0; |
2439 | if (!avatar.IsChildAgent) | 2463 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) |
2440 | { | 2464 | { |
2441 | avatar.SendFullUpdateToOtherClient(this); | 2465 | SendAvatarDataToAgent(scenePresence); |
2442 | avatar.SendAppearanceToOtherAgent(this); | 2466 | count++; |
2443 | avatar.Animator.SendAnimPackToClient(ControllingClient); | 2467 | }); |
2444 | } | ||
2445 | }); | ||
2446 | 2468 | ||
2447 | m_scene.StatsReporter.AddAgentUpdates(avUpdates); | 2469 | m_scene.StatsReporter.AddAgentUpdates(count); |
2448 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); | 2470 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); |
2449 | |||
2450 | //Animator.SendAnimPack(); | ||
2451 | } | 2471 | } |
2452 | 2472 | ||
2453 | public void SendFullUpdateToAllClients() | 2473 | /// <summary> |
2474 | /// Send avatar data for all other root agents to this agent, this agent | ||
2475 | /// can be either a child or root | ||
2476 | /// </summary> | ||
2477 | public void SendOtherAgentsAvatarDataToMe() | ||
2454 | { | 2478 | { |
2455 | m_perfMonMS = Util.EnvironmentTickCount(); | 2479 | m_perfMonMS = Util.EnvironmentTickCount(); |
2456 | 2480 | ||
2457 | // only send update from root agents to other clients; children are only "listening posts" | ||
2458 | if (IsChildAgent) | ||
2459 | { | ||
2460 | m_log.Warn("[SCENEPRESENCE] attempt to send update from a childagent"); | ||
2461 | return; | ||
2462 | } | ||
2463 | |||
2464 | int count = 0; | 2481 | int count = 0; |
2465 | m_scene.ForEachScenePresence(delegate(ScenePresence sp) | 2482 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) |
2466 | { | 2483 | { |
2467 | if (sp.IsChildAgent) | 2484 | // only send information about root agents |
2468 | return; | 2485 | if (scenePresence.IsChildAgent) |
2469 | SendFullUpdateToOtherClient(sp); | 2486 | return; |
2470 | ++count; | 2487 | |
2471 | }); | 2488 | // only send information about other root agents |
2489 | if (scenePresence.UUID == UUID) | ||
2490 | return; | ||
2491 | |||
2492 | scenePresence.SendAvatarDataToAgent(this); | ||
2493 | count++; | ||
2494 | }); | ||
2495 | |||
2472 | m_scene.StatsReporter.AddAgentUpdates(count); | 2496 | m_scene.StatsReporter.AddAgentUpdates(count); |
2473 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); | 2497 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); |
2474 | |||
2475 | Animator.SendAnimPack(); | ||
2476 | } | 2498 | } |
2477 | 2499 | ||
2478 | /// <summary> | 2500 | /// <summary> |
2479 | /// Do everything required once a client completes its movement into a region | 2501 | /// Send avatar data to an agent. |
2480 | /// </summary> | 2502 | /// </summary> |
2481 | public void SendInitialData() | 2503 | /// <param name="avatar"></param> |
2504 | private void SendAvatarDataToAgent(ScenePresence avatar) | ||
2482 | { | 2505 | { |
2483 | // Moved this into CompleteMovement to ensure that m_appearance is initialized before | 2506 | // m_log.WarnFormat("[SP] Send avatar data from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId); |
2484 | // the inventory arrives | ||
2485 | // m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance); | ||
2486 | 2507 | ||
2487 | m_controllingClient.SendAvatarDataImmediate(this); | 2508 | avatar.ControllingClient.SendAvatarDataImmediate(this); |
2488 | if (m_scene.AvatarFactory != null) | 2509 | Animator.SendAnimPackToClient(avatar.ControllingClient); |
2489 | { | 2510 | } |
2490 | if (m_scene.AvatarFactory.ValidateBakedTextureCache(m_controllingClient)) | 2511 | |
2491 | { | 2512 | /// <summary> |
2492 | // m_log.WarnFormat("[SCENEPRESENCE]: baked textures are in the cache for {0}", Name); | 2513 | /// Send this agent's appearance to all other root and child agents in the scene |
2493 | m_controllingClient.SendAppearance( | 2514 | /// This agent must be root. |
2494 | m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes()); | 2515 | /// </summary> |
2495 | } | 2516 | public void SendAppearanceToAllOtherAgents() |
2496 | } | 2517 | { |
2497 | else | 2518 | // only send update from root agents to other clients; children are only "listening posts" |
2519 | if (IsChildAgent) | ||
2498 | { | 2520 | { |
2499 | m_log.WarnFormat("[SCENEPRESENCE]: AvatarFactory not set for {0}", Name); | 2521 | m_log.Warn("[SCENEPRESENCE] attempt to send avatar data from a child agent"); |
2522 | return; | ||
2500 | } | 2523 | } |
2524 | |||
2525 | m_perfMonMS = Util.EnvironmentTickCount(); | ||
2501 | 2526 | ||
2502 | SendInitialFullUpdateToAllClients(); | 2527 | int count = 0; |
2528 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) | ||
2529 | { | ||
2530 | if (scenePresence.UUID == UUID) | ||
2531 | return; | ||
2532 | |||
2533 | SendAppearanceToAgent(scenePresence); | ||
2534 | count++; | ||
2535 | }); | ||
2536 | |||
2537 | m_scene.StatsReporter.AddAgentUpdates(count); | ||
2538 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); | ||
2503 | } | 2539 | } |
2504 | 2540 | ||
2505 | /// <summary> | 2541 | /// <summary> |
2506 | /// | 2542 | /// Send appearance from all other root agents to this agent. this agent |
2543 | /// can be either root or child | ||
2507 | /// </summary> | 2544 | /// </summary> |
2508 | public void SendAppearanceToAllOtherAgents() | 2545 | public void SendOtherAgentsAppearanceToMe() |
2509 | { | 2546 | { |
2510 | // DEBUG ON | ||
2511 | // m_log.WarnFormat("[SCENEPRESENCE]: Send appearance from {0} to all other agents", m_uuid); | ||
2512 | // DEBUG OFF | ||
2513 | m_perfMonMS = Util.EnvironmentTickCount(); | 2547 | m_perfMonMS = Util.EnvironmentTickCount(); |
2514 | 2548 | ||
2549 | int count = 0; | ||
2515 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) | 2550 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) |
2516 | { | 2551 | { |
2517 | if (scenePresence.UUID != UUID) | 2552 | // only send information about root agents |
2518 | { | 2553 | if (scenePresence.IsChildAgent) |
2519 | SendAppearanceToOtherAgent(scenePresence); | 2554 | return; |
2520 | } | 2555 | |
2556 | // only send information about other root agents | ||
2557 | if (scenePresence.UUID == UUID) | ||
2558 | return; | ||
2559 | |||
2560 | scenePresence.SendAppearanceToAgent(this); | ||
2561 | count++; | ||
2521 | }); | 2562 | }); |
2522 | 2563 | ||
2564 | m_scene.StatsReporter.AddAgentUpdates(count); | ||
2523 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); | 2565 | m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); |
2524 | } | 2566 | } |
2525 | 2567 | ||
2526 | /// <summary> | 2568 | /// <summary> |
2527 | /// Send appearance data to an agent that isn't this one. | 2569 | /// Send appearance data to an agent. |
2528 | /// </summary> | 2570 | /// </summary> |
2529 | /// <param name="avatar"></param> | 2571 | /// <param name="avatar"></param> |
2530 | public void SendAppearanceToOtherAgent(ScenePresence avatar) | 2572 | private void SendAppearanceToAgent(ScenePresence avatar) |
2531 | { | 2573 | { |
2532 | if (LocalId == avatar.LocalId) | ||
2533 | { | ||
2534 | m_log.WarnFormat("[SCENE PRESENCE]: An agent is attempting to send appearance data to itself; {0}", UUID); | ||
2535 | return; | ||
2536 | } | ||
2537 | |||
2538 | // DEBUG ON | ||
2539 | // m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId); | 2574 | // m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId); |
2540 | // DEBUG OFF | ||
2541 | 2575 | ||
2542 | avatar.ControllingClient.SendAppearance( | 2576 | avatar.ControllingClient.SendAppearance( |
2543 | m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes()); | 2577 | m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes()); |
@@ -3050,9 +3084,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3050 | 3084 | ||
3051 | public void CopyFrom(AgentData cAgent) | 3085 | public void CopyFrom(AgentData cAgent) |
3052 | { | 3086 | { |
3053 | // DEBUG ON | ||
3054 | m_log.ErrorFormat("[SCENEPRESENCE] CALLING COPYFROM"); | ||
3055 | // DEBUG OFF | ||
3056 | m_originRegionID = cAgent.RegionID; | 3087 | m_originRegionID = cAgent.RegionID; |
3057 | 3088 | ||
3058 | m_callbackURI = cAgent.CallbackURI; | 3089 | m_callbackURI = cAgent.CallbackURI; |
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index aee2d10..3978a7d 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs | |||
@@ -86,23 +86,33 @@ namespace OpenSim.Region.Framework.Scenes | |||
86 | /// <param name="assetUuids">The assets gathered</param> | 86 | /// <param name="assetUuids">The assets gathered</param> |
87 | public void GatherAssetUuids(UUID assetUuid, AssetType assetType, IDictionary<UUID, AssetType> assetUuids) | 87 | public void GatherAssetUuids(UUID assetUuid, AssetType assetType, IDictionary<UUID, AssetType> assetUuids) |
88 | { | 88 | { |
89 | assetUuids[assetUuid] = assetType; | 89 | try |
90 | 90 | { | |
91 | if (AssetType.Bodypart == assetType || AssetType.Clothing == assetType) | 91 | assetUuids[assetUuid] = assetType; |
92 | { | 92 | |
93 | GetWearableAssetUuids(assetUuid, assetUuids); | 93 | if (AssetType.Bodypart == assetType || AssetType.Clothing == assetType) |
94 | } | 94 | { |
95 | else if (AssetType.Gesture == assetType) | 95 | GetWearableAssetUuids(assetUuid, assetUuids); |
96 | { | 96 | } |
97 | GetGestureAssetUuids(assetUuid, assetUuids); | 97 | else if (AssetType.Gesture == assetType) |
98 | } | 98 | { |
99 | else if (AssetType.LSLText == assetType) | 99 | GetGestureAssetUuids(assetUuid, assetUuids); |
100 | { | 100 | } |
101 | GetScriptAssetUuids(assetUuid, assetUuids); | 101 | else if (AssetType.LSLText == assetType) |
102 | { | ||
103 | GetScriptAssetUuids(assetUuid, assetUuids); | ||
104 | } | ||
105 | else if (AssetType.Object == assetType) | ||
106 | { | ||
107 | GetSceneObjectAssetUuids(assetUuid, assetUuids); | ||
108 | } | ||
102 | } | 109 | } |
103 | else if (AssetType.Object == assetType) | 110 | catch (Exception) |
104 | { | 111 | { |
105 | GetSceneObjectAssetUuids(assetUuid, assetUuids); | 112 | m_log.ErrorFormat( |
113 | "[UUID GATHERER]: Failed to gather uuids for asset id {0}, type {1}", | ||
114 | assetUuid, assetType); | ||
115 | throw; | ||
106 | } | 116 | } |
107 | } | 117 | } |
108 | 118 | ||
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs index a583cca..e9c5453 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | |||
@@ -132,7 +132,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice | |||
132 | m_FreeswitchService = ServerUtils.LoadPlugin<IFreeswitchService>(serviceDll, args); | 132 | m_FreeswitchService = ServerUtils.LoadPlugin<IFreeswitchService>(serviceDll, args); |
133 | 133 | ||
134 | string jsonConfig = m_FreeswitchService.GetJsonConfig(); | 134 | string jsonConfig = m_FreeswitchService.GetJsonConfig(); |
135 | m_log.Debug("[FreeSwitchVoice]: Configuration string: " + jsonConfig); | 135 | //m_log.Debug("[FreeSwitchVoice]: Configuration string: " + jsonConfig); |
136 | OSDMap map = (OSDMap)OSDParser.DeserializeJson(jsonConfig); | 136 | OSDMap map = (OSDMap)OSDParser.DeserializeJson(jsonConfig); |
137 | 137 | ||
138 | m_freeSwitchAPIPrefix = map["APIPrefix"].AsString(); | 138 | m_freeSwitchAPIPrefix = map["APIPrefix"].AsString(); |
@@ -363,8 +363,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice | |||
363 | 363 | ||
364 | try | 364 | try |
365 | { | 365 | { |
366 | m_log.DebugFormat("[FreeSwitchVoice][PROVISIONVOICE]: request: {0}, path: {1}, param: {2}", | 366 | //m_log.DebugFormat("[FreeSwitchVoice][PROVISIONVOICE]: request: {0}, path: {1}, param: {2}", |
367 | request, path, param); | 367 | // request, path, param); |
368 | 368 | ||
369 | //XmlElement resp; | 369 | //XmlElement resp; |
370 | string agentname = "x" + Convert.ToBase64String(agentID.GetBytes()); | 370 | string agentname = "x" + Convert.ToBase64String(agentID.GetBytes()); |
@@ -445,8 +445,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice | |||
445 | // voice channel | 445 | // voice channel |
446 | LandData land = scene.GetLandData(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | 446 | LandData land = scene.GetLandData(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); |
447 | 447 | ||
448 | m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": request: {4}, path: {5}, param: {6}", | 448 | //m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": request: {4}, path: {5}, param: {6}", |
449 | scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, request, path, param); | 449 | // scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, request, path, param); |
450 | 450 | ||
451 | // TODO: EstateSettings don't seem to get propagated... | 451 | // TODO: EstateSettings don't seem to get propagated... |
452 | // if (!scene.RegionInfo.EstateSettings.AllowVoice) | 452 | // if (!scene.RegionInfo.EstateSettings.AllowVoice) |
@@ -592,7 +592,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice | |||
592 | 592 | ||
593 | response["int_response_code"] = 200; | 593 | response["int_response_code"] = 200; |
594 | 594 | ||
595 | m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler return {0}",response["str_response_string"]); | 595 | //m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler return {0}",response["str_response_string"]); |
596 | return response; | 596 | return response; |
597 | } | 597 | } |
598 | 598 | ||
@@ -664,7 +664,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice | |||
664 | response["str_response_string"] = resp.ToString(); | 664 | response["str_response_string"] = resp.ToString(); |
665 | Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline); | 665 | Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline); |
666 | 666 | ||
667 | m_log.DebugFormat("[FREESWITCH]: {0}", normalizeEndLines.Replace((string)response["str_response_string"],"")); | 667 | //m_log.DebugFormat("[FREESWITCH]: {0}", normalizeEndLines.Replace((string)response["str_response_string"],"")); |
668 | return response; | 668 | return response; |
669 | } | 669 | } |
670 | 670 | ||
@@ -696,8 +696,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice | |||
696 | } | 696 | } |
697 | } | 697 | } |
698 | 698 | ||
699 | m_log.DebugFormat("[FreeSwitchVoice]: AUTH, URI: {0}, Content-Type:{1}, Body{2}", uri, contenttype, | 699 | //m_log.DebugFormat("[FreeSwitchVoice]: AUTH, URI: {0}, Content-Type:{1}, Body{2}", uri, contenttype, |
700 | requestbody); | 700 | // requestbody); |
701 | Hashtable response = new Hashtable(); | 701 | Hashtable response = new Hashtable(); |
702 | response["str_response_string"] = string.Format(@"<response xsi:schemaLocation=""/xsd/signin.xsd""> | 702 | response["str_response_string"] = string.Format(@"<response xsi:schemaLocation=""/xsd/signin.xsd""> |
703 | <level0> | 703 | <level0> |
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index 0c8113e..ccf5289 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs | |||
@@ -1173,10 +1173,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1173 | presence = scene.GetScenePresence(AgentID); | 1173 | presence = scene.GetScenePresence(AgentID); |
1174 | if (presence != null) | 1174 | if (presence != null) |
1175 | { | 1175 | { |
1176 | presence.Grouptitle = Title; | 1176 | if (presence.Grouptitle != Title) |
1177 | { | ||
1178 | presence.Grouptitle = Title; | ||
1177 | 1179 | ||
1178 | // FixMe: Ter suggests a "Schedule" method that I can't find. | 1180 | if (! presence.IsChildAgent) |
1179 | presence.SendFullUpdateToAllClients(); | 1181 | presence.SendAvatarDataToAllAgents(); |
1182 | } | ||
1180 | } | 1183 | } |
1181 | } | 1184 | } |
1182 | } | 1185 | } |
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index 0c99d8c..8b7871b 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | |||
@@ -42,7 +42,8 @@ namespace OpenSim.Region.ScriptEngine.Interfaces | |||
42 | NewRez = 1, | 42 | NewRez = 1, |
43 | PrimCrossing = 2, | 43 | PrimCrossing = 2, |
44 | ScriptedRez = 3, | 44 | ScriptedRez = 3, |
45 | AttachedRez = 4 | 45 | AttachedRez = 4, |
46 | Teleporting = 5 | ||
46 | } | 47 | } |
47 | 48 | ||
48 | public interface IScriptWorkItem | 49 | public interface IScriptWorkItem |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index d06b134..3c5f2d0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -7759,24 +7759,59 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7759 | break; | 7759 | break; |
7760 | 7760 | ||
7761 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | 7761 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: |
7762 | // TODO-------------- | ||
7763 | if (remain < 1) | 7762 | if (remain < 1) |
7764 | return res; | 7763 | return res; |
7765 | 7764 | ||
7766 | face=(int)rules.GetLSLIntegerItem(idx++); | 7765 | face=(int)rules.GetLSLIntegerItem(idx++); |
7767 | 7766 | ||
7768 | res.Add(new LSL_Integer(0)); | 7767 | tex = part.Shape.Textures; |
7769 | res.Add(new LSL_Integer(0)); | 7768 | if (face == ScriptBaseClass.ALL_SIDES) |
7769 | { | ||
7770 | for (face = 0; face < GetNumberOfSides(part); face++) | ||
7771 | { | ||
7772 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | ||
7773 | // Convert Shininess to PRIM_SHINY_* | ||
7774 | res.Add(new LSL_Integer((uint)texface.Shiny >> 6)); | ||
7775 | // PRIM_BUMP_* | ||
7776 | res.Add(new LSL_Integer((int)texface.Bump)); | ||
7777 | } | ||
7778 | } | ||
7779 | else | ||
7780 | { | ||
7781 | if (face >= 0 && face < GetNumberOfSides(part)) | ||
7782 | { | ||
7783 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | ||
7784 | // Convert Shininess to PRIM_SHINY_* | ||
7785 | res.Add(new LSL_Integer((uint)texface.Shiny >> 6)); | ||
7786 | // PRIM_BUMP_* | ||
7787 | res.Add(new LSL_Integer((int)texface.Bump)); | ||
7788 | } | ||
7789 | } | ||
7770 | break; | 7790 | break; |
7771 | 7791 | ||
7772 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | 7792 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: |
7773 | // TODO-------------- | ||
7774 | if (remain < 1) | 7793 | if (remain < 1) |
7775 | return res; | 7794 | return res; |
7776 | 7795 | ||
7777 | face=(int)rules.GetLSLIntegerItem(idx++); | 7796 | face=(int)rules.GetLSLIntegerItem(idx++); |
7778 | 7797 | ||
7779 | res.Add(new LSL_Integer(0)); | 7798 | tex = part.Shape.Textures; |
7799 | if (face == ScriptBaseClass.ALL_SIDES) | ||
7800 | { | ||
7801 | for (face = 0; face < GetNumberOfSides(part); face++) | ||
7802 | { | ||
7803 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | ||
7804 | res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0)); | ||
7805 | } | ||
7806 | } | ||
7807 | else | ||
7808 | { | ||
7809 | if (face >= 0 && face < GetNumberOfSides(part)) | ||
7810 | { | ||
7811 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | ||
7812 | res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0)); | ||
7813 | } | ||
7814 | } | ||
7780 | break; | 7815 | break; |
7781 | 7816 | ||
7782 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: | 7817 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: |
@@ -7797,14 +7832,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7797 | break; | 7832 | break; |
7798 | 7833 | ||
7799 | case (int)ScriptBaseClass.PRIM_TEXGEN: | 7834 | case (int)ScriptBaseClass.PRIM_TEXGEN: |
7800 | // TODO-------------- | ||
7801 | // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR) | ||
7802 | if (remain < 1) | 7835 | if (remain < 1) |
7803 | return res; | 7836 | return res; |
7804 | 7837 | ||
7805 | face=(int)rules.GetLSLIntegerItem(idx++); | 7838 | face=(int)rules.GetLSLIntegerItem(idx++); |
7806 | 7839 | ||
7807 | res.Add(new LSL_Integer(0)); | 7840 | tex = part.Shape.Textures; |
7841 | if (face == ScriptBaseClass.ALL_SIDES) | ||
7842 | { | ||
7843 | for (face = 0; face < GetNumberOfSides(part); face++) | ||
7844 | { | ||
7845 | MappingType texgen = tex.GetFace((uint)face).TexMapType; | ||
7846 | // Convert MappingType to PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR etc. | ||
7847 | res.Add(new LSL_Integer((uint)texgen >> 1)); | ||
7848 | } | ||
7849 | } | ||
7850 | else | ||
7851 | { | ||
7852 | if (face >= 0 && face < GetNumberOfSides(part)) | ||
7853 | { | ||
7854 | MappingType texgen = tex.GetFace((uint)face).TexMapType; | ||
7855 | res.Add(new LSL_Integer((uint)texgen >> 1)); | ||
7856 | } | ||
7857 | } | ||
7808 | break; | 7858 | break; |
7809 | 7859 | ||
7810 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: | 7860 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: |
@@ -7823,14 +7873,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7823 | break; | 7873 | break; |
7824 | 7874 | ||
7825 | case (int)ScriptBaseClass.PRIM_GLOW: | 7875 | case (int)ScriptBaseClass.PRIM_GLOW: |
7826 | // TODO-------------- | ||
7827 | if (remain < 1) | 7876 | if (remain < 1) |
7828 | return res; | 7877 | return res; |
7829 | 7878 | ||
7830 | face=(int)rules.GetLSLIntegerItem(idx++); | 7879 | face=(int)rules.GetLSLIntegerItem(idx++); |
7831 | 7880 | ||
7832 | res.Add(new LSL_Float(0)); | 7881 | tex = part.Shape.Textures; |
7882 | if (face == ScriptBaseClass.ALL_SIDES) | ||
7883 | { | ||
7884 | for (face = 0; face < GetNumberOfSides(part); face++) | ||
7885 | { | ||
7886 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | ||
7887 | res.Add(new LSL_Float(texface.Glow)); | ||
7888 | } | ||
7889 | } | ||
7890 | else | ||
7891 | { | ||
7892 | if (face >= 0 && face < GetNumberOfSides(part)) | ||
7893 | { | ||
7894 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | ||
7895 | res.Add(new LSL_Float(texface.Glow)); | ||
7896 | } | ||
7897 | } | ||
7833 | break; | 7898 | break; |
7899 | |||
7834 | case (int)ScriptBaseClass.PRIM_TEXT: | 7900 | case (int)ScriptBaseClass.PRIM_TEXT: |
7835 | Color4 textColor = part.GetTextColor(); | 7901 | Color4 textColor = part.GetTextColor(); |
7836 | res.Add(part.Text); | 7902 | res.Add(part.Text); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 660e9a3..8e712b6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -390,19 +390,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
390 | } | 390 | } |
391 | else if (m_stateSource == StateSource.RegionStart) | 391 | else if (m_stateSource == StateSource.RegionStart) |
392 | { | 392 | { |
393 | // m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script"); | 393 | //m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script"); |
394 | PostEvent(new EventParams("changed", | 394 | PostEvent(new EventParams("changed", |
395 | new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) }, | 395 | new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) }, new DetectParams[0])); |
396 | new DetectParams[0])); | ||
397 | } | 396 | } |
398 | else if (m_stateSource == StateSource.PrimCrossing) | 397 | else if (m_stateSource == StateSource.PrimCrossing || m_stateSource == StateSource.Teleporting) |
399 | { | 398 | { |
400 | // CHANGED_REGION | 399 | // CHANGED_REGION |
401 | PostEvent(new EventParams("changed", | 400 | PostEvent(new EventParams("changed", |
402 | new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) }, | 401 | new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) }, new DetectParams[0])); |
403 | new DetectParams[0])); | 402 | |
403 | // CHANGED_TELEPORT | ||
404 | if (m_stateSource == StateSource.Teleporting) | ||
405 | PostEvent(new EventParams("changed", | ||
406 | new Object[] { new LSL_Types.LSLInteger((int)Changed.TELEPORT) }, new DetectParams[0])); | ||
404 | } | 407 | } |
405 | } | 408 | } |
406 | else | 409 | else |
407 | { | 410 | { |
408 | Start(); | 411 | Start(); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs index dfc9aa3..1d55b95 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Tests/LSL_ApiTest.cs | |||
@@ -47,6 +47,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests | |||
47 | { | 47 | { |
48 | 48 | ||
49 | private const double ANGLE_ACCURACY_IN_RADIANS = 1E-6; | 49 | private const double ANGLE_ACCURACY_IN_RADIANS = 1E-6; |
50 | private const double VECTOR_COMPONENT_ACCURACY = 0.0000005d; | ||
50 | private LSL_Api m_lslApi; | 51 | private LSL_Api m_lslApi; |
51 | 52 | ||
52 | [SetUp] | 53 | [SetUp] |
@@ -164,5 +165,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests | |||
164 | Assert.Greater(eulerCalc.z, eulerCheck.z - ANGLE_ACCURACY_IN_RADIANS, "TestllRot2Euler Z lower bounds check fail"); | 165 | Assert.Greater(eulerCalc.z, eulerCheck.z - ANGLE_ACCURACY_IN_RADIANS, "TestllRot2Euler Z lower bounds check fail"); |
165 | Assert.Less(eulerCalc.z, eulerCheck.z + ANGLE_ACCURACY_IN_RADIANS, "TestllRot2Euler Z upper bounds check fail"); | 166 | Assert.Less(eulerCalc.z, eulerCheck.z + ANGLE_ACCURACY_IN_RADIANS, "TestllRot2Euler Z upper bounds check fail"); |
166 | } | 167 | } |
168 | |||
169 | [Test] | ||
170 | // llVecNorm test. | ||
171 | public void TestllVecNorm() | ||
172 | { | ||
173 | // Check special case for normalizing zero vector. | ||
174 | CheckllVecNorm(new LSL_Types.Vector3(0.0d, 0.0d, 0.0d), new LSL_Types.Vector3(0.0d, 0.0d, 0.0d)); | ||
175 | // Check various vectors. | ||
176 | CheckllVecNorm(new LSL_Types.Vector3(10.0d, 25.0d, 0.0d), new LSL_Types.Vector3(0.371391d, 0.928477d, 0.0d)); | ||
177 | CheckllVecNorm(new LSL_Types.Vector3(1.0d, 0.0d, 0.0d), new LSL_Types.Vector3(1.0d, 0.0d, 0.0d)); | ||
178 | CheckllVecNorm(new LSL_Types.Vector3(-90.0d, 55.0d, 2.0d), new LSL_Types.Vector3(-0.853128d, 0.521356d, 0.018958d)); | ||
179 | CheckllVecNorm(new LSL_Types.Vector3(255.0d, 255.0d, 255.0d), new LSL_Types.Vector3(0.577350d, 0.577350d, 0.577350d)); | ||
180 | } | ||
181 | |||
182 | public void CheckllVecNorm(LSL_Types.Vector3 vec, LSL_Types.Vector3 vecNormCheck) | ||
183 | { | ||
184 | // Call LSL function to normalize the vector. | ||
185 | LSL_Types.Vector3 vecNorm = m_lslApi.llVecNorm(vec); | ||
186 | // Check each vector component against expected result. | ||
187 | Assert.AreEqual(vecNorm.x, vecNormCheck.x, VECTOR_COMPONENT_ACCURACY, "TestllVecNorm vector check fail on x component"); | ||
188 | Assert.AreEqual(vecNorm.y, vecNormCheck.y, VECTOR_COMPONENT_ACCURACY, "TestllVecNorm vector check fail on y component"); | ||
189 | Assert.AreEqual(vecNorm.z, vecNormCheck.z, VECTOR_COMPONENT_ACCURACY, "TestllVecNorm vector check fail on z component"); | ||
190 | } | ||
167 | } | 191 | } |
168 | } | 192 | } |
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs index 3f5c4f1..0aa5352 100644 --- a/OpenSim/Services/HypergridService/GatekeeperService.cs +++ b/OpenSim/Services/HypergridService/GatekeeperService.cs | |||
@@ -333,7 +333,8 @@ namespace OpenSim.Services.HypergridService | |||
333 | 333 | ||
334 | string addressee = parts[0]; | 334 | string addressee = parts[0]; |
335 | m_log.DebugFormat("[GATEKEEPER SERVICE]: Verifying {0} against {1}", addressee, m_ExternalName); | 335 | m_log.DebugFormat("[GATEKEEPER SERVICE]: Verifying {0} against {1}", addressee, m_ExternalName); |
336 | return (addressee == m_ExternalName); | 336 | |
337 | return string.Equals(addressee, m_ExternalName, StringComparison.OrdinalIgnoreCase); | ||
337 | } | 338 | } |
338 | 339 | ||
339 | #endregion | 340 | #endregion |