Implemented saving gruntwork results to file.

* Monkey Skyway paths are now saved in a format compatible with
paths.json
* flush() is called on every periodic DB save in addition to the /flush
and /mss N export commands
* Monkeys now accept WIP routes
This commit is contained in:
2020-10-06 21:53:21 +02:00
parent ce58411ff8
commit d4d0f388c4
9 changed files with 108 additions and 17 deletions

View File

@@ -196,6 +196,8 @@ void TableData::init() {
std::cerr << "[WARN] Malformed mobs.json file! Reason:" << err.what() << std::endl;
}
loadGruntwork();
NPCManager::nextId = nextId;
}
@@ -290,7 +292,6 @@ void TableData::constructPathSkyway(nlohmann::json::iterator _pathData) {
}
void TableData::constructPathSlider(nlohmann::json points, int rotations, int sliderID) {
std::queue<WarpLocation> route;
std::rotate(points.begin(), points.begin() + rotations, points.end()); // rotate points
nlohmann::json::iterator _point = points.begin(); // iterator
@@ -336,3 +337,64 @@ void TableData::constructPathNPC(nlohmann::json::iterator _pathData) {
}
TransportManager::NPCQueues[pathData["iNPCID"]] = points;
}
// load gruntwork output; if it exists
void TableData::loadGruntwork() {
try {
std::ifstream inFile(settings::GRUNTWORKJSON);
nlohmann::json gruntwork;
// skip if there's no gruntwork to load
if (inFile.fail())
return;
inFile >> gruntwork;
// skyway paths
auto skyway = gruntwork["skyway"];
for (auto _route = skyway.begin(); _route != skyway.end(); _route++) {
auto route = _route.value();
std::vector<WarpLocation> points;
for (auto _point = route["points"].begin(); _point != route["points"].end(); _point++) {
auto point = _point.value();
points.push_back(WarpLocation{point["x"], point["y"], point["z"]});
}
RunningSkywayRoutes[(int)route["iRouteID"]] = points;
}
std::cout << "[INFO] Loaded gruntwork.json" << std::endl;
}
catch (const std::exception& err) {
std::cerr << "[WARN] Malformed gruntwork.json file! Reason:" << err.what() << std::endl;
}
}
// write gruntwork output to file
void TableData::flush() {
std::ofstream file(settings::GRUNTWORKJSON);
nlohmann::json gruntwork;
for (auto& pair : RunningSkywayRoutes) {
nlohmann::json route;
route["iRouteID"] = (int)pair.first;
route["iMonkeySpeed"] = 1500; // TODO
std::cout << "serializing mss route " << (int)pair.first << std::endl;
for (WarpLocation& point : pair.second) {
nlohmann::json tmp;
tmp["x"] = point.x;
tmp["y"] = point.y;
tmp["z"] = point.z;
route["points"].push_back(tmp);
}
gruntwork["skyway"].push_back(route);
}
file << gruntwork << std::endl;
}