Пример #1
0
 public override void OnCommand(BotShell bot, CommandArgs e)
 {
     if (e.Items.Length < 1)
     {
         bot.SendReply(e, "Correct Usage: bio [bio material]");
         return;
     }
     foreach (AoItem match in e.Items)
     {
         if (this._clumps.ContainsKey(match.HighID))
         {
             string name = "QL " + match.QL + " " + this._clumps[match.HighID].Clump;
             if (this._clumps[match.HighID].Weapons.Count > 0)
             {
                 double hql = Math.Floor((match.QL * 1.1));
                 if (hql > 300)
                 {
                     hql = 300;
                 }
                 RichTextWindow window = new RichTextWindow(bot);
                 window.AppendTitle("Kyr'Ozch Weapons");
                 window.AppendHighlight("The following weapons can be created using your " + name + ":");
                 window.AppendLineBreak();
                 foreach (VhBioWeapon weapon in this._clumps[match.HighID].Weapons)
                 {
                     if (weapon.HighQL >= hql && weapon.LowQL <= hql)
                     {
                         window.AppendNormal("- ");
                         window.AppendItem("Kyr'Ozch " + weapon.Name + " - Type " + this._clumps[match.HighID].Type, weapon.LowID, weapon.HighID, Convert.ToInt32(hql));
                         window.AppendLineBreak();
                     }
                 }
                 bot.SendReply(e, name + " (" + this._clumps[match.HighID].Description + ")" + " »» ", window);
             }
             else
             {
                 bot.SendReply(e, name + " (" + this._clumps[match.HighID].Description + ")");
             }
         }
         else if (match.Name == "Solid Clump of Kyr'Ozch Bio-Material")
         {
             bot.SendReply(e, "Unable to identify your " + HTML.CreateColorString(bot.ColorHeaderHex, match.Name));
         }
         else
         {
             bot.SendReply(e, HTML.CreateColorString(bot.ColorHeaderHex, match.Name) + " doesn't look like a " + HTML.CreateColorString(bot.ColorHeaderHex, "Solid Clump of Kyr'Ozch Bio-Material"));
         }
     }
 }
Пример #2
0
        public override void OnCommand(BotShell bot, CommandArgs e)
        {
            switch (e.Command)
            {
            case "umob":
                if (e.Args.Length < 1)
                {
                    bot.SendReply(e, "Correct Usage: umob [search string]");
                    return;
                }
                string search = string.Empty;
                search = e.Words[0];
                search = search.ToLower();

                string url = string.Format(this.UrlTemplate, this.Server, HttpUtility.UrlEncode(search));
                string xml = HTML.GetHtml(url, 20000);
                if (xml == null || xml == string.Empty)
                {
                    bot.SendReply(e, "Unable to query the unique mobs database");
                    return;
                }
                // if (xml.ToLower().StartsWith("<error>"))
                // {
                //     if (xml.Length > 13)
                //     {
                //         bot.SendReply(e, "Error: " + xml.Substring(7, xml.Length - 13));
                //         return;
                //     }
                //     else
                //     {
                //         bot.SendReply(e, "An unknown error has occured!");
                //         return;
                //     }
                // }

                string       result = string.Empty;
                MemoryStream stream = null;
                try
                {
                    stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
                    XmlSerializer  serializer     = new XmlSerializer(typeof(UniquesResults));
                    UniquesResults search_results = (UniquesResults)serializer.Deserialize(stream);
                    stream.Close();
                    if (search_results.Mobs == null || search_results.Mobs.Length == 0)
                    {
                        result = "No mobs were found";
                    }
                    else
                    {
                        RichTextWindow window = new RichTextWindow(bot);
                        if (search_results.Mobs.Length > this.NonPageSize)
                        {
                            window.AppendTitle("Unique Mobs Database");
                            window.AppendHighlight("Server: ");
                            window.AppendNormal(this.Server);
                            window.AppendLineBreak();
                            window.AppendHighlight("Version: ");
                            window.AppendNormal(search_results.Version);
                            window.AppendLineBreak();
                            window.AppendHighlight("Search String: ");
                            window.AppendNormal(search);
                            window.AppendLineBreak();
                            window.AppendHighlight("Results: ");
                            window.AppendNormal(search_results.Mobs.Length.ToString() + " / " + search_results.Max);
                            window.AppendLineBreak(2);
                            window.AppendHeader("Search Results");
                        }
                        else
                        {
                            window.AppendLineBreak();
                        }
                        foreach (UniqueMob mob in search_results.Mobs)
                        {
                            if (search_results.Mobs.Length <= this.NonPageSize)
                            {
                                window.AppendString("    ");
                            }
                            window.AppendHighlight(mob.name + " ");
                            window.AppendNormalStart();
                            window.AppendLineBreak();
                            window.AppendString("    Level: " + mob.level);
                            window.AppendLineBreak();
                            window.AppendString("    Location: " + mob.location + " (" + mob.coords + ")");
                            window.AppendLineBreak();
                            window.AppendString("    Drops: ");
                            window.AppendLineBreak();
                            foreach (UItemsResults_Item item in mob.Items)
                            {
                                window.AppendHighlight(item.Name + " ");
                                window.AppendNormalStart();
                                window.AppendString("[");
                                window.AppendItem("QL " + item._ql, item.LowID, item.HighID, item.QL);
                                window.AppendString("] (" + item._droprate + "%)");
                                window.AppendColorEnd();
                                window.AppendLineBreak();
                            }
                            window.AppendLineBreak(2);
                            //window.AppendLineBreak();
                        }
                        if (search_results.Mobs.Length > this.NonPageSize)
                        {
                            bot.SendReply(e, HTML.CreateColorString(bot.ColorHeaderHex, search_results.Mobs.Length.ToString()) + " Results »» ", window);
                        }
                        else
                        {
                            bot.SendReply(e, HTML.CreateColorString(bot.ColorHeaderHex, search_results.Mobs.Length.ToString()) + " Results »»" + window.Text.TrimEnd('\n'));
                        }
                        return;
                    }
                }
                catch
                {
                    result = "Unable to query the unique mobs database";
                }
                finally
                {
                    if (stream != null)
                    {
                        stream.Close();
                    }
                }
                bot.SendReply(e, result);
                break;
            }
        }
