mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-06-17 04:04:21 +00:00
chore: cleanup pointer management for LDF data (#1995)
* change network settings from vector to LwoNameValue * move settings on Entity to managed memory * Migrate more members * chore: remove pointer leakage from raw ldf pointers * feedback * fix ci
This commit is contained in:
@@ -346,10 +346,7 @@ void PropertyManagementComponent::UpdateModelPosition(const LWOOBJID id, const N
|
||||
info.spawner = nullptr;
|
||||
info.spawnerID = spawnerID;
|
||||
info.spawnerNodeID = 0;
|
||||
|
||||
for (auto* setting : item->GetConfig()) {
|
||||
info.settings.push_back(setting->Copy());
|
||||
}
|
||||
info.settings = item->GetConfig();
|
||||
|
||||
Entity* newEntity = Game::entityManager->CreateEntity(info);
|
||||
if (newEntity != nullptr) {
|
||||
@@ -393,11 +390,11 @@ void PropertyManagementComponent::UpdateModelPosition(const LWOOBJID id, const N
|
||||
|
||||
auto* spawner = Game::zoneManager->GetSpawner(spawnerId);
|
||||
|
||||
info.nodes[0]->config.push_back(new LDFData<LWOOBJID>(u"modelBehaviors", 0));
|
||||
info.nodes[0]->config.push_back(new LDFData<LWOOBJID>(u"userModelID", info.spawnerID));
|
||||
info.nodes[0]->config.push_back(new LDFData<int>(u"modelType", 2));
|
||||
info.nodes[0]->config.push_back(new LDFData<bool>(u"propertyObjectID", true));
|
||||
info.nodes[0]->config.push_back(new LDFData<int>(u"componentWhitelist", 1));
|
||||
info.nodes[0]->config.Insert<LWOOBJID>(u"modelBehaviors", 0);
|
||||
info.nodes[0]->config.Insert<LWOOBJID>(u"userModelID", info.spawnerID);
|
||||
info.nodes[0]->config.Insert<int>(u"modelType", 2);
|
||||
info.nodes[0]->config.Insert<bool>(u"propertyObjectID", true);
|
||||
info.nodes[0]->config.Insert<int>(u"componentWhitelist", 1);
|
||||
|
||||
auto* model = spawner->Spawn();
|
||||
auto* modelComponent = model->GetComponent<ModelComponent>();
|
||||
@@ -476,28 +473,19 @@ void PropertyManagementComponent::DeleteModel(const LWOOBJID id, const int delet
|
||||
|
||||
if (model->GetLOT() == 14) {
|
||||
//add it to the inv
|
||||
std::vector<LDFBaseData*> settings;
|
||||
|
||||
LwoNameValue actualConfig;
|
||||
|
||||
//fill our settings with BBB gurbage
|
||||
LDFBaseData* ldfBlueprintID = new LDFData<LWOOBJID>(u"blueprintid", model->GetVar<LWOOBJID>(u"blueprintid"));
|
||||
LDFBaseData* userModelDesc = new LDFData<std::u16string>(u"userModelDesc", u"A cool model you made!");
|
||||
LDFBaseData* userModelHasBhvr = new LDFData<bool>(u"userModelHasBhvr", false);
|
||||
LDFBaseData* userModelID = new LDFData<LWOOBJID>(u"userModelID", model->GetVar<LWOOBJID>(u"userModelID"));
|
||||
LDFBaseData* userModelMod = new LDFData<bool>(u"userModelMod", false);
|
||||
LDFBaseData* userModelName = new LDFData<std::u16string>(u"userModelName", u"My Cool Model");
|
||||
LDFBaseData* propertyObjectID = new LDFData<bool>(u"userModelOpt", true);
|
||||
LDFBaseData* modelType = new LDFData<int>(u"userModelPhysicsType", 2);
|
||||
actualConfig.Insert(u"blueprintid", model->GetVar<LWOOBJID>(u"blueprintid"));
|
||||
actualConfig.Insert(u"userModelDesc", u"A cool model you made!");
|
||||
actualConfig.Insert(u"userModelHasBhvr", false);
|
||||
actualConfig.Insert(u"userModelID", model->GetVar<LWOOBJID>(u"userModelID"));
|
||||
actualConfig.Insert(u"userModelMod", false);
|
||||
actualConfig.Insert(u"userModelName", u"My Cool Model");
|
||||
actualConfig.Insert(u"userModelOpt", true);
|
||||
actualConfig.Insert(u"userModelPhysicsType", 2);
|
||||
|
||||
settings.push_back(ldfBlueprintID);
|
||||
settings.push_back(userModelDesc);
|
||||
settings.push_back(userModelHasBhvr);
|
||||
settings.push_back(userModelID);
|
||||
settings.push_back(userModelMod);
|
||||
settings.push_back(userModelName);
|
||||
settings.push_back(propertyObjectID);
|
||||
settings.push_back(modelType);
|
||||
|
||||
inventoryComponent->AddItem(6662, 1, eLootSourceType::DELETION, eInventoryType::MODELS_IN_BBB, settings, LWOOBJID_EMPTY, false, false, spawnerId);
|
||||
inventoryComponent->AddItem(6662, 1, eLootSourceType::DELETION, eInventoryType::MODELS_IN_BBB, actualConfig, LWOOBJID_EMPTY, false, false, spawnerId);
|
||||
auto* item = inventoryComponent->FindItemBySubKey(spawnerId);
|
||||
|
||||
if (item == nullptr) {
|
||||
@@ -615,23 +603,23 @@ void PropertyManagementComponent::Load() {
|
||||
|
||||
info.spawnerID = databaseModel.id;
|
||||
|
||||
std::vector<LDFBaseData*> settings;
|
||||
LwoNameValue& settings = node->config;
|
||||
|
||||
//BBB property models need to have extra stuff set for them:
|
||||
if (databaseModel.lot == 14) {
|
||||
LWOOBJID blueprintID = databaseModel.ugcId;
|
||||
|
||||
settings.push_back(new LDFData<LWOOBJID>(u"blueprintid", blueprintID));
|
||||
settings.push_back(new LDFData<int>(u"componentWhitelist", 1));
|
||||
settings.push_back(new LDFData<int>(u"modelType", 2));
|
||||
settings.push_back(new LDFData<bool>(u"propertyObjectID", true));
|
||||
settings.push_back(new LDFData<LWOOBJID>(u"userModelID", databaseModel.id));
|
||||
settings.Insert<LWOOBJID>(u"blueprintid", blueprintID);
|
||||
settings.Insert<int>(u"componentWhitelist", 1);
|
||||
settings.Insert<int>(u"modelType", 2);
|
||||
settings.Insert<bool>(u"propertyObjectID", true);
|
||||
settings.Insert<LWOOBJID>(u"userModelID", databaseModel.id);
|
||||
} else {
|
||||
settings.push_back(new LDFData<int>(u"modelType", 2));
|
||||
settings.push_back(new LDFData<LWOOBJID>(u"userModelID", databaseModel.id));
|
||||
settings.push_back(new LDFData<LWOOBJID>(u"modelBehaviors", 0));
|
||||
settings.push_back(new LDFData<bool>(u"propertyObjectID", true));
|
||||
settings.push_back(new LDFData<int>(u"componentWhitelist", 1));
|
||||
settings.Insert<int>(u"modelType", 2);
|
||||
settings.Insert<LWOOBJID>(u"userModelID", databaseModel.id);
|
||||
settings.Insert<LWOOBJID>(u"modelBehaviors", 0);
|
||||
settings.Insert<bool>(u"propertyObjectID", true);
|
||||
settings.Insert<int>(u"componentWhitelist", 1);
|
||||
}
|
||||
|
||||
std::ostringstream userModelBehavior;
|
||||
@@ -646,9 +634,7 @@ void PropertyManagementComponent::Load() {
|
||||
firstAdded = true;
|
||||
}
|
||||
|
||||
settings.push_back(new LDFData<std::string>(u"userModelBehaviors", userModelBehavior.str()));
|
||||
|
||||
node->config = settings;
|
||||
settings.Insert<std::string>(u"userModelBehaviors", userModelBehavior.str());
|
||||
|
||||
const auto spawnerId = Game::zoneManager->MakeSpawner(info);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user