using OpenMetaverse; using OpenMetaverse.Assets; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; namespace GetRegionTextures { class IDTools { public static void addToList(ref List _list, List _input) { foreach (String _entry in _input) { addToList(ref _list, _entry); } } public static void addToList(ref List _list, List _input) { foreach (TaskInventoryItemElement _entry in _input) { addToList(ref _list, _entry.AssetID.UUID); } } public static void addToList(ref List _list, String _input) { if (_input == "00000000-0000-0000-0000-000000000000") return; if (_input == null) return; if (!_list.Contains(_input)) _list.Add(_input); } public static List getUUIDListFromTexturEntry(String _base64) { List _ausgabe = new List(); try { PrimObject obj = new PrimObject(); byte[] teData = Convert.FromBase64String(_base64); obj.Textures = new Primitive.TextureEntry(teData, 0, teData.Length); foreach (Primitive.TextureEntryFace _face in obj.Textures.FaceTextures) { if (_face != null) { _ausgabe.Add(_face.TextureID.ToString()); } } } catch(Exception error) { Console.WriteLine("Cant decode textur data: " + error.Message); } return _ausgabe; } public static List getUUIDListFromString(String _xml) { AppDomain.CurrentDomain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT", TimeSpan.FromSeconds(10)); List _ausgabe = new List(); String _regex = @"[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12}"; try { Regex _suche = new Regex(_regex); MatchCollection _funde = _suche.Matches(_xml); foreach (Match _f in _funde) { String _value = _f.Value.ToUpper().Trim(); if (_value.Length < 75 && _value.Length > 10) { if (!_ausgabe.Contains(_value)) { _ausgabe.Add(_value); } } } } catch (Exception _e) { Console.WriteLine(_e.ToString()); Thread.Sleep(1000); } return _ausgabe; } public static List getIDListFromSceneObjectGroup(SceneObjectGroup _group) { List _returnList = new List(); if (_group.RootPart.SceneObjectPart.CollisionSound != null) { if (_group.RootPart.SceneObjectPart.CollisionSound.UUID != null) addToList(ref _returnList, _group.RootPart.SceneObjectPart.CollisionSound.UUID); } if (_group.RootPart.SceneObjectPart.SoundID != null) { if (_group.RootPart.SceneObjectPart.SoundID.UUID != null) addToList(ref _returnList, _group.RootPart.SceneObjectPart.SoundID.UUID); } if (_group.RootPart.SceneObjectPart.Shape.SculptTexture != null) { if (_group.RootPart.SceneObjectPart.Shape.SculptTexture.UUID != null) addToList(ref _returnList, _group.RootPart.SceneObjectPart.Shape.SculptTexture.UUID); } if (_group.RootPart.SceneObjectPart.Shape != null) { if (_group.RootPart.SceneObjectPart.Shape.TextureEntry != null) addToList(ref _returnList, getUUIDListFromTexturEntry(_group.RootPart.SceneObjectPart.Shape.TextureEntry)); } if (_group.RootPart.SceneObjectPart.TaskInventory != null) addToList(ref _returnList, _group.RootPart.SceneObjectPart.TaskInventory); if (_group.OtherParts != null) { foreach (PartElement _sope in _group.OtherParts) { if (_sope.SceneObjectPart.CollisionSound != null) { if (_sope.SceneObjectPart.CollisionSound.UUID != null) addToList(ref _returnList, _sope.SceneObjectPart.CollisionSound.UUID); } if (_sope.SceneObjectPart.SoundID != null) { if (_sope.SceneObjectPart.SoundID.UUID != null) addToList(ref _returnList, _sope.SceneObjectPart.SoundID.UUID); } if (_sope.SceneObjectPart.Shape.SculptTexture != null) { if (_sope.SceneObjectPart.Shape.SculptTexture.UUID != null) addToList(ref _returnList, _sope.SceneObjectPart.Shape.SculptTexture.UUID); } if (_sope.SceneObjectPart.Shape != null) { if (_sope.SceneObjectPart.Shape.TextureEntry != null) addToList(ref _returnList, getUUIDListFromTexturEntry(_sope.SceneObjectPart.Shape.TextureEntry)); } if (_sope.SceneObjectPart.TaskInventory != null) addToList(ref _returnList, (_sope.SceneObjectPart.TaskInventory)); } } return _returnList; } } }