diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-07-02 00:07:38 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-07-02 00:07:38 +0200 |
commit | 661470c6587c11e3fa94d2e8b57c92d8be2e297b (patch) | |
tree | 402072357b13bb161ec2311f355e15aff0d7316c | |
parent | 4499f203a3ee9d6567b2af9011ee9e4378de0eab (diff) |
Core/PacketIO: Convert all leftover packets to use packet classes
27 files changed, 363 insertions, 224 deletions
diff --git a/src/server/game/Cache/CharacterCache.cpp b/src/server/game/Cache/CharacterCache.cpp index 1f6a40e2554..5e297d3f90b 100644 --- a/src/server/game/Cache/CharacterCache.cpp +++ b/src/server/game/Cache/CharacterCache.cpp @@ -19,6 +19,7 @@ #include "ArenaTeam.h" #include "DatabaseEnv.h" #include "Log.h" +#include "MiscPackets.h" #include "Player.h" #include "Timer.h" #include "World.h" @@ -131,9 +132,9 @@ void CharacterCache::UpdateCharacterData(ObjectGuid const& guid, std::string con if (race) itr->second.Race = *race; - WorldPacket data(SMSG_INVALIDATE_PLAYER, 8); - data << guid; - sWorld->SendGlobalMessage(&data); + WorldPackets::Misc::InvalidatePlayer invalidatePlayer; + invalidatePlayer.Guid = guid; + sWorld->SendGlobalMessage(invalidatePlayer.Write()); // Correct name -> pointer storage _characterCacheByNameStore.erase(oldName); diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index a2a98314834..ba5c03d8961 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1326,10 +1326,10 @@ void Item::SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint if (slot < MAX_INSPECTED_ENCHANTMENT_SLOT) { if (uint32 oldEnchant = GetEnchantmentId(slot)) - owner->GetSession()->SendEnchantmentLog(GetOwnerGUID(), ObjectGuid::Empty, GetEntry(), oldEnchant); + owner->GetSession()->SendEnchantmentLog(GetOwnerGUID(), ObjectGuid::Empty, GetGUID(), GetEntry(), oldEnchant, slot); if (id) - owner->GetSession()->SendEnchantmentLog(GetOwnerGUID(), caster, GetEntry(), id); + owner->GetSession()->SendEnchantmentLog(GetOwnerGUID(), caster, GetGUID(), GetEntry(), id, slot); } ApplyArtifactPowerEnchantmentBonuses(slot, GetEnchantmentId(slot), false, owner); diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index ad9f56bac50..5d2a77eb430 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -59,12 +59,13 @@ enum PetSpellType PETSPELL_TALENT = 2 }; -enum ActionFeedback +enum class PetActionFeedback : uint8 { - FEEDBACK_NONE = 0, - FEEDBACK_PET_DEAD = 1, - FEEDBACK_NOTHING_TO_ATT = 2, - FEEDBACK_CANT_ATT_TARGET = 3 + None = 0, + Dead = 1, + NoTarget = 2, + InvalidTarget = 3, + NoPath = 4 }; enum PetTalk diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 22336c85617..b76efc4023d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7052,8 +7052,7 @@ void Player::ResetCurrencyWeekCap() itr->second.state = PLAYERCURRENCY_CHANGED; } - WorldPacket data(SMSG_RESET_WEEKLY_CURRENCY, 0); - SendDirectMessage(&data); + SendDirectMessage(WorldPackets::Misc::ResetWeeklyCurrency().Write()); } uint32 Player::GetCurrencyWeekCap(CurrencyTypesEntry const* currency) const diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 76a181ac0bf..e089a9974a7 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -56,6 +56,7 @@ #include "PassiveAI.h" #include "Pet.h" #include "PetAI.h" +#include "PetPackets.h" #include "PhasingHandler.h" #include "Player.h" #include "PlayerAI.h" @@ -10655,15 +10656,16 @@ Player* Unit::GetSpellModOwner() const } ///----------Pet responses methods----------------- -void Unit::SendPetActionFeedback(uint8 msg) +void Unit::SendPetActionFeedback(PetActionFeedback msg, uint32 spellId) { Unit* owner = GetOwner(); if (!owner || owner->GetTypeId() != TYPEID_PLAYER) return; - WorldPacket data(SMSG_PET_ACTION_FEEDBACK, 1); - data << uint8(msg); - owner->ToPlayer()->GetSession()->SendPacket(&data); + WorldPackets::Pet::PetActionFeedback petActionFeedback; + petActionFeedback.SpellID = spellId; + petActionFeedback.Response = msg; + owner->ToPlayer()->SendDirectMessage(petActionFeedback.Write()); } void Unit::SendPetTalk(uint32 pettalk) @@ -10672,10 +10674,10 @@ void Unit::SendPetTalk(uint32 pettalk) if (!owner || owner->GetTypeId() != TYPEID_PLAYER) return; - WorldPacket data(SMSG_PET_ACTION_SOUND, 8 + 4); - data << GetGUID(); - data << uint32(pettalk); - owner->ToPlayer()->GetSession()->SendPacket(&data); + WorldPackets::Pet::PetActionSound petActionSound; + petActionSound.UnitGUID = GetGUID(); + petActionSound.Action = pettalk; + owner->ToPlayer()->SendDirectMessage(petActionSound.Write()); } void Unit::SendPetAIReaction(ObjectGuid guid) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index a092fe764cf..085516b43c4 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -212,6 +212,9 @@ class UnitAI; class UnitAura; class Vehicle; class VehicleJoinEvent; + +enum class PetActionFeedback : uint8; + namespace Movement { class MoveSpline; @@ -1909,8 +1912,8 @@ class TC_GAME_API Unit : public WorldObject void SetControlled(bool apply, UnitState state); ///----------Pet responses methods----------------- - void SendPetActionFeedback (uint8 msg); - void SendPetTalk (uint32 pettalk); + void SendPetActionFeedback(PetActionFeedback msg, uint32 spellId); + void SendPetTalk(uint32 pettalk); void SendPetAIReaction(ObjectGuid guid); ///----------End of Pet responses methods---------- diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index cca640eb97c..c1a2f3e75cf 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1132,8 +1132,8 @@ void Group::MasterLoot(Loot* loot, WorldObject* pLootedObject) uint32 real_count = 0; - WorldPacket data(SMSG_MASTER_LOOT_CANDIDATE_LIST, 1 + GetMembersCount() * 8); - data << uint8(GetMembersCount()); + WorldPackets::Loot::MasterLootCandidateList masterLootCandidateList; + masterLootCandidateList.LootObj = loot->GetGUID(); for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) { @@ -1142,19 +1142,16 @@ void Group::MasterLoot(Loot* loot, WorldObject* pLootedObject) continue; if (looter->IsAtGroupRewardDistance(pLootedObject)) - { - data << looter->GetGUID(); - ++real_count; - } + masterLootCandidateList.Players.push_back(looter->GetGUID()); } - data.put<uint8>(0, real_count); + masterLootCandidateList.Write(); for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) { Player* looter = itr->GetSource(); if (looter->IsAtGroupRewardDistance(pLootedObject)) - looter->GetSession()->SendPacket(&data); + looter->GetSession()->SendPacket(masterLootCandidateList.GetRawPacket()); } } diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp index 0b6243bba77..11da6a2b5f7 100644 --- a/src/server/game/Handlers/BankHandler.cpp +++ b/src/server/game/Handlers/BankHandler.cpp @@ -122,11 +122,8 @@ void WorldSession::HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBa void WorldSession::HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& packet) { - WorldPacket data(SMSG_BUY_BANK_SLOT_RESULT, 4); if (!CanUseBank(packet.Guid)) { - data << uint32(ERR_BANKSLOT_NOTBANKER); - SendPacket(&data); TC_LOG_ERROR("network", "WORLD: HandleBuyBankSlotOpcode - %s not found or you can't interact with him.", packet.Guid.ToString().c_str()); return; } @@ -139,29 +136,17 @@ void WorldSession::HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& pack TC_LOG_INFO("network", "PLAYER: Buy bank bag slot, slot number = %u", slot); BankBagSlotPricesEntry const* slotEntry = sBankBagSlotPricesStore.LookupEntry(slot); - if (!slotEntry) - { - data << uint32(ERR_BANKSLOT_FAILED_TOO_MANY); - SendPacket(&data); return; - } uint32 price = slotEntry->Cost; if (!_player->HasEnoughMoney(uint64(price))) - { - data << uint32(ERR_BANKSLOT_INSUFFICIENT_FUNDS); - SendPacket(&data); return; - } _player->SetBankBagSlotCount(slot); _player->ModifyMoney(-int64(price)); - data << uint32(ERR_BANKSLOT_OK); - SendPacket(&data); - _player->UpdateCriteria(CRITERIA_TYPE_BUY_BANK_SLOT); } diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 8ad71c8852e..381b2a6e6c6 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -601,29 +601,8 @@ void WorldSession::HandleReportPvPAFK(WorldPackets::Battleground::ReportPvPPlaye void WorldSession::HandleRequestRatedBattlefieldInfo(WorldPackets::Battleground::RequestRatedBattlefieldInfo& /*packet*/) { - /// @Todo: perfome research in this case - /// The unk fields are related to arenas - WorldPacket data(SMSG_RATED_BATTLEFIELD_INFO, 72); - data << uint32(0); // BgWeeklyWins20vs20 - data << uint32(0); // BgWeeklyPlayed20vs20 - data << uint32(0); // BgWeeklyPlayed15vs15 - data << uint32(0); - data << uint32(0); // BgWeeklyWins10vs10 - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); // BgWeeklyWins15vs15 - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); // BgWeeklyPlayed10vs10 - data << uint32(0); - data << uint32(0); - - SendPacket(&data); + WorldPackets::Battleground::RatedBattlefieldInfo ratedBattlefieldInfo; + SendPacket(ratedBattlefieldInfo.Write()); } void WorldSession::HandleGetPVPOptionsEnabled(WorldPackets::Battleground::GetPVPOptionsEnabled& /*getPvPOptionsEnabled*/) diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 55373095a18..9d3b120f0ba 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -758,14 +758,16 @@ void WorldSession::HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBag _player->StoreItem(dest, item, true); } -void WorldSession::SendEnchantmentLog(ObjectGuid target, ObjectGuid caster, uint32 itemId, uint32 enchantId) +void WorldSession::SendEnchantmentLog(ObjectGuid owner, ObjectGuid caster, ObjectGuid itemGuid, uint32 itemId, uint32 enchantId, uint32 enchantSlot) { - WorldPacket data(SMSG_ENCHANTMENT_LOG, (8+8+4+4)); - data << target; - data << caster; - data << uint32(itemId); - data << uint32(enchantId); - GetPlayer()->SendMessageToSet(&data, true); + WorldPackets::Item::EnchantmentLog enchantmentLog; + enchantmentLog.Owner = owner; + enchantmentLog.Caster = caster; + enchantmentLog.ItemGUID = itemGuid; + enchantmentLog.ItemID = itemId; + enchantmentLog.Enchantment = enchantId; + enchantmentLog.EnchantSlot = enchantSlot; + GetPlayer()->SendMessageToSet(enchantmentLog.Write(), true); } void WorldSession::SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration) diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 68911435766..c17cb02bbca 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -449,103 +449,104 @@ void WorldSession::DoLootReleaseAll() DoLootRelease(lootPair.second); } -void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData) +void WorldSession::HandleLootMasterGiveOpcode(WorldPackets::Loot::MasterLootItem& masterLootItem) { - uint8 slotid; - ObjectGuid lootguid, target_playerguid; - - recvData >> lootguid >> slotid >> target_playerguid; + AELootResult aeResult; if (!_player->GetGroup() || _player->GetGroup()->GetMasterLooterGuid() != _player->GetGUID() || _player->GetGroup()->GetLootMethod() != MASTER_LOOT) { - _player->SendLootError(lootguid, ObjectGuid::Empty, LOOT_ERROR_DIDNT_KILL); + _player->SendLootError(ObjectGuid::Empty, ObjectGuid::Empty, LOOT_ERROR_DIDNT_KILL); return; } // player on other map - Player* target = ObjectAccessor::GetPlayer(*_player, target_playerguid); + Player* target = ObjectAccessor::GetPlayer(*_player, masterLootItem.Target); if (!target) { - _player->SendLootError(lootguid, ObjectGuid::Empty, LOOT_ERROR_PLAYER_NOT_FOUND); + _player->SendLootError(ObjectGuid::Empty, ObjectGuid::Empty, LOOT_ERROR_PLAYER_NOT_FOUND); return; } TC_LOG_DEBUG("network", "WorldSession::HandleLootMasterGiveOpcode (CMSG_LOOT_MASTER_GIVE, 0x02A3) Target = [%s].", target->GetName().c_str()); - if (_player->GetLootGUID() != lootguid) + for (WorldPackets::Loot::LootRequest const& req : masterLootItem.Loot) { - _player->SendLootError(lootguid, ObjectGuid::Empty, LOOT_ERROR_DIDNT_KILL); - return; - } + Loot* loot = nullptr; + ObjectGuid lootguid = _player->GetLootWorldObjectGUID(req.Object); - if (!_player->IsInRaidWith(target) || !_player->IsInMap(target)) - { - _player->SendLootError(lootguid, ObjectGuid::Empty, LOOT_ERROR_MASTER_OTHER); - TC_LOG_INFO("entities.player.cheat", "MasterLootItem: Player %s tried to give an item to ineligible player %s !", GetPlayer()->GetName().c_str(), target->GetName().c_str()); - return; - } + if (!_player->IsInRaidWith(target) || !_player->IsInMap(target)) + { + _player->SendLootError(req.Object, ObjectGuid::Empty, LOOT_ERROR_MASTER_OTHER); + TC_LOG_INFO("entities.player.cheat", "MasterLootItem: Player %s tried to give an item to ineligible player %s !", GetPlayer()->GetName().c_str(), target->GetName().c_str()); + return; + } - Loot* loot = NULL; + if (GetPlayer()->GetLootGUID().IsCreatureOrVehicle()) + { + Creature* creature = GetPlayer()->GetMap()->GetCreature(lootguid); + if (!creature) + return; - if (GetPlayer()->GetLootGUID().IsCreatureOrVehicle()) - { - Creature* creature = GetPlayer()->GetMap()->GetCreature(lootguid); - if (!creature) + loot = &creature->loot; + } + else if (GetPlayer()->GetLootGUID().IsGameObject()) + { + GameObject* pGO = GetPlayer()->GetMap()->GetGameObject(lootguid); + if (!pGO) + return; + + loot = &pGO->loot; + } + + if (!loot) return; - loot = &creature->loot; - } - else if (GetPlayer()->GetLootGUID().IsGameObject()) - { - GameObject* pGO = GetPlayer()->GetMap()->GetGameObject(lootguid); - if (!pGO) + uint8 slotid = req.LootListID - 1; + if (slotid >= loot->items.size() + loot->quest_items.size()) + { + TC_LOG_DEBUG("loot", "MasterLootItem: Player %s might be using a hack! (slot %d, size %lu)", + GetPlayer()->GetName().c_str(), slotid, (unsigned long)loot->items.size()); return; + } - loot = &pGO->loot; - } + LootItem& item = slotid >= loot->items.size() ? loot->quest_items[slotid - loot->items.size()] : loot->items[slotid]; - if (!loot) - return; + ItemPosCountVec dest; + InventoryResult msg = target->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, item.itemid, item.count); + if (item.follow_loot_rules && !item.AllowedForPlayer(target)) + msg = EQUIP_ERR_CANT_EQUIP_EVER; + if (msg != EQUIP_ERR_OK) + { + if (msg == EQUIP_ERR_ITEM_MAX_COUNT) + _player->SendLootError(req.Object, ObjectGuid::Empty, LOOT_ERROR_MASTER_UNIQUE_ITEM); + else if (msg == EQUIP_ERR_INV_FULL) + _player->SendLootError(req.Object, ObjectGuid::Empty, LOOT_ERROR_MASTER_INV_FULL); + else + _player->SendLootError(req.Object, ObjectGuid::Empty, LOOT_ERROR_MASTER_OTHER); - if (slotid >= loot->items.size() + loot->quest_items.size()) - { - TC_LOG_DEBUG("loot", "MasterLootItem: Player %s might be using a hack! (slot %d, size %lu)", - GetPlayer()->GetName().c_str(), slotid, (unsigned long)loot->items.size()); - return; - } + target->SendEquipError(msg, NULL, NULL, item.itemid); + return; + } - LootItem& item = slotid >= loot->items.size() ? loot->quest_items[slotid - loot->items.size()] : loot->items[slotid]; + // now move item from loot to target inventory + Item* newitem = target->StoreNewItem(dest, item.itemid, true, item.randomBonusListId, item.GetAllowedLooters(), item.context, item.BonusListIDs); + aeResult.Add(newitem, item.count, loot->loot_type); - ItemPosCountVec dest; - InventoryResult msg = target->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, item.itemid, item.count); - if (item.follow_loot_rules && !item.AllowedForPlayer(target)) - msg = EQUIP_ERR_CANT_EQUIP_EVER; - if (msg != EQUIP_ERR_OK) - { - if (msg == EQUIP_ERR_ITEM_MAX_COUNT) - _player->SendLootError(lootguid, ObjectGuid::Empty, LOOT_ERROR_MASTER_UNIQUE_ITEM); - else if (msg == EQUIP_ERR_INV_FULL) - _player->SendLootError(lootguid, ObjectGuid::Empty, LOOT_ERROR_MASTER_INV_FULL); - else - _player->SendLootError(lootguid, ObjectGuid::Empty, LOOT_ERROR_MASTER_OTHER); + // mark as looted + item.count = 0; + item.is_looted = true; - target->SendEquipError(msg, NULL, NULL, item.itemid); - return; + loot->NotifyItemRemoved(slotid); + --loot->unlootedCount; } - // now move item from loot to target inventory - Item* newitem = target->StoreNewItem(dest, item.itemid, true, item.randomBonusListId, item.GetAllowedLooters(), item.context, item.BonusListIDs); - target->SendNewItem(newitem, uint32(item.count), false, false, true); - target->UpdateCriteria(CRITERIA_TYPE_LOOT_ITEM, item.itemid, item.count); - target->UpdateCriteria(CRITERIA_TYPE_LOOT_TYPE, item.itemid, item.count, loot->loot_type); - target->UpdateCriteria(CRITERIA_TYPE_LOOT_EPIC_ITEM, item.itemid, item.count); - - // mark as looted - item.count = 0; - item.is_looted = true; - - loot->NotifyItemRemoved(slotid); - --loot->unlootedCount; + for (AELootResult::ResultValue const& resultValue : aeResult) + { + target->SendNewItem(resultValue.item, resultValue.count, false, false, true); + target->UpdateCriteria(CRITERIA_TYPE_LOOT_ITEM, resultValue.item->GetEntry(), resultValue.count); + target->UpdateCriteria(CRITERIA_TYPE_LOOT_TYPE, resultValue.item->GetEntry(), resultValue.count, resultValue.lootType); + target->UpdateCriteria(CRITERIA_TYPE_LOOT_EPIC_ITEM, resultValue.item->GetEntry(), resultValue.count); + } } void WorldSession::HandleSetLootSpecialization(WorldPackets::Loot::SetLootSpecialization& packet) diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 7739f383e03..287262702e2 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -46,15 +46,15 @@ #include "Trainer.h" #include "WorldPacket.h" -enum StableResultCode +enum class StableResult : uint8 { - STABLE_ERR_MONEY = 0x01, // "you don't have enough money" - STABLE_ERR_INVALID_SLOT = 0x03, // "That slot is locked" - STABLE_SUCCESS_STABLE = 0x08, // stable success - STABLE_SUCCESS_UNSTABLE = 0x09, // unstable/swap success - STABLE_SUCCESS_BUY_SLOT = 0x0A, // buy slot success - STABLE_ERR_EXOTIC = 0x0B, // "you are unable to control exotic creatures" - STABLE_ERR_STABLE = 0x0C, // "Internal pet error" + NotEnoughMoney = 1, // "you don't have enough money" + InvalidSlot = 3, // "That slot is locked" + StableSuccess = 8, // stable success + UnstableSuccess = 9, // unstable/swap success + BuySlotSuccess = 10, // buy slot success + CantControlExotic = 11, // "you are unable to control exotic creatures" + InternalError = 12, // "Internal pet error" }; void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet) @@ -426,11 +426,11 @@ void WorldSession::SendStablePetCallback(ObjectGuid guid, PreparedQueryResult re SendPacket(packet.Write()); } -void WorldSession::SendPetStableResult(uint8 res) +void WorldSession::SendPetStableResult(StableResult result) { - WorldPacket data(SMSG_PET_STABLE_RESULT, 1); - data << uint8(res); - SendPacket(&data); + WorldPackets::Pet::PetStableResult petStableResult; + petStableResult.Result = AsUnderlyingType(result); + SendPacket(petStableResult.Write()); } void WorldSession::HandleStablePet(WorldPacket& recvData) @@ -441,13 +441,13 @@ void WorldSession::HandleStablePet(WorldPacket& recvData) if (!GetPlayer()->IsAlive()) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } if (!CheckStableMaster(npcGUID)) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -460,7 +460,7 @@ void WorldSession::HandleStablePet(WorldPacket& recvData) // can't place in stable dead pet if (!pet || !pet->IsAlive() || pet->getPetType() != HUNTER_PET) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -500,10 +500,10 @@ void WorldSession::HandleStablePetCallback(PreparedQueryResult result) if (freeSlot > 0 && freeSlot <= GetPlayer()->m_stableSlots) { _player->RemovePet(_player->GetPet(), PetSaveMode(freeSlot)); - SendPetStableResult(STABLE_SUCCESS_STABLE); + SendPetStableResult(StableResult::StableSuccess); } else - SendPetStableResult(STABLE_ERR_INVALID_SLOT); + SendPetStableResult(StableResult::InvalidSlot); } void WorldSession::HandleUnstablePet(WorldPacket& recvData) @@ -515,7 +515,7 @@ void WorldSession::HandleUnstablePet(WorldPacket& recvData) if (!CheckStableMaster(npcGUID)) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -547,7 +547,7 @@ void WorldSession::HandleUnstablePetCallback(uint32 petId, PreparedQueryResult r if (!petEntry) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -556,16 +556,16 @@ void WorldSession::HandleUnstablePetCallback(uint32 petId, PreparedQueryResult r { // if problem in exotic pet if (creatureInfo && creatureInfo->IsTameable(true)) - SendPetStableResult(STABLE_ERR_EXOTIC); + SendPetStableResult(StableResult::CantControlExotic); else - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } Pet* pet = _player->GetPet(); if (pet && pet->IsAlive()) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -578,11 +578,11 @@ void WorldSession::HandleUnstablePetCallback(uint32 petId, PreparedQueryResult r { delete newPet; newPet = NULL; - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } - SendPetStableResult(STABLE_SUCCESS_UNSTABLE); + SendPetStableResult(StableResult::UnstableSuccess); } void WorldSession::HandleBuyStableSlot(WorldPacket& recvData) @@ -593,7 +593,7 @@ void WorldSession::HandleBuyStableSlot(WorldPacket& recvData) if (!CheckStableMaster(npcGUID)) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -608,13 +608,13 @@ void WorldSession::HandleBuyStableSlot(WorldPacket& recvData) { ++GetPlayer()->m_stableSlots; _player->ModifyMoney(-int32(SlotPrice->Price)); - SendPetStableResult(STABLE_SUCCESS_BUY_SLOT); + SendPetStableResult(StableResult::BuySlotSuccess); } else - SendPetStableResult(STABLE_ERR_MONEY);*/ + SendPetStableResult(StableResult::NotEnoughMoney);*/ } else - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); } void WorldSession::HandleStableRevivePet(WorldPacket &/* recvData */) @@ -631,7 +631,7 @@ void WorldSession::HandleStableSwapPet(WorldPacket& recvData) if (!CheckStableMaster(npcGUID)) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -643,7 +643,7 @@ void WorldSession::HandleStableSwapPet(WorldPacket& recvData) if (!pet || pet->getPetType() != HUNTER_PET) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -664,7 +664,7 @@ void WorldSession::HandleStableSwapPetCallback(uint32 petId, PreparedQueryResult if (!result) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -675,20 +675,20 @@ void WorldSession::HandleStableSwapPetCallback(uint32 petId, PreparedQueryResult if (!petEntry) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(petEntry); if (!creatureInfo || !creatureInfo->IsTameable(true)) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } if (!creatureInfo->IsTameable(_player->CanTameExoticPets())) { - SendPetStableResult(STABLE_ERR_EXOTIC); + SendPetStableResult(StableResult::CantControlExotic); return; } @@ -696,7 +696,7 @@ void WorldSession::HandleStableSwapPetCallback(uint32 petId, PreparedQueryResult // The player's pet could have been removed during the delay of the DB callback if (!pet) { - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); return; } @@ -708,10 +708,10 @@ void WorldSession::HandleStableSwapPetCallback(uint32 petId, PreparedQueryResult if (!newPet->LoadPetFromDB(_player, petEntry, petId)) { delete newPet; - SendPetStableResult(STABLE_ERR_STABLE); + SendPetStableResult(StableResult::InternalError); } else - SendPetStableResult(STABLE_SUCCESS_UNSTABLE); + SendPetStableResult(StableResult::UnstableSuccess); } void WorldSession::HandleRepairItemOpcode(WorldPackets::Item::RepairItem& packet) diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index db35fca9e07..30b8450ad1e 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -420,7 +420,7 @@ void WorldSession::HandlePetCancelAuraOpcode(WorldPackets::Spells::PetCancelAura if (!pet->IsAlive()) { - pet->SendPetActionFeedback(FEEDBACK_PET_DEAD); + pet->SendPetActionFeedback(PetActionFeedback::Dead, 0); return; } diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 0d0325644ba..c4d1c5de07e 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -307,6 +307,35 @@ WorldPacket const* WorldPackets::Battleground::DestroyArenaUnit::Write() return &_worldPacket; } +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::RatedBattlefieldInfo::BracketInfo const& bracketInfo) +{ + data << int32(bracketInfo.PersonalRating); + data << int32(bracketInfo.Ranking); + data << int32(bracketInfo.SeasonPlayed); + data << int32(bracketInfo.SeasonWon); + data << int32(bracketInfo.Unused1); + data << int32(bracketInfo.Unused2); + data << int32(bracketInfo.WeeklyPlayed); + data << int32(bracketInfo.WeeklyWon); + data << int32(bracketInfo.BestWeeklyRating); + data << int32(bracketInfo.LastWeeksBestRating); + data << int32(bracketInfo.BestSeasonRating); + data << int32(bracketInfo.PvpTierID); + data << int32(bracketInfo.Unused3); + data.WriteBit(bracketInfo.Unused4); + data.FlushBits(); + + return data; +} + +WorldPacket const* WorldPackets::Battleground::RatedBattlefieldInfo::Write() +{ + for (BracketInfo const& bracket : Bracket) + _worldPacket << bracket; + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Battleground::PVPMatchInit::Write() { _worldPacket << uint32(MapID); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 59c49dcc8b9..470c22b87af 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -424,6 +424,32 @@ namespace WorldPackets void Read() override { } }; + class RatedBattlefieldInfo final : public ServerPacket + { + public: + RatedBattlefieldInfo() : ServerPacket(SMSG_RATED_BATTLEFIELD_INFO, 6 * sizeof(BracketInfo)) { } + + WorldPacket const* Write() override; + + struct BracketInfo + { + int32 PersonalRating = 0; + int32 Ranking = 0; + int32 SeasonPlayed = 0; + int32 SeasonWon = 0; + int32 Unused1 = 0; + int32 Unused2 = 0; + int32 WeeklyPlayed = 0; + int32 WeeklyWon = 0; + int32 BestWeeklyRating = 0; + int32 LastWeeksBestRating = 0; + int32 BestSeasonRating = 0; + int32 PvpTierID = 0; + int32 Unused3 = 0; + bool Unused4 = false; + } Bracket[6]; + }; + class PVPMatchInit final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index aac470c1610..db8b6838fde 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -313,6 +313,18 @@ WorldPacket const* WorldPackets::Item::ItemCooldown::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Item::EnchantmentLog::Write() +{ + _worldPacket << Owner; + _worldPacket << Caster; + _worldPacket << ItemGUID; + _worldPacket << int32(ItemID); + _worldPacket << int32(Enchantment); + _worldPacket << int32(EnchantSlot); + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Item::ItemEnchantTimeUpdate::Write() { _worldPacket << ItemGuid; diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index 2c6d5e1ceac..24dff10878c 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -424,6 +424,21 @@ namespace WorldPackets uint32 Cooldown = 0; }; + class EnchantmentLog final : public ServerPacket + { + public: + EnchantmentLog() : ServerPacket(SMSG_ENCHANTMENT_LOG, 0) { } + + WorldPacket const* Write() override; + + ObjectGuid Owner; + ObjectGuid Caster; + ObjectGuid ItemGUID; + int32 ItemID = 0; + int32 Enchantment = 0; + int32 EnchantSlot = 0; + }; + class ItemEnchantTimeUpdate final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp index 93e5622e127..9a3b7e7bb3a 100644 --- a/src/server/game/Server/Packets/LootPackets.cpp +++ b/src/server/game/Server/Packets/LootPackets.cpp @@ -78,6 +78,20 @@ void WorldPackets::Loot::LootItem::Read() } } +void WorldPackets::Loot::MasterLootItem::Read() +{ + uint32 Count; + _worldPacket >> Count; + _worldPacket >> Target; + + Loot.resize(Count); + for (uint32 i = 0; i < Count; ++i) + { + _worldPacket >> Loot[i].Object; + _worldPacket >> Loot[i].LootListID; + } +} + WorldPacket const* WorldPackets::Loot::LootRemoved::Write() { _worldPacket << Owner; @@ -202,6 +216,16 @@ WorldPacket const* WorldPackets::Loot::LootRollsComplete::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Loot::MasterLootCandidateList::Write() +{ + _worldPacket << LootObj; + _worldPacket << uint32(Players.size()); + for (ObjectGuid const& player : Players) + _worldPacket << player; + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Loot::AELootTargets::Write() { _worldPacket << uint32(Count); diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h index cf164956a9e..1c8b4c20633 100644 --- a/src/server/game/Server/Packets/LootPackets.h +++ b/src/server/game/Server/Packets/LootPackets.h @@ -92,6 +92,17 @@ namespace WorldPackets Array<LootRequest, 1000> Loot; }; + class MasterLootItem final : public ClientPacket + { + public: + MasterLootItem(WorldPacket&& packet) : ClientPacket(CMSG_MASTER_LOOT_ITEM, std::move(packet)) { } + + void Read() override; + + Array<LootRequest, 1000> Loot; + ObjectGuid Target; + }; + class LootRemoved final : public ServerPacket { public: @@ -213,7 +224,7 @@ namespace WorldPackets LootItemData Item; }; - class LootRollBroadcast : public ServerPacket + class LootRollBroadcast final : public ServerPacket { public: LootRollBroadcast() : ServerPacket(SMSG_LOOT_ROLL) { } @@ -228,7 +239,7 @@ namespace WorldPackets bool Autopassed = false; ///< Triggers message |HlootHistory:%d|h[Loot]|h: You automatically passed on: %s because you cannot loot that item. }; - class LootRollWon : public ServerPacket + class LootRollWon final : public ServerPacket { public: LootRollWon() : ServerPacket(SMSG_LOOT_ROLL_WON) { } @@ -243,7 +254,7 @@ namespace WorldPackets bool MainSpec = false; }; - class LootAllPassed : public ServerPacket + class LootAllPassed final : public ServerPacket { public: LootAllPassed() : ServerPacket(SMSG_LOOT_ALL_PASSED) { } @@ -254,7 +265,7 @@ namespace WorldPackets LootItemData Item; }; - class LootRollsComplete : public ServerPacket + class LootRollsComplete final : public ServerPacket { public: LootRollsComplete() : ServerPacket(SMSG_LOOT_ROLLS_COMPLETE, 16 + 1) { } @@ -265,7 +276,18 @@ namespace WorldPackets uint8 LootListID = 0; }; - class AELootTargets : public ServerPacket + class MasterLootCandidateList final : public ServerPacket + { + public: + MasterLootCandidateList() : ServerPacket(SMSG_MASTER_LOOT_CANDIDATE_LIST, 18 + 40 * 18) { } + + WorldPacket const* Write() override; + + std::vector<ObjectGuid> Players; + ObjectGuid LootObj; + }; + + class AELootTargets final : public ServerPacket { public: AELootTargets(uint32 count) : ServerPacket(SMSG_AE_LOOT_TARGETS, 4), Count(count) { } @@ -275,7 +297,7 @@ namespace WorldPackets uint32 Count; }; - class AELootTargetsAck : public ServerPacket + class AELootTargetsAck final : public ServerPacket { public: AELootTargetsAck() : ServerPacket(SMSG_AE_LOOT_TARGET_ACK, 0) { } diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 683340529d8..2a6588cf8ae 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -96,6 +96,14 @@ namespace WorldPackets int32 GameTimeHolidayOffset = 0; }; + class ResetWeeklyCurrency final : public ServerPacket + { + public: + ResetWeeklyCurrency() : ServerPacket(SMSG_RESET_WEEKLY_CURRENCY, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; + class SetCurrency final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp index 2cbd0d49e1b..1389f36f530 100644 --- a/src/server/game/Server/Packets/PetPackets.cpp +++ b/src/server/game/Server/Packets/PetPackets.cpp @@ -73,6 +73,13 @@ WorldPacket const* WorldPackets::Pet::PetStableList::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Pet::PetStableResult::Write() +{ + _worldPacket << uint8(Result); + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Pet::PetLearnedSpells::Write() { _worldPacket << uint32(Spells.size()); @@ -185,3 +192,19 @@ WorldPacket const* WorldPackets::Pet::SetPetSpecialization::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Pet::PetActionFeedback::Write() +{ + _worldPacket << int32(SpellID); + _worldPacket << uint8(Response); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Pet::PetActionSound::Write() +{ + _worldPacket << UnitGUID; + _worldPacket << int32(Action); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h index f0e89d9b547..52bdb6850ae 100644 --- a/src/server/game/Server/Packets/PetPackets.h +++ b/src/server/game/Server/Packets/PetPackets.h @@ -19,6 +19,7 @@ #define PetPackets_h__ #include "Packet.h" +#include "PetDefines.h" #include "Position.h" #include "ObjectGuid.h" #include "Optional.h" @@ -140,6 +141,16 @@ namespace WorldPackets std::vector<PetStableInfo> Pets; }; + class PetStableResult final : public ServerPacket + { + public: + PetStableResult() : ServerPacket(SMSG_PET_STABLE_RESULT, 1) { } + + WorldPacket const* Write() override; + + uint8 Result = 0; + }; + class PetLearnedSpells final : public ServerPacket { public: @@ -237,6 +248,27 @@ namespace WorldPackets uint16 SpecID = 0; }; + class PetActionFeedback final : public ServerPacket + { + public: + PetActionFeedback() : ServerPacket(SMSG_PET_ACTION_FEEDBACK, 4 + 1) { } + + WorldPacket const* Write() override; + + int32 SpellID = 0; + ::PetActionFeedback Response = ::PetActionFeedback::None; + }; + + class PetActionSound final : public ServerPacket + { + public: + PetActionSound() : ServerPacket(SMSG_PET_ACTION_SOUND, 18 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid UnitGUID; + int32 Action = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 521ba8a8407..f07da36d7a9 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -37,19 +37,6 @@ public: } }; -template<void(WorldSession::*HandlerFunction)(WorldPacket&)> -class PacketHandler<WorldPacket, HandlerFunction> : public ClientOpcodeHandler -{ -public: - PacketHandler(char const* name, SessionStatus status, PacketProcessing processing) : ClientOpcodeHandler(name, status, processing) { } - - void Call(WorldSession* session, WorldPacket& packet) const override - { - (session->*HandlerFunction)(packet); - session->LogUnprocessedTail(&packet); - } -}; - OpcodeTable opcodeTable; template<typename T> @@ -541,7 +528,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MAIL_RETURN_TO_SENDER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMailReturnToSender); DEFINE_HANDLER(CMSG_MAIL_TAKE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMailTakeItem); DEFINE_HANDLER(CMSG_MAIL_TAKE_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMailTakeMoney); - DEFINE_HANDLER(CMSG_MASTER_LOOT_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootMasterGiveOpcode); + DEFINE_HANDLER(CMSG_MASTER_LOOT_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLootMasterGiveOpcode); DEFINE_HANDLER(CMSG_MINIMAP_PING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMinimapPingOpcode); DEFINE_HANDLER(CMSG_MISSILE_TRAJECTORY_COLLISION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMissileTrajectoryCollision); DEFINE_HANDLER(CMSG_MOUNT_CLEAR_FANFARE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -1185,7 +1172,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_EMOTE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENABLE_BARBER_SHOP, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENABLE_ENCRYPTION, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCHANTMENT_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCHANTMENT_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENTITLEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1451,7 +1438,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJECTIVE_ADD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJECTIVE_REMOVE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MAP_OBJ_EVENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MASTER_LOOT_CANDIDATE_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MASTER_LOOT_CANDIDATE_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MESSAGE_BOX, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MINIMAP_PING, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1579,8 +1566,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SHOW_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SHOW_SIGNATURES, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_SIGN_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_ACTION_FEEDBACK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_ACTION_SOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_ACTION_FEEDBACK, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_ACTION_SOUND, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_BATTLE_CHAT_RESTRICTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1608,7 +1595,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_SLOT_UPDATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_SPELLS_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_STABLE_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_STABLE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_STABLE_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_TAME_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_UNLEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PHASE_SHIFT_CHANGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1692,7 +1679,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_INSTANCE_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_MARKERS_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RANDOM_ROLL, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_RATED_BATTLEFIELD_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RATED_BATTLEFIELD_INFO, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_COMPLETED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_STARTED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1715,7 +1702,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_COMPRESSION_CONTEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_FAILED_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_RANGED_COMBAT_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_WEEKLY_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_WEEKLY_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESPEC_WIPE_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_CAST_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 8b73a6fc26a..9cdef186277 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1834,7 +1834,6 @@ enum OpcodeServer : uint16 // Deleted opcodes, here only to allow compile SMSG_ARENA_TEAM_STATS = 0xBADD, - SMSG_BUY_BANK_SLOT_RESULT = 0xBADD, SMSG_BF_MGR_EJECTED = 0xBADD, SMSG_BF_MGR_ENTERING = 0xBADD, SMSG_BF_MGR_ENTRY_INVITE = 0xBADD, diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 5ca01aa520b..ef257e71c9f 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -707,10 +707,10 @@ void WorldSession::Handle_NULL(WorldPackets::Null& null) TC_LOG_ERROR("network.opcode", "Received unhandled opcode %s from %s", GetOpcodeNameForLogging(null.GetOpcode()).c_str(), GetPlayerInfo().c_str()); } -void WorldSession::Handle_EarlyProccess(WorldPacket& recvPacket) +void WorldSession::Handle_EarlyProccess(WorldPackets::Null& null) { TC_LOG_ERROR("network.opcode", "Received opcode %s that must be processed in WorldSocket::OnRead from %s" - , GetOpcodeNameForLogging(static_cast<OpcodeClient>(recvPacket.GetOpcode())).c_str(), GetPlayerInfo().c_str()); + , GetOpcodeNameForLogging(null.GetOpcode()).c_str(), GetPlayerInfo().c_str()); } void WorldSession::SendConnectToInstance(WorldPackets::Auth::ConnectToSerial serial) diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index a5a774611d2..0f2a577d260 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -57,6 +57,7 @@ struct Position; enum class AuctionCommand : int8; enum class AuctionResult : int8; enum InventoryResult : uint8; +enum class StableResult : uint8; namespace lfg { @@ -432,6 +433,7 @@ namespace WorldPackets { class LootUnit; class LootItem; + class MasterLootItem; class LootRelease; class LootMoney; class LootRoll; @@ -1013,7 +1015,7 @@ class TC_GAME_API WorldSession void SendQueryPetNameResponse(ObjectGuid guid); void SendStablePet(ObjectGuid guid); void SendStablePetCallback(ObjectGuid guid, PreparedQueryResult result); - void SendPetStableResult(uint8 guid); + void SendPetStableResult(StableResult result); bool CheckStableMaster(ObjectGuid guid); // Account Data @@ -1057,7 +1059,7 @@ class TC_GAME_API WorldSession void SendBlackMarketOutbidNotification(BlackMarketTemplate const* templ); //Item Enchantment - void SendEnchantmentLog(ObjectGuid target, ObjectGuid caster, uint32 itemId, uint32 enchantId); + void SendEnchantmentLog(ObjectGuid owner, ObjectGuid caster, ObjectGuid itemGuid, uint32 itemId, uint32 enchantId, uint32 enchantSlot); void SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration); //Taxi @@ -1112,7 +1114,7 @@ class TC_GAME_API WorldSession public: // opcodes handlers void Handle_NULL(WorldPackets::Null& null); // not used - void Handle_EarlyProccess(WorldPacket& recvPacket); // just mark packets processed in WorldSocket::OnRead + void Handle_EarlyProccess(WorldPackets::Null& null); // just mark packets processed in WorldSocket::OnRead void LogUnprocessedTail(WorldPacket const* packet); void HandleCharEnum(PreparedQueryResult result); @@ -1185,7 +1187,7 @@ class TC_GAME_API WorldSession void HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& packet); void HandleLootOpcode(WorldPackets::Loot::LootUnit& packet); void HandleLootReleaseOpcode(WorldPackets::Loot::LootRelease& packet); - void HandleLootMasterGiveOpcode(WorldPacket& recvPacket); + void HandleLootMasterGiveOpcode(WorldPackets::Loot::MasterLootItem& masterLootItem); void HandleSetLootSpecialization(WorldPackets::Loot::SetLootSpecialization& packet); void HandleWhoOpcode(WorldPackets::Who::WhoRequestPkt& whoRequest); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 18b4539e6e6..8abe7c1584b 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2084,11 +2084,6 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo if (apply) { - /* - WorldPacket data(SMSG_FEIGN_DEATH_RESISTED, 0); - target->SendMessageToSet(&data, true); - */ - UnitList targets; Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(target, target, target->GetMap()->GetVisibilityRange()); Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(target, targets, u_check); @@ -2130,11 +2125,6 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo } else { - /* - WorldPacket data(SMSG_FEIGN_DEATH_RESISTED, 0); - target->SendMessageToSet(&data, true); - */ - target->RemoveUnitFlag(UNIT_FLAG_UNK_29); target->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); target->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD); |