mirror of
https://github.com/mangosfour/server.git
synced 2025-12-17 16:37:00 +00:00
Fixed quests.
Fixed bg list packet.
This commit is contained in:
parent
292f6189ea
commit
3db72991f9
4 changed files with 59 additions and 37 deletions
|
|
@ -1250,7 +1250,7 @@ void BattleGroundMgr::BuildBattleGroundStatusPacket(WorldPacket *data, BattleGro
|
||||||
*data << uint32(bg->GetMapId()); // map id
|
*data << uint32(bg->GetMapId()); // map id
|
||||||
*data << uint32(Time1); // time to bg auto leave, 0 at bg start, 120000 after bg end, milliseconds
|
*data << uint32(Time1); // time to bg auto leave, 0 at bg start, 120000 after bg end, milliseconds
|
||||||
*data << uint32(Time2); // time from bg start, milliseconds
|
*data << uint32(Time2); // time from bg start, milliseconds
|
||||||
*data << uint8(0x1); // unk sometimes 0x0!
|
*data << uint8(0x1); // Lua_GetBattlefieldArenaFaction (bool)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sLog.outError("Unknown BG status!");
|
sLog.outError("Unknown BG status!");
|
||||||
|
|
@ -1802,17 +1802,32 @@ void BattleGroundMgr::BuildBattleGroundListPacket(WorldPacket *data, const uint6
|
||||||
*data << uint64(guid); // battlemaster guid
|
*data << uint64(guid); // battlemaster guid
|
||||||
*data << uint8(fromWhere); // from where you joined
|
*data << uint8(fromWhere); // from where you joined
|
||||||
*data << uint32(bgTypeId); // battleground id
|
*data << uint32(bgTypeId); // battleground id
|
||||||
|
*data << uint8(0); // unk
|
||||||
|
*data << uint8(0); // unk
|
||||||
|
|
||||||
|
// Rewards
|
||||||
|
*data << uint8(0); // 3.3.3 hasWin
|
||||||
|
*data << uint32(0); // 3.3.3 winHonor
|
||||||
|
*data << uint32(0); // 3.3.3 winArena
|
||||||
|
*data << uint32(0); // 3.3.3 lossHonor
|
||||||
|
|
||||||
|
uint8 isRandom = 0;
|
||||||
|
*data << uint8(isRandom); // 3.3.3 isRandom
|
||||||
|
if(isRandom)
|
||||||
|
{
|
||||||
|
// Rewards (random)
|
||||||
|
*data << uint8(0); // 3.3.3 hasWin_Random
|
||||||
|
*data << uint32(0); // 3.3.3 winHonor_Random
|
||||||
|
*data << uint32(0); // 3.3.3 winArena_Random
|
||||||
|
*data << uint32(0); // 3.3.3 lossHonor_Random
|
||||||
|
}
|
||||||
|
|
||||||
if(bgTypeId == BATTLEGROUND_AA) // arena
|
if(bgTypeId == BATTLEGROUND_AA) // arena
|
||||||
{
|
{
|
||||||
*data << uint8(4); // unk
|
*data << uint32(0); // arena - no instances showed
|
||||||
*data << uint8(0); // unk
|
|
||||||
*data << uint32(0); // unk (count?)
|
|
||||||
}
|
}
|
||||||
else // battleground
|
else // battleground
|
||||||
{
|
{
|
||||||
*data << uint8(0); // unk, different for each bg type
|
|
||||||
*data << uint8(0); // unk
|
|
||||||
|
|
||||||
size_t count_pos = data->wpos();
|
size_t count_pos = data->wpos();
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
*data << uint32(0); // number of bg instances
|
*data << uint32(0); // number of bg instances
|
||||||
|
|
|
||||||
|
|
@ -80,21 +80,24 @@ void GossipMenu::AddMenuItem(uint8 Icon, char const* Message, uint32 dtSender, u
|
||||||
|
|
||||||
uint32 GossipMenu::MenuItemSender( unsigned int ItemId )
|
uint32 GossipMenu::MenuItemSender( unsigned int ItemId )
|
||||||
{
|
{
|
||||||
if ( ItemId >= m_gItems.size() ) return 0;
|
if ( ItemId >= m_gItems.size() )
|
||||||
|
return 0;
|
||||||
|
|
||||||
return m_gItems[ ItemId ].m_gSender;
|
return m_gItems[ ItemId ].m_gSender;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 GossipMenu::MenuItemAction( unsigned int ItemId )
|
uint32 GossipMenu::MenuItemAction( unsigned int ItemId )
|
||||||
{
|
{
|
||||||
if ( ItemId >= m_gItems.size() ) return 0;
|
if ( ItemId >= m_gItems.size() )
|
||||||
|
return 0;
|
||||||
|
|
||||||
return m_gItems[ ItemId ].m_gOptionId;
|
return m_gItems[ ItemId ].m_gOptionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GossipMenu::MenuItemCoded( unsigned int ItemId )
|
bool GossipMenu::MenuItemCoded( unsigned int ItemId )
|
||||||
{
|
{
|
||||||
if ( ItemId >= m_gItems.size() ) return 0;
|
if ( ItemId >= m_gItems.size() )
|
||||||
|
return 0;
|
||||||
|
|
||||||
return m_gItems[ ItemId ].m_gCoded;
|
return m_gItems[ ItemId ].m_gCoded;
|
||||||
}
|
}
|
||||||
|
|
@ -194,8 +197,9 @@ void PlayerMenu::CloseGossip()
|
||||||
void PlayerMenu::SendPointOfInterest( float X, float Y, uint32 Icon, uint32 Flags, uint32 Data, char const * locName )
|
void PlayerMenu::SendPointOfInterest( float X, float Y, uint32 Icon, uint32 Flags, uint32 Data, char const * locName )
|
||||||
{
|
{
|
||||||
WorldPacket data( SMSG_GOSSIP_POI, (4+4+4+4+4+10) ); // guess size
|
WorldPacket data( SMSG_GOSSIP_POI, (4+4+4+4+4+10) ); // guess size
|
||||||
data << Flags;
|
data << uint32(Flags);
|
||||||
data << X << Y;
|
data << float(X);
|
||||||
|
data << float(Y);
|
||||||
data << uint32(Icon);
|
data << uint32(Icon);
|
||||||
data << uint32(Data);
|
data << uint32(Data);
|
||||||
data << locName;
|
data << locName;
|
||||||
|
|
@ -346,7 +350,8 @@ QuestMenu::~QuestMenu()
|
||||||
void QuestMenu::AddMenuItem( uint32 QuestId, uint8 Icon)
|
void QuestMenu::AddMenuItem( uint32 QuestId, uint8 Icon)
|
||||||
{
|
{
|
||||||
Quest const* qinfo = sObjectMgr.GetQuestTemplate(QuestId);
|
Quest const* qinfo = sObjectMgr.GetQuestTemplate(QuestId);
|
||||||
if (!qinfo) return;
|
if (!qinfo)
|
||||||
|
return;
|
||||||
|
|
||||||
ASSERT( m_qItems.size() <= GOSSIP_MAX_MENU_ITEMS );
|
ASSERT( m_qItems.size() <= GOSSIP_MAX_MENU_ITEMS );
|
||||||
|
|
||||||
|
|
@ -387,8 +392,8 @@ void PlayerMenu::SendQuestGiverQuestList( QEmote eEmote, const std::string& Titl
|
||||||
QuestMenuItem const& qmi = mQuestMenu.GetItem(count);
|
QuestMenuItem const& qmi = mQuestMenu.GetItem(count);
|
||||||
|
|
||||||
uint32 questID = qmi.m_qId;
|
uint32 questID = qmi.m_qId;
|
||||||
Quest const *pQuest = sObjectMgr.GetQuestTemplate(questID);
|
|
||||||
if(pQuest)
|
if(Quest const *pQuest = sObjectMgr.GetQuestTemplate(questID))
|
||||||
{
|
{
|
||||||
std::string title = pQuest->GetTitle();
|
std::string title = pQuest->GetTitle();
|
||||||
|
|
||||||
|
|
@ -434,8 +439,7 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID
|
||||||
int loc_idx = pSession->GetSessionDbLocaleIndex();
|
int loc_idx = pSession->GetSessionDbLocaleIndex();
|
||||||
if (loc_idx >= 0)
|
if (loc_idx >= 0)
|
||||||
{
|
{
|
||||||
QuestLocale const *ql = sObjectMgr.GetQuestLocale(pQuest->GetQuestId());
|
if (QuestLocale const *ql = sObjectMgr.GetQuestLocale(pQuest->GetQuestId()))
|
||||||
if (ql)
|
|
||||||
{
|
{
|
||||||
if (ql->Title.size() > (size_t)loc_idx && !ql->Title[loc_idx].empty())
|
if (ql->Title.size() > (size_t)loc_idx && !ql->Title[loc_idx].empty())
|
||||||
Title = ql->Title[loc_idx];
|
Title = ql->Title[loc_idx];
|
||||||
|
|
@ -453,11 +457,10 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID
|
||||||
data << Title;
|
data << Title;
|
||||||
data << Details;
|
data << Details;
|
||||||
data << Objectives;
|
data << Objectives;
|
||||||
data << uint8(ActivateAccept ? 1 : 0); // auto finish?
|
data << uint8(ActivateAccept ? 1 : 0); // auto finish
|
||||||
|
data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags
|
||||||
data << uint32(pQuest->GetSuggestedPlayers());
|
data << uint32(pQuest->GetSuggestedPlayers());
|
||||||
data << uint32(0); // flags PvP
|
data << uint8(0); // IsFinished? value is sent back to server in quest accept packet
|
||||||
data << uint8(0); // value is sent back to server in quest accept packet
|
|
||||||
//data << uint32(0); // auto accept?
|
|
||||||
|
|
||||||
if (pQuest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
|
if (pQuest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
|
||||||
{
|
{
|
||||||
|
|
@ -616,7 +619,7 @@ void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest )
|
||||||
|
|
||||||
// rewarded honor points
|
// rewarded honor points
|
||||||
data << uint32(pQuest->GetRewHonorAddition());
|
data << uint32(pQuest->GetRewHonorAddition());
|
||||||
data << float(pQuest->GetRewHonorMultiplier()); // new reward honor (multipled by ~62 at client side)
|
data << float(pQuest->GetRewHonorMultiplier()); // new reward honor (multiplied by ~62 at client side)
|
||||||
|
|
||||||
data << uint32(pQuest->GetSrcItemId()); // source item id
|
data << uint32(pQuest->GetSrcItemId()); // source item id
|
||||||
data << uint32(pQuest->GetFlags() & 0xFFFF); // quest flags
|
data << uint32(pQuest->GetFlags() & 0xFFFF); // quest flags
|
||||||
|
|
@ -723,9 +726,9 @@ void PlayerMenu::SendQuestGiverOfferReward( Quest const* pQuest, uint64 npcGUID,
|
||||||
data << Title;
|
data << Title;
|
||||||
data << OfferRewardText;
|
data << OfferRewardText;
|
||||||
|
|
||||||
data << uint8(EnableNext ? 1 : 0); // Auto Finish?
|
data << uint8(EnableNext ? 1 : 0); // Auto Finish
|
||||||
data << uint32(0); // 3.3.3
|
data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags
|
||||||
data << uint32(0); // SuggestedGroupNum
|
data << uint32(pQuest->GetSuggestedPlayers()); // SuggestedGroupNum
|
||||||
|
|
||||||
uint32 EmoteCount = 0;
|
uint32 EmoteCount = 0;
|
||||||
for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||||
|
|
@ -846,11 +849,12 @@ void PlayerMenu::SendQuestGiverRequestItems( Quest const *pQuest, uint64 npcGUID
|
||||||
|
|
||||||
// Close Window after cancel
|
// Close Window after cancel
|
||||||
if (CloseOnCancel)
|
if (CloseOnCancel)
|
||||||
data << uint32(0x01); // auto finish?
|
data << uint32(0x01); // auto finish
|
||||||
else
|
else
|
||||||
data << uint32(0x00);
|
data << uint32(0x00);
|
||||||
|
|
||||||
data << uint32(0x00); // SuggestedGroupNum
|
data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags
|
||||||
|
data << uint32(pQuest->GetSuggestedPlayers()); // SuggestedGroupNum
|
||||||
|
|
||||||
// Required Money
|
// Required Money
|
||||||
data << uint32(pQuest->GetRewOrReqMoney() < 0 ? -pQuest->GetRewOrReqMoney() : 0);
|
data << uint32(pQuest->GetRewOrReqMoney() < 0 ? -pQuest->GetRewOrReqMoney() : 0);
|
||||||
|
|
@ -871,14 +875,14 @@ void PlayerMenu::SendQuestGiverRequestItems( Quest const *pQuest, uint64 npcGUID
|
||||||
data << uint32(0);
|
data << uint32(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !Completable )
|
if ( !Completable ) // Completable = flags1 && flags2 && flags3 && flags4
|
||||||
data << uint32(0x00);
|
data << uint32(0x00); // flags1
|
||||||
else
|
else
|
||||||
data << uint32(0x03);
|
data << uint32(0x03);
|
||||||
|
|
||||||
data << uint32(0x04);
|
data << uint32(0x04); // flags2
|
||||||
data << uint32(0x08);
|
data << uint32(0x08); // flags3
|
||||||
data << uint32(0x10);
|
data << uint32(0x10); // flags4
|
||||||
|
|
||||||
pSession->SendPacket( &data );
|
pSession->SendPacket( &data );
|
||||||
sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId() );
|
sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId() );
|
||||||
|
|
|
||||||
|
|
@ -603,6 +603,7 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8
|
||||||
SetUInt32Value(PLAYER_BYTES, (skin | (face << 8) | (hairStyle << 16) | (hairColor << 24)));
|
SetUInt32Value(PLAYER_BYTES, (skin | (face << 8) | (hairStyle << 16) | (hairColor << 24)));
|
||||||
SetUInt32Value(PLAYER_BYTES_2, (facialHair | (0x00 << 8) | (0x00 << 16) | (0x02 << 24)));
|
SetUInt32Value(PLAYER_BYTES_2, (facialHair | (0x00 << 8) | (0x00 << 16) | (0x02 << 24)));
|
||||||
SetByteValue(PLAYER_BYTES_3, 0, gender);
|
SetByteValue(PLAYER_BYTES_3, 0, gender);
|
||||||
|
SetByteValue(PLAYER_BYTES_3, 3, 0); // BattlefieldArenaFaction (0 or 1)
|
||||||
|
|
||||||
SetUInt32Value( PLAYER_GUILDID, 0 );
|
SetUInt32Value( PLAYER_GUILDID, 0 );
|
||||||
SetUInt32Value( PLAYER_GUILDRANK, 0 );
|
SetUInt32Value( PLAYER_GUILDRANK, 0 );
|
||||||
|
|
|
||||||
|
|
@ -135,13 +135,13 @@ enum __QuestFlags
|
||||||
QUEST_FLAGS_AUTO_REWARDED = 0x00000400, // These quests are automatically rewarded on quest complete and they will never appear in quest log client side.
|
QUEST_FLAGS_AUTO_REWARDED = 0x00000400, // These quests are automatically rewarded on quest complete and they will never appear in quest log client side.
|
||||||
QUEST_FLAGS_TBC_RACES = 0x00000800, // Not used currently: Blood elf/Draenei starting zone quests
|
QUEST_FLAGS_TBC_RACES = 0x00000800, // Not used currently: Blood elf/Draenei starting zone quests
|
||||||
QUEST_FLAGS_DAILY = 0x00001000, // Used to know quest is Daily one
|
QUEST_FLAGS_DAILY = 0x00001000, // Used to know quest is Daily one
|
||||||
QUEST_FLAGS_UNK3 = 0x00002000, // activates PvP?
|
QUEST_FLAGS_FLAGS_PVP = 0x00002000, // activates PvP on accept
|
||||||
QUEST_FLAGS_UNK4 = 0x00004000, // ? Membership Card Renewal
|
QUEST_FLAGS_UNK4 = 0x00004000, // ? Membership Card Renewal
|
||||||
QUEST_FLAGS_WEEKLY = 0x00008000, // Not used currently: Weekly quests
|
QUEST_FLAGS_WEEKLY = 0x00008000, // Not used currently: Weekly quests
|
||||||
QUEST_FLAGS_AUTOCOMPLETE = 0x00010000, // auto complete
|
QUEST_FLAGS_AUTOCOMPLETE = 0x00010000, // auto complete
|
||||||
QUEST_FLAGS_UNK5 = 0x00020000, // has something to do with ReqItemId and SrcItemId
|
QUEST_FLAGS_UNK5 = 0x00020000, // has something to do with ReqItemId and SrcItemId
|
||||||
QUEST_FLAGS_UNK6 = 0x00040000, // use Objective text as Complete text
|
QUEST_FLAGS_UNK6 = 0x00040000, // use Objective text as Complete text
|
||||||
QUEST_FLAGS_LOW_LEVEL = 0x00080000, // quests in starting areas
|
QUEST_FLAGS_AUTO_ACCEPT = 0x00080000, // quests in starting areas
|
||||||
|
|
||||||
// Mangos flags for set SpecialFlags in DB if required but used only at server
|
// Mangos flags for set SpecialFlags in DB if required but used only at server
|
||||||
QUEST_MANGOS_FLAGS_REPEATABLE = 0x01000000, // Set by 1 in SpecialFlags from DB
|
QUEST_MANGOS_FLAGS_REPEATABLE = 0x01000000, // Set by 1 in SpecialFlags from DB
|
||||||
|
|
@ -239,6 +239,8 @@ class Quest
|
||||||
bool IsAutoComplete() const { return QuestMethod ? false : true; }
|
bool IsAutoComplete() const { return QuestMethod ? false : true; }
|
||||||
uint32 GetFlags() const { return QuestFlags; }
|
uint32 GetFlags() const { return QuestFlags; }
|
||||||
bool IsDaily() const { return QuestFlags & QUEST_FLAGS_DAILY; }
|
bool IsDaily() const { return QuestFlags & QUEST_FLAGS_DAILY; }
|
||||||
|
bool IsWeekly() const { return QuestFlags & QUEST_FLAGS_WEEKLY; }
|
||||||
|
bool IsAutoAccept() const { return QuestFlags & QUEST_FLAGS_AUTO_ACCEPT; }
|
||||||
|
|
||||||
// multiple values
|
// multiple values
|
||||||
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];
|
std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue