Fix quests and auctionhouse.

--HG--
branch : trunk
This commit is contained in:
n0n4m3
2010-04-11 11:13:08 +04:00
parent 8db7c06e6b
commit 457df07bd4
6 changed files with 58 additions and 40 deletions
+3 -2
View File
@@ -68,8 +68,9 @@ void WorldSession::SendAuctionHello(uint64 guid, Creature* unit)
return; return;
WorldPacket data(MSG_AUCTION_HELLO, 12); WorldPacket data(MSG_AUCTION_HELLO, 12);
data << (uint64) guid; data << uint64(guid);
data << (uint32) ahEntry->houseId; data << uint32(ahEntry->houseId);
data << uint8(1); // 3.3.3: 1 - AH enabled, 0 - AH disabled
SendPacket(&data); SendPacket(&data);
} }
+20 -5
View File
@@ -1850,17 +1850,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 << uint8(0); // unk
*data << uint32(0); // unk (count?) *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
+21 -23
View File
@@ -167,39 +167,34 @@ void PlayerMenu::SendGossipMenu(uint32 TitleTextId, uint64 objectGUID)
data << uint32(questID); data << uint32(questID);
data << uint32(qItem.m_qIcon); data << uint32(qItem.m_qIcon);
data << uint32(pSession->GetPlayer()->GetQuestLevel(pQuest)); data << uint32(pSession->GetPlayer()->GetQuestLevel(pQuest));
data << uint32(0); // 3.3.3
data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation
std::string Title = pQuest->GetTitle(); std::string Title = pQuest->GetTitle();
int loc_idx = pSession->GetSessionDbLocaleIndex(); int loc_idx = pSession->GetSessionDbLocaleIndex();
if (loc_idx >= 0) if (loc_idx >= 0)
{ if (QuestLocale const *ql = objmgr.GetQuestLocale(questID))
QuestLocale const *ql = objmgr.GetQuestLocale(questID);
if (ql)
{
if (ql->Title.size() > loc_idx && !ql->Title[loc_idx].empty()) if (ql->Title.size() > loc_idx && !ql->Title[loc_idx].empty())
Title=ql->Title[loc_idx]; Title = ql->Title[loc_idx];
} data << Title; // max 0x200
}
data << Title;
} }
pSession->SendPacket(&data); pSession->SendPacket(&data);
//sLog.outDebug("WORLD: Sent SMSG_GOSSIP_MESSAGE NPCGuid=%u",GUID_LOPART(npcGUID));
} }
void PlayerMenu::CloseGossip() void PlayerMenu::CloseGossip()
{ {
WorldPacket data(SMSG_GOSSIP_COMPLETE, 0); WorldPacket data(SMSG_GOSSIP_COMPLETE, 0);
pSession->SendPacket(&data); pSession->SendPacket(&data);
//sLog.outDebug("WORLD: Sent SMSG_GOSSIP_COMPLETE");
} }
// Outdated // Outdated
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;
@@ -416,6 +411,8 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote eEmote, const std::string& Title
data << uint32(questID); data << uint32(questID);
data << uint32(qmi.m_qIcon); data << uint32(qmi.m_qIcon);
data << uint32(pSession->GetPlayer()->GetQuestLevel(pQuest)); data << uint32(pSession->GetPlayer()->GetQuestLevel(pQuest));
data << uint32(0);
data << uint8(0);
data << title; data << title;
} }
pSession->SendPacket(&data); pSession->SendPacket(&data);
@@ -463,11 +460,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); data << uint8(ActivateAccept ? 1 : 0); // auto finish
data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags
data << uint32(pQuest->GetSuggestedPlayers()); data << uint32(pQuest->GetSuggestedPlayers());
data << uint8(0); // new wotlk data << uint8(0); // IsFinished, value is sent back to server in quest accept packet
data << uint8(0); // new 3.1
data << uint8(0); // new 3.3.0
if (pQuest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) if (pQuest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
{ {
@@ -711,8 +707,9 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* pQuest, uint64 npcGUID,
data << Title; data << Title;
data << OfferRewardText; data << OfferRewardText;
data << uint8(EnableNext ? 1 : 0); data << uint8(EnableNext ? 1 : 0); // Auto Finish
data << uint32(0); // unk data << uint32(pQuest->GetFlags()); // 3.3.3 questFlags
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)
@@ -746,7 +743,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* pQuest, uint64 npcGUID,
} }
data << uint32(pQuest->GetRewItemsCount()); data << uint32(pQuest->GetRewItemsCount());
for (uint16 i=0; i < pQuest->GetRewItemsCount(); ++i) for (uint32 i = 0; i < pQuest->GetRewItemsCount(); ++i)
{ {
pItem = objmgr.GetItemPrototype(pQuest->RewItemId[i]); pItem = objmgr.GetItemPrototype(pQuest->RewItemId[i]);
data << uint32(pQuest->RewItemId[i]); data << uint32(pQuest->RewItemId[i]);
@@ -813,8 +810,8 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const *pQuest, uint64 npcGUID,
} }
WorldPacket data(SMSG_QUESTGIVER_REQUEST_ITEMS, 50); // guess size WorldPacket data(SMSG_QUESTGIVER_REQUEST_ITEMS, 50); // guess size
data << npcGUID; data << uint64(npcGUID);
data << pQuest->GetQuestId(); data << uint32(pQuest->GetQuestId());
data << Title; data << Title;
data << RequestItemsText; data << RequestItemsText;
@@ -831,7 +828,8 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const *pQuest, uint64 npcGUID,
else else
data << uint32(0x00); data << uint32(0x00);
data << uint32(0x00); // unknown 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);
+5 -4
View File
@@ -217,8 +217,8 @@ void WorldSession::HandleWhoOpcode(WorldPacket & recv_data)
uint32 gmLevelInWhoList = sWorld.getConfig(CONFIG_GM_LEVEL_IN_WHO_LIST); uint32 gmLevelInWhoList = sWorld.getConfig(CONFIG_GM_LEVEL_IN_WHO_LIST);
WorldPacket data(SMSG_WHO, 50); // guess size WorldPacket data(SMSG_WHO, 50); // guess size
data << clientcount; // clientcount place holder data << uint32(clientcount); // clientcount place holder, listed count
data << clientcount; // clientcount place holder data << uint32(clientcount); // clientcount place holder, online count
ObjectAccessor::Guard guard(*HashMapHolder<Player>::GetLock()); ObjectAccessor::Guard guard(*HashMapHolder<Player>::GetLock());
HashMapHolder<Player>::MapType& m = ObjectAccessor::Instance().GetPlayers(); HashMapHolder<Player>::MapType& m = ObjectAccessor::Instance().GetPlayers();
@@ -328,8 +328,9 @@ void WorldSession::HandleWhoOpcode(WorldPacket & recv_data)
break; break;
} }
data.put(0, clientcount); //insert right count uint32 count = m.size();
data.put(sizeof(uint32), clientcount); //insert right count data.put( 0, clientcount ); // insert right count, listed count
data.put( 4, count > 50 ? count : clientcount ); // insert right count, online count
SendPacket(&data); SendPacket(&data);
sLog.outDebug("WORLD: Send SMSG_WHO Message"); sLog.outDebug("WORLD: Send SMSG_WHO Message");
+3 -2
View File
@@ -614,6 +614,7 @@ bool Player::Create(uint32 guidlow, const std::string& name, uint8 race, uint8 c
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);
@@ -14278,9 +14279,9 @@ bool Player::SatisfyQuestLog(bool msg)
{ {
WorldPacket data(SMSG_QUESTLOG_FULL, 0); WorldPacket data(SMSG_QUESTLOG_FULL, 0);
GetSession()->SendPacket(&data); GetSession()->SendPacket(&data);
sLog.outDebug("WORLD: Sent QUEST_LOG_FULL_MESSAGE"); sLog.outDebug("WORLD: Sent SMSG_QUESTLOG_FULL");
} }
return false; return true;
} }
bool Player::SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg) bool Player::SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg)
+4 -2
View File
@@ -140,7 +140,7 @@ enum __QuestFlags
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
// Trinity flags for set SpecialFlags in DB if required but used only at server // Trinity flags for set SpecialFlags in DB if required but used only at server
QUEST_TRINITY_FLAGS_REPEATABLE = 0x010000, // Set by 1 in SpecialFlags from DB QUEST_TRINITY_FLAGS_REPEATABLE = 0x010000, // Set by 1 in SpecialFlags from DB
@@ -239,7 +239,9 @@ class Quest
bool IsRepeatable() const { return QuestFlags & QUEST_TRINITY_FLAGS_REPEATABLE; } bool IsRepeatable() const { return QuestFlags & QUEST_TRINITY_FLAGS_REPEATABLE; }
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 | QUEST_FLAGS_WEEKLY); } 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];