From b17c3d934e01b8d37c6038353848015642cc1eef Mon Sep 17 00:00:00 2001 From: Alan Beatty Date: Fri, 3 Sep 2021 11:59:55 -0500 Subject: [PATCH] Loop through xp rewards. This allows them to still be applied in case a high amount of xp is gained. --- .../Modules/Xp/Services/XpService.cs | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/NadekoBot/Modules/Xp/Services/XpService.cs b/src/NadekoBot/Modules/Xp/Services/XpService.cs index 8197db7ff..cef953651 100644 --- a/src/NadekoBot/Modules/Xp/Services/XpService.cs +++ b/src/NadekoBot/Modules/Xp/Services/XpService.cs @@ -226,29 +226,33 @@ namespace NadekoBot.Modules.Xp.Services curRewards.Add(usr.GuildId, crews); } - var rrew = rrews.FirstOrDefault(x => x.Level == newGuildLevelData.Level); - if (rrew != null) + //loop through levels since last level up, so if a high amount of xp is gained, reward are still applied. + for (var i = oldGuildLevelData.Level + 1; i <= newGuildLevelData.Level; i++) { - var role = first.User.Guild.GetRole(rrew.RoleId); - if (role is not null) + var rrew = rrews.FirstOrDefault(x => x.Level == i); + if (rrew != null) { - if (rrew.Remove) + var role = first.User.Guild.GetRole(rrew.RoleId); + if (role is not null) { - _ = first.User.RemoveRoleAsync(role); - } - else - { - _ = first.User.AddRoleAsync(role); + if (rrew.Remove) + { + _ = first.User.RemoveRoleAsync(role); + } + else + { + _ = first.User.AddRoleAsync(role); + } } } - } - //get currency reward for this level - var crew = crews.FirstOrDefault(x => x.Level == newGuildLevelData.Level); - if (crew != null) - { - //give the user the reward if it exists - await _cs.AddAsync(item.Key.User.Id, "Level-up Reward", crew.Amount); + //get currency reward for this level + var crew = crews.FirstOrDefault(x => x.Level == i); + if (crew != null) + { + //give the user the reward if it exists + await _cs.AddAsync(item.Key.User.Id, "Level-up Reward", crew.Amount); + } } } }