151 lines
4.5 KiB
C++
Executable File
151 lines
4.5 KiB
C++
Executable File
#include "precompile.h"
|
|
|
|
#include <a8/stringlist.h>
|
|
#include <a8/csvreader.h>
|
|
|
|
#include "framework/cpp/utils.h"
|
|
|
|
#include "metamgr.h"
|
|
|
|
class MetaDataLoader
|
|
{
|
|
public:
|
|
std::list<metatable::Parameter> parameter_meta_list;
|
|
std::list<MetaData::Parameter> parameter_list;
|
|
std::list<metatable::Map> map_meta_list;
|
|
std::list<MetaData::Map> map_list;
|
|
std::list<metatable::SafeArea> safearea_meta_list;
|
|
std::list<MetaData::SafeArea> safearea_list;
|
|
std::list<metatable::Item> item_meta_list;
|
|
std::list<MetaData::Item> item_list;
|
|
std::list<metatable::Equip> equip_meta_list;
|
|
std::list<MetaData::Equip> equip_list;
|
|
std::list<metatable::Player> player_meta_list;
|
|
std::list<MetaData::Player> player_list;
|
|
std::list<metatable::MapThing> mapthing_meta_list;
|
|
std::list<MetaData::MapThing> mapthing_list;
|
|
|
|
std::map<std::string, MetaData::Parameter*> parameter_hash;
|
|
std::map<int, MetaData::Map*> gamemap_hash;
|
|
std::map<int, MetaData::SafeArea*> safearea_hash;
|
|
std::map<int, MetaData::Item*> item_hash;
|
|
std::map<int, MetaData::Equip*> equip_hash;
|
|
std::map<int, MetaData::Player*> player_hash;
|
|
std::map<int, MetaData::MapThing*> mapthing_hash;
|
|
|
|
void Load()
|
|
{
|
|
std::string res_path;
|
|
if (!f8::IsOnlineEnv()) {
|
|
res_path = a8::Format("/var/data/conf_test/game%d/gameserver/res/", {GAME_ID});
|
|
} else {
|
|
res_path = "../res/";
|
|
}
|
|
|
|
f8::ReadCsvMetaFile(res_path + "parameter@parameter.csv", parameter_meta_list);
|
|
f8::ReadCsvMetaFile(res_path + "map@map.csv", map_meta_list);
|
|
f8::ReadCsvMetaFile(res_path + "safearea@safearea.csv", safearea_meta_list);
|
|
f8::ReadCsvMetaFile(res_path + "item@item.csv", item_meta_list);
|
|
f8::ReadCsvMetaFile(res_path + "equip@equip.csv", equip_meta_list);
|
|
f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list);
|
|
f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list);
|
|
f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list);
|
|
BindToMetaData();
|
|
}
|
|
|
|
private:
|
|
|
|
void BindToMetaData()
|
|
{
|
|
|
|
for (auto& meta : parameter_meta_list) {
|
|
MetaData::Parameter& item = a8::FastAppend(parameter_list);
|
|
item.i = &meta;
|
|
parameter_hash[item.i->param_name()] = &item;
|
|
}
|
|
|
|
for (auto& meta : map_meta_list) {
|
|
MetaData::Map& item = a8::FastAppend(map_list);
|
|
item.i = &meta;
|
|
gamemap_hash[item.i->map_id()] = &item;
|
|
}
|
|
|
|
for (auto& meta : safearea_meta_list) {
|
|
MetaData::SafeArea& item = a8::FastAppend(safearea_list);
|
|
item.i = &meta;
|
|
safearea_hash[item.i->id()] = &item;
|
|
}
|
|
|
|
for (auto& meta : item_meta_list) {
|
|
MetaData::Item& item = a8::FastAppend(item_list);
|
|
item.i = &meta;
|
|
item_hash[item.i->id()] = &item;
|
|
}
|
|
|
|
for (auto& meta : equip_meta_list) {
|
|
MetaData::Equip& item = a8::FastAppend(equip_list);
|
|
item.i = &meta;
|
|
equip_hash[item.i->id()] = &item;
|
|
}
|
|
|
|
for (auto& meta : player_meta_list) {
|
|
MetaData::Player& item = a8::FastAppend(player_list);
|
|
item.i = &meta;
|
|
player_hash[item.i->id()] = &item;
|
|
}
|
|
|
|
for (auto& meta : mapthing_meta_list) {
|
|
MetaData::MapThing& item = a8::FastAppend(mapthing_list);
|
|
item.i = &meta;
|
|
mapthing_hash[item.i->thing_id()] = &item;
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
void MetaMgr::Init()
|
|
{
|
|
loader_ = new MetaDataLoader();
|
|
loader_->Load();
|
|
}
|
|
|
|
void MetaMgr::UnInit()
|
|
{
|
|
delete loader_;
|
|
loader_ = nullptr;
|
|
}
|
|
|
|
void MetaMgr::Reload()
|
|
{
|
|
delete loader_;
|
|
loader_ = nullptr;
|
|
|
|
loader_ = new MetaDataLoader();
|
|
loader_->Load();
|
|
}
|
|
|
|
std::string MetaMgr::GetSysParam(const std::string& param_name)
|
|
{
|
|
auto itr = loader_->parameter_hash.find(param_name);
|
|
return itr != loader_->parameter_hash.end() ? itr->second->i->param_value() : "";
|
|
}
|
|
|
|
MetaData::Map* MetaMgr::GetMap(int map_id)
|
|
{
|
|
auto itr = loader_->gamemap_hash.find(map_id);
|
|
return itr != loader_->gamemap_hash.end() ? itr->second : nullptr;
|
|
}
|
|
|
|
MetaData::Player* MetaMgr::GetPlayer(int id)
|
|
{
|
|
auto itr = loader_->player_hash.find(id);
|
|
return itr != loader_->player_hash.end() ? itr->second : nullptr;
|
|
}
|
|
|
|
MetaData::Equip* MetaMgr::GetEquip(int id)
|
|
{
|
|
auto itr = loader_->equip_hash.find(id);
|
|
return itr != loader_->equip_hash.end() ? itr->second : nullptr;
|
|
}
|