diff --git a/src/server/game/Handlers/PerkProgramHandler.cpp b/src/server/game/Handlers/PerkProgramHandler.cpp new file mode 100644 index 000000000..098f5448f --- /dev/null +++ b/src/server/game/Handlers/PerkProgramHandler.cpp @@ -0,0 +1,55 @@ +/* + * Copyright 2023 Algeth + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "Bag.h" +#include "PerkProgramData.h" +#include "PerkProgramMgr.h" +#include "PerksProgramPacketsCommon.h" +#include "Config.h" +#include "DatabaseEnv.h" +#include "ObjectMgr.h" +#include "ScriptMgr.h" +#include "Random.h" +#include + + +void WorldSession::HandleGetPerkProgramRequest(WorldPackets::PerksProgram::PerksProgramStatusRequest& /*packet*/) +{ + if (!_player) + return; + GetPerkProgramMgr()->SendPerksProgramActivities(); +} + +void WorldSession::HandlePerkProgramRequestPurchase(WorldPackets::PerksProgram::PerksProgramRequestPurchase& packet) +{ + if (!_player) + return; + + //GetPerkProgramMgr()->BuyItem(packet.PerksVendorItemID, packet.vendorGuid); +} + +void WorldSession::HandlePerkProgamSetForzenVendorItem(WorldPackets::PerksProgram::PerksProgramSetFrozenVendorItem& packet) +{ + if (!_player) + return; +} + +void WorldSession::HandlePerkProgramPendingReward(WorldPackets::PerksProgram::PerksProgramPendingReward& packet) +{ + if (!_player) + return; +} diff --git a/src/server/game/Server/Packets/PerksProgramPackets.h b/src/server/game/Server/Packets/PerksProgramPackets.h index fd9cd2900..cb42924ec 100644 --- a/src/server/game/Server/Packets/PerksProgramPackets.h +++ b/src/server/game/Server/Packets/PerksProgramPackets.h @@ -110,6 +110,14 @@ public: Timestamp<> TimeUntilStart = 0; Timestamp<> TimeUntilEnd = 0; }; + +class PerksProgramPendingReward final : public ClientPacket +{ +public: + PerksProgramPendingReward(WorldPacket&& packet) : ClientPacket(CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS, std::move(packet)) {} + + void Read() override {} +}; } #endif diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 65d70c566..414649038 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -879,8 +879,8 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_PERKS_PROGRAM_GET_RECENT_PURCHASES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_ITEMS_REFRESHED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_PURCHASE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandlePerkProgramPendingReward); + DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_PURCHASE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandlePerkProgramRequestPurchase); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_REFUND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_STATUS_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index f41d6acbd..3f674442a 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -37,6 +37,9 @@ #include #include #include +//WowCommunity +#include "PerkProgramMgr.h" +//WowCommunity class BlackMarketEntry; class CollectionMgr; @@ -50,6 +53,7 @@ class Unit; class WorldPacket; class WorldSession; +class PerkProgramManager; namespace Playerbot { class BotSession; } @@ -743,7 +747,17 @@ namespace WorldPackets class GetCharacterCurrencyTransferLog; //WowCommunity } + //WowCommunity + namespace PerksProgram + { + class PerksProgramStatusRequest; + class PerksProgramRequestPurchase; + class PerksProgramSetFrozenVendorItem; + class PerksProgramPendingReward; + } + + //WowCommunity namespace Movement { class ClientPlayerMovement; @@ -1535,6 +1549,13 @@ class TC_GAME_API WorldSession void HandleMoveAddImpulseAck(WorldPackets::Movement::MoveAddImpulseAck& moveAddImpulseAck); void HandleMoveSetCanDriveAck(WorldPackets::Movement::MoveSetCanDriveAck& moveSetCanDriveAck); void HandleMoveStartDriveForward(WorldPackets::Movement::MoveStartDriveForward& moveStartDriveForward); + + //PERKS + void HandleGetPerkProgramRequest(WorldPackets::PerksProgram::PerksProgramStatusRequest& packet); + void HandlePerkProgramRequestPurchase(WorldPackets::PerksProgram::PerksProgramRequestPurchase& packet); + void HandlePerkProgamSetForzenVendorItem(WorldPackets::PerksProgram::PerksProgramSetFrozenVendorItem& packet); + void HandlePerkProgramPendingReward(WorldPackets::PerksProgram::PerksProgramPendingReward& packet); + //wowcommunity void HandleRepopRequest(WorldPackets::Misc::RepopRequest& packet); @@ -2510,6 +2531,13 @@ class TC_GAME_API WorldSession bool _isBot; #endif + //WowCommunity + private: + std::shared_ptr _perkProgramMgr; + public: + PerkProgramManager* GetPerkProgramMgr() const { return _perkProgramMgr.get(); } + //WowCommunity + WorldSession(WorldSession const& right) = delete; WorldSession& operator=(WorldSession const& right) = delete; }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index e16e46580..f8879e2c7 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -116,6 +116,7 @@ #include "NeighborhoodMgr.h" #include "PetBattleMgr.h" #include "InitiativeManager.h" +#include "PerkProgramData.h" #ifdef BUILD_PLAYERBOT #include "Lifecycle/BotSpawner.h"