结算时添加道具掉落
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);
|
||||
|
||||
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) {
|
||||
auto p = stats_pb->add_extra_drop();
|
||||
p->set_key(pair.first);
|
||||
@ -2159,6 +2164,30 @@ void Human::GenBattleReportData(a8::MutableXObject* params)
|
||||
stats.gold = 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()->GetRankPointParam1(rank);
|
||||
|
@ -487,4 +487,28 @@ namespace MetaData
|
||||
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
|
||||
{
|
||||
const metatable::RankReward* i = nullptr;
|
||||
|
||||
void Init();
|
||||
int RandDrop();
|
||||
private:
|
||||
std::vector<std::tuple<int, int>> drop;
|
||||
};
|
||||
|
||||
struct KillReward
|
||||
|
@ -354,6 +354,7 @@ private:
|
||||
for (auto& meta : rankreward_meta_list) {
|
||||
MetaData::RankReward& item = a8::FastAppend(rankreward_list);
|
||||
item.i = &meta;
|
||||
item.Init();
|
||||
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;
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
if (loader_->dress_vec.empty()) {
|
||||
|
@ -37,6 +37,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
||||
MetaData::Attr* GetAttrByName(const std::string& attr_name);
|
||||
MetaData::Dress* GetDress(int dress_id);
|
||||
MetaData::Dress* RandDress();
|
||||
MetaData::RankReward* GetRankReward(int rank);
|
||||
float GetRankRewardParam(int rank);
|
||||
float GetKillRewardParam(int kill_num);
|
||||
int GetRankPointParam1(int rank);
|
||||
|
@ -210,6 +210,7 @@ message RankReward
|
||||
{
|
||||
optional int32 rank = 1;
|
||||
optional float parameter = 2;
|
||||
optional string drop = 3;
|
||||
}
|
||||
|
||||
message RankPoint
|
||||
|
Loading…
x
Reference in New Issue
Block a user