private async void ExecuteLoadSkillsCommand()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            SkillItems.Clear();

            var client = new System.Net.Http.HttpClient();

            client.BaseAddress = new Uri("http://10.0.2.2:8080/");

            var response = await client.GetAsync("allSkills.json");

            var skillsJson = response.Content.ReadAsStringAsync().Result;

            var rootobject = JsonConvert.DeserializeObject <Skills>(skillsJson);

            foreach (var skill in rootobject.skills)
            {
                SkillItems.Add(skill);
            }

            IsBusy = false;
        }
示例#2
0
        private static SkillItem _GetItem(string skill, string input_item)
        {
            // Load items data file
            var items = new SkillItems(skill);

            // Search for an exact match
            SkillItem item = items.Find(f => f.Name.ToUpperInvariant() == input_item.ToUpperInvariant());

            // Search for a partial match if the exact fails
            if (item == null)
            {
                item = items.Find(f => f.Name.ContainsI(input_item));
            }

            return item;
        }
示例#3
0
        public static async Task Charms(CommandContext bc)
        {
            if (bc.MessageTokens.Length == 1)
            {
                await bc.SendReply("Syntax: !Charms <gold> [green] [crimson] [blue]");
                return;
            }

            // Get player summoning level
            var player = await Player.FromHiscores(await bc.GetPlayerName(bc.From.Nickname));
            if (!player.Ranked)
            {
                await bc.SendReply(@"\b{0}\b doesn't feature Hiscores.", player.Name);
                return;
            }
            int summLevel = player.Skills[Skill.SUMM].Level;

            // Get player charms
            int goldCharms,
                greenCharms = 0,
                crimsonCharms = 0,
                blueCharms = 0;

            if (!int.TryParse(bc.MessageTokens[1], out goldCharms))
            {
                await bc.SendReply("Error: Invalid gold charms.");
                return;
            }
            if (bc.MessageTokens.Length > 2 && !int.TryParse(bc.MessageTokens[2], out greenCharms))
            {
                await bc.SendReply("Error: Invalid green charms.");
                return;
            }
            if (bc.MessageTokens.Length > 3 && !int.TryParse(bc.MessageTokens[3], out crimsonCharms))
            {
                await bc.SendReply("Error: Invalid crimson charms.");
                return;
            }
            if (bc.MessageTokens.Length > 4 && !int.TryParse(bc.MessageTokens[4], out blueCharms))
            {
                await bc.SendReply("Error: Invalid blue charms.");
                return;
            }

            // Get a list of familiars
            List<SummoningItem> familiars = new SkillItems(Skill.SUMM).ConvertAll(f => (SummoningItem) f);
            familiars.RemoveAll(f => f.Level > summLevel || f.ComponentsIds == "0");

            // cheapest:: golds.Find(f => f.Level <= summLevel);
            ////familiars.Sort((f1, f2) => f1.CheapestExpCost.CompareTo(f2.CheapestExpCost));

            // last usable
            // don't sort

            // Get best charms to level
            SummoningItem gold = familiars.FindLast(f => f.Charm == "Gold" && f.Level <= summLevel);
            SummoningItem green = familiars.FindLast(f => f.Charm == "Green" && f.Level <= summLevel);
            SummoningItem crimson = familiars.FindLast(f => f.Charm == "Crimson" && f.Level <= summLevel);
            SummoningItem blue = familiars.FindLast(f => f.Charm == "Blue" && f.Level <= summLevel);

            const string block = @"\c{0}{1:N0} {2}: {3:#,##0.#} exp; {4:N0} shards; {5:N0} gp\c | ";
            string reply = block.FormatWith(gold.IrcColour, goldCharms, gold.Name, goldCharms * gold.Exp, goldCharms * gold.Shards, goldCharms * await gold.GetTotalCost());
            int totalShards = goldCharms * gold.Shards;
            double totalExp = goldCharms * gold.Exp;
            if (green != null)
            {
                reply += block.FormatWith(green.IrcColour, greenCharms, green.Name, greenCharms * green.Exp, greenCharms * green.Shards, greenCharms * await green.GetTotalCost());
                totalShards += greenCharms * green.Shards;
                totalExp += greenCharms * green.Exp;
            }
            if (crimson != null)
            {
                reply += block.FormatWith(crimson.IrcColour, crimsonCharms, crimson.Name, crimsonCharms * crimson.Exp, crimsonCharms * crimson.Shards, crimsonCharms * await crimson.GetTotalCost());
                totalShards += crimsonCharms * crimson.Shards;
                totalExp += crimsonCharms * crimson.Exp;
            }
            if (blue != null)
            {
                reply += block.FormatWith(blue.IrcColour, blueCharms, blue.Name, blueCharms * blue.Exp, blueCharms * blue.Shards, blueCharms * await blue.GetTotalCost());
                totalShards += blueCharms * blue.Shards;
                totalExp += blueCharms * blue.Exp;
            }

            await bc.SendReply(@"\b{0}\b summoning level \c07{1}\c | \c07{2:N0} Gold\c; \c03{3:N0} Green\c; \c04{4:N0} Crimson\c; \c10{5:N0} Blue\c | Total exp: \c07{6:#,##0.#}\c | Total shards: \c07{7:N0}\c (\c07{8:N0} gp\c) | Expected level: \c07{9}\c (\c07{10:N0} xp\c)", player.Name, summLevel, goldCharms, greenCharms, crimsonCharms, blueCharms, totalExp, totalShards, totalShards * 25, (player.Skills[Skill.SUMM].Exp + (int) totalExp).ToLevel(), player.Skills[Skill.SUMM].Exp + totalExp);

            await bc.SendReply(reply.Substring(0, reply.Length - 3));
        }
