结算时添加道具掉落
This commit is contained in:
parent
2038ae2ae2
commit
d92da4f8a4
@ -229,6 +229,11 @@ void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb)
|
|||||||
|
|
||||||
stats_pb->set_account_id(account_id);
|
stats_pb->set_account_id(account_id);
|
||||||
|
|
||||||
|
for (auto& pair : stats.items) {
|
||||||
|
auto p = stats_pb->add_items();
|
||||||
|
p->set_key(pair.first);
|
||||||
|
p->set_value(pair.second);
|
||||||
|
}
|
||||||
for (auto& pair : stats.extra_drop) {
|
for (auto& pair : stats.extra_drop) {
|
||||||
auto p = stats_pb->add_extra_drop();
|
auto p = stats_pb->add_extra_drop();
|
||||||
p->set_key(pair.first);
|
p->set_key(pair.first);
|
||||||
@ -2159,6 +2164,30 @@ void Human::GenBattleReportData(a8::MutableXObject* params)
|
|||||||
stats.gold = coin_num;
|
stats.gold = coin_num;
|
||||||
params->SetVal("coin_num", coin_num);
|
params->SetVal("coin_num", coin_num);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
std::string items_str;
|
||||||
|
MetaData::RankReward* rank_reward_meta = MetaMgr::Instance()->GetRankReward(rank);
|
||||||
|
if (rank_reward_meta) {
|
||||||
|
int drop_id = rank_reward_meta->RandDrop();
|
||||||
|
if (drop_id != 0) {
|
||||||
|
MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(drop_id);
|
||||||
|
if (drop_meta) {
|
||||||
|
std::vector<std::tuple<int, int, int>> drop_items;
|
||||||
|
drop_meta->RandItems(drop_items);
|
||||||
|
for (auto& item : drop_items) {
|
||||||
|
int item_id = std::get<0>(item);
|
||||||
|
int item_num = std::get<1>(item);
|
||||||
|
stats.items.push_back(std::make_pair(
|
||||||
|
item_id,
|
||||||
|
item_num
|
||||||
|
));
|
||||||
|
items_str += a8::Format("%d:%d|", {item_id, item_num});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params->SetVal("items", items_str);
|
||||||
|
}
|
||||||
{
|
{
|
||||||
stats.pass_score = MetaMgr::Instance()->GetKillPointParam1(stats.kills);
|
stats.pass_score = MetaMgr::Instance()->GetKillPointParam1(stats.kills);
|
||||||
stats.pass_score += MetaMgr::Instance()->GetRankPointParam1(rank);
|
stats.pass_score += MetaMgr::Instance()->GetRankPointParam1(rank);
|
||||||
|
@ -487,4 +487,28 @@ namespace MetaData
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RankReward::Init()
|
||||||
|
{
|
||||||
|
std::vector<std::string> strings;
|
||||||
|
a8::Split(i->drop(), strings, ':');
|
||||||
|
if (strings.size() < 2) {
|
||||||
|
drop.push_back(std::make_tuple(
|
||||||
|
a8::XValue(strings[0]),
|
||||||
|
a8::XValue(strings[1])
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int RankReward::RandDrop()
|
||||||
|
{
|
||||||
|
for (auto& tuple : drop) {
|
||||||
|
int drop_id = std::get<0>(tuple);
|
||||||
|
int rnd = std::get<1>(tuple);
|
||||||
|
if (rand() % 100 < rnd) {
|
||||||
|
return drop_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -196,6 +196,11 @@ namespace MetaData
|
|||||||
struct RankReward
|
struct RankReward
|
||||||
{
|
{
|
||||||
const metatable::RankReward* i = nullptr;
|
const metatable::RankReward* i = nullptr;
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
int RandDrop();
|
||||||
|
private:
|
||||||
|
std::vector<std::tuple<int, int>> drop;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct KillReward
|
struct KillReward
|
||||||
|
@ -354,6 +354,7 @@ private:
|
|||||||
for (auto& meta : rankreward_meta_list) {
|
for (auto& meta : rankreward_meta_list) {
|
||||||
MetaData::RankReward& item = a8::FastAppend(rankreward_list);
|
MetaData::RankReward& item = a8::FastAppend(rankreward_list);
|
||||||
item.i = &meta;
|
item.i = &meta;
|
||||||
|
item.Init();
|
||||||
rankreward_hash[item.i->rank()] = &item;
|
rankreward_hash[item.i->rank()] = &item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -538,6 +539,12 @@ MetaData::Dress* MetaMgr::GetDress(int dress_id)
|
|||||||
return itr != loader_->dress_hash.end() ? itr->second : nullptr;
|
return itr != loader_->dress_hash.end() ? itr->second : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MetaData::RankReward* MetaMgr::GetRankReward(int rank)
|
||||||
|
{
|
||||||
|
auto itr = loader_->rankreward_hash.find(rank);
|
||||||
|
return itr != loader_->rankreward_hash.end() ? itr->second : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
MetaData::Dress* MetaMgr::RandDress()
|
MetaData::Dress* MetaMgr::RandDress()
|
||||||
{
|
{
|
||||||
if (loader_->dress_vec.empty()) {
|
if (loader_->dress_vec.empty()) {
|
||||||
|
@ -37,6 +37,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
|||||||
MetaData::Attr* GetAttrByName(const std::string& attr_name);
|
MetaData::Attr* GetAttrByName(const std::string& attr_name);
|
||||||
MetaData::Dress* GetDress(int dress_id);
|
MetaData::Dress* GetDress(int dress_id);
|
||||||
MetaData::Dress* RandDress();
|
MetaData::Dress* RandDress();
|
||||||
|
MetaData::RankReward* GetRankReward(int rank);
|
||||||
float GetRankRewardParam(int rank);
|
float GetRankRewardParam(int rank);
|
||||||
float GetKillRewardParam(int kill_num);
|
float GetKillRewardParam(int kill_num);
|
||||||
int GetRankPointParam1(int rank);
|
int GetRankPointParam1(int rank);
|
||||||
|
@ -210,6 +210,7 @@ message RankReward
|
|||||||
{
|
{
|
||||||
optional int32 rank = 1;
|
optional int32 rank = 1;
|
||||||
optional float parameter = 2;
|
optional float parameter = 2;
|
||||||
|
optional string drop = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message RankPoint
|
message RankPoint
|
||||||
|
Loading…
x
Reference in New Issue
Block a user