OpenSim.Modules.Appearance2.../src/Appearance2Avatar.cs

118 lines
3.6 KiB
C#

using log4net;
using Mono.Addins;
using Nini.Config;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
[assembly: Addin("Appearance2Avatar", "0.1")]
[assembly: AddinDependency("OpenSim.Region.Framework", OpenSim.VersionInfo.VersionNumber)]
namespace OpenSim.Modules.Appearance2Avatar
{
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "Appearance2Avatar")]
class Appearance2Avatar : INonSharedRegionModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private IScriptModuleComms m_scriptModule = null;
private Scene m_scene = null;
public string Name
{
get { return "Appearance2Avatar"; }
}
public Type ReplaceableInterface
{
get { return null; }
}
public void AddRegion(Scene scene)
{
}
public void Close()
{
}
public void Initialise(IConfigSource source)
{
}
public void RegionLoaded(Scene scene)
{
m_scriptModule = scene.RequestModuleInterface<IScriptModuleComms>();
if (m_scriptModule != null)
{
m_scriptModule.RegisterScriptInvocation(this, "osAppearance2Avatar");
}
m_scene = scene;
}
public void RemoveRegion(Scene scene)
{
}
[ScriptInvocation]
public void osCheckDataValue(UUID hostID, UUID scriptID, String notecard, String targetAvatar)
{
SceneObjectPart _host = m_scene.GetSceneObjectPart(hostID);
ScenePresence sp = m_scene.GetScenePresence(UUID.Parse(targetAvatar));
if(sp != null)
{
TaskInventoryItem notecardItem = _host.Inventory.GetInventoryItems().Find(X => X.Name == notecard);
if(notecardItem != null)
{
//GetNotecardData
AssetBase asset = m_scene.AssetService.Get(notecardItem.AssetID.ToString());
if(asset != null)
{
String _appearanceNotecard = new ASCIIEncoding().GetString(asset.Data).ToUpper();
OSDMap appearanceOsd = (OSDMap)OSDParser.DeserializeLLSDXml(_appearanceNotecard);
AvatarAppearance appearance = new AvatarAppearance();
appearance.Unpack(appearanceOsd);
sp.Appearance = appearance;
sp.TriggerScenePresenceUpdated();
}
else
{
m_log.Error("[" + Name + "] ERROR: Cant get asset data for appearance notecard");
throw new Exception("Cant get asset data for appearance notecard");
}
}
else
{
m_log.Error("[" + Name + "] ERROR: Notecard not found in objekt inventory");
throw new Exception("Notecard not found in objekt inventory");
}
}
else
{
m_log.Error("[" + Name + "] ERROR: Target not found in region");
throw new Exception("Target not found in region");
}
}
}
}