110{
111 std::vector<ArenaTeam*> sortedTeams;
112 sortedTeams.reserve(arenaTeams.size());
113
114 static constexpr uint16 minRequiredGames = 30;
115
116 for (auto const& [id, team] : arenaTeams)
117 if (team->GetStats().SeasonGames >= minRequiredGames)
118 sortedTeams.push_back(team);
119
121 return a->GetRating() > b->GetRating();
122 });
123
124 std::vector<ArenaSeasonRewardGroup> pctRewardGroup;
125 std::vector<ArenaSeasonRewardGroup> absRewardGroup;
126
127 for (auto const& reward : rewardGroups)
128 {
130 pctRewardGroup.push_back(reward);
131 else
132 absRewardGroup.push_back(reward);
133 }
134
135 size_t totalTeams = sortedTeams.size();
136 for (auto const& rewardGroup : pctRewardGroup)
137 {
138 size_t minIndex = static_cast<size_t>(rewardGroup.minCriteria * totalTeams / 100);
139 size_t maxIndex = static_cast<size_t>(rewardGroup.maxCriteria * totalTeams / 100);
140
141 minIndex = std::min(minIndex, totalTeams);
142 maxIndex = std::min(maxIndex, totalTeams);
143
144 for (size_t i = minIndex; i < maxIndex; ++i)
145 {
148 }
149 }
150
151 for (auto const& rewardGroup : absRewardGroup)
152 {
153 size_t minIndex = rewardGroup.minCriteria-1;
154 size_t maxIndex = rewardGroup.maxCriteria;
155
156 minIndex = std::max(minIndex, size_t(0));
157 minIndex = std::min(minIndex, totalTeams);
158 maxIndex = std::min(maxIndex, totalTeams);
159
160 for (size_t i = minIndex; i < maxIndex; ++i)
161 {
164 }
165 }
166}
@ ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE
Definition ArenaSeasonMgr.h:40
std::uint16_t uint16
Definition Define.h:108
virtual void RewardTeamWithRewardGroup(ArenaTeam *arenaTeam, ArenaSeasonRewardGroup const &rewardGroup)=0
Definition ArenaTeam.h:137