add code
parent
95e82ec081
commit
b19562e033
|
@ -0,0 +1,119 @@
|
|||
using Mono.Addins;
|
||||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
[assembly: Addin("TextureFetcher", "0.1")]
|
||||
[assembly: AddinDependency("OpenSim.Region.Framework", OpenSim.VersionInfo.VersionNumber)]
|
||||
namespace OpenSim.Modules.TextureFetcher
|
||||
{
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RegionFullPerm")]
|
||||
class TextureFetcher : INonSharedRegionModule
|
||||
{
|
||||
Scene m_scene = null;
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "TextureFetcher"; }
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
scene.EventManager.OnObjectAddedToScene += AddObject;
|
||||
scene.EventManager.OnSceneObjectLoaded += AddObject;
|
||||
scene.EventManager.OnIncomingSceneObject += AddObject;
|
||||
scene.EventManager.OnSceneObjectPartUpdated += UpdateObject;
|
||||
scene.EventManager.OnSceneObjectPartCopy += CopyObject;
|
||||
}
|
||||
|
||||
private void CopyObject(SceneObjectPart copy, SceneObjectPart original, bool userExposed)
|
||||
{
|
||||
copyTexturesToInventory(copy);
|
||||
}
|
||||
|
||||
private void UpdateObject(SceneObjectPart sop, bool full)
|
||||
{
|
||||
copyTexturesToInventory(sop);
|
||||
}
|
||||
|
||||
private void AddObject(SceneObjectGroup obj)
|
||||
{
|
||||
foreach(SceneObjectPart _part in obj.Parts)
|
||||
copyTexturesToInventory(_part);
|
||||
}
|
||||
|
||||
private void copyTexturesToInventory(SceneObjectPart part)
|
||||
{
|
||||
if (part.ParentGroup.IsAttachment)
|
||||
return;
|
||||
|
||||
List<UUID> allTextures = new List<UUID>();
|
||||
List<TaskInventoryItem> inventoryItems = new List<TaskInventoryItem>();
|
||||
|
||||
//Get all Textures from the scene object
|
||||
Primitive.TextureEntry textures = part.Shape.Textures;
|
||||
int allSides = part.GetNumberOfSides();
|
||||
for (uint i = 0; i < allSides; i++)
|
||||
if (textures.FaceTextures[i] != null)
|
||||
allTextures.Add(textures.FaceTextures[i].TextureID);
|
||||
|
||||
//Convert texture uuid list to inventar items.
|
||||
foreach (UUID texture in allTextures)
|
||||
{
|
||||
TaskInventoryItem item = new TaskInventoryItem();
|
||||
item.AssetID = texture;
|
||||
item.OwnerID = part.OwnerID;
|
||||
item.CurrentPermissions = 581639;
|
||||
item.Name = "tf-" + texture.ToString();
|
||||
item.Description = "This item was generated by the texture fetcher module.";
|
||||
item.OwnerID = part.OwnerID;
|
||||
item.CreatorID = part.OwnerID;
|
||||
item.LastOwnerID = part.OwnerID;
|
||||
inventoryItems.Add(item);
|
||||
}
|
||||
|
||||
//Check if the item is allready in the inventory and then add it.
|
||||
List<UUID> inventarContend = part.Inventory.GetInventoryList();
|
||||
bool updateNeeded = false;
|
||||
foreach (TaskInventoryItem item in inventoryItems)
|
||||
{
|
||||
if(!inventarContend.Contains(item.AssetID))
|
||||
{
|
||||
updateNeeded = true;
|
||||
part.Inventory.AddInventoryItem(item, false);
|
||||
}
|
||||
}
|
||||
|
||||
if(updateNeeded == true)
|
||||
part.SendFullUpdateToAllClients();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue