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(); 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"); } } } }