mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-06-10 16:54:21 +00:00
chore: Remove pointer usage in trading (#1988)
* chore: Remove pointer usage in trading tested that I could still do a trade * Update TradingManager.h * remove returned object
This commit is contained in:
@@ -10,6 +10,11 @@
|
|||||||
#include "CharacterComponent.h"
|
#include "CharacterComponent.h"
|
||||||
#include "MissionComponent.h"
|
#include "MissionComponent.h"
|
||||||
#include "eMissionTaskType.h"
|
#include "eMissionTaskType.h"
|
||||||
|
#include <ranges>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
std::unique_ptr<Trade> g_EmptyTrade;
|
||||||
|
}
|
||||||
|
|
||||||
TradingManager* TradingManager::m_Address = nullptr;
|
TradingManager* TradingManager::m_Address = nullptr;
|
||||||
|
|
||||||
@@ -233,55 +238,38 @@ void Trade::SendUpdateToOther(LWOOBJID participant) {
|
|||||||
GameMessages::SendServerTradeUpdate(other->GetObjectID(), coins, items, other->GetSystemAddress());
|
GameMessages::SendServerTradeUpdate(other->GetObjectID(), coins, items, other->GetSystemAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
TradingManager::TradingManager() {
|
const std::unique_ptr<Trade>& TradingManager::GetTrade(LWOOBJID tradeId) const {
|
||||||
}
|
|
||||||
|
|
||||||
TradingManager::~TradingManager() {
|
|
||||||
for (const auto& pair : trades) {
|
|
||||||
delete pair.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
trades.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
Trade* TradingManager::GetTrade(LWOOBJID tradeId) const {
|
|
||||||
const auto& pair = trades.find(tradeId);
|
const auto& pair = trades.find(tradeId);
|
||||||
|
|
||||||
if (pair == trades.end()) return nullptr;
|
if (pair == trades.end()) return g_EmptyTrade;
|
||||||
|
|
||||||
return pair->second;
|
return pair->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
Trade* TradingManager::GetPlayerTrade(LWOOBJID playerId) const {
|
const std::unique_ptr<Trade>& TradingManager::GetPlayerTrade(LWOOBJID playerId) const {
|
||||||
for (const auto& pair : trades) {
|
for (const auto& trade : trades | std::views::values) {
|
||||||
if (pair.second->IsParticipant(playerId)) {
|
if (trade->IsParticipant(playerId)) {
|
||||||
return pair.second;
|
return trade;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return g_EmptyTrade;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TradingManager::CancelTrade(const LWOOBJID canceller, LWOOBJID tradeId, const bool sendCancelMessage) {
|
void TradingManager::CancelTrade(const LWOOBJID canceller, LWOOBJID tradeId, const bool sendCancelMessage) {
|
||||||
auto* trade = GetTrade(tradeId);
|
const auto& trade = GetTrade(tradeId);
|
||||||
|
|
||||||
if (trade == nullptr) return;
|
if (trade == nullptr) return;
|
||||||
|
|
||||||
if (sendCancelMessage) trade->Cancel(canceller);
|
if (sendCancelMessage) trade->Cancel(canceller);
|
||||||
|
|
||||||
delete trade;
|
|
||||||
|
|
||||||
trades.erase(tradeId);
|
trades.erase(tradeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
Trade* TradingManager::NewTrade(LWOOBJID participantA, LWOOBJID participantB) {
|
void TradingManager::NewTrade(LWOOBJID participantA, LWOOBJID participantB) {
|
||||||
const LWOOBJID tradeId = ObjectIDManager::GenerateObjectID();
|
const LWOOBJID tradeId = ObjectIDManager::GenerateObjectID();
|
||||||
|
|
||||||
auto* trade = new Trade(tradeId, participantA, participantB);
|
trades.insert_or_assign(tradeId, std::make_unique<Trade>(tradeId, participantA, participantB));
|
||||||
|
|
||||||
trades[tradeId] = trade;
|
|
||||||
|
|
||||||
LOG("Created new trade between (%llu) <-> (%llu)", participantA, participantB);
|
LOG("Created new trade between (%llu) <-> (%llu)", participantA, participantB);
|
||||||
|
|
||||||
return trade;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,16 @@
|
|||||||
|
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
|
|
||||||
struct TradeItem
|
#include <map>
|
||||||
{
|
#include <memory>
|
||||||
|
|
||||||
|
struct TradeItem {
|
||||||
LWOOBJID itemId;
|
LWOOBJID itemId;
|
||||||
LOT itemLot;
|
LOT itemLot;
|
||||||
uint32_t itemCount;
|
uint32_t itemCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Trade
|
class Trade {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
explicit Trade(LWOOBJID tradeId, LWOOBJID participantA, LWOOBJID participantB);
|
explicit Trade(LWOOBJID tradeId, LWOOBJID participantA, LWOOBJID participantB);
|
||||||
~Trade();
|
~Trade();
|
||||||
@@ -50,8 +51,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class TradingManager
|
class TradingManager {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
static TradingManager* Instance() {
|
static TradingManager* Instance() {
|
||||||
if (!m_Address) {
|
if (!m_Address) {
|
||||||
@@ -61,16 +61,13 @@ public:
|
|||||||
return m_Address;
|
return m_Address;
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit TradingManager();
|
const std::unique_ptr<Trade>& GetTrade(LWOOBJID tradeId) const;
|
||||||
~TradingManager();
|
const std::unique_ptr<Trade>& GetPlayerTrade(LWOOBJID playerId) const;
|
||||||
|
|
||||||
Trade* GetTrade(LWOOBJID tradeId) const;
|
|
||||||
Trade* GetPlayerTrade(LWOOBJID playerId) const;
|
|
||||||
void CancelTrade(const LWOOBJID canceller, LWOOBJID tradeId, const bool sendCancelMessage = true);
|
void CancelTrade(const LWOOBJID canceller, LWOOBJID tradeId, const bool sendCancelMessage = true);
|
||||||
Trade* NewTrade(LWOOBJID participantA, LWOOBJID participantB);
|
void NewTrade(LWOOBJID participantA, LWOOBJID participantB);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static TradingManager* m_Address; //For singleton method
|
static TradingManager* m_Address; //For singleton method
|
||||||
|
|
||||||
std::unordered_map<LWOOBJID, Trade*> trades;
|
std::unordered_map<LWOOBJID, std::unique_ptr<Trade>> trades;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3221,7 +3221,7 @@ void GameMessages::HandleClientTradeRequest(RakNet::BitStream& inStream, Entity*
|
|||||||
|
|
||||||
LOG("Trade request to (%llu)", i64Invitee);
|
LOG("Trade request to (%llu)", i64Invitee);
|
||||||
|
|
||||||
auto* trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
const auto& trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
||||||
|
|
||||||
if (trade != nullptr) {
|
if (trade != nullptr) {
|
||||||
if (!trade->IsParticipant(i64Invitee)) {
|
if (!trade->IsParticipant(i64Invitee)) {
|
||||||
@@ -3244,7 +3244,7 @@ void GameMessages::HandleClientTradeRequest(RakNet::BitStream& inStream, Entity*
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GameMessages::HandleClientTradeCancel(RakNet::BitStream& inStream, Entity* entity, const SystemAddress& sysAddr) {
|
void GameMessages::HandleClientTradeCancel(RakNet::BitStream& inStream, Entity* entity, const SystemAddress& sysAddr) {
|
||||||
auto* trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
const auto& trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
||||||
|
|
||||||
if (trade == nullptr) return;
|
if (trade == nullptr) return;
|
||||||
|
|
||||||
@@ -3258,7 +3258,7 @@ void GameMessages::HandleClientTradeAccept(RakNet::BitStream& inStream, Entity*
|
|||||||
|
|
||||||
LOG("Trade accepted from (%llu) -> (%d)", entity->GetObjectID(), bFirst);
|
LOG("Trade accepted from (%llu) -> (%d)", entity->GetObjectID(), bFirst);
|
||||||
|
|
||||||
auto* trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
const auto& trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
||||||
|
|
||||||
if (trade == nullptr) return;
|
if (trade == nullptr) return;
|
||||||
|
|
||||||
@@ -3324,7 +3324,7 @@ void GameMessages::HandleClientTradeUpdate(RakNet::BitStream& inStream, Entity*
|
|||||||
LOG("Trade item from (%llu) -> (%llu)/(%llu), (%i), (%llu), (%i), (%i)", entity->GetObjectID(), itemId, itemId2, lot, unknown1, unknown2, unknown3);
|
LOG("Trade item from (%llu) -> (%llu)/(%llu), (%i), (%llu), (%i), (%i)", entity->GetObjectID(), itemId, itemId2, lot, unknown1, unknown2, unknown3);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto* trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
const auto& trade = TradingManager::Instance()->GetPlayerTrade(entity->GetObjectID());
|
||||||
|
|
||||||
if (trade == nullptr) return;
|
if (trade == nullptr) return;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user