mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[7226] Avoid 2 mQuestStatus[quest_id] calls from AddQuest code for speed and possible aliasing problems.
Original patch provided by zhenya.
This commit is contained in:
parent
a1eaf1af6f
commit
2c7216ac8c
3 changed files with 16 additions and 14 deletions
|
|
@ -12533,8 +12533,6 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver )
|
|||
|
||||
// if not exist then created with set uState==NEW and rewarded=false
|
||||
QuestStatusData& questStatusData = mQuestStatus[quest_id];
|
||||
if (questStatusData.uState != QUEST_NEW)
|
||||
questStatusData.uState = QUEST_CHANGED;
|
||||
|
||||
// check for repeatable quests status reset
|
||||
questStatusData.m_status = QUEST_STATUS_INCOMPLETE;
|
||||
|
|
@ -12542,18 +12540,18 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver )
|
|||
|
||||
if ( pQuest->HasFlag( QUEST_MANGOS_FLAGS_DELIVER ) )
|
||||
{
|
||||
for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++)
|
||||
for(int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
questStatusData.m_itemcount[i] = 0;
|
||||
}
|
||||
|
||||
if ( pQuest->HasFlag(QUEST_MANGOS_FLAGS_KILL_OR_CAST | QUEST_MANGOS_FLAGS_SPEAKTO) )
|
||||
{
|
||||
for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++)
|
||||
for(int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
questStatusData.m_creatureOrGOcount[i] = 0;
|
||||
}
|
||||
|
||||
GiveQuestSourceItem( pQuest );
|
||||
AdjustQuestReqItemCount( pQuest );
|
||||
AdjustQuestReqItemCount( pQuest, questStatusData );
|
||||
|
||||
if( pQuest->GetRepObjectiveFaction() )
|
||||
SetFactionVisibleForFactionId(pQuest->GetRepObjectiveFaction());
|
||||
|
|
@ -12576,6 +12574,9 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver )
|
|||
|
||||
SetQuestSlot(log_slot, quest_id, qtime);
|
||||
|
||||
if (questStatusData.uState != QUEST_NEW)
|
||||
questStatusData.uState = QUEST_CHANGED;
|
||||
|
||||
//starting initial quest script
|
||||
if(questGiver && pQuest->GetQuestStartScript()!=0)
|
||||
sWorld.ScriptsStart(sQuestStartScripts, pQuest->GetQuestStartScript(), questGiver, this);
|
||||
|
|
@ -12805,8 +12806,9 @@ void Player::FailTimedQuest( uint32 quest_id )
|
|||
{
|
||||
QuestStatusData& q_status = mQuestStatus[quest_id];
|
||||
|
||||
if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED;
|
||||
q_status.m_timer = 0;
|
||||
if (q_status.uState != QUEST_NEW)
|
||||
q_status.uState = QUEST_CHANGED;
|
||||
|
||||
IncompleteQuest( quest_id );
|
||||
|
||||
|
|
@ -13292,18 +13294,18 @@ uint32 Player::GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry)
|
|||
if( !qInfo )
|
||||
return 0;
|
||||
|
||||
for (int j = 0; j < QUEST_OBJECTIVES_COUNT; j++)
|
||||
for (int j = 0; j < QUEST_OBJECTIVES_COUNT; ++j)
|
||||
if ( qInfo->ReqCreatureOrGOId[j] == entry )
|
||||
return mQuestStatus[quest_id].m_creatureOrGOcount[j];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Player::AdjustQuestReqItemCount( Quest const* pQuest )
|
||||
void Player::AdjustQuestReqItemCount( Quest const* pQuest, QuestStatusData& questStatusData )
|
||||
{
|
||||
if ( pQuest->HasFlag( QUEST_MANGOS_FLAGS_DELIVER ) )
|
||||
{
|
||||
for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++)
|
||||
for(int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
uint32 reqitemcount = pQuest->ReqItemCount[i];
|
||||
if( reqitemcount != 0 )
|
||||
|
|
@ -13311,9 +13313,8 @@ void Player::AdjustQuestReqItemCount( Quest const* pQuest )
|
|||
uint32 quest_id = pQuest->GetQuestId();
|
||||
uint32 curitemcount = GetItemCount(pQuest->ReqItemId[i],true);
|
||||
|
||||
QuestStatusData& q_status = mQuestStatus[quest_id];
|
||||
q_status.m_itemcount[i] = std::min(curitemcount, reqitemcount);
|
||||
if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED;
|
||||
questStatusData.m_itemcount[i] = std::min(curitemcount, reqitemcount);
|
||||
if (questStatusData.uState != QUEST_NEW) questStatusData.uState = QUEST_CHANGED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1261,7 +1261,6 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
}
|
||||
}
|
||||
uint32 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry);
|
||||
void AdjustQuestReqItemCount( Quest const* pQuest );
|
||||
void AreaExploredOrEventHappens( uint32 questId );
|
||||
void GroupEventHappens( uint32 questId, WorldObject const* pEventObject );
|
||||
void ItemAddedQuestCheck( uint32 entry, uint32 count );
|
||||
|
|
@ -2393,6 +2392,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
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 AdjustQuestReqItemCount( Quest const* pQuest, QuestStatusData& questStatusData );
|
||||
|
||||
GridReference<Player> m_gridRef;
|
||||
MapReference m_mapRef;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "7225"
|
||||
#define REVISION_NR "7226"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue