try to suport physics wearable type, sending it only if outgoing protocol version >= 0.5
parent
46cd2da82c
commit
0a122c9b40
|
@ -69,6 +69,8 @@ namespace OpenSim.Framework
|
|||
protected WearableCacheItem[] m_cacheitems;
|
||||
protected bool m_cacheItemsDirty = true;
|
||||
|
||||
|
||||
public bool PackLegacyWearables {get; set; }
|
||||
public virtual int Serial
|
||||
{
|
||||
get { return m_serial; }
|
||||
|
@ -133,7 +135,7 @@ namespace OpenSim.Framework
|
|||
public AvatarAppearance()
|
||||
{
|
||||
// m_log.WarnFormat("[AVATAR APPEARANCE]: create empty appearance");
|
||||
|
||||
PackLegacyWearables = false;
|
||||
m_serial = 0;
|
||||
SetDefaultWearables();
|
||||
SetDefaultTexture();
|
||||
|
@ -712,8 +714,15 @@ namespace OpenSim.Framework
|
|||
data["height"] = OSD.FromReal(m_avatarHeight);
|
||||
|
||||
// Wearables
|
||||
OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES);
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
|
||||
int wearsCount;
|
||||
if(PackLegacyWearables)
|
||||
wearsCount = AvatarWearable.LEGACY_VERSION_MAX_WEARABLES;
|
||||
else
|
||||
wearsCount = AvatarWearable.MAX_WEARABLES;
|
||||
|
||||
OSDArray wears = new OSDArray(wearsCount);
|
||||
for (int i = 0; i < wearsCount; i++)
|
||||
wears.Add(m_wearables[i].Pack());
|
||||
data["wearables"] = wears;
|
||||
|
||||
|
|
|
@ -65,7 +65,9 @@ namespace OpenSim.Framework
|
|||
public static readonly int ALPHA = 13;
|
||||
public static readonly int TATTOO = 14;
|
||||
|
||||
public static readonly int MAX_WEARABLES = 15;
|
||||
public static readonly int LEGACY_VERSION_MAX_WEARABLES = 15;
|
||||
public static readonly int PHYSICS = 15;
|
||||
public static readonly int MAX_WEARABLES = 16;
|
||||
|
||||
public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9");
|
||||
public static readonly UUID DEFAULT_BODY_ASSET = new UUID("66c41e39-38f9-f75a-024e-585989bfab73");
|
||||
|
|
|
@ -443,9 +443,18 @@ namespace OpenSim.Framework
|
|||
// We might not pass this in all cases...
|
||||
if ((Appearance.Wearables != null) && (Appearance.Wearables.Length > 0))
|
||||
{
|
||||
OSDArray wears = new OSDArray(Appearance.Wearables.Length);
|
||||
foreach (AvatarWearable awear in Appearance.Wearables)
|
||||
wears.Add(awear.Pack());
|
||||
int wearsCount;
|
||||
if(Appearance.PackLegacyWearables)
|
||||
wearsCount = AvatarWearable.LEGACY_VERSION_MAX_WEARABLES;
|
||||
else
|
||||
wearsCount = AvatarWearable.MAX_WEARABLES;
|
||||
|
||||
if(wearsCount > Appearance.Wearables.Length)
|
||||
wearsCount = Appearance.Wearables.Length;
|
||||
|
||||
OSDArray wears = new OSDArray(wearsCount);
|
||||
for(int i = 0; i < wearsCount ; i++)
|
||||
wears.Add(Appearance.Wearables[i].Pack());
|
||||
|
||||
args["wearables"] = wears;
|
||||
}
|
||||
|
|
|
@ -768,7 +768,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
AgentCircuitData agentCircuit = sp.ControllingClient.RequestClientInfo();
|
||||
agentCircuit.startpos = position;
|
||||
agentCircuit.child = true;
|
||||
agentCircuit.Appearance = sp.Appearance;
|
||||
agentCircuit.Appearance = new AvatarAppearance();
|
||||
agentCircuit.Appearance.PackLegacyWearables = true;
|
||||
if (currentAgentCircuit != null)
|
||||
{
|
||||
agentCircuit.ServiceURLs = currentAgentCircuit.ServiceURLs;
|
||||
|
@ -906,6 +907,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// Let's send a full update of the agent. This is a synchronous call.
|
||||
AgentData agent = new AgentData();
|
||||
sp.CopyTo(agent);
|
||||
if (ctx.OutboundVersion < 0.5f)
|
||||
agent.Appearance.PackLegacyWearables = true;
|
||||
agent.Position = agentCircuit.startpos;
|
||||
SetCallbackURL(agent, sp.Scene.RegionInfo);
|
||||
|
||||
|
@ -1145,6 +1148,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
// Let's send a full update of the agent.
|
||||
AgentData agent = new AgentData();
|
||||
sp.CopyTo(agent);
|
||||
if (ctx.OutboundVersion < 0.5f)
|
||||
agent.Appearance.PackLegacyWearables = true;
|
||||
agent.Position = agentCircuit.startpos;
|
||||
agent.SenderWantsToWaitForRoot = true;
|
||||
//SetCallbackURL(agent, sp.Scene.RegionInfo);
|
||||
|
@ -1628,7 +1633,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||
}
|
||||
|
||||
if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying))
|
||||
if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying, ctx))
|
||||
{
|
||||
m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: cross main failed. Resetting transfer state", LogHeader);
|
||||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||
|
@ -1644,12 +1649,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
return agent;
|
||||
}
|
||||
|
||||
public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying)
|
||||
public bool CrossAgentIntoNewRegionMain(ScenePresence agent, Vector3 pos, GridRegion neighbourRegion, bool isFlying, EntityTransferContext ctx)
|
||||
{
|
||||
try
|
||||
{
|
||||
AgentData cAgent = new AgentData();
|
||||
agent.CopyTo(cAgent);
|
||||
if (ctx.OutboundVersion < 0.5f)
|
||||
cAgent.Appearance.PackLegacyWearables = true;
|
||||
cAgent.Position = pos;
|
||||
|
||||
if (isFlying)
|
||||
|
@ -1815,7 +1822,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
agent.InventoryFolder = UUID.Zero;
|
||||
agent.startpos = new Vector3(128, 128, 70);
|
||||
agent.child = true;
|
||||
agent.Appearance = sp.Appearance;
|
||||
agent.Appearance = new AvatarAppearance();
|
||||
agent.Appearance.PackLegacyWearables = true;
|
||||
agent.CapsPath = CapsUtil.GetRandomCapsObjectPath();
|
||||
|
||||
agent.ChildrenCapSeeds = new Dictionary<ulong, string>(sp.Scene.CapsModule.GetChildrenSeeds(sp.UUID));
|
||||
|
@ -1938,7 +1946,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
|||
agent.InventoryFolder = UUID.Zero;
|
||||
agent.startpos = sp.AbsolutePosition + CalculateOffset(sp, neighbour);
|
||||
agent.child = true;
|
||||
agent.Appearance = sp.Appearance;
|
||||
agent.Appearance = new AvatarAppearance();
|
||||
agent.Appearance.PackLegacyWearables = true;
|
||||
if (currentAgentCircuit != null)
|
||||
{
|
||||
agent.ServiceURLs = currentAgentCircuit.ServiceURLs;
|
||||
|
|
Loading…
Reference in New Issue