diff --git a/src/game/BattleGroundHandler.cpp b/src/game/BattleGroundHandler.cpp index 65d601384..94a29264d 100644 --- a/src/game/BattleGroundHandler.cpp +++ b/src/game/BattleGroundHandler.cpp @@ -65,7 +65,7 @@ void WorldSession::HandleBattleGroundHelloOpcode( WorldPacket & recv_data ) void WorldSession::SendBattlegGroundList( uint64 guid, BattleGroundTypeId bgTypeId ) { WorldPacket data; - sBattleGroundMgr.BuildBattleGroundListPacket(&data, guid, _player, bgTypeId); + sBattleGroundMgr.BuildBattleGroundListPacket(&data, guid, _player, bgTypeId, 0); SendPacket( &data ); } @@ -102,13 +102,6 @@ void WorldSession::HandleBattleGroundJoinOpcode( WorldPacket & recv_data ) if(_player->InBattleGround()) return; - Creature *unit = ObjectAccessor::GetCreature(*_player, guid); - if(!unit) - return; - - if(!unit->isBattleMaster()) // it's not battlemaster - return; - // get bg instance or bg template if instance not found BattleGround * bg = NULL; if(instanceId) @@ -272,8 +265,8 @@ void WorldSession::HandleBattleGroundListOpcode( WorldPacket &recv_data ) uint32 bgTypeId; recv_data >> bgTypeId; // id from DBC - //uint8 unk; - //recv_data >> unk; // that byte is constant 0 in 3.1 + uint8 fromWhere; + recv_data >> fromWhere; // 0 - battlemaster, 1 - UI BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId); if(!bl) @@ -283,7 +276,7 @@ void WorldSession::HandleBattleGroundListOpcode( WorldPacket &recv_data ) } WorldPacket data; - sBattleGroundMgr.BuildBattleGroundListPacket(&data, _player->GetGUID(), _player, BattleGroundTypeId(bgTypeId)); + sBattleGroundMgr.BuildBattleGroundListPacket(&data, 0, _player, BattleGroundTypeId(bgTypeId), fromWhere); SendPacket( &data ); } diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cpp index a375fd7c7..9f1bb439f 100644 --- a/src/game/BattleGroundMgr.cpp +++ b/src/game/BattleGroundMgr.cpp @@ -1888,7 +1888,7 @@ void BattleGroundMgr::DistributeArenaPoints() sWorld.SendWorldText(LANG_DIST_ARENA_POINTS_END); } -void BattleGroundMgr::BuildBattleGroundListPacket(WorldPacket *data, const uint64& guid, Player* plr, BattleGroundTypeId bgTypeId) +void BattleGroundMgr::BuildBattleGroundListPacket(WorldPacket *data, const uint64& guid, Player* plr, BattleGroundTypeId bgTypeId, uint8 fromWhere) { uint32 PlayerLevel = 10; @@ -1897,16 +1897,16 @@ void BattleGroundMgr::BuildBattleGroundListPacket(WorldPacket *data, const uint6 data->Initialize(SMSG_BATTLEFIELD_LIST); *data << uint64(guid); // battlemaster guid - *data << uint8(0); // unknown 3.1 + *data << uint8(fromWhere); // from where you joined *data << uint32(bgTypeId); // battleground id if(bgTypeId == BATTLEGROUND_AA) // arena { - *data << uint8(5); // unk - *data << uint32(0); // unk + *data << uint8(4); // unk + *data << uint32(0); // unk (count?) } else // battleground { - *data << uint8(0x00); // unk + *data << uint8(0x00); // unk, different for each bg type size_t count_pos = data->wpos(); uint32 count = 0; diff --git a/src/game/BattleGroundMgr.h b/src/game/BattleGroundMgr.h index b706ba955..46a5ca43d 100644 --- a/src/game/BattleGroundMgr.h +++ b/src/game/BattleGroundMgr.h @@ -181,7 +181,7 @@ class BattleGroundMgr /* Packet Building */ void BuildPlayerJoinedBattleGroundPacket(WorldPacket *data, Player *plr); void BuildPlayerLeftBattleGroundPacket(WorldPacket *data, const uint64& guid); - void BuildBattleGroundListPacket(WorldPacket *data, const uint64& guid, Player *plr, BattleGroundTypeId bgTypeId); + void BuildBattleGroundListPacket(WorldPacket *data, const uint64& guid, Player *plr, BattleGroundTypeId bgTypeId, uint8 fromWhere); void BuildGroupJoinedBattlegroundPacket(WorldPacket *data, BattleGroundTypeId bgTypeId); void BuildUpdateWorldStatePacket(WorldPacket *data, uint32 field, uint32 value); void BuildPvpLogDataPacket(WorldPacket *data, BattleGround *bg); diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index b5d0301e4..1734c7c47 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -221,6 +221,7 @@ ChatCommand * ChatHandler::getCommandTable() { "arena", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugArenaCommand, "", NULL }, { "bg", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugBattlegroundCommand, "", NULL }, { "sendlargepacket",SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendLargePacketCommand, "", NULL }, + { "setitemflag", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSetItemFlagCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; diff --git a/src/game/Chat.h b/src/game/Chat.h index b9dc9f01e..65bd44959 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -451,6 +451,7 @@ class ChatHandler bool HandleSpawnVehicle(const char * args); bool HandleSendLargePacketCommand(const char * args); bool HandleSendSetPhaseShiftCommand(const char * args); + bool HandleSetItemFlagCommand(const char * args); Player* getSelectedPlayer(); Creature* getSelectedCreature(); diff --git a/src/game/ItemPrototype.h b/src/game/ItemPrototype.h index 8d018f17a..1b58b0270 100644 --- a/src/game/ItemPrototype.h +++ b/src/game/ItemPrototype.h @@ -105,6 +105,7 @@ enum ITEM_FLAGS ITEM_FLAGS_CONJURED = 0x00000002, ITEM_FLAGS_OPENABLE = 0x00000004, ITEM_FLAGS_WRAPPED = 0x00000008, + ITEM_FLAGS_BROKEN = 0x00000010, // appears red icon (like when item durability==0) ITEM_FLAGS_WRAPPER = 0x00000200, // used or not used wrapper ITEM_FLAGS_PARTY_LOOT = 0x00000800, // determines if item is party loot or not ITEM_FLAGS_CHARTER = 0x00002000, // arena/guild charter diff --git a/src/game/QuestDef.h b/src/game/QuestDef.h index 166096715..82c9d7087 100644 --- a/src/game/QuestDef.h +++ b/src/game/QuestDef.h @@ -104,13 +104,15 @@ enum __QuestGiverStatus { DIALOG_STATUS_NONE = 0, DIALOG_STATUS_UNAVAILABLE = 1, - DIALOG_STATUS_CHAT = 2, - DIALOG_STATUS_INCOMPLETE = 3, - DIALOG_STATUS_REWARD_REP = 4, - DIALOG_STATUS_AVAILABLE_REP = 5, - DIALOG_STATUS_AVAILABLE = 6, - DIALOG_STATUS_REWARD2 = 7, // not yellow dot on minimap - DIALOG_STATUS_REWARD = 8 // yellow dot on minimap + DIALOG_STATUS_CHAT = 2, // 3.1 - may be changed + DIALOG_STATUS_UNK1 = 3, // 3.1 + DIALOG_STATUS_UNK2 = 4, // 3.1 + DIALOG_STATUS_INCOMPLETE = 5, + DIALOG_STATUS_REWARD_REP = 6, + DIALOG_STATUS_AVAILABLE_REP = 7, + DIALOG_STATUS_AVAILABLE = 8, + DIALOG_STATUS_REWARD2 = 9, // no yellow dot on minimap + DIALOG_STATUS_REWARD = 10 // yellow dot on minimap }; enum __QuestFlags @@ -123,7 +125,7 @@ enum __QuestFlags //QUEST_FLAGS_NONE2 = 0x00000010, // Not used currently QUEST_FLAGS_EPIC = 0x00000020, // Not used currently: Unsure of content QUEST_FLAGS_RAID = 0x00000040, // Not used currently - QUEST_FLAGS_TBC = 0x00000080, // Not used currently: Available if TBC expension enabled only + QUEST_FLAGS_TBC = 0x00000080, // Not used currently: Available if TBC expansion enabled only QUEST_FLAGS_UNK2 = 0x00000100, // Not used currently: _DELIVER_MORE Quest needs more than normal _q-item_ drops from mobs QUEST_FLAGS_HIDDEN_REWARDS = 0x00000200, // Items and money rewarded only sent in SMSG_QUESTGIVER_OFFER_REWARD (not in SMSG_QUESTGIVER_QUEST_DETAILS or in client quest log(SMSG_QUEST_QUERY_RESPONSE)) QUEST_FLAGS_AUTO_REWARDED = 0x00000400, // These quests are automatically rewarded on quest complete and they will never appear in quest log client side. diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index 6e654e4d1..dbd4e4dce 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -35,7 +35,6 @@ #include "WorldPacket.h" #include "SharedDefines.h" #include "ByteBuffer.h" -#include "AddonHandler.h" #include "Opcodes.h" #include "Database/DatabaseEnv.h" #include "Auth/Sha1.h" diff --git a/src/game/debugcmds.cpp b/src/game/debugcmds.cpp index 6ff1a90bf..25c2b6157 100644 --- a/src/game/debugcmds.cpp +++ b/src/game/debugcmds.cpp @@ -594,3 +594,27 @@ bool ChatHandler::HandleSendSetPhaseShiftCommand(const char* args) m_session->SendSetPhaseShift(PhaseShift); return true; } + +bool ChatHandler::HandleSetItemFlagCommand(const char* args) +{ + if(!args) + return false; + + char* e = strtok((char*)args, " "); + char* f = strtok(NULL, " "); + + if (!e || !f) + return false; + + uint32 guid = (uint32)atoi(e); + uint32 flag = (uint32)atoi(f); + + Item *i = m_session->GetPlayer()->GetItemByGuid(MAKE_NEW_GUID(guid, 0, HIGHGUID_ITEM)); + + if(!i) + return false; + + i->SetUInt32Value(ITEM_FIELD_FLAGS, flag); + + return true; +}