diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Player.cpp | 34 | ||||
-rw-r--r-- | src/game/Player.h | 5 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 23 |
3 files changed, 58 insertions, 4 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 96a48225d56..8f29ec0a0a7 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -479,6 +479,8 @@ Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputa m_isWorldObject = true; sWorld.IncreasePlayerCount(); + + m_ChampioningFaction = 0; } Player::~Player () @@ -6110,11 +6112,35 @@ void Player::RewardReputation(Unit *pVictim, float rate) if(!Rep) return; + uint32 ChampioningFaction = 0; + + if(GetChampioningFaction()) + { + // support for: Championing - http://www.wowwiki.com/Championing + + Map const *pMap = GetMap(); + if(pMap && pMap->IsDungeon()) + { + bool Heroic = pMap->IsHeroic(); + + InstanceTemplate const *pInstance = objmgr.GetInstanceTemplate(pMap->GetId()); + if(pInstance) + { + AccessRequirement const *pAccessRequirement = objmgr.GetAccessRequirement(pInstance->access_id); + if(pAccessRequirement) + { + if(!pMap->IsRaid() && ((!Heroic && pAccessRequirement->levelMin == 80) || (Heroic && pAccessRequirement->heroicLevelMin == 80))) + ChampioningFaction = GetChampioningFaction(); + } + } + } + } + if(Rep->repfaction1 && (!Rep->team_dependent || GetTeam()==ALLIANCE)) { - int32 donerep1 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue1, Rep->repfaction1, false); + int32 donerep1 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue1, ChampioningFaction ? ChampioningFaction : Rep->repfaction1, false); donerep1 = int32(donerep1*rate); - FactionEntry const *factionEntry1 = sFactionStore.LookupEntry(Rep->repfaction1); + FactionEntry const *factionEntry1 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rep->repfaction1); uint32 current_reputation_rank1 = GetReputationMgr().GetRank(factionEntry1); if (factionEntry1 && current_reputation_rank1 <= Rep->reputation_max_cap1) GetReputationMgr().ModifyReputation(factionEntry1, donerep1); @@ -6130,9 +6156,9 @@ void Player::RewardReputation(Unit *pVictim, float rate) if(Rep->repfaction2 && (!Rep->team_dependent || GetTeam()==HORDE)) { - int32 donerep2 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue2, Rep->repfaction2, false); + int32 donerep2 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue2, ChampioningFaction ? ChampioningFaction : Rep->repfaction2, false); donerep2 = int32(donerep2*rate); - FactionEntry const *factionEntry2 = sFactionStore.LookupEntry(Rep->repfaction2); + FactionEntry const *factionEntry2 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rep->repfaction2); uint32 current_reputation_rank2 = GetReputationMgr().GetRank(factionEntry2); if (factionEntry2 && current_reputation_rank2 <= Rep->reputation_max_cap2) GetReputationMgr().ModifyReputation(factionEntry2, donerep2); diff --git a/src/game/Player.h b/src/game/Player.h index 7d417ffda11..480e74079d5 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2204,6 +2204,9 @@ class MANGOS_DLL_SPEC Player : public Unit //bool isActiveObject() const { return true; } bool canSeeSpellClickOn(Creature const* creature) const; + + inline uint32 GetChampioningFaction() const { return m_ChampioningFaction; } + inline void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; } protected: uint32 m_contestedPvPTimer; @@ -2479,6 +2482,8 @@ class MANGOS_DLL_SPEC Player : public Unit ReputationMgr m_reputationMgr; SpellCooldowns m_spellCooldowns; + + uint32 m_ChampioningFaction; }; void AddItemsSetItem(Player*player,Item *item); diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index d19d8120263..77946cf7bba 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2872,6 +2872,29 @@ void AuraEffect::HandleAuraDummy(bool apply, bool Real, bool changeAmount) } return; } + case 57819: // Argent Champion + case 57820: // Ebon Champion + case 57821: // Champion of the Kirin Tor + case 57822: // Wyrmrest Champion + { + if(!caster || caster->GetTypeId() != TYPEID_PLAYER) + return; + + uint32 FactionID = 0; + + if(apply) + { + switch(m_spellProto->Id) + { + case 57819: FactionID = 1106; break; // Argent Crusade + case 57820: FactionID = 1098; break; // Knights of the Ebon Blade + case 57821: FactionID = 1090; break; // Kirin Tor + case 57822: FactionID = 1091; break; // The Wyrmrest Accord + } + } + ((Player*)caster)->SetChampioningFaction(FactionID); + return; + } // LK Intro VO (1) case 58204: if(m_target->GetTypeId() == TYPEID_PLAYER) |