Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <map>
- #include <cctype>
- #include <functional>
- #include <algorithm>
- #include "ScoReader.h"
- #include "ScoWriter.h"
- inline std::string trim(const std::string &s)
- {
- const auto f = std::find_if_not(s.begin(), s.end(), [](int c) { return std::isspace(c); });
- return std::string(f, std::find_if_not(s.rbegin(), std::string::const_reverse_iterator(f), [](int c) { return std::isspace(c); }).base());
- }
- std::map<std::string, std::string> load_repl_list(const char* filename)
- {
- std::ifstream f(filename);
- std::map<std::string, std::string> map;
- while (!f.eof())
- {
- std::string s;
- std::getline(f, s);
- auto p = s.find('#');
- if (p != std::string::npos) s.erase(p);
- p = s.find("->");
- if (p == std::string::npos) continue;
- const auto a = trim(s.substr(0, p));
- const auto b = trim(s.substr(p + 2));
- map[a] = b;
- }
- f.close();
- return map;
- }
- int main()
- {
- auto map = load_repl_list("F:\\repl_list.txt");
- sco_file_t scene;
- read_sco_file(fopen("E:\\Mount&Blade Warband\\Modules\\DNO_Historical_Battle_0.96\\SceneObj\\scn_town_nov_center.sco", "rb"), &scene);
- for (int i = 0; i < scene.num_mission_objects; i++)
- {
- if (scene.mission_objects[i].meta_type == MT_SCENE_PROP)
- {
- std::string id = scene.mission_objects[i].id;
- id.erase(0, 4);
- //std::cout << "scene prop '" << id << "'" << std::endl;
- if (!map.count(id)) continue;
- std::cout << "replace '" << id << "' with '" << map[id] << "'" << std::endl;
- id = "spr_" + map[id];
- scene.mission_objects[i].id = strdup(id.data());
- }
- else if (scene.mission_objects[i].meta_type == MT_FLORA)
- {
- std::string id = scene.mission_objects[i].id;
- std::cout << "flora '" << id << "'" << std::endl;
- if (!map.count(id)) continue;
- std::cout << "replace '" << id << "' with '" << map[id] << "'" << std::endl;
- id = map[id];
- scene.mission_objects[i].id = strdup(id.data());
- }
- }
- write_sco_file(fopen("scn_town_25_center.sco", "wb"), &scene);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement