mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-02 09:57:15 +00:00
refactor(zone): read a waypoint's name/value pairs in ReadLdfConfig
The pairs a waypoint carries (waypoint commands on movement and rail paths, LDF config on spawner paths) are read by one helper, ZoneFile::ReadLdfConfig, so the legacy path format can read them too. Nothing read changes: every zone file on disk reads the same. Check in game: nothing new; spawners and moving NPCs behave as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -143,6 +143,32 @@ SceneTransitionInfo ZoneFile::ReadSceneTransitionInfo(std::istream& file) {
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZoneFile::ReadLdfConfig(std::istream& file, PathType pathType, PathWaypoint& waypoint) {
|
||||||
|
uint32_t count;
|
||||||
|
BinaryIO::BinaryRead(file, count);
|
||||||
|
for (uint32_t i = 0; i < count; ++i) {
|
||||||
|
std::string parameter;
|
||||||
|
BinaryIO::ReadString<uint8_t>(file, parameter, BinaryIO::ReadType::WideString);
|
||||||
|
|
||||||
|
std::string value;
|
||||||
|
BinaryIO::ReadString<uint8_t>(file, value, BinaryIO::ReadType::WideString);
|
||||||
|
|
||||||
|
if (pathType == PathType::Movement || pathType == PathType::Rail) {
|
||||||
|
// cause NetDevil puts spaces in things that don't need spaces
|
||||||
|
parameter.erase(std::remove_if(parameter.begin(), parameter.end(), ::isspace), parameter.end());
|
||||||
|
auto waypointCommand = WaypointCommandType::StringToWaypointCommandType(parameter);
|
||||||
|
if (waypointCommand == eWaypointCommandType::DELAY) value.erase(std::remove_if(value.begin(), value.end(), ::isspace), value.end());
|
||||||
|
if (waypointCommand != eWaypointCommandType::INVALID) {
|
||||||
|
auto& command = waypoint.commands.emplace_back();
|
||||||
|
command.command = waypointCommand;
|
||||||
|
command.data = value;
|
||||||
|
} else LOG("Tried to load invalid waypoint command '%s'", parameter.c_str());
|
||||||
|
} else {
|
||||||
|
waypoint.config.ParseInsert(parameter + "=" + value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ZoneFile::ReadPath(std::istream& file) {
|
void ZoneFile::ReadPath(std::istream& file) {
|
||||||
Path path = Path();
|
Path path = Path();
|
||||||
|
|
||||||
@@ -244,30 +270,7 @@ void ZoneFile::ReadPath(std::istream& file) {
|
|||||||
|
|
||||||
// object LDF configs
|
// object LDF configs
|
||||||
if (path.pathType == PathType::Movement || path.pathType == PathType::Spawner || path.pathType == PathType::Rail) {
|
if (path.pathType == PathType::Movement || path.pathType == PathType::Spawner || path.pathType == PathType::Rail) {
|
||||||
uint32_t count;
|
ReadLdfConfig(file, path.pathType, waypoint);
|
||||||
BinaryIO::BinaryRead(file, count);
|
|
||||||
for (uint32_t i = 0; i < count; ++i) {
|
|
||||||
std::string parameter;
|
|
||||||
BinaryIO::ReadString<uint8_t>(file, parameter, BinaryIO::ReadType::WideString);
|
|
||||||
|
|
||||||
std::string value;
|
|
||||||
BinaryIO::ReadString<uint8_t>(file, value, BinaryIO::ReadType::WideString);
|
|
||||||
|
|
||||||
if (path.pathType == PathType::Movement || path.pathType == PathType::Rail) {
|
|
||||||
// cause NetDevil puts spaces in things that don't need spaces
|
|
||||||
parameter.erase(std::remove_if(parameter.begin(), parameter.end(), ::isspace), parameter.end());
|
|
||||||
auto waypointCommand = WaypointCommandType::StringToWaypointCommandType(parameter);
|
|
||||||
if (waypointCommand == eWaypointCommandType::DELAY) value.erase(std::remove_if(value.begin(), value.end(), ::isspace), value.end());
|
|
||||||
if (waypointCommand != eWaypointCommandType::INVALID) {
|
|
||||||
auto& command = waypoint.commands.emplace_back();
|
|
||||||
command.command = waypointCommand;
|
|
||||||
command.data = value;
|
|
||||||
} else LOG("Tried to load invalid waypoint command '%s'", parameter.c_str());
|
|
||||||
} else {
|
|
||||||
waypoint.config.ParseInsert(parameter + "=" + value);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
path.pathWaypoints.push_back(waypoint);
|
path.pathWaypoints.push_back(waypoint);
|
||||||
|
|||||||
@@ -248,4 +248,6 @@ private:
|
|||||||
void ReadSceneTransition(std::istream& file);
|
void ReadSceneTransition(std::istream& file);
|
||||||
SceneTransitionInfo ReadSceneTransitionInfo(std::istream& file);
|
SceneTransitionInfo ReadSceneTransitionInfo(std::istream& file);
|
||||||
void ReadPath(std::istream& file);
|
void ReadPath(std::istream& file);
|
||||||
|
// A waypoint's name/value pairs: waypoint commands on movement and rail paths, LDF config on the others
|
||||||
|
static void ReadLdfConfig(std::istream& file, PathType pathType, PathWaypoint& waypoint);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user