aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/AgentCircuitData.cs1
-rw-r--r--OpenSim/Framework/AgentCircuitManager.cs7
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs2
-rw-r--r--OpenSim/Framework/Login.cs1
-rw-r--r--OpenSim/Grid/UserServer/UserLoginService.cs10
-rw-r--r--OpenSim/Region/Communications/Local/LocalBackEndServices.cs7
-rw-r--r--OpenSim/Region/Communications/Local/LocalLoginService.cs3
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs40
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs75
10 files changed, 122 insertions, 30 deletions
diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs
index 1c37601..bcd4c09 100644
--- a/OpenSim/Framework/AgentCircuitData.cs
+++ b/OpenSim/Framework/AgentCircuitData.cs
@@ -35,6 +35,7 @@ namespace OpenSim.Framework
35 public class AgentCircuitData 35 public class AgentCircuitData
36 { 36 {
37 public UUID AgentID; 37 public UUID AgentID;
38 public AvatarAppearance Appearance;
38 public UUID BaseFolder; 39 public UUID BaseFolder;
39 public string CapsPath = String.Empty; 40 public string CapsPath = String.Empty;
40 public Dictionary<ulong, string> ChildrenCapSeeds; 41 public Dictionary<ulong, string> ChildrenCapSeeds;
diff --git a/OpenSim/Framework/AgentCircuitManager.cs b/OpenSim/Framework/AgentCircuitManager.cs
index 56b40bd..cf333af 100644
--- a/OpenSim/Framework/AgentCircuitManager.cs
+++ b/OpenSim/Framework/AgentCircuitManager.cs
@@ -103,6 +103,13 @@ namespace OpenSim.Framework
103 } 103 }
104 } 104 }
105 105
106 public AgentCircuitData GetAgentCircuitData(uint circuitCode)
107 {
108 AgentCircuitData agentCircuit = null;
109 AgentCircuits.TryGetValue(circuitCode, out agentCircuit);
110 return agentCircuit;
111 }
112
106 public void UpdateAgentData(AgentCircuitData agentData) 113 public void UpdateAgentData(AgentCircuitData agentData)
107 { 114 {
108 if (AgentCircuits.ContainsKey((uint) agentData.circuitcode)) 115 if (AgentCircuits.ContainsKey((uint) agentData.circuitcode))
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index ad95f78..52041bb 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -286,7 +286,7 @@ namespace OpenSim.Framework
286 + 0.07f * (float)m_visualparams[78] / 255.0f // Shoe platform height 286 + 0.07f * (float)m_visualparams[78] / 255.0f // Shoe platform height
287 + 0.3836f * (float)m_visualparams[125] / 255.0f // Leg length 287 + 0.3836f * (float)m_visualparams[125] / 255.0f // Leg length
288 - m_avatarHeight / 2) * 0.3f - 0.04f; 288 - m_avatarHeight / 2) * 0.3f - 0.04f;
289 //System.Console.WriteLine("Height {0} Hip offset {1}", m_avatarHeight, m_hipOffset); 289 //System.Console.WriteLine("[APPEARANCE]: Height {0} Hip offset {1}", m_avatarHeight, m_hipOffset);
290 } 290 }
291 291
292 public virtual void SetWearable(int wearableId, AvatarWearable wearable) 292 public virtual void SetWearable(int wearableId, AvatarWearable wearable)
diff --git a/OpenSim/Framework/Login.cs b/OpenSim/Framework/Login.cs
index 61fffd2..5913c4b 100644
--- a/OpenSim/Framework/Login.cs
+++ b/OpenSim/Framework/Login.cs
@@ -42,6 +42,7 @@ namespace OpenSim.Framework
42 public UUID SecureSession = UUID.Zero; 42 public UUID SecureSession = UUID.Zero;
43 public UUID Session; 43 public UUID Session;
44 public Vector3 StartPos; 44 public Vector3 StartPos;
45 public AvatarAppearance Appearance;
45 46
46 public Login() 47 public Login()
47 { 48 {
diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs
index d069e1a..4878c03 100644
--- a/OpenSim/Grid/UserServer/UserLoginService.cs
+++ b/OpenSim/Grid/UserServer/UserLoginService.cs
@@ -396,6 +396,16 @@ namespace OpenSim.Grid.UserServer
396 loginParams["regionhandle"] = user.CurrentAgent.Handle.ToString(); 396 loginParams["regionhandle"] = user.CurrentAgent.Handle.ToString();
397 loginParams["caps_path"] = capsPath; 397 loginParams["caps_path"] = capsPath;
398 398
399 // Get appearance
400 AvatarAppearance appearance = m_userManager.GetUserAppearance(user.ID);
401 if (appearance != null)
402 {
403 loginParams["appearance"] = appearance.ToHashTable();
404 m_log.DebugFormat("[LOGIN]: Found appearance for {0}, {1}", user.FirstName, user.SurName);
405 }
406 else
407 m_log.DebugFormat("[LOGIN]: Appearance not for {0}, {1}", user.FirstName, user.SurName);
408
399 ArrayList SendParams = new ArrayList(); 409 ArrayList SendParams = new ArrayList();
400 SendParams.Add(loginParams); 410 SendParams.Add(loginParams);
401 411
diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
index 5df3c34..7ca29ca 100644
--- a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
+++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
@@ -441,6 +441,13 @@ namespace OpenSim.Region.Communications.Local
441 agent.InventoryFolder = loginData.InventoryFolder; 441 agent.InventoryFolder = loginData.InventoryFolder;
442 agent.startpos = loginData.StartPos; 442 agent.startpos = loginData.StartPos;
443 agent.CapsPath = loginData.CapsPath; 443 agent.CapsPath = loginData.CapsPath;
444 if (agent.Appearance != null)
445 agent.Appearance = loginData.Appearance;
446 else
447 {
448 m_log.WarnFormat("[INTER]: Appearance not found for {0} {1}. Creating default.", agent.firstname, agent.lastname);
449 agent.Appearance = new AvatarAppearance();
450 }
444 451
445 TriggerExpectUser(regionHandle, agent); 452 TriggerExpectUser(regionHandle, agent);
446 } 453 }
diff --git a/OpenSim/Region/Communications/Local/LocalLoginService.cs b/OpenSim/Region/Communications/Local/LocalLoginService.cs
index 5de812c..4e0ed13 100644
--- a/OpenSim/Region/Communications/Local/LocalLoginService.cs
+++ b/OpenSim/Region/Communications/Local/LocalLoginService.cs
@@ -359,6 +359,9 @@ namespace OpenSim.Region.Communications.Local
359 loginParams.StartPos = user.CurrentAgent.Position; 359 loginParams.StartPos = user.CurrentAgent.Position;
360 loginParams.CapsPath = capsPath; 360 loginParams.CapsPath = capsPath;
361 361
362 // Appearance
363 loginParams.Appearance = m_userManager.GetUserAppearance(user.ID);
364
362 if (m_gridService.RegionLoginsEnabled) 365 if (m_gridService.RegionLoginsEnabled)
363 { 366 {
364 handlerLoginToRegion = OnLoginToRegion; 367 handlerLoginToRegion = OnLoginToRegion;
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index 0ec19a8..1da7621 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -610,9 +610,13 @@ namespace OpenSim.Region.Communications.OGS1
610 agentData.lastname = (string) requestData["lastname"]; 610 agentData.lastname = (string) requestData["lastname"];
611 agentData.AgentID = new UUID((string) requestData["agent_id"]); 611 agentData.AgentID = new UUID((string) requestData["agent_id"]);
612 agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); 612 agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
613 agentData.CapsPath = (string) requestData["caps_path"]; 613 agentData.CapsPath = (string)requestData["caps_path"];
614 ulong regionHandle = Convert.ToUInt64((string) requestData["regionhandle"]); 614 ulong regionHandle = Convert.ToUInt64((string) requestData["regionhandle"]);
615 615
616 // Appearance
617 if (requestData["appearance"] != null)
618 agentData.Appearance = new AvatarAppearance((Hashtable)requestData["appearance"]);
619
616 m_log.DebugFormat( 620 m_log.DebugFormat(
617 "[CLIENT]: Told by user service to prepare for a connection from {0} {1} {2}, circuit {3}", 621 "[CLIENT]: Told by user service to prepare for a connection from {0} {1} {2}, circuit {3}",
618 agentData.firstname, agentData.lastname, agentData.AgentID, agentData.circuitcode); 622 agentData.firstname, agentData.lastname, agentData.AgentID, agentData.circuitcode);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index c3ab5e9..5badd2d 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2089,8 +2089,8 @@ namespace OpenSim.Region.Framework.Scenes
2089 /// <returns></returns> 2089 /// <returns></returns>
2090 protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client) 2090 protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client)
2091 { 2091 {
2092 AvatarAppearance appearance = new AvatarAppearance(); 2092 AvatarAppearance appearance = null;
2093 //GetAvatarAppearance(client, out appearance); 2093 GetAvatarAppearance(client, out appearance);
2094 2094
2095 ScenePresence avatar = m_sceneGraph.CreateAndAddChildScenePresence(client, appearance); 2095 ScenePresence avatar = m_sceneGraph.CreateAndAddChildScenePresence(client, appearance);
2096 //avatar.KnownRegions = GetChildrenSeeds(avatar.UUID); 2096 //avatar.KnownRegions = GetChildrenSeeds(avatar.UUID);
@@ -2104,23 +2104,29 @@ namespace OpenSim.Region.Framework.Scenes
2104 /// <param name="appearance"></param> 2104 /// <param name="appearance"></param>
2105 public void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance) 2105 public void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance)
2106 { 2106 {
2107 appearance = new AvatarAppearance(); 2107 AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(client.CircuitCode);
2108 2108 appearance = aCircuit.Appearance;
2109 try 2109 if (appearance == null)
2110 {
2111 if (m_AvatarFactory != null)
2112 {
2113 if (m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance))
2114 return;
2115 }
2116 }
2117 catch (Exception e)
2118 { 2110 {
2119 m_log.ErrorFormat("[APPEARANCE]: Problem fetching appearance for avatar {0}, {1}", 2111 m_log.DebugFormat("[APPEARANCE]: Appearance not found in {0}, returning default", RegionInfo.RegionName);
2120 client.Name, e); 2112 appearance = new AvatarAppearance();
2121 } 2113 }
2122 2114
2123 m_log.Warn("[APPEARANCE]: Appearance not found, returning default"); 2115 //try
2116 //{
2117 // if (m_AvatarFactory != null)
2118 // {
2119 // if (m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance))
2120 // return;
2121 // }
2122 //}
2123 //catch (Exception e)
2124 //{
2125 // m_log.ErrorFormat("[APPEARANCE]: Problem fetching appearance for avatar {0}, {1}",
2126 // client.Name, e);
2127 //}
2128
2129 //m_log.Warn("[APPEARANCE]: Appearance not found, returning default");
2124 } 2130 }
2125 2131
2126 /// <summary> 2132 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 42a429d..f06afc0 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -816,14 +816,14 @@ namespace OpenSim.Region.Framework.Scenes
816 // Moved this from SendInitialData to ensure that m_appearance is initialized 816 // Moved this from SendInitialData to ensure that m_appearance is initialized
817 // before the inventory is processed in MakeRootAgent. This fixes a race condition 817 // before the inventory is processed in MakeRootAgent. This fixes a race condition
818 // related to the handling of attachments 818 // related to the handling of attachments
819 m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance); 819 //m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
820 820
821 if (pos.X < 0 || pos.X > Constants.RegionSize || pos.Y < 0 || pos.Y > Constants.RegionSize || pos.Z < 0) 821 if (pos.X < 0 || pos.X > Constants.RegionSize || pos.Y < 0 || pos.Y > Constants.RegionSize || pos.Z < 0)
822 { 822 {
823 Vector3 emergencyPos = new Vector3(128, 128, 128); 823 Vector3 emergencyPos = new Vector3(128, 128, 128);
824 824
825 m_log.WarnFormat( 825 m_log.WarnFormat(
826 "[SCENE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", 826 "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}",
827 pos, Name, UUID, emergencyPos); 827 pos, Name, UUID, emergencyPos);
828 828
829 pos = emergencyPos; 829 pos = emergencyPos;
@@ -845,8 +845,17 @@ namespace OpenSim.Region.Framework.Scenes
845 AbsolutePosition = pos; 845 AbsolutePosition = pos;
846 846
847 AddToPhysicalScene(isFlying); 847 AddToPhysicalScene(isFlying);
848 if ((m_appearance != null) && (m_appearance.AvatarHeight > 0)) 848 if (m_appearance != null)
849 SetHeight(m_appearance.AvatarHeight); 849 {
850 if (m_appearance.AvatarHeight > 0)
851 SetHeight(m_appearance.AvatarHeight);
852 }
853 else
854 {
855 m_log.ErrorFormat("[SCENE PRESENCE]: null appearance in MakeRoot in {0}", Scene.RegionInfo.RegionName);
856 // emergency; this really shouldn't happen
857 m_appearance = new AvatarAppearance();
858 }
850 859
851 // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying 860 // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying
852 // avatar to return to the standing position in mid-air. On login it looks like this is being sent 861 // avatar to return to the standing position in mid-air. On login it looks like this is being sent
@@ -2573,7 +2582,8 @@ namespace OpenSim.Region.Framework.Scenes
2573 cAgent.Position = m_pos; 2582 cAgent.Position = m_pos;
2574 cAgent.Velocity = m_velocity; 2583 cAgent.Velocity = m_velocity;
2575 cAgent.Center = m_CameraCenter; 2584 cAgent.Center = m_CameraCenter;
2576 cAgent.Size = new Vector3(0, 0, m_avHeight); 2585 // Don't copy the size; it is inferred from apearance parameters
2586 //cAgent.Size = new Vector3(0, 0, m_avHeight);
2577 cAgent.AtAxis = m_CameraAtAxis; 2587 cAgent.AtAxis = m_CameraAtAxis;
2578 cAgent.LeftAxis = m_CameraLeftAxis; 2588 cAgent.LeftAxis = m_CameraLeftAxis;
2579 cAgent.UpAxis = m_CameraUpAxis; 2589 cAgent.UpAxis = m_CameraUpAxis;
@@ -2605,13 +2615,37 @@ namespace OpenSim.Region.Framework.Scenes
2605 2615
2606 cAgent.AlwaysRun = m_setAlwaysRun; 2616 cAgent.AlwaysRun = m_setAlwaysRun;
2607 2617
2608 //cAgent.AgentTextures = ???
2609 //cAgent.GroupID = ?? 2618 //cAgent.GroupID = ??
2610 // Groups??? 2619 // Groups???
2611 2620
2612 // Animations??? 2621 // Animations???
2613 2622
2614 cAgent.VisualParams = m_appearance.VisualParams; 2623 try
2624 {
2625 int i = 0;
2626 UUID[] textures = new UUID[m_appearance.Wearables.Length * 2];
2627 foreach (AvatarWearable aw in m_appearance.Wearables)
2628 {
2629 if (aw != null)
2630 {
2631 textures[i++] = aw.ItemID;
2632 textures[i++] = aw.AssetID;
2633 }
2634 else
2635 m_log.DebugFormat("[SCENE PRESENCE]: Null wearable in CopyTo");
2636 }
2637 cAgent.AgentTextures = textures;
2638 cAgent.VisualParams = m_appearance.VisualParams;
2639 }
2640 catch (Exception e)
2641 {
2642 m_log.Warn("[SCENE PRESENCE]: exception in CopyTo " + e.Message);
2643 }
2644 //cAgent.GroupID = ??
2645 // Groups???
2646
2647 // Animations???
2648
2615 } 2649 }
2616 2650
2617 public void CopyFrom(AgentData cAgent) 2651 public void CopyFrom(AgentData cAgent)
@@ -2622,7 +2656,7 @@ namespace OpenSim.Region.Framework.Scenes
2622 m_pos = cAgent.Position; 2656 m_pos = cAgent.Position;
2623 m_velocity = cAgent.Velocity; 2657 m_velocity = cAgent.Velocity;
2624 m_CameraCenter = cAgent.Center; 2658 m_CameraCenter = cAgent.Center;
2625 m_avHeight = cAgent.Size.Z; 2659 //m_avHeight = cAgent.Size.Z;
2626 m_CameraAtAxis = cAgent.AtAxis; 2660 m_CameraAtAxis = cAgent.AtAxis;
2627 m_CameraLeftAxis = cAgent.LeftAxis; 2661 m_CameraLeftAxis = cAgent.LeftAxis;
2628 m_CameraUpAxis = cAgent.UpAxis; 2662 m_CameraUpAxis = cAgent.UpAxis;
@@ -2634,20 +2668,39 @@ namespace OpenSim.Region.Framework.Scenes
2634 2668
2635 m_headrotation = cAgent.HeadRotation; 2669 m_headrotation = cAgent.HeadRotation;
2636 m_bodyRot = cAgent.BodyRotation; 2670 m_bodyRot = cAgent.BodyRotation;
2637 m_AgentControlFlags = cAgent.ControlFlags; // We need more flags! 2671 m_AgentControlFlags = cAgent.ControlFlags;
2638 2672
2639 if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) 2673 if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID)))
2640 m_godlevel = cAgent.GodLevel; 2674 m_godlevel = cAgent.GodLevel;
2641 m_setAlwaysRun = cAgent.AlwaysRun; 2675 m_setAlwaysRun = cAgent.AlwaysRun;
2642 2676
2643 //cAgent.AgentTextures = ??? 2677 uint i = 0;
2678 AvatarWearable[] wearables = new AvatarWearable[cAgent.AgentTextures.Length / 2];
2679 Primitive.TextureEntry te = new Primitive.TextureEntry(UUID.Random());
2680 try
2681 {
2682 for (uint n = 0; n < cAgent.AgentTextures.Length; n += 2)
2683 {
2684 UUID itemId = cAgent.AgentTextures[n];
2685 UUID assetId = cAgent.AgentTextures[n + 1];
2686 wearables[i] = new AvatarWearable(itemId, assetId);
2687 te.CreateFace(i++).TextureID = assetId;
2688 }
2689 }
2690 catch (Exception e)
2691 {
2692 m_log.Warn("[SCENE PRESENCE]: exception in CopyFrom " + e.Message);
2693 }
2694 //m_appearance.Texture = te;
2695 m_appearance.Wearables = wearables;
2696 //m_appearance.VisualParams = cAgent.VisualParams;
2697 m_appearance.SetAppearance(te.ToBytes(), new List<byte>(cAgent.VisualParams));
2644 2698
2645 //cAgent.GroupID = ?? 2699 //cAgent.GroupID = ??
2646 //Groups??? 2700 //Groups???
2647 2701
2648 // Animations??? 2702 // Animations???
2649 2703
2650 m_appearance.VisualParams = cAgent.VisualParams;
2651 } 2704 }
2652 2705
2653 #endregion Child Agent Updates 2706 #endregion Child Agent Updates