结算时添加道具掉落

This commit is contained in:
aozhiwei 2020-05-22 14:31:08 +08:00
parent 2038ae2ae2
commit d92da4f8a4
6 changed files with 67 additions and 0 deletions

View File

@ -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);

View File

@ -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;
}
} }

View File

@ -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

View File

@ -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()) {

View File

@ -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);

View File

@ -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