From 7f8801dc27f10a4563a415851b2526748f8b9a30 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Sun, 31 Aug 2014 20:32:06 +0100 Subject: Core/BGs: Set and enable CMSG_BATTLEMASTER_HELLO --- src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/Protocol/Opcodes.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 257134e44bc..64831dff7ed 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -107,6 +107,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode ); DEFINE_OPCODE_HANDLER(CMSG_BATTLEGROUND_PLAYER_POSITIONS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBattlegroundPlayerPositionsOpcode); DEFINE_OPCODE_HANDLER(CMSG_BATTLEMASTER_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinOpcode ); + DEFINE_OPCODE_HANDLER(CMSG_BATTLEMASTER_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterHelloOpcode ); DEFINE_OPCODE_HANDLER(CMSG_BATTLEMASTER_JOIN_ARENA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinArena ); DEFINE_OPCODE_HANDLER(CMSG_BATTLEMASTER_JOIN_RATED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_BEGIN_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBeginTradeOpcode ); @@ -1323,7 +1324,6 @@ void OpcodeTable::Initialize() //DEFINE_OPCODE_HANDLER(CMSG_BATTLEFIELD_MANAGER_ADVANCE_STATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_BATTLEFIELD_MANAGER_SET_NEXT_TRANSITION_TIME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_BATTLEFIELD_REQUEST_SCORE_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); Need to send the response - //DEFINE_OPCODE_HANDLER(CMSG_BATTLEMASTER_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterHelloOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_BEASTMASTER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_BOOTME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_BOT_DETECTED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 64546501cdb..cd5b28dc235 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -89,6 +89,7 @@ enum Opcodes CMSG_BATTLEMASTER_JOIN = 0x7902, CMSG_BATTLEMASTER_JOIN_ARENA = 0x701C, CMSG_BATTLEMASTER_JOIN_RATED = 0x3B18, + CMSG_BATTLEMASTER_HELLO = 0x0234, CMSG_BEGIN_TRADE = 0x721E, CMSG_BINDER_ACTIVATE = 0x4006, CMSG_BOT_DETECTED2 = 0x0000, -- cgit v1.2.3 From 8015d86112f92224098939ea8be75c8bd1945b8c Mon Sep 17 00:00:00 2001 From: DDuarte Date: Sun, 31 Aug 2014 21:53:07 +0100 Subject: Core/Net: Add some (unused?) opcodes from WPP --- src/server/game/Server/Protocol/Opcodes.cpp | 4 ++-- src/server/game/Server/Protocol/Opcodes.h | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 64831dff7ed..abcbe8e46c1 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -806,6 +806,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_FLOOD_DETECTED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_FORCEACTIONSHOW, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_FORCED_DEATH_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_FORCE_ANIM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_FORCE_SEND_QUEUED_PACKETS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_FORCE_SET_VEHICLE_REC_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_FORGE_MASTER_SET, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -1308,7 +1309,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_XP_GAIN_ABORTED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_ZONE_UNDER_ATTACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - // These opcodes are not in WPP + // Not implemented and/or missing //DEFINE_OPCODE_HANDLER(CMSG_ACTIVE_PVP_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_ADD_PVP_MEDAL_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -1600,7 +1601,6 @@ void OpcodeTable::Initialize() //DEFINE_OPCODE_HANDLER(SMSG_DEBUG_SERVER_GEO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_DUMP_OBJECTS_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_DYNAMIC_DROP_ROLL_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //DEFINE_OPCODE_HANDLER(SMSG_FORCE_ANIM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_FORCE_DISPLAY_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_GAMETIMEBIAS_SET, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(SMSG_GHOSTEE_GONE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index cd5b28dc235..485a1d56ed9 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -73,6 +73,7 @@ enum Opcodes CMSG_AUTOSTORE_BANK_ITEM = 0x0607, CMSG_AUTOSTORE_GROUND_ITEM = 0x0000, CMSG_AUTOSTORE_LOOT_ITEM = 0x0E34, + CMSG_AUTO_DECLINE_GUILD_INVITE = 0x1234, CMSG_AUTO_DECLINE_GUILD_INVITES = 0x2034, CMSG_BANKER_ACTIVATE = 0x0005, CMSG_BATTLEFIELD_JOIN = 0x0000, @@ -119,7 +120,7 @@ enum Opcodes CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x6C35, CMSG_CANCEL_CAST = 0x0115, CMSG_CANCEL_CHANNELLING = 0x6C25, - CMSG_CANCEL_GROWTH_AURA = 0x0000, + CMSG_CANCEL_GROWTH_AURA = 0x0237, CMSG_CANCEL_MOUNT_AURA = 0x0635, CMSG_CANCEL_QUEUED_SPELL = 0x7B1C, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x6C37, @@ -771,6 +772,7 @@ enum Opcodes SMSG_CHAT_PLAYER_NOT_FOUND = 0x2526, SMSG_CHAT_RESTRICTED = 0x6536, SMSG_CHAT_SERVER_DISCONNECTED = 0x6D34, + SMSG_CHAT_SERVER_DISCONNECTED_2 = 0x4627, SMSG_CHAT_SERVER_RECONNECTED = 0x6905, SMSG_CHAT_WRONG_FACTION = 0x6724, SMSG_CHECK_FOR_BOTS = 0x0000, @@ -814,6 +816,7 @@ enum Opcodes SMSG_DB_REPLY = 0x38A4, SMSG_DEATH_RELEASE_LOC = 0x2F07, SMSG_DEBUG_RUNE_REGEN = 0x31B3, + SMSG_DEBUG_SERVER_GEO = 0x0235, SMSG_DEFENSE_MESSAGE = 0x0314, SMSG_DESTROY_OBJECT = 0x4724, SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x4825, @@ -852,6 +855,7 @@ enum Opcodes SMSG_FLOOD_DETECTED = 0x0542, SMSG_FORCEACTIONSHOW = 0x6126, SMSG_FORCED_DEATH_UPDATE = 0x2606, + SMSG_FORCE_ANIM = 0x4C05, SMSG_FORCE_DISPLAY_UPDATE = 0x0000, SMSG_FORCE_SEND_QUEUED_PACKETS = 0x0140, SMSG_FORCE_SET_VEHICLE_REC_ID = 0x70A1, @@ -945,6 +949,8 @@ enum Opcodes SMSG_HIGHEST_THREAT_UPDATE = 0x4104, SMSG_HOTFIX_INFO = 0x19B5, SMSG_HOTFIX_NOTIFY = 0x55A7, + SMSG_IGNORE_DIMINISHING_RETURNS_CHEAT = 0x0125, + SMSG_IGNORE_REQUIREMENTS_CHEAT = 0x4E36, SMSG_INITIALIZE_FACTIONS = 0x4634, SMSG_INITIAL_SPELLS = 0x0104, SMSG_INIT_CURRENCY = 0x15A5, @@ -1094,6 +1100,7 @@ enum Opcodes SMSG_NEW_WORLD = 0x79B1, SMSG_NEW_WORLD_ABORT = 0x14B7, SMSG_NOTIFICATION = 0x14A0, + SMSG_NOTIFICATION_2 = 0x0724, SMSG_NOTIFY_DANCE = 0x4904, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x6204, SMSG_NPC_TEXT_UPDATE = 0x4436, -- cgit v1.2.3 From d31782d757173620d6f5df36ad76fd857271b793 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Sun, 31 Aug 2014 21:53:36 +0100 Subject: Core/Net: Define and semi-implement SMSG_SET_FACTION_NOT_VISIBILE --- src/server/game/Reputation/ReputationMgr.cpp | 4 ++-- src/server/game/Reputation/ReputationMgr.h | 2 +- src/server/game/Server/Protocol/Opcodes.cpp | 1 + src/server/game/Server/Protocol/Opcodes.h | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index b136e6893cd..34795364c5c 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -239,13 +239,13 @@ void ReputationMgr::SendStates() SendState(&(itr->second)); } -void ReputationMgr::SendVisible(FactionState const* faction) const +void ReputationMgr::SendVisible(FactionState const* faction, bool visible /* = true*/) const { if (_player->GetSession()->PlayerLoading()) return; // make faction visible in reputation list at client - WorldPacket data(SMSG_SET_FACTION_VISIBLE, 4); + WorldPacket data(visible ? SMSG_SET_FACTION_VISIBLE : SMSG_SET_FACTION_NOT_VISIBILE, 4); data << faction->ReputationListID; _player->SendDirectMessage(&data); } diff --git a/src/server/game/Reputation/ReputationMgr.h b/src/server/game/Reputation/ReputationMgr.h index 4164dd8ff11..b624bc95011 100644 --- a/src/server/game/Reputation/ReputationMgr.h +++ b/src/server/game/Reputation/ReputationMgr.h @@ -148,7 +148,7 @@ class ReputationMgr void SetVisible(FactionState* faction); void SetAtWar(FactionState* faction, bool atWar) const; void SetInactive(FactionState* faction, bool inactive) const; - void SendVisible(FactionState const* faction) const; + void SendVisible(FactionState const* faction, bool visible = true) const; void UpdateRankCounters(ReputationRank old_rank, ReputationRank new_rank); private: Player* _player; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index abcbe8e46c1..f138760beaa 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1159,6 +1159,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FACTION_ATWAR, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_SET_FACTION_NOT_VISIBLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FACTION_STANDING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FACTION_VISIBLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 485a1d56ed9..c6a80f4c737 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1231,6 +1231,7 @@ enum Opcodes SMSG_SET_AI_ANIM_KIT = 0x4626, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x35B6, SMSG_SET_FACTION_ATWAR = 0x4216, + SMSG_SET_FACTION_NOT_VISIBILE = 0x6737, SMSG_SET_FACTION_STANDING = 0x0126, SMSG_SET_FACTION_VISIBLE = 0x2525, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2834, -- cgit v1.2.3 From b6493c01ef4bbf445a841231d935f7fca3f01b76 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Sun, 31 Aug 2014 21:57:51 +0100 Subject: Core/Net: "Enable" CMSG_CANCEL_GROWTH_AURA Also fix a typo visibile -> visible in an opcode name --- src/server/game/Reputation/ReputationMgr.cpp | 4 ++-- src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/Protocol/Opcodes.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index 34795364c5c..af04e10ea8c 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -244,8 +244,8 @@ void ReputationMgr::SendVisible(FactionState const* faction, bool visible /* = t if (_player->GetSession()->PlayerLoading()) return; - // make faction visible in reputation list at client - WorldPacket data(visible ? SMSG_SET_FACTION_VISIBLE : SMSG_SET_FACTION_NOT_VISIBILE, 4); + // make faction visible/not visible in reputation list at client + WorldPacket data(visible ? SMSG_SET_FACTION_VISIBLE : SMSG_SET_FACTION_NOT_VISIBLE, 4); data << faction->ReputationListID; _player->SendDirectMessage(&data); } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index f138760beaa..99cfba89537 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -137,6 +137,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_CANCEL_AUTO_REPEAT_SPELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelAutoRepeatSpellOpcode); DEFINE_OPCODE_HANDLER(CMSG_CANCEL_CAST, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleCancelCastOpcode ); DEFINE_OPCODE_HANDLER(CMSG_CANCEL_CHANNELLING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelChanneling ); + DEFINE_OPCODE_HANDLER(CMSG_CANCEL_GROWTH_AURA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelGrowthAuraOpcode ); DEFINE_OPCODE_HANDLER(CMSG_CANCEL_MOUNT_AURA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelMountAuraOpcode ); DEFINE_OPCODE_HANDLER(CMSG_CANCEL_QUEUED_SPELL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_CANCEL_TEMP_ENCHANTMENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelTempEnchantmentOpcode); @@ -1335,7 +1336,6 @@ void OpcodeTable::Initialize() //DEFINE_OPCODE_HANDLER(CMSG_BUY_STABLE_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyStableSlot ); //DEFINE_OPCODE_HANDLER(CMSG_CALENDAR_CONTEXT_EVENT_SIGNUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_CALENDAR_EVENT_INVITE_NOTES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - //DEFINE_OPCODE_HANDLER(CMSG_CANCEL_GROWTH_AURA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelGrowthAuraOpcode ); //DEFINE_OPCODE_HANDLER(CMSG_CHANGE_GDF_ARENA_RATING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_CHANGE_PERSONAL_ARENA_RATING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(CMSG_CHARACTER_POINT_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index c6a80f4c737..11c7ec61156 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1231,7 +1231,7 @@ enum Opcodes SMSG_SET_AI_ANIM_KIT = 0x4626, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x35B6, SMSG_SET_FACTION_ATWAR = 0x4216, - SMSG_SET_FACTION_NOT_VISIBILE = 0x6737, + SMSG_SET_FACTION_NOT_VISIBLE = 0x6737, SMSG_SET_FACTION_STANDING = 0x0126, SMSG_SET_FACTION_VISIBLE = 0x2525, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2834, -- cgit v1.2.3 From e85f73c8162a4fdc7d7a8fe2667b6f867cb7c721 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Mon, 1 Sep 2014 09:44:29 +0200 Subject: Core/Spells: Added better log output for "npc_spellclick_spells" --- src/server/game/Globals/ObjectMgr.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 944ad4d4a19..0bc5c29ab11 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7261,13 +7261,13 @@ void ObjectMgr::LoadNPCSpellClickSpells() SpellInfo const* spellinfo = sSpellMgr->GetSpellInfo(spellid); if (!spellinfo) { - TC_LOG_ERROR("sql.sql", "Table npc_spellclick_spells references unknown spellid %u. Skipping entry.", spellid); + TC_LOG_ERROR("sql.sql", "Table npc_spellclick_spells creature: %u references unknown spellid %u. Skipping entry.", npc_entry, spellid); continue; } uint8 userType = fields[3].GetUInt16(); if (userType >= SPELL_CLICK_USER_MAX) - TC_LOG_ERROR("sql.sql", "Table npc_spellclick_spells references unknown user type %u. Skipping entry.", uint32(userType)); + TC_LOG_ERROR("sql.sql", "Table npc_spellclick_spells creature: %u references unknown user type %u. Skipping entry.", npc_entry, uint32(userType)); uint8 castFlags = fields[2].GetUInt8(); SpellClickInfo info; -- cgit v1.2.3 From 5ca5a75d21ba6f79c9c83d1e1b6a84da88f65dc0 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Mon, 1 Sep 2014 19:06:28 +0100 Subject: Core/Quests: Add methods to get a list of npcs/GOs that end (involved relation) a given a quest --- src/server/game/Globals/ObjectMgr.cpp | 14 +++++++++----- src/server/game/Globals/ObjectMgr.h | 18 ++++++++++++++++-- 2 files changed, 25 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 0bc5c29ab11..7ab843943f8 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7329,7 +7329,7 @@ void ObjectMgr::DeleteCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_ cell_guids.corpses.erase(player_guid); } -void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string const& table, bool starter, bool go) +void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReverse* reverseMap, std::string const& table, bool starter, bool go) { uint32 oldMSTime = getMSTime(); @@ -7362,7 +7362,11 @@ void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string const& } if (!poolId || !starter) + { map.insert(QuestRelations::value_type(id, quest)); + if (reverseMap) + reverseMap->insert(QuestRelationsReverse::value_type(quest, id)); + } else if (starter) poolRelationMap->insert(PooledQuestRelation::value_type(quest, id)); @@ -7374,7 +7378,7 @@ void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string const& void ObjectMgr::LoadGameobjectQuestStarters() { - LoadQuestRelationsHelper(_goQuestRelations, "gameobject_queststarter", true, true); + LoadQuestRelationsHelper(_goQuestRelations, nullptr, "gameobject_queststarter", true, true); for (QuestRelations::iterator itr = _goQuestRelations.begin(); itr != _goQuestRelations.end(); ++itr) { @@ -7388,7 +7392,7 @@ void ObjectMgr::LoadGameobjectQuestStarters() void ObjectMgr::LoadGameobjectQuestEnders() { - LoadQuestRelationsHelper(_goQuestInvolvedRelations, "gameobject_questender", false, true); + LoadQuestRelationsHelper(_goQuestInvolvedRelations, &_goQuestInvolvedRelationsReverse, "gameobject_questender", false, true); for (QuestRelations::iterator itr = _goQuestInvolvedRelations.begin(); itr != _goQuestInvolvedRelations.end(); ++itr) { @@ -7402,7 +7406,7 @@ void ObjectMgr::LoadGameobjectQuestEnders() void ObjectMgr::LoadCreatureQuestStarters() { - LoadQuestRelationsHelper(_creatureQuestRelations, "creature_queststarter", true, false); + LoadQuestRelationsHelper(_creatureQuestRelations, nullptr, "creature_queststarter", true, false); for (QuestRelations::iterator itr = _creatureQuestRelations.begin(); itr != _creatureQuestRelations.end(); ++itr) { @@ -7416,7 +7420,7 @@ void ObjectMgr::LoadCreatureQuestStarters() void ObjectMgr::LoadCreatureQuestEnders() { - LoadQuestRelationsHelper(_creatureQuestInvolvedRelations, "creature_questender", false, false); + LoadQuestRelationsHelper(_creatureQuestInvolvedRelations, &_creatureQuestInvolvedRelationsReverse, "creature_questender", false, false); for (QuestRelations::iterator itr = _creatureQuestInvolvedRelations.begin(); itr != _creatureQuestInvolvedRelations.end(); ++itr) { diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 56ae4a4c6d1..dc9196dd0df 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -492,8 +492,10 @@ typedef std::unordered_map TrinityStringLocaleContai typedef std::unordered_map GossipMenuItemsLocaleContainer; typedef std::unordered_map PointOfInterestLocaleContainer; -typedef std::multimap QuestRelations; +typedef std::multimap QuestRelations; // unit/go -> quest +typedef std::multimap QuestRelationsReverse; // quest -> unit/go typedef std::pair QuestRelationBounds; +typedef std::pair QuestRelationReverseBounds; struct PetLevelInfo { @@ -930,6 +932,11 @@ class ObjectMgr return _goQuestInvolvedRelations.equal_range(go_entry); } + QuestRelationReverseBounds GetGOQuestInvolvedRelationReverseBounds(uint32 questId) + { + return _goQuestInvolvedRelationsReverse.equal_range(questId); + } + QuestRelations* GetCreatureQuestRelationMap() { return &_creatureQuestRelations; @@ -945,6 +952,11 @@ class ObjectMgr return _creatureQuestInvolvedRelations.equal_range(creature_entry); } + QuestRelationReverseBounds GetCreatureQuestInvolvedRelationReverseBounds(uint32 questId) + { + return _creatureQuestInvolvedRelationsReverse.equal_range(questId); + } + void LoadEventScripts(); void LoadSpellScripts(); void LoadWaypointScripts(); @@ -1347,8 +1359,10 @@ class ObjectMgr QuestRelations _goQuestRelations; QuestRelations _goQuestInvolvedRelations; + QuestRelationsReverse _goQuestInvolvedRelationsReverse; QuestRelations _creatureQuestRelations; QuestRelations _creatureQuestInvolvedRelations; + QuestRelationsReverse _creatureQuestInvolvedRelationsReverse; //character reserved names typedef std::set ReservedNamesContainer; @@ -1373,7 +1387,7 @@ class ObjectMgr private: void LoadScripts(ScriptsType type); void CheckScripts(ScriptsType type, std::set& ids); - void LoadQuestRelationsHelper(QuestRelations& map, std::string const& table, bool starter, bool go); + void LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReverse* reverseMap, std::string const& table, bool starter, bool go); void PlayerCreateInfoAddItemHelper(uint32 race_, uint32 class_, uint32 itemId, int32 count); MailLevelRewardContainer _mailLevelRewardStore; -- cgit v1.2.3 From a896a7554f7a2c41d0225564896d7d2db61ec800 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Mon, 1 Sep 2014 20:03:01 +0100 Subject: Core/Quests: Implement CMSG_QUEST_NPC_QUERY and SMSG_QUEST_NPC_QUERY_RESPONSE Plot twist: We don't know what these packets do (but they are used) --- src/server/game/Handlers/QueryHandler.cpp | 39 +++++++++++++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 4 +-- src/server/game/Server/WorldSession.h | 1 + 3 files changed, 42 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index fb160c2bc41..cf75fa1e3c9 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -419,6 +419,45 @@ void WorldSession::HandleCorpseMapPositionQuery(WorldPacket& recvData) SendPacket(&data); } +void WorldSession::HandleQuestNPCQuery(WorldPacket& recvData) +{ + uint32 count = recvData.ReadBits(24); + std::map> quests; + + for (int i = 0; i < count; ++i) + { + uint32 questId; + recvData >> questId; + + /// @todo verify if we should only send completed quests questgivers + if (_player->GetQuestStatus(questId) == QUEST_STATUS_COMPLETE) + { + auto creatures = sObjectMgr->GetCreatureQuestInvolvedRelationReverseBounds(questId); + for (auto it = creatures.first; it != creatures.second; ++it) + quests[questId].push_back(it->second); + + auto gos = sObjectMgr->GetGOQuestInvolvedRelationReverseBounds(questId); + for (auto it = gos.first; it != gos.second; ++it) + quests[questId].push_back(it->second | 0x80000000); // GO mask + } + } + + WorldPacket data(SMSG_QUEST_NPC_QUERY_RESPONSE, 3 + count * 14); + data.WriteBits(quests.size(), 23); + + for (auto it = quests.begin(); it != quests.end(); ++it) + data.WriteBits(it->second.size(), 24); + + for (auto it = quests.begin(); it != quests.end(); ++it) + { + data << uint32(it->first); + for (const auto& entry : it->second) + data << uint32(entry); + } + + SendPacket(&data); +} + void WorldSession::HandleQuestPOIQuery(WorldPacket& recvData) { uint32 count; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 99cfba89537..f653b1ec9d4 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -434,7 +434,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_QUESTGIVER_STATUS_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQuestgiverStatusQueryOpcode); DEFINE_OPCODE_HANDLER(CMSG_QUESTLOG_REMOVE_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestLogRemoveQuest ); DEFINE_OPCODE_HANDLER(CMSG_QUEST_CONFIRM_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestConfirmAccept ); - DEFINE_OPCODE_HANDLER(CMSG_QUEST_NPC_QUERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); + DEFINE_OPCODE_HANDLER(CMSG_QUEST_NPC_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestNPCQuery ); DEFINE_OPCODE_HANDLER(CMSG_QUEST_POI_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestPOIQuery ); DEFINE_OPCODE_HANDLER(CMSG_QUEST_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestQueryOpcode ); DEFINE_OPCODE_HANDLER(CMSG_RANDOMIZE_CHAR_NAME, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomizeCharNameOpcode ); @@ -1114,7 +1114,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_QUESTUPDATE_FAILEDTIMER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_QUEST_FORCE_REMOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_QUEST_NPC_QUERY_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_QUEST_NPC_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_QUEST_POI_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_QUEST_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_RAID_GROUP_ONLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index f7269ae977c..40119124490 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -963,6 +963,7 @@ class WorldSession void HandleWorldStateUITimerUpdate(WorldPacket& recvData); void HandleReadyForAccountDataTimes(WorldPacket& recvData); void HandleQueryQuestsCompleted(WorldPacket& recvData); + void HandleQuestNPCQuery(WorldPacket& recvData); void HandleQuestPOIQuery(WorldPacket& recvData); void HandleEjectPassenger(WorldPacket& data); void HandleEnterPlayerVehicle(WorldPacket& data); -- cgit v1.2.3 From d05246f171546085f43bed877408c0db8233b8e3 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Mon, 1 Sep 2014 21:25:54 +0100 Subject: Core/Quests: Always send quest questgivers in HandleQuestNPCQuery --- src/server/game/Handlers/QueryHandler.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index cf75fa1e3c9..78b2c4a3a2a 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -429,20 +429,22 @@ void WorldSession::HandleQuestNPCQuery(WorldPacket& recvData) uint32 questId; recvData >> questId; - /// @todo verify if we should only send completed quests questgivers - if (_player->GetQuestStatus(questId) == QUEST_STATUS_COMPLETE) + if (!sObjectMgr->GetQuestTemplate(questId)) { - auto creatures = sObjectMgr->GetCreatureQuestInvolvedRelationReverseBounds(questId); - for (auto it = creatures.first; it != creatures.second; ++it) - quests[questId].push_back(it->second); - - auto gos = sObjectMgr->GetGOQuestInvolvedRelationReverseBounds(questId); - for (auto it = gos.first; it != gos.second; ++it) - quests[questId].push_back(it->second | 0x80000000); // GO mask + TC_LOG_DEBUG("network", "WORLD: Unknown quest %u in CMSG_QUEST_NPC_QUERY by player %u", questId, m_GUIDLow); + continue; } + + auto creatures = sObjectMgr->GetCreatureQuestInvolvedRelationReverseBounds(questId); + for (auto it = creatures.first; it != creatures.second; ++it) + quests[questId].push_back(it->second); + + auto gos = sObjectMgr->GetGOQuestInvolvedRelationReverseBounds(questId); + for (auto it = gos.first; it != gos.second; ++it) + quests[questId].push_back(it->second | 0x80000000); // GO mask } - WorldPacket data(SMSG_QUEST_NPC_QUERY_RESPONSE, 3 + count * 14); + WorldPacket data(SMSG_QUEST_NPC_QUERY_RESPONSE, 3 + quests.size() * 14); data.WriteBits(quests.size(), 23); for (auto it = quests.begin(); it != quests.end(); ++it) -- cgit v1.2.3 From e0f7cd151451863b29e800b10e5c5fe90f3627ef Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 00:49:17 +0100 Subject: Core/Misc: Send cemetery list when the client requests it Implement CMSG_REQUEST_CEMETERY_LIST & SMSG_REQUEST_CEMETERY_LIST_RESPONSE Sends up to 15 graveyard ids from the player zone (needs verification, *some* packets were seen with graveyards from the whole continent). --- src/server/game/Handlers/MiscHandler.cpp | 31 +++++++++++++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/WorldSession.h | 3 +++ 3 files changed, 35 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 1162622af60..99cab39c241 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -508,6 +508,37 @@ void WorldSession::HandleReturnToGraveyard(WorldPacket& /*recvPacket*/) GetPlayer()->RepopAtGraveyard(); } +void WorldSession::HandleRequestCemeteryList(WorldPacket& /*recvPacket*/) +{ + uint32 zoneId = _player->GetZoneId(); + uint32 team = _player->GetTeam(); + + std::vector graveyardIds; + auto range = sObjectMgr->GraveYardStore.equal_range(zoneId); + + for (auto it = range.first; it != range.second && graveyardIds.size() < 16; ++it) // client max + { + if (it->second.team == 0 || it->second.team == team) + graveyardIds.push_back(it->first); + } + + if (graveyardIds.empty()) + { + TC_LOG_DEBUG("network", "No graveyards found for zone %u for player %u (team %u) in CMSG_REQUEST_CEMETERY_LIST", + zoneId, m_GUIDLow, team); + return; + } + + WorldPacket data(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, 4 + 4 * graveyardIds.size()); + data.WriteBit(0); // Is MicroDungeon (WorldMapFrame.lua) + + data.WriteBits(graveyardIds.size(), 24); + for (int i = 0; i < graveyardIds.size(); ++i) + data << uint32(graveyardIds[i]); + + SendPacket(&data); +} + void WorldSession::HandleSetSelectionOpcode(WorldPacket& recvData) { uint64 guid; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index f653b1ec9d4..cbf766ee279 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -450,7 +450,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_REPORT_PVP_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK ); DEFINE_OPCODE_HANDLER(CMSG_REQUEST_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestAccountData ); DEFINE_OPCODE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCategoryCooldowns ); - DEFINE_OPCODE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); + DEFINE_OPCODE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCemeteryList ); DEFINE_OPCODE_HANDLER(CMSG_REQUEST_HOTFIX, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleRequestHotfix ); DEFINE_OPCODE_HANDLER(CMSG_REQUEST_INSPECT_RATED_BG_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_REQUEST_PARTY_MEMBER_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPartyMemberStatsOpcode); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 40119124490..646a76bcbe5 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -430,7 +430,10 @@ class WorldSession void HandleMoveUnRootAck(WorldPacket& recvPacket); void HandleMoveRootAck(WorldPacket& recvPacket); void HandleLookingForGroup(WorldPacket& recvPacket); + + // cemetery/graveyard related void HandleReturnToGraveyard(WorldPacket& recvPacket); + void HandleRequestCemeteryList(WorldPacket& recvPacket); // new inspect void HandleInspectOpcode(WorldPacket& recvPacket); -- cgit v1.2.3 From 5e0e2987e24af08dfb3ddd53efa87eaa634d4541 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 02:59:56 +0100 Subject: Core/Channels: Enable SMSG_USERLIST_ADD, _REMOVE and _UPDATE The structures for these are correct and the client still accepts however it seems that these were not used on 4.3.4 retail. Maybe they got replaced with SMSG_CHANNEL_NOTIFY? --- src/server/game/Server/Protocol/Opcodes.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index cbf766ee279..20e0ed8ab96 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1280,9 +1280,9 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_UPDATE_SERVER_PLAYER_POSITION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_UPDATE_WORLD_STATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_USERLIST_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_USERLIST_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_VOICESESSION_FULL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_VOICE_CHAT_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_VOICE_PARENTAL_CONTROLS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); -- cgit v1.2.3 From 4dbe318194f5633370ad738fbbb71696cbc979f2 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 03:40:40 +0100 Subject: Core/Player: Fix a typo in the struct of SMSG_REQUEST_PVP_REWARDS_RESPONSE Ref #11552 --- src/server/game/Entities/Player/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 45c0ceae281..563993fa3d8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7343,7 +7343,7 @@ void Player::SendPvpRewards() const packet << GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_META_RBG, true); packet << GetCurrencyOnWeek(CURRENCY_TYPE_CONQUEST_META_ARENA, true); packet << GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_POINTS, true); - packet << GetCurrencyWeekCap(CURRENCY_TYPE_CONQUEST_META_RBG, true); + GetSession()->SendPacket(&packet); } -- cgit v1.2.3 From e8bd10c5a26d0d935a3db04f3e68ba65f24357b9 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 18:31:23 +0100 Subject: Core/Net: Fix structure of SMSG_GUILD_ACHIEVEMENT_DATA when there are no achievements to send --- src/server/game/Achievements/AchievementMgr.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 06e19b6ebd1..2ed191808bf 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2034,8 +2034,13 @@ template<> void AchievementMgr::SendAllAchievementData(Player* receiver) const { VisibleAchievementPred isVisible; - WorldPacket data(SMSG_GUILD_ACHIEVEMENT_DATA, m_completedAchievements.size() * (4 + 4) + 3); - data.WriteBits(std::count_if(m_completedAchievements.begin(), m_completedAchievements.end(), isVisible), 23); + + auto count = std::count_if(m_completedAchievements.begin(), m_completedAchievements.end(), isVisible); + + WorldPacket data(SMSG_GUILD_ACHIEVEMENT_DATA, count * (4 + 4) + 3); + data.WriteBits(count, 23); + data.FlushBits(); + for (CompletedAchievementMap::const_iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr) { if (!isVisible(*itr)) -- cgit v1.2.3 From a7545afe57b99c5ed3f202d8c762bb54537b841e Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 18:31:47 +0100 Subject: Core/Net: Enable SMSG_REQUEST_CEMETERY_LIST_RESPONSE since it was already fixed previously --- src/server/game/Server/Protocol/Opcodes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 20e0ed8ab96..bfa93c1b34b 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1137,7 +1137,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_REFORGE_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_REMOVED_SPELL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_REPORT_PVP_AFK_RESULT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - DEFINE_OPCODE_HANDLER(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_REQUEST_PVP_REWARDS_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_RESEARCH_COMPLETE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_RESEARCH_SETUP_HISTORY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); -- cgit v1.2.3 From dc368063c3fb314f8e9d3475bab41899b2d86f1e Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 18:35:18 +0100 Subject: Core/Net: Correct structure of SMSG_LF_GUILD_POST_UPDATED --- src/server/game/Handlers/GuildFinderHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Handlers/GuildFinderHandler.cpp b/src/server/game/Handlers/GuildFinderHandler.cpp index 14175b44d9f..f4baafd1d6f 100644 --- a/src/server/game/Handlers/GuildFinderHandler.cpp +++ b/src/server/game/Handlers/GuildFinderHandler.cpp @@ -356,8 +356,8 @@ void WorldSession::HandleGuildFinderPostRequest(WorldPacket& /*recvPacket*/) if (isGuildMaster) { - data.WriteBit(settings.IsListed()); data.WriteBits(settings.GetComment().size(), 11); + data.WriteBit(settings.IsListed()); data << uint32(settings.GetLevel()); data.WriteString(settings.GetComment()); data << uint32(0); // Unk Int32 -- cgit v1.2.3 From fa5bada4534fa7141bb3d3d1da49114ac7188462 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 18:36:43 +0100 Subject: Core/Net: Correct structure of SMSG_GUILD_CRITERIA_DATA when empty --- src/server/game/Achievements/AchievementMgr.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 2ed191808bf..de346ff4413 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2153,6 +2153,7 @@ void AchievementMgr::SendAchievementInfo(Player* receiver, uint32 achieve // send empty packet WorldPacket data(SMSG_GUILD_CRITERIA_DATA, 3); data.WriteBits(0, 21); + data.FlushBits(); receiver->GetSession()->SendPacket(&data); return; } -- cgit v1.2.3 From 09867a10c9c8593ede7641996e6c0ea353f6a51d Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 2 Sep 2014 18:45:22 +0100 Subject: Core/Handlers: Fix two warnings recently introduced --- src/server/game/Handlers/MiscHandler.cpp | 4 ++-- src/server/game/Handlers/QueryHandler.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 99cab39c241..e492923f395 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -533,8 +533,8 @@ void WorldSession::HandleRequestCemeteryList(WorldPacket& /*recvPacket*/) data.WriteBit(0); // Is MicroDungeon (WorldMapFrame.lua) data.WriteBits(graveyardIds.size(), 24); - for (int i = 0; i < graveyardIds.size(); ++i) - data << uint32(graveyardIds[i]); + for (auto id : graveyardIds) + data << uint32(graveyardIds); SendPacket(&data); } diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 78b2c4a3a2a..e6c94250262 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -424,7 +424,7 @@ void WorldSession::HandleQuestNPCQuery(WorldPacket& recvData) uint32 count = recvData.ReadBits(24); std::map> quests; - for (int i = 0; i < count; ++i) + for (uint32 i = 0; i < count; ++i) { uint32 questId; recvData >> questId; -- cgit v1.2.3