Пример #3
0
        public override void OnCommand(BotShell bot, CommandArgs e)
        {
            switch (e.Command)
            {
            case "items":
                if (e.Args.Length < 1)
                {
                    bot.SendReply(e, "Correct Usage: items [search string]");
                    return;
                }
                int ql = 0;
                try
                {
                    ql = Convert.ToInt32(e.Args[0]);
                    if (ql <= 0 || ql >= 1000)
                    {
                        bot.SendReply(e, "Quality level has to be between 0 and 999");
                        return;
                    }
                }
                catch { }
                if (ql != 0 && e.Words.Length == 1)
                {
                    bot.SendReply(e, "Correct Usage: items [quality level] [search string]");
                    return;
                }
                string search = string.Empty;
                if (ql != 0)
                {
                    search = e.Words[1];
                }
                else
                {
                    search = e.Words[0];
                }
                search = search.ToLower();

                string url = string.Format(this.UrlTemplate, this.Server, HttpUtility.UrlEncode(search), ql, Max);
                string xml = HTML.GetHtml(url, 60000);
                if (xml == null || xml == string.Empty)
                {
                    bot.SendReply(e, "Unable to query the central items database");
                    return;
                }
                if (xml.ToLower().StartsWith("<error>"))
                {
                    if (xml.Length > 13)
                    {
                        bot.SendReply(e, "Error: " + xml.Substring(7, xml.Length - 13));
                        return;
                    }
                    else
                    {
                        bot.SendReply(e, "An unknown error has occured!");
                        return;
                    }
                }

                string       result = string.Empty;
                MemoryStream stream = null;
                try
                {
                    stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
                    XmlSerializer serializer = new XmlSerializer(typeof(ItemsResults));
                    ItemsResults  items      = (ItemsResults)serializer.Deserialize(stream);
                    stream.Close();
                    if (items.Items == null || items.Items.Length == 0)
                    {
                        result = "No items were found";
                    }
                    else
                    {
                        RichTextWindow window = new RichTextWindow(bot);
                        if (items.Items.Length > this.NonPageSize)
                        {
                            window.AppendTitle("Central Items Database");
                            window.AppendHighlight("Server: ");
                            window.AppendNormal(this.Server);
                            window.AppendLineBreak();
                            window.AppendHighlight("Version: ");
                            window.AppendNormal(items.Version);
                            window.AppendLineBreak();
                            window.AppendHighlight("Search String: ");
                            window.AppendNormal(search);
                            window.AppendLineBreak();
                            window.AppendHighlight("Results: ");
                            window.AppendNormal(items.Items.Length.ToString() + " / " + items.Max);
                            window.AppendLineBreak(2);
                            window.AppendHeader("Search Results");
                        }
                        else
                        {
                            window.AppendLineBreak();
                        }
                        foreach (ItemsResults_Item item in items.Items)
                        {
                            if (items.Items.Length <= this.NonPageSize)
                            {
                                window.AppendString("    ");
                            }
                            window.AppendHighlight(item.Name + " ");
                            window.AppendNormalStart();
                            window.AppendString("[");
                            window.AppendItem("QL " + item.LowQL, item.LowID, item.HighID, item.LowQL);
                            window.AppendString("] ");
                            if (ql != 0 && ql > item.LowQL && ql < item.HighQL)
                            {
                                window.AppendString("[");
                                window.AppendItem("QL " + ql, item.LowID, item.HighID, ql);
                                window.AppendString("] ");
                            }
                            if (item.HighQL != item.LowQL)
                            {
                                window.AppendString("[");
                                window.AppendItem("QL " + item.HighQL, item.LowID, item.HighID, item.HighQL);
                                window.AppendString("] ");
                            }
                            window.AppendColorEnd();
                            window.AppendLineBreak();
                            if (item.IconID > 0 && items.Items.Length > this.NonPageSize)
                            {
                                window.AppendIcon(item.IconID);
                                window.AppendLineBreak();
                            }
                        }
                        if (items.Items.Length > this.NonPageSize)
                        {
                            bot.SendReply(e, HTML.CreateColorString(bot.ColorHeaderHex, items.Items.Length.ToString()) + " Results »» ", window);
                        }
                        else
                        {
                            bot.SendReply(e, HTML.CreateColorString(bot.ColorHeaderHex, items.Items.Length.ToString()) + " Results »»" + window.Text.TrimEnd('\n'));
                        }
                        return;
                    }
                }
                catch
                {
                    result = "Unable to query the central items database";
                }
                finally
                {
                    if (stream != null)
                    {
                        stream.Close();
                    }
                }
                bot.SendReply(e, result);
                break;
            }
        }
Пример #4
0
        public override void OnCommand(BotShell bot, CommandArgs e)
        {
            if (e.Args.Length < 1)
            {
                bot.SendReply(e, "Correct Usage: aigen [ankari/ilari/rimah/jaax/xoch/cha]");
                return;
            }

            string msg        = String.Empty;
            string botName    = String.Empty;
            string bioName1   = String.Empty;
            string bioName2   = String.Empty;
            string genName    = String.Empty;
            string botInfo    = String.Empty;
            int    bioId1     = 0;
            int    bioId2     = 0;
            int    botImageId = 100337;
            int    bioImageId = 255705;
            int    botId      = 0;

            switch (e.Args[0])
            {
            case "ankari":
                genName  = "General - Ankari'Khaz";
                botId    = 247145;
                botName  = "Arithmetic Lead Viralbots";
                bioId1   = 247684;
                bioName1 = "Kyr'Ozch Bio-Material - Type 1";
                bioId2   = 247685;
                bioName2 = "Kyr'Ozch Bio-Material - Type 2";
                msg      = "Low Evade/Dodge,low AR, casting Viral/Virral nukes.";
                botInfo  = "(Nanoskill / Tradeskill)";
                break;

            case "ilari":
                genName  = "General - Ilari'Khaz";
                botId    = 247146;
                botName  = "Spiritual Lead Viralbots";
                bioId1   = 247681;
                bioName1 = "Kyr'Ozch Bio-Material - Type 992";
                bioId2   = 247679;
                bioName2 = "Kyr'Ozch Bio-Material - Type 880";
                msg      = "Low Evade/Dodge.";
                botInfo  = "(Nanocost / Nanopool / Max Nano)";
                break;

            case "rimah":
                genName  = "General - Rimah'Khaz";
                botId    = 247143;
                botName  = "Observant Lead Viralbots";
                bioId1   = 247675;
                bioName1 = "Kyr'Ozch Bio-Material - Type 112";
                bioId2   = 247678;
                bioName2 = "Kyr'Ozch Bio-Material - Type 240";
                msg      = "Low Evade/Dodge.";
                botInfo  = "(Init / Evades)";
                break;

            case "jaax":
                genName  = "General - Jaax'Khaz";
                botId    = 247139;
                botName  = "Strong Lead Viralbots";
                bioId1   = 247694;
                bioName1 = "Kyr'Ozch Bio-Material - Type 3";
                bioId2   = 247688;
                bioName2 = "Kyr'Ozch Bio-Material - Type 4";
                msg      = "High Evade, Low Dodge.";
                botInfo  = "(Melee / Spec Melee / Add All Def / Add Damage)";
                break;

            case "xoch":
                genName  = "General - Xoch'Khaz";
                botId    = 247137;
                botName  = "Enduring Lead Viralbots";
                bioId1   = 247690;
                bioName1 = "Kyr'Ozch Bio-Material - Type 5";
                bioId2   = 247692;
                bioName2 = "Kyr'Ozch Bio-Material - Type 12";
                msg      = "High Evade/Dodge, casting Ilari Biorejuvenation heals.";
                botInfo  = "(Max Health / Body Dev)";
                break;

            case "cha":
                genName  = "General - Cha'Khaz";
                botId    = 247141;
                botName  = "Supple Lead Viralbots";
                bioId1   = 247696;
                bioName1 = "Kyr'Ozch Bio-Material - Type 13";
                bioId2   = 247674;
                bioName2 = "Kyr'Ozch Bio-Material - Type 76";
                msg      = "High Evade/NR, Low Dodge.";
                botInfo  = "(Ranged / Spec Ranged / Add All Off)";
                break;

            default:
                bot.SendReply(e, "Unknown Alien General. Available options are: " + HTML.CreateColorString(bot.ColorHeaderHex, "ankari, ilari, rimah, jaax, xoch, cha"));
                return;
            }


            RichTextWindow window = new RichTextWindow(bot);

            window.AppendTitle(genName);

            window.AppendHighlight("Type: ");
            window.AppendNormal(msg);
            window.AppendLineBreak(2);

            window.AppendHeader("Drops");
            window.AppendHighlight(botName + " ");
            window.AppendNormalStart();
            window.AppendString(botInfo + " [");
            window.AppendItem("QL " + 300, botId, botId, 300);
            window.AppendString("] ");
            window.AppendColorEnd();
            window.AppendLineBreak();
            window.AppendIcon(botImageId);
            window.AppendLineBreak(2);

            window.AppendHighlight(bioName1 + " ");
            window.AppendNormalStart();
            window.AppendString("[");
            window.AppendItem("QL " + 300, bioId1, bioId1, 300);
            window.AppendString("] ");
            window.AppendColorEnd();
            window.AppendLineBreak();
            window.AppendIcon(bioImageId);
            window.AppendLineBreak();

            window.AppendLineBreak();
            window.AppendHighlight(bioName2 + " ");
            window.AppendNormalStart();
            window.AppendString("[");
            window.AppendItem("QL " + 300, bioId2, bioId2, 300);
            window.AppendString("] ");
            window.AppendColorEnd();
            window.AppendLineBreak();
            window.AppendIcon(bioImageId);
            window.AppendLineBreak();

            bot.SendReply(e, genName + " »» ", window);
        }
Пример #5
0
        private void OnLootCommand(BotShell bot, CommandArgs e)
        {
            if (e.Args.Length > 0)
            {
                string monster = e.Words[0].ToLower();
                monster = HTML.UnescapeString(monster);
                int            results = 0;
                RichTextWindow window  = new RichTextWindow(bot);
                window.AppendTitle("Loot results for '" + monster + "'");
                lock (this._database.Connection)
                {
                    using (IDbCommand command = this._database.Connection.CreateCommand())
                    {
                        command.CommandText = "SELECT id, name, lowid, highid, ql, icon FROM loot WHERE monster LIKE '%" + Config.EscapeString(monster).Replace(" ", "%") + "%' AND visible = 'true' ORDER BY name ASC";
                        //SELECT count(points), min(points), max(points), avg(points) FROM loot_history WHERE item = 244718 AND points > 0
                        IDataReader reader = command.ExecuteReader();
                        while (reader.Read())
                        {
                            results++;
                            int icon = reader.GetInt32(5);
                            if (icon > 0)
                            {
                                window.AppendIcon(icon);
                                window.AppendLineBreak();
                            }
                            window.AppendItem(reader.GetString(1), reader.GetInt32(2), reader.GetInt32(3), reader.GetInt32(4));
                            window.AppendNormal(" [");
                            window.AppendBotCommand("Start Auction", "auction start item:" + reader.GetInt32(2) + ":" + reader.GetInt32(3) + ":" + reader.GetInt32(4) + " " + reader.GetString(1));
                            window.AppendNormal("]");
                            window.AppendLineBreak(2);
                        }
                        reader.Close();
                    }
                }
                if (results == 0)
                {
                    bot.SendReply(e, "No loot results for '" + monster + "'");
                }
                else
                {
                    bot.SendReply(e, "Loot results for '" + monster + "' »» ", window);
                }
                return;
            }
            RichTextWindow monsters = new RichTextWindow(bot);

            monsters.AppendTitle("Loot Information");
            lock (this._database.Connection)
            {
                using (IDbCommand command = this._database.Connection.CreateCommand())
                {
                    command.CommandText = "SELECT monster, count(*) FROM loot WHERE visible = 'true' GROUP BY monster ORDER BY monster ASC";
                    IDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        monsters.AppendHighlight(reader.GetString(0));
                        monsters.AppendNormal(" (" + reader.GetInt32(1) + " items) [");
                        monsters.AppendBotCommand("View", "loot " + reader.GetString(0));
                        monsters.AppendNormal("]");
                        monsters.AppendLineBreak();
                    }
                    reader.Close();
                }
            }
            bot.SendReply(e, "Loot Information »» ", monsters);
        }
Пример #6
0
        public void OnSymbCommand(BotShell bot, CommandArgs e)
        {
            if (e.Args.Length < 2)
            {
                bot.SendReply(e, "Correct Usage: symb [unit] [slot]");
                return;
            }
            else
            {
                string unit = e.Args[0].ToLower();
                string slot = e.Args[1].ToLower();
                if (e.Args.Length == 3)
                {
                    slot = e.Args[1].ToLower() + " " + e.Args[2].ToLower();
                }
                switch (slot)
                {
                case "right arm":
                    slot = "rarm";
                    break;

                case "right-arm":
                    slot = "rarm";
                    break;

                case "right wrist":
                    slot = "rwrist";
                    break;

                case "right-wrist":
                    slot = "rwrist";
                    break;

                case "right hand":
                    slot = "rhand";
                    break;

                case "right-hand":
                    slot = "rhand";
                    break;

                case "left arm":
                    slot = "larm";
                    break;

                case "left-arm":
                    slot = "larm";
                    break;

                case "left wrist":
                    slot = "lwrist";
                    break;

                case "left-wrist":
                    slot = "lwrist";
                    break;

                case "left hand":
                    slot = "lhand";
                    break;

                case "left-hand":
                    slot = "lhand";
                    break;

                case "brain":
                    slot = "head";
                    break;

                case "ocular":
                    slot = "eye";
                    break;
                }
                int            matches = 0;
                RichTextWindow window  = new RichTextWindow(bot);
                window.AppendTitle("Symbiant Results");
                foreach (VhPocketBoss_Symbs_Entry Entry in this.GetSymbs().Entries)
                {
                    if ((Entry.Unit.IndexOf(unit, 0) >= 0) && (Entry.Slot.IndexOf(slot, 0) >= 0))
                    {
                        matches++;
                        window.AppendItem(Entry.SymbName, Entry.SymbID, Entry.SymbID, Entry.QL);
                        window.AppendLineBreak();
                        window.AppendNormal("Dropped by: ");
                        window.AppendBotCommand(Entry.PB, "pb " + Entry.PB);
                        window.AppendLineBreak(2);
                    }
                }
                if (matches > 0)
                {
                    bot.SendReply(e, "Found " + HTML.CreateColorString(bot.ColorHeaderHex, matches.ToString()) + " Symbiants »» ", window);
                    return;
                }
                else
                {
                    bot.SendReply(e, "Could not find any Pocketbosses for " + HTML.CreateColorString(bot.ColorHeaderHex, unit) + " " + HTML.CreateColorString(bot.ColorHeaderHex, slot) + ".");
                }
            }
        }
Пример #7
0
        public void OnPBCommand(BotShell bot, CommandArgs e)
        {
            if (e.Args.Length < 1)
            {
                bot.SendReply(e, "Correct Usage: pb [pb]");
                return;
            }
            else
            {
                string pb = e.Args[0];
                if (e.Args.Length == 2)
                {
                    pb = e.Args[0] + " " + e.Args[1];
                }
                if (e.Args.Length == 3)
                {
                    pb = e.Args[0] + " " + e.Args[1] + " " + e.Args[2];
                }
                if (e.Args.Length == 4)
                {
                    pb = e.Args[0] + " " + e.Args[1] + " " + e.Args[2] + " " + e.Args[3];
                }
                pb = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(pb);
                pb = pb.Replace("Of", "of");
                pb = pb.Replace("Xark The", "Xark the");
                foreach (VhPocketBoss_Symbs_Entry Entry in this.GetSymbs().Entries)
                {
                    if (Entry.PB.IndexOf(pb, 0) >= 0)
                    {
                        RichTextWindow window = new RichTextWindow(bot);
                        window.AppendTitle("Remains of " + Entry.PB);
                        window.AppendHighlight("Location: ");
                        window.AppendNormal(Entry.Loc);
                        window.AppendLineBreak();
                        window.AppendHighlight("Found On: ");
                        window.AppendNormal(Entry.Mob);
                        window.AppendLineBreak();
                        window.AppendHighlight("Mob Level: ");
                        window.AppendNormal(Entry.MobLevel);
                        window.AppendLineBreak();
                        window.AppendHighlight("General Location: ");
                        window.AppendNormal(Entry.GenLoc);
                        window.AppendLineBreak(2);
                        window.AppendHeader("Results");

                        foreach (VhPocketBoss_Symbs_Entry subEntry in this.GetSymbs().Entries)
                        {
                            if (Entry.PB == subEntry.PB)
                            {
                                window.AppendItem(subEntry.SymbName, subEntry.SymbID, subEntry.SymbID, subEntry.QL);
                                window.AppendLineBreak();
                            }
                        }

                        bot.SendReply(e, "Remains of " + HTML.CreateColorString(bot.ColorHeaderHex, Entry.PB) + " »» ", window);
                        return;
                    }
                }
                bot.SendReply(e, "Could not find the Pocketboss \"" + HTML.CreateColorString(bot.ColorHeaderHex, pb) + "\"");
                return;
            }
        }
