remove downed state

This commit is contained in:
aozhiwei 2019-07-19 09:26:43 +08:00
parent f3c81fd90c
commit 8b367c8d96
5 changed files with 12 additions and 127 deletions

View File

@ -61,8 +61,6 @@ enum ActionType_e
AT_None = 0,
AT_Reload = 1,
AT_UseItem = 2,
AT_Relive = 3,
AT_Rescue = 4
};
enum InventorySlot_e

View File

@ -77,19 +77,13 @@ float Human::GetSpeed()
return buff->meta->param2;
}
}
float speed = 0.0f;
if (downed) {
//倒地速度
speed = ability.speed;
} else {
speed = ability.speed;
if (action_type == AT_Reload) {
speed = ability.reload_speed;
} else if (shot_hold) {
if (curr_weapon->weapon_idx == GUN_SLOT1 ||
curr_weapon->weapon_idx == GUN_SLOT2) {
speed = ability.shot_speed;
}
float speed = ability.speed;
if (action_type == AT_Reload) {
speed = ability.reload_speed;
} else if (shot_hold) {
if (curr_weapon->weapon_idx == GUN_SLOT1 ||
curr_weapon->weapon_idx == GUN_SLOT2) {
speed = ability.shot_speed;
}
}
speed = (speed + buff_attr_abs_[HAT_Speed]) * (1 + buff_attr_rate_[HAT_Speed]);
@ -123,7 +117,9 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data)
p->set_health(GetHP());
p->set_max_health(GetMaxHP());
p->set_dead(dead);
#if 0
p->set_downed(downed);
#endif
p->set_disconnected(disconnected);
if (skin_jlf.skin_id != 0) {
skin_jlf.ToPB(p->mutable_skin());
@ -196,7 +192,9 @@ void Human::FillMFTeamData(cs::MFTeamData* team_data)
team_data->set_max_health(GetMaxHP());
team_data->set_disconnected(false);
team_data->set_dead(dead);
#if 0
team_data->set_downed(downed);
#endif
}
void Human::Shot()
@ -482,15 +480,6 @@ void Human::StartAction(ActionType_e action_type,
void Human::CancelAction()
{
if (action_type == AT_Relive) {
Entity* entity = room->GetEntityByUniId(action_target_id);
if (entity->entity_type != ET_Player) {
Human* hum = (Human*)entity;
if (hum->action_type == AT_Rescue) {
hum->CancelAction();
}
}
}
ResetAction();
}
@ -543,23 +532,6 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id)
{
auto downed_func = [] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
if (!hum->downed) {
hum->room->xtimer.DeleteTimer(hum->downed_timer);
return;
}
if (hum->dead) {
return;
}
if (!hum->HasLiveTeammate()) {
hum->BeKill(param.param1, param.param2, param.param3);
return;
}
int dec_hp = MetaMgr::Instance()->GetSysParamAsInt("downed_dec_hp");
hum->DecHP(dec_hp, param.param1, param.param2, param.param3);
};
if (energy_shield > 0.001f) {
energy_shield = std::max(0.0f, energy_shield - dec_hp);
} else {
@ -569,31 +541,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, i
stats.damage_amount_in += GetHP() - old_health;
}
if (GetHP() <= 0.0001f && !dead) {
if (downed) {
if (downed_timer) {
room->xtimer.DeleteTimer(downed_timer);
}
downed = false;
downed_timer = nullptr;
BeKill(killer_id, killer_name, weapon_id);
} else {
if (HasNoDownedTeammate()) {
ability.hp = MetaMgr::Instance()->GetSysParamAsInt("downed_recover_hp");
downed = true;
downed_timer = room->xtimer.AddRepeatTimerAndAttach(
SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this)
.SetParam1(killer_id)
.SetParam2(killer_name)
.SetParam3(weapon_id),
downed_func,
&xtimer_attacher.timer_list_
);
} else {
BeKill(killer_id, killer_name, weapon_id);
}
}
BeKill(killer_id, killer_name, weapon_id);
}
}
last_attacker_id = killer_id;
@ -644,18 +592,6 @@ bool Human::HasLiveTeammate()
return false;
}
bool Human::HasNoDownedTeammate()
{
if (team_members) {
for (auto& hum : *team_members) {
if (hum != this && !hum->dead && !hum->downed) {
return true;
}
}
}
return false;
}
void Human::DoSkill()
{
if (skill_meta && GetSkillLeftTime() <= 0 && !a8::HasBitFlag(status, HS_Assaulting)) {
@ -1192,29 +1128,6 @@ void Human::UpdateAction()
#endif
}
break;
case AT_Relive:
{
Entity* entity = room->GetEntityByUniId(action_target_id);
if (entity->entity_type != ET_Player) {
return;
}
Human* hum = (Human*)entity;
if (hum->action_type == AT_Rescue) {
hum->CancelAction();
return;
}
if (!hum->dead && hum->downed) {
hum->ability.hp = MetaMgr::Instance()->GetSysParamAsInt("downed_relive_recover_hp");
hum->downed = false;
if (hum->downed_timer) {
room->xtimer.DeleteTimer(hum->downed_timer);
hum->downed_timer = nullptr;
}
++hum->stats.rescue_member;
}
hum->SyncAroundPlayers();
}
break;
default:
break;
}

View File

@ -57,7 +57,6 @@ class Human : public Entity
std::string name;
std::string avatar_url;
bool dead = false;
bool downed = false;
bool disconnected = false;
int anim_type = 0;
int anim_seq = 0;
@ -98,8 +97,6 @@ class Human : public Entity
int pain_killer_lastingtime = 0;
xtimer_list* pain_killer_timer = nullptr;
xtimer_list* downed_timer = nullptr;
std::set<Human*>* team_members = nullptr;
std::set<Human*> kill_humans;
@ -160,7 +157,6 @@ class Human : public Entity
void AddOutObjects(Entity* entity);
void RemoveOutObjects(Entity* entity);
bool HasLiveTeammate();
bool HasNoDownedTeammate();
void DoSkill();
void FindLocation();
void RefreshView();

View File

@ -110,9 +110,6 @@ void Player::Update(int delta_time)
void Player::UpdateMove()
{
if (action_type == AT_Relive) {
CancelAction();
}
if (dead || HasBuffEffect(BET_Vertigo) || HasBuffEffect(BET_Dcgr)) {
moving = false;
moved_frames = 0;
@ -337,24 +334,6 @@ void Player::HumanInteraction(Human* hum)
if (hum == this) {
return;
}
if (!hum->downed) {
return;
}
if (hum->action_type == AT_Rescue) {
return;
}
hum->StartAction(
AT_Rescue,
MetaMgr::Instance()->GetSysParamAsInt("downed_relive_time") * 1000,
room->frame_no,
entity_uniid
);
StartAction(
AT_Relive,
MetaMgr::Instance()->GetSysParamAsInt("downed_relive_time") * 1000,
room->frame_no,
hum->entity_uniid
);
}
void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& prepare_items)

View File

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