aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp34
-rw-r--r--src/game/Player.h5
-rw-r--r--src/game/SpellAuras.cpp23
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)