add weapon_id

This commit is contained in:
aozhiwei 2019-04-29 14:48:01 +08:00
parent e1ac7b4f58
commit 5efdcf722c
9 changed files with 57 additions and 17 deletions

View File

@ -108,11 +108,11 @@ void Bullet::OnHit(std::set<Entity*>& objects)
float def = hum->def + hum->buff.def_add; float def = hum->def + hum->buff.def_add;
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
player->stats.damage_amount_out += finaly_dmg; player->stats.damage_amount_out += finaly_dmg;
hum->DecHP(finaly_dmg, player->entity_uniid, player->name); hum->DecHP(finaly_dmg, player->entity_uniid, player->name, gun_meta->i->id());
if (a8::HasBitFlag(hum->status, HS_ReflectDamage) && hum->skill_meta) { if (a8::HasBitFlag(hum->status, HS_ReflectDamage) && hum->skill_meta) {
float reflect_dmg = finaly_dmg * hum->skill_meta->i->value1(); float reflect_dmg = finaly_dmg * hum->skill_meta->i->value1();
if (reflect_dmg > 1.0f) { if (reflect_dmg > 1.0f) {
player->DecHP(reflect_dmg, hum->entity_uniid, hum->name); player->DecHP(reflect_dmg, hum->entity_uniid, hum->name, gun_meta->i->id());
} }
} }
} }

View File

@ -105,6 +105,18 @@ enum SkillCond_e
SC_Passive = 2 SC_Passive = 2
}; };
enum VirtualWeapon_e
{
VW_SafeArea = 9000000,
VW_Spectate = 9000001,
VW_SelfDetonate = 9000002,
};
enum VirtualPlayer_e
{
VP_SafeArea = 9000000,
};
const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_NAME_FMT = "game%d_gameserver";
const char* const PROJ_ROOT_FMT = "/data/logs/%s"; const char* const PROJ_ROOT_FMT = "/data/logs/%s";

View File

@ -331,9 +331,9 @@ void Human::UpdatePoisoning()
bool need_notify = poisoning_time > 1000; bool need_notify = poisoning_time > 1000;
while (poisoning_time > 1000) { while (poisoning_time > 1000) {
if (room->gas_data.is_last_gas) { if (room->gas_data.is_last_gas) {
DecHP(room->gas_data.new_area_meta->i->hurt(), -1, "安全区"); DecHP(room->gas_data.new_area_meta->i->hurt(), VP_SafeArea, "安全区", VW_SafeArea);
} else { } else {
DecHP(room->gas_data.old_area_meta->i->hurt(), -1, "安全区"); DecHP(room->gas_data.old_area_meta->i->hurt(), VP_SafeArea, "安全区", VW_SafeArea);
} }
if (dead) { if (dead) {
poisoning_time = 0; poisoning_time = 0;
@ -448,7 +448,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
FillMFPlayerStats(p); FillMFPlayerStats(p);
} }
void Human::BeKill(int killer_id, const std::string& killer_name) void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
{ {
if (!dead && !room->game_over) { if (!dead && !room->game_over) {
Entity* hum = room->GetEntityByUniId(killer_id); Entity* hum = room->GetEntityByUniId(killer_id);
@ -474,7 +474,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name)
} }
} }
void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name) void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id)
{ {
auto downed_func = [] (const a8::XParams& param) auto downed_func = [] (const a8::XParams& param)
{ {
@ -487,11 +487,11 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name)
return; return;
} }
if (!hum->HasLiveTeammate()) { if (!hum->HasLiveTeammate()) {
hum->BeKill(param.param1, param.param2); hum->BeKill(param.param1, param.param2, param.param3);
return; return;
} }
int dec_hp = MetaMgr::Instance()->GetSysParamAsInt("downed_dec_hp"); int dec_hp = MetaMgr::Instance()->GetSysParamAsInt("downed_dec_hp");
hum->DecHP(dec_hp, param.param1, param.param2); hum->DecHP(dec_hp, param.param1, param.param2, param.param3);
}; };
if (energy_shield > 0.001f) { if (energy_shield > 0.001f) {
energy_shield = std::max(0.0f, energy_shield - dec_hp); energy_shield = std::max(0.0f, energy_shield - dec_hp);
@ -508,7 +508,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name)
} }
downed = false; downed = false;
downed_timer = nullptr; downed_timer = nullptr;
BeKill(killer_id, killer_name); BeKill(killer_id, killer_name, weapon_id);
} else { } else {
if (HasLiveTeammate()) { if (HasLiveTeammate()) {
health = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp"); health = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp");
@ -518,12 +518,13 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name)
a8::XParams() a8::XParams()
.SetSender(this) .SetSender(this)
.SetParam1(killer_id) .SetParam1(killer_id)
.SetParam2(killer_name), .SetParam2(killer_name)
.SetParam3(weapon_id),
downed_func, downed_func,
&xtimer_attacher.timer_list_ &xtimer_attacher.timer_list_
); );
} else { } else {
BeKill(killer_id, killer_name); BeKill(killer_id, killer_name, weapon_id);
} }
} }
} }
@ -1270,7 +1271,25 @@ void Human::BattleReport()
params->SetVal("rifle_kill", 0); params->SetVal("rifle_kill", 0);
params->SetVal("pistol_kill", 0); params->SetVal("pistol_kill", 0);
params->SetVal("submachine_kill", 0); params->SetVal("submachine_kill", 0);
params->SetVal("rescue_kill", 0); {
params->SetVal("coin_num", 0); #if 0
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(lethal_weapon);
if (equip_meta) {
switch (equip_meta->i->equip_subtype()) {
case 7:
{
params->SetVal("snipe_kill", 0);
}
break;
}
}
#endif
}
params->SetVal("rescue_member", stats.rescue_member);
{
int coin_num = (rank * MetaMgr::Instance()->rank_param) + (stats.kills * MetaMgr::Instance()->kill_param);
params->SetVal("coin_num", coin_num);
}
params->SetVal("score", 0);
delete params; delete params;
} }

View File

@ -70,6 +70,7 @@ class Human : public Entity
int sdmg = 0; int sdmg = 0;
bool poisoning = false; bool poisoning = false;
long long poisoning_time = 0; long long poisoning_time = 0;
int lethal_weapon = 0;
long long dead_frameno = 0; long long dead_frameno = 0;
long long join_frameno = 0; long long join_frameno = 0;
int status = 0; int status = 0;
@ -95,6 +96,7 @@ class Human : public Entity
xtimer_list* downed_timer = nullptr; xtimer_list* downed_timer = nullptr;
std::set<Human*>* team_members = nullptr; std::set<Human*>* team_members = nullptr;
std::set<Human*> kill_humans;
long long jump_frameno = 0; long long jump_frameno = 0;
@ -127,8 +129,8 @@ class Human : public Entity
void CancelAction(); void CancelAction();
void ResetAction(); void ResetAction();
void FillSMGameOver(cs::SMGameOver& msg); void FillSMGameOver(cs::SMGameOver& msg);
void BeKill(int killer_id, const std::string& killer_name); void BeKill(int killer_id, const std::string& killer_name, int weapon_id);
void DecHP(float dec_hp, int killer_id, const std::string& killer_name); void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id);
void AddToNewObjects(Entity* entity); void AddToNewObjects(Entity* entity);
void AddToPartObjects(Entity* entity); void AddToPartObjects(Entity* entity);
void RemoveObjects(Entity* entity); void RemoveObjects(Entity* entity);

View File

@ -94,6 +94,8 @@ public:
MetaMgr::Instance()->gas_inactive_time = MetaMgr::Instance()->GetSysParamAsInt("gas_inactive_time"); MetaMgr::Instance()->gas_inactive_time = MetaMgr::Instance()->GetSysParamAsInt("gas_inactive_time");
MetaMgr::Instance()->jump_time = MetaMgr::Instance()->GetSysParamAsFloat("jump_time"); MetaMgr::Instance()->jump_time = MetaMgr::Instance()->GetSysParamAsFloat("jump_time");
MetaMgr::Instance()->K = MetaMgr::Instance()->GetSysParamAsFloat("K"); MetaMgr::Instance()->K = MetaMgr::Instance()->GetSysParamAsFloat("K");
MetaMgr::Instance()->kill_param = MetaMgr::Instance()->GetSysParamAsFloat("kill_parameter");
MetaMgr::Instance()->rank_param = MetaMgr::Instance()->GetSysParamAsFloat("rank_parameter");
if (MetaMgr::Instance()->K < 0.01f) { if (MetaMgr::Instance()->K < 0.01f) {
abort(); abort();
} }

View File

@ -37,6 +37,8 @@ class MetaMgr : public a8::Singleton<MetaMgr>
int gas_inactive_time = 10; int gas_inactive_time = 10;
int jump_time = 10; int jump_time = 10;
float K = 100.0f; float K = 100.0f;
float kill_param = 0.0f;
float rank_param = 0.0f;
private: private:
MetaDataLoader* loader_ = nullptr; MetaDataLoader* loader_ = nullptr;

View File

@ -304,6 +304,7 @@ void Player::UpdateAction()
room->xtimer.DeleteTimer(hum->downed_timer); room->xtimer.DeleteTimer(hum->downed_timer);
hum->downed_timer = nullptr; hum->downed_timer = nullptr;
} }
++hum->stats.rescue_member;
hum->SyncAroundPlayers(); hum->SyncAroundPlayers();
} }
} }
@ -374,7 +375,7 @@ void Player::UpdateSpectate()
spectate = false; spectate = false;
return; return;
} }
BeKill(entity_uniid, name); BeKill(entity_uniid, name, VW_Spectate);
spectate = false; spectate = false;
} }

View File

@ -543,7 +543,8 @@ void Room::OnHumanDie(Human* hum)
if (distance <= hum->skill_meta->i->area()) { if (distance <= hum->skill_meta->i->area()) {
pair.second->DecHP(hum->skill_meta->i->value1(), pair.second->DecHP(hum->skill_meta->i->value1(),
hum->entity_uniid, hum->entity_uniid,
hum->name); hum->name,
VW_SelfDetonate);
} }
} }
} }

View File

@ -48,6 +48,7 @@ struct PlayerStats
int damage_amount_in = 0; int damage_amount_in = 0;
int damage_amount_out = 0; int damage_amount_out = 0;
int heal_amount = 0; int heal_amount = 0;
int rescue_member = 0;
int history_time_alive = 0; int history_time_alive = 0;
int history_kills = 0; int history_kills = 0;