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; }
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; }
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)); }
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)); }
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); } }