Пример #8
0
        public override void OnCommand(BotShell bot, CommandArgs e)
        {
            int ql_chk = -1;

            if (e.Args.Length < 1 || e.Args.Length > 2)
            {
                bot.SendReply(e, "Correct Usage: aiarmor [[ql]] [armor type]");
                return;
            }
            else if (e.Args.Length == 1)
            {
                ql        = 300;
                armortype = e.Args[0].ToLower();
            }
            else if (!int.TryParse(e.Args[0], out ql_chk) || ql_chk < 1 || ql_chk > 300)
            {
                bot.SendReply(e, "Correct Usage: aiarmor [[ql]] [armor type]");
                return;
            }
            else
            {
                double num;
                bool   isNum = double.TryParse(e.Args[0], out num);
                if (isNum)
                {
                    ql = Convert.ToInt32(e.Args[0]);
                }
                else
                {
                    bot.SendReply(e, "Correct Usage: aiarmor [[ql]] [armor type]");
                    return;
                }
                armortype = e.Args[1].ToLower();
            }
            bool realAibot = false;

            foreach (string test in allowedArgs)
            {
                if (armortype.Equals(test))
                {
                    realAibot = true;
                }
            }
            if (!realAibot)
            {
                bot.SendReply(e, "Correct Usage: aiarmor [[ql]] [armor type]");
                return;
            }

            src_ql = (int)Math.Ceiling(ql * 0.8);
            // Ai Armor
            AoItem arithmetic = new AoItem("Arithmetic", 246559, 246560, 300, "256314");
            AoItem enduring   = new AoItem("Enduring", 246579, 246580, 300, "256344");
            AoItem observant  = new AoItem("Observant", 246591, 246592, 300, "256338");
            AoItem spiritual  = new AoItem("Spiritual", 246599, 246600, 300, "256332");
            AoItem strong     = new AoItem("Strong", 246615, 246616, 300, "256362");
            AoItem supple     = new AoItem("Supple", 246621, 246622, 300, "256296");

            if (armortype.Length == 2)
            {
                // Combined Ai Armor
                AoItem cc = new AoItem("Combined Commando's", 246659, 246659, ql, "256308");
                AoItem cm = new AoItem("Combined Mercenary's", 246637, 246638, ql, "256356");
                AoItem co = new AoItem("Combined Officer's", 246671, 246672, ql, "256320");
                AoItem cp = new AoItem("Combined Paramedic's", 246647, 246648, ql, "256350");
                AoItem cs = new AoItem("Combined Scout's", 246683, 246684, ql, "256326");
                AoItem ss = new AoItem("Combined Sharpshooter's", 246695, 246696, ql, "256302");
                switch (armortype)
                {
                case "cc":
                    result = cc;
                    source = strong;
                    target = supple;
                    break;

                case "cm":
                    result = cm;
                    source = strong;
                    target = enduring;
                    break;

                case "co":
                    result = co;
                    source = spiritual;
                    target = arithmetic;
                    break;

                case "cp":
                    result = cp;
                    source = spiritual;
                    target = enduring;
                    break;

                case "cs":
                    result = cs;
                    source = observant;
                    target = arithmetic;
                    break;

                case "ss":
                    result = ss;
                    source = observant;
                    target = supple;
                    break;

                default:
                    return;
                }

                RichTextWindow window = new RichTextWindow(bot);
                window.AppendTitle("Building process for quality " + ql + " " + result.Name);
                window.AppendLineBreak();
                window.AppendHighlight("Result:\n");
                window.AppendItemStart(result.LowID, result.HighID, ql);
                window.AppendIcon(Convert.ToInt32(result.Raw));
                window.AppendLineBreak();
                window.AppendString(result.Name);
                window.AppendItemEnd();
                window.AppendLineBreak(2);
                window.AppendHighlight("Source:\n");
                window.AppendItemStart(source.LowID, source.HighID, src_ql);
                window.AppendIcon(Convert.ToInt32(source.Raw));
                window.AppendLineBreak();
                window.AppendString(source.Name);
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendCommand("Tradeskill process for this item", "/tell " + bot.Character + " aiarmor " + src_ql + " " + source.Name);
                window.AppendLineBreak(2);
                window.AppendHighlight("Target:\n");
                window.AppendItemStart(target.LowID, target.HighID, ql);
                window.AppendIcon(Convert.ToInt32(target.Raw));
                window.AppendLineBreak();
                window.AppendString(target.Name);
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendCommand("Tradeskill process for this item", "/tell " + bot.Character + " aiarmor " + ql + " " + target.Name);

                bot.SendReply(e, result.Name + " »» ", window);
            }
            else
            {
                RichTextWindow window = new RichTextWindow(bot);
                window.AppendTitle("Building process for ql" + ql + " " + armortype);
                window.AppendNormal("You need the following items to build " + armortype + " Armor:\n");
                window.AppendNormal("- Kyr'Ozch Viralbots\n");
                window.AppendNormal("- Kyr'Ozch Atomic Re-Structulazing Tool\n");
                window.AppendNormal("- Solid Clump of Kyr'Ozch Biomaterial\n");
                window.AppendNormal("- Arithmetic / Strong / Enduring / Spiritual / Observant / Supple Viralbots\n\n");
                // Step 1
                window.AppendHighlight("Step 1:\n");
                window.AppendItemStart(247113, 247114, src_ql);
                window.AppendIcon(100330);
                window.AppendLineBreak();
                window.AppendNormal("Kyr'Ozch Viralbots");
                window.AppendItemEnd();
                window.AppendNormal(" (Drops off Alien City Generals)\n\t\t\t+\n");
                window.AppendItemStart(247099, 247099, 100);
                window.AppendIcon(247098);
                window.AppendLineBreak();
                window.AppendNormal("Kyr'Ozch Atomic Re-Structuralizing Tool");
                window.AppendItemEnd();
                window.AppendNormal(" (Drops off every Alien)\n\t\t\t=\n");
                window.AppendItemStart(247118, 247119, src_ql);
                window.AppendIcon(100331);
                window.AppendLineBreak();
                window.AppendNormal("Memory-Wiped Kyr'Ozch Viralbots");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendHighlight("Required Skills:\n");
                window.AppendNormal("- " + (ql * 4.5) + " Computer Literacy\n");
                window.AppendNormal("- " + (ql * 4.5) + " Nano Programming\n\n");
                // Step 2
                window.AppendHighlight("Step 2:\n");
                window.AppendItemStart(161699, 161699, 1);
                window.AppendIcon(99279);
                window.AppendLineBreak();
                window.AppendNormal("Nano Programming Interface");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t+\n");
                window.AppendItemStart(247118, 247119, src_ql);
                window.AppendIcon(100331);
                window.AppendLineBreak();
                window.AppendNormal("Memory-Wiped Kyr'Ozch Viralbots");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t=\n");
                window.AppendItemStart(247120, 247121, src_ql);
                window.AppendIcon(100334);
                window.AppendLineBreak();
                window.AppendNormal("Formatted Kyr'Ozch Viralbots");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendHighlight("Required Skills:\n");
                window.AppendNormal("- " + (ql * 6) + " Nano Programming\n\n");
                // Step 3
                window.AppendHighlight("Step 3:\n");
                window.AppendItemStart(247100, 247100, 100);
                window.AppendIcon(247097);
                window.AppendLineBreak();
                window.AppendNormal("Kyr'Ozch Structural Analyzer");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t+\n");
                window.AppendItemStart(247102, 247103, ql);
                window.AppendIcon(247101);
                window.AppendLineBreak();
                window.AppendNormal("ql" + ql + " Solid Clump of Kyr'Ozch Biomaterial");
                window.AppendItemEnd();
                window.AppendNormal(" (Drops off every Alien)\n\t\t\t=\n");
                window.AppendItemStart(247108, 247109, ql);
                window.AppendIcon(255705);
                window.AppendLineBreak();
                window.AppendNormal("ql" + ql + " Mutated Kyr'Ozch Biomaterial");
                window.AppendItemEnd();
                window.AppendNormal(" or\n");
                window.AppendItemStart(247106, 247107, ql);
                window.AppendIcon(255705);
                window.AppendLineBreak();
                window.AppendNormal("ql" + ql + " Pristine Kyr'Ozch Biomaterial");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendHighlight("Required Skills:\n");
                window.AppendNormal("- " + (ql * 4.5) + " Chemistry (for Pristine)\n");
                window.AppendNormal("- " + (ql * 7) + " Chemistry (for Mutated)\n\n");
                //Step 4
                window.AppendHighlight("Step 4:\n");
                window.AppendItemStart(247108, 247109, ql);
                window.AppendIcon(255705);
                window.AppendLineBreak();
                window.AppendNormal("ql" + ql + " Mutated Kyr'Ozch Biomaterial");
                window.AppendItemEnd();
                window.AppendNormal(" or\n");
                window.AppendItemStart(247106, 247107, ql);
                window.AppendIcon(255705);
                window.AppendLineBreak();
                window.AppendNormal("ql" + ql + " Pristine Kyr'Ozch Biomaterial");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t+\n");
                window.AppendItemStart(247110, 247110, 100);
                window.AppendIcon(255705);
                window.AppendLineBreak();
                window.AppendNormal("Uncle Bazzit's Generic Nano Solvent");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendNormal(" (Can be bought in Bazzit Shop in MMD)\n\t\t\t=\n");
                window.AppendItemStart(247111, 247112, ql);
                window.AppendIcon(247115);
                window.AppendLineBreak();
                window.AppendNormal("Generic Kyr'Ozch DNA Soup");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendHighlight("Required Skills:\n");
                window.AppendNormal("- " + (ql * 4.5) + " Chemistry (for Pristine)\n");
                window.AppendNormal("- " + (ql * 7) + " Chemistry (for Mutated)\n\n");
                //Step 5
                window.AppendHighlight("Step 5:\n");
                window.AppendItemStart(247111, 247112, ql);
                window.AppendIcon(247115);
                window.AppendLineBreak();
                window.AppendNormal("Generic Kyr'Ozch DNA Soup");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t+\n");
                window.AppendItemStart(247123, 247123, 100);
                window.AppendIcon(247122);
                window.AppendLineBreak();
                window.AppendNormal("Essential Human DNA");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendNormal(" (Can be bought in Bazzit Shop in MMD)\n\t\t\t=\n");
                window.AppendItemStart(247124, 247125, ql);
                window.AppendIcon(247116);
                window.AppendLineBreak();
                window.AppendNormal("DNA Cocktail");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendHighlight("Required Skills:\n");
                window.AppendNormal("- " + (ql * 6) + " Pharma Tech\n\n");
                //Step 6
                window.AppendHighlight("Step 6:\n");
                window.AppendItemStart(247120, 247121, ql);
                window.AppendIcon(100334);
                window.AppendLineBreak();
                window.AppendNormal("Formatted Kyr'Ozch Viralbots");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t+\n");
                window.AppendItemStart(247124, 247125, ql);
                window.AppendIcon(247116);
                window.AppendLineBreak();
                window.AppendNormal("DNA Cocktail");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t=\n");
                window.AppendItemStart(247126, 247127, ql);
                window.AppendIcon(247117);
                window.AppendLineBreak();
                window.AppendNormal("Kyr'Ozch Formatted Viralbot Solution");
                window.AppendItemEnd();
                window.AppendLineBreak();
                window.AppendHighlight("Required Skills:\n");
                window.AppendNormal("- " + (ql * 6) + " Pharma Tech\n\n");
                //Step 7
                window.AppendHighlight("Step 7:\n");
                window.AppendItemStart(247126, 247127, ql);
                window.AppendIcon(247117);
                window.AppendLineBreak();
                window.AppendNormal("Kyr'Ozch Formatted Viralbot Solution");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t+\n");
                window.AppendItemStart(247163, 247163, 1);
                window.AppendIcon(245924);
                window.AppendLineBreak();
                window.AppendNormal("Basic Vest");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t=\n");
                window.AppendItemStart(247172, 247173, ql);
                window.AppendIcon(245924);
                window.AppendLineBreak();
                window.AppendNormal("Formatted Viralbot Vest");
                window.AppendItemEnd();
                window.AppendLineBreak(2);
                //Step 8
                window.AppendHighlight("Step 8:\n");
                window.AppendIcon(100337);
                window.AppendLineBreak();
                switch (armortype)
                {
                case "arithmetic":
                    window.AppendItem("QL " + src_ql + " Arithmetic Lead Viralbots", 247144, 247145, src_ql);
                    break;

                case "supple":
                    window.AppendItem("QL " + src_ql + " Supple Lead Viralbots", 247140, 247141, src_ql);
                    break;

                case "enduring":
                    window.AppendItem("QL " + src_ql + " Enduring Lead Viralbots", 247136, 247137, src_ql);
                    break;

                case "observant":
                    window.AppendItem("QL " + src_ql + " Observant Lead Viralbots", 247142, 247143, src_ql);
                    break;

                case "strong":
                    window.AppendItem("QL " + src_ql + " Strong Lead Viralbots", 247138, 247139, src_ql);
                    break;

                case "spiritual":
                    window.AppendItem("QL " + src_ql + " Spiritual Lead Viralbots", 247146, 247147, src_ql);
                    break;
                }
                window.AppendNormal(" (Rare drop off Alien City Generals)");
                window.AppendNormal("\n\t\t\t+\n");
                window.AppendItemStart(247172, 247173, ql);
                window.AppendIcon(245924);
                window.AppendLineBreak();
                window.AppendNormal("Formatted Viralbot Vest");
                window.AppendItemEnd();
                window.AppendNormal("\n\t\t\t=\n");
                switch (armortype)
                {
                case "arithmetic":
                    window.AppendItemStart(arithmetic.LowID, arithmetic.HighID, ql);
                    window.AppendIcon(Convert.ToInt32(arithmetic.Raw));
                    window.AppendLineBreak();
                    window.AppendString(arithmetic.Name + " Body Armor");
                    window.AppendItemEnd();
                    window.AppendLineBreak();
                    break;

                case "supple":
                    window.AppendItemStart(supple.LowID, supple.HighID, ql);
                    window.AppendIcon(Convert.ToInt32(supple.Raw));
                    window.AppendLineBreak();
                    window.AppendString(supple.Name + " Body Armor");
                    window.AppendItemEnd();
                    window.AppendLineBreak();
                    break;

                case "enduring":
                    window.AppendItemStart(enduring.LowID, enduring.HighID, ql);
                    window.AppendIcon(Convert.ToInt32(enduring.Raw));
                    window.AppendLineBreak();
                    window.AppendString(enduring.Name + " Body Armor");
                    window.AppendItemEnd();
                    window.AppendLineBreak();
                    break;

                case "observant":
                    window.AppendItemStart(observant.LowID, observant.HighID, ql);
                    window.AppendIcon(Convert.ToInt32(observant.Raw));
                    window.AppendLineBreak();
                    window.AppendString(observant.Name + " Body Armor");
                    window.AppendItemEnd();
                    window.AppendLineBreak();
                    break;

                case "strong":
                    window.AppendItemStart(strong.LowID, strong.HighID, ql);
                    window.AppendIcon(Convert.ToInt32(strong.Raw));
                    window.AppendLineBreak();
                    window.AppendString(strong.Name + " Body Armor");
                    window.AppendItemEnd();
                    window.AppendLineBreak();
                    break;

                case "spiritual":
                    window.AppendItemStart(spiritual.LowID, spiritual.HighID, ql);
                    window.AppendIcon(Convert.ToInt32(spiritual.Raw));
                    window.AppendLineBreak();
                    window.AppendString(spiritual.Name + " Body Armor");
                    window.AppendItemEnd();
                    window.AppendLineBreak();
                    break;
                }
                window.AppendHighlight("Required Skills:\n");
                window.AppendNormal("- " + (ql * 6) + " Psychology\n\n");

                bot.SendReply(e, "Building process for " + armortype + " »» ", window);
            }
        }