コード例 #1
0
        private static void AddTestComponent(CEOIdentifyAddon ai, AddonTileInfo info, int index)
        {
            if (ai == null || info == null)
            {
                return;
            }

            var ac = new AddonComponent(info.ItemID)
            {
                Name = String.Format("#{0} {1}", index, info.Offset)
            };

            if (info.Hue > 0)
            {
                ac.Hue = info.Hue;
            }

            if (info.Amount > 1)
            {
                ac.Stackable = true;
                ac.Amount    = info.Amount;
            }

            if (info.Light > -1)
            {
                ac.Light = (LightType)info.Light;
            }

            ai.AddComponent(ac, info.X, info.Y, info.Z);
        }
コード例 #2
0
ファイル: AddonGenerator.cs プロジェクト: greeduomacro/annox
 public InternalTarget(CEOIdentifyAddon IdentifyAddon)
     : base(12, false, TargetFlags.None)
 {
     m_IdentifyAddon = IdentifyAddon;
     CheckLOS = true;
     AllowGround = true;
     DisallowMultis = true;
     Range = 15;
 }
コード例 #3
0
ファイル: AddonGenerator.cs プロジェクト: greeduomacro/annox
 private static void AddIdentifyAddOnComponent(CEOIdentifyAddon ai, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name, int amount)
 {
     if (ai == null)
         return;
     AddonComponent ac;
     ac = new AddonComponent(item);
     if (name != null && name.Length > 0)
         ac.Name = name;
     if (hue != 0)
         ac.Hue = hue;
     if (amount > 1) // Note: a warning will show on the console regarding a non-stackable item....
     {
         ac.Stackable = true;
         ac.Amount = amount;
     }
     if (lightsource != -1)
         ac.Light = (LightType)lightsource;
     ai.AddComponent(ac, xoffset, yoffset, zoffset);
 }
コード例 #4
0
ファイル: AddonGenerator.cs プロジェクト: greeduomacro/annox
        private static void PickerCallback(Mobile from, Map map, Point3D start, Point3D end, object state)
        {
            object[] args = state as object[];
            int m_SimpleComponents = 0;
            int m_ComplexComponents = 0;
            int m_NamedComponents = 0;
            int m_TotalComponents = 0;

            if (start.X > end.X)
            {
                int x = start.X;
                start.X = end.X;
                end.X = x;
            }

            if (start.Y > end.Y)
            {
                int y = start.Y;
                start.Y = end.Y;
                end.Y = y;
            }

            Rectangle2D bounds = new Rectangle2D(start, end);

            string name = args[0] as string;
            string ns = args[1] as string;

            bool getStatics = (bool)args[2];
            bool getItems = (bool)args[3];
            bool getTiles = (bool)args[4];
            bool includeStaticRange = (bool)args[5];
            bool includeItemRange = (bool)args[6];
            bool includeTileRange = (bool)args[7];
            bool includeZRange = (bool)args[8];
            bool generateTest = (bool)args[17];

            sbyte min = sbyte.MinValue;
            sbyte max = sbyte.MaxValue;

            short minStaticID = 2;
            short maxStaticID = 16384;
            short minItemID = 2;
            short maxItemID = 16384;
            short minTileID = 2;
            short maxTileID = 16384;

            try { min = sbyte.Parse(args[9] as string); }
            catch { }
            try { max = sbyte.Parse(args[10] as string); }
            catch { }
            try { minStaticID = short.Parse(args[11] as string); }
            catch { }
            try { maxStaticID = short.Parse(args[12] as string); }
            catch { }
            try { minItemID = short.Parse(args[13] as string); }
            catch { }
            try { maxItemID = short.Parse(args[14] as string); }
            catch { }
            try { minTileID = short.Parse(args[15] as string); }
            catch { }
            try { maxTileID = short.Parse(args[16] as string); }
            catch { }

            Hashtable tiles = new Hashtable();

            if (getTiles)
            {
                for (int x = start.X; x <= end.X; x++)
                {
                    for (int y = start.Y; y <= end.Y; y++)
                    {
#if RC2
                        List<Server.Tile> list = map.GetTilesAt(new Point2D(x, y), false, false, true);
                        List<Server.Tile> remove = new List<Server.Tile>();
#else
                        ArrayList list = map.GetTilesAt(new Point2D(x, y), false, false, true);
                        ArrayList remove = new ArrayList();
#endif

                        foreach (Tile t in list)
                        {
                            int id = t.ID - 16384;
                            if (id < 2 || id > 16382)
                                remove.Add(t);
                            else if (includeZRange && (t.Z < min || t.Z > max))
                                remove.Add(t);
                            else if (!includeZRange && (t.Z >= min && t.Z <= max))
                                remove.Add(t);
                            else if (includeTileRange && (id < minTileID || id > maxTileID))
                                remove.Add(t);
                            else if (!includeTileRange && (id >= minTileID && id <= maxTileID))
                                remove.Add(t);
                        }

                        foreach (Tile t in remove)
                        {
                            list.Remove(t);
                        }

                        if (list != null && list.Count > 0)
                        {
                            tiles[new Point2D(x, y)] = list;
                        }
                    }
                }
            }

            IPooledEnumerable en = map.GetItemsInBounds(bounds);
            ArrayList target = new ArrayList();
            bool fail = false;

            try
            {
                foreach (object o in en)
                {
                    if (getStatics)
                    {
                        Static s = o as Static;
                        if (s == null)
                        { }
                        else if (s.Deleted)
                        {}
                        else if (includeZRange && (s.Z < min || s.Z > max))
                            continue;
                        else if (!includeZRange && (s.Z >= min && s.Z <= max))
                            continue;
                        else if (includeStaticRange && (s.ItemID < minStaticID || s.ItemID > maxStaticID))
                            continue;
                        else if (!includeStaticRange && (s.ItemID >= minStaticID && s.ItemID <= maxStaticID))
                            continue;
                        else
                        {
                            target.Add(o);
#if DEBUG
                            Console.WriteLine("Static={0}:{1}", s.GetType().ToString(), s.ItemID);
#endif
                            continue;
                        }
                    }
                    if (getItems)
                    {
                        Static s = o as Static;
                        if (s != null) // Don't want a static
                            continue;
                        Item i = o as Item;
                        if (i == null)
                            continue;
                        else if (i.Deleted)
                            continue;
                        else if (i is BaseAddon) // Not a good idea to add a BaseAddOn for obvious reasons
                            continue;
                        else if (i.ItemID < 2 || i.ItemID > 16382) // This is not an Item within the normal artwork.. multi... etc.. Toss it
                            continue;
                        else if (includeZRange && (i.Z < min || i.Z > max))
                            continue;
                        else if (!includeZRange && (i.Z >= min && i.Z <= max))
                            continue;
                        else if (includeItemRange && (i.ItemID < minItemID || i.ItemID > maxItemID))
                            continue;
                        else if (!includeItemRange && (i.ItemID >= minItemID && i.ItemID <= maxItemID))
                            continue;
#if DEBUG
                        Console.WriteLine("item={0}:{1}, {2}-map{3}", i.GetType().ToString(), i.ItemID, i.Deleted, i.Map);
#endif
                        target.Add(o);
                    }
                }
            }
            catch (Exception err)
            {
                Console.WriteLine(err.ToString());
                from.SendMessage(0x40, "The targeted components have been modified. Please retry.");
                fail = true;
            }
            finally
            {
                en.Free();
            }

            if (fail)
                return;

            if (target.Count == 0 && tiles.Keys.Count == 0)
            {
                from.SendMessage(0x40, "No components have been selected.");
                from.SendGump(new InternalGump(from, args));
                return;
            }

            // Get center
            Point3D center = new Point3D();
            center.Z = 127;

            int x1 = bounds.End.X;
            int y1 = bounds.End.Y;
            int x2 = bounds.Start.X;
            int y2 = bounds.Start.Y;

            // Get correct bounds
            foreach (Item item in target)
            {
                if (item.Z < center.Z)
                {
                    center.Z = item.Z;
                }

                x1 = Math.Min(x1, item.X);
                y1 = Math.Min(y1, item.Y);
                x2 = Math.Max(x2, item.X);
                y2 = Math.Max(y2, item.Y);
            }
            CEOIdentifyAddon IdentifyAddon = null;

            if (generateTest)
                IdentifyAddon = new CEOIdentifyAddon("init");

            foreach (Point2D p in tiles.Keys)
            {
#if RC2
                List<Server.Tile> list = tiles[p] as List<Server.Tile>;
#else
                ArrayList list = tiles[p] as ArrayList;
#endif

                if (list == null)
                {
                    Console.WriteLine("The list is null... ");
                    return;
                }

                foreach (Tile t in list)
                {
                    if (t.Z < center.Z)
                    {
                        center.Z = t.Z;
                    }
                }

                x1 = Math.Min(x1, p.X);
                y1 = Math.Min(y1, p.Y);
                x2 = Math.Max(x2, p.X);
                y2 = Math.Max(y2, p.Y);
            }

            center.X = x1 + ((x2 - x1) / 2);
            center.Y = y1 + ((y2 - y1) / 2);

            // Build items
            System.Text.StringBuilder nc = new System.Text.StringBuilder();
            nc.Append("\n");
            System.Text.StringBuilder sl = new System.Text.StringBuilder();
            sl.Append("private static int[,] m_AddOnSimpleComponents = new int[,] {\n\t\t\t  ");
            System.Text.StringBuilder cl = new System.Text.StringBuilder();
            cl.Append("private static int[,] m_AddOnComplexComponents = new int[,] {\n\t\t\t  ");
            System.Text.StringBuilder sc = new System.Text.StringBuilder();
            sc.Append("// ");
            System.Text.StringBuilder cc = new System.Text.StringBuilder();
            cc.Append("// ");

            int simplecount = 0;
            int complexcount = 0;
            // Tiles
            foreach (Point2D p in tiles.Keys)
            {
#if RC2
                List<Server.Tile> list = tiles[p] as List<Server.Tile>;
#else
                ArrayList list = tiles[p] as ArrayList;
#endif
                int xOffset = p.X - center.X;
                int yOffset = p.Y - center.Y;

                foreach (Tile t in list)
                {
                    int zOffset = t.Z - center.Z;
                    int id = t.ID - 16384;
                    m_SimpleComponents++;
                    simplecount++;
                    m_TotalComponents++;
                    sc.AppendFormat("{0}\t ", m_TotalComponents);
                    if (simplecount > 1)
                        sl.Append(", ");
                    sl.Append("{");
                    sl.AppendFormat("{0}, {1}, {2}, {3}", id, xOffset, yOffset, zOffset);
                    sl.Append("}");
                    if (simplecount % 3 == 0)
                    {
                        sl.AppendFormat("{0}\n\t\t\t", sc.ToString());
                        sc.Length = 0;
                        sc.Append("// ");
                    }
                    if (generateTest)
                        AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, 0, -1, string.Format("({0}):{1},{2},{3}", m_TotalComponents, xOffset, yOffset, zOffset), 0);
                }
            }
            // Statics & Items
            foreach (Item item in target)
            {
                if (item.Deleted)
                    continue;
                int xOffset = item.X - center.X;
                int yOffset = item.Y - center.Y;
                int zOffset = item.Z - center.Z;
                int id = item.ItemID;

                if (((item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource) || (item.Hue != 0) || (item.Name != null) || item.Amount > 1) // Use old method
                {
                    if (item.Name != null || item.Amount != 0) // Have to do this one the old method
                    {
                        m_NamedComponents++;
                        m_TotalComponents++;
                        int lightsource = -1;
                        if ((item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource)
                            lightsource = (int)item.Light;
                        nc.AppendFormat("\t\t\tAddComplexComponent( (BaseAddon) this, {0}, {1}, {2}, {3}, {4}, {5}, \"{6}\", {7});// {8}\n", id, xOffset, yOffset, zOffset, item.Hue, lightsource, item.Name, item.Amount, m_TotalComponents);
                        if (generateTest)
                            AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, item.Hue, -1, string.Format("({0},{1}): {2}, {3}, {4}", m_TotalComponents, id, xOffset, yOffset, zOffset), item.Amount);

                    }
                    else //if (item.Hue != 0 || (item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource)
                    {
                        int lightsource = -1;
                        if ((item.ItemData.Flags & TileFlag.LightSource) == TileFlag.LightSource)
                            lightsource = (int)item.Light;
                        m_ComplexComponents++;
                        m_TotalComponents++;
                        cc.AppendFormat("{0}\t", m_TotalComponents);
                        complexcount++;
                        if (complexcount > 1)
                            cl.Append(", ");
                        cl.Append("{");
                        cl.AppendFormat("{0}, {1}, {2}, {3}, {4}, {5} ", id, xOffset, yOffset, zOffset, item.Hue, lightsource);
                        cl.Append("}");
                        if (complexcount % 3 == 0)
                        {
                            cl.AppendFormat("{0}\n\t\t\t", cc.ToString());
                            cc.Length = 0;
                            cc.Append("// ");
                        }
                        if (generateTest)
                            AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, item.Hue, -1, string.Format("({0},{1}): {2}, {3}, {4}", m_TotalComponents, id, xOffset, yOffset, zOffset), 0);
                    }
                }
                else // Add data to static table
                {
                    m_SimpleComponents++;
                    m_TotalComponents++;
                    sc.AppendFormat("{0}\t", m_TotalComponents);
                    simplecount++;
                    if (simplecount > 1)
                        sl.Append(", ");
                    sl.Append("{");
                    sl.AppendFormat("{0}, {1}, {2}, {3}", id, xOffset, yOffset, zOffset);
                    sl.Append("}");
                    if (simplecount % 3 == 0)
                    {
                        sl.AppendFormat("{0}\n\t\t\t", sc.ToString());
                        sc.Length = 0;
                        sc.Append("// ");
                    }
                    if (generateTest)
                        AddIdentifyAddOnComponent(IdentifyAddon, id, xOffset, yOffset, zOffset, item.Hue, -1, string.Format("({0},{1}): {2}, {3}, {4}", m_TotalComponents, id, xOffset, yOffset, zOffset), 0);
                }
            }
            if (sc.Length > 4)
                sl.AppendFormat("{0}\n", sc.ToString());
            if (cc.Length > 4)
                cl.AppendFormat("{0}\n", cc.ToString());
            if (m_SimpleComponents > 0)
                sl.Append("\t\t};\n\n");
            if (m_ComplexComponents > 0)
                cl.Append("\t\t};\n\n");

            string output = m_Template.Replace("{name}", name);
            output = output.Replace("{simplelist}", m_SimpleComponents > 0 ? sl.ToString() : "");
            output = output.Replace("{simplecomponentscode}", m_SimpleComponents > 0 ? m_SimpleCode : "");
            output = output.Replace("{complexlist}", m_ComplexComponents > 0 ? cl.ToString() : "");
            output = output.Replace("{complexcomponentscode}", m_ComplexComponents > 0 ? m_ComplexCode : "");
            output = output.Replace("{namedcomponentscode}", m_NamedComponents > 0 ? nc.ToString() : "");
            output = output.Replace("{complexnamecomponentscode}", (m_ComplexComponents > 0 || m_NamedComponents > 0) ? m_ComplexNameCode : "");

            output = output.Replace("{namespace}", ns);

            StreamWriter writer = null;
            string path = null;

            if (m_CustomOutputDirectory != null)
                path = Path.Combine(m_CustomOutputDirectory, string.Format(@"TheBox\{0}Addon.cs", name));
            else
                path = Path.Combine(Core.BaseDirectory, string.Format(@"TheBox\{0}Addon.cs", name));

            fail = false;

            try
            {
                string folder = Path.GetDirectoryName(path);

                if (!Directory.Exists(folder))
                {
                    Directory.CreateDirectory(folder);
                }

                writer = new StreamWriter(path, false);
                writer.Write(output);
            }
            catch
            {
                from.SendMessage(0x40, "An error occurred when writing the file.");
                fail = true;
            }
            finally
            {
                if (writer != null)
                    writer.Close();
            }

            if (!fail)
            {
                from.SendMessage(0x40, "Script saved to {0}", path);
                from.SendMessage(0x40, "Total components in AddOn: {0}", m_TotalComponents);
                if (generateTest && IdentifyAddon != null)
                {
                    from.SendMessage(0x37, "Now target a land tile to place a your addon.");
                    from.Target = new InternalTarget(IdentifyAddon);
                }
            }
        }
