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 @@ +