void Player::SetStanding( uint32 Faction, int32 Value ) { FactionDBC * f = dbcFaction.LookupEntry( Faction ); if ( f == NULL || f->RepListId < 0 ) return; ReputationMap::iterator itr = m_reputation.find( Faction ); if( itr == m_reputation.end() ) { if ( !AddNewFaction( f, Value, false ) ) return; } else { // Increment it. if ( RankChangedFlat( itr->second->standing, Value ) ) { itr->second->standing = Value; UpdateInrangeSetsBasedOnReputation(); } else itr->second->standing = Value; OnModStanding( f, itr->second ); } #ifdef OPTIMIZED_PLAYER_SAVING save_Reputation(); #endif }
void Player::SetStanding(uint32 Faction, int32 Value) { ReputationMap::iterator itr = m_reputation.find(Faction); FactionDBC * dbc = dbcFaction.LookupEntry(Faction); if(dbc == 0) return; if(itr == m_reputation.end()) { if( !AddNewFaction( dbc, Value, false ) ) return; itr = m_reputation.find( Faction ); UpdateInrangeSetsBasedOnReputation(); OnModStanding( dbc, itr->second ); } else { // Assign it. if ( RankChangedFlat( itr->second->standing, Value ) ) { itr->second->standing = Value; UpdateInrangeSetsBasedOnReputation(); } else itr->second->standing = Value; OnModStanding( dbc, itr->second ); } }
void Player::SetStanding(uint32 Faction, int32 Value) { const int32 minReputation = -42000; // 0/36000 Hated const int32 exaltedReputation = 42000; // 0/1000 Exalted const int32 maxReputation = 42999; // 999/1000 Exalted int32 newValue = Value; FactionDBC* f = dbcFaction.LookupEntryForced(Faction); if(f == NULL || f->RepListId < 0) return; ReputationMap::iterator itr = m_reputation.find(Faction); if(newValue < minReputation) newValue = minReputation; else if(newValue > maxReputation) newValue = maxReputation; if(itr == m_reputation.end()) { if(!AddNewFaction(f, newValue, false)) return; itr = m_reputation.find(Faction); #ifdef ENABLE_ACHIEVEMENTS if(itr->second->standing >= 42000) // check if we are exalted now m_achievementMgr.UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION, 1, 0, 0); // increment # of exalted m_achievementMgr.UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION, f->ID, itr->second->standing, 0); #endif UpdateInrangeSetsBasedOnReputation(); OnModStanding(f, itr->second); } else { // Assign it. if(RankChangedFlat(itr->second->standing, newValue)) { #ifdef ENABLE_ACHIEVEMENTS if(itr->second->standing - newValue >= exaltedReputation) // somehow we lost exalted status m_achievementMgr.UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION, -1, 0, 0); // decrement # of exalted else if(newValue >= exaltedReputation) // check if we are exalted now m_achievementMgr.UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION, 1, 0, 0); // increment # of exalted #endif itr->second->standing = newValue; UpdateInrangeSetsBasedOnReputation(); #ifdef ENABLE_ACHIEVEMENTS m_achievementMgr.UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION, f->ID, Value, 0); #endif } else itr->second->standing = newValue; OnModStanding(f, itr->second); } #ifdef OPTIMIZED_PLAYER_SAVING save_Reputation(); #endif }
void Player::SetStanding(uint32 Faction, int32 Value) { ReputationMap::iterator itr = m_reputation.find(Faction); FactionDBC * dbc = dbcFaction.LookupEntry(Faction); if(dbc == 0) return; if(itr == m_reputation.end()) { // New faction! FactionReputation * rep = new FactionReputation; rep->flag = 0; rep->standing = Value; rep->baseStanding = 0; m_reputation[dbc->ID] = rep; if(dbc->RepListId >= 0) reputationByListId[dbc->RepListId] = rep; } else { // Increment it. if(RankChangedFlat(itr->second->standing, Value)) { itr->second->standing = Value; UpdateInrangeSetsBasedOnReputation(); } else { itr->second->standing = Value; } // Set visible if invisible. if(!Visible(itr->second->flag)) { SetFlagVisible(itr->second->flag); if(IsInWorld()) m_session->OutPacket(SMSG_SET_FACTION_VISIBLE, 4, &dbc->RepListId); } // Set at war if we're beyond hostile. Standing rank = GetReputationRankFromStanding(itr->second->standing); if(rank <= STANDING_HOSTILE && !AtWar(itr->second->flag)) SetFlagAtWar(itr->second->flag); else if(rank >= STANDING_NEUTRAL && AtWar(itr->second->flag)) UnsetFlagAtWar(itr->second->flag); if(IsInWorld()) { WorldPacket data(SMSG_SET_FACTION_STANDING, 12); data << uint32(0) << uint8(0) << uint32(itr->second->flag) << dbc->RepListId << itr->second->CalcStanding(); m_session->SendPacket(&data); } } #ifdef OPTIMIZED_PLAYER_SAVING save_Reputation(); #endif }