continued work on ~lolchamp, added items
| @@ -43,7 +43,7 @@ namespace NadekoBot.Classes.Trivia { | |||||||
|                 CurrentQuestion = TriviaQuestionPool.Instance.GetRandomQuestion(oldQuestions); |                 CurrentQuestion = TriviaQuestionPool.Instance.GetRandomQuestion(oldQuestions); | ||||||
|                 if (CurrentQuestion == null) { |                 if (CurrentQuestion == null) { | ||||||
|                     await _channel.SendMessage($":exclamation: Failed loading a trivia question"); |                     await _channel.SendMessage($":exclamation: Failed loading a trivia question"); | ||||||
|                     End(); |                     End().Wait(); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 oldQuestions.Add(CurrentQuestion); //add it to exclusion list so it doesn't show up again |                 oldQuestions.Add(CurrentQuestion); //add it to exclusion list so it doesn't show up again | ||||||
| @@ -64,7 +64,6 @@ namespace NadekoBot.Classes.Trivia { | |||||||
|                     //timeout |                     //timeout | ||||||
|                     await Task.Delay(QuestionDurationMiliseconds - HintTimeoutMiliseconds, triviaCancelSource.Token); |                     await Task.Delay(QuestionDurationMiliseconds - HintTimeoutMiliseconds, triviaCancelSource.Token); | ||||||
|  |  | ||||||
|  |  | ||||||
|                 } catch (TaskCanceledException) { |                 } catch (TaskCanceledException) { | ||||||
|                     Console.WriteLine("Trivia cancelled"); |                     Console.WriteLine("Trivia cancelled"); | ||||||
|                      |                      | ||||||
| @@ -81,6 +80,7 @@ namespace NadekoBot.Classes.Trivia { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async Task End() { |         private async Task End() { | ||||||
|  |             ShouldStopGame = true; | ||||||
|             await _channel.SendMessage("**Trivia game ended**"); |             await _channel.SendMessage("**Trivia game ended**"); | ||||||
|             await _channel.SendMessage(GetLeaderboard()); |             await _channel.SendMessage(GetLeaderboard()); | ||||||
|             TriviaGame throwAwayValue; |             TriviaGame throwAwayValue; | ||||||
|   | |||||||
| @@ -7,24 +7,90 @@ using Discord.Commands; | |||||||
| using NadekoBot; | using NadekoBot; | ||||||
| using System.Drawing; | using System.Drawing; | ||||||
| using NadekoBot.Extensions; | using NadekoBot.Extensions; | ||||||
|  | using Newtonsoft.Json.Linq; | ||||||
| namespace NadekoBot.Commands { | namespace NadekoBot.Commands { | ||||||
|     class LoLCommands : DiscordCommand { |     class LoLCommands : DiscordCommand { | ||||||
|         public override Func<CommandEventArgs, Task> DoFunc() { |         public override Func<CommandEventArgs, Task> DoFunc() { | ||||||
|             throw new NotImplementedException(); |             throw new NotImplementedException(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         class MatchupModel { | ||||||
|  |             public int Games { get; set; } | ||||||
|  |             public float WinRate { get; set; } | ||||||
|  |             [Newtonsoft.Json.JsonProperty("key")] | ||||||
|  |             public string Name { get; set; } | ||||||
|  |             public float StatScore { get; set; } | ||||||
|  |         } | ||||||
|  |  | ||||||
|         public override void Init(CommandGroupBuilder cgb) { |         public override void Init(CommandGroupBuilder cgb) { | ||||||
|             cgb.CreateCommand("~lolchamp") |             cgb.CreateCommand("~lolchamp") | ||||||
|                   .Description("Checks champion statistic for a lol champion.") |                   .Description("Checks champion statistic for a lol champion.") | ||||||
|                   .Parameter("region", ParameterType.Unparsed) |                   .Parameter("champ", ParameterType.Required) | ||||||
|  |                   .Parameter("position", ParameterType.Unparsed) | ||||||
|                   .Do(async e => { |                   .Do(async e => { | ||||||
|                       if (string.IsNullOrWhiteSpace(e.GetArg("region"))) |  | ||||||
|                           return; |  | ||||||
|                       try { |                       try { | ||||||
|                           var arg = e.GetArg("region"); |                           //get role | ||||||
|                           var data = Newtonsoft.Json.Linq.JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/stats/champs/{e.GetArg("region")}?api_key={NadekoBot.creds.LOLAPIKey}"))[0]; |                           string role = ResolvePos(e.GetArg("position")); | ||||||
|  |                           var name = e.GetArg("champ").Replace(" ",""); | ||||||
|  |  | ||||||
|  |                           //get basic champion stats | ||||||
|  |                           var allData = JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/stats/champs/{name}?api_key={NadekoBot.creds.LOLAPIKey}")); | ||||||
|  |                           JToken data = null; | ||||||
|  |                           if (role != null) { | ||||||
|  |                               for (int i = 0; i < allData.Count; i++) { | ||||||
|  |                                   if (allData[i]["role"].ToString().Equals(role)) { | ||||||
|  |                                       data = allData[i]; | ||||||
|  |                                       break; | ||||||
|  |                                   } | ||||||
|  |                               } | ||||||
|  |                               if (data == null) { | ||||||
|  |                                   await e.Channel.SendMessage("💢 Data for that role does not exist."); | ||||||
|  |                                   return; | ||||||
|  |                               } | ||||||
|  |                           } | ||||||
|  |                           else { | ||||||
|  |                               data = allData[0]; | ||||||
|  |                               role = allData[0]["role"].ToString(); | ||||||
|  |                           } | ||||||
|  |                           //name = data["title"].ToString(); | ||||||
|  |                           // get all possible roles, and "select" the shown one | ||||||
|  |                           var roles = new string[allData.Count]; | ||||||
|  |                           for (int i = 0; i < allData.Count; i++) { | ||||||
|  |                               roles[i] = allData[i]["role"].ToString(); | ||||||
|  |                               if (roles[i] == role) | ||||||
|  |                                   roles[i] = ">" + roles[i] + "<"; | ||||||
|  |                           } | ||||||
|                           var general = data["general"]; |                           var general = data["general"]; | ||||||
|  |  | ||||||
|  |                           //get build data for this role | ||||||
|  |                           var buildDatas = JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/champion/{name}/items/finished/mostPopular?api_key={NadekoBot.creds.LOLAPIKey}")); | ||||||
|  |                           JToken buildData = null; | ||||||
|  |                           for (int i = 0; i < buildDatas.Count; i++) { | ||||||
|  |                               if (buildDatas[i]["role"].ToString() == role) { | ||||||
|  |                                   buildData = buildDatas[i]; | ||||||
|  |                               } | ||||||
|  |                           } | ||||||
|  |                           if (buildData == null) | ||||||
|  |                               return; // wtf would cause this tho? | ||||||
|  |                           var items = new string[6]; | ||||||
|  |                           for (int i = 0; i < 6; i++) { | ||||||
|  |                               items[i] = buildData["items"][i].ToString(); | ||||||
|  |                           } | ||||||
|  |                           var matchupDatas = JArray.Parse(await Classes.SearchHelper.GetResponseAsync($"http://api.champion.gg/champion/{name}/matchup?api_key={NadekoBot.creds.LOLAPIKey}")); | ||||||
|  |                           List<MatchupModel> matchupDataIE = null; | ||||||
|  |                           for (int i = 0; i < matchupDatas.Count; i++) { | ||||||
|  |                               if (matchupDatas[i]["role"].ToString() == role) { | ||||||
|  |                                   matchupDataIE = matchupDatas[i]["matchups"].ToObject<List<MatchupModel>>(); | ||||||
|  |                               } | ||||||
|  |                           } | ||||||
|  |                           if (matchupDataIE == null) | ||||||
|  |                               return; | ||||||
|  |                           var matchupData = matchupDataIE.OrderBy(m => m.StatScore).ToArray(); | ||||||
|  |                           //matchupData.OrderBy(mm => mm.WinRate); | ||||||
|  |  | ||||||
|  |                           var countered = new[] { matchupData[0].Name, matchupData[1].Name, matchupData[2].Name }; | ||||||
|  |                           var counters = new[] { matchupData[matchupData.Length - 1].Name, matchupData[matchupData.Length - 2].Name, matchupData[matchupData.Length - 3].Name }; | ||||||
|  |  | ||||||
|                           //todo save this for at least 1 hour |                           //todo save this for at least 1 hour | ||||||
|                           Image img = Image.FromFile("data/lol/bg.png"); |                           Image img = Image.FromFile("data/lol/bg.png"); | ||||||
|                           using (Graphics g = Graphics.FromImage(img)) { |                           using (Graphics g = Graphics.FromImage(img)) { | ||||||
| @@ -32,19 +98,23 @@ namespace NadekoBot.Commands { | |||||||
|                               int margin = 5; |                               int margin = 5; | ||||||
|                               int imageSize = 75; |                               int imageSize = 75; | ||||||
|                               var normalFont = new Font("Times New Roman", 9, FontStyle.Regular); |                               var normalFont = new Font("Times New Roman", 9, FontStyle.Regular); | ||||||
|  |                               var smallFont = new Font("Times New Roman", 8, FontStyle.Regular); | ||||||
|                               //draw champ image |                               //draw champ image | ||||||
|                               g.DrawImage(Image.FromFile($"data/lol/champions/{data["title"].ToString()}.png"), new Rectangle(margin, margin, imageSize, imageSize)); |                               g.DrawImage(Image.FromFile($"data/lol/champions/{name}.png"), new Rectangle(margin, margin, imageSize, imageSize)); | ||||||
|                               //draw champ name |                               //draw champ name | ||||||
|                               g.DrawString($"{data["title"]}", new Font("Times New Roman", 25, FontStyle.Regular), Brushes.WhiteSmoke, margin + imageSize + margin, margin); |                               g.DrawString($"{data["title"]}", new Font("Times New Roman", 25, FontStyle.Regular), Brushes.WhiteSmoke, margin + imageSize + margin, margin); | ||||||
|                               //draw champ surname |                               //draw champ surname | ||||||
|                                 //todo |                               //todo | ||||||
|                               //draw roles |                               //draw roles | ||||||
|                               g.DrawString( |  | ||||||
| @"    Average Stats |  | ||||||
|  |  | ||||||
| Kills: 5.12    CS: 250.5 |                               g.DrawString("Roles: " + string.Join(", ", roles), normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin); | ||||||
| Deaths: 0.01   Win: 99% |                               //draw average stats | ||||||
| Assists: 6.55  Ban: 10% |                               g.DrawString( | ||||||
|  | $@"    Average Stats | ||||||
|  |  | ||||||
|  | Kills: {general["kills"]}     CS: {general["minionsKilled"]} | ||||||
|  | Deaths: {general["deaths"]}  Win: {general["winPercent"]}% | ||||||
|  | Assists: {general["assists"]}  Ban: {general["banRate"]}% | ||||||
| ", normalFont, Brushes.WhiteSmoke, img.Width - 150, margin); | ", normalFont, Brushes.WhiteSmoke, img.Width - 150, margin); | ||||||
|                               //draw masteries |                               //draw masteries | ||||||
|                               g.DrawString($"MASTERIES: 18 / 0 / 12", normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 20); |                               g.DrawString($"MASTERIES: 18 / 0 / 12", normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 20); | ||||||
| @@ -55,39 +125,44 @@ Assists: 6.55  Ban: 10% | |||||||
| 9 x Greater Seal of Armor | 9 x Greater Seal of Armor | ||||||
| 3 x Greater Quintessence of Attack Speed", normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 40); | 3 x Greater Quintessence of Attack Speed", normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 40); | ||||||
|                               //draw counters |                               //draw counters | ||||||
|  |                               g.DrawString($"Best against", smallFont, Brushes.WhiteSmoke, margin, img.Height - imageSize + margin); | ||||||
|                               int smallImgSize = 50; |                               int smallImgSize = 50; | ||||||
|                               var counters = new string[] { "Yasuo", "Yasuo", "Yasuo" }; |  | ||||||
|                               for (int i = 0; i < counters.Length; i++) { |                               for (int i = 0; i < counters.Length; i++) { | ||||||
|                                   g.DrawImage(Image.FromFile("data/lol/champions/" + counters[i] + ".png"), new Rectangle(i * (smallImgSize + margin) + margin, img.Height - smallImgSize - margin, smallImgSize, smallImgSize)); |                                   g.DrawImage(Image.FromFile("data/lol/champions/" + counters[i] + ".png"), | ||||||
|  |                                               new Rectangle(i * (smallImgSize + margin) + margin, img.Height - smallImgSize - margin, | ||||||
|  |                                               smallImgSize, | ||||||
|  |                                               smallImgSize)); | ||||||
|                               } |                               } | ||||||
|                               //draw countered by |                               //draw countered by | ||||||
|                               var countered = new string[] { "Yasuo", "Yasuo", "Yasuo" }; |                               g.DrawString($"Worst against", smallFont, Brushes.WhiteSmoke, img.Width - 3 * (smallImgSize + margin), img.Height - imageSize + margin); | ||||||
|  |  | ||||||
|                               for (int i = 0; i < countered.Length; i++) { |                               for (int i = 0; i < countered.Length; i++) { | ||||||
|                                   g.DrawImage(Image.FromFile("data/lol/champions/" + counters[i] + ".png"), new Rectangle(i * (smallImgSize + margin) + margin, img.Height - smallImgSize - margin, smallImgSize, smallImgSize)); |                                   int j = countered.Length - i; | ||||||
|  |                                   g.DrawImage(Image.FromFile("data/lol/champions/" + countered[i] + ".png"), | ||||||
|  |                                               new Rectangle(img.Width - (j * (smallImgSize + margin) + margin), img.Height - smallImgSize - margin, | ||||||
|  |                                               smallImgSize, | ||||||
|  |                                               smallImgSize)); | ||||||
|                               } |                               } | ||||||
|                               //draw item build |                               //draw item build | ||||||
|                               var build = new string[] { "Bloodthirster", "Bloodthirster", "Bloodthirster", "Bloodthirster", "Bloodthirster", "Bloodthirster" }; |                               g.DrawString("Popular build", normalFont, Brushes.WhiteSmoke, img.Width - (3 * (smallImgSize + margin) + margin), 77); | ||||||
|  |  | ||||||
|  |                               for (int i = 0; i < 6; i++) { | ||||||
|  |                                   var inverse_i = 5 - i; | ||||||
|  |                                   var j = inverse_i % 3 + 1; | ||||||
|  |                                   var k = inverse_i / 3; | ||||||
|  |                                   Console.WriteLine(k); | ||||||
|  |                                   g.DrawImage(Image.FromFile("data/lol/items/" + items[i] + ".png"), | ||||||
|  |                                               new Rectangle(img.Width - (j * (smallImgSize + margin) + margin), 92 + k * (smallImgSize + margin), | ||||||
|  |                                               smallImgSize, | ||||||
|  |                                               smallImgSize)); | ||||||
|  |                               } | ||||||
|  |  | ||||||
|                               /* |                               /* | ||||||
|                               int kdkdPosTop = 75; |                                | ||||||
|                               Font kdkdFont = new Font("Bodoni MT", statsFontSize, FontStyle.Regular); |  | ||||||
|                               string killsString = "Kills:"; |  | ||||||
|                               SizeF killsSize = g.MeasureString(killsString, kdkdFont); |  | ||||||
|                               string deathsString = "Deaths:"; |  | ||||||
|                               SizeF deathsSize = g.MeasureString(deathsString, kdkdFont); |  | ||||||
|                               string k_dString = "K/D:"; |  | ||||||
|                               SizeF k_dSize = g.MeasureString(k_dString, kdkdFont); |  | ||||||
|                              // g.DrawString(k_dString, Brushes.WhiteSmoke,200, kdkdPosTop); |  | ||||||
|                               g.DrawString($"       {general["kills"]}             { general["deaths"]}        { float.Parse(general["kills"].ToString()) / float.Parse(general["deaths"].ToString()):f2}" |  | ||||||
|                                   ,new Font("Bodoni MT", statsFontSize, FontStyle.Regular), Brushes.OrangeRed, 200, kdkdPosTop); |  | ||||||
|                                   */ |                                   */ | ||||||
|                           } |                           } | ||||||
|                           await e.Channel.SendFile(data["title"] + "_stats.png", img.ToStream()); |                           await e.Channel.SendFile(data["title"] + "_stats.png", img.ToStream()); | ||||||
|                           await e.Channel.SendMessage( |  | ||||||
| $@"**`Champion Name:` {data["title"]} |  | ||||||
|  |  | ||||||
| `Minions:` **{general["minionsKilled"]}** |  | ||||||
| `Win percentage:` **{general["winPercent"]}%** |  | ||||||
| "); |  | ||||||
|                       } |                       } | ||||||
|                       catch (Exception ex) { |                       catch (Exception ex) { | ||||||
|                           await e.Channel.SendMessage("💢 Failed retreiving data for that champion."); |                           await e.Channel.SendMessage("💢 Failed retreiving data for that champion."); | ||||||
| @@ -95,5 +170,43 @@ $@"**`Champion Name:` {data["title"]} | |||||||
|                       } |                       } | ||||||
|                   }); |                   }); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         private string ResolvePos(string pos) { | ||||||
|  |             if (string.IsNullOrWhiteSpace(pos)) | ||||||
|  |                 return null; | ||||||
|  |             switch (pos.ToLowerInvariant()) { | ||||||
|  |                 case "m": | ||||||
|  |                 case "mid": | ||||||
|  |                 case "midorfeed": | ||||||
|  |                 case "midd": | ||||||
|  |                 case "middle": | ||||||
|  |                     return "Middle"; | ||||||
|  |                 case "top": | ||||||
|  |                 case "topp": | ||||||
|  |                 case "t": | ||||||
|  |                 case "toporfeed": | ||||||
|  |                     return "Top"; | ||||||
|  |                 case "j": | ||||||
|  |                 case "jun": | ||||||
|  |                 case "jungl": | ||||||
|  |                 case "jungle": | ||||||
|  |                     return "Jungle"; | ||||||
|  |                 case "a": | ||||||
|  |                 case "ad": | ||||||
|  |                 case "adc": | ||||||
|  |                 case "carry": | ||||||
|  |                 case "ad carry": | ||||||
|  |                 case "adcarry": | ||||||
|  |                 case "c": | ||||||
|  |                     return "ADC"; | ||||||
|  |                 case "s": | ||||||
|  |                 case "sup": | ||||||
|  |                 case "supp": | ||||||
|  |                 case "support": | ||||||
|  |                     return "Support"; | ||||||
|  |                 default: | ||||||
|  |                     return pos; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ namespace NadekoBot.Modules { | |||||||
|     class Searches : DiscordModule { |     class Searches : DiscordModule { | ||||||
|         private Random _r; |         private Random _r; | ||||||
|         public Searches() : base() { |         public Searches() : base() { | ||||||
|             //commands.Add(new LoLCommands()); |             commands.Add(new LoLCommands()); | ||||||
|             _r = new Random(); |             _r = new Random(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/bg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 84 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/Aatrox.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/Ahri.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/Anivia.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 30 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 36 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 14 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 22 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 22 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 23 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 33 KiB | 
| Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/MonkeyKing.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 19 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 22 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 15 KiB | 
							
								
								
									
										
											BIN
										
									
								
								NadekoBot/bin/Debug/data/lol/champions/RekSai.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 16 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 20 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 18 KiB |