mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[7538] Hide some implementation details for reputation/forced faction reaction.
This commit is contained in:
parent
3b3144004a
commit
df9caf58cd
10 changed files with 148 additions and 117 deletions
|
|
@ -757,7 +757,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
|||
continue;
|
||||
|
||||
uint32 counter = 0;
|
||||
const FactionStateList factionStateList = GetPlayer()->GetFactionStateList();
|
||||
FactionStateList const& factionStateList = GetPlayer()->GetFactionStateList();
|
||||
for (FactionStateList::const_iterator iter = factionStateList.begin(); iter!= factionStateList.end(); ++iter)
|
||||
{
|
||||
FactionEntry const *factionEntry = sFactionStore.LookupEntry(iter->second.ID);
|
||||
|
|
|
|||
|
|
@ -860,15 +860,7 @@ void WorldSession::HandleSetFactionAtWar( WorldPacket & recv_data )
|
|||
recv_data >> repListID;
|
||||
recv_data >> flag;
|
||||
|
||||
FactionStateList::iterator itr = GetPlayer()->m_factions.find(repListID);
|
||||
if (itr == GetPlayer()->m_factions.end())
|
||||
return;
|
||||
|
||||
// always invisible or hidden faction can't change war state
|
||||
if(itr->second.Flags & (FACTION_FLAG_INVISIBLE_FORCED|FACTION_FLAG_HIDDEN) )
|
||||
return;
|
||||
|
||||
GetPlayer()->SetFactionAtWar(&itr->second,flag);
|
||||
GetPlayer()->SetFactionAtWar(repListID,flag);
|
||||
}
|
||||
|
||||
//I think this function is never used :/ I dunno, but i guess this opcode not exists
|
||||
|
|
@ -876,7 +868,7 @@ void WorldSession::HandleSetFactionCheat( WorldPacket & /*recv_data*/ )
|
|||
{
|
||||
//CHECK_PACKET_SIZE(recv_data,4+4);
|
||||
|
||||
//sLog.outDebug("WORLD SESSION: HandleSetFactionCheat");
|
||||
sLog.outError("WORLD SESSION: HandleSetFactionCheat, not expected call, please report.");
|
||||
/*
|
||||
uint32 FactionID;
|
||||
uint32 Standing;
|
||||
|
|
@ -896,7 +888,7 @@ void WorldSession::HandleSetFactionCheat( WorldPacket & /*recv_data*/ )
|
|||
}
|
||||
}
|
||||
*/
|
||||
GetPlayer()->UpdateReputation();
|
||||
GetPlayer()->SendFactionStates();
|
||||
}
|
||||
|
||||
void WorldSession::HandleMeetingStoneInfo( WorldPacket & /*recv_data*/ )
|
||||
|
|
@ -961,11 +953,7 @@ void WorldSession::HandleSetWatchedFactionInactiveOpcode(WorldPacket & recv_data
|
|||
uint8 inactive;
|
||||
recv_data >> replistid >> inactive;
|
||||
|
||||
FactionStateList::iterator itr = _player->m_factions.find(replistid);
|
||||
if (itr == _player->m_factions.end())
|
||||
return;
|
||||
|
||||
_player->SetFactionInactive(&itr->second, inactive);
|
||||
_player->SetFactionInactive(replistid, inactive);
|
||||
}
|
||||
|
||||
void WorldSession::HandleToggleHelmOpcode( WorldPacket & /*recv_data*/ )
|
||||
|
|
|
|||
|
|
@ -893,14 +893,7 @@ bool ChatHandler::HandleLookupFactionCommand(const char* args)
|
|||
FactionEntry const *factionEntry = sFactionStore.LookupEntry (id);
|
||||
if (factionEntry)
|
||||
{
|
||||
FactionState const* repState = NULL;
|
||||
if(target)
|
||||
{
|
||||
FactionStateList::const_iterator repItr = target->m_factions.find (factionEntry->reputationListID);
|
||||
if(repItr != target->m_factions.end())
|
||||
repState = &repItr->second;
|
||||
}
|
||||
|
||||
FactionState const* repState = target ? target->GetFactionState(factionEntry) : NULL;
|
||||
|
||||
int loc = m_session ? m_session->GetSessionDbcLocale() : sWorld.GetDefaultDbcLocale();
|
||||
std::string name = factionEntry->name[loc];
|
||||
|
|
@ -1063,7 +1056,7 @@ bool ChatHandler::HandleModifyRepCommand(const char * args)
|
|||
}
|
||||
|
||||
target->SetFactionReputation(factionEntry,amount);
|
||||
PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[m_session->GetSessionDbcLocale()], factionId, GetNameLink(target).c_str(), target->GetReputation(factionId));
|
||||
PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[m_session->GetSessionDbcLocale()], factionId, GetNameLink(target).c_str(), target->GetReputation(factionEntry));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -2304,14 +2297,16 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
|
|||
return false;
|
||||
}
|
||||
|
||||
for(FactionStateList::const_iterator itr = target->m_factions.begin(); itr != target->m_factions.end(); ++itr)
|
||||
FactionStateList const& targetFSL = target->GetFactionStateList();
|
||||
for(FactionStateList::const_iterator itr = targetFSL.begin(); itr != targetFSL.end(); ++itr)
|
||||
{
|
||||
FactionEntry const *factionEntry = sFactionStore.LookupEntry(itr->second.ID);
|
||||
char const* factionName = factionEntry ? factionEntry->name[m_session->GetSessionDbcLocale()] : "#Not found#";
|
||||
ReputationRank rank = target->GetReputationRank(factionEntry);
|
||||
std::string rankName = GetMangosString(ReputationRankStrIndex[rank]);
|
||||
std::ostringstream ss;
|
||||
ss << itr->second.ID << ": |cffffffff|Hfaction:" << itr->second.ID << "|h[" << factionName << "]|h|r " << rankName << "|h|r (" << target->GetReputation(factionEntry) << ")";
|
||||
ss << itr->second.ID << ": |cffffffff|Hfaction:" << itr->second.ID << "|h[" << factionName << "]|h|r " << rankName << "|h|r ("
|
||||
<< target->GetReputation(factionEntry) << ")";
|
||||
|
||||
if(itr->second.Flags & FACTION_FLAG_VISIBLE)
|
||||
ss << GetMangosString(LANG_FACTION_VISIBLE);
|
||||
|
|
|
|||
|
|
@ -405,7 +405,8 @@ void WorldSession::HandleSetTargetOpcode( WorldPacket & recv_data )
|
|||
if(!unit)
|
||||
return;
|
||||
|
||||
_player->SetFactionVisibleForFactionTemplateId(unit->getFaction());
|
||||
if(FactionTemplateEntry const* factionTemplateEntry = sFactionTemplateStore.LookupEntry(unit->getFaction()))
|
||||
_player->SetFactionVisible(factionTemplateEntry);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetSelectionOpcode( WorldPacket & recv_data )
|
||||
|
|
@ -422,7 +423,8 @@ void WorldSession::HandleSetSelectionOpcode( WorldPacket & recv_data )
|
|||
if(!unit)
|
||||
return;
|
||||
|
||||
_player->SetFactionVisibleForFactionTemplateId(unit->getFaction());
|
||||
if(FactionTemplateEntry const* factionTemplateEntry = sFactionTemplateStore.LookupEntry(unit->getFaction()))
|
||||
_player->SetFactionVisible(factionTemplateEntry);
|
||||
}
|
||||
|
||||
void WorldSession::HandleStandStateChangeOpcode( WorldPacket & recv_data )
|
||||
|
|
|
|||
|
|
@ -79,13 +79,11 @@ ObjectAccessor::GetNPCIfCanInteractWith(Player const &player, uint64 guid, uint3
|
|||
return NULL;
|
||||
|
||||
// not unfriendly
|
||||
FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(unit->getFaction());
|
||||
if(factionTemplate)
|
||||
{
|
||||
FactionEntry const* faction = sFactionStore.LookupEntry(factionTemplate->faction);
|
||||
if( faction && faction->reputationListID >= 0 && player.GetReputationRank(faction) <= REP_UNFRIENDLY)
|
||||
if(FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(unit->getFaction()))
|
||||
if(factionTemplate->faction)
|
||||
if(FactionEntry const* faction = sFactionStore.LookupEntry(factionTemplate->faction))
|
||||
if(faction->reputationListID >= 0 && player.GetReputationRank(faction) <= REP_UNFRIENDLY)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// not too far
|
||||
if(!unit->IsWithinDistInMap(&player,INTERACTION_DISTANCE))
|
||||
|
|
|
|||
|
|
@ -5629,6 +5629,12 @@ void Player::SendFactionState(FactionState const* faction) const
|
|||
}
|
||||
}
|
||||
|
||||
void Player::SendFactionStates() const
|
||||
{
|
||||
for(FactionStateList::const_iterator itr = m_factions.begin(); itr != m_factions.end(); ++itr)
|
||||
SendFactionState(&(itr->second));
|
||||
}
|
||||
|
||||
void Player::SendInitialReputations()
|
||||
{
|
||||
WorldPacket data(SMSG_INITIALIZE_FACTIONS, (4+128*5));
|
||||
|
|
@ -5662,13 +5668,17 @@ void Player::SendInitialReputations()
|
|||
GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
FactionState const* Player::GetFactionState( FactionEntry const* factionEntry) const
|
||||
void Player::SetFactionAtWar( RepListID repListID, bool on )
|
||||
{
|
||||
FactionStateList::const_iterator itr = m_factions.find(factionEntry->reputationListID);
|
||||
if (itr != m_factions.end())
|
||||
return &itr->second;
|
||||
FactionStateList::iterator itr = m_factions.find(repListID);
|
||||
if (itr == m_factions.end())
|
||||
return;
|
||||
|
||||
return NULL;
|
||||
// always invisible or hidden faction can't change war state
|
||||
if(itr->second.Flags & (FACTION_FLAG_INVISIBLE_FORCED|FACTION_FLAG_HIDDEN) )
|
||||
return;
|
||||
|
||||
SetFactionAtWar(&itr->second,on);
|
||||
}
|
||||
|
||||
void Player::SetFactionAtWar(FactionState* faction, bool atWar)
|
||||
|
|
@ -5689,6 +5699,15 @@ void Player::SetFactionAtWar(FactionState* faction, bool atWar)
|
|||
faction->Changed = true;
|
||||
}
|
||||
|
||||
void Player::SetFactionInactive( RepListID repListID, bool on )
|
||||
{
|
||||
FactionStateList::iterator itr = m_factions.find(repListID);
|
||||
if (itr == m_factions.end())
|
||||
return;
|
||||
|
||||
SetFactionInactive(&itr->second,on);
|
||||
}
|
||||
|
||||
void Player::SetFactionInactive(FactionState* faction, bool inactive)
|
||||
{
|
||||
// always invisible or hidden faction can't be inactive
|
||||
|
|
@ -5707,23 +5726,17 @@ void Player::SetFactionInactive(FactionState* faction, bool inactive)
|
|||
faction->Changed = true;
|
||||
}
|
||||
|
||||
void Player::SetFactionVisibleForFactionTemplateId(uint32 FactionTemplateId)
|
||||
void Player::SetFactionVisible(FactionTemplateEntry const*factionTemplateEntry)
|
||||
{
|
||||
FactionTemplateEntry const*factionTemplateEntry = sFactionTemplateStore.LookupEntry(FactionTemplateId);
|
||||
|
||||
if(!factionTemplateEntry)
|
||||
if(!factionTemplateEntry->faction)
|
||||
return;
|
||||
|
||||
if(factionTemplateEntry->faction)
|
||||
SetFactionVisibleForFactionId(factionTemplateEntry->faction);
|
||||
if(FactionEntry const *factionEntry = sFactionStore.LookupEntry(factionTemplateEntry->faction))
|
||||
SetFactionVisible(factionEntry);
|
||||
}
|
||||
|
||||
void Player::SetFactionVisibleForFactionId(uint32 FactionId)
|
||||
void Player::SetFactionVisible(FactionEntry const *factionEntry)
|
||||
{
|
||||
FactionEntry const *factionEntry = sFactionStore.LookupEntry(FactionId);
|
||||
if(!factionEntry)
|
||||
return;
|
||||
|
||||
if(factionEntry->reputationListID < 0)
|
||||
return;
|
||||
|
||||
|
|
@ -5930,30 +5943,11 @@ bool Player::ModifyOneFactionReputation(FactionEntry const* factionEntry, int32
|
|||
|
||||
SetFactionVisible(&itr->second);
|
||||
|
||||
for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
|
||||
{
|
||||
if(uint32 questid = GetQuestSlotQuestId(i))
|
||||
{
|
||||
Quest const* qInfo = objmgr.GetQuestTemplate(questid);
|
||||
if( qInfo && qInfo->GetRepObjectiveFaction() == factionEntry->ID )
|
||||
{
|
||||
QuestStatusData& q_status = mQuestStatus[questid];
|
||||
if( q_status.m_status == QUEST_STATUS_INCOMPLETE )
|
||||
{
|
||||
if(GetReputation(factionEntry) >= qInfo->GetRepObjectiveValue())
|
||||
if ( CanCompleteQuest( questid ) )
|
||||
CompleteQuest( questid );
|
||||
}
|
||||
else if( q_status.m_status == QUEST_STATUS_COMPLETE )
|
||||
{
|
||||
if(GetReputation(factionEntry) < qInfo->GetRepObjectiveValue())
|
||||
IncompleteQuest( questid );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ReputationChanged(factionEntry);
|
||||
|
||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION,factionEntry->ID);
|
||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION,factionEntry->ID);
|
||||
|
||||
SendFactionState(&(itr->second));
|
||||
|
||||
return true;
|
||||
|
|
@ -6026,6 +6020,27 @@ bool Player::SetOneFactionReputation(FactionEntry const* factionEntry, int32 sta
|
|||
return false;
|
||||
}
|
||||
|
||||
void Player::ApplyForceReaction( uint32 faction_id,ReputationRank rank,bool apply )
|
||||
{
|
||||
if(apply)
|
||||
m_forcedReactions[faction_id] = rank;
|
||||
else
|
||||
m_forcedReactions.erase(faction_id);
|
||||
}
|
||||
|
||||
void Player::SendForceReactions()
|
||||
{
|
||||
WorldPacket data;
|
||||
data.Initialize(SMSG_SET_FORCED_REACTIONS, 4+m_forcedReactions.size()*(4+4));
|
||||
data << uint32(m_forcedReactions.size());
|
||||
for(ForcedReactions::const_iterator itr = m_forcedReactions.begin(); itr != m_forcedReactions.end(); ++itr)
|
||||
{
|
||||
data << uint32(itr->first); // faction_id (Faction.dbc)
|
||||
data << uint32(itr->second); // reputation rank
|
||||
}
|
||||
SendDirectMessage(&data);
|
||||
}
|
||||
|
||||
//Calculate total reputation percent player gain with quest/creature level
|
||||
int32 Player::CalculateReputationGain(uint32 creatureOrQuestLevel, int32 rep, bool for_quest)
|
||||
{
|
||||
|
|
@ -12636,7 +12651,8 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver )
|
|||
AdjustQuestReqItemCount( pQuest, questStatusData );
|
||||
|
||||
if( pQuest->GetRepObjectiveFaction() )
|
||||
SetFactionVisibleForFactionId(pQuest->GetRepObjectiveFaction());
|
||||
if(FactionEntry const* factionEntry = sFactionStore.LookupEntry(pQuest->GetRepObjectiveFaction()))
|
||||
SetFactionVisible(factionEntry);
|
||||
|
||||
uint32 qtime = 0;
|
||||
if( pQuest->HasFlag( QUEST_MANGOS_FLAGS_TIMED ) )
|
||||
|
|
@ -13781,6 +13797,34 @@ void Player::MoneyChanged( uint32 count )
|
|||
}
|
||||
}
|
||||
|
||||
void Player::ReputationChanged(FactionEntry const* factionEntry )
|
||||
{
|
||||
for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
|
||||
{
|
||||
if(uint32 questid = GetQuestSlotQuestId(i))
|
||||
{
|
||||
if(Quest const* qInfo = objmgr.GetQuestTemplate(questid))
|
||||
{
|
||||
if(qInfo->GetRepObjectiveFaction() == factionEntry->ID )
|
||||
{
|
||||
QuestStatusData& q_status = mQuestStatus[questid];
|
||||
if( q_status.m_status == QUEST_STATUS_INCOMPLETE )
|
||||
{
|
||||
if(GetReputation(factionEntry) >= qInfo->GetRepObjectiveValue())
|
||||
if ( CanCompleteQuest( questid ) )
|
||||
CompleteQuest( questid );
|
||||
}
|
||||
else if( q_status.m_status == QUEST_STATUS_COMPLETE )
|
||||
{
|
||||
if(GetReputation(factionEntry) < qInfo->GetRepObjectiveValue())
|
||||
IncompleteQuest( questid );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Player::HasQuestForItem( uint32 itemid ) const
|
||||
{
|
||||
for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
|
||||
|
|
|
|||
|
|
@ -49,7 +49,6 @@ class Transport;
|
|||
class UpdateMask;
|
||||
class SpellCastTargets;
|
||||
class PlayerSocial;
|
||||
class AchievementMgr;
|
||||
class Vehicle;
|
||||
|
||||
typedef std::deque<Mail*> PlayerMails;
|
||||
|
|
@ -1212,6 +1211,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
void CastedCreatureOrGO( uint32 entry, uint64 guid, uint32 spell_id );
|
||||
void TalkedToCreature( uint32 entry, uint64 guid );
|
||||
void MoneyChanged( uint32 value );
|
||||
void ReputationChanged(FactionEntry const* factionEntry );
|
||||
bool HasQuestForItem( uint32 itemid ) const;
|
||||
bool HasQuestForGO(int32 GOId) const;
|
||||
void UpdateForQuestsGO();
|
||||
|
|
@ -1691,9 +1691,16 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
bool RewardPlayerAndGroupAtKill(Unit* pVictim);
|
||||
bool isHonorOrXPTarget(Unit* pVictim);
|
||||
|
||||
FactionStateList m_factions;
|
||||
ForcedReactions m_forcedReactions;
|
||||
FactionStateList const& GetFactionStateList() { return m_factions; }
|
||||
FactionState const* GetFactionState(RepListID id) const
|
||||
{
|
||||
FactionStateList::const_iterator repItr = m_factions.find (id);
|
||||
return repItr != m_factions.end() ? &repItr->second : NULL;
|
||||
}
|
||||
FactionState const* GetFactionState(FactionEntry const* factionEntry) const
|
||||
{
|
||||
return factionEntry->reputationListID >= 0 ? GetFactionState(factionEntry->reputationListID) : NULL;
|
||||
}
|
||||
uint32 GetDefaultReputationFlags(const FactionEntry *factionEntry) const;
|
||||
int32 GetBaseReputation(const FactionEntry *factionEntry) const;
|
||||
int32 GetReputation(uint32 faction_id) const;
|
||||
|
|
@ -1707,23 +1714,27 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
const static int32 Reputation_Bottom = -42000;
|
||||
bool ModifyFactionReputation(uint32 FactionTemplateId, int32 DeltaReputation);
|
||||
bool ModifyFactionReputation(FactionEntry const* factionEntry, int32 standing);
|
||||
bool ModifyOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
|
||||
bool SetFactionReputation(uint32 FactionTemplateId, int32 standing);
|
||||
bool SetFactionReputation(FactionEntry const* factionEntry, int32 standing);
|
||||
bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
|
||||
int32 CalculateReputationGain(uint32 creatureOrQuestLevel, int32 rep, bool for_quest);
|
||||
void RewardReputation(Unit *pVictim, float rate);
|
||||
void RewardReputation(Quest const *pQuest);
|
||||
void SetInitialFactions();
|
||||
void UpdateReputation() const;
|
||||
void SendFactionState(FactionState const* faction) const;
|
||||
void SendInitialReputations();
|
||||
FactionState const* GetFactionState( FactionEntry const* factionEntry) const;
|
||||
void SetFactionAtWar(FactionState* faction, bool atWar);
|
||||
void SetFactionInactive(FactionState* faction, bool inactive);
|
||||
void SetFactionVisible(FactionState* faction);
|
||||
void SetFactionVisibleForFactionTemplateId(uint32 FactionTemplateId);
|
||||
void SetFactionVisibleForFactionId(uint32 FactionId);
|
||||
void SetFactionAtWar(RepListID repListID, bool atWar);
|
||||
void SetFactionInactive(RepListID repListID, bool inactive);
|
||||
void SetFactionVisible(FactionTemplateEntry const* factionTemplateEntry);
|
||||
void SetFactionVisible(FactionEntry const* factionEntry);
|
||||
ReputationRank const* GetForcedRankIfAny(FactionTemplateEntry const* factionTemplateEntry) const
|
||||
{
|
||||
ForcedReactions::const_iterator forceItr = m_forcedReactions.find(factionTemplateEntry->faction);
|
||||
return forceItr != m_forcedReactions.end() ? &forceItr->second : NULL;
|
||||
}
|
||||
void ApplyForceReaction(uint32 faction_id,ReputationRank rank,bool apply);
|
||||
void SendForceReactions();
|
||||
void SendFactionStates() const;
|
||||
|
||||
void UpdateSkillsForLevel();
|
||||
void UpdateSkillsToMaxSkillsForLevel(); // for .levelup
|
||||
void ModifySkillBonus(uint32 skillid,int32 val, bool talent);
|
||||
|
|
@ -2335,15 +2346,20 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
|
||||
DeclinedName *m_declinedname;
|
||||
Runes *m_runes;
|
||||
AchievementMgr m_achievementMgr;
|
||||
private:
|
||||
// internal common parts for CanStore/StoreItem functions
|
||||
uint8 _CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool swap, Item *pSrcItem ) const;
|
||||
uint8 _CanStoreItem_InBag( uint8 bag, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool merge, bool non_specialized, Item *pSrcItem, uint8 skip_bag, uint8 skip_slot ) const;
|
||||
uint8 _CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool merge, Item *pSrcItem, uint8 skip_bag, uint8 skip_slot ) const;
|
||||
Item* _StoreItem( uint16 pos, Item *pItem, uint32 count, bool clone, bool update );
|
||||
void UpdateKnownCurrencies(uint32 itemId, bool apply);
|
||||
|
||||
void UpdateKnownCurrencies(uint32 itemId, bool apply);
|
||||
int32 CalculateReputationGain(uint32 creatureOrQuestLevel, int32 rep, bool for_quest);
|
||||
void SetFactionVisible(FactionState* faction);
|
||||
void SetFactionAtWar(FactionState* faction, bool atWar);
|
||||
void SetFactionInactive(FactionState* faction, bool inactive);
|
||||
bool ModifyOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
|
||||
bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing);
|
||||
void AdjustQuestReqItemCount( Quest const* pQuest, QuestStatusData& questStatusData );
|
||||
|
||||
GridReference<Player> m_gridRef;
|
||||
|
|
@ -2356,6 +2372,10 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
uint8 m_MirrorTimerFlags;
|
||||
uint8 m_MirrorTimerFlagsLast;
|
||||
bool m_isInWater;
|
||||
|
||||
AchievementMgr m_achievementMgr;
|
||||
FactionStateList m_factions;
|
||||
ForcedReactions m_forcedReactions;
|
||||
};
|
||||
|
||||
void AddItemsSetItem(Player*player,Item *item);
|
||||
|
|
|
|||
|
|
@ -2917,20 +2917,8 @@ void Aura::HandleForceReaction(bool apply, bool Real)
|
|||
uint32 faction_id = m_modifier.m_miscvalue;
|
||||
uint32 faction_rank = m_modifier.m_amount;
|
||||
|
||||
if(apply)
|
||||
player->m_forcedReactions[faction_id] = ReputationRank(faction_rank);
|
||||
else
|
||||
player->m_forcedReactions.erase(faction_id);
|
||||
|
||||
WorldPacket data;
|
||||
data.Initialize(SMSG_SET_FORCED_REACTIONS, 4+player->m_forcedReactions.size()*(4+4));
|
||||
data << uint32(player->m_forcedReactions.size());
|
||||
for(ForcedReactions::const_iterator itr = player->m_forcedReactions.begin(); itr != player->m_forcedReactions.end(); ++itr)
|
||||
{
|
||||
data << uint32(itr->first); // faction_id (Faction.dbc)
|
||||
data << uint32(itr->second); // reputation rank
|
||||
}
|
||||
player->SendDirectMessage(&data);
|
||||
player->ApplyForceReaction(faction_id,ReputationRank(faction_rank),apply);
|
||||
player->SendForceReactions();
|
||||
}
|
||||
|
||||
void Aura::HandleAuraModSkill(bool apply, bool Real)
|
||||
|
|
|
|||
|
|
@ -6968,9 +6968,8 @@ bool Unit::IsHostileTo(Unit const* unit) const
|
|||
// forced reaction
|
||||
if(target_faction->faction)
|
||||
{
|
||||
ForcedReactions::const_iterator forceItr = ((Player*)tester)->m_forcedReactions.find(target_faction->faction);
|
||||
if(forceItr!=((Player*)tester)->m_forcedReactions.end())
|
||||
return forceItr->second <= REP_HOSTILE;
|
||||
if(ReputationRank const* force =((Player*)tester)->GetForcedRankIfAny(target_faction))
|
||||
return *force <= REP_HOSTILE;
|
||||
|
||||
// if faction have reputation then hostile state for tester at 100% dependent from at_war state
|
||||
if(FactionEntry const* raw_target_faction = sFactionStore.LookupEntry(target_faction->faction))
|
||||
|
|
@ -6985,9 +6984,8 @@ bool Unit::IsHostileTo(Unit const* unit) const
|
|||
// forced reaction
|
||||
if(tester_faction->faction)
|
||||
{
|
||||
ForcedReactions::const_iterator forceItr = ((Player const*)target)->m_forcedReactions.find(tester_faction->faction);
|
||||
if(forceItr!=((Player const*)target)->m_forcedReactions.end())
|
||||
return forceItr->second <= REP_HOSTILE;
|
||||
if(ReputationRank const* force = ((Player*)target)->GetForcedRankIfAny(tester_faction))
|
||||
return *force <= REP_HOSTILE;
|
||||
|
||||
// apply reputation state
|
||||
FactionEntry const* raw_tester_faction = sFactionStore.LookupEntry(tester_faction->faction);
|
||||
|
|
@ -7083,9 +7081,8 @@ bool Unit::IsFriendlyTo(Unit const* unit) const
|
|||
// forced reaction
|
||||
if(target_faction->faction)
|
||||
{
|
||||
ForcedReactions::const_iterator forceItr = ((Player const*)tester)->m_forcedReactions.find(target_faction->faction);
|
||||
if(forceItr!=((Player const*)tester)->m_forcedReactions.end())
|
||||
return forceItr->second >= REP_FRIENDLY;
|
||||
if(ReputationRank const* force =((Player*)tester)->GetForcedRankIfAny(target_faction))
|
||||
return *force >= REP_FRIENDLY;
|
||||
|
||||
// if faction have reputation then friendly state for tester at 100% dependent from at_war state
|
||||
if(FactionEntry const* raw_target_faction = sFactionStore.LookupEntry(target_faction->faction))
|
||||
|
|
@ -7100,9 +7097,8 @@ bool Unit::IsFriendlyTo(Unit const* unit) const
|
|||
// forced reaction
|
||||
if(tester_faction->faction)
|
||||
{
|
||||
ForcedReactions::const_iterator forceItr = ((Player const*)target)->m_forcedReactions.find(tester_faction->faction);
|
||||
if(forceItr!=((Player const*)target)->m_forcedReactions.end())
|
||||
return forceItr->second >= REP_FRIENDLY;
|
||||
if(ReputationRank const* force =((Player*)target)->GetForcedRankIfAny(tester_faction))
|
||||
return *force >= REP_FRIENDLY;
|
||||
|
||||
// apply reputation state
|
||||
if(FactionEntry const* raw_tester_faction = sFactionStore.LookupEntry(tester_faction->faction))
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "7537"
|
||||
#define REVISION_NR "7538"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue