Some cleanup as well as fix for a certain type of aa proc

This commit is contained in:
KimLS
2015-06-15 15:09:06 -07:00
parent 34f0106437
commit a984e9bd7c
8 changed files with 120 additions and 147 deletions
+46 -19
View File
@@ -800,7 +800,10 @@ void Client::RefundAA() {
int refunded = 0;
for(auto &rank_value : aa_ranks) {
AA::Ability *ability = zone->GetAlternateAdvancementAbility(rank_value.first);
auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value.first, rank_value.second.first);
auto ability = ability_rank.first;
auto rank = ability_rank.second;
if(!ability) {
continue;
}
@@ -809,11 +812,6 @@ void Client::RefundAA() {
continue;
}
AA::Rank *rank = ability->GetRankByPointsSpent(rank_value.second.first);
if(!rank) {
continue;
}
refunded += rank->total_cost;
}
@@ -864,20 +862,19 @@ void Client::SendAlternateAdvancementTable() {
void Client::SendAlternateAdvancementRank(int aa_id, int level) {
if(!zone)
return;
AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa_id);
if(!ability)
auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, level);
auto ability = ability_rank.first;
auto rank = ability_rank.second;
if(!ability) {
return;
}
if(!(ability->classes & (1 << GetClass()))) {
return;
}
AA::Rank *rank = ability->GetRankByPointsSpent(level);
if(!rank)
return;
if(!CanUseAlternateAdvancementRank(rank)) {
return;
}
@@ -1224,13 +1221,11 @@ int Mob::GetAlternateAdvancementCooldownReduction(AA::Rank *rank_in) {
}
for(auto &aa : aa_ranks) {
AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa.first);
if(!ability) {
continue;
}
auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa.first, aa.second.first);
auto ability = ability_rank.first;
auto rank = ability_rank.second;
AA::Rank *rank = ability->GetRankByPointsSpent(aa.second.first);
if(!rank) {
if(!ability) {
continue;
}
@@ -1328,6 +1323,21 @@ AA::Rank *Zone::GetAlternateAdvancementRank(int rank_id) {
return nullptr;
}
std::pair<AA::Ability*, AA::Rank*> Zone::GetAlternateAdvancementAbilityAndRank(int id, int points_spent) {
AA::Ability *ability = GetAlternateAdvancementAbility(id);
if(!ability) {
return std::make_pair(nullptr, nullptr);
}
AA::Rank *rank = ability->GetRankByPointsSpent(points_spent);
if(!rank) {
return std::make_pair(nullptr, nullptr);
}
return std::make_pair(ability, rank);
}
uint32 Mob::GetAA(uint32 rank_id, uint32 *charges) const {
if(zone) {
AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id);
@@ -1345,6 +1355,23 @@ uint32 Mob::GetAA(uint32 rank_id, uint32 *charges) const {
return 0;
}
uint32 Mob::GetAAByAAID(uint32 aa_id, uint32 *charges) const {
if(zone) {
AA::Ability *ability = zone->GetAlternateAdvancementAbility(aa_id);
if(!ability)
return 0;
auto iter = aa_ranks.find(ability->id);
if(iter != aa_ranks.end()) {
if(charges) {
*charges = iter->second.second;
}
return iter->second.first;
}
}
}
bool Mob::SetAA(uint32 rank_id, uint32 new_value, uint32 charges) {
if(zone) {
AA::Ability *ability = zone->GetAlternateAdvancementAbilityByRank(rank_id);