diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cpp index 338853cb4..2d7e77922 100644 --- a/src/game/BattleGroundMgr.cpp +++ b/src/game/BattleGroundMgr.cpp @@ -1250,7 +1250,7 @@ void BattleGroundMgr::BuildBattleGroundStatusPacket(WorldPacket *data, BattleGro *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(Time2); // time from bg start, milliseconds - *data << uint8(0x1); // unk sometimes 0x0! + *data << uint8(0x1); // Lua_GetBattlefieldArenaFaction (bool) break; default: sLog.outError("Unknown BG status!"); @@ -1802,17 +1802,32 @@ void BattleGroundMgr::BuildBattleGroundListPacket(WorldPacket *data, const uint6 *data << uint64(guid); // battlemaster guid *data << uint8(fromWhere); // from where you joined *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 { - *data << uint8(4); // unk - *data << uint8(0); // unk - *data << uint32(0); // unk (count?) + *data << uint32(0); // arena - no instances showed } else // battleground { - *data << uint8(0); // unk, different for each bg type - *data << uint8(0); // unk - size_t count_pos = data->wpos(); uint32 count = 0; *data << uint32(0); // number of bg instances diff --git a/src/game/GossipDef.cpp b/src/game/GossipDef.cpp index 2920cf426..903224f2f 100644 --- a/src/game/GossipDef.cpp +++ b/src/game/GossipDef.cpp @@ -80,21 +80,24 @@ void GossipMenu::AddMenuItem(uint8 Icon, char const* Message, uint32 dtSender, u 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; } 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; } 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; } @@ -194,8 +197,9 @@ void PlayerMenu::CloseGossip() 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 - data << Flags; - data << X << Y; + data << uint32(Flags); + data << float(X); + data << float(Y); data << uint32(Icon); data << uint32(Data); data << locName; @@ -261,8 +265,8 @@ void PlayerMenu::SendTalking( uint32 textID ) std::string Text_0[8], Text_1[8]; for (int i = 0; i < 8; ++i) { - Text_0[i]=pGossip->Options[i].Text_0; - Text_1[i]=pGossip->Options[i].Text_1; + Text_0[i] = pGossip->Options[i].Text_0; + Text_1[i] = pGossip->Options[i].Text_1; } int loc_idx = pSession->GetSessionDbLocaleIndex(); if (loc_idx >= 0) @@ -346,7 +350,8 @@ QuestMenu::~QuestMenu() void QuestMenu::AddMenuItem( uint32 QuestId, uint8 Icon) { Quest const* qinfo = sObjectMgr.GetQuestTemplate(QuestId); - if (!qinfo) return; + if (!qinfo) + return; 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); 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(); @@ -398,7 +403,7 @@ void PlayerMenu::SendQuestGiverQuestList( QEmote eEmote, const std::string& Titl if(QuestLocale const *ql = sObjectMgr.GetQuestLocale(questID)) { if (ql->Title.size() > (size_t)loc_idx && !ql->Title[loc_idx].empty()) - title=ql->Title[loc_idx]; + title = ql->Title[loc_idx]; } } @@ -434,8 +439,7 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID int loc_idx = pSession->GetSessionDbLocaleIndex(); if (loc_idx >= 0) { - QuestLocale const *ql = sObjectMgr.GetQuestLocale(pQuest->GetQuestId()); - if (ql) + if (QuestLocale const *ql = sObjectMgr.GetQuestLocale(pQuest->GetQuestId())) { if (ql->Title.size() > (size_t)loc_idx && !ql->Title[loc_idx].empty()) Title = ql->Title[loc_idx]; @@ -453,11 +457,10 @@ void PlayerMenu::SendQuestGiverQuestDetails( Quest const *pQuest, uint64 npcGUID data << Title; data << Details; 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(0); // flags PvP - data << uint8(0); // value is sent back to server in quest accept packet - //data << uint32(0); // auto accept? + data << uint8(0); // IsFinished? value is sent back to server in quest accept packet if (pQuest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) { @@ -616,7 +619,7 @@ void PlayerMenu::SendQuestQueryResponse( Quest const *pQuest ) // rewarded honor points 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->GetFlags() & 0xFFFF); // quest flags @@ -723,9 +726,9 @@ void PlayerMenu::SendQuestGiverOfferReward( Quest const* pQuest, uint64 npcGUID, data << Title; data << OfferRewardText; - data << uint8(EnableNext ? 1 : 0); // Auto Finish? - data << uint32(0); // 3.3.3 - data << uint32(0); // SuggestedGroupNum + data << uint8(EnableNext ? 1 : 0); // Auto Finish + data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags + data << uint32(pQuest->GetSuggestedPlayers()); // SuggestedGroupNum uint32 EmoteCount = 0; 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 if (CloseOnCancel) - data << uint32(0x01); // auto finish? + data << uint32(0x01); // auto finish else data << uint32(0x00); - data << uint32(0x00); // SuggestedGroupNum + data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags + data << uint32(pQuest->GetSuggestedPlayers()); // SuggestedGroupNum // Required Money data << uint32(pQuest->GetRewOrReqMoney() < 0 ? -pQuest->GetRewOrReqMoney() : 0); @@ -871,14 +875,14 @@ void PlayerMenu::SendQuestGiverRequestItems( Quest const *pQuest, uint64 npcGUID data << uint32(0); } - if ( !Completable ) - data << uint32(0x00); + if ( !Completable ) // Completable = flags1 && flags2 && flags3 && flags4 + data << uint32(0x00); // flags1 else data << uint32(0x03); - data << uint32(0x04); - data << uint32(0x08); - data << uint32(0x10); + data << uint32(0x04); // flags2 + data << uint32(0x08); // flags3 + data << uint32(0x10); // flags4 pSession->SendPacket( &data ); sLog.outDebug( "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), pQuest->GetQuestId() ); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index e83b26fa0..f1a6c58a9 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -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_2, (facialHair | (0x00 << 8) | (0x00 << 16) | (0x02 << 24))); SetByteValue(PLAYER_BYTES_3, 0, gender); + SetByteValue(PLAYER_BYTES_3, 3, 0); // BattlefieldArenaFaction (0 or 1) SetUInt32Value( PLAYER_GUILDID, 0 ); SetUInt32Value( PLAYER_GUILDRANK, 0 ); diff --git a/src/game/QuestDef.h b/src/game/QuestDef.h index a00797d59..fbd531bc9 100644 --- a/src/game/QuestDef.h +++ b/src/game/QuestDef.h @@ -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_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_UNK3 = 0x00002000, // activates PvP? + QUEST_FLAGS_FLAGS_PVP = 0x00002000, // activates PvP on accept QUEST_FLAGS_UNK4 = 0x00004000, // ? Membership Card Renewal QUEST_FLAGS_WEEKLY = 0x00008000, // Not used currently: Weekly quests QUEST_FLAGS_AUTOCOMPLETE = 0x00010000, // auto complete QUEST_FLAGS_UNK5 = 0x00020000, // has something to do with ReqItemId and SrcItemId 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 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; } uint32 GetFlags() const { return QuestFlags; } 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 std::string ObjectiveText[QUEST_OBJECTIVES_COUNT];