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:
David Markowitz
2026-06-14 20:54:52 -07:00
committed by GitHub
parent 90db1ac699
commit 0101933f5c
67 changed files with 676 additions and 754 deletions

View File

@@ -97,17 +97,14 @@ void AmDarklingDragon::OnHitOrHealResult(Entity* self, Entity* attacker, int32_t
info.pos = objectPosition;
info.rot = rotation;
info.spawnerID = self->GetObjectID();
info.settings = {
new LDFData<std::string>(u"rebuild_activators",
info.settings.Insert<std::string>(u"rebuild_activators",
std::to_string(objectPosition.x + forward.x) + "\x1f" +
std::to_string(objectPosition.y) + "\x1f" +
std::to_string(objectPosition.z + forward.z)
),
new LDFData<int32_t>(u"respawn", 100000),
new LDFData<float>(u"rebuild_reset_time", 15),
new LDFData<bool>(u"no_timed_spawn", true),
new LDFData<LWOOBJID>(u"Dragon", self->GetObjectID())
};
std::to_string(objectPosition.z + forward.z));
info.settings.Insert<int32_t>(u"respawn", 100000);
info.settings.Insert<float>(u"rebuild_reset_time", 15);
info.settings.Insert<bool>(u"no_timed_spawn", true);
info.settings.Insert<LWOOBJID>(u"Dragon", self->GetObjectID());
auto* golemObject = Game::entityManager->CreateEntity(info);

View File

@@ -113,17 +113,14 @@ void FvMaelstromDragon::OnHitOrHealResult(Entity* self, Entity* attacker, int32_
info.pos = objectPosition;
info.rot = rotation;
info.spawnerID = self->GetObjectID();
info.settings = {
new LDFData<std::string>(u"rebuild_activators",
info.settings.Insert<std::string>(u"rebuild_activators",
std::to_string(objectPosition.x + forward.x) + "\x1f" +
std::to_string(objectPosition.y) + "\x1f" +
std::to_string(objectPosition.z + forward.z)
),
new LDFData<int32_t>(u"respawn", 100000),
new LDFData<float>(u"rebuild_reset_time", 15),
new LDFData<bool>(u"no_timed_spawn", true),
new LDFData<LWOOBJID>(u"Dragon", self->GetObjectID())
};
std::to_string(objectPosition.z + forward.z));
info.settings.Insert<int32_t>(u"respawn", 100000);
info.settings.Insert<float>(u"rebuild_reset_time", 15);
info.settings.Insert<bool>(u"no_timed_spawn", true);
info.settings.Insert<LWOOBJID>(u"Dragon", self->GetObjectID());
auto* golemObject = Game::entityManager->CreateEntity(info);

View File

@@ -82,15 +82,12 @@ void BaseEnemyApe::OnTimerDone(Entity* self, std::string timerName) {
entityInfo.spawnerID = self->GetObjectID();
entityInfo.lot = self->GetVar<LOT>(u"QuickbuildAnchorLOT") != 0
? self->GetVar<LOT>(u"QuickbuildAnchorLOT") : 7549;
entityInfo.settings = {
new LDFData<std::string>(u"rebuild_activators",
entityInfo.settings.Insert<std::string>(u"rebuild_activators",
std::to_string(objectPosition.GetX()) + "\x1f" +
std::to_string(objectPosition.GetY()) + "\x1f" +
std::to_string(objectPosition.GetZ())
),
new LDFData<bool>(u"no_timed_spawn", true),
new LDFData<LWOOBJID>(u"ape", self->GetObjectID())
};
std::to_string(objectPosition.GetZ()));
entityInfo.settings.Insert<bool>(u"no_timed_spawn", true);
entityInfo.settings.Insert<LWOOBJID>(u"ape", self->GetObjectID());
auto* anchor = Game::entityManager->CreateEntity(entityInfo, nullptr, self);
Game::entityManager->ConstructEntity(anchor);

View File

@@ -23,7 +23,7 @@ void BaseEnemyMech::OnDie(Entity* self, Entity* killer) {
NiPoint3 newLoc = { controlPhys->GetPosition().x, dpWorld::GetNavMesh()->GetHeightAtPoint(controlPhys->GetPosition()), controlPhys->GetPosition().z };
EntityInfo info = EntityInfo();
std::vector<LDFBaseData*> cfg;
LwoNameValue cfg;
std::u16string activatorPosStr;
activatorPosStr += (GeneralUtils::to_u16string(controlPhys->GetPosition().x));
activatorPosStr.push_back(0x1f);
@@ -31,8 +31,7 @@ void BaseEnemyMech::OnDie(Entity* self, Entity* killer) {
activatorPosStr.push_back(0x1f);
activatorPosStr += (GeneralUtils::to_u16string(controlPhys->GetPosition().z));
LDFBaseData* activatorPos = new LDFData<std::u16string>(u"rebuild_activators", activatorPosStr);
cfg.push_back(activatorPos);
cfg.Insert<std::u16string>(u"rebuild_activators", activatorPosStr);
info.lot = qbTurretLOT;
info.pos = newLoc;
info.rot = controlPhys->GetRotation();

View File

@@ -71,9 +71,7 @@ void ZoneAgSpiderQueen::OnTimerDone(Entity* self, std::string timerName) {
info.pos = spawnTarget->GetPosition();
info.rot = spawnTarget->GetRotation();
info.lot = chestObject;
info.settings = {
new LDFData<LWOOBJID>(u"parent_tag", self->GetObjectID())
};
info.settings.Insert(u"parent_tag", self->GetObjectID());
auto* chest = Game::entityManager->CreateEntity(info);
Game::entityManager->ConstructEntity(chest);

View File

@@ -37,12 +37,10 @@ void AmSkullkinTower::SpawnLegs(Entity* self, const std::string& loc) {
return;
}
std::vector<LDFBaseData*> config = { new LDFData<std::string>(u"Leg", loc) };
EntityInfo info{};
info.lot = legLOT;
info.spawnerID = self->GetObjectID();
info.settings = config;
info.settings.Insert("Leg", loc);
info.rot = newRot;
if (loc == "Right") {

View File

@@ -204,12 +204,10 @@ void PetDigServer::SpawnPet(Entity* self, const Entity* owner, const DigInfo dig
info.pos = self->GetPosition();
info.rot = self->GetRotation();
info.spawnerID = self->GetSpawnerID();
info.settings = {
new LDFData<LWOOBJID>(u"tamer", owner->GetObjectID()),
new LDFData<std::string>(u"group", "pet" + std::to_string(owner->GetObjectID())),
new LDFData<std::string>(u"spawnAnim", "spawn-pet"),
new LDFData<float>(u"spawnTimer", 1.0)
};
info.settings.Insert<LWOOBJID>(u"tamer", owner->GetObjectID());
info.settings.Insert<std::string>(u"group", "pet" + std::to_string(owner->GetObjectID()));
info.settings.Insert<std::string>(u"spawnAnim", "spawn-pet");
info.settings.Insert<float>(u"spawnTimer", 1.0);
auto* spawnedPet = Game::entityManager->CreateEntity(info);
Game::entityManager->ConstructEntity(spawnedPet);

View File

@@ -66,14 +66,12 @@ void QbSpawner::OnTimerDone(Entity* self, std::string timerName) {
info.rot = newRot;
info.spawnerID = self->GetObjectID();
info.spawnerNodeID = 0;
info.settings = {
new LDFData<bool>(u"no_timed_spawn", true),
new LDFData<float>(u"aggroRadius", 70),
new LDFData<float>(u"softtetherRadius", 80),
new LDFData<float>(u"tetherRadius", 90),
new LDFData<float>(u"wanderRadius", 5),
new LDFData<int>(u"mobTableLoc", i)
};
info.settings.Insert<bool>(u"no_timed_spawn", true);
info.settings.Insert<float>(u"aggroRadius", 70);
info.settings.Insert<float>(u"softtetherRadius", 80);
info.settings.Insert<float>(u"tetherRadius", 90);
info.settings.Insert<float>(u"wanderRadius", 5);
info.settings.Insert<int>(u"mobTableLoc", i);
auto* child = Game::entityManager->CreateEntity(info, nullptr, self);
Game::entityManager->ConstructEntity(child);

View File

@@ -34,12 +34,10 @@ void NsConcertChoiceBuildManager::SpawnCrate(Entity* self) {
info.pos = self->GetPosition();
info.rot = self->GetRotation();
info.spawnerID = self->GetObjectID();
info.settings = {
new LDFData<bool>(u"startsQBActivator", true),
new LDFData<std::string>(u"grpNameQBShowBricks", crate.group + std::to_string(groupNumber)),
new LDFData<std::u16string>(u"groupID", GeneralUtils::ASCIIToUTF16("Crate_" + group)),
new LDFData<float>(u"crateTime", crate.time),
};
info.settings.Insert<bool>(u"startsQBActivator", true);
info.settings.Insert<std::string>(u"grpNameQBShowBricks", crate.group + std::to_string(groupNumber));
info.settings.Insert<std::u16string>(u"groupID", GeneralUtils::ASCIIToUTF16("Crate_" + group));
info.settings.Insert<float>(u"crateTime", crate.time);
auto* spawnedCrate = Game::entityManager->CreateEntity(info);
Game::entityManager->ConstructEntity(spawnedCrate);

View File

@@ -89,7 +89,7 @@ void NtCombatChallengeServer::SpawnTargetDummy(Entity* self) {
info.spawnerID = self->GetObjectID();
info.pos = self->GetPosition();
info.rot = self->GetRotation();
info.settings = { new LDFData<std::string>(u"custom_script_server", "scripts\\02_server\\Map\\NT\\L_NT_COMBAT_CHALLENGE_DUMMY.lua") };
info.settings.Insert(u"custom_script_server", "scripts\\02_server\\Map\\NT\\L_NT_COMBAT_CHALLENGE_DUMMY.lua");
auto* dummy = Game::entityManager->CreateEntity(info, nullptr, self);

View File

@@ -95,10 +95,8 @@ void ZoneAgProperty::LoadInstance(Entity* self) {
for (auto* spawner : Game::zoneManager->GetSpawnersByName(self->GetVar<std::string>(InstancerSpawner))) {
for (auto* spawnerNode : spawner->m_Info.nodes) {
spawnerNode->config.push_back(
new LDFData<std::string>(u"custom_script_server",
R"(scripts\ai\GENERAL\L_INSTANCE_EXIT_TRANSFER_PLAYER_TO_LAST_NON_INSTANCE.lua)"));
spawnerNode->config.push_back(new LDFData<std::u16string>(u"transferText", u"SPIDER_QUEEN_EXIT_QUESTION"));
spawnerNode->config.Insert<std::string>(u"custom_script_server", R"(scripts\ai\GENERAL\L_INSTANCE_EXIT_TRANSFER_PLAYER_TO_LAST_NON_INSTANCE.lua)");
spawnerNode->config.Insert<std::u16string>(u"transferText", u"SPIDER_QUEEN_EXIT_QUESTION");
}
}

View File

@@ -515,9 +515,7 @@ void NjMonastryBossInstance::FightOver(Entity* self) {
info.pos = treasureChest->GetPosition();
info.rot = treasureChest->GetRotation();
info.spawnerID = self->GetObjectID();
info.settings = {
new LDFData<LWOOBJID>(u"parent_tag", self->GetObjectID())
};
info.settings.Insert<LWOOBJID>(u"parent_tag", self->GetObjectID());
// Finally spawn a treasure chest at the correct spawn point
auto* chestObject = Game::entityManager->CreateEntity(info);

View File

@@ -21,9 +21,7 @@ void StinkyFishTarget::OnSkillEventFired(Entity* self, Entity* caster, const std
entityInfo.pos = self->GetPosition();
entityInfo.rot = self->GetRotation();
entityInfo.spawnerID = self->GetObjectID();
entityInfo.settings = {
new LDFData<bool>(u"no_timed_spawn", true)
};
entityInfo.settings.Insert(u"no_timed_spawn", true);
auto* fish = Game::entityManager->CreateEntity(entityInfo);
Game::entityManager->ConstructEntity(fish);

View File

@@ -26,12 +26,10 @@ void SpawnPetBaseServer::OnUse(Entity* self, Entity* user) {
info.rot = spawner->GetRotation();
info.lot = self->GetVar<LOT>(u"petLOT");
info.spawnerID = self->GetObjectID();
info.settings = {
new LDFData<LWOOBJID>(u"tamer", user->GetObjectID()),
new LDFData<std::u16string>(u"groupID", petType + (GeneralUtils::to_u16string(user->GetObjectID())) + u";" + petType + u"s"),
new LDFData<std::u16string>(u"spawnAnim", self->GetVar<std::u16string>(u"spawnAnim")),
new LDFData<float_t>(u"spawnTimer", 1.0f)
};
info.settings.Insert<LWOOBJID>(u"tamer", user->GetObjectID());
info.settings.Insert<std::u16string>(u"groupID", petType + (GeneralUtils::to_u16string(user->GetObjectID())) + u";" + petType + u"s");
info.settings.Insert<std::u16string>(u"spawnAnim", self->GetVar<std::u16string>(u"spawnAnim"));
info.settings.Insert<float_t>(u"spawnTimer", 1.0f);
auto* pet = Game::entityManager->CreateEntity(info);
Game::entityManager->ConstructEntity(pet);

View File

@@ -38,10 +38,8 @@ void FvPandaSpawnerServer::OnCollisionPhantom(Entity* self, Entity* target) {
info.spawnerID = target->GetObjectID();
info.pos = self->GetPosition();
info.lot = 5643;
info.settings = {
new LDFData<LWOOBJID>(u"tamer", target->GetObjectID()),
new LDFData<std::u16string>(u"groupID", u"panda" + (GeneralUtils::to_u16string(target->GetObjectID())) + u";pandas")
};
info.settings.Insert<LWOOBJID>(u"tamer", target->GetObjectID());
info.settings.Insert<std::u16string>(u"groupID", u"panda" + (GeneralUtils::to_u16string(target->GetObjectID())) + u";pandas");
auto* panda = Game::entityManager->CreateEntity(info);
Game::entityManager->ConstructEntity(panda);

View File

@@ -66,7 +66,7 @@ void GfBanana::OnHit(Entity* self, Entity* attacker) {
info.pos.z -= QuatUtils::Right(rotation).z * 5;
info.rot = rotation;
info.spawnerID = self->GetObjectID();
info.settings = { new LDFData<uint32_t>(u"motionType", 5) };
info.settings.Insert<uint32_t>(u"motionType", 5);
auto* const newEn = Game::entityManager->CreateEntity(info, nullptr, self);
Game::entityManager->ConstructEntity(newEn);
}

View File

@@ -13,14 +13,12 @@ void PetDigBuild::OnQuickBuildComplete(Entity* self, Entity* target) {
info.pos = pos;
info.rot = self->GetRotation();
info.spawnerID = self->GetSpawnerID();
info.settings = {
new LDFData<LWOOBJID>(u"builder", target->GetObjectID()),
new LDFData<LWOOBJID>(u"X", self->GetObjectID())
};
info.settings.Insert<LWOOBJID>(u"builder", target->GetObjectID());
info.settings.Insert<LWOOBJID>(u"X", self->GetObjectID());
if (!flagNumber.empty()) {
info.lot = 7410; // Normal GF treasure
info.settings.push_back(new LDFData<std::u16string>(u"groupID", u"Flag" + flagNumber));
info.settings.Insert<std::u16string>(u"groupID", u"Flag" + flagNumber);
} else {
auto* missionComponent = target->GetComponent<MissionComponent>();
if (missionComponent != nullptr && missionComponent->GetMissionState(746) == eMissionState::ACTIVE) {

View File

@@ -261,15 +261,13 @@ void SGCannon::DoSpawnTimerFunc(Entity* self, const std::string& name) {
info.spawnerID = self->GetObjectID();
info.pos = path->pathWaypoints[0].position;
info.settings = {
new LDFData<SGEnemy>(u"SpawnData", toSpawn),
new LDFData<std::string>(u"custom_script_server", "scripts/ai/ACT/SG_TARGET.lua"), // this script is never loaded
new LDFData<std::string>(u"custom_script_client", "scripts/client/ai/SG_TARGET_CLIENT.lua"),
new LDFData<std::string>(u"attached_path", path->pathName),
new LDFData<uint32_t>(u"attached_path_start", 0),
new LDFData<std::u16string>(u"groupID", u"SGEnemy"),
new LDFData<uint32_t>(u"wave", self->GetVar<uint32_t>(ThisWaveVariable)),
};
info.settings.Insert<SGEnemy>(u"SpawnData", toSpawn);
info.settings.Insert<std::string>(u"custom_script_server", "scripts/ai/ACT/SG_TARGET.lua"); // this script is never loaded;
info.settings.Insert<std::string>(u"custom_script_client", "scripts/client/ai/SG_TARGET_CLIENT.lua");
info.settings.Insert<std::string>(u"attached_path", path->pathName);
info.settings.Insert<uint32_t>(u"attached_path_start", 0);
info.settings.Insert<std::u16string>(u"groupID", u"SGEnemy");
info.settings.Insert<uint32_t>(u"wave", self->GetVar<uint32_t>(ThisWaveVariable));
auto* enemy = Game::entityManager->CreateEntity(info, nullptr, self);
@@ -621,10 +619,11 @@ void SGCannon::OnActivityNotify(Entity* self, GameMessages::ActivityNotify& noti
if (!self->GetVar<bool>(GameStartedVariable)) return;
const auto& params = notify.notification;
if (params.empty()) return;
const auto itr = params.values.find(u"shot_done");
if (itr == params.values.end()) return;
const auto& param = params[0];
if (param->GetValueType() != LDF_TYPE_S32 || param->GetKey() != u"shot_done") return;
const auto& param = itr->second;
if (param->GetValueType() != LDF_TYPE_S32) return;
const auto superChargeShotDone = static_cast<LDFData<int32_t>*>(param.get())->GetValue() == GetConstants().cannonSuperChargeSkill;

View File

@@ -6,13 +6,11 @@
void RockHydrantSmashable::OnDie(Entity* self, Entity* killer) {
const auto hydrantName = self->GetVar<std::u16string>(u"hydrant");
LDFBaseData* data = new LDFData<std::string>(u"hydrant", GeneralUtils::UTF16ToWTF8(hydrantName));
EntityInfo info{};
info.lot = ROCK_HYDRANT_BROKEN;
info.pos = self->GetPosition();
info.rot = self->GetRotation();
info.settings = { data };
info.settings.Insert<std::string>(u"hydrant", GeneralUtils::UTF16ToWTF8(hydrantName));
info.spawnerID = self->GetSpawnerID();
auto* hydrant = Game::entityManager->CreateEntity(info);

View File

@@ -6,13 +6,11 @@
void HydrantSmashable::OnDie(Entity* self, Entity* killer) {
const auto hydrantName = self->GetVar<std::u16string>(u"hydrant");
LDFBaseData* data = new LDFData<std::string>(u"hydrant", GeneralUtils::UTF16ToWTF8(hydrantName));
EntityInfo info{};
info.lot = HYDRANT_BROKEN;
info.pos = self->GetPosition();
info.rot = self->GetRotation();
info.settings = { data };
info.settings.Insert<std::string>(u"hydrant", GeneralUtils::UTF16ToWTF8(hydrantName));
info.spawnerID = self->GetSpawnerID();
auto* hydrant = Game::entityManager->CreateEntity(info);

View File

@@ -10,46 +10,42 @@ void FvRaceServer::OnStartup(Entity* self) {
GameMessages::ConfigureRacingControl config;
auto& raceSet = config.racingSettings;
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"GameType", u"Racing"));
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"GameState", u"Starting"));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_Of_PlayersPerTeam", 6));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Minimum_Players_to_Start", 2));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Minimum_Players_for_Group_Achievements", 2));
raceSet.Insert<std::u16string>(u"GameType", u"Racing");
raceSet.Insert<std::u16string>(u"GameState", u"Starting");
raceSet.Insert<int32_t>(u"Number_Of_PlayersPerTeam", 6);
raceSet.Insert<int32_t>(u"Minimum_Players_to_Start", 2);
raceSet.Insert<int32_t>(u"Minimum_Players_for_Group_Achievements", 2);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Car_Object", 7703));
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"Race_PathName", u"MainPath"));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Current_Lap", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_of_Laps", 3));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"activityID", 54));
raceSet.Insert<int32_t>(u"Car_Object", 7703);
raceSet.Insert<std::u16string>(u"Race_PathName", u"MainPath");
raceSet.Insert<int32_t>(u"Current_Lap", 1);
raceSet.Insert<int32_t>(u"Number_of_Laps", 3);
raceSet.Insert<int32_t>(u"activityID", 54);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_1", 100));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_2", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_3", 80));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_4", 70));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_5", 60));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_6", 50));
raceSet.Insert<int32_t>(u"Place_1", 100);
raceSet.Insert<int32_t>(u"Place_2", 90);
raceSet.Insert<int32_t>(u"Place_3", 80);
raceSet.Insert<int32_t>(u"Place_4", 70);
raceSet.Insert<int32_t>(u"Place_5", 60);
raceSet.Insert<int32_t>(u"Place_6", 50);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_1", 15));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_2", 25));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_3", 50));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_4", 85));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_5", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_6", 100));
raceSet.Insert<int32_t>(u"Num_of_Players_1", 15);
raceSet.Insert<int32_t>(u"Num_of_Players_2", 25);
raceSet.Insert<int32_t>(u"Num_of_Players_3", 50);
raceSet.Insert<int32_t>(u"Num_of_Players_4", 85);
raceSet.Insert<int32_t>(u"Num_of_Players_5", 90);
raceSet.Insert<int32_t>(u"Num_of_Players_6", 100);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_of_Spawn_Groups", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Spawners", 4847));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Spawners", 4848));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Flag", 4850));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Flag", 4851));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Point", 4846));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Point", 4845));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Mark", 4844));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Mark", 4843));
raceSet.Insert<int32_t>(u"Number_of_Spawn_Groups", 1);
raceSet.Insert<int32_t>(u"Red_Spawners", 4847);
raceSet.Insert<int32_t>(u"Blue_Spawners", 4848);
raceSet.Insert<int32_t>(u"Blue_Flag", 4850);
raceSet.Insert<int32_t>(u"Red_Flag", 4851);
raceSet.Insert<int32_t>(u"Red_Point", 4846);
raceSet.Insert<int32_t>(u"Blue_Point", 4845);
raceSet.Insert<int32_t>(u"Red_Mark", 4844);
raceSet.Insert<int32_t>(u"Blue_Mark", 4843);
const std::vector<Entity*> racingControllers = Game::entityManager->GetEntitiesByComponent(eReplicaComponentType::RACING_CONTROL);
for (auto* const racingController : racingControllers) {
auto* racingComponent = racingController->GetComponent<RacingControlComponent>();
if (racingComponent) racingComponent->MsgConfigureRacingControl(config);
}
config.Send(self->GetObjectID());
}

View File

@@ -10,46 +10,42 @@ void GfRaceServer::OnStartup(Entity* self) {
GameMessages::ConfigureRacingControl config;
auto& raceSet = config.racingSettings;
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"GameType", u"Racing"));
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"GameState", u"Starting"));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_Of_PlayersPerTeam", 6));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Minimum_Players_to_Start", 2));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Minimum_Players_for_Group_Achievements", 2));
raceSet.Insert<std::u16string>(u"GameType", u"Racing");
raceSet.Insert<std::u16string>(u"GameState", u"Starting");
raceSet.Insert<int32_t>(u"Number_Of_PlayersPerTeam", 6);
raceSet.Insert<int32_t>(u"Minimum_Players_to_Start", 2);
raceSet.Insert<int32_t>(u"Minimum_Players_for_Group_Achievements", 2);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Car_Object", 7703));
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"Race_PathName", u"MainPath"));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Current_Lap", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_of_Laps", 3));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"activityID", 39));
raceSet.Insert<int32_t>(u"Car_Object", 7703);
raceSet.Insert<std::u16string>(u"Race_PathName", u"MainPath");
raceSet.Insert<int32_t>(u"Current_Lap", 1);
raceSet.Insert<int32_t>(u"Number_of_Laps", 3);
raceSet.Insert<int32_t>(u"activityID", 39);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_1", 100));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_2", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_3", 80));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_4", 70));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_5", 60));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_6", 50));
raceSet.Insert<int32_t>(u"Place_1", 100);
raceSet.Insert<int32_t>(u"Place_2", 90);
raceSet.Insert<int32_t>(u"Place_3", 80);
raceSet.Insert<int32_t>(u"Place_4", 70);
raceSet.Insert<int32_t>(u"Place_5", 60);
raceSet.Insert<int32_t>(u"Place_6", 50);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_1", 15));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_2", 25));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_3", 50));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_4", 85));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_5", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_6", 100));
raceSet.Insert<int32_t>(u"Num_of_Players_1", 15);
raceSet.Insert<int32_t>(u"Num_of_Players_2", 25);
raceSet.Insert<int32_t>(u"Num_of_Players_3", 50);
raceSet.Insert<int32_t>(u"Num_of_Players_4", 85);
raceSet.Insert<int32_t>(u"Num_of_Players_5", 90);
raceSet.Insert<int32_t>(u"Num_of_Players_6", 100);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_of_Spawn_Groups", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Spawners", 4847));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Spawners", 4848));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Flag", 4850));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Flag", 4851));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Point", 4846));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Point", 4845));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Mark", 4844));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Mark", 4843));
raceSet.Insert<int32_t>(u"Number_of_Spawn_Groups", 1);
raceSet.Insert<int32_t>(u"Red_Spawners", 4847);
raceSet.Insert<int32_t>(u"Blue_Spawners", 4848);
raceSet.Insert<int32_t>(u"Blue_Flag", 4850);
raceSet.Insert<int32_t>(u"Red_Flag", 4851);
raceSet.Insert<int32_t>(u"Red_Point", 4846);
raceSet.Insert<int32_t>(u"Blue_Point", 4845);
raceSet.Insert<int32_t>(u"Red_Mark", 4844);
raceSet.Insert<int32_t>(u"Blue_Mark", 4843);
const std::vector<Entity*> racingControllers = Game::entityManager->GetEntitiesByComponent(eReplicaComponentType::RACING_CONTROL);
for (auto* const racingController : racingControllers) {
auto* racingComponent = racingController->GetComponent<RacingControlComponent>();
if (racingComponent) racingComponent->MsgConfigureRacingControl(config);
}
config.Send(self->GetObjectID());
}

View File

@@ -10,45 +10,41 @@ void NsRaceServer::OnStartup(Entity* self) {
GameMessages::ConfigureRacingControl config;
auto& raceSet = config.racingSettings;
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"GameType", u"Racing"));
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"GameState", u"Starting"));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_Of_PlayersPerTeam", 6));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Minimum_Players_to_Start", 2));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Minimum_Players_for_Group_Achievements", 2));
raceSet.Insert<std::u16string>(u"GameType", u"Racing");
raceSet.Insert<std::u16string>(u"GameState", u"Starting");
raceSet.Insert<int32_t>(u"Number_Of_PlayersPerTeam", 6);
raceSet.Insert<int32_t>(u"Minimum_Players_to_Start", 2);
raceSet.Insert<int32_t>(u"Minimum_Players_for_Group_Achievements", 2);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Car_Object", 7703));
raceSet.push_back(make_unique<LDFData<std::u16string>>(u"Race_PathName", u"MainPath"));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Current_Lap", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_of_Laps", 3));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"activityID", 42));
raceSet.Insert<int32_t>(u"Car_Object", 7703);
raceSet.Insert<std::u16string>(u"Race_PathName", u"MainPath");
raceSet.Insert<int32_t>(u"Current_Lap", 1);
raceSet.Insert<int32_t>(u"Number_of_Laps", 3);
raceSet.Insert<int32_t>(u"activityID", 42);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_1", 100));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_2", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_3", 80));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_4", 70));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_5", 60));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Place_6", 50));
raceSet.Insert<int32_t>(u"Place_1", 100);
raceSet.Insert<int32_t>(u"Place_2", 90);
raceSet.Insert<int32_t>(u"Place_3", 80);
raceSet.Insert<int32_t>(u"Place_4", 70);
raceSet.Insert<int32_t>(u"Place_5", 60);
raceSet.Insert<int32_t>(u"Place_6", 50);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_1", 15));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_2", 25));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_3", 50));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_4", 85));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_5", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Num_of_Players_6", 100));
raceSet.Insert<int32_t>(u"Num_of_Players_1", 15);
raceSet.Insert<int32_t>(u"Num_of_Players_2", 25);
raceSet.Insert<int32_t>(u"Num_of_Players_3", 50);
raceSet.Insert<int32_t>(u"Num_of_Players_4", 85);
raceSet.Insert<int32_t>(u"Num_of_Players_5", 90);
raceSet.Insert<int32_t>(u"Num_of_Players_6", 100);
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Number_of_Spawn_Groups", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Spawners", 4847));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Spawners", 4848));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Flag", 4850));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Flag", 4851));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Point", 4846));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Point", 4845));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Red_Mark", 4844));
raceSet.push_back(make_unique<LDFData<int32_t>>(u"Blue_Mark", 4843));
raceSet.Insert<int32_t>(u"Number_of_Spawn_Groups", 1);
raceSet.Insert<int32_t>(u"Red_Spawners", 4847);
raceSet.Insert<int32_t>(u"Blue_Spawners", 4848);
raceSet.Insert<int32_t>(u"Blue_Flag", 4850);
raceSet.Insert<int32_t>(u"Red_Flag", 4851);
raceSet.Insert<int32_t>(u"Red_Point", 4846);
raceSet.Insert<int32_t>(u"Blue_Point", 4845);
raceSet.Insert<int32_t>(u"Red_Mark", 4844);
raceSet.Insert<int32_t>(u"Blue_Mark", 4843);
std::vector<Entity*> racingControllers = Game::entityManager->GetEntitiesByComponent(eReplicaComponentType::RACING_CONTROL);
for (auto* const racingController : racingControllers) {
auto* racingComponent = racingController->GetComponent<RacingControlComponent>();
if (racingComponent) racingComponent->MsgConfigureRacingControl(config);
}
config.Send(self->GetObjectID());
}

View File

@@ -9,45 +9,41 @@ void NsWinterRaceServer::OnStartup(Entity* self) {
GameMessages::ConfigureRacingControl config;
auto& raceSet = config.racingSettings;
raceSet.push_back(make_unique<LDFData<std::u16string>>("GameType", u"Racing"));
raceSet.push_back(make_unique<LDFData<std::u16string>>("GameState", u"Starting"));
raceSet.push_back(make_unique<LDFData<int32_t>>("Number_Of_PlayersPerTeam", 6));
raceSet.push_back(make_unique<LDFData<int32_t>>("Minimum_Players_to_Start", 2));
raceSet.push_back(make_unique<LDFData<int32_t>>("Minimum_Players_for_Group_Achievments", 2));
raceSet.Insert<std::u16string>("GameType", u"Racing");
raceSet.Insert<std::u16string>("GameState", u"Starting");
raceSet.Insert<int32_t>("Number_Of_PlayersPerTeam", 6);
raceSet.Insert<int32_t>("Minimum_Players_to_Start", 2);
raceSet.Insert<int32_t>("Minimum_Players_for_Group_Achievments", 2);
raceSet.push_back(make_unique<LDFData<int32_t>>("Car_Object", 7703));
raceSet.push_back(make_unique<LDFData<std::u16string>>("Race_PathName", u"MainPath"));
raceSet.push_back(make_unique<LDFData<int32_t>>("Current_Lap", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>("Number_of_Laps", 3));
raceSet.push_back(make_unique<LDFData<int32_t>>("activityID", 60));
raceSet.Insert<int32_t>("Car_Object", 7703);
raceSet.Insert<std::u16string>("Race_PathName", u"MainPath");
raceSet.Insert<int32_t>("Current_Lap", 1);
raceSet.Insert<int32_t>("Number_of_Laps", 3);
raceSet.Insert<int32_t>("activityID", 60);
raceSet.push_back(make_unique<LDFData<int32_t>>("Place_1", 100));
raceSet.push_back(make_unique<LDFData<int32_t>>("Place_2", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>("Place_3", 80));
raceSet.push_back(make_unique<LDFData<int32_t>>("Place_4", 70));
raceSet.push_back(make_unique<LDFData<int32_t>>("Place_5", 60));
raceSet.push_back(make_unique<LDFData<int32_t>>("Place_6", 50));
raceSet.Insert<int32_t>("Place_1", 100);
raceSet.Insert<int32_t>("Place_2", 90);
raceSet.Insert<int32_t>("Place_3", 80);
raceSet.Insert<int32_t>("Place_4", 70);
raceSet.Insert<int32_t>("Place_5", 60);
raceSet.Insert<int32_t>("Place_6", 50);
raceSet.push_back(make_unique<LDFData<int32_t>>("Num_of_Players_1", 15));
raceSet.push_back(make_unique<LDFData<int32_t>>("Num_of_Players_2", 25));
raceSet.push_back(make_unique<LDFData<int32_t>>("Num_of_Players_3", 50));
raceSet.push_back(make_unique<LDFData<int32_t>>("Num_of_Players_4", 85));
raceSet.push_back(make_unique<LDFData<int32_t>>("Num_of_Players_5", 90));
raceSet.push_back(make_unique<LDFData<int32_t>>("Num_of_Players_6", 100));
raceSet.Insert<int32_t>("Num_of_Players_1", 15);
raceSet.Insert<int32_t>("Num_of_Players_2", 25);
raceSet.Insert<int32_t>("Num_of_Players_3", 50);
raceSet.Insert<int32_t>("Num_of_Players_4", 85);
raceSet.Insert<int32_t>("Num_of_Players_5", 90);
raceSet.Insert<int32_t>("Num_of_Players_6", 100);
raceSet.push_back(make_unique<LDFData<int32_t>>("Number_of_Spawn_Groups", 1));
raceSet.push_back(make_unique<LDFData<int32_t>>("Red_Spawners", 4847));
raceSet.push_back(make_unique<LDFData<int32_t>>("Blue_Spawners", 4848));
raceSet.push_back(make_unique<LDFData<int32_t>>("Blue_Flag", 4850));
raceSet.push_back(make_unique<LDFData<int32_t>>("Red_Flag", 4851));
raceSet.push_back(make_unique<LDFData<int32_t>>("Red_Point", 4846));
raceSet.push_back(make_unique<LDFData<int32_t>>("Blue_Point", 4845));
raceSet.push_back(make_unique<LDFData<int32_t>>("Red_Mark", 4844));
raceSet.push_back(make_unique<LDFData<int32_t>>("Blue_Mark", 4843));
raceSet.Insert<int32_t>("Number_of_Spawn_Groups", 1);
raceSet.Insert<int32_t>("Red_Spawners", 4847);
raceSet.Insert<int32_t>("Blue_Spawners", 4848);
raceSet.Insert<int32_t>("Blue_Flag", 4850);
raceSet.Insert<int32_t>("Red_Flag", 4851);
raceSet.Insert<int32_t>("Red_Point", 4846);
raceSet.Insert<int32_t>("Blue_Point", 4845);
raceSet.Insert<int32_t>("Red_Mark", 4844);
raceSet.Insert<int32_t>("Blue_Mark", 4843);
const auto racingControllers = Game::entityManager->GetEntitiesByComponent(eReplicaComponentType::RACING_CONTROL);
for (auto* const racingController : racingControllers) {
auto* const racingComponent = racingController->GetComponent<RacingControlComponent>();
if (racingComponent) racingComponent->MsgConfigureRacingControl(config);
}
config.Send(self->GetObjectID());
}