Fixed updating avatar appearance
Signed-off-by: root <root@grid00001.t-data.com>bulletsim
parent
9fc7d65df7
commit
f97278610c
|
@ -196,6 +196,9 @@ namespace OpenSim.Framework
|
||||||
if (appearance.VisualParams != null)
|
if (appearance.VisualParams != null)
|
||||||
m_visualparams = (byte[])appearance.VisualParams.Clone();
|
m_visualparams = (byte[])appearance.VisualParams.Clone();
|
||||||
|
|
||||||
|
m_avatarHeight = appearance.m_avatarHeight;
|
||||||
|
m_hipOffset = appearance.m_hipOffset;
|
||||||
|
|
||||||
// Copy the attachment, force append mode since that ensures consistency
|
// Copy the attachment, force append mode since that ensures consistency
|
||||||
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
|
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
|
||||||
foreach (AvatarAttachment attachment in appearance.GetAttachments())
|
foreach (AvatarAttachment attachment in appearance.GetAttachments())
|
||||||
|
@ -237,7 +240,6 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
m_serial = 0;
|
m_serial = 0;
|
||||||
|
|
||||||
SetDefaultParams();
|
|
||||||
SetDefaultTexture();
|
SetDefaultTexture();
|
||||||
|
|
||||||
//for (int i = 0; i < BAKE_INDICES.Length; i++)
|
//for (int i = 0; i < BAKE_INDICES.Length; i++)
|
||||||
|
|
|
@ -210,7 +210,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
changed = sp.Appearance.SetVisualParams(visualParams);
|
changed = sp.Appearance.SetVisualParams(visualParams);
|
||||||
if (sp.Appearance.AvatarHeight > 0)
|
if (sp.Appearance.AvatarHeight > 0)
|
||||||
sp.SetHeight(sp.Appearance.AvatarHeight);
|
sp.SetHeight(sp.Appearance.AvatarHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the baked texture array
|
// Process the baked texture array
|
||||||
if (textureEntry != null)
|
if (textureEntry != null)
|
||||||
|
@ -387,11 +387,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
// m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}", client.AgentId);
|
// m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}", client.AgentId);
|
||||||
|
|
||||||
// we need to clean out the existing textures
|
// we need to clean out the existing textures
|
||||||
sp.Appearance.ResetAppearance();
|
sp.Appearance.ResetAppearance();
|
||||||
|
|
||||||
// operate on a copy of the appearance so we don't have to lock anything
|
// operate on a copy of the appearance so we don't have to lock anything yet
|
||||||
AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false);
|
AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false);
|
||||||
|
|
||||||
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
|
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
|
||||||
{
|
{
|
||||||
if (wear.Type < AvatarWearable.MAX_WEARABLES)
|
if (wear.Type < AvatarWearable.MAX_WEARABLES)
|
||||||
|
@ -403,12 +403,19 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
// This could take awhile since it needs to pull inventory
|
// This could take awhile since it needs to pull inventory
|
||||||
SetAppearanceAssets(sp.UUID, ref avatAppearance);
|
SetAppearanceAssets(sp.UUID, ref avatAppearance);
|
||||||
|
|
||||||
// could get fancier with the locks here, but in the spirit of "last write wins"
|
lock (m_setAppearanceLock)
|
||||||
// this should work correctly, also, we don't need to send the appearance here
|
{
|
||||||
// since the "iswearing" will trigger a new set of visual param and baked texture changes
|
// Update only those fields that we have changed. This is important because the viewer
|
||||||
// when those complete, the new appearance will be sent
|
// often sends AvatarIsWearing and SetAppearance packets at once, and AvatarIsWearing
|
||||||
sp.Appearance = avatAppearance;
|
// shouldn't overwrite the changes made in SetAppearance.
|
||||||
QueueAppearanceSave(client.AgentId);
|
sp.Appearance.Wearables = avatAppearance.Wearables;
|
||||||
|
sp.Appearance.Texture = avatAppearance.Texture;
|
||||||
|
|
||||||
|
// We don't need to send the appearance here since the "iswearing" will trigger a new set
|
||||||
|
// of visual param and baked texture changes. When those complete, the new appearance will be sent
|
||||||
|
|
||||||
|
QueueAppearanceSave(client.AgentId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
|
private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
|
||||||
|
|
Loading…
Reference in New Issue