添加rankreward读表

This commit is contained in:
aozhiwei 2019-04-29 13:24:27 +08:00
parent 7721416323
commit e1ac7b4f58
8 changed files with 97 additions and 5 deletions

View File

@ -107,7 +107,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
float dmg = gun_meta->i->atk() * (1 + player->buff.damage_add);
float def = hum->def + hum->buff.def_add;
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
player->stats.damage_amount += finaly_dmg;
player->stats.damage_amount_out += finaly_dmg;
hum->DecHP(finaly_dmg, player->entity_uniid, player->name);
if (a8::HasBitFlag(hum->status, HS_ReflectDamage) && hum->skill_meta) {
float reflect_dmg = finaly_dmg * hum->skill_meta->i->value1();
@ -125,7 +125,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
float dmg = gun_meta->i->atk() * (1 + player->buff.damage_add);
float def = 0;
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
player->stats.damage_amount += finaly_dmg;
player->stats.damage_amount_out += finaly_dmg;
obstacle->health = std::max(0.0f, obstacle->health - finaly_dmg);
obstacle->dead = obstacle->health <= 0.01f;

View File

@ -1,5 +1,7 @@
#include "precompile.h"
#include <a8/mutable_xobject.h>
#include "human.h"
#include "cs_proto.pb.h"
#include "metamgr.h"
@ -11,6 +13,8 @@
#include "building.h"
#include "hero.h"
#include "framework/cpp/httpclientpool.h"
Human::Human():Entity()
{
default_weapon.weapon_idx = 0;
@ -107,7 +111,7 @@ void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb)
stats_pb->set_time_alive(dead_frameno * 1000.0f / SERVER_FRAME_RATE);
}
stats_pb->set_kills(stats.kills);
stats_pb->set_damage_amount(stats.damage_amount);
stats_pb->set_damage_amount(stats.damage_amount_out);
stats_pb->set_heal_amount(stats.heal_amount);
stats_pb->set_history_time_alive(stats.history_time_alive);
@ -434,7 +438,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
}
}
msg.set_team_id(0);
msg.set_team_id(team_id);
msg.set_team_rank(rank);
msg.set_team_allcnt(1);
msg.set_game_over(room->game_over);
@ -492,7 +496,11 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name)
if (energy_shield > 0.001f) {
energy_shield = std::max(0.0f, energy_shield - dec_hp);
} else {
float old_health = health;
health = std::max(0.0f, health - dec_hp);
if (health - old_health > 0.001f) {
stats.damage_amount_in += health - old_health;
}
if (health <= 0.0001f && !dead) {
if (downed) {
if (downed_timer) {
@ -1213,3 +1221,56 @@ void Human::ClearFrameData()
emotes_.clear();
}
}
void Human::BattleReport()
{
int rank = 0;
{
std::vector<Human*> human_list;
room->TouchHumanList(a8::XParams(),
[&human_list] (Human* hum, a8::XParams& param) -> bool
{
human_list.push_back(hum);
return true;
});
std::sort(human_list.begin(), human_list.end(),
[] (Human* a, Human* b )
{
if (a->dead_frameno == b->dead_frameno) {
return a->entity_uniid < b->entity_uniid;
} else {
return a->dead_frameno == 0 ||
(b->dead_frameno != 0 && a->dead_frameno > b->dead_frameno);
}
});
rank = human_list.size();
for (size_t i = 0; i < human_list.size(); ++i) {
if (human_list[i] == this) {
rank = i + 1;
break;
}
}
}
a8::MutableXObject* params = a8::MutableXObject::NewObject();
params->SetVal("account_id", account_id);
params->SetVal("map_name", room->map_meta->i->map_name());
params->SetVal("game_time", time(nullptr));
params->SetVal("hurt", stats.damage_amount_in);
params->SetVal("rank", rank);
params->SetVal("kills", stats.kills);
params->SetVal("harm", stats.damage_amount_out);
params->SetVal("add_HP", stats.heal_amount);
if (!dead) {
params->SetVal("alive_time", room->frame_no * 1000.0f / SERVER_FRAME_RATE);
} else {
params->SetVal("alive_time", dead_frameno * 1000.0f / SERVER_FRAME_RATE);
}
params->SetVal("team_status", team_id != 0);
params->SetVal("snipe_kill", 0);
params->SetVal("rifle_kill", 0);
params->SetVal("pistol_kill", 0);
params->SetVal("submachine_kill", 0);
params->SetVal("rescue_kill", 0);
params->SetVal("coin_num", 0);
delete params;
}

View File

@ -166,6 +166,7 @@ class Human : public Entity
private:
void ClearFrameData();
void BattleReport();
protected:
long long last_shot_frameno_ = 0;

View File

@ -130,4 +130,9 @@ namespace MetaData
const metatable::Dress* i = nullptr;
};
struct RankReward
{
const metatable::RankReward* i = nullptr;
};
}

View File

@ -37,6 +37,8 @@ public:
std::list<MetaData::Dress> dress_list;
std::list<metatable::Skill> skill_meta_list;
std::list<MetaData::Skill> skill_list;
std::list<metatable::RankReward> rankreward_meta_list;
std::list<MetaData::RankReward> rankreward_list;
std::map<std::string, MetaData::Parameter*> parameter_hash;
std::map<int, MetaData::Map*> gamemap_hash;
@ -52,6 +54,7 @@ public:
std::map<std::string, std::vector<MetaData::MapTplThing>> maptpl_hash;
std::map<int, MetaData::Dress*> dress_hash;
std::map<int, MetaData::Skill*> skill_hash;
std::map<int, MetaData::RankReward*> rankreward_hash;
void Load()
{
@ -84,6 +87,7 @@ public:
f8::ReadJsonMetaFile(res_path + "maps.json", building_meta_list);
f8::ReadCsvMetaFile(res_path + "dress@dress.csv", dress_meta_list);
f8::ReadCsvMetaFile(res_path + "skill@skill.csv", skill_meta_list);
f8::ReadCsvMetaFile(res_path + "rankReward@rankReward.csv", rankreward_meta_list);
BindToMetaData();
#if 1
{
@ -220,6 +224,12 @@ private:
skill_hash[item.i->id()] = &item;
}
for (auto& meta : rankreward_meta_list) {
MetaData::RankReward& item = a8::FastAppend(rankreward_list);
item.i = &meta;
rankreward_hash[item.i->rank()] = &item;
}
}
private:
@ -343,3 +353,9 @@ MetaData::Dress* MetaMgr::GetDress(int dress_id)
auto itr = loader_->dress_hash.find(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;
}

View File

@ -32,6 +32,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
MetaData::AirLine* RandAirLine();
MetaData::Skill* GetSkill(int skill_id);
MetaData::Dress* GetDress(int dress_id);
MetaData::RankReward* GetRankReward(int rank);
int gas_inactive_time = 10;
int jump_time = 10;

View File

@ -45,7 +45,8 @@ struct Weapon
struct PlayerStats
{
int kills = 0;
int damage_amount = 0;
int damage_amount_in = 0;
int damage_amount_out = 0;
int heal_amount = 0;
int history_time_alive = 0;

View File

@ -10,6 +10,7 @@ message Map
{
optional int32 map_id = 1; //id
optional string template_list = 2; //
optional string map_name = 3; //
}
message MapThing
@ -127,6 +128,12 @@ message Dress
optional int32 skill_id = 2;
}
message RankReward
{
optional int32 rank = 1;
optional int32 parameter = 2;
}
//end
message DoorObjJson