示例#4
0
        public static async Task Task(CommandContext bc)
        {
            if (bc.Message.Length < 3)
            {
                await bc.SendReply("Syntax: !task <qty> <monster>");
                return;
            }

            int qty;
            string monster;
            if (bc.MessageTokens.Length > 1)
            {
                if (bc.MessageTokens[1].TryInt32(out qty))
                {
                    monster = bc.MessageTokens.Join(2).Trim();
                }
                else if (bc.MessageTokens[bc.MessageTokens.GetLength(0) - 1].TryInt32(out qty))
                {
                    bc.MessageTokens[bc.MessageTokens.GetLength(0) - 1] = string.Empty;
                    monster = bc.MessageTokens.Join(1).Trim();
                }
                else
                {
                    await bc.SendReply("Syntax: !task <qty> <monster>");
                    return;
                }
            }
            else
            {
                await bc.SendReply("Syntax: !task <qty> <monster>");
                return;
            }

            List<SkillItem> items = new SkillItems("Slayer").FindAll(f => f.Name.ContainsI(monster));
            if (items.Count < 1)
            {
                await bc.SendReply(@"No Slayer Monster matching '\c07{0}\c'", monster);
                return;
            }
            var p = await Player.FromHiscores(await bc.GetPlayerName(bc.From.Nickname));
            if (!p.Ranked)
            {
                await bc.SendReply(@"\b{0}\b doesn't feature Hiscores.", p.Name);
                return;
            }

            var newExp = (long) (p.Skills[Skill.SLAY].Exp + items[0].Exp * qty);

            await bc.SendReply(@"Next task: \c07{0} {1}\c | current exp: \c07{2:#,##0.#}\c | experience this task: \c07{3:#,##0.#}\c | experience after task: \c07{4:#,##0.#}\c | which is level \c07{5}\c with \c07{6:#,##0.#}\c exp to go.", qty, items[0].Name, p.Skills[Skill.SLAY].Exp, (items[0].Exp * qty), newExp, newExp.ToLevel(), ((newExp.ToLevel() + 1).ToExp() - newExp));
        }
示例#5
0
        public static async Task Exp(CommandContext bc)
        {
            if (bc.MessageTokens.Length == 1)
            {
                await bc.SendReply("Syntax: !Exp [qty] <item>");
                return;
            }

            double qty = 0;
            string query = bc.MessageTokens.Join(1);

            if (bc.MessageTokens.Length > 1)
            {
                if (MathParser.TryCalc(bc.MessageTokens[1], out qty))
                {
                    if (bc.MessageTokens.Length == 2)
                    {
                        // !Exp <xp>
                        qty = Math.Floor(qty);
                        if (qty > 0 && qty < 128)
                        {
                            await bc.SendReply(@"Level \b{0}\b: \c07{1:N0}\c exp.", qty, ((int) qty).ToExp());
                        }
                        else
                        {
                            await bc.SendReply("Error: Invalid level.");
                        }
                        return;
                    }

                    // !Exp <qty> <item>
                    qty = Math.Max(1, Math.Floor(qty));
                    query = bc.MessageTokens.Join(2);
                }
                else
                {
                    // !Exp <item>
                    qty = 1;
                    query = bc.MessageTokens.Join(1);
                }
            }

            List<SkillItem> items = new SkillItems().FindAll(f => f.Name.ContainsI(query));
            if (items.Count > 0)
            {
                var reply = items.Aggregate(string.Empty, (current, item) => current + @" | {1} (\c{0}{2}\c): \c07{3:#,##0.#}\c".FormatWith(item.IrcColour, item.Skill, item.Name, qty * item.Exp));
                await bc.SendReply(reply.Substring(2));
            }
            else
            {
                await bc.SendReply(@"No item found matching \c07{0}\c.", query);
            }
        }