///////////////////////////////////////////////////////////////////////// // // www.ultima.smoce.net // Name: Object Factory // ///////////////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.Text; using System.Linq; using Phoenix; using Phoenix.WorldData; using System.Diagnostics; using System.IO; using System.Windows.Forms; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Reflection; using System.Security.Permissions; // made by Leny-m namespace Phoenix.Scripts { public class ObjectFactory { List items = new List(); [Command] public void Scan() { if(File.Exists(getPath("objects"))) { loadObjects("objects"); } Scan(World.Ground); UOItem container = new UOItem(UIManager.TargetObject()); while(container.Serial != 0xFFFFFFFF) { Scan(container); container = new UOItem(UIManager.TargetObject()); UO.Print(container.Serial); } saveObjects("objects"); printObjects("objects_print.txt"); UO.Print("Done"); } private void Scan(ItemsCollection col) { foreach(UOItem item in col) { if(item.Graphic == 0x0E76 || item.Graphic == 0x0E75 || item.Graphic == 0x0E80 || item.Graphic == 0x0E79 || item.Graphic == 0x09B0) // pytlik, batoh, drevena krabice, strong box, pouch { item.Use(); Scan(item); } if(!AlreadyAdded(item)) { UO.ClickObject(item.Serial); UO.Wait(500); items.Add(new ObjectFactoryItem(item.Graphic, item.Color, item.Name)); } } } private void Scan(UOItem container) { ItemsCollection col = container.AllItems; container.Use(); UO.Wait(1000); Scan(col); } private void printObjects(string fileName) { string path = getPath(fileName); using (System.IO.StreamWriter file = new System.IO.StreamWriter(path)) { file.WriteLine("Name Graphic Color"); foreach (ObjectFactoryItem item in items) { file.WriteLine(item.n + " " + item.g + " " + item.c); } } } private void saveObjects(string fileName) { string path = getPath(fileName); using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create, FileAccess.Write))) foreach (ObjectFactoryItem item in items) { writer.Write(item.g); writer.Write(item.c); writer.Write(item.n); } } private void loadObjects(string fileName) { string path = getPath(fileName); items = new List(); using (BinaryReader reader = new BinaryReader(new System.IO.FileStream(path, FileMode.Open, FileAccess.Read),Encoding.ASCII)) { while (reader.PeekChar() != -1) { items.Add(new ObjectFactoryItem(reader.ReadUInt16(),reader.ReadUInt16(),(string)reader.ReadString())); } } } private string getPath(string fileName) { string path = ""; string currentDir = Environment.CurrentDirectory; DirectoryInfo parent = System.IO.Directory.GetParent(currentDir); path = parent+"Phoenix"+fileName; UO.Print("File path:"); UO.Print(path); return path; } private bool AlreadyAdded(UOItem item) { foreach(ObjectFactoryItem ite in items) { if(ite.g == item.Graphic && ite.c == item.Color) { return true; } } return false; } } class ObjectFactoryItem { public Graphic g; public ushort c; public string n; public ObjectFactoryItem(Graphic g, ushort c, string n) { this.g = g; this.c = c; this.n = n; } } }