Merge branch 'master' into careminster-presence-refactor
commit
9331898c32
|
@ -1590,12 +1590,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
|||
{
|
||||
m_log.DebugFormat("[RADMIN] Initializing inventory for {0} from {1}", destination, source);
|
||||
Scene scene = m_application.SceneManager.CurrentOrFirstScene;
|
||||
AvatarAppearance avatarAppearance = null;
|
||||
AvatarData avatar = scene.AvatarService.GetAvatar(source);
|
||||
if (avatar != null)
|
||||
avatarAppearance = avatar.ToAvatarAppearance(source);
|
||||
|
||||
// If the model has no associated appearance we're done.
|
||||
AvatarAppearance avatarAppearance = scene.AvatarService.GetAppearance(source);
|
||||
if (avatarAppearance == null)
|
||||
return;
|
||||
|
||||
|
@ -1609,8 +1606,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
|||
{
|
||||
CopyWearablesAndAttachments(destination, source, avatarAppearance);
|
||||
|
||||
AvatarData avatarData = new AvatarData(avatarAppearance);
|
||||
scene.AvatarService.SetAvatar(destination, avatarData);
|
||||
scene.AvatarService.SetAppearance(destination, avatarAppearance);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -1641,8 +1637,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
|||
}
|
||||
}
|
||||
|
||||
AvatarData avatarData = new AvatarData(avatarAppearance);
|
||||
scene.AvatarService.SetAvatar(destination, avatarData);
|
||||
scene.AvatarService.SetAppearance(destination, avatarAppearance);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -1737,12 +1732,12 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
|||
}
|
||||
|
||||
// Attachments
|
||||
Dictionary<int, UUID[]> attachments = avatarAppearance.GetAttachmentDictionary();
|
||||
Dictionary<int, AvatarAttachment> attachments = avatarAppearance.Attachments;
|
||||
|
||||
foreach (KeyValuePair<int, UUID[]> attachment in attachments)
|
||||
foreach (KeyValuePair<int, AvatarAttachment> attachment in attachments)
|
||||
{
|
||||
int attachpoint = attachment.Key;
|
||||
UUID itemID = attachment.Value[0];
|
||||
int attachpoint = attachment.Value.AttachPoint;
|
||||
UUID itemID = attachment.Value.ItemID;
|
||||
|
||||
if (itemID != UUID.Zero)
|
||||
{
|
||||
|
@ -2026,10 +2021,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
|||
if (include)
|
||||
{
|
||||
// Setup for appearance processing
|
||||
AvatarData avatarData = scene.AvatarService.GetAvatar(ID);
|
||||
if (avatarData != null)
|
||||
avatarAppearance = avatarData.ToAvatarAppearance(ID);
|
||||
else
|
||||
avatarAppearance = scene.AvatarService.GetAppearance(ID);
|
||||
if (avatarAppearance == null)
|
||||
avatarAppearance = new AvatarAppearance();
|
||||
|
||||
AvatarWearable[] wearables = avatarAppearance.Wearables;
|
||||
|
@ -2194,8 +2187,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
|||
m_log.DebugFormat("[RADMIN] Outfit {0} load completed", outfitName);
|
||||
} // foreach outfit
|
||||
m_log.DebugFormat("[RADMIN] Inventory update complete for {0}", name);
|
||||
AvatarData avatarData2 = new AvatarData(avatarAppearance);
|
||||
scene.AvatarService.SetAvatar(ID, avatarData2);
|
||||
scene.AvatarService.SetAppearance(ID, avatarAppearance);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -597,7 +597,7 @@ namespace OpenSim.Client.MXP.ClientStack
|
|||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DeRezObject OnDeRezObject;
|
||||
public event Action<IClientAPI> OnRegionHandShakeReply;
|
||||
public event GenericCall2 OnRequestWearables;
|
||||
public event GenericCall1 OnRequestWearables;
|
||||
public event GenericCall1 OnCompleteMovementToRegion;
|
||||
public event UpdateAgent OnPreAgentUpdate;
|
||||
public event UpdateAgent OnAgentUpdate;
|
||||
|
@ -874,7 +874,7 @@ namespace OpenSim.Client.MXP.ClientStack
|
|||
OpenSim.Region.Framework.Scenes.Scene scene=(OpenSim.Region.Framework.Scenes.Scene)Scene;
|
||||
AvatarAppearance appearance;
|
||||
scene.GetAvatarAppearance(this,out appearance);
|
||||
OnSetAppearance(appearance.Texture, (byte[])appearance.VisualParams.Clone());
|
||||
OnSetAppearance(this, appearance.Texture, (byte[])appearance.VisualParams.Clone());
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
|
|
|
@ -533,9 +533,7 @@ namespace OpenSim.Client.MXP.PacketHandler
|
|||
agent.InventoryFolder = UUID.Zero;
|
||||
agent.startpos = new Vector3(0, 0, 0); // TODO Fill in region start position
|
||||
agent.CapsPath = "http://localhost/";
|
||||
AvatarData avatar = scene.AvatarService.GetAvatar(account.PrincipalID);
|
||||
if (avatar != null)
|
||||
agent.Appearance = avatar.ToAvatarAppearance(account.PrincipalID); //userService.GetUserAppearance(userProfile.ID);
|
||||
agent.Appearance = scene.AvatarService.GetAppearance(account.PrincipalID);
|
||||
|
||||
if (agent.Appearance == null)
|
||||
{
|
||||
|
|
|
@ -245,7 +245,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
|||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest = delegate { };
|
||||
public event DeRezObject OnDeRezObject = delegate { };
|
||||
public event Action<IClientAPI> OnRegionHandShakeReply = delegate { };
|
||||
public event GenericCall2 OnRequestWearables = delegate { };
|
||||
public event GenericCall1 OnRequestWearables = delegate { };
|
||||
public event GenericCall1 OnCompleteMovementToRegion = delegate { };
|
||||
public event UpdateAgent OnPreAgentUpdate;
|
||||
public event UpdateAgent OnAgentUpdate = delegate { };
|
||||
|
|
|
@ -26,7 +26,9 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using log4net;
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.StructuredData;
|
||||
|
||||
|
@ -38,6 +40,12 @@ namespace OpenSim.Framework
|
|||
/// </summary>
|
||||
public class AgentCircuitData
|
||||
{
|
||||
// DEBUG ON
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(
|
||||
MethodBase.GetCurrentMethod().DeclaringType);
|
||||
// DEBUG OFF
|
||||
|
||||
/// <summary>
|
||||
/// Avatar Unique Agent Identifier
|
||||
/// </summary>
|
||||
|
@ -205,6 +213,7 @@ namespace OpenSim.Framework
|
|||
args["mac"] = OSD.FromString(Mac);
|
||||
args["id0"] = OSD.FromString(Id0);
|
||||
|
||||
/*
|
||||
if (Appearance != null)
|
||||
{
|
||||
//System.Console.WriteLine("XXX Before packing Wearables");
|
||||
|
@ -221,20 +230,26 @@ namespace OpenSim.Framework
|
|||
}
|
||||
|
||||
//System.Console.WriteLine("XXX Before packing Attachments");
|
||||
Dictionary<int, UUID[]> attachments = Appearance.GetAttachmentDictionary();
|
||||
Dictionary<int, AvatarAttachment> attachments = Appearance.Attachments;
|
||||
if ((attachments != null) && (attachments.Count > 0))
|
||||
{
|
||||
OSDArray attachs = new OSDArray(attachments.Count);
|
||||
foreach (KeyValuePair<int, UUID[]> kvp in attachments)
|
||||
foreach (KeyValuePair<int, AvatarAttachment> kvp in attachments)
|
||||
{
|
||||
AttachmentData adata = new AttachmentData(kvp.Key, kvp.Value[0], kvp.Value[1]);
|
||||
attachs.Add(adata.PackUpdateMessage());
|
||||
AvatarAttachment adata = new AvatarAttachment(kvp.Value);
|
||||
attachs.Add(adata.Pack());
|
||||
//System.Console.WriteLine("XXX att.pt=" + kvp.Key + "; itemID=" + kvp.Value[0] + "; assetID=" + kvp.Value[1]);
|
||||
}
|
||||
args["attachments"] = attachs;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
if (Appearance != null)
|
||||
{
|
||||
OSDMap appmap = Appearance.Pack();
|
||||
args["packed_appearance"] = appmap;
|
||||
}
|
||||
|
||||
if (ServiceURLs != null && ServiceURLs.Count > 0)
|
||||
{
|
||||
OSDArray urls = new OSDArray(ServiceURLs.Count * 2);
|
||||
|
@ -317,9 +332,37 @@ namespace OpenSim.Framework
|
|||
if (args["start_pos"] != null)
|
||||
Vector3.TryParse(args["start_pos"].AsString(), out startpos);
|
||||
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[AGENTCIRCUITDATA] agentid={0}, child={1}, startpos={2}",AgentID,child,startpos.ToString());
|
||||
// DEBUG OFF
|
||||
|
||||
try {
|
||||
// Unpack various appearance elements
|
||||
Appearance = new AvatarAppearance(AgentID);
|
||||
if (args["packed_appearance"] != null)
|
||||
{
|
||||
if (args["packed_appearance"].Type == OSDType.Map)
|
||||
{
|
||||
Appearance.Unpack((OSDMap)args["packed_appearance"]);
|
||||
m_log.WarnFormat("[AGENTCIRCUITDATA] unpacked appearance");
|
||||
}
|
||||
else
|
||||
m_log.WarnFormat("[AGENTCIRCUITDATA] packed_appearance is not a map:\n{0}",args["packed_appearance"].ToString());
|
||||
}
|
||||
// DEBUG ON
|
||||
else
|
||||
m_log.Warn("[AGENTCIRCUITDATA] failed to find a valid packed_appearance");
|
||||
// DEBUG OFF
|
||||
} catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat("[AGENTCIRCUITDATA] failed to unpack appearance; {0}",e.Message);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if (args["appearance_serial"] != null)
|
||||
Appearance.Serial = args["appearance_serial"].AsInteger();
|
||||
|
||||
if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
|
||||
{
|
||||
OSDArray wears = (OSDArray)(args["wearables"]);
|
||||
|
@ -328,23 +371,23 @@ namespace OpenSim.Framework
|
|||
Appearance.Wearables[i].ItemID = wears[i*2].AsUUID();
|
||||
Appearance.Wearables[i].AssetID = wears[(i*2)+1].AsUUID();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
|
||||
{
|
||||
OSDArray attachs = (OSDArray)(args["attachments"]);
|
||||
AttachmentData[] attachments = new AttachmentData[attachs.Count];
|
||||
AvatarAttachment[] attachments = new AvatarAttachment[attachs.Count];
|
||||
int i = 0;
|
||||
foreach (OSD o in attachs)
|
||||
{
|
||||
if (o.Type == OSDType.Map)
|
||||
{
|
||||
attachments[i++] = new AttachmentData((OSDMap)o);
|
||||
attachments[i++] = new AvatarAttachment((OSDMap)o);
|
||||
}
|
||||
}
|
||||
Appearance.SetAttachments(attachments);
|
||||
}
|
||||
|
||||
*/
|
||||
ServiceURLs = new Dictionary<string, object>();
|
||||
if (args.ContainsKey("service_urls") && args["service_urls"] != null && (args["service_urls"]).Type == OSDType.Array)
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -25,14 +25,54 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenMetaverse.StructuredData;
|
||||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
public interface IAvatarFactory
|
||||
public class AvatarAttachment
|
||||
{
|
||||
bool TryGetAvatarAppearance(UUID avatarId, out AvatarAppearance appearance);
|
||||
void UpdateDatabase(UUID userID, AvatarAppearance avatAppearance);
|
||||
public int AttachPoint;
|
||||
public UUID ItemID;
|
||||
public UUID AssetID;
|
||||
|
||||
public AvatarAttachment(AvatarAttachment attach)
|
||||
{
|
||||
AttachPoint = attach.AttachPoint;
|
||||
ItemID = attach.ItemID;
|
||||
AssetID = attach.AssetID;
|
||||
}
|
||||
|
||||
public AvatarAttachment(int point, UUID item, UUID asset)
|
||||
{
|
||||
AttachPoint = point;
|
||||
ItemID = item;
|
||||
AssetID = asset;
|
||||
}
|
||||
|
||||
public AvatarAttachment(OSDMap args)
|
||||
{
|
||||
Unpack(args);
|
||||
}
|
||||
|
||||
public OSDMap Pack()
|
||||
{
|
||||
OSDMap attachdata = new OSDMap();
|
||||
attachdata["point"] = OSD.FromInteger(AttachPoint);
|
||||
attachdata["item"] = OSD.FromUUID(ItemID);
|
||||
attachdata["asset"] = OSD.FromUUID(AssetID);
|
||||
|
||||
return attachdata;
|
||||
}
|
||||
|
||||
|
||||
public void Unpack(OSDMap args)
|
||||
{
|
||||
if (args["point"] != null)
|
||||
AttachPoint = args["point"].AsInteger();
|
||||
ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero;
|
||||
AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -26,14 +26,32 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Security.Permissions;
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.StructuredData;
|
||||
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
public class AvatarWearable
|
||||
{
|
||||
// these are guessed at by the list here -
|
||||
// http://wiki.secondlife.com/wiki/Avatar_Appearance. We'll
|
||||
// correct them over time for when were are wrong.
|
||||
public static readonly int BODY = 0;
|
||||
public static readonly int SKIN = 1;
|
||||
public static readonly int HAIR = 2;
|
||||
public static readonly int EYES = 3;
|
||||
public static readonly int SHIRT = 4;
|
||||
public static readonly int PANTS = 5;
|
||||
public static readonly int SHOES = 6;
|
||||
public static readonly int SOCKS = 7;
|
||||
public static readonly int JACKET = 8;
|
||||
public static readonly int GLOVES = 9;
|
||||
public static readonly int UNDERSHIRT = 10;
|
||||
public static readonly int UNDERPANTS = 11;
|
||||
public static readonly int SKIRT = 12;
|
||||
|
||||
public static readonly int MAX_WEARABLES = 13;
|
||||
|
||||
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");
|
||||
|
||||
|
@ -62,12 +80,32 @@ namespace OpenSim.Framework
|
|||
ItemID = itemId;
|
||||
}
|
||||
|
||||
public AvatarWearable(OSDMap args)
|
||||
{
|
||||
Unpack(args);
|
||||
}
|
||||
|
||||
public OSDMap Pack()
|
||||
{
|
||||
OSDMap weardata = new OSDMap();
|
||||
weardata["item"] = OSD.FromUUID(ItemID);
|
||||
weardata["asset"] = OSD.FromUUID(AssetID);
|
||||
|
||||
return weardata;
|
||||
}
|
||||
|
||||
public void Unpack(OSDMap args)
|
||||
{
|
||||
ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero;
|
||||
AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero;
|
||||
}
|
||||
|
||||
public static AvatarWearable[] DefaultWearables
|
||||
{
|
||||
get
|
||||
{
|
||||
AvatarWearable[] defaultWearables = new AvatarWearable[13]; //should be 13 of these
|
||||
for (int i = 0; i < 13; i++)
|
||||
AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; //should be 13 of these
|
||||
for (int i = 0; i < MAX_WEARABLES; i++)
|
||||
{
|
||||
defaultWearables[i] = new AvatarWearable();
|
||||
}
|
||||
|
|
|
@ -976,7 +976,9 @@ namespace OpenSim.Framework.Capabilities
|
|||
|
||||
public void BakedTextureUploaded(UUID assetID, byte[] data)
|
||||
{
|
||||
m_log.DebugFormat("[CAPS]: Received baked texture {0}", assetID.ToString());
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[CAPS]: Received baked texture {0}", assetID.ToString());
|
||||
// DEBUG OFF
|
||||
AssetBase asset;
|
||||
asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_agentID.ToString());
|
||||
asset.Data = data;
|
||||
|
|
|
@ -225,46 +225,6 @@ namespace OpenSim.Framework
|
|||
}
|
||||
}
|
||||
|
||||
public class AttachmentData
|
||||
{
|
||||
public int AttachPoint;
|
||||
public UUID ItemID;
|
||||
public UUID AssetID;
|
||||
|
||||
public AttachmentData(int point, UUID item, UUID asset)
|
||||
{
|
||||
AttachPoint = point;
|
||||
ItemID = item;
|
||||
AssetID = asset;
|
||||
}
|
||||
|
||||
public AttachmentData(OSDMap args)
|
||||
{
|
||||
UnpackUpdateMessage(args);
|
||||
}
|
||||
|
||||
public OSDMap PackUpdateMessage()
|
||||
{
|
||||
OSDMap attachdata = new OSDMap();
|
||||
attachdata["point"] = OSD.FromInteger(AttachPoint);
|
||||
attachdata["item"] = OSD.FromUUID(ItemID);
|
||||
attachdata["asset"] = OSD.FromUUID(AssetID);
|
||||
|
||||
return attachdata;
|
||||
}
|
||||
|
||||
|
||||
public void UnpackUpdateMessage(OSDMap args)
|
||||
{
|
||||
if (args["point"] != null)
|
||||
AttachPoint = args["point"].AsInteger();
|
||||
if (args["item"] != null)
|
||||
ItemID = args["item"].AsUUID();
|
||||
if (args["asset"] != null)
|
||||
AssetID = args["asset"].AsUUID();
|
||||
}
|
||||
}
|
||||
|
||||
public class ControllerData
|
||||
{
|
||||
public UUID ItemID;
|
||||
|
@ -348,11 +308,14 @@ namespace OpenSim.Framework
|
|||
public UUID GranterID;
|
||||
|
||||
// Appearance
|
||||
public AvatarAppearance Appearance;
|
||||
|
||||
/*
|
||||
public byte[] AgentTextures;
|
||||
public byte[] VisualParams;
|
||||
public UUID[] Wearables;
|
||||
public AttachmentData[] Attachments;
|
||||
|
||||
public AvatarAttachment[] Attachments;
|
||||
*/
|
||||
// Scripted
|
||||
public ControllerData[] Controllers;
|
||||
|
||||
|
@ -413,6 +376,9 @@ namespace OpenSim.Framework
|
|||
args["animations"] = anims;
|
||||
}
|
||||
|
||||
if (Appearance != null)
|
||||
args["packed_appearance"] = Appearance.Pack();
|
||||
|
||||
//if ((AgentTextures != null) && (AgentTextures.Length > 0))
|
||||
//{
|
||||
// OSDArray textures = new OSDArray(AgentTextures.Length);
|
||||
|
@ -421,7 +387,7 @@ namespace OpenSim.Framework
|
|||
// args["agent_textures"] = textures;
|
||||
//}
|
||||
|
||||
|
||||
/*
|
||||
if ((AgentTextures != null) && (AgentTextures.Length > 0))
|
||||
args["texture_entry"] = OSD.FromBinary(AgentTextures);
|
||||
|
||||
|
@ -441,11 +407,11 @@ namespace OpenSim.Framework
|
|||
if ((Attachments != null) && (Attachments.Length > 0))
|
||||
{
|
||||
OSDArray attachs = new OSDArray(Attachments.Length);
|
||||
foreach (AttachmentData att in Attachments)
|
||||
attachs.Add(att.PackUpdateMessage());
|
||||
foreach (AvatarAttachment att in Attachments)
|
||||
attachs.Add(att.Pack());
|
||||
args["attachments"] = attachs;
|
||||
}
|
||||
|
||||
*/
|
||||
if ((Controllers != null) && (Controllers.Length > 0))
|
||||
{
|
||||
OSDArray controls = new OSDArray(Controllers.Length);
|
||||
|
@ -581,6 +547,12 @@ namespace OpenSim.Framework
|
|||
// AgentTextures[i++] = o.AsUUID();
|
||||
//}
|
||||
|
||||
if (args["packed_appearance"] != null)
|
||||
Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]);
|
||||
else
|
||||
Appearance = new AvatarAppearance(AgentID);
|
||||
|
||||
/*
|
||||
if (args["texture_entry"] != null)
|
||||
AgentTextures = args["texture_entry"].AsBinary();
|
||||
|
||||
|
@ -599,17 +571,17 @@ namespace OpenSim.Framework
|
|||
if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
|
||||
{
|
||||
OSDArray attachs = (OSDArray)(args["attachments"]);
|
||||
Attachments = new AttachmentData[attachs.Count];
|
||||
Attachments = new AvatarAttachment[attachs.Count];
|
||||
int i = 0;
|
||||
foreach (OSD o in attachs)
|
||||
{
|
||||
if (o.Type == OSDType.Map)
|
||||
{
|
||||
Attachments[i++] = new AttachmentData((OSDMap)o);
|
||||
Attachments[i++] = new AvatarAttachment((OSDMap)o);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array)
|
||||
{
|
||||
OSDArray controls = (OSDArray)(args["controllers"]);
|
||||
|
|
|
@ -43,7 +43,7 @@ namespace OpenSim.Framework
|
|||
|
||||
public delegate void TextureRequest(Object sender, TextureRequestArgs e);
|
||||
|
||||
public delegate void AvatarNowWearing(Object sender, AvatarWearingArgs e);
|
||||
public delegate void AvatarNowWearing(IClientAPI sender, AvatarWearingArgs e);
|
||||
|
||||
public delegate void ImprovedInstantMessage(IClientAPI remoteclient, GridInstantMessage im);
|
||||
|
||||
|
@ -65,7 +65,7 @@ namespace OpenSim.Framework
|
|||
|
||||
public delegate void NetworkStats(int inPackets, int outPackets, int unAckedBytes);
|
||||
|
||||
public delegate void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams);
|
||||
public delegate void SetAppearance(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams);
|
||||
|
||||
public delegate void StartAnim(IClientAPI remoteClient, UUID animID);
|
||||
|
||||
|
@ -714,7 +714,7 @@ namespace OpenSim.Framework
|
|||
event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
event DeRezObject OnDeRezObject;
|
||||
event Action<IClientAPI> OnRegionHandShakeReply;
|
||||
event GenericCall2 OnRequestWearables;
|
||||
event GenericCall1 OnRequestWearables;
|
||||
event GenericCall1 OnCompleteMovementToRegion;
|
||||
event UpdateAgent OnPreAgentUpdate;
|
||||
event UpdateAgent OnAgentUpdate;
|
||||
|
|
|
@ -65,9 +65,7 @@ namespace OpenSim.Framework.Tests
|
|||
SessionId = UUID.Random();
|
||||
|
||||
AvAppearance = new AvatarAppearance(AgentId);
|
||||
AvAppearance.SetDefaultWearables();
|
||||
VisualParams = new byte[218];
|
||||
AvAppearance.SetDefaultParams(VisualParams);
|
||||
|
||||
//body
|
||||
VisualParams[(int)AvatarAppearance.VPElement.SHAPE_HEIGHT] = 155;
|
||||
|
|
|
@ -79,7 +79,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public event DeRezObject OnDeRezObject;
|
||||
public event ModifyTerrain OnModifyTerrain;
|
||||
public event Action<IClientAPI> OnRegionHandShakeReply;
|
||||
public event GenericCall2 OnRequestWearables;
|
||||
public event GenericCall1 OnRequestWearables;
|
||||
public event SetAppearance OnSetAppearance;
|
||||
public event AvatarNowWearing OnAvatarNowWearing;
|
||||
public event RezSingleAttachmentFromInv OnRezSingleAttachmentFromInv;
|
||||
|
@ -5681,11 +5681,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
private bool HandlerAgentWearablesRequest(IClientAPI sender, Packet Pack)
|
||||
{
|
||||
GenericCall2 handlerRequestWearables = OnRequestWearables;
|
||||
GenericCall1 handlerRequestWearables = OnRequestWearables;
|
||||
|
||||
if (handlerRequestWearables != null)
|
||||
{
|
||||
handlerRequestWearables();
|
||||
handlerRequestWearables(sender);
|
||||
}
|
||||
|
||||
Action<IClientAPI> handlerRequestAvatarsData = OnRequestAvatarsData;
|
||||
|
@ -5728,7 +5728,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
if (appear.ObjectData.TextureEntry.Length > 1)
|
||||
te = new Primitive.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length);
|
||||
|
||||
handlerSetAppearance(te, visualparams);
|
||||
handlerSetAppearance(sender, te, visualparams);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -125,13 +125,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
|
||||
// Save avatar attachment information
|
||||
ScenePresence presence;
|
||||
if (m_scene.AvatarFactory != null && m_scene.TryGetScenePresence(remoteClient.AgentId, out presence))
|
||||
if (m_scene.AvatarService != null && m_scene.TryGetScenePresence(remoteClient.AgentId, out presence))
|
||||
{
|
||||
m_log.Info(
|
||||
"[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId
|
||||
+ ", AttachmentPoint: " + AttachmentPt);
|
||||
|
||||
m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||
m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -399,8 +399,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
item = m_scene.InventoryService.GetItem(item);
|
||||
presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /* att.UUID */);
|
||||
|
||||
if (m_scene.AvatarFactory != null)
|
||||
m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||
if (m_scene.AvatarService != null)
|
||||
m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -422,10 +422,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
presence.Appearance.DetachAttachment(itemID);
|
||||
|
||||
// Save avatar attachment information
|
||||
if (m_scene.AvatarFactory != null)
|
||||
if (m_scene.AvatarService != null)
|
||||
{
|
||||
m_log.Debug("[ATTACHMENTS MODULE]: Detaching from UserID: " + remoteClient.AgentId + ", ItemID: " + itemID);
|
||||
m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||
m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -452,9 +452,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
|
||||
presence.Appearance.DetachAttachment(itemID);
|
||||
|
||||
if (m_scene.AvatarFactory != null)
|
||||
if (m_scene.AvatarService != null)
|
||||
{
|
||||
m_scene.AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||
m_scene.AvatarService.SetAppearance(remoteClient.AgentId, presence.Appearance);
|
||||
}
|
||||
part.ParentGroup.DetachToGround();
|
||||
|
||||
|
|
|
@ -38,48 +38,20 @@ using OpenSim.Services.Interfaces;
|
|||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||
{
|
||||
public class AvatarFactoryModule : IAvatarFactory, IRegionModule
|
||||
public class AvatarFactoryModule : IRegionModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private static readonly byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
|
||||
private Scene m_scene = null;
|
||||
private static readonly AvatarAppearance def = new AvatarAppearance();
|
||||
|
||||
public bool TryGetAvatarAppearance(UUID avatarId, out AvatarAppearance appearance)
|
||||
{
|
||||
AvatarData avatar = m_scene.AvatarService.GetAvatar(avatarId);
|
||||
//if ((profile != null) && (profile.RootFolder != null))
|
||||
if (avatar != null)
|
||||
{
|
||||
appearance = avatar.ToAvatarAppearance(avatarId);
|
||||
return true;
|
||||
}
|
||||
|
||||
m_log.ErrorFormat("[APPEARANCE]: Appearance not found for {0}, creating default", avatarId);
|
||||
appearance = CreateDefault(avatarId);
|
||||
return false;
|
||||
}
|
||||
|
||||
private AvatarAppearance CreateDefault(UUID avatarId)
|
||||
{
|
||||
AvatarAppearance appearance = null;
|
||||
AvatarWearable[] wearables;
|
||||
byte[] visualParams;
|
||||
GetDefaultAvatarAppearance(out wearables, out visualParams);
|
||||
appearance = new AvatarAppearance(avatarId, wearables, visualParams);
|
||||
|
||||
return appearance;
|
||||
}
|
||||
private bool m_startAnimationSet = false;
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
{
|
||||
scene.RegisterModuleInterface<IAvatarFactory>(this);
|
||||
scene.EventManager.OnNewClient += NewClient;
|
||||
|
||||
if (m_scene == null)
|
||||
{
|
||||
m_scene = scene;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
|
@ -102,6 +74,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
|
||||
public void NewClient(IClientAPI client)
|
||||
{
|
||||
client.OnRequestWearables += SendWearables;
|
||||
client.OnSetAppearance += SetAppearance;
|
||||
client.OnAvatarNowWearing += AvatarIsWearing;
|
||||
}
|
||||
|
||||
|
@ -110,13 +84,167 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
// client.OnAvatarNowWearing -= AvatarIsWearing;
|
||||
}
|
||||
|
||||
public void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
|
||||
/// <summary>
|
||||
/// Set appearance data (textureentry and slider settings) received from the client
|
||||
/// </summary>
|
||||
/// <param name="texture"></param>
|
||||
/// <param name="visualParam"></param>
|
||||
public void SetAppearance(IClientAPI client, Primitive.TextureEntry textureEntry, byte[] visualParams)
|
||||
{
|
||||
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
|
||||
if (sp == null)
|
||||
{
|
||||
m_log.WarnFormat("[AVFACTORY] SetAppearance unable to find presence for {0}",client.AgentId);
|
||||
return;
|
||||
}
|
||||
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[AVFACTORY] SetAppearance for {0}",client.AgentId);
|
||||
// DEBUG OFF
|
||||
|
||||
/*
|
||||
if (m_physicsActor != null)
|
||||
{
|
||||
if (!IsChildAgent)
|
||||
{
|
||||
// This may seem like it's redundant, remove the avatar from the physics scene
|
||||
// just to add it back again, but it saves us from having to update
|
||||
// 3 variables 10 times a second.
|
||||
bool flyingTemp = m_physicsActor.Flying;
|
||||
RemoveFromPhysicalScene();
|
||||
//m_scene.PhysicsScene.RemoveAvatar(m_physicsActor);
|
||||
|
||||
//PhysicsActor = null;
|
||||
|
||||
AddToPhysicalScene(flyingTemp);
|
||||
}
|
||||
}
|
||||
*/
|
||||
#region Bake Cache Check
|
||||
|
||||
bool changed = false;
|
||||
|
||||
// Process the texture entry
|
||||
if (textureEntry != null)
|
||||
{
|
||||
for (int i = 0; i < BAKE_INDICES.Length; i++)
|
||||
{
|
||||
int j = BAKE_INDICES[i];
|
||||
Primitive.TextureEntryFace face = textureEntry.FaceTextures[j];
|
||||
|
||||
if (face != null && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE)
|
||||
{
|
||||
if (m_scene.AssetService.Get(face.TextureID.ToString()) == null)
|
||||
{
|
||||
m_log.WarnFormat("[AVFACTORY]: Missing baked texture {0} ({1}) for avatar {2}",face.TextureID,j,this.Name);
|
||||
client.SendRebakeAvatarTextures(face.TextureID);
|
||||
}
|
||||
}
|
||||
}
|
||||
changed = sp.Appearance.SetTextureEntries(textureEntry);
|
||||
|
||||
}
|
||||
|
||||
#endregion Bake Cache Check
|
||||
|
||||
changed = sp.Appearance.SetVisualParams(visualParams) || changed;
|
||||
|
||||
// If nothing changed (this happens frequently) just return
|
||||
if (changed)
|
||||
{
|
||||
// DEBUG ON
|
||||
m_log.Warn("[AVFACTORY] Appearance changed");
|
||||
// DEBUG OFF
|
||||
sp.Appearance.SetAppearance(textureEntry, visualParams);
|
||||
if (sp.Appearance.AvatarHeight > 0)
|
||||
sp.SetHeight(sp.Appearance.AvatarHeight);
|
||||
|
||||
m_scene.AvatarService.SetAppearance(client.AgentId, sp.Appearance);
|
||||
}
|
||||
// DEBUG ON
|
||||
else
|
||||
m_log.Warn("[AVFACTORY] Appearance did not change");
|
||||
// DEBUG OFF
|
||||
|
||||
sp.SendAppearanceToAllOtherAgents();
|
||||
if (!m_startAnimationSet)
|
||||
{
|
||||
sp.Animator.UpdateMovementAnimations();
|
||||
m_startAnimationSet = true;
|
||||
}
|
||||
|
||||
client.SendAvatarDataImmediate(sp);
|
||||
client.SendAppearance(sp.Appearance.Owner,sp.Appearance.VisualParams,sp.Appearance.Texture.GetBytes());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tell the client for this scene presence what items it should be wearing now
|
||||
/// </summary>
|
||||
public void SendWearables(IClientAPI client)
|
||||
{
|
||||
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
|
||||
if (sp == null)
|
||||
{
|
||||
m_log.WarnFormat("[AVFACTORY] SendWearables unable to find presence for {0}",client.AgentId);
|
||||
return;
|
||||
}
|
||||
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[AVFACTORY]: Received request for wearables of {0}", client.AgentId);
|
||||
// DEBUG OFF
|
||||
client.SendWearables(sp.Appearance.Wearables,sp.Appearance.Serial++);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update what the avatar is wearing using an item from their inventory.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public void AvatarIsWearing(IClientAPI client, AvatarWearingArgs e)
|
||||
{
|
||||
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
|
||||
if (sp == null)
|
||||
{
|
||||
m_log.WarnFormat("[AVFACTORY] AvatarIsWearing unable to find presence for {0}",client.AgentId);
|
||||
return;
|
||||
}
|
||||
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}",client.AgentId);
|
||||
// DEBUG OFF
|
||||
|
||||
AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance);
|
||||
|
||||
//if (!TryGetAvatarAppearance(client.AgentId, out avatAppearance))
|
||||
//{
|
||||
// m_log.Warn("[AVFACTORY]: We didn't seem to find the appearance, falling back to ScenePresence");
|
||||
// avatAppearance = sp.Appearance;
|
||||
//}
|
||||
|
||||
//m_log.DebugFormat("[AVFACTORY]: Received wearables for {0}", client.Name);
|
||||
|
||||
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
|
||||
{
|
||||
if (wear.Type < AvatarWearable.MAX_WEARABLES)
|
||||
{
|
||||
AvatarWearable newWearable = new AvatarWearable(wear.ItemID,UUID.Zero);
|
||||
avatAppearance.SetWearable(wear.Type, newWearable);
|
||||
}
|
||||
}
|
||||
|
||||
SetAppearanceAssets(sp.UUID, ref avatAppearance);
|
||||
|
||||
m_scene.AvatarService.SetAppearance(client.AgentId, avatAppearance);
|
||||
sp.Appearance = avatAppearance;
|
||||
}
|
||||
|
||||
private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
|
||||
{
|
||||
IInventoryService invService = m_scene.InventoryService;
|
||||
|
||||
if (invService.GetRootFolder(userID) != null)
|
||||
{
|
||||
for (int i = 0; i < 13; i++)
|
||||
for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
|
||||
{
|
||||
if (appearance.Wearables[i].ItemID == UUID.Zero)
|
||||
{
|
||||
|
@ -134,84 +262,19 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
else
|
||||
{
|
||||
m_log.ErrorFormat(
|
||||
"[APPEARANCE]: Can't find inventory item {0} for {1}, setting to default",
|
||||
"[AVFACTORY]: Can't find inventory item {0} for {1}, setting to default",
|
||||
appearance.Wearables[i].ItemID, (WearableType)i);
|
||||
|
||||
appearance.Wearables[i].AssetID = def.Wearables[i].AssetID;
|
||||
appearance.Wearables[i].ItemID = UUID.Zero;
|
||||
appearance.Wearables[i].AssetID = UUID.Zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.WarnFormat("[APPEARANCE]: user {0} has no inventory, appearance isn't going to work", userID);
|
||||
m_log.WarnFormat("[AVFACTORY]: user {0} has no inventory, appearance isn't going to work", userID);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update what the avatar is wearing using an item from their inventory.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public void AvatarIsWearing(Object sender, AvatarWearingArgs e)
|
||||
{
|
||||
m_log.DebugFormat("[APPEARANCE]: AvatarIsWearing");
|
||||
|
||||
IClientAPI clientView = (IClientAPI)sender;
|
||||
ScenePresence sp = m_scene.GetScenePresence(clientView.AgentId);
|
||||
|
||||
if (sp == null)
|
||||
{
|
||||
m_log.Error("[APPEARANCE]: Avatar is child agent, ignoring AvatarIsWearing event");
|
||||
return;
|
||||
}
|
||||
|
||||
AvatarAppearance avatAppearance = sp.Appearance;
|
||||
//if (!TryGetAvatarAppearance(clientView.AgentId, out avatAppearance))
|
||||
//{
|
||||
// m_log.Warn("[APPEARANCE]: We didn't seem to find the appearance, falling back to ScenePresence");
|
||||
// avatAppearance = sp.Appearance;
|
||||
//}
|
||||
|
||||
//m_log.DebugFormat("[APPEARANCE]: Received wearables for {0}", clientView.Name);
|
||||
|
||||
foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
|
||||
{
|
||||
if (wear.Type < 13)
|
||||
{
|
||||
avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID;
|
||||
}
|
||||
}
|
||||
|
||||
SetAppearanceAssets(sp.UUID, ref avatAppearance);
|
||||
AvatarData adata = new AvatarData(avatAppearance);
|
||||
m_scene.AvatarService.SetAvatar(clientView.AgentId, adata);
|
||||
|
||||
sp.Appearance = avatAppearance;
|
||||
}
|
||||
|
||||
public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams)
|
||||
{
|
||||
visualParams = GetDefaultVisualParams();
|
||||
wearables = AvatarWearable.DefaultWearables;
|
||||
}
|
||||
|
||||
public void UpdateDatabase(UUID user, AvatarAppearance appearance)
|
||||
{
|
||||
//m_log.DebugFormat("[APPEARANCE]: UpdateDatabase");
|
||||
AvatarData adata = new AvatarData(appearance);
|
||||
m_scene.AvatarService.SetAvatar(user, adata);
|
||||
}
|
||||
|
||||
private static byte[] GetDefaultVisualParams()
|
||||
{
|
||||
byte[] visualParams;
|
||||
visualParams = new byte[218];
|
||||
for (int i = 0; i < 218; i++)
|
||||
{
|
||||
visualParams[i] = 100;
|
||||
}
|
||||
return visualParams;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ using System.Collections.Generic;
|
|||
using System.Reflection;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Server.Base;
|
||||
|
@ -137,6 +138,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar
|
|||
|
||||
#region IAvatarService
|
||||
|
||||
public AvatarAppearance GetAppearance(UUID userID)
|
||||
{
|
||||
return m_AvatarService.GetAppearance(userID);
|
||||
}
|
||||
|
||||
public bool SetAppearance(UUID userID, AvatarAppearance appearance)
|
||||
{
|
||||
return m_AvatarService.SetAppearance(userID,appearance);
|
||||
}
|
||||
|
||||
public AvatarData GetAvatar(UUID userID)
|
||||
{
|
||||
return m_AvatarService.GetAvatar(userID);
|
||||
|
|
|
@ -82,7 +82,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
|||
public event MoveItemsAndLeaveCopy OnMoveItemsAndLeaveCopy;
|
||||
public event DeRezObject OnDeRezObject;
|
||||
public event Action<IClientAPI> OnRegionHandShakeReply;
|
||||
public event GenericCall2 OnRequestWearables;
|
||||
public event GenericCall1 OnRequestWearables;
|
||||
public event GenericCall1 OnCompleteMovementToRegion;
|
||||
public event UpdateAgent OnPreAgentUpdate;
|
||||
public event UpdateAgent OnAgentUpdate;
|
||||
|
|
|
@ -120,7 +120,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
protected IXMLRPC m_xmlrpcModule;
|
||||
protected IWorldComm m_worldCommModule;
|
||||
protected IAvatarFactory m_AvatarFactory;
|
||||
protected IConfigSource m_config;
|
||||
protected IRegionSerialiserModule m_serialiser;
|
||||
protected IDialogModule m_dialogModule;
|
||||
|
@ -415,11 +414,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public IAttachmentsModule AttachmentsModule { get; set; }
|
||||
|
||||
public IAvatarFactory AvatarFactory
|
||||
{
|
||||
get { return m_AvatarFactory; }
|
||||
}
|
||||
|
||||
public ICapabilitiesModule CapsModule
|
||||
{
|
||||
get { return m_capsModule; }
|
||||
|
@ -1193,7 +1187,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_xmlrpcModule = RequestModuleInterface<IXMLRPC>();
|
||||
m_worldCommModule = RequestModuleInterface<IWorldComm>();
|
||||
XferManager = RequestModuleInterface<IXfer>();
|
||||
m_AvatarFactory = RequestModuleInterface<IAvatarFactory>();
|
||||
AttachmentsModule = RequestModuleInterface<IAttachmentsModule>();
|
||||
m_serialiser = RequestModuleInterface<IRegionSerialiserModule>();
|
||||
m_dialogModule = RequestModuleInterface<IDialogModule>();
|
||||
|
|
|
@ -76,7 +76,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private static readonly byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
|
||||
// private static readonly byte[] DEFAULT_TEXTURE = AvatarAppearance.GetDefaultTexture().GetBytes();
|
||||
private static readonly Array DIR_CONTROL_FLAGS = Enum.GetValues(typeof(Dir_ControlFlags));
|
||||
private static readonly Vector3 HEAD_ADJUSTMENT = new Vector3(0f, 0f, 0.3f);
|
||||
|
@ -143,8 +142,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
private SendCourseLocationsMethod m_sendCourseLocationsMethod;
|
||||
|
||||
private bool m_startAnimationSet;
|
||||
|
||||
//private Vector3 m_requestedSitOffset = new Vector3();
|
||||
|
||||
private Vector3 m_LastFinitePos;
|
||||
|
@ -778,13 +775,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
SetDirectionVectors();
|
||||
}
|
||||
|
||||
/*
|
||||
public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, byte[] visualParams,
|
||||
AvatarWearable[] wearables)
|
||||
: this(client, world, reginfo)
|
||||
{
|
||||
m_appearance = new AvatarAppearance(m_uuid, wearables, visualParams);
|
||||
}
|
||||
|
||||
*/
|
||||
public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance)
|
||||
: this(client, world, reginfo)
|
||||
{
|
||||
|
@ -798,8 +796,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void RegisterToEvents()
|
||||
{
|
||||
m_controllingClient.OnRequestWearables += SendWearables;
|
||||
m_controllingClient.OnSetAppearance += SetAppearance;
|
||||
m_controllingClient.OnCompleteMovementToRegion += CompleteMovement;
|
||||
//m_controllingClient.OnCompleteMovementToRegion += SendInitialData;
|
||||
m_controllingClient.OnAgentUpdate += HandleAgentUpdate;
|
||||
|
@ -1208,7 +1204,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <summary>
|
||||
/// Sets avatar height in the phyiscs plugin
|
||||
/// </summary>
|
||||
internal void SetHeight(float height)
|
||||
public void SetHeight(float height)
|
||||
{
|
||||
m_avHeight = height;
|
||||
if (PhysicsActor != null && !IsChildAgent)
|
||||
|
@ -1272,7 +1268,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (friendsModule != null)
|
||||
friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -2742,9 +2737,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (m_appearance.Texture == null)
|
||||
return;
|
||||
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z += m_appearance.HipOffset;
|
||||
|
||||
if (IsChildAgent)
|
||||
{
|
||||
m_log.WarnFormat("[SCENEPRESENCE] A child agent is attempting to send out avatar data");
|
||||
return;
|
||||
}
|
||||
|
||||
remoteAvatar.m_controllingClient.SendAvatarDataImmediate(this);
|
||||
m_scene.StatsReporter.AddAgentUpdates(1);
|
||||
}
|
||||
|
@ -2787,6 +2785,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_perfMonMS = Util.EnvironmentTickCount();
|
||||
|
||||
// only send update from root agents to other clients; children are only "listening posts"
|
||||
if (IsChildAgent)
|
||||
{
|
||||
m_log.Warn("[SCENEPRESENCE] attempt to send update from a childagent");
|
||||
return;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
m_scene.ForEachScenePresence(delegate(ScenePresence sp)
|
||||
{
|
||||
|
@ -2810,29 +2814,20 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// the inventory arrives
|
||||
// m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance);
|
||||
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z += m_appearance.HipOffset;
|
||||
|
||||
m_controllingClient.SendAvatarDataImmediate(this);
|
||||
m_controllingClient.SendAppearance(m_appearance.Owner,m_appearance.VisualParams,m_appearance.Texture.GetBytes());
|
||||
|
||||
SendInitialFullUpdateToAllClients();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tell the client for this scene presence what items it should be wearing now
|
||||
/// </summary>
|
||||
public void SendWearables()
|
||||
{
|
||||
m_log.DebugFormat("[SCENE]: Received request for wearables of {0}", Name);
|
||||
|
||||
ControllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void SendAppearanceToAllOtherAgents()
|
||||
{
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[SP] Send appearance from {0} to all other agents",m_uuid);
|
||||
// DEBUG OFF
|
||||
m_perfMonMS = Util.EnvironmentTickCount();
|
||||
|
||||
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
|
||||
|
@ -2852,96 +2847,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <param name="avatar"></param>
|
||||
public void SendAppearanceToOtherAgent(ScenePresence avatar)
|
||||
{
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId);
|
||||
// DEBUG OFF
|
||||
avatar.ControllingClient.SendAppearance(
|
||||
m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set appearance data (textureentry and slider settings) received from the client
|
||||
/// </summary>
|
||||
/// <param name="texture"></param>
|
||||
/// <param name="visualParam"></param>
|
||||
public void SetAppearance(Primitive.TextureEntry textureEntry, byte[] visualParams)
|
||||
{
|
||||
lock (m_syncRoot)
|
||||
{
|
||||
// MT: Commented this because it's no longer needed.
|
||||
// It used to be that the avatar height was calculated from the visual
|
||||
// params, so any call to this method could change the physical actor's
|
||||
// height. Now the height is supplied in the agent circuit data and never
|
||||
// changes here. So, we can leave physics alone.
|
||||
//
|
||||
// if (m_physicsActor != null)
|
||||
// {
|
||||
// if (!IsChildAgent)
|
||||
// {
|
||||
// // This may seem like it's redundant, remove the avatar from the physics scene
|
||||
// // just to add it back again, but it saves us from having to update
|
||||
// // 3 variables 10 times a second.
|
||||
// bool flyingTemp = m_physicsActor.Flying;
|
||||
// RemoveFromPhysicalScene();
|
||||
// //m_scene.PhysicsScene.RemoveAvatar(m_physicsActor);
|
||||
//
|
||||
// //PhysicsActor = null;
|
||||
//
|
||||
// AddToPhysicalScene(flyingTemp);
|
||||
// }
|
||||
// }
|
||||
|
||||
#region Bake Cache Check
|
||||
|
||||
if (textureEntry != null)
|
||||
{
|
||||
for (int i = 0; i < BAKE_INDICES.Length; i++)
|
||||
{
|
||||
int j = BAKE_INDICES[i];
|
||||
Primitive.TextureEntryFace face = textureEntry.FaceTextures[j];
|
||||
|
||||
if (face != null && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE)
|
||||
{
|
||||
if (m_scene.AssetService.Get(face.TextureID.ToString()) == null)
|
||||
{
|
||||
m_log.Warn("[APPEARANCE]: Missing baked texture " + face.TextureID + " (" + j + ") for avatar " + this.Name);
|
||||
this.ControllingClient.SendRebakeAvatarTextures(face.TextureID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endregion Bake Cache Check
|
||||
|
||||
m_appearance.SetAppearance(textureEntry, visualParams);
|
||||
if (m_appearance.AvatarHeight > 0)
|
||||
SetHeight(m_appearance.AvatarHeight);
|
||||
|
||||
// This is not needed, because only the transient data changed
|
||||
//AvatarData adata = new AvatarData(m_appearance);
|
||||
//m_scene.AvatarService.SetAvatar(m_controllingClient.AgentId, adata);
|
||||
|
||||
SendAppearanceToAllOtherAgents();
|
||||
if (!m_startAnimationSet)
|
||||
{
|
||||
Animator.UpdateMovementAnimations();
|
||||
m_startAnimationSet = true;
|
||||
}
|
||||
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z += m_appearance.HipOffset;
|
||||
|
||||
m_controllingClient.SendAvatarDataImmediate(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetWearable(int wearableId, AvatarWearable wearable)
|
||||
{
|
||||
m_appearance.SetWearable(wearableId, wearable);
|
||||
AvatarData adata = new AvatarData(m_appearance);
|
||||
m_scene.AvatarService.SetAvatar(m_controllingClient.AgentId, adata);
|
||||
m_controllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
|
||||
}
|
||||
|
||||
// Because appearance setting is in a module, we actually need
|
||||
// to give it access to our appearance directly, otherwise we
|
||||
// get a synchronization issue.
|
||||
|
@ -3335,6 +3247,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void CopyTo(AgentData cAgent)
|
||||
{
|
||||
cAgent.CallbackURI = m_callbackURI;
|
||||
|
||||
cAgent.AgentID = UUID;
|
||||
cAgent.RegionID = Scene.RegionInfo.RegionID;
|
||||
|
||||
|
@ -3374,6 +3288,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
cAgent.AlwaysRun = m_setAlwaysRun;
|
||||
|
||||
cAgent.Appearance = new AvatarAppearance(m_appearance);
|
||||
|
||||
/*
|
||||
try
|
||||
{
|
||||
// We might not pass the Wearables in all cases...
|
||||
|
@ -3413,14 +3330,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
//m_log.DebugFormat("[SCENE PRESENCE]: attachments {0}", attPoints.Count);
|
||||
int i = 0;
|
||||
AttachmentData[] attachs = new AttachmentData[attPoints.Count];
|
||||
AvatarAttachment[] attachs = new AvatarAttachment[attPoints.Count];
|
||||
foreach (int point in attPoints)
|
||||
{
|
||||
attachs[i++] = new AttachmentData(point, m_appearance.GetAttachedItem(point), m_appearance.GetAttachedAsset(point));
|
||||
attachs[i++] = new AvatarAttachment(point, m_appearance.GetAttachedItem(point), m_appearance.GetAttachedAsset(point));
|
||||
}
|
||||
cAgent.Attachments = attachs;
|
||||
}
|
||||
|
||||
*/
|
||||
lock (scriptedcontrols)
|
||||
{
|
||||
ControllerData[] controls = new ControllerData[scriptedcontrols.Count];
|
||||
|
@ -3447,6 +3364,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void CopyFrom(AgentData cAgent)
|
||||
{
|
||||
// DEBUG ON
|
||||
m_log.ErrorFormat("[SCENEPRESENCE] CALLING COPYFROM");
|
||||
// DEBUG OFF
|
||||
m_originRegionID = cAgent.RegionID;
|
||||
|
||||
m_callbackURI = cAgent.CallbackURI;
|
||||
|
@ -3473,6 +3393,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_godLevel = cAgent.GodLevel;
|
||||
m_setAlwaysRun = cAgent.AlwaysRun;
|
||||
|
||||
m_appearance = new AvatarAppearance(cAgent.Appearance);
|
||||
|
||||
/*
|
||||
uint i = 0;
|
||||
try
|
||||
{
|
||||
|
@ -3485,15 +3408,17 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
UUID assetId = cAgent.Wearables[n + 1];
|
||||
wears[i++] = new AvatarWearable(itemId, assetId);
|
||||
}
|
||||
m_appearance.Wearables = wears;
|
||||
Primitive.TextureEntry te;
|
||||
// m_appearance.Wearables = wears;
|
||||
Primitive.TextureEntry textures = null;
|
||||
if (cAgent.AgentTextures != null && cAgent.AgentTextures.Length > 1)
|
||||
te = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length);
|
||||
else
|
||||
te = AvatarAppearance.GetDefaultTexture();
|
||||
if ((cAgent.VisualParams == null) || (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
|
||||
cAgent.VisualParams = AvatarAppearance.GetDefaultVisualParams();
|
||||
m_appearance.SetAppearance(te, (byte[])cAgent.VisualParams.Clone());
|
||||
textures = new Primitive.TextureEntry(cAgent.AgentTextures, 0, cAgent.AgentTextures.Length);
|
||||
|
||||
byte[] visuals = null;
|
||||
|
||||
if ((cAgent.VisualParams != null) && (cAgent.VisualParams.Length < AvatarAppearance.VISUALPARAM_COUNT))
|
||||
visuals = (byte[])cAgent.VisualParams.Clone();
|
||||
|
||||
m_appearance = new AvatarAppearance(cAgent.AgentID,wears,textures,visuals);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -3506,14 +3431,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (cAgent.Attachments != null)
|
||||
{
|
||||
m_appearance.ClearAttachments();
|
||||
foreach (AttachmentData att in cAgent.Attachments)
|
||||
foreach (AvatarAttachment att in cAgent.Attachments)
|
||||
{
|
||||
m_appearance.SetAttachment(att.AttachPoint, att.ItemID, att.AssetID);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
*/
|
||||
try
|
||||
{
|
||||
lock (scriptedcontrols)
|
||||
|
|
|
@ -676,7 +676,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
|||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DeRezObject OnDeRezObject;
|
||||
public event Action<IClientAPI> OnRegionHandShakeReply;
|
||||
public event GenericCall2 OnRequestWearables;
|
||||
public event GenericCall1 OnRequestWearables;
|
||||
public event GenericCall1 OnCompleteMovementToRegion;
|
||||
public event UpdateAgent OnPreAgentUpdate;
|
||||
public event UpdateAgent OnAgentUpdate;
|
||||
|
@ -909,7 +909,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
|||
Scene scene = (Scene)Scene;
|
||||
AvatarAppearance appearance;
|
||||
scene.GetAvatarAppearance(this, out appearance);
|
||||
OnSetAppearance(appearance.Texture, (byte[])appearance.VisualParams.Clone());
|
||||
OnSetAppearance(this, appearance.Texture, (byte[])appearance.VisualParams.Clone());
|
||||
}
|
||||
|
||||
public void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args)
|
||||
|
|
|
@ -32,7 +32,7 @@ using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
|
|||
|
||||
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||
{
|
||||
class ExtensionHandler : IExtension
|
||||
class ExtensionHandler : IExtension
|
||||
{
|
||||
private readonly Dictionary<Type, object> m_instances;
|
||||
|
||||
|
|
|
@ -291,7 +291,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
|||
|
||||
public void InitializeMRM(MRMBase mmb, uint localID, UUID itemID)
|
||||
{
|
||||
|
||||
m_log.Info("[MRM] Created MRM Instance");
|
||||
|
||||
IWorld world;
|
||||
|
|
|
@ -188,7 +188,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
|||
|
||||
public event DeRezObject OnDeRezObject;
|
||||
public event Action<IClientAPI> OnRegionHandShakeReply;
|
||||
public event GenericCall2 OnRequestWearables;
|
||||
public event GenericCall1 OnRequestWearables;
|
||||
public event GenericCall1 OnCompleteMovementToRegion;
|
||||
public event UpdateAgent OnPreAgentUpdate;
|
||||
public event UpdateAgent OnAgentUpdate;
|
||||
|
|
|
@ -64,15 +64,13 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
|||
if (m_appearanceCache.ContainsKey(target))
|
||||
return m_appearanceCache[target];
|
||||
|
||||
AvatarData adata = scene.AvatarService.GetAvatar(target);
|
||||
if (adata != null)
|
||||
AvatarAppearance appearance = scene.AvatarService.GetAppearance(target);
|
||||
if (appearance != null)
|
||||
{
|
||||
AvatarAppearance x = adata.ToAvatarAppearance(target);
|
||||
|
||||
m_appearanceCache.Add(target, x);
|
||||
|
||||
return x;
|
||||
m_appearanceCache.Add(target, appearance);
|
||||
return appearance;
|
||||
}
|
||||
|
||||
return new AvatarAppearance();
|
||||
}
|
||||
|
||||
|
@ -169,7 +167,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
|||
{
|
||||
AvatarAppearance x = GetAppearance(p_cloneAppearanceFrom, p_scene);
|
||||
|
||||
sp.SetAppearance(x.Texture, (byte[])x.VisualParams.Clone());
|
||||
sp.Appearance.SetTextureEntries(x.Texture);
|
||||
sp.Appearance.SetVisualParams((byte[])x.VisualParams.Clone());
|
||||
sp.SendAppearanceToAllOtherAgents();
|
||||
}
|
||||
|
||||
m_avatars.Add(npcAvatar.AgentId, npcAvatar);
|
||||
|
|
|
@ -51,6 +51,20 @@ namespace OpenSim.Services.AvatarService
|
|||
m_log.Debug("[AVATAR SERVICE]: Starting avatar service");
|
||||
}
|
||||
|
||||
// Get|SetAppearance should preserve existing semantics
|
||||
// until AvatarData can be removed completely
|
||||
public AvatarAppearance GetAppearance(UUID principalID)
|
||||
{
|
||||
AvatarData avatar = GetAvatar(principalID);
|
||||
return avatar.ToAvatarAppearance(principalID);
|
||||
}
|
||||
|
||||
public bool SetAppearance(UUID principalID, AvatarAppearance appearance)
|
||||
{
|
||||
AvatarData avatar = new AvatarData(appearance);
|
||||
return SetAvatar(principalID,avatar);
|
||||
}
|
||||
|
||||
public AvatarData GetAvatar(UUID principalID)
|
||||
{
|
||||
AvatarBaseData[] av = m_Database.Get("PrincipalID", principalID.ToString());
|
||||
|
|
|
@ -87,6 +87,18 @@ namespace OpenSim.Services.Connectors
|
|||
|
||||
#region IAvatarService
|
||||
|
||||
public AvatarAppearance GetAppearance(UUID userID)
|
||||
{
|
||||
AvatarData avatar = GetAvatar(userID);
|
||||
return avatar.ToAvatarAppearance(userID);
|
||||
}
|
||||
|
||||
public bool SetAppearance(UUID userID, AvatarAppearance appearance)
|
||||
{
|
||||
AvatarData avatar = new AvatarData(appearance);
|
||||
return SetAvatar(userID,avatar);
|
||||
}
|
||||
|
||||
public AvatarData GetAvatar(UUID userID)
|
||||
{
|
||||
Dictionary<string, object> sendData = new Dictionary<string, object>();
|
||||
|
|
|
@ -28,6 +28,9 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
// DEBUG ON
|
||||
using System.Diagnostics;
|
||||
// DEBUG OFF
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
using Mono.Addins;
|
||||
|
@ -106,6 +109,80 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
|
||||
#region IAvatarService
|
||||
|
||||
// <summary>
|
||||
// Retrieves the LLPackedAppearance field from user data and unpacks
|
||||
// it into an AvatarAppearance structure
|
||||
// </summary>
|
||||
// <param name="userID"></param>
|
||||
public AvatarAppearance GetAppearance(UUID userID)
|
||||
{
|
||||
NameValueCollection requestArgs = new NameValueCollection
|
||||
{
|
||||
{ "RequestMethod", "GetUser" },
|
||||
{ "UserID", userID.ToString() }
|
||||
};
|
||||
|
||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||
if (response["Success"].AsBoolean())
|
||||
{
|
||||
OSDMap map = null;
|
||||
try { map = OSDParser.DeserializeJson(response["LLPackedAppearance"].AsString()) as OSDMap; }
|
||||
catch { }
|
||||
|
||||
if (map != null)
|
||||
{
|
||||
AvatarAppearance appearance = new AvatarAppearance(map);
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR] retrieved appearance for {0}:\n{1}",userID,appearance.ToString());
|
||||
// DEBUG OFF
|
||||
return appearance;
|
||||
}
|
||||
|
||||
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to decode appearance for {0}",userID);
|
||||
return null;
|
||||
}
|
||||
|
||||
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to get appearance for {0}: {1}",
|
||||
userID,response["Message"].AsString());
|
||||
return null;
|
||||
}
|
||||
|
||||
// <summary>
|
||||
// </summary>
|
||||
// <param name=""></param>
|
||||
public bool SetAppearance(UUID userID, AvatarAppearance appearance)
|
||||
{
|
||||
OSDMap map = appearance.Pack();
|
||||
if (map == null)
|
||||
{
|
||||
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to encode appearance for {0}",userID);
|
||||
return false;
|
||||
}
|
||||
|
||||
// DEBUG ON
|
||||
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR] save appearance for {0}",userID);
|
||||
// DEBUG OFF
|
||||
|
||||
NameValueCollection requestArgs = new NameValueCollection
|
||||
{
|
||||
{ "RequestMethod", "AddUserData" },
|
||||
{ "UserID", userID.ToString() },
|
||||
{ "LLPackedAppearance", OSDParser.SerializeJsonString(map) }
|
||||
};
|
||||
|
||||
OSDMap response = WebUtil.PostToService(m_serverUrl, requestArgs);
|
||||
bool success = response["Success"].AsBoolean();
|
||||
|
||||
if (! success)
|
||||
m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to save appearance for {0}: {1}",
|
||||
userID,response["Message"].AsString());
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
// <summary>
|
||||
// </summary>
|
||||
// <param name=""></param>
|
||||
public AvatarData GetAvatar(UUID userID)
|
||||
{
|
||||
NameValueCollection requestArgs = new NameValueCollection
|
||||
|
@ -154,7 +231,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
foreach (KeyValuePair<string, OSD> kvp in map)
|
||||
avatar.Data[kvp.Key] = kvp.Value.AsString();
|
||||
}
|
||||
|
||||
|
||||
return avatar;
|
||||
}
|
||||
else
|
||||
|
@ -173,6 +250,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
|||
return null;
|
||||
}
|
||||
|
||||
// <summary>
|
||||
// </summary>
|
||||
// <param name=""></param>
|
||||
public bool SetAvatar(UUID userID, AvatarData avatar)
|
||||
{
|
||||
m_log.Debug("[SIMIAN AVATAR CONNECTOR]: SetAvatar called for " + userID);
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Xml;
|
||||
|
@ -153,6 +154,11 @@ namespace OpenSim.Services.GridService
|
|||
|
||||
// From the command line link-region
|
||||
public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, out string reason)
|
||||
{
|
||||
return TryLinkRegionToCoords(scopeID, mapName, xloc, yloc, UUID.Zero, out reason);
|
||||
}
|
||||
|
||||
public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, UUID ownerID, out string reason)
|
||||
{
|
||||
reason = string.Empty;
|
||||
string host = "127.0.0.1";
|
||||
|
@ -189,7 +195,7 @@ namespace OpenSim.Services.GridService
|
|||
//}
|
||||
|
||||
GridRegion regInfo;
|
||||
bool success = TryCreateLink(scopeID, xloc, yloc, regionName, port, host, out regInfo, out reason);
|
||||
bool success = TryCreateLink(scopeID, xloc, yloc, regionName, port, host, ownerID, out regInfo, out reason);
|
||||
if (success)
|
||||
{
|
||||
regInfo.RegionName = mapName;
|
||||
|
@ -202,7 +208,8 @@ namespace OpenSim.Services.GridService
|
|||
|
||||
// From the command line and the 2 above
|
||||
public bool TryCreateLink(UUID scopeID, int xloc, int yloc,
|
||||
string externalRegionName, uint externalPort, string externalHostName, out GridRegion regInfo, out string reason)
|
||||
string externalRegionName, uint externalPort, string externalHostName, UUID ownerID,
|
||||
out GridRegion regInfo, out string reason)
|
||||
{
|
||||
m_log.DebugFormat("[HYPERGRID LINKER]: Link to {0}:{1}:{2}, in {3}-{4}", externalHostName, externalPort, externalRegionName, xloc, yloc);
|
||||
|
||||
|
@ -214,12 +221,22 @@ namespace OpenSim.Services.GridService
|
|||
regInfo.RegionLocX = xloc;
|
||||
regInfo.RegionLocY = yloc;
|
||||
regInfo.ScopeID = scopeID;
|
||||
regInfo.EstateOwner = ownerID;
|
||||
|
||||
// Big HACK for Simian Grid !!!
|
||||
// We need to clean up all URLs used in OpenSim !!!
|
||||
if (externalHostName.Contains("/"))
|
||||
regInfo.ServerURI = externalHostName;
|
||||
|
||||
// Check for free coordinates
|
||||
GridRegion region = m_GridService.GetRegionByPosition(regInfo.ScopeID, regInfo.RegionLocX, regInfo.RegionLocY);
|
||||
if (region != null)
|
||||
{
|
||||
m_log.WarnFormat("[HYPERGRID LINKER]: Coordinates {0}-{1} are already occupied by region {2} with uuid {3}", regInfo.RegionLocX, regInfo.RegionLocY, region.RegionName, region.RegionID);
|
||||
reason = "Coordinates are already in use";
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
regInfo.InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int)0);
|
||||
|
@ -241,11 +258,11 @@ namespace OpenSim.Services.GridService
|
|||
|
||||
if (regionID != UUID.Zero)
|
||||
{
|
||||
GridRegion r = m_GridService.GetRegionByUUID(scopeID, regionID);
|
||||
if (r != null)
|
||||
region = m_GridService.GetRegionByUUID(scopeID, regionID);
|
||||
if (region != null)
|
||||
{
|
||||
m_log.DebugFormat("[HYPERGRID LINKER]: Region already exists in coordinates {0} {1}", r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize);
|
||||
regInfo = r;
|
||||
m_log.DebugFormat("[HYPERGRID LINKER]: Region already exists in coordinates {0} {1}", region.RegionLocX / Constants.RegionSize, region.RegionLocY / Constants.RegionSize);
|
||||
regInfo = region;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -355,17 +372,8 @@ namespace OpenSim.Services.GridService
|
|||
{
|
||||
// Check for regions which are not linked regions
|
||||
List<GridRegion> hyperlinks = m_GridService.GetHyperlinks(m_ScopeID);
|
||||
// would like to use .Except, but doesn't seem to exist
|
||||
//IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks);
|
||||
List<GridRegion> availableRegions = regions.FindAll(delegate(GridRegion region)
|
||||
{
|
||||
// Ewww! n^2
|
||||
if (hyperlinks.Find(delegate(GridRegion r) { return r.RegionID == region.RegionID; }) == null) // not hyperlink. good.
|
||||
return true;
|
||||
|
||||
return false;
|
||||
});
|
||||
if (availableRegions.Count == 0)
|
||||
IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks);
|
||||
if (availableRegions.Count() == 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -529,7 +537,7 @@ namespace OpenSim.Services.GridService
|
|||
xloc = xloc * (int)Constants.RegionSize;
|
||||
yloc = yloc * (int)Constants.RegionSize;
|
||||
string reason = string.Empty;
|
||||
if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, out regInfo, out reason))
|
||||
if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, UUID.Zero, out regInfo, out reason))
|
||||
{
|
||||
if (cmdparams.Length >= 5)
|
||||
{
|
||||
|
@ -631,8 +639,7 @@ namespace OpenSim.Services.GridService
|
|||
xloc = xloc * (int)Constants.RegionSize;
|
||||
yloc = yloc * (int)Constants.RegionSize;
|
||||
string reason = string.Empty;
|
||||
if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort,
|
||||
externalHostName, out regInfo, out reason))
|
||||
if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, UUID.Zero, out regInfo, out reason))
|
||||
{
|
||||
regInfo.RegionName = config.GetString("localName", "");
|
||||
}
|
||||
|
|
|
@ -37,6 +37,21 @@ namespace OpenSim.Services.Interfaces
|
|||
{
|
||||
public interface IAvatarService
|
||||
{
|
||||
/// <summary>
|
||||
/// Called by the login service
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
AvatarAppearance GetAppearance(UUID userID);
|
||||
|
||||
/// <summary>
|
||||
/// Called by everyone who can change the avatar data (so, regions)
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <param name="appearance"></param>
|
||||
/// <returns></returns>
|
||||
bool SetAppearance(UUID userID, AvatarAppearance appearance);
|
||||
|
||||
/// <summary>
|
||||
/// Called by the login service
|
||||
/// </summary>
|
||||
|
@ -217,23 +232,26 @@ namespace OpenSim.Services.Interfaces
|
|||
foreach (KeyValuePair<string, string> _kvp in Data)
|
||||
if (_kvp.Key.StartsWith("_ap_"))
|
||||
attchs[_kvp.Key] = _kvp.Value;
|
||||
Hashtable aaAttachs = new Hashtable();
|
||||
|
||||
foreach (KeyValuePair<string, string> _kvp in attchs)
|
||||
{
|
||||
string pointStr = _kvp.Key.Substring(4);
|
||||
int point = 0;
|
||||
if (!Int32.TryParse(pointStr, out point))
|
||||
continue;
|
||||
Hashtable tmp = new Hashtable();
|
||||
|
||||
UUID uuid = UUID.Zero;
|
||||
UUID.TryParse(_kvp.Value, out uuid);
|
||||
tmp["item"] = uuid;
|
||||
tmp["asset"] = UUID.Zero.ToString();
|
||||
aaAttachs[point] = tmp;
|
||||
|
||||
appearance.SetAttachment(point,uuid,UUID.Zero);
|
||||
}
|
||||
appearance.SetAttachments(aaAttachs);
|
||||
}
|
||||
catch { }
|
||||
catch
|
||||
{
|
||||
// We really should report something here, returning null
|
||||
// will at least break the wrapper
|
||||
return null;
|
||||
}
|
||||
|
||||
return appearance;
|
||||
}
|
||||
|
|
|
@ -336,10 +336,10 @@ namespace OpenSim.Services.LLLoginService
|
|||
//
|
||||
// Get the avatar
|
||||
//
|
||||
AvatarData avatar = null;
|
||||
AvatarAppearance avatar = null;
|
||||
if (m_AvatarService != null)
|
||||
{
|
||||
avatar = m_AvatarService.GetAvatar(account.PrincipalID);
|
||||
avatar = m_AvatarService.GetAppearance(account.PrincipalID);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -607,7 +607,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
}
|
||||
}
|
||||
|
||||
protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarData avatar,
|
||||
protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarAppearance avatar,
|
||||
UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, string channel, string mac, string id0,
|
||||
IPEndPoint clientIP, out string where, out string reason, out GridRegion dest)
|
||||
{
|
||||
|
@ -703,14 +703,14 @@ namespace OpenSim.Services.LLLoginService
|
|||
}
|
||||
|
||||
private AgentCircuitData MakeAgent(GridRegion region, UserAccount account,
|
||||
AvatarData avatar, UUID session, UUID secureSession, uint circuit, Vector3 position,
|
||||
AvatarAppearance avatar, UUID session, UUID secureSession, uint circuit, Vector3 position,
|
||||
string ipaddress, string viewer, string channel, string mac, string id0)
|
||||
{
|
||||
AgentCircuitData aCircuit = new AgentCircuitData();
|
||||
|
||||
aCircuit.AgentID = account.PrincipalID;
|
||||
if (avatar != null)
|
||||
aCircuit.Appearance = avatar.ToAvatarAppearance(account.PrincipalID);
|
||||
aCircuit.Appearance = new AvatarAppearance(avatar);
|
||||
else
|
||||
aCircuit.Appearance = new AvatarAppearance(account.PrincipalID);
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ namespace OpenSim.Tests.Common.Mock
|
|||
|
||||
public event DeRezObject OnDeRezObject;
|
||||
public event Action<IClientAPI> OnRegionHandShakeReply;
|
||||
public event GenericCall2 OnRequestWearables;
|
||||
public event GenericCall1 OnRequestWearables;
|
||||
public event GenericCall1 OnCompleteMovementToRegion;
|
||||
public event UpdateAgent OnPreAgentUpdate;
|
||||
public event UpdateAgent OnAgentUpdate;
|
||||
|
|
|
@ -1114,6 +1114,7 @@
|
|||
|
||||
<ReferencePath>../../../bin/</ReferencePath>
|
||||
<Reference name="System"/>
|
||||
<Reference name="System.Core"/>
|
||||
<Reference name="System.Xml"/>
|
||||
<Reference name="OpenMetaverseTypes" path="../../../bin/"/>
|
||||
<Reference name="OpenMetaverse" path="../../../bin/"/>
|
||||
|
|
Loading…
Reference in New Issue