コード例 #5
0
        private static void PickerCallback(Mobile m, Map map, Point3D start, Point3D end, object state)
        {
            var args = state as object[];

            if (args == null)
            {
                return;
            }

            if (start.X > end.X)
            {
                var x = start.X;

                start.X = end.X;
                end.X   = x;
            }

            if (start.Y > end.Y)
            {
                var y = start.Y;

                start.Y = end.Y;
                end.Y   = y;
            }

            var bounds = new Rectangle2D(start, end);

            var name      = args[0] as string;
            var namesplit = name;

            if (name != null)
            {
                namesplit = name.SpaceWords().ToUpperWords();
                name      = namesplit.Replace(" ", String.Empty);
            }

            var ns = args[1] as string;

            var getStatics         = (bool)args[2];
            var getItems           = (bool)args[3];
            var getTiles           = (bool)args[4];
            var includeStaticRange = (bool)args[5];
            var includeItemRange   = (bool)args[6];
            var includeTileRange   = (bool)args[7];
            var includeZRange      = (bool)args[8];
            var generateTest       = (bool)args[17];

            int minZ, maxZ, minStaticID, maxStaticID, minItemID, maxItemID, minTileID, maxTileID;

            if (!Int32.TryParse(args[9] as string, out minZ))
            {
                minZ = Region.MinZ;
            }

            if (!Int32.TryParse(args[10] as string, out maxZ))
            {
                maxZ = Region.MaxZ;
            }

            if (!Int32.TryParse(args[11] as string, out minStaticID))
            {
                minStaticID = 2;
            }

            if (!Int32.TryParse(args[12] as string, out maxStaticID))
            {
                maxStaticID = UInt16.MaxValue;
            }

            if (!Int32.TryParse(args[13] as string, out minItemID))
            {
                minItemID = 2;
            }

            if (!Int32.TryParse(args[14] as string, out maxItemID))
            {
                maxItemID = UInt16.MaxValue;
            }

            if (!Int32.TryParse(args[15] as string, out minTileID))
            {
                minTileID = 2;
            }

            if (!Int32.TryParse(args[16] as string, out maxTileID))
            {
                maxTileID = UInt16.MaxValue;
            }

            var cList = GetComponents(
                bounds,
                map,
                getTiles,
                getStatics,
                getItems,
                includeZRange,
                minZ,
                maxZ,
                includeTileRange,
                minTileID,
                maxTileID,
                includeStaticRange,
                minStaticID,
                maxStaticID,
                includeItemRange,
                minItemID,
                maxItemID);

            if (cList == null || cList.Count == 0)
            {
                m.SendMessage(0x40, "No components have been selected.");
                m.SendGump(new InternalGump(m, args));
                return;
            }

            var list = String.Join(
                "\n\t\t\t",
                cList.Select((s, i) => s + (i < cList.Count - 1 ? "," : String.Empty) + " // " + (i + 1)));

            var fileOut = new StringBuilder(_Template);

            var useref = "using System;";

            if (!ns.StartsWith("Server"))
            {
                useref += "\nusing Server;";
                useref += "\nusing Server.Items;";
            }
            else if (!ns.StartsWith("Server.Items"))
            {
                useref += "\nusing Server.Items;";
            }

            fileOut.Replace("~USING~", useref);
            fileOut.Replace("~NAMESPACE~", ns);
            fileOut.Replace("~NAME~", name);
            fileOut.Replace("~NAMESPLIT~", namesplit);
            fileOut.Replace("~LIST~", list);

            var path = Path.IsPathRooted(OutputDirectory) ? OutputDirectory : Path.Combine(Core.BaseDirectory, OutputDirectory);

            var file = IOUtility.EnsureFile(path + "/" + name + "Addon.cs", true);

            try
            {
                file.AppendText(true, fileOut.ToString());
            }
            catch (Exception ex)
            {
                ex.ToConsole(true, true);

                m.SendMessage(0x40, "An error occurred while writing the Addon file.");
                return;
            }

            m.SendMessage(0x40, "Addon saved to {0}", file);
            m.SendMessage(0x40, "Total components in Addon: {0}", cList.Count);

            if (!generateTest)
            {
                return;
            }

            var ia = new CEOIdentifyAddon();

            for (var i = 0; i < cList.Count; i++)
            {
                AddTestComponent(ia, cList[i], i + 1);
            }

            m.SendMessage(0x37, "Target a location to place the test Addon...");
            var target =
                m.Target =
                    new GenericSelectTarget <IPoint3D>(
                        (u, t) => ia.MoveToWorld(t.ToPoint3D(), u.Map),
                        u => ia.Delete(),
                        -1,
                        true,
                        TargetFlags.None);

            Timer timer = null;

            timer = Timer.DelayCall(
                TimeSpan.FromSeconds(1.0),
                TimeSpan.FromSeconds(1.0),
                () =>
            {
                if (m.Target == target)
                {
                    return;
                }

                if (ia.Map == null || ia.Map == Map.Internal)
                {
                    ia.Delete();
                }

                if (timer != null)
                {
                    timer.Stop();
                }
            });

            timer.Start();
        }
コード例 #6
0
 private static void AddIdentifyAddOnComponent(CEOIdentifyAddon ai, int item, int xoffset, int yoffset, int zoffset, int hue, int lightsource, string name)
 {
     if (ai == null)
         return;
     AddonComponent ac;
     ac = new AddonComponent(item);
     if (name != null)
         ac.Name = name;
     if (hue != 0)
         ac.Hue = hue;
     if (lightsource != -1)
         ac.Light = (LightType)lightsource;
     ai.AddComponent(ac, xoffset, yoffset, zoffset);
 }