mirror of
https://github.com/0O0o0oOoO00/Alas.git
synced 2026-05-14 11:19:26 +08:00
fix: separate the loading logic of data proxy from the initial load to prevent crashes when data is not loaded
This commit is contained in:
@@ -88,41 +88,49 @@ Cracker& Cracker::Instance() {
|
||||
#endif
|
||||
|
||||
int Cracker::get_coin() {
|
||||
ensure_data_proxies();
|
||||
double coin = m_data_proxy.player["data"]["gold"];
|
||||
return static_cast<int>(coin);
|
||||
}
|
||||
|
||||
int Cracker::get_oil() {
|
||||
ensure_data_proxies();
|
||||
double oil = m_data_proxy.player["data"]["oil"];
|
||||
return static_cast<int>(oil);
|
||||
}
|
||||
|
||||
int Cracker::get_gems() {
|
||||
ensure_data_proxies();
|
||||
double gems = m_data_proxy.player["data"]["awardGem"];
|
||||
return static_cast<int>(gems);
|
||||
}
|
||||
|
||||
int Cracker::get_level() {
|
||||
ensure_data_proxies();
|
||||
double level = m_data_proxy.player["data"]["level"];
|
||||
return static_cast<int>(level);
|
||||
}
|
||||
|
||||
int Cracker::get_exp() {
|
||||
ensure_data_proxies();
|
||||
double exp = m_data_proxy.player["data"]["exp"];
|
||||
return static_cast<int>(exp);
|
||||
}
|
||||
|
||||
int Cracker::get_merit() {
|
||||
ensure_data_proxies();
|
||||
double merit = m_data_proxy.player["data"]["exploit"];
|
||||
return static_cast<int>(merit);
|
||||
}
|
||||
|
||||
int Cracker::get_guild_coin() {
|
||||
ensure_data_proxies();
|
||||
double guild_coin = m_data_proxy.player["data"]["guildCoin"];
|
||||
return static_cast<int>(guild_coin);
|
||||
}
|
||||
|
||||
int Cracker::get_design_prt() {
|
||||
ensure_data_proxies();
|
||||
double design_prt = m_data_proxy.player["data"]["design_prt"];
|
||||
return static_cast<int>(design_prt);
|
||||
}
|
||||
@@ -130,6 +138,7 @@ int Cracker::get_design_prt() {
|
||||
#define CORE_DATA_ITEM_ID 59900
|
||||
|
||||
int Cracker::get_core_data() {
|
||||
ensure_data_proxies();
|
||||
Lua::Table storage = m_data_proxy.storage["data"];
|
||||
double core_data = storage.get<Lua::Table>(CORE_DATA_ITEM_ID)["count"];
|
||||
return static_cast<int>(core_data);
|
||||
@@ -138,12 +147,14 @@ int Cracker::get_core_data() {
|
||||
#define MEDAL_ITEM_ID 15001
|
||||
|
||||
int Cracker::get_medal() {
|
||||
ensure_data_proxies();
|
||||
Lua::Table storage = m_data_proxy.storage["data"];
|
||||
double medal = storage.get<Lua::Table>(MEDAL_ITEM_ID)["count"];
|
||||
return static_cast<int>(medal);
|
||||
}
|
||||
|
||||
int Cracker::get_pt() {
|
||||
ensure_data_proxies();
|
||||
double pt = m_data_proxy.player["data"]["pt"];
|
||||
return static_cast<int>(pt);
|
||||
}
|
||||
@@ -151,17 +162,20 @@ int Cracker::get_pt() {
|
||||
#define SPECIALIZED_CORE_ITEM_ID 59010
|
||||
|
||||
int Cracker::get_specialized_core() {
|
||||
ensure_data_proxies();
|
||||
Lua::Table storage = m_data_proxy.storage["data"];
|
||||
double specialized_core = storage.get<Lua::Table>(SPECIALIZED_CORE_ITEM_ID)["count"];
|
||||
return static_cast<int>(specialized_core);
|
||||
}
|
||||
|
||||
int Cracker::get_curr_action_point() {
|
||||
ensure_data_proxies();
|
||||
double curr_action_point = m_data_proxy.world["world"]["fields"]["staminaMgr"]["fields"]["stamina"];
|
||||
return static_cast<int>(curr_action_point);
|
||||
}
|
||||
|
||||
std::map<Cracker::ShipId, Cracker::ShipInfo> Cracker::scan_dock() {
|
||||
ensure_data_proxies();
|
||||
std::map<ShipId, ShipInfo> ships;
|
||||
Lua::Table dock = m_data_proxy.dock["data"];
|
||||
for (auto& [ship_id, ship_info] : dock) {
|
||||
@@ -180,6 +194,7 @@ std::map<Cracker::ShipId, Cracker::ShipInfo> Cracker::scan_dock() {
|
||||
}
|
||||
|
||||
std::map<Cracker::StorageItemId, Cracker::StorageItemCount> Cracker::scan_storage() {
|
||||
ensure_data_proxies();
|
||||
std::map<StorageItemId, StorageItemCount> items;
|
||||
Lua::Table storage = m_data_proxy.storage["data"];
|
||||
for (auto& [item_id, item_info] : storage) {
|
||||
@@ -192,6 +207,7 @@ std::map<Cracker::StorageItemId, Cracker::StorageItemCount> Cracker::scan_storag
|
||||
}
|
||||
|
||||
std::optional<Cracker::ShipInfo> Cracker::get_ship_info(ShipId ship_id) {
|
||||
ensure_data_proxies();
|
||||
double id = static_cast<double>(ship_id);
|
||||
Lua::Table dock = m_data_proxy.dock["data"];
|
||||
try {
|
||||
@@ -212,6 +228,7 @@ std::optional<Cracker::ShipInfo> Cracker::get_ship_info(ShipId ship_id) {
|
||||
}
|
||||
|
||||
std::optional<Cracker::StorageItemCount> Cracker::get_storage_item_count(StorageItemId item_id) {
|
||||
ensure_data_proxies();
|
||||
double id = static_cast<double>(item_id);
|
||||
Lua::Table storage = m_data_proxy.storage["data"];
|
||||
try {
|
||||
@@ -554,21 +571,6 @@ void Cracker::print_value(std::vector<std::string>& path) {
|
||||
void Cracker::load_lua_resources() {
|
||||
SPDLOG_INFO("Load lua resources");
|
||||
|
||||
SPDLOG_INFO("Load data proxies");
|
||||
Lua::Table proxies = m_state["pg"]["proxyRegister"]["data"];
|
||||
for (int i = 1; i <= proxies.size(); ++i) {
|
||||
Lua::Table proxy = proxies[i];
|
||||
std::string proxy_name = proxy["proxyName"];
|
||||
if (proxy_name == "PlayerProxy") {
|
||||
Lua::Table proxy_map = proxy["facade"]["model"]["proxyMap"];
|
||||
m_data_proxy.player = proxy_map["PlayerProxy"];
|
||||
m_data_proxy.dock = proxy_map["BayProxy"];
|
||||
m_data_proxy.storage = proxy_map["BagProxy"];
|
||||
} else if (proxy_name == "WorldProxy") {
|
||||
m_data_proxy.world = proxy["facade"]["model"]["proxyMap"]["WorldProxy"];
|
||||
}
|
||||
}
|
||||
|
||||
SPDLOG_INFO("Load lua res");
|
||||
m_lua_res.Clone = m_state["Clone"];
|
||||
m_lua_res.Ship_getIntimacyLevel = m_state["Ship"]["getIntimacyLevel"];
|
||||
@@ -1584,6 +1586,27 @@ void Cracker::load_real_lua_func() {
|
||||
m_real_func.LevelStageView_tryAutoTrigger = m_state["LevelStageView"]["tryAutoTrigger"];
|
||||
}
|
||||
|
||||
void Cracker::ensure_data_proxies() {
|
||||
if (m_proxy_data_loaded) {
|
||||
return;
|
||||
}
|
||||
|
||||
SPDLOG_INFO("Load data proxies");
|
||||
Lua::Table proxies = m_state["pg"]["proxyRegister"]["data"];
|
||||
for (int i = 1; i <= proxies.size(); ++i) {
|
||||
Lua::Table proxy = proxies[i];
|
||||
std::string proxy_name = proxy["proxyName"];
|
||||
if (proxy_name == "PlayerProxy") {
|
||||
Lua::Table proxy_map = proxy["facade"]["model"]["proxyMap"];
|
||||
m_data_proxy.player = proxy_map["PlayerProxy"];
|
||||
m_data_proxy.dock = proxy_map["BayProxy"];
|
||||
m_data_proxy.storage = proxy_map["BagProxy"];
|
||||
} else if (proxy_name == "WorldProxy") {
|
||||
m_data_proxy.world = proxy["facade"]["model"]["proxyMap"]["WorldProxy"];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Cracker::mover_stop(sol::this_state& L) {
|
||||
if (m_mover.moving) {
|
||||
if (m_mover.view.has_value()) {
|
||||
|
||||
@@ -231,6 +231,8 @@ public:
|
||||
private:
|
||||
void load_real_lua_func();
|
||||
|
||||
void ensure_data_proxies();
|
||||
|
||||
void mover_stop(sol::this_state& L);
|
||||
void mover_go(sol::this_state& L, Lua::Table& view, Lua::Table& path);
|
||||
void mover_step(sol::this_state& L);
|
||||
@@ -293,6 +295,7 @@ private:
|
||||
Lua::Table dock;
|
||||
Lua::Table storage;
|
||||
} m_data_proxy;
|
||||
bool m_proxy_data_loaded = false;
|
||||
int m_gg_factor = 1;
|
||||
sol::state_view m_state;
|
||||
struct {
|
||||
|
||||
Reference in New Issue
Block a user