refactor(Core/Hook): OnPlayerReputationChange (#10471)
This commit is contained in:
@@ -380,33 +380,36 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, in
|
|||||||
ReputationRank old_rank = ReputationToRank(itr->second.Standing + BaseRep);
|
ReputationRank old_rank = ReputationToRank(itr->second.Standing + BaseRep);
|
||||||
ReputationRank new_rank = ReputationToRank(standing);
|
ReputationRank new_rank = ReputationToRank(standing);
|
||||||
|
|
||||||
itr->second.Standing = standing - BaseRep;
|
if (sScriptMgr->OnPlayerReputationChange(_player, factionEntry->ID, standing, incremental))
|
||||||
itr->second.needSend = true;
|
{
|
||||||
itr->second.needSave = true;
|
itr->second.Standing = standing - BaseRep;
|
||||||
|
itr->second.needSend = true;
|
||||||
|
itr->second.needSave = true;
|
||||||
|
|
||||||
SetVisible(&itr->second);
|
SetVisible(&itr->second);
|
||||||
|
|
||||||
if (new_rank <= REP_HOSTILE)
|
if (new_rank <= REP_HOSTILE)
|
||||||
SetAtWar(&itr->second, true);
|
SetAtWar(&itr->second, true);
|
||||||
|
|
||||||
if (new_rank > old_rank)
|
if (new_rank > old_rank)
|
||||||
_sendFactionIncreased = true;
|
_sendFactionIncreased = true;
|
||||||
|
|
||||||
sScriptMgr->OnPlayerReputationChange(_player, factionEntry->ID, standing, incremental);
|
if (new_rank != old_rank)
|
||||||
|
{
|
||||||
|
sScriptMgr->OnPlayerReputationRankChange(_player, factionEntry->ID, new_rank, old_rank, _sendFactionIncreased);
|
||||||
|
}
|
||||||
|
|
||||||
if (new_rank != old_rank)
|
UpdateRankCounters(old_rank, new_rank);
|
||||||
sScriptMgr->OnPlayerReputationRankChange(_player, factionEntry->ID, new_rank, old_rank, _sendFactionIncreased);
|
|
||||||
|
|
||||||
UpdateRankCounters(old_rank, new_rank);
|
_player->ReputationChanged(factionEntry);
|
||||||
|
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS, factionEntry->ID);
|
||||||
|
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION, factionEntry->ID);
|
||||||
|
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION, factionEntry->ID);
|
||||||
|
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION, factionEntry->ID);
|
||||||
|
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION, factionEntry->ID);
|
||||||
|
|
||||||
_player->ReputationChanged(factionEntry);
|
return true;
|
||||||
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS, factionEntry->ID);
|
}
|
||||||
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION, factionEntry->ID);
|
|
||||||
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION, factionEntry->ID);
|
|
||||||
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION, factionEntry->ID);
|
|
||||||
_player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION, factionEntry->ID);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,12 +154,19 @@ void ScriptMgr::OnGivePlayerXP(Player* player, uint32& amount, Unit* victim)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptMgr::OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental)
|
bool ScriptMgr::OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental)
|
||||||
{
|
{
|
||||||
ExecuteScript<PlayerScript>([&](PlayerScript* script)
|
auto ret = IsValidBoolScript<PlayerScript>([&](PlayerScript* script)
|
||||||
|
{
|
||||||
|
return !script->OnReputationChange(player, factionID, standing, incremental);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ret && *ret)
|
||||||
{
|
{
|
||||||
script->OnReputationChange(player, factionID, standing, incremental);
|
return false;
|
||||||
});
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptMgr::OnPlayerReputationRankChange(Player* player, uint32 factionID, ReputationRank newRank, ReputationRank oldRank, bool increased)
|
void ScriptMgr::OnPlayerReputationRankChange(Player* player, uint32 factionID, ReputationRank newRank, ReputationRank oldRank, bool increased)
|
||||||
|
|||||||
@@ -1005,7 +1005,7 @@ public:
|
|||||||
virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/) { }
|
virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/) { }
|
||||||
|
|
||||||
// Called when a player's reputation changes (before it is actually changed)
|
// Called when a player's reputation changes (before it is actually changed)
|
||||||
virtual void OnReputationChange(Player* /*player*/, uint32 /*factionId*/, int32& /*standing*/, bool /*incremental*/) { }
|
virtual bool OnReputationChange(Player* /*player*/, uint32 /*factionID*/, int32& /*standing*/, bool /*incremental*/) { return true; }
|
||||||
|
|
||||||
// Called when a player's reputation rank changes (before it is actually changed)
|
// Called when a player's reputation rank changes (before it is actually changed)
|
||||||
virtual void OnReputationRankChange(Player* /*player*/, uint32 /*factionID*/, ReputationRank /*newRank*/, ReputationRank /*olRank*/, bool /*increased*/) { }
|
virtual void OnReputationRankChange(Player* /*player*/, uint32 /*factionID*/, ReputationRank /*newRank*/, ReputationRank /*olRank*/, bool /*increased*/) { }
|
||||||
@@ -2168,7 +2168,7 @@ public: /* PlayerScript */
|
|||||||
void OnPlayerTalentsReset(Player* player, bool noCost);
|
void OnPlayerTalentsReset(Player* player, bool noCost);
|
||||||
void OnPlayerMoneyChanged(Player* player, int32& amount);
|
void OnPlayerMoneyChanged(Player* player, int32& amount);
|
||||||
void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim);
|
void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim);
|
||||||
void OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental);
|
bool OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental);
|
||||||
void OnPlayerReputationRankChange(Player* player, uint32 factionID, ReputationRank newRank, ReputationRank oldRank, bool increased);
|
void OnPlayerReputationRankChange(Player* player, uint32 factionID, ReputationRank newRank, ReputationRank oldRank, bool increased);
|
||||||
void OnPlayerLearnSpell(Player* player, uint32 spellID);
|
void OnPlayerLearnSpell(Player* player, uint32 spellID);
|
||||||
void OnPlayerForgotSpell(Player* player, uint32 spellID);
|
void OnPlayerForgotSpell(Player* player, uint32 spellID);
|
||||||
|
|||||||
Reference in New Issue
Block a user