diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index bc8091567b..a798f40c6d 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1779,29 +1779,28 @@ namespace OpenSim.Region.Environment.Scenes
protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child)
{
- AvatarAppearance appearance;
- GetAvatarAppearance(client, out appearance);
+ AvatarAppearance appearance = CommsManager.UserService.GetUserAppearance(client.AgentId);
ScenePresence avatar = m_innerScene.CreateAndAddScenePresence(client, child, appearance);
return avatar;
}
- protected void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance)
- {
- appearance = CommsManager.UserService.GetUserAppearance(client.AgentId);
+ // protected void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance)
+ // {
+ // appearance = CommsManager.UserService.GetUserAppearance(client.AgentId);
- // if (m_AvatarFactory == null ||
- // !m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance))
- // {
- // //not found Appearance
- // m_log.Warn("[AVATAR DEBUGGING]: Couldn't fetch avatar appearance from factory, please report this to the opensim mantis");
- // byte[] visualParams;
- // AvatarWearable[] wearables;
- // GetDefaultAvatarAppearance(out wearables, out visualParams);
- // appearance = new AvatarAppearance(client.AgentId, wearables, visualParams);
- // }
- }
+ // // if (m_AvatarFactory == null ||
+ // // !m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance))
+ // // {
+ // // //not found Appearance
+ // // m_log.Warn("[AVATAR DEBUGGING]: Couldn't fetch avatar appearance from factory, please report this to the opensim mantis");
+ // // byte[] visualParams;
+ // // AvatarWearable[] wearables;
+ // // GetDefaultAvatarAppearance(out wearables, out visualParams);
+ // // appearance = new AvatarAppearance(client.AgentId, wearables, visualParams);
+ // // }
+ // }
///
/// Remove the given client from the scene.
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index 69770837a4..5221914a6e 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -1452,13 +1452,8 @@ namespace OpenSim.Region.Environment.Scenes
///
public void SendInitialData()
{
- // justincc - very temporary fix for the fact that m_apperance appears to be null at this point in grid mode
- LLObject.TextureEntry texture = AvatarAppearance.GetDefaultTexture();
- if (null != m_appearance)
- texture = m_appearance.Texture;
-
m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, LocalId,
- m_pos, texture.ToBytes(), m_parentID);
+ m_pos, m_appearance.Texture.ToBytes(), m_parentID);
if (!m_isChildAgent)
{
@@ -1467,11 +1462,14 @@ namespace OpenSim.Region.Environment.Scenes
SendFullUpdateToAllClients();
SendAppearanceToAllOtherAgents();
+ // This is probably egregious
+ m_controllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
}
public void SetWearable(IClientAPI client, int wearableId, AvatarWearable wearable)
{
+ m_log.Info("[APPEARANCE] Setting wearable with client, wearableid, wearable");
m_appearance.SetWearable(wearableId, wearable);
m_scene.CommsManager.UserService.UpdateUserAppearance(client.AgentId, m_appearance);
client.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
@@ -1483,6 +1481,7 @@ namespace OpenSim.Region.Environment.Scenes
///
public void SendOwnAppearance()
{
+ m_log.Info("[APPEARANCE] Sending Own Appearace");
ControllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
}
@@ -1514,19 +1513,30 @@ namespace OpenSim.Region.Environment.Scenes
public void SetAppearance(byte[] texture, List visualParam)
{
+ m_log.Warn("[APPEARANCE] Setting Appearance");
m_appearance.SetAppearance(texture, visualParam);
SetHeight(m_appearance.AvatarHeight);
m_scene.CommsManager.UserService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance);
SendAppearanceToAllOtherAgents();
+ SendOwnAppearance();
}
public void SetWearable(int wearableId, AvatarWearable wearable)
{
+ m_log.Warn("[APPEARANCE] Setting Wearable");
m_appearance.SetWearable(wearableId, wearable);
m_scene.CommsManager.UserService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance);
}
+ // Because appearance setting is in a module, we actually need
+ // to give it access to our appearance directly, otherwise we
+ // get a synchronization issue.
+ public AvatarAppearance Appearance {
+ get { return m_appearance; }
+ set { m_appearance = value; }
+ }
+
///
///
///
diff --git a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs
index bac2252b67..f5e0ca2d16 100644
--- a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs
@@ -27,8 +27,11 @@
using System;
using System.Collections.Generic;
+using System.Reflection;
+
using System.Threading;
using libsecondlife;
+using log4net;
using Nini.Config;
using OpenSim.Data.Base;
using OpenSim.Data.MapperFactory;
@@ -41,6 +44,7 @@ namespace OpenSim.Region.Modules.AvatarFactory
{
public class AvatarFactoryModule : IAvatarFactory, IRegionModule
{
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene = null;
private readonly Dictionary m_avatarsAppearance = new Dictionary();
@@ -215,31 +219,31 @@ namespace OpenSim.Region.Modules.AvatarFactory
m_scene = scene;
}
- if (!m_configured)
- {
- m_configured = true;
- try
- {
- m_enablePersist = source.Configs["Startup"].GetBoolean("appearance_persist", false);
- }
- catch (Exception)
- {
- }
- if (m_enablePersist)
- {
- m_connectionString = source.Configs["Startup"].GetString("appearance_connection_string", "");
+ // if (!m_configured)
+ // {
+ // m_configured = true;
+ // try
+ // {
+ // m_enablePersist = source.Configs["Startup"].GetBoolean("appearance_persist", false);
+ // }
+ // catch (Exception)
+ // {
+ // }
+ // if (m_enablePersist)
+ // {
+ // m_connectionString = source.Configs["Startup"].GetString("appearance_connection_string", "");
- string mapperTypeStr = source.Configs["Startup"].GetString("appearance_database", "MySQL");
+ // string mapperTypeStr = source.Configs["Startup"].GetString("appearance_database", "MySQL");
- DataMapperFactory.MAPPER_TYPE mapperType =
- (DataMapperFactory.MAPPER_TYPE)
- Enum.Parse(typeof (DataMapperFactory.MAPPER_TYPE), mapperTypeStr);
+ // DataMapperFactory.MAPPER_TYPE mapperType =
+ // (DataMapperFactory.MAPPER_TYPE)
+ // Enum.Parse(typeof (DataMapperFactory.MAPPER_TYPE), mapperTypeStr);
- m_databaseMapper = DataMapperFactory.GetDataBaseMapper(mapperType, m_connectionString);
+ // m_databaseMapper = DataMapperFactory.GetDataBaseMapper(mapperType, m_connectionString);
- m_appearanceMapper = new AppearanceTableMapper(m_databaseMapper, "AvatarAppearance");
- }
- }
+ // m_appearanceMapper = new AppearanceTableMapper(m_databaseMapper, "AvatarAppearance");
+ // }
+ // }
}
public void PostInitialise()
@@ -273,13 +277,14 @@ namespace OpenSim.Region.Modules.AvatarFactory
public void AvatarIsWearing(Object sender, AvatarWearingArgs e)
{
IClientAPI clientView = (IClientAPI)sender;
+ ScenePresence avatar = m_scene.GetScenePresence(clientView.AgentId);
CachedUserInfo profile = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(clientView.AgentId);
- AvatarAppearance avatAppearance = m_scene.CommsManager.UserService.GetUserAppearance(clientView.AgentId);
+ AvatarAppearance avatAppearance = avatar.Appearance;
+ m_log.Info("Calling Avatar is Wearing");
if (profile != null)
{
if (profile.RootFolder != null)
{
-
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
{
if (wear.Type < 13)
@@ -292,7 +297,7 @@ namespace OpenSim.Region.Modules.AvatarFactory
else
{
LLUUID assetId;
-
+
InventoryItemBase baseItem = profile.RootFolder.FindItem(wear.ItemID);
if (baseItem != null)
@@ -301,10 +306,18 @@ namespace OpenSim.Region.Modules.AvatarFactory
avatAppearance.Wearables[wear.Type].AssetID = assetId;
avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID;
}
+ else
+ {
+ m_log.ErrorFormat("[APPEARANCE] Can't find inventory item {0}, not wearing", wear.ItemID);
+ }
}
}
}
m_scene.CommsManager.UserService.UpdateUserAppearance(clientView.AgentId, avatAppearance);
+ }
+ else
+ {
+ m_log.Error("Root Profile is null, we can't set the appearance");
}
}
}
diff --git a/prebuild.xml b/prebuild.xml
index 6c6957bc68..5880e3016a 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -866,6 +866,7 @@
+