ResetAA should hopefully play better with granted AA points now

This commit is contained in:
KimLS 2015-06-24 01:25:49 -07:00
parent 8f156b3c91
commit 31301e0a26

View File

@ -441,15 +441,26 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration)
} }
void Client::ResetAA() { void Client::ResetAA() {
SendClearAA();
RefundAA(); RefundAA();
uint32 i;
for (i=0; i < MAX_PP_AA_ARRAY; i++) {
m_pp.aa_array[i].AA = 0;
m_pp.aa_array[i].value = 0;
m_pp.aa_array[i].charges= 0;
}
aa_ranks.clear(); memset(&m_pp.aa_array[0], 0, sizeof(AA_Array) * MAX_PP_AA_ARRAY);
int i = 0;
for(auto &rank_value : aa_ranks) {
auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value.first, rank_value.second.first);
auto ability = ability_rank.first;
auto rank = ability_rank.second;
if(!rank) {
continue;
}
m_pp.aa_array[i].AA = rank_value.first;
m_pp.aa_array[i].value = rank_value.second.first;
m_pp.aa_array[i].charges = rank_value.second.second;
++i;
}
for(int i = 0; i < _maxLeaderAA; ++i) for(int i = 0; i < _maxLeaderAA; ++i)
m_pp.leader_abilities.ranks[i] = 0; m_pp.leader_abilities.ranks[i] = 0;
@ -459,13 +470,7 @@ void Client::ResetAA() {
m_pp.group_leadership_exp = 0; m_pp.group_leadership_exp = 0;
m_pp.raid_leadership_exp = 0; m_pp.raid_leadership_exp = 0;
database.DeleteCharacterAAs(CharacterID()); database.DeleteCharacterLeadershipAAs(CharacterID());
SaveAA();
SendClearAA();
SendAlternateAdvancementTable();
SendAlternateAdvancementPoints();
SendAlternateAdvancementStats();
database.DeleteCharacterLeadershipAAs(this->CharacterID());
// undefined for these clients // undefined for these clients
if (GetClientVersionBit() & BIT_TitaniumAndEarlier) if (GetClientVersionBit() & BIT_TitaniumAndEarlier)
Kick(); Kick();
@ -749,24 +754,29 @@ void Client::InspectBuffs(Client* Inspector, int Rank)
void Client::RefundAA() { void Client::RefundAA() {
int refunded = 0; int refunded = 0;
for(auto &rank_value : aa_ranks) { auto rank_value = aa_ranks.begin();
auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value.first, rank_value.second.first); while(rank_value != aa_ranks.end()) {
auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(rank_value->first, rank_value->second.first);
auto ability = ability_rank.first; auto ability = ability_rank.first;
auto rank = ability_rank.second; auto rank = ability_rank.second;
if(!ability) { if(!ability) {
++rank_value;
continue; continue;
} }
if(ability->charges > 0 && rank_value.second.second < 1) { if(ability->charges > 0 && rank_value->second.second < 1) {
++rank_value;
continue; continue;
} }
if(ability->grant_only) { if(ability->grant_only) {
++rank_value;
continue; continue;
} }
refunded += rank->total_cost; refunded += rank->total_cost;
rank_value = aa_ranks.erase(rank_value);
} }
if(refunded > 0) { if(refunded > 0) {
@ -774,6 +784,10 @@ void Client::RefundAA() {
SaveAA(); SaveAA();
Save(); Save();
} }
SendAlternateAdvancementTable();
SendAlternateAdvancementPoints();
SendAlternateAdvancementStats();
} }
AA_SwarmPetInfo::AA_SwarmPetInfo() AA_SwarmPetInfo::AA_SwarmPetInfo()