mirror of
https://github.com/mangosfour/server.git
synced 2025-12-16 04:37:00 +00:00
[10820] Speedup and cleanup quest counters update code.
* Always use QuestStatus data for current counters set This let be sure that that we not have non sync values in client view and server state. * Remove some access functions for quest update fields that expected to be only updated/set.
This commit is contained in:
parent
d560503a03
commit
534d43daa1
3 changed files with 10 additions and 13 deletions
|
|
@ -14524,7 +14524,7 @@ void Player::KilledMonsterCredit( uint32 entry, ObjectGuid guid )
|
||||||
if (q_status.uState != QUEST_NEW)
|
if (q_status.uState != QUEST_NEW)
|
||||||
q_status.uState = QUEST_CHANGED;
|
q_status.uState = QUEST_CHANGED;
|
||||||
|
|
||||||
SendQuestUpdateAddCreatureOrGo( qInfo, guid, j, curkillcount, addkillcount);
|
SendQuestUpdateAddCreatureOrGo( qInfo, guid, j, q_status.m_creatureOrGOcount[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CanCompleteQuest( questid ))
|
if (CanCompleteQuest( questid ))
|
||||||
|
|
@ -14600,7 +14600,7 @@ void Player::CastedCreatureOrGO( uint32 entry, ObjectGuid guid, uint32 spell_id,
|
||||||
if (q_status.uState != QUEST_NEW)
|
if (q_status.uState != QUEST_NEW)
|
||||||
q_status.uState = QUEST_CHANGED;
|
q_status.uState = QUEST_CHANGED;
|
||||||
|
|
||||||
SendQuestUpdateAddCreatureOrGo( qInfo, guid, j, curCastCount, addCastCount);
|
SendQuestUpdateAddCreatureOrGo( qInfo, guid, j, q_status.m_creatureOrGOcount[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CanCompleteQuest(questid))
|
if (CanCompleteQuest(questid))
|
||||||
|
|
@ -14654,7 +14654,7 @@ void Player::TalkedToCreature( uint32 entry, ObjectGuid guid )
|
||||||
q_status.m_creatureOrGOcount[j] = curTalkCount + addTalkCount;
|
q_status.m_creatureOrGOcount[j] = curTalkCount + addTalkCount;
|
||||||
if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED;
|
if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED;
|
||||||
|
|
||||||
SendQuestUpdateAddCreatureOrGo( qInfo, guid, j, curTalkCount, addTalkCount);
|
SendQuestUpdateAddCreatureOrGo( qInfo, guid, j, q_status.m_creatureOrGOcount[j]);
|
||||||
}
|
}
|
||||||
if ( CanCompleteQuest( questid ) )
|
if ( CanCompleteQuest( questid ) )
|
||||||
CompleteQuest( questid );
|
CompleteQuest( questid );
|
||||||
|
|
@ -14901,9 +14901,9 @@ void Player::SendQuestUpdateAddItem( Quest const* /*pQuest*/, uint32 /*item_idx*
|
||||||
GetSession()->SendPacket( &data );
|
GetSession()->SendPacket( &data );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, ObjectGuid guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count )
|
void Player::SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, ObjectGuid guid, uint32 creatureOrGO_idx, uint32 count)
|
||||||
{
|
{
|
||||||
MANGOS_ASSERT(old_count + add_count < 65536 && "mob/GO count store in 16 bits 2^16 = 65536 (0..65536)");
|
MANGOS_ASSERT(count < 65536 && "mob/GO count store in 16 bits 2^16 = 65536 (0..65536)");
|
||||||
|
|
||||||
int32 entry = pQuest->ReqCreatureOrGOId[ creatureOrGO_idx ];
|
int32 entry = pQuest->ReqCreatureOrGOId[ creatureOrGO_idx ];
|
||||||
if (entry < 0)
|
if (entry < 0)
|
||||||
|
|
@ -14914,14 +14914,14 @@ void Player::SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, ObjectGuid gui
|
||||||
DEBUG_LOG( "WORLD: Sent SMSG_QUESTUPDATE_ADD_KILL" );
|
DEBUG_LOG( "WORLD: Sent SMSG_QUESTUPDATE_ADD_KILL" );
|
||||||
data << uint32(pQuest->GetQuestId());
|
data << uint32(pQuest->GetQuestId());
|
||||||
data << uint32(entry);
|
data << uint32(entry);
|
||||||
data << uint32(old_count + add_count);
|
data << uint32(count);
|
||||||
data << uint32(pQuest->ReqCreatureOrGOCount[ creatureOrGO_idx ]);
|
data << uint32(pQuest->ReqCreatureOrGOCount[ creatureOrGO_idx ]);
|
||||||
data << guid;
|
data << guid;
|
||||||
GetSession()->SendPacket(&data);
|
GetSession()->SendPacket(&data);
|
||||||
|
|
||||||
uint16 log_slot = FindQuestSlot( pQuest->GetQuestId() );
|
uint16 log_slot = FindQuestSlot( pQuest->GetQuestId() );
|
||||||
if( log_slot < MAX_QUEST_LOG_SIZE)
|
if (log_slot < MAX_QUEST_LOG_SIZE)
|
||||||
SetQuestSlotCounter(log_slot,creatureOrGO_idx,GetQuestSlotCounter(log_slot,creatureOrGO_idx)+add_count);
|
SetQuestSlotCounter(log_slot, creatureOrGO_idx, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************/
|
/*********************************************************/
|
||||||
|
|
|
||||||
|
|
@ -1447,9 +1447,6 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
|
|
||||||
uint16 FindQuestSlot( uint32 quest_id ) const;
|
uint16 FindQuestSlot( uint32 quest_id ) const;
|
||||||
uint32 GetQuestSlotQuestId(uint16 slot) const { return GetUInt32Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET); }
|
uint32 GetQuestSlotQuestId(uint16 slot) const { return GetUInt32Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET); }
|
||||||
uint32 GetQuestSlotState(uint16 slot) const { return GetUInt32Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET); }
|
|
||||||
uint16 GetQuestSlotCounter(uint16 slot, uint8 counter) const { return (uint16)(GetUInt64Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_COUNTS_OFFSET) >> (counter * 16)); }
|
|
||||||
uint32 GetQuestSlotTime(uint16 slot) const { return GetUInt32Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_TIME_OFFSET); }
|
|
||||||
void SetQuestSlot(uint16 slot, uint32 quest_id, uint32 timer = 0)
|
void SetQuestSlot(uint16 slot, uint32 quest_id, uint32 timer = 0)
|
||||||
{
|
{
|
||||||
SetUInt32Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET, quest_id);
|
SetUInt32Value(PLAYER_QUEST_LOG_1_1 + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET, quest_id);
|
||||||
|
|
@ -1503,7 +1500,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
void SendQuestConfirmAccept(Quest const* pQuest, Player* pReceiver);
|
void SendQuestConfirmAccept(Quest const* pQuest, Player* pReceiver);
|
||||||
void SendPushToPartyResponse( Player *pPlayer, uint32 msg );
|
void SendPushToPartyResponse( Player *pPlayer, uint32 msg );
|
||||||
void SendQuestUpdateAddItem( Quest const* pQuest, uint32 item_idx, uint32 count );
|
void SendQuestUpdateAddItem( Quest const* pQuest, uint32 item_idx, uint32 count );
|
||||||
void SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, ObjectGuid guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count );
|
void SendQuestUpdateAddCreatureOrGo(Quest const* pQuest, ObjectGuid guid, uint32 creatureOrGO_idx, uint32 count);
|
||||||
|
|
||||||
uint64 GetDivider() { return m_divider; }
|
uint64 GetDivider() { return m_divider; }
|
||||||
void SetDivider( uint64 guid ) { m_divider = guid; }
|
void SetDivider( uint64 guid ) { m_divider = guid; }
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "10819"
|
#define REVISION_NR "10820"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue