mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 02:43:44 +00:00
NULL is the owner (every model placed before this, and dashboard imports). Read by GetPropertyModels and GetModel, written by InsertNewPropertyModel on MySQL and SQLite, with a parity test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
59 lines
2.2 KiB
C++
59 lines
2.2 KiB
C++
#ifndef __IPROPERTIESCONTENTS__H__
|
|
#define __IPROPERTIESCONTENTS__H__
|
|
|
|
#include <array>
|
|
#include <cstdint>
|
|
#include <string_view>
|
|
|
|
class IPropertyContents {
|
|
public:
|
|
struct Model {
|
|
inline bool operator==(const LWOOBJID& other) const noexcept {
|
|
return id == other;
|
|
}
|
|
|
|
NiPoint3 position;
|
|
NiQuaternion rotation = QuatUtils::IDENTITY;
|
|
LWOOBJID id{};
|
|
LOT lot{};
|
|
LWOOBJID ugcId{};
|
|
std::array<LWOOBJID, 5> behaviors{};
|
|
// The character who placed the model; 0 (NULL in the database) for the property's owner and older models
|
|
LWOOBJID placedBy{};
|
|
};
|
|
|
|
// Inserts a new UGC model into the database.
|
|
virtual void InsertNewUgcModel(
|
|
std::stringstream& sd0Data,
|
|
const uint64_t blueprintId,
|
|
const uint32_t accountId,
|
|
const LWOOBJID characterId,
|
|
// Unix seconds before which the UGC server doesn't make it (0: right away). The owner's other models waiting
|
|
// to be made wait until then too (they may be edited again).
|
|
const int64_t processAfter) = 0;
|
|
|
|
// Get the property models for the given property id.
|
|
virtual std::vector<IPropertyContents::Model> GetPropertyModels(const LWOOBJID& propertyId) = 0;
|
|
|
|
// Insert a new property model into the database.
|
|
virtual void InsertNewPropertyModel(const LWOOBJID& propertyId, const IPropertyContents::Model& model, const std::string_view name) = 0;
|
|
|
|
// Update the model position and rotation for the given property id.
|
|
virtual void UpdateModel(const LWOOBJID& modelID, const NiPoint3& position, const NiQuaternion& rotation, const std::array<std::pair<LWOOBJID, std::string>, 5>& behaviors) = 0;
|
|
virtual void UpdateModel(const LWOOBJID& modelID, const NiPoint3& position, const NiQuaternion& rotation, const std::array<LWOOBJID, 5> behaviorIDs) {
|
|
std::array<std::pair<LWOOBJID, std::string>, 5> behaviors;
|
|
for (int32_t i = 0; i < behaviors.size(); i++) behaviors[i].first = behaviorIDs[i];
|
|
UpdateModel(modelID, position, rotation, behaviors);
|
|
}
|
|
|
|
// Remove the model for the given property id.
|
|
virtual void RemoveModel(const LWOOBJID& modelId) = 0;
|
|
|
|
// Gets a model by ID
|
|
virtual std::optional<Model> GetModel(const LWOOBJID modelID) = 0;
|
|
|
|
// Gets the id of the property a model is placed on
|
|
virtual std::optional<LWOOBJID> GetModelPropertyId(const LWOOBJID modelID) = 0;
|
|
};
|
|
#endif //!__IPROPERTIESCONTENTS__H__
|