mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-08-05 10:14:06 +00:00
chore: cleanup objectIdManager overloading and classes (#1391)
* objectIdManager fixes * Remove debug log
This commit is contained in:
@@ -3,6 +3,7 @@ set(DGAME_DUTILITIES_SOURCES "BrickDatabase.cpp"
|
||||
"GUID.cpp"
|
||||
"Loot.cpp"
|
||||
"Mail.cpp"
|
||||
"ObjectIDManager.cpp"
|
||||
"Preconditions.cpp"
|
||||
"SlashCommandHandler.cpp"
|
||||
"VanityUtilities.cpp")
|
||||
|
51
dGame/dUtilities/ObjectIDManager.cpp
Normal file
51
dGame/dUtilities/ObjectIDManager.cpp
Normal file
@@ -0,0 +1,51 @@
|
||||
#include "ObjectIDManager.h"
|
||||
|
||||
// Custom Classes
|
||||
#include "MasterPackets.h"
|
||||
#include "Database.h"
|
||||
#include "Logger.h"
|
||||
#include "Game.h"
|
||||
|
||||
//! The persistent ID request
|
||||
struct PersistentIDRequest {
|
||||
PersistentIDRequest(const uint64_t& requestID, const std::function<void(uint32_t)>& callback) : requestID(requestID), callback(callback) {}
|
||||
uint64_t requestID;
|
||||
|
||||
std::function<void(uint32_t)> callback;
|
||||
};
|
||||
|
||||
namespace {
|
||||
std::vector<PersistentIDRequest> Requests; //!< All outstanding persistent ID requests
|
||||
uint64_t CurrentRequestID = 0; //!< The current request ID
|
||||
uint32_t CurrentObjectID = uint32_t(1152921508165007067); //!< The current object ID
|
||||
std::uniform_int_distribution<int> Uni(10000000, INT32_MAX);
|
||||
};
|
||||
|
||||
//! Requests a persistent ID
|
||||
void ObjectIDManager::RequestPersistentID(const std::function<void(uint32_t)> callback) {
|
||||
const auto& request = Requests.emplace_back(++CurrentRequestID, callback);
|
||||
|
||||
MasterPackets::SendPersistentIDRequest(Game::server, request.requestID);
|
||||
}
|
||||
|
||||
//! Handles a persistent ID response
|
||||
void ObjectIDManager::HandleRequestPersistentIDResponse(const uint64_t requestID, const uint32_t persistentID) {
|
||||
auto it = std::find_if(Requests.begin(), Requests.end(), [requestID](const PersistentIDRequest& request) {
|
||||
return request.requestID == requestID;
|
||||
});
|
||||
|
||||
if (it == Requests.end()) return;
|
||||
|
||||
it->callback(persistentID);
|
||||
Requests.erase(it);
|
||||
}
|
||||
|
||||
//! Handles cases where we have to get a unique object ID synchronously
|
||||
uint32_t ObjectIDManager::GenerateRandomObjectID() {
|
||||
return Uni(Game::randomEngine);
|
||||
}
|
||||
|
||||
//! Generates an object ID server-sided (used for regular entities like smashables)
|
||||
uint32_t ObjectIDManager::GenerateObjectID() {
|
||||
return ++CurrentObjectID;
|
||||
}
|
40
dGame/dUtilities/ObjectIDManager.h
Normal file
40
dGame/dUtilities/ObjectIDManager.h
Normal file
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
// C++
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
#include <stdint.h>
|
||||
|
||||
/*!
|
||||
\file ObjectIDManager.h
|
||||
\brief A manager for handling object ID generation
|
||||
*/
|
||||
|
||||
//! The Object ID Manager
|
||||
namespace ObjectIDManager {
|
||||
//! Requests a persistent ID
|
||||
/*!
|
||||
\param callback The callback function
|
||||
*/
|
||||
void RequestPersistentID(const std::function<void(uint32_t)> callback);
|
||||
|
||||
|
||||
//! Handles a persistent ID response
|
||||
/*!
|
||||
\param requestID The request ID
|
||||
\param persistentID The persistent ID
|
||||
*/
|
||||
void HandleRequestPersistentIDResponse(const uint64_t requestID, const uint32_t persistentID);
|
||||
|
||||
//! Generates an object ID server-sided
|
||||
/*!
|
||||
\return A generated object ID
|
||||
*/
|
||||
uint32_t GenerateObjectID();
|
||||
|
||||
//! Generates a random object ID server-sided
|
||||
/*!
|
||||
\return A generated object ID
|
||||
*/
|
||||
uint32_t GenerateRandomObjectID();
|
||||
};
|
@@ -17,7 +17,7 @@
|
||||
#include "EntityInfo.h"
|
||||
#include "Spawner.h"
|
||||
#include "dZoneManager.h"
|
||||
#include "../dWorldServer/ObjectIDManager.h"
|
||||
#include "ObjectIDManager.h"
|
||||
#include "Level.h"
|
||||
|
||||
#include <fstream>
|
||||
@@ -182,7 +182,7 @@ LWOOBJID VanityUtilities::SpawnSpawner(LOT lot, const NiPoint3& position, const
|
||||
obj.lot = lot;
|
||||
// guratantee we have no collisions
|
||||
do {
|
||||
obj.id = ObjectIDManager::Instance()->GenerateObjectID();
|
||||
obj.id = ObjectIDManager::GenerateObjectID();
|
||||
} while(Game::zoneManager->GetSpawner(obj.id));
|
||||
obj.position = position;
|
||||
obj.rotation = rotation;
|
||||
|
Reference in New Issue
Block a user