diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index e3d9cdd6..46c6943b 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -650,7 +650,9 @@ namespace MetaData { std::vector strings; a8::Split(i->pre_appear_effect(), strings, '|'); + #if 0 a8::XPrintf("%d,pre_appear_effect:%s\n", {i->id(), i->pre_appear_effect()}); + #endif for (auto& str : strings) { std::vector strings2; a8::Split(str, strings2, ':'); @@ -662,6 +664,21 @@ namespace MetaData } } } + { + pve_score = std::make_tuple(0, 0); + if (!i->pve_score().empty()) { + std::vector strings; + a8::Split(i->pve_score(), strings, '|'); + if (strings.size() != 2) { + abort(); + } + pve_score = std::make_tuple(a8::XValue(strings[0]).GetInt(), a8::XValue(strings[1]).GetInt()); + if (std::get<0>(pve_score) <= 0 || + std::get<1>(pve_score) <= 0) { + abort(); + } + } + } } int Player::RandDrop() @@ -1692,6 +1709,21 @@ namespace MetaData } waves[content.pb->round() - 1].push_back(&content); } + { + std::vector strings; + a8::Split(pb->score_reward(), strings, '|'); + int last_val = 0; + for (std::string& str : strings) { + if (a8::XValue(str).GetInt() <= last_val) { + abort(); + } + score_reward.push_back(a8::XValue(str).GetInt()); + last_val = a8::XValue(str); + } + if (score_reward.size() < 0) { + abort(); + } + } } } diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index a1417bf1..0556c813 100644 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -138,6 +138,7 @@ namespace MetaData std::vector> dead_drop; std::vector> pre_appear_effect; bool HasDrop() { return !dead_drop.empty();}; + std::tuple pve_score; void Init(); int RandDrop(); @@ -414,6 +415,7 @@ namespace MetaData std::vector mode_time; std::vector area; std::vector> waves; + std::vector score_reward; void Init(); }; diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 50dff880..efd3394a 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -242,6 +242,8 @@ message Player optional int32 damage = 51; optional int32 defence = 52; + + optional string pve_score = 53; } message Robot @@ -483,6 +485,7 @@ message PveGeminiMode optional int32 map_id = 2; optional string mode_time = 3; optional string area = 4; + optional string score_reward = 5; } //end