Files
DarkflameServer/dNet/ZoneInstanceManager.cpp
2026-06-08 22:57:33 -05:00

58 lines
1.7 KiB
C++

#include "ZoneInstanceManager.h"
// Custom Classes
#include "MasterPackets.h"
// Static Variables
ZoneInstanceManager* ZoneInstanceManager::m_Address = nullptr;
//! Requests a zone transfer
void ZoneInstanceManager::RequestZoneTransfer(dServer* server, uint32_t zoneID, uint32_t zoneClone, bool mythranShift, TransferCallback callback) {
const auto nextID = ++currentRequestID;
requests[nextID] = callback;
MasterPackets::SendZoneTransferRequest(server, nextID, mythranShift, zoneID, zoneClone);
}
//! Handles a zone transfer response
void ZoneInstanceManager::HandleRequestZoneTransferResponse(Packet* packet) {
CINSTREAM_SKIP_HEADER;
uint64_t requestID;
inStream.Read(requestID);
bool mythranShift;
uint8_t tmp;
inStream.Read(tmp);
mythranShift = tmp > 0;
uint32_t zoneID;
inStream.Read(zoneID);
uint32_t zoneInstance;
inStream.Read(zoneInstance);
uint32_t zoneClone;
inStream.Read(zoneClone);
uint16_t serverPort;
inStream.Read(serverPort);
LUString serverIP(255);
inStream.Read(serverIP);
const auto entry = requests.find(requestID);
if (entry != requests.end()) {
entry->second(mythranShift, zoneID, zoneInstance, zoneClone, serverIP.string, serverPort);
requests.erase(entry);
}
}
void ZoneInstanceManager::CreatePrivateZone(dServer* server, uint32_t zoneID, uint32_t zoneClone, const std::string& password) {
MasterPackets::SendZoneCreatePrivate(server, zoneID, zoneClone, password);
}
void ZoneInstanceManager::RequestPrivateZone(
dServer* server,
bool mythranShift,
const std::string& password,
TransferCallback callback) {
const auto nextID = ++currentRequestID;
requests[nextID] = callback;
MasterPackets::SendZoneRequestPrivate(server, nextID, mythranShift, password);
}