Core/Reputation: updated Championing to Cataclysm

This commit is contained in:
Ovahlord
2018-11-14 02:37:49 +01:00
parent 24ead8dffa
commit befb919676
3 changed files with 96 additions and 14 deletions

View File

@@ -6655,33 +6655,61 @@ void Player::RewardOnKill(Unit* victim, float rate)
// support for: Championing - http://www.wowwiki.com/Championing
Map const* map = GetMap();
if (map->IsNonRaidDungeon())
{
if (LFGDungeonEntry const* dungeon = GetLFGDungeon(map->GetId(), map->GetDifficulty()))
if (dungeon->reclevel == GetMaxLevelForExpansion(dungeon->expansion))
ChampioningFaction = GetChampioningFaction();
{
// WotLK and Cataclysm dungeons only grant championing reputation when in max level dungeons of their corresponding expansion
if (dungeon->reclevel == GetMaxLevelForExpansion(dungeon->expansion) && GetExpansionForChampioningFaction())
{
if (GetExpansionForChampioningFaction() == dungeon->expansion)
ChampioningFaction = GetChampioningFaction();
}
else
{
// Classic Tabards (Alliance and Horde capital reputation) always convert the gained reputation
if (!GetExpansionForChampioningFaction())
ChampioningFaction = GetChampioningFaction();
}
}
}
}
uint32 team = GetTeam();
if (Rew->RepFaction1 && (!Rew->TeamDependent || team == ALLIANCE))
{
int32 donerep1 = CalculateReputationGain(REPUTATION_SOURCE_KILL, victim->getLevel(), Rew->RepValue1, ChampioningFaction ? ChampioningFaction : Rew->RepFaction1);
donerep1 = int32(donerep1 * rate);
if (FactionEntry const* rewFactionEntry1 = sFactionStore.LookupEntry(Rew->RepFaction1))
{
uint32 factionId1 = ChampioningFaction ? ChampioningFaction : Rew->RepFaction1;
if (rewFactionEntry1->GroupExpansion && !ChampioningFaction)
factionId1 = 0;
FactionEntry const* factionEntry1 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rew->RepFaction1);
uint32 current_reputation_rank1 = GetReputationMgr().GetRank(factionEntry1);
if (factionEntry1)
GetReputationMgr().ModifyReputation(factionEntry1, donerep1, current_reputation_rank1 > Rew->ReputationMaxCap1);
int32 donerep1 = CalculateReputationGain(REPUTATION_SOURCE_KILL, victim->getLevel(), Rew->RepValue1, factionId1);
donerep1 = int32(donerep1 * rate);
FactionEntry const* factionEntry1 = sFactionStore.LookupEntry(factionId1);
uint32 current_reputation_rank1 = GetReputationMgr().GetRank(factionEntry1);
if (factionEntry1)
GetReputationMgr().ModifyReputation(factionEntry1, donerep1, current_reputation_rank1 > Rew->ReputationMaxCap1);
}
}
if (Rew->RepFaction2 && (!Rew->TeamDependent || team == HORDE))
{
int32 donerep2 = CalculateReputationGain(REPUTATION_SOURCE_KILL, victim->getLevel(), Rew->RepValue2, ChampioningFaction ? ChampioningFaction : Rew->RepFaction2);
donerep2 = int32(donerep2 * rate);
if (FactionEntry const* rewFactionEntry2 = sFactionStore.LookupEntry(Rew->RepFaction2))
{
uint32 factionId2 = ChampioningFaction ? ChampioningFaction : Rew->RepFaction2;
if (rewFactionEntry2->GroupExpansion && !ChampioningFaction)
factionId2 = 0;
FactionEntry const* factionEntry2 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rew->RepFaction2);
uint32 current_reputation_rank2 = GetReputationMgr().GetRank(factionEntry2);
if (factionEntry2)
GetReputationMgr().ModifyReputation(factionEntry2, donerep2, current_reputation_rank2 > Rew->ReputationMaxCap2);
int32 donerep2 = CalculateReputationGain(REPUTATION_SOURCE_KILL, victim->getLevel(), Rew->RepValue2, factionId2);
donerep2 = int32(donerep2 * rate);
FactionEntry const* factionEntry2 = sFactionStore.LookupEntry(factionId2);
uint32 current_reputation_rank2 = GetReputationMgr().GetRank(factionEntry2);
if (factionEntry2)
GetReputationMgr().ModifyReputation(factionEntry2, donerep2, current_reputation_rank2 > Rew->ReputationMaxCap2);
}
}
if (Rew->CurrencyId1 && Rew->CurrencyCount1)
@@ -26539,6 +26567,22 @@ bool Player::CanSeeSpellClickOn(Creature const* c) const
return false;
}
uint8 Player::GetExpansionForChampioningFaction() const
{
if (!m_ChampioningFaction)
return 0;
FactionEntry const* faction = sFactionStore.LookupEntry(m_ChampioningFaction);
if (!faction || !faction->team)
return 0;
FactionEntry const* expansionFaction = sFactionStore.LookupEntry(faction->team);
if (!expansionFaction)
return 0;
return expansionFaction->GroupExpansion;
}
void Player::BuildPlayerTalentsInfoData(WorldPacket* data)
{
*data << uint32(GetFreeTalentPoints()); // unspentTalentPoints

View File

@@ -2324,6 +2324,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
uint32 GetChampioningFaction() const { return m_ChampioningFaction; }
void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; }
uint8 GetExpansionForChampioningFaction() const;
Spell* m_spellModTakingSpell;
float GetAverageItemLevel() const;

View File

@@ -4579,6 +4579,24 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
case 57820: // Ebon Champion
case 57821: // Champion of the Kirin Tor
case 57822: // Wyrmrest Champion
case 93337: // Ramkahen
case 93339: // Earthen Ring
case 93341: // Hyjal
case 93347: // Therazane
case 93368: // Wildhammer Clan
case 94158: // Dragonmaw Clan
case 93827: // Darkspear Champion
case 93830: // Bilgewater Champion
case 94462: // Undercity Champion
case 94463: // Thunder Bluff Champion
case 93828: // Silvermoon Champion
case 93825: // Orgrimmar Champion
case 93821: // Gnomeregan Champion
case 93816: // Gilneas Champion
case 93806: // Darnassus Champion
case 93811: // Exodar Champion
case 93805: // Ironforge Champion
case 93795: // Sturmwind Champion
{
if (!caster || caster->GetTypeId() != TYPEID_PLAYER)
break;
@@ -4593,6 +4611,24 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
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
case 93337: FactionID = 1173; break; // Ramkahen
case 93339: FactionID = 1135; break; // Earthen Ring
case 93341: FactionID = 1158; break; // Hyjal
case 93347: FactionID = 1171; break; // Therazane
case 93368: FactionID = 1174; break; // Wildhammer Clan
case 94158: FactionID = 1172; break; // Dragonmaw Clan
case 93827: FactionID = 530; break; // Darkspear Champion
case 93830: FactionID = 1133; break; // Bilgewater Champion
case 94462: FactionID = 68; break; // Undercity Champion
case 94463: FactionID = 81; break; // Thunder Bluff Champion
case 93828: FactionID = 911; break; // Silvermoon Champion
case 93825: FactionID = 76; break; // Orgrimmar Champion
case 93821: FactionID = 54; break; // Gnomeregan Champion
case 93816: FactionID = 1134; break; // Gilneas Champion
case 93806: FactionID = 69; break; // Darnassus Champion
case 93811: FactionID = 930; break; // Exodar Champion
case 93805: FactionID = 47; break; // Ironforge Champion
case 93795: FactionID = 72; break; // Sturmwind Champion
}
}
caster->ToPlayer()->SetChampioningFaction(FactionID);