61{
63 int total_entries = 0;
64
65 group_tbl.for_each([group_db, &total_entries, type](sol::object const &key, sol::object const &value) {
66 std::string group_name = key.as<std::string>();
67 sol::table tbl = value.as<sol::table>();
69
70 std::shared_ptr<const exp_group_data> dup;
71 if ((dup = group_db->
at(group_name)) !=
nullptr) {
72 HLog(warning) <<
"ExpDB::load: Found duplicate " << (type ==
EXP_GROUP_TYPE_BASE ?
"base" :
"job") <<
" Exp group for '" << group_name <<
"', overwriting...";
73 group_db->
erase(group_name);
74 }
75
76 expd.max_level = tbl.get_or("MaxLevel", 0);
77 if (expd.max_level == 0) {
78 HLog(error) <<
"ExpDB::load: Max Level not given for group '" << group_name <<
"', skipping...";
79 return;
80 }
81
82 sol::optional<sol::table> maybe_exp_tbl = tbl.get<sol::optional<sol::table>>("Exp");
83 if (!maybe_exp_tbl) {
84 HLog(error) <<
"ExpDB::load: Missing Exp data for group '" << group_name <<
"', skipping...";
85 return;
86 }
87
88 sol::table &exp_tbl = maybe_exp_tbl.value();
89 exp_tbl.for_each([&expd, &group_name](sol::object const &key, sol::object const &value) {
90 if (key.get_type() != sol::type::number) {
91 HLog(error) << "ExpDB::load: Invalid Exp data found in array of group '" << group_name << "', aborting with '" << key.as<int>() << "' entries...";
92 return;
93 }
94 expd.exp.push_back(value.as<int>());
95 });
96
97 group_db->
insert(group_name, std::make_shared<exp_group_data>(expd));
98 total_entries++;
99 });
100
101 return total_entries;
102}
Definition: LockedLookupTable.hpp:44
void insert(const Key &key, const Value &value)
Definition: LockedLookupTable.hpp:68
void erase(const Key &key)
Definition: LockedLookupTable.hpp:73