trading post
This commit is contained in:
@@ -1,167 +1,167 @@
|
||||
///*
|
||||
// * Copyright (C) WowCommunity Project
|
||||
// *
|
||||
// * This SourceCode is NOT free a software. Please hold everything Private
|
||||
// * and read our Terms
|
||||
// */
|
||||
//
|
||||
//#include "PerkProgramData.h"
|
||||
//#include "PerkProgramMgr.h"
|
||||
//#include "Containers.h"
|
||||
//#include "DatabaseEnv.h"
|
||||
//#include "ObjectMgr.h"
|
||||
//#include "DB2Stores.h"
|
||||
//#include <sstream>
|
||||
//#include "GameTime.h"
|
||||
//
|
||||
//PerkProgramDataStoreMgr::PerkProgramDataStoreMgr() {};
|
||||
//
|
||||
//PerkProgramDataStoreMgr::~PerkProgramDataStoreMgr() {};
|
||||
//
|
||||
//PerkProgramDataStoreMgr* PerkProgramDataStoreMgr::instance()
|
||||
//{
|
||||
// static PerkProgramDataStoreMgr instance;
|
||||
// return &instance;
|
||||
//}
|
||||
//
|
||||
//namespace
|
||||
//{
|
||||
// std::unordered_map<uint32, PerkProgramData::PerkVendorItem> _vendorTemplates;
|
||||
// std::vector<PerkProgramData::ActivityTemplate> m_activeActivity;
|
||||
//}
|
||||
//
|
||||
//void PerkProgramDataStoreMgr::Initialize()
|
||||
//{
|
||||
// LoadPerkVendorItem();
|
||||
// LoadActivities();
|
||||
//}
|
||||
//
|
||||
//void PerkProgramDataStoreMgr::LoadPerkVendorItem()
|
||||
//{
|
||||
// TC_LOG_INFO("server.loading", "Loading PerkPrograms Vendor Items Templates ...");
|
||||
// _vendorTemplates.clear();
|
||||
//
|
||||
// if (!sPerksVendorItemStore.GetNumRows())
|
||||
// {
|
||||
// TC_LOG_WARN("server.loading", ">> PerksVendorItem store is empty, skipping vendor items");
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// for (PerksVendorItemEntry const* itemVendor : sPerksVendorItemStore)
|
||||
// {
|
||||
// if (!itemVendor)
|
||||
// continue;
|
||||
//
|
||||
// PerkProgramData::PerkVendorItem vendorItem;
|
||||
// vendorItem.Id = itemVendor->ID;
|
||||
// vendorItem.ItemID = itemVendor->ItemID;
|
||||
// vendorItem.MountSpellID = itemVendor->Unknown010001;
|
||||
// vendorItem.PetSpellID = itemVendor->Unknown020001;
|
||||
// vendorItem.TransmogSet = 0;
|
||||
// vendorItem.ItemModifiedAppearanceID = 0;
|
||||
// vendorItem.ToyItem = 0;
|
||||
// vendorItem.Cost = itemVendor->Cost;
|
||||
// vendorItem.CategoryId = itemVendor->PerksVendorCategoryID;
|
||||
//
|
||||
// _vendorTemplates.insert(std::make_pair(itemVendor->ID, vendorItem));
|
||||
// }
|
||||
//
|
||||
// TC_LOG_INFO("server.loading", ">> Loaded {} PerkPrograms Vendor Items Templates", uint32(_vendorTemplates.size()));
|
||||
//}
|
||||
//
|
||||
//std::unordered_map<uint32, PerkProgramData::PerkVendorItem> PerkProgramDataStoreMgr::GetVendorItems()
|
||||
//{
|
||||
// return _vendorTemplates;
|
||||
//}
|
||||
//
|
||||
//PerkProgramData::PerkVendorItem const* PerkProgramDataStoreMgr::GetVendorItem(uint32 entry)
|
||||
//{
|
||||
// auto itr = _vendorTemplates.find(entry);
|
||||
// if (itr != _vendorTemplates.end())
|
||||
// return &itr->second;
|
||||
//
|
||||
// return nullptr;
|
||||
//}
|
||||
//
|
||||
//PerkProgramData::PerkVendorItem const* PerkProgramDataStoreMgr::GetRandomVendorItem()
|
||||
//{
|
||||
// if (_vendorTemplates.empty())
|
||||
// return nullptr;
|
||||
//
|
||||
// auto it = _vendorTemplates.begin();
|
||||
// std::advance(it, rand() % _vendorTemplates.size());
|
||||
// return &it->second;
|
||||
//}
|
||||
//
|
||||
//std::vector<PerkProgramData::ActivityTemplate> PerkProgramDataStoreMgr::GetActivities()
|
||||
//{
|
||||
// return m_activeActivity;
|
||||
//}
|
||||
//
|
||||
//uint32 PerkProgramDataStoreMgr::GetActivityCriteriatree(uint32 activityId)
|
||||
//{
|
||||
// for (auto const& ac : m_activeActivity)
|
||||
// {
|
||||
// if (ac.ActivityID == activityId)
|
||||
// return ac.CriteriaTree;
|
||||
// }
|
||||
// return 0;
|
||||
//}
|
||||
//
|
||||
//uint32 PerkProgramDataStoreMgr::GetActivityCurrencyAmount(uint32 activityId)
|
||||
//{
|
||||
// for (auto const& ac : m_activeActivity)
|
||||
// {
|
||||
// if (ac.ActivityID == activityId)
|
||||
// return ac.CurrencyAmount;
|
||||
// }
|
||||
// return 0;
|
||||
//}
|
||||
//
|
||||
//void PerkProgramDataStoreMgr::LoadActivities()
|
||||
//{
|
||||
// CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PERK_PROGRAM_ACTIVITY);
|
||||
// PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
// m_activeActivity.clear();
|
||||
// if (!result)
|
||||
// {
|
||||
// GenerateRandomActivities(false);
|
||||
// return;
|
||||
// }
|
||||
// do
|
||||
// {
|
||||
// Field* fields = result->Fetch();
|
||||
// uint32 activityId = fields[0].GetUInt32();
|
||||
// PerksActivityEntry const* entry = sPerksActivityStore.LookupEntry(activityId);
|
||||
// if (!entry)
|
||||
// continue;
|
||||
// PerkProgramData::ActivityTemplate ac;
|
||||
// ac.ActivityID = entry->ID;
|
||||
// ac.CriteriaTree = entry->CriteriaTreeID;
|
||||
// ac.CurrencyAmount = entry->ThresholdContributionAmount;
|
||||
// ac.Priority = entry->Priority;
|
||||
// m_activeActivity.push_back(ac);
|
||||
//
|
||||
// } while (result->NextRow());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramDataStoreMgr::GenerateRandomActivities(bool /*clearOld*/)
|
||||
//{
|
||||
// CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PERK_PROGRAM_ACTIVITY);
|
||||
// CharacterDatabase.Execute(stmt);
|
||||
// m_activeActivity.clear();
|
||||
//
|
||||
// for (PerksActivityEntry const* db : sDB2Manager.GetRandomActivitiesXTag())
|
||||
// {
|
||||
// PerkProgramData::ActivityTemplate ac;
|
||||
// ac.ActivityID = db->ID;
|
||||
// ac.CriteriaTree = db->CriteriaTreeID;
|
||||
// ac.CurrencyAmount = db->ThresholdContributionAmount;
|
||||
// ac.Priority = db->Priority;
|
||||
// m_activeActivity.push_back(ac);
|
||||
//
|
||||
// stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_PERK_PROGRAM_ACTIVITY);
|
||||
// stmt->setUInt32(0, ac.ActivityID);
|
||||
// CharacterDatabase.Execute(stmt);
|
||||
// }
|
||||
//}
|
||||
/*
|
||||
* Copyright (C) WowCommunity Project
|
||||
*
|
||||
* This SourceCode is NOT free a software. Please hold everything Private
|
||||
* and read our Terms
|
||||
*/
|
||||
|
||||
#include "PerkProgramData.h"
|
||||
#include "PerkProgramMgr.h"
|
||||
#include "Containers.h"
|
||||
#include "DatabaseEnv.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "DB2Stores.h"
|
||||
#include <sstream>
|
||||
#include "GameTime.h"
|
||||
|
||||
PerkProgramDataStoreMgr::PerkProgramDataStoreMgr() {};
|
||||
|
||||
PerkProgramDataStoreMgr::~PerkProgramDataStoreMgr() {};
|
||||
|
||||
PerkProgramDataStoreMgr* PerkProgramDataStoreMgr::instance()
|
||||
{
|
||||
static PerkProgramDataStoreMgr instance;
|
||||
return &instance;
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
std::unordered_map<uint32, PerkProgramData::PerkVendorItem> _vendorTemplates;
|
||||
std::vector<PerkProgramData::ActivityTemplate> m_activeActivity;
|
||||
}
|
||||
|
||||
void PerkProgramDataStoreMgr::Initialize()
|
||||
{
|
||||
LoadPerkVendorItem();
|
||||
LoadActivities();
|
||||
}
|
||||
|
||||
void PerkProgramDataStoreMgr::LoadPerkVendorItem()
|
||||
{
|
||||
TC_LOG_INFO("server.loading", "Loading PerkPrograms Vendor Items Templates ...");
|
||||
_vendorTemplates.clear();
|
||||
|
||||
if (!sPerksVendorItemStore.GetNumRows())
|
||||
{
|
||||
TC_LOG_WARN("server.loading", ">> PerksVendorItem store is empty, skipping vendor items");
|
||||
return;
|
||||
}
|
||||
|
||||
for (PerksVendorItemEntry const* itemVendor : sPerksVendorItemStore)
|
||||
{
|
||||
if (!itemVendor)
|
||||
continue;
|
||||
|
||||
PerkProgramData::PerkVendorItem vendorItem;
|
||||
vendorItem.Id = itemVendor->ID;
|
||||
vendorItem.ItemID = itemVendor->ItemID;
|
||||
vendorItem.MountSpellID = itemVendor->Unknown010001;
|
||||
vendorItem.PetSpellID = itemVendor->Unknown020001;
|
||||
vendorItem.TransmogSet = 0;
|
||||
vendorItem.ItemModifiedAppearanceID = 0;
|
||||
vendorItem.ToyItem = 0;
|
||||
vendorItem.Cost = itemVendor->Cost;
|
||||
vendorItem.CategoryId = itemVendor->PerksVendorCategoryID;
|
||||
|
||||
_vendorTemplates.insert(std::make_pair(itemVendor->ID, vendorItem));
|
||||
}
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Loaded {} PerkPrograms Vendor Items Templates", uint32(_vendorTemplates.size()));
|
||||
}
|
||||
|
||||
std::unordered_map<uint32, PerkProgramData::PerkVendorItem> PerkProgramDataStoreMgr::GetVendorItems()
|
||||
{
|
||||
return _vendorTemplates;
|
||||
}
|
||||
|
||||
PerkProgramData::PerkVendorItem const* PerkProgramDataStoreMgr::GetVendorItem(uint32 entry)
|
||||
{
|
||||
auto itr = _vendorTemplates.find(entry);
|
||||
if (itr != _vendorTemplates.end())
|
||||
return &itr->second;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
PerkProgramData::PerkVendorItem const* PerkProgramDataStoreMgr::GetRandomVendorItem()
|
||||
{
|
||||
if (_vendorTemplates.empty())
|
||||
return nullptr;
|
||||
|
||||
auto it = _vendorTemplates.begin();
|
||||
std::advance(it, rand() % _vendorTemplates.size());
|
||||
return &it->second;
|
||||
}
|
||||
|
||||
std::vector<PerkProgramData::ActivityTemplate> PerkProgramDataStoreMgr::GetActivities()
|
||||
{
|
||||
return m_activeActivity;
|
||||
}
|
||||
|
||||
uint32 PerkProgramDataStoreMgr::GetActivityCriteriatree(uint32 activityId)
|
||||
{
|
||||
for (auto const& ac : m_activeActivity)
|
||||
{
|
||||
if (ac.ActivityID == activityId)
|
||||
return ac.CriteriaTree;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 PerkProgramDataStoreMgr::GetActivityCurrencyAmount(uint32 activityId)
|
||||
{
|
||||
for (auto const& ac : m_activeActivity)
|
||||
{
|
||||
if (ac.ActivityID == activityId)
|
||||
return ac.CurrencyAmount;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PerkProgramDataStoreMgr::LoadActivities()
|
||||
{
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PERK_PROGRAM_ACTIVITY);
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
m_activeActivity.clear();
|
||||
if (!result)
|
||||
{
|
||||
GenerateRandomActivities(false);
|
||||
return;
|
||||
}
|
||||
do
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
uint32 activityId = fields[0].GetUInt32();
|
||||
PerksActivityEntry const* entry = sPerksActivityStore.LookupEntry(activityId);
|
||||
if (!entry)
|
||||
continue;
|
||||
PerkProgramData::ActivityTemplate ac;
|
||||
ac.ActivityID = entry->ID;
|
||||
ac.CriteriaTree = entry->CriteriaTreeID;
|
||||
ac.CurrencyAmount = entry->ThresholdContributionAmount;
|
||||
ac.Priority = entry->Priority;
|
||||
m_activeActivity.push_back(ac);
|
||||
|
||||
} while (result->NextRow());
|
||||
}
|
||||
|
||||
void PerkProgramDataStoreMgr::GenerateRandomActivities(bool /*clearOld*/)
|
||||
{
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PERK_PROGRAM_ACTIVITY);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
m_activeActivity.clear();
|
||||
|
||||
for (PerksActivityEntry const* db : sDB2Manager.GetRandomActivitiesXTag())
|
||||
{
|
||||
PerkProgramData::ActivityTemplate ac;
|
||||
ac.ActivityID = db->ID;
|
||||
ac.CriteriaTree = db->CriteriaTreeID;
|
||||
ac.CurrencyAmount = db->ThresholdContributionAmount;
|
||||
ac.Priority = db->Priority;
|
||||
m_activeActivity.push_back(ac);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_PERK_PROGRAM_ACTIVITY);
|
||||
stmt->setUInt32(0, ac.ActivityID);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,75 +1,75 @@
|
||||
///*
|
||||
// * Copyright (C) WowCommunity Project
|
||||
// *
|
||||
// * This SourceCode is NOT free a software. Please hold everything Private
|
||||
// * and read our Terms
|
||||
// */
|
||||
//
|
||||
//#ifndef _PERK_PROGRAM_DATA_STORE_H
|
||||
//#define _PERK_PROGRAM_DATA_STORE_H
|
||||
//
|
||||
//#include "PerksProgramPacketsCommon.h"
|
||||
//#include "PacketUtilities.h"
|
||||
//#include "DatabaseEnv.h"
|
||||
//#include <vector>
|
||||
//#include <unordered_map>
|
||||
//#include <ctime>
|
||||
//
|
||||
//class PerkProgramManager;
|
||||
//
|
||||
//namespace PerkProgramData
|
||||
//{
|
||||
// struct PerkVendorItem
|
||||
// {
|
||||
// uint32 Id;
|
||||
// uint32 ItemID;
|
||||
// uint32 MountSpellID;
|
||||
// uint32 PetSpellID;
|
||||
// uint32 TransmogSet;
|
||||
// uint32 ItemModifiedAppearanceID;
|
||||
// uint32 ToyItem;
|
||||
// time_t AvailableUntil;
|
||||
// uint32 Cost;
|
||||
// uint32 CategoryId;
|
||||
//
|
||||
// };
|
||||
//
|
||||
// struct ActivityTemplate
|
||||
// {
|
||||
// uint32 ActivityID;
|
||||
// uint32 CriteriaTree;
|
||||
// uint32 Priority;
|
||||
// uint32 CurrencyAmount;
|
||||
// };
|
||||
//};
|
||||
//
|
||||
//class TC_GAME_API PerkProgramDataStoreMgr
|
||||
//{
|
||||
// PerkProgramDataStoreMgr();
|
||||
// ~PerkProgramDataStoreMgr();
|
||||
//
|
||||
//public:
|
||||
// static PerkProgramDataStoreMgr* instance();
|
||||
//
|
||||
// void Initialize();
|
||||
//
|
||||
// std::unordered_map<uint32, PerkProgramData::PerkVendorItem> GetVendorItems();
|
||||
// PerkProgramData::PerkVendorItem const* GetVendorItem(uint32 entry);
|
||||
// PerkProgramData::PerkVendorItem const* GetRandomVendorItem();
|
||||
//
|
||||
// std::vector<PerkProgramData::ActivityTemplate> GetActivities();
|
||||
// uint32 GetActivityCriteriatree(uint32 activityId);
|
||||
// uint32 GetActivityCurrencyAmount(uint32 activityId);
|
||||
//
|
||||
//private:
|
||||
//
|
||||
// void LoadPerkVendorItem();
|
||||
// void LoadActivities();
|
||||
// void GenerateRandomActivities(bool clearOld);
|
||||
// time_t m_activityTime;
|
||||
//
|
||||
//};
|
||||
//
|
||||
//#define sPerkProgramDataStore PerkProgramDataStoreMgr::instance()
|
||||
//
|
||||
//#endif
|
||||
/*
|
||||
* Copyright (C) WowCommunity Project
|
||||
*
|
||||
* This SourceCode is NOT free a software. Please hold everything Private
|
||||
* and read our Terms
|
||||
*/
|
||||
|
||||
#ifndef _PERK_PROGRAM_DATA_STORE_H
|
||||
#define _PERK_PROGRAM_DATA_STORE_H
|
||||
|
||||
#include "PerksProgramPacketsCommon.h"
|
||||
#include "PacketUtilities.h"
|
||||
#include "DatabaseEnv.h"
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
#include <ctime>
|
||||
|
||||
class PerkProgramManager;
|
||||
|
||||
namespace PerkProgramData
|
||||
{
|
||||
struct PerkVendorItem
|
||||
{
|
||||
uint32 Id;
|
||||
uint32 ItemID;
|
||||
uint32 MountSpellID;
|
||||
uint32 PetSpellID;
|
||||
uint32 TransmogSet;
|
||||
uint32 ItemModifiedAppearanceID;
|
||||
uint32 ToyItem;
|
||||
time_t AvailableUntil;
|
||||
uint32 Cost;
|
||||
uint32 CategoryId;
|
||||
|
||||
};
|
||||
|
||||
struct ActivityTemplate
|
||||
{
|
||||
uint32 ActivityID;
|
||||
uint32 CriteriaTree;
|
||||
uint32 Priority;
|
||||
uint32 CurrencyAmount;
|
||||
};
|
||||
};
|
||||
|
||||
class TC_GAME_API PerkProgramDataStoreMgr
|
||||
{
|
||||
PerkProgramDataStoreMgr();
|
||||
~PerkProgramDataStoreMgr();
|
||||
|
||||
public:
|
||||
static PerkProgramDataStoreMgr* instance();
|
||||
|
||||
void Initialize();
|
||||
|
||||
std::unordered_map<uint32, PerkProgramData::PerkVendorItem> GetVendorItems();
|
||||
PerkProgramData::PerkVendorItem const* GetVendorItem(uint32 entry);
|
||||
PerkProgramData::PerkVendorItem const* GetRandomVendorItem();
|
||||
|
||||
std::vector<PerkProgramData::ActivityTemplate> GetActivities();
|
||||
uint32 GetActivityCriteriatree(uint32 activityId);
|
||||
uint32 GetActivityCurrencyAmount(uint32 activityId);
|
||||
|
||||
private:
|
||||
|
||||
void LoadPerkVendorItem();
|
||||
void LoadActivities();
|
||||
void GenerateRandomActivities(bool clearOld);
|
||||
time_t m_activityTime;
|
||||
|
||||
};
|
||||
|
||||
#define sPerkProgramDataStore PerkProgramDataStoreMgr::instance()
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,430 +1,430 @@
|
||||
///*
|
||||
// * Copyright (C) WowCommunity Project
|
||||
// *
|
||||
// * This SourceCode is NOT free a software. Please hold everything Private
|
||||
// * and read our Terms
|
||||
// */
|
||||
//
|
||||
//#include "Common.h"
|
||||
//#include "CollectionMgr.h"
|
||||
//#include "ObjectMgr.h"
|
||||
//#include "PerkProgramMgr.h"
|
||||
//#include "WorldSession.h"
|
||||
//#include "Guild.h"
|
||||
//#include "GuildMgr.h"
|
||||
//#include "Player.h"
|
||||
//#include "Creature.h"
|
||||
//#include "PerkProgramData.h"
|
||||
//#include "DatabaseEnv.h"
|
||||
//#include "ScriptMgr.h"
|
||||
//#include "AccountMgr.h"
|
||||
//#include <sstream>
|
||||
//#include "SpellInfo.h"
|
||||
//#include "SpellMgr.h"
|
||||
//#include "Language.h"
|
||||
//#include "SpellPackets.h"
|
||||
//#include "Chat.h"
|
||||
//#include "DB2Stores.h"
|
||||
//#include "Pet.h"
|
||||
//#include "Item.h"
|
||||
//#include "MiscPackets.h"
|
||||
//#include "Unit.h"
|
||||
//#include "GameTime.h"
|
||||
//#include "PerksProgramPackets.h"
|
||||
//
|
||||
//using namespace PerkPrograms;
|
||||
//
|
||||
//PerkProgramManager::PerkProgramManager(WorldSession* session)
|
||||
//{
|
||||
// _session = session;
|
||||
// if (session->GetPlayer())
|
||||
// m_player = session->GetPlayer();
|
||||
//
|
||||
// m_currencyAmount = 0;
|
||||
//}
|
||||
//
|
||||
//PerkProgramManager::~PerkProgramManager()
|
||||
//{
|
||||
//};
|
||||
//
|
||||
//void PerkProgramManager::SendVendorItems(Creature* vendor, std::vector<uint32> purchasedItems)
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_AVAILABLE_ITEMS;
|
||||
//
|
||||
// uint32 cameraId = 0;
|
||||
//
|
||||
// switch (vendor->GetEntry())
|
||||
// {
|
||||
// case PerkPrograms::VENDOR_HORDE:
|
||||
// cameraId = PerkPrograms::CAMERA_HORDE;
|
||||
// break;
|
||||
// case PerkPrograms::VENDOR_ALLIANCE:
|
||||
// cameraId = PerkPrograms::CAMERA_ALLIANCE;
|
||||
// break;
|
||||
// default:
|
||||
// cameraId = 0;
|
||||
// break;
|
||||
// }
|
||||
// perks.Params.VendorItem.VendorGuid = vendor->GetGUID();
|
||||
//
|
||||
// if (cameraId != 0)
|
||||
// {
|
||||
// std::list<Creature*> list;
|
||||
// _session->GetPlayer()->GetCreatureListWithEntryInGrid(list, cameraId, 100);
|
||||
//
|
||||
// for (auto cr1 : list)
|
||||
// {
|
||||
// perks.Params.VendorItem.ModelSceneCameraGuid = cr1->GetGUID();
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// for (auto items : sPerkProgramDataStore->GetVendorItems())
|
||||
// {
|
||||
// WorldPackets::PerksProgram::PerksVendorItem vendorItem;
|
||||
// vendorItem.VendorItemID = items.second.Id;
|
||||
// vendorItem.MountID = items.second.MountSpellID;
|
||||
// vendorItem.BattlePetSpeciesID = items.second.PetSpellID;
|
||||
// vendorItem.ItemModifiedAppearanceID = items.second.ItemModifiedAppearanceID;
|
||||
// vendorItem.ToyID = items.second.ToyItem;
|
||||
// vendorItem.TransmogSetID = items.second.TransmogSet;
|
||||
// vendorItem.Price = items.second.Cost;
|
||||
// vendorItem.CategoryType = items.second.CategoryId;
|
||||
// vendorItem.Disabled = false;
|
||||
// vendorItem.AvailableUntil = items.second.AvailableUntil;
|
||||
// perks.Params.VendorItem.FrozenPerksVendorItems.emplace_back(vendorItem);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//bool PerkProgramManager::IsAccountWideItem(uint32 item)
|
||||
//{
|
||||
// bool level = false;
|
||||
// if (auto i = sPerkProgramDataStore->GetVendorItem(item))
|
||||
// {
|
||||
// switch (i->CategoryId)
|
||||
// {
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
// level = true;
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// return level;
|
||||
//}
|
||||
//
|
||||
//bool PerkProgramManager::IsItemAlreadyOwned(PerkProgramData::PerkVendorItem const* vendorItem)
|
||||
//{
|
||||
// if (!vendorItem)
|
||||
// return true;
|
||||
//
|
||||
// switch (vendorItem->CategoryId)
|
||||
// {
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
// return m_player->GetSession()->GetCollectionMgr()->HasToy(vendorItem->ToyItem);
|
||||
// // case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
// // return m_player->GetMountCollection()->Has(vendorItem->MountSpellID);
|
||||
// // case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
// // return m_player->GetSession()->GetCollectionMgr()->HasTransmogSet(vendorItem->TransmogSet);
|
||||
// // case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG:
|
||||
// // return m_player->GetSession()->GetCollectionMgr()->HasItemAppearance(vendorItem->ItemModifiedAppearanceID);
|
||||
// // case PerkPrograms::PERKS_VENDOR_CATEGORY_PETS:
|
||||
// // return m_player->GetBattlePetCollection()->HasPet(vendorItem->PetSpellID);
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// return false;
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::GrantItem(PerkProgramData::PerkVendorItem const* vendorItem)
|
||||
//{
|
||||
// if (!vendorItem)
|
||||
// return;
|
||||
//
|
||||
// switch (vendorItem->CategoryId)
|
||||
// {
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
// {
|
||||
// m_player->GetSession()->GetCollectionMgr()->AddToy(vendorItem->ToyItem, false, false);
|
||||
// break;
|
||||
// }
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
// {
|
||||
// m_player->LearnSpell(vendorItem->MountSpellID, false);
|
||||
// break;
|
||||
// }
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
// {
|
||||
// m_player->GetSession()->GetCollectionMgr()->AddTransmogSet(vendorItem->TransmogSet);
|
||||
// break;
|
||||
// }
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG:
|
||||
// {
|
||||
// m_player->GetSession()->GetCollectionMgr()->AddItemAppearance(vendorItem->ItemModifiedAppearanceID);
|
||||
// break;
|
||||
// }
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_PETS:
|
||||
// {
|
||||
// // m_player->AddBattlePet(vendorItem->PetSpellID);
|
||||
// break;
|
||||
// }
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_CONSUMABLES:
|
||||
// {
|
||||
// m_player->AddItem(vendorItem->ItemID, 1);
|
||||
// break;
|
||||
// }
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::RemoveGrantedItem(PerkProgramData::PerkVendorItem const* vendorItem)
|
||||
//{
|
||||
// if (!vendorItem)
|
||||
// return;
|
||||
//
|
||||
// switch (vendorItem->CategoryId)
|
||||
// {
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
// break;
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
// m_player->RemoveSpell(vendorItem->MountSpellID, false, true);
|
||||
// break;
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
// break;
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG:
|
||||
// break;
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_PETS:
|
||||
// break;
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_CONSUMABLES:
|
||||
// m_player->DestroyItemCount(vendorItem->ItemID, 1, true);
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::BuyItem(uint32 itemId, ObjectGuid /*vendor*/)
|
||||
//{
|
||||
// auto const* vendorItem = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
// if (!vendorItem)
|
||||
// {
|
||||
// SendPerksProgramError(1);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (m_currencyAmount < vendorItem->Cost)
|
||||
// {
|
||||
// SendPerksProgramError(2);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (IsItemAlreadyOwned(vendorItem))
|
||||
// {
|
||||
// SendPerksProgramError(3);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// m_currencyAmount -= vendorItem->Cost;
|
||||
// m_player->ModifyCurrency(PERKS_PROGRAM_CURRENCY, -static_cast<int32>(vendorItem->Cost));
|
||||
//
|
||||
// GrantItem(vendorItem);
|
||||
//
|
||||
// RecordPurchase(itemId, GameTime::GetGameTime());
|
||||
//
|
||||
// SendBuyItemResult(itemId);
|
||||
// SendCurrencyRefresh();
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendBuyItemResult(int32 itemId)
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_BUY_ITEM;
|
||||
// perks.Params.BuyItem.VendorItemID = itemId;
|
||||
//
|
||||
// WorldPackets::PerksProgram::JamTimePair time;
|
||||
// time.BuyTime = GameTime::GetGameTime();
|
||||
// time.VendorItemID = itemId;
|
||||
// perks.Params.BuyItem.TimePair.emplace_back(time);
|
||||
//
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendCurrencyRefresh()
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_CURRENCY_REFRESH;
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendPerksProgramError(uint32 errorCode)
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_ERROR;
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::RecordPurchase(uint32 itemId, time_t purchaseTime)
|
||||
//{
|
||||
// m_recentPurchases.push_back(std::make_pair(itemId, purchaseTime));
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::RefundItem(int32 itemId)
|
||||
//{
|
||||
// auto it = std::find_if(m_recentPurchases.begin(), m_recentPurchases.end(),
|
||||
// [itemId](std::pair<uint32, time_t> const& p) { return p.first == static_cast<uint32>(itemId); });
|
||||
//
|
||||
// if (it == m_recentPurchases.end())
|
||||
// {
|
||||
// SendPerksProgramError(4);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (GameTime::GetGameTime() - it->second > REFUND_WINDOW_SECONDS)
|
||||
// {
|
||||
// SendPerksProgramError(5);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// auto const* vendorItem = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
// if (!vendorItem)
|
||||
// return;
|
||||
//
|
||||
// RemoveGrantedItem(vendorItem);
|
||||
//
|
||||
// m_currencyAmount += vendorItem->Cost;
|
||||
// m_player->ModifyCurrency(PERKS_PROGRAM_CURRENCY, static_cast<int32>(vendorItem->Cost));
|
||||
//
|
||||
// m_recentPurchases.erase(it);
|
||||
//
|
||||
// SendRefundSuccess(itemId);
|
||||
// SendCurrencyRefresh();
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendRefundSuccess(int32 itemId)
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_REFUND_SUCCESS;
|
||||
// perks.Params.BuyItem.VendorItemID = itemId;
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::CartCheckout(std::vector<uint32> const& vendorItemIDs)
|
||||
//{
|
||||
// uint32 totalCost = 0;
|
||||
//
|
||||
// for (uint32 itemId : vendorItemIDs)
|
||||
// {
|
||||
// auto const* item = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
// if (!item)
|
||||
// {
|
||||
// SendPerksProgramError(1);
|
||||
// return;
|
||||
// }
|
||||
// totalCost += item->Cost;
|
||||
// }
|
||||
//
|
||||
// if (m_currencyAmount < totalCost)
|
||||
// {
|
||||
// SendPerksProgramError(2);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// for (uint32 itemId : vendorItemIDs)
|
||||
// {
|
||||
// auto const* item = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
// if (!item)
|
||||
// continue;
|
||||
//
|
||||
// if (IsItemAlreadyOwned(item))
|
||||
// continue;
|
||||
//
|
||||
// m_currencyAmount -= item->Cost;
|
||||
// m_player->ModifyCurrency(PERKS_PROGRAM_CURRENCY, -static_cast<int32>(item->Cost));
|
||||
//
|
||||
// GrantItem(item);
|
||||
// RecordPurchase(itemId, GameTime::GetGameTime());
|
||||
// }
|
||||
//
|
||||
// SendCartCheckoutSuccess();
|
||||
// SendCurrencyRefresh();
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendCartCheckoutSuccess()
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_PURCHASE_CART;
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendPerksProgramStatus()
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_CURRENCY_REFRESH;
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendPendingRewards()
|
||||
//{
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SetFrozenItem(int32 itemId, bool clear)
|
||||
//{
|
||||
// if (clear)
|
||||
// {
|
||||
// m_frozenItems.clear();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// auto const* item = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
// if (item)
|
||||
// {
|
||||
// m_frozenItems.clear();
|
||||
// m_frozenItems.push_back(*item);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
// perks.Type = PerkPrograms::RESULT_FROZEN_ITEM;
|
||||
// _session->SendPacket(perks.Write());
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::AddTrackedActivity(uint32 activityId)
|
||||
//{
|
||||
// if (std::find(m_trackedActivities.begin(), m_trackedActivities.end(), activityId) == m_trackedActivities.end())
|
||||
// {
|
||||
// m_trackedActivities.push_back(activityId);
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::RemoveTrackedActivity(uint32 activityId)
|
||||
//{
|
||||
// auto it = std::find(m_trackedActivities.begin(), m_trackedActivities.end(), activityId);
|
||||
// if (it != m_trackedActivities.end())
|
||||
// {
|
||||
// m_trackedActivities.erase(it);
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//void PerkProgramManager::SendPerksProgramActivities()
|
||||
//{
|
||||
// WorldPackets::PerksProgram::PerksProgramActivityUpdate activity;
|
||||
//
|
||||
// activity.TimeUntilStart = GameTime::GetGameTime();
|
||||
// // activity.TimeUntilEnd = sWorld->GetNextPerksProgramReset();
|
||||
//
|
||||
// for (auto ac : sPerkProgramDataStore->GetActivities())
|
||||
// {
|
||||
// activity.ActivityIDs.push_back(ac.ActivityID);
|
||||
//
|
||||
// }
|
||||
// _session->SendPacket(activity.Write());
|
||||
//
|
||||
//}
|
||||
/*
|
||||
* Copyright (C) WowCommunity Project
|
||||
*
|
||||
* This SourceCode is NOT free a software. Please hold everything Private
|
||||
* and read our Terms
|
||||
*/
|
||||
|
||||
#include "Common.h"
|
||||
#include "CollectionMgr.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "PerkProgramMgr.h"
|
||||
#include "WorldSession.h"
|
||||
#include "Guild.h"
|
||||
#include "GuildMgr.h"
|
||||
#include "Player.h"
|
||||
#include "Creature.h"
|
||||
#include "PerkProgramData.h"
|
||||
#include "DatabaseEnv.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "AccountMgr.h"
|
||||
#include <sstream>
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "Language.h"
|
||||
#include "SpellPackets.h"
|
||||
#include "Chat.h"
|
||||
#include "DB2Stores.h"
|
||||
#include "Pet.h"
|
||||
#include "Item.h"
|
||||
#include "MiscPackets.h"
|
||||
#include "Unit.h"
|
||||
#include "GameTime.h"
|
||||
#include "PerksProgramPackets.h"
|
||||
|
||||
using namespace PerkPrograms;
|
||||
|
||||
PerkProgramManager::PerkProgramManager(WorldSession* session)
|
||||
{
|
||||
_session = session;
|
||||
if (session->GetPlayer())
|
||||
m_player = session->GetPlayer();
|
||||
|
||||
m_currencyAmount = 0;
|
||||
}
|
||||
|
||||
PerkProgramManager::~PerkProgramManager()
|
||||
{
|
||||
};
|
||||
|
||||
void PerkProgramManager::SendVendorItems(Creature* vendor, std::vector<uint32> purchasedItems)
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_AVAILABLE_ITEMS;
|
||||
|
||||
uint32 cameraId = 0;
|
||||
|
||||
switch (vendor->GetEntry())
|
||||
{
|
||||
case PerkPrograms::VENDOR_HORDE:
|
||||
cameraId = PerkPrograms::CAMERA_HORDE;
|
||||
break;
|
||||
case PerkPrograms::VENDOR_ALLIANCE:
|
||||
cameraId = PerkPrograms::CAMERA_ALLIANCE;
|
||||
break;
|
||||
default:
|
||||
cameraId = 0;
|
||||
break;
|
||||
}
|
||||
perks.Params.VendorItem.VendorGuid = vendor->GetGUID();
|
||||
|
||||
if (cameraId != 0)
|
||||
{
|
||||
std::list<Creature*> list;
|
||||
_session->GetPlayer()->GetCreatureListWithEntryInGrid(list, cameraId, 100);
|
||||
|
||||
for (auto cr1 : list)
|
||||
{
|
||||
perks.Params.VendorItem.ModelSceneCameraGuid = cr1->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto items : sPerkProgramDataStore->GetVendorItems())
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksVendorItem vendorItem;
|
||||
vendorItem.VendorItemID = items.second.Id;
|
||||
vendorItem.MountID = items.second.MountSpellID;
|
||||
vendorItem.BattlePetSpeciesID = items.second.PetSpellID;
|
||||
vendorItem.ItemModifiedAppearanceID = items.second.ItemModifiedAppearanceID;
|
||||
vendorItem.ToyID = items.second.ToyItem;
|
||||
vendorItem.TransmogSetID = items.second.TransmogSet;
|
||||
vendorItem.Price = items.second.Cost;
|
||||
vendorItem.OriginalPrice = items.second.CategoryId;
|
||||
vendorItem.Disabled = false;
|
||||
vendorItem.AvailableUntil = items.second.AvailableUntil;
|
||||
perks.Params.VendorItem.FrozenPerksVendorItems.emplace_back(vendorItem);
|
||||
|
||||
}
|
||||
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
bool PerkProgramManager::IsAccountWideItem(uint32 item)
|
||||
{
|
||||
bool level = false;
|
||||
if (auto i = sPerkProgramDataStore->GetVendorItem(item))
|
||||
{
|
||||
switch (i->CategoryId)
|
||||
{
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
level = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
bool PerkProgramManager::IsItemAlreadyOwned(PerkProgramData::PerkVendorItem const* vendorItem)
|
||||
{
|
||||
if (!vendorItem)
|
||||
return true;
|
||||
|
||||
switch (vendorItem->CategoryId)
|
||||
{
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
return m_player->GetSession()->GetCollectionMgr()->HasToy(vendorItem->ToyItem);
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
// return m_player->GetMountCollection()->Has(vendorItem->MountSpellID);
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
// return m_player->GetSession()->GetCollectionMgr()->HasTransmogSet(vendorItem->TransmogSet);
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG:
|
||||
// return m_player->GetSession()->GetCollectionMgr()->HasItemAppearance(vendorItem->ItemModifiedAppearanceID);
|
||||
// case PerkPrograms::PERKS_VENDOR_CATEGORY_PETS:
|
||||
// return m_player->GetBattlePetCollection()->HasPet(vendorItem->PetSpellID);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void PerkProgramManager::GrantItem(PerkProgramData::PerkVendorItem const* vendorItem)
|
||||
{
|
||||
if (!vendorItem)
|
||||
return;
|
||||
|
||||
switch (vendorItem->CategoryId)
|
||||
{
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
{
|
||||
m_player->GetSession()->GetCollectionMgr()->AddToy(vendorItem->ToyItem, false, false);
|
||||
break;
|
||||
}
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
{
|
||||
m_player->LearnSpell(vendorItem->MountSpellID, false);
|
||||
break;
|
||||
}
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
{
|
||||
m_player->GetSession()->GetCollectionMgr()->AddTransmogSet(vendorItem->TransmogSet);
|
||||
break;
|
||||
}
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG:
|
||||
{
|
||||
m_player->GetSession()->GetCollectionMgr()->AddItemAppearance(vendorItem->ItemModifiedAppearanceID);
|
||||
break;
|
||||
}
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_PETS:
|
||||
{
|
||||
// m_player->AddBattlePet(vendorItem->PetSpellID);
|
||||
break;
|
||||
}
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_CONSUMABLES:
|
||||
{
|
||||
m_player->AddItem(vendorItem->ItemID, 1);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void PerkProgramManager::RemoveGrantedItem(PerkProgramData::PerkVendorItem const* vendorItem)
|
||||
{
|
||||
if (!vendorItem)
|
||||
return;
|
||||
|
||||
switch (vendorItem->CategoryId)
|
||||
{
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TOYS:
|
||||
break;
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_MOUNTS:
|
||||
m_player->RemoveSpell(vendorItem->MountSpellID, false, true);
|
||||
break;
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG_SETS:
|
||||
break;
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_TRANSMOG:
|
||||
break;
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_PETS:
|
||||
break;
|
||||
case PerkPrograms::PERKS_VENDOR_CATEGORY_CONSUMABLES:
|
||||
m_player->DestroyItemCount(vendorItem->ItemID, 1, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void PerkProgramManager::BuyItem(uint32 itemId, ObjectGuid /*vendor*/)
|
||||
{
|
||||
auto const* vendorItem = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
if (!vendorItem)
|
||||
{
|
||||
SendPerksProgramError(1);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_currencyAmount < vendorItem->Cost)
|
||||
{
|
||||
SendPerksProgramError(2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsItemAlreadyOwned(vendorItem))
|
||||
{
|
||||
SendPerksProgramError(3);
|
||||
return;
|
||||
}
|
||||
|
||||
m_currencyAmount -= vendorItem->Cost;
|
||||
m_player->ModifyCurrency(PERKS_PROGRAM_CURRENCY, -static_cast<int32>(vendorItem->Cost));
|
||||
|
||||
GrantItem(vendorItem);
|
||||
|
||||
RecordPurchase(itemId, GameTime::GetGameTime());
|
||||
|
||||
SendBuyItemResult(itemId);
|
||||
SendCurrencyRefresh();
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendBuyItemResult(int32 itemId)
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_BUY_ITEM;
|
||||
perks.Params.BuyItem.VendorItemID = itemId;
|
||||
|
||||
WorldPackets::PerksProgram::JamTimePair time;
|
||||
time.BuyTime = GameTime::GetGameTime();
|
||||
time.VendorItemID = itemId;
|
||||
perks.Params.BuyItem.TimePair.emplace_back(time);
|
||||
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendCurrencyRefresh()
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_CURRENCY_REFRESH;
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendPerksProgramError(uint32 errorCode)
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_ERROR;
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
void PerkProgramManager::RecordPurchase(uint32 itemId, time_t purchaseTime)
|
||||
{
|
||||
m_recentPurchases.push_back(std::make_pair(itemId, purchaseTime));
|
||||
}
|
||||
|
||||
void PerkProgramManager::RefundItem(int32 itemId)
|
||||
{
|
||||
auto it = std::find_if(m_recentPurchases.begin(), m_recentPurchases.end(),
|
||||
[itemId](std::pair<uint32, time_t> const& p) { return p.first == static_cast<uint32>(itemId); });
|
||||
|
||||
if (it == m_recentPurchases.end())
|
||||
{
|
||||
SendPerksProgramError(4);
|
||||
return;
|
||||
}
|
||||
|
||||
if (GameTime::GetGameTime() - it->second > REFUND_WINDOW_SECONDS)
|
||||
{
|
||||
SendPerksProgramError(5);
|
||||
return;
|
||||
}
|
||||
|
||||
auto const* vendorItem = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
if (!vendorItem)
|
||||
return;
|
||||
|
||||
RemoveGrantedItem(vendorItem);
|
||||
|
||||
m_currencyAmount += vendorItem->Cost;
|
||||
m_player->ModifyCurrency(PERKS_PROGRAM_CURRENCY, static_cast<int32>(vendorItem->Cost));
|
||||
|
||||
m_recentPurchases.erase(it);
|
||||
|
||||
SendRefundSuccess(itemId);
|
||||
SendCurrencyRefresh();
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendRefundSuccess(int32 itemId)
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_REFUND_SUCCESS;
|
||||
perks.Params.BuyItem.VendorItemID = itemId;
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
void PerkProgramManager::CartCheckout(std::vector<uint32> const& vendorItemIDs)
|
||||
{
|
||||
uint32 totalCost = 0;
|
||||
|
||||
for (uint32 itemId : vendorItemIDs)
|
||||
{
|
||||
auto const* item = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
if (!item)
|
||||
{
|
||||
SendPerksProgramError(1);
|
||||
return;
|
||||
}
|
||||
totalCost += item->Cost;
|
||||
}
|
||||
|
||||
if (m_currencyAmount < totalCost)
|
||||
{
|
||||
SendPerksProgramError(2);
|
||||
return;
|
||||
}
|
||||
|
||||
for (uint32 itemId : vendorItemIDs)
|
||||
{
|
||||
auto const* item = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
if (!item)
|
||||
continue;
|
||||
|
||||
if (IsItemAlreadyOwned(item))
|
||||
continue;
|
||||
|
||||
m_currencyAmount -= item->Cost;
|
||||
m_player->ModifyCurrency(PERKS_PROGRAM_CURRENCY, -static_cast<int32>(item->Cost));
|
||||
|
||||
GrantItem(item);
|
||||
RecordPurchase(itemId, GameTime::GetGameTime());
|
||||
}
|
||||
|
||||
SendCartCheckoutSuccess();
|
||||
SendCurrencyRefresh();
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendCartCheckoutSuccess()
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_PURCHASE_CART;
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendPerksProgramStatus()
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_CURRENCY_REFRESH;
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendPendingRewards()
|
||||
{
|
||||
}
|
||||
|
||||
void PerkProgramManager::SetFrozenItem(int32 itemId, bool clear)
|
||||
{
|
||||
if (clear)
|
||||
{
|
||||
m_frozenItems.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
auto const* item = sPerkProgramDataStore->GetVendorItem(itemId);
|
||||
if (item)
|
||||
{
|
||||
m_frozenItems.clear();
|
||||
m_frozenItems.push_back(*item);
|
||||
}
|
||||
}
|
||||
|
||||
WorldPackets::PerksProgram::PerksProgramResult perks;
|
||||
perks.Type = PerkPrograms::RESULT_FROZEN_ITEM;
|
||||
_session->SendPacket(perks.Write());
|
||||
}
|
||||
|
||||
void PerkProgramManager::AddTrackedActivity(uint32 activityId)
|
||||
{
|
||||
if (std::find(m_trackedActivities.begin(), m_trackedActivities.end(), activityId) == m_trackedActivities.end())
|
||||
{
|
||||
m_trackedActivities.push_back(activityId);
|
||||
}
|
||||
}
|
||||
|
||||
void PerkProgramManager::RemoveTrackedActivity(uint32 activityId)
|
||||
{
|
||||
auto it = std::find(m_trackedActivities.begin(), m_trackedActivities.end(), activityId);
|
||||
if (it != m_trackedActivities.end())
|
||||
{
|
||||
m_trackedActivities.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
void PerkProgramManager::SendPerksProgramActivities()
|
||||
{
|
||||
WorldPackets::PerksProgram::PerksProgramActivityUpdate activity;
|
||||
|
||||
activity.TimeUntilStart = GameTime::GetGameTime();
|
||||
// activity.TimeUntilEnd = sWorld->GetNextPerksProgramReset();
|
||||
|
||||
for (auto ac : sPerkProgramDataStore->GetActivities())
|
||||
{
|
||||
activity.ActivityIDs.push_back(ac.ActivityID);
|
||||
|
||||
}
|
||||
_session->SendPacket(activity.Write());
|
||||
|
||||
}
|
||||
|
||||
@@ -1,113 +1,113 @@
|
||||
///*
|
||||
// * Copyright (C) WowCommunity Project
|
||||
// *
|
||||
// * This SourceCode is NOT free a software. Please hold everything Private
|
||||
// * and read our Terms
|
||||
// */
|
||||
//
|
||||
//#ifndef __TRINITY_PERKPROGRAMMGR_H
|
||||
//#define __TRINITY_PERKPROGRAMMGR_H
|
||||
//
|
||||
//#include "Common.h"
|
||||
//#include "PerksProgramPacketsCommon.h"
|
||||
//#include "PerkProgramData.h"
|
||||
//
|
||||
//class WorldSession;
|
||||
//class Player;
|
||||
//class Creature;
|
||||
//
|
||||
//#define PERKS_PROGRAM_CURRENCY 2032
|
||||
//
|
||||
//namespace PerkPrograms
|
||||
//{
|
||||
// enum PerksVendorCategoryType : uint32
|
||||
// {
|
||||
// PERKS_VENDOR_CATEGORY_NONE = 0,
|
||||
// PERKS_VENDOR_CATEGORY_MOUNTS = 1,
|
||||
// PERKS_VENDOR_CATEGORY_PETS = 2,
|
||||
// PERKS_VENDOR_CATEGORY_TOYS = 3,
|
||||
// PERKS_VENDOR_CATEGORY_TRANSMOG = 4,
|
||||
// PERKS_VENDOR_CATEGORY_TRANSMOG_SETS = 5,
|
||||
// PERKS_VENDOR_CATEGORY_CONSUMABLES = 6,
|
||||
// };
|
||||
//
|
||||
// enum ItemCollectionType : uint32
|
||||
// {
|
||||
// ITEM_COLLECTION_NONE = 0,
|
||||
// ITEM_COLLECTION_APPEARANCE = 1,
|
||||
// ITEM_COLLECTION_MOUNT = 2,
|
||||
// ITEM_COLLECTION_TOY = 3,
|
||||
// ITEM_COLLECTION_PET = 4,
|
||||
// ITEM_COLLECTION_HEIRLOOM = 5,
|
||||
// ITEM_COLLECTION_ILLUSION = 6,
|
||||
// ITEM_COLLECTION_ENSEMBLE = 7,
|
||||
// };
|
||||
//
|
||||
// enum NpcVendorAndCameras : uint32
|
||||
// {
|
||||
// CAMERA_HORDE = 183978,
|
||||
// CAMERA_ALLIANCE = 1,
|
||||
// VENDOR_HORDE = 185473,
|
||||
// VENDOR_ALLIANCE = 3,
|
||||
// };
|
||||
//
|
||||
// enum ResultType : uint32
|
||||
// {
|
||||
// RESULT_NONE = 0,
|
||||
// RESULT_BUY_ITEM = 2,
|
||||
// RESULT_AVAILABLE_ITEMS = 5,
|
||||
// RESULT_PURCHASE_CART = 6,
|
||||
// RESULT_REFUND_SUCCESS = 7,
|
||||
// RESULT_ERROR = 10,
|
||||
// RESULT_CURRENCY_REFRESH = 11,
|
||||
// RESULT_FROZEN_ITEM = 12,
|
||||
// RESULT_ACTIVITY_UPDATE = 13,
|
||||
// };
|
||||
//
|
||||
//}
|
||||
//
|
||||
//class TC_GAME_API PerkProgramManager
|
||||
//{
|
||||
//
|
||||
//public:
|
||||
// explicit PerkProgramManager(WorldSession* session);
|
||||
// ~PerkProgramManager();
|
||||
//
|
||||
// void SendVendorItems(Creature* vendor, std::vector<uint32> purchasedItems);
|
||||
// void BuyItem(uint32 itemId, ObjectGuid vendor);
|
||||
// bool IsAccountWideItem(uint32 item);
|
||||
//
|
||||
// void SetCurrencyAmount(uint32 amount) { m_currencyAmount = amount; }
|
||||
// uint32 GetCurrencyAmount() { return m_currencyAmount; }
|
||||
//
|
||||
// void SendPerksProgramActivities();
|
||||
// void SendPerksProgramStatus();
|
||||
// void SendPendingRewards();
|
||||
// void SetFrozenItem(int32 itemId, bool clear);
|
||||
// void RefundItem(int32 itemId);
|
||||
// void CartCheckout(std::vector<uint32> const& itemIds);
|
||||
// void AddTrackedActivity(uint32 activityId);
|
||||
// void RemoveTrackedActivity(uint32 activityId);
|
||||
//
|
||||
//private:
|
||||
// void GrantItem(PerkProgramData::PerkVendorItem const* vendorItem);
|
||||
// void RemoveGrantedItem(PerkProgramData::PerkVendorItem const* vendorItem);
|
||||
// bool IsItemAlreadyOwned(PerkProgramData::PerkVendorItem const* vendorItem);
|
||||
// void SendBuyItemResult(int32 itemId);
|
||||
// void SendRefundSuccess(int32 itemId);
|
||||
// void SendCartCheckoutSuccess();
|
||||
// void SendCurrencyRefresh();
|
||||
// void SendPerksProgramError(uint32 errorCode);
|
||||
// void RecordPurchase(uint32 itemId, time_t purchaseTime);
|
||||
//
|
||||
// WorldSession* _session;
|
||||
// Player* m_player;
|
||||
// uint32 m_currencyAmount;
|
||||
// std::vector<PerkProgramData::PerkVendorItem> m_frozenItems;
|
||||
// std::vector<std::pair<uint32, time_t>> m_recentPurchases;
|
||||
// std::vector<uint32> m_trackedActivities;
|
||||
//
|
||||
// static constexpr uint32 REFUND_WINDOW_SECONDS = 2 * 60 * 60;
|
||||
//};
|
||||
//
|
||||
//#endif
|
||||
/*
|
||||
* Copyright (C) WowCommunity Project
|
||||
*
|
||||
* This SourceCode is NOT free a software. Please hold everything Private
|
||||
* and read our Terms
|
||||
*/
|
||||
|
||||
#ifndef __TRINITY_PERKPROGRAMMGR_H
|
||||
#define __TRINITY_PERKPROGRAMMGR_H
|
||||
|
||||
#include "Common.h"
|
||||
#include "PerksProgramPacketsCommon.h"
|
||||
#include "PerkProgramData.h"
|
||||
|
||||
class WorldSession;
|
||||
class Player;
|
||||
class Creature;
|
||||
|
||||
#define PERKS_PROGRAM_CURRENCY 2032
|
||||
|
||||
namespace PerkPrograms
|
||||
{
|
||||
enum PerksVendorCategoryType : uint32
|
||||
{
|
||||
PERKS_VENDOR_CATEGORY_NONE = 0,
|
||||
PERKS_VENDOR_CATEGORY_MOUNTS = 1,
|
||||
PERKS_VENDOR_CATEGORY_PETS = 2,
|
||||
PERKS_VENDOR_CATEGORY_TOYS = 3,
|
||||
PERKS_VENDOR_CATEGORY_TRANSMOG = 4,
|
||||
PERKS_VENDOR_CATEGORY_TRANSMOG_SETS = 5,
|
||||
PERKS_VENDOR_CATEGORY_CONSUMABLES = 6,
|
||||
};
|
||||
|
||||
enum ItemCollectionType : uint32
|
||||
{
|
||||
ITEM_COLLECTION_NONE = 0,
|
||||
ITEM_COLLECTION_APPEARANCE = 1,
|
||||
ITEM_COLLECTION_MOUNT = 2,
|
||||
ITEM_COLLECTION_TOY = 3,
|
||||
ITEM_COLLECTION_PET = 4,
|
||||
ITEM_COLLECTION_HEIRLOOM = 5,
|
||||
ITEM_COLLECTION_ILLUSION = 6,
|
||||
ITEM_COLLECTION_ENSEMBLE = 7,
|
||||
};
|
||||
|
||||
enum NpcVendorAndCameras : uint32
|
||||
{
|
||||
CAMERA_HORDE = 183978,
|
||||
CAMERA_ALLIANCE = 1,
|
||||
VENDOR_HORDE = 185473,
|
||||
VENDOR_ALLIANCE = 3,
|
||||
};
|
||||
|
||||
enum ResultType : uint32
|
||||
{
|
||||
RESULT_NONE = 0,
|
||||
RESULT_BUY_ITEM = 2,
|
||||
RESULT_AVAILABLE_ITEMS = 5,
|
||||
RESULT_PURCHASE_CART = 6,
|
||||
RESULT_REFUND_SUCCESS = 7,
|
||||
RESULT_ERROR = 10,
|
||||
RESULT_CURRENCY_REFRESH = 11,
|
||||
RESULT_FROZEN_ITEM = 12,
|
||||
RESULT_ACTIVITY_UPDATE = 13,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
class TC_GAME_API PerkProgramManager
|
||||
{
|
||||
|
||||
public:
|
||||
explicit PerkProgramManager(WorldSession* session);
|
||||
~PerkProgramManager();
|
||||
|
||||
void SendVendorItems(Creature* vendor, std::vector<uint32> purchasedItems);
|
||||
void BuyItem(uint32 itemId, ObjectGuid vendor);
|
||||
bool IsAccountWideItem(uint32 item);
|
||||
|
||||
void SetCurrencyAmount(uint32 amount) { m_currencyAmount = amount; }
|
||||
uint32 GetCurrencyAmount() { return m_currencyAmount; }
|
||||
|
||||
void SendPerksProgramActivities();
|
||||
void SendPerksProgramStatus();
|
||||
void SendPendingRewards();
|
||||
void SetFrozenItem(int32 itemId, bool clear);
|
||||
void RefundItem(int32 itemId);
|
||||
void CartCheckout(std::vector<uint32> const& itemIds);
|
||||
void AddTrackedActivity(uint32 activityId);
|
||||
void RemoveTrackedActivity(uint32 activityId);
|
||||
|
||||
private:
|
||||
void GrantItem(PerkProgramData::PerkVendorItem const* vendorItem);
|
||||
void RemoveGrantedItem(PerkProgramData::PerkVendorItem const* vendorItem);
|
||||
bool IsItemAlreadyOwned(PerkProgramData::PerkVendorItem const* vendorItem);
|
||||
void SendBuyItemResult(int32 itemId);
|
||||
void SendRefundSuccess(int32 itemId);
|
||||
void SendCartCheckoutSuccess();
|
||||
void SendCurrencyRefresh();
|
||||
void SendPerksProgramError(uint32 errorCode);
|
||||
void RecordPurchase(uint32 itemId, time_t purchaseTime);
|
||||
|
||||
WorldSession* _session;
|
||||
Player* m_player;
|
||||
uint32 m_currencyAmount;
|
||||
std::vector<PerkProgramData::PerkVendorItem> m_frozenItems;
|
||||
std::vector<std::pair<uint32, time_t>> m_recentPurchases;
|
||||
std::vector<uint32> m_trackedActivities;
|
||||
|
||||
static constexpr uint32 REFUND_WINDOW_SECONDS = 2 * 60 * 60;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
#include "NPCPackets.h"
|
||||
#include "PacketUtilities.h"
|
||||
#include "PartyPackets.h"
|
||||
#include "PerksProgramPackets.h"
|
||||
#include "PetPackets.h"
|
||||
#include "PetitionPackets.h"
|
||||
#include "QueryPackets.h"
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "PerksProgramPackets.h"
|
||||
#include "PacketOperators.h"
|
||||
|
||||
namespace WorldPackets::PerksProgram
|
||||
{
|
||||
void PerksProgramStatusRequest::Read()
|
||||
{
|
||||
_worldPacket >> Vendor;
|
||||
}
|
||||
|
||||
void PerksProgramRequestPurchase::Read()
|
||||
{
|
||||
_worldPacket >> VendorItemID;
|
||||
}
|
||||
|
||||
void PerksProgramSetFrozenVendorItem::Read()
|
||||
{
|
||||
_worldPacket >> VendorItemID;
|
||||
}
|
||||
|
||||
WorldPacket const* PerksProgramVendorUpdate::Write()
|
||||
{
|
||||
_worldPacket << uint32(VendorItems.size());
|
||||
|
||||
for (PerksVendorItem const& item : VendorItems)
|
||||
_worldPacket << item;
|
||||
|
||||
_worldPacket << FrozenItem;
|
||||
_worldPacket.WriteBit(HasFrozenItem);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* PerksProgramResult::Write()
|
||||
{
|
||||
_worldPacket.WriteBits(Type, 4);
|
||||
_worldPacket.WriteBit(UnkLong.has_value());
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
case 2:// ResultTypes::BoughtItem:
|
||||
_worldPacket << Params.BuyItem.VendorItemID;
|
||||
_worldPacket << uint32(Params.BuyItem.TimePair.size());
|
||||
for (auto const& data : Params.BuyItem.TimePair)
|
||||
{
|
||||
_worldPacket << data.VendorItemID;
|
||||
_worldPacket << data.BuyTime;
|
||||
}
|
||||
break;
|
||||
case 4: //ResultTypes::Unk4:
|
||||
_worldPacket << Params.UnkData.UnkInt1;
|
||||
_worldPacket << Params.UnkData.UnkInt2;
|
||||
_worldPacket << Params.UnkData.UnkInt3;
|
||||
_worldPacket << uint32(Params.UnkData.UnkInts.size());
|
||||
for (auto&& unkInt : Params.UnkData.UnkInts)
|
||||
_worldPacket << unkInt;
|
||||
break;
|
||||
case 5: //ResultTypes::AvailableItems:
|
||||
_worldPacket << Params.VendorItem.VendorGuid;
|
||||
_worldPacket << Params.VendorItem.ModelSceneCameraGuid;
|
||||
_worldPacket << uint32(Params.VendorItem.FrozenPerksVendorItems.size());
|
||||
for (auto&& frozenPerksVendorItem : Params.VendorItem.FrozenPerksVendorItems)
|
||||
_worldPacket << frozenPerksVendorItem;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
WorldPacket const* PerksProgramActivityUpdate::Write()
|
||||
{
|
||||
_worldPacket << uint32(ActivityIDs.size());
|
||||
_worldPacket << TimeUntilEnd;
|
||||
_worldPacket << TimeUntilStart;
|
||||
|
||||
_worldPacket << unkt;
|
||||
|
||||
for (auto&& item : ActivityIDs)
|
||||
_worldPacket << item;
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef TRINITYCORE_PERKS_PROGRAM_PACKETS_H
|
||||
#define TRINITYCORE_PERKS_PROGRAM_PACKETS_H
|
||||
|
||||
#include "Packet.h"
|
||||
#include "ObjectGuid.h"
|
||||
#include "Optional.h"
|
||||
#include "PerksProgramPacketsCommon.h"
|
||||
|
||||
namespace WorldPackets::PerksProgram
|
||||
{
|
||||
struct JamTimePair
|
||||
{
|
||||
JamTimePair() = default;
|
||||
Timestamp<> BuyTime = 0;
|
||||
uint32 VendorItemID = 0;
|
||||
bool UnkBit = false;
|
||||
};
|
||||
|
||||
class PerksProgramStatusRequest final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit PerksProgramStatusRequest(WorldPacket&& packet) : ClientPacket(CMSG_PERKS_PROGRAM_STATUS_REQUEST, std::move(packet)) { }
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Vendor;
|
||||
};
|
||||
|
||||
class PerksProgramRequestPurchase final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit PerksProgramRequestPurchase(WorldPacket&& packet) : ClientPacket(CMSG_PERKS_PROGRAM_REQUEST_PURCHASE, std::move(packet)) { }
|
||||
void Read() override;
|
||||
|
||||
int32 VendorItemID = 0;
|
||||
};
|
||||
|
||||
class PerksProgramSetFrozenVendorItem final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit PerksProgramSetFrozenVendorItem(WorldPacket&& packet) : ClientPacket(CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM, std::move(packet)) { }
|
||||
void Read() override;
|
||||
|
||||
int32 VendorItemID = 0;
|
||||
};
|
||||
|
||||
class PerksProgramVendorUpdate final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
explicit PerksProgramVendorUpdate() : ServerPacket(SMSG_PERKS_PROGRAM_VENDOR_UPDATE) { }
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
std::vector<PerksVendorItem> VendorItems;
|
||||
PerksVendorItem FrozenItem;
|
||||
bool HasFrozenItem = false;
|
||||
};
|
||||
|
||||
class PerksProgramResult final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PerksProgramResult() : ServerPacket(SMSG_PERKS_PROGRAM_RESULT, 75) {}
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
Optional<uint64> UnkLong;
|
||||
uint32/*ResultTypes*/ Type = {};
|
||||
|
||||
struct ResultParams
|
||||
{
|
||||
struct
|
||||
{
|
||||
std::vector<uint32> UnkInts;
|
||||
uint32 UnkInt1 = 0;
|
||||
uint32 UnkInt2 = 0;
|
||||
uint32 UnkInt3 = 0;
|
||||
} UnkData;
|
||||
|
||||
struct
|
||||
{
|
||||
std::vector<JamTimePair> TimePair;
|
||||
uint32 VendorItemID = 0;
|
||||
} BuyItem;
|
||||
|
||||
struct
|
||||
{
|
||||
std::vector<PerksProgram::PerksVendorItem> FrozenPerksVendorItems;
|
||||
ObjectGuid VendorGuid;
|
||||
ObjectGuid ModelSceneCameraGuid;
|
||||
} VendorItem;
|
||||
} Params = {};
|
||||
};
|
||||
|
||||
class PerksProgramActivityUpdate final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PerksProgramActivityUpdate() : ServerPacket(SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE) {}
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
uint32 unkt = 0;
|
||||
std::vector<uint32> ActivityIDs;
|
||||
Timestamp<> TimeUntilStart = 0;
|
||||
Timestamp<> TimeUntilEnd = 0;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user