From 88b497d5de5a45cd82a9b828f27a69f52de9c58d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 28 Apr 2019 15:45:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=80=E8=83=BDok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 145 ++++++++++++++++++------------------- server/gameserver/human.h | 1 + 2 files changed, 71 insertions(+), 75 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index db851f9..2840fa7 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -83,70 +83,7 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) #endif p->set_vip(vip); p->set_sdmg(sdmg); - if (pain_killer_timer) { - int passed_time = (room->frame_no - pain_killer_frameno) * FRAME_RATE_MS; - int left_time = std::max(0, pain_killer_lastingtime * 1000 - passed_time); - int anodyne_max_time = MetaMgr::Instance()->GetSysParamAsInt("anodyne_max_time"); - left_time = std::min(left_time, anodyne_max_time * 1000); - - cs::MFBodyState* state = p->add_states(); - state->set_state_type(1); - state->set_left_time(left_time); - state->set_lasting_time(anodyne_max_time * 1000); - } - if (a8::HasBitFlag(status, HS_Fly)) { - cs::MFBodyState* state = p->add_states(); - state->set_state_type(2); - } - if (a8::HasBitFlag(status, HS_Jump)) { - int passed_time = (room->frame_no - jump_frameno) * FRAME_RATE_MS; - cs::MFBodyState* state = p->add_states(); - state->set_state_type(3); - state->set_left_time(std::max(0, MetaMgr::Instance()->jump_time * 1000 - passed_time)); - state->set_lasting_time(MetaMgr::Instance()->jump_time * 1000); - } - if (a8::HasBitFlag(status, HS_Hide) && skill_meta) { - int passed_time = (room->frame_no - hide_frameno_) * FRAME_RATE_MS; - cs::MFBodyState* state = p->add_states(); - state->set_state_type(HS_Hide); - state->set_left_time(std::max(0, skill_meta->i->cd_time() * 1000 - passed_time)); - state->set_lasting_time(skill_meta->i->last_time() * 1000); - } - if (a8::HasBitFlag(status, HS_Accelerate) && skill_meta) { - int passed_time = (room->frame_no - accelerate_frameno_) * FRAME_RATE_MS; - cs::MFBodyState* state = p->add_states(); - state->set_state_type(HS_Accelerate); - state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); - state->set_lasting_time(skill_meta->i->last_time() * 1000); - } - if (a8::HasBitFlag(status, HS_DamageAdd) && skill_meta) { - int passed_time = (room->frame_no - damageadd_frameno_) * FRAME_RATE_MS; - cs::MFBodyState* state = p->add_states(); - state->set_state_type(HS_DamageAdd); - state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); - state->set_lasting_time(skill_meta->i->last_time() * 1000); - } - if (a8::HasBitFlag(status, HS_DefAdd) && skill_meta) { - int passed_time = (room->frame_no - defadd_frameno_) * FRAME_RATE_MS; - cs::MFBodyState* state = p->add_states(); - state->set_state_type(HS_DefAdd); - state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); - state->set_lasting_time(skill_meta->i->last_time() * 1000); - } - if (a8::HasBitFlag(status, HS_RecoverHP) && skill_meta) { - int passed_time = (room->frame_no - recover_hp_frameno_) * FRAME_RATE_MS; - cs::MFBodyState* state = p->add_states(); - state->set_state_type(HS_RecoverHP); - state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); - state->set_lasting_time(skill_meta->i->last_time() * 1000); - } - if (a8::HasBitFlag(status, HS_ReflectDamage) && skill_meta) { - int passed_time = (room->frame_no - reflect_damage_frameno_) * FRAME_RATE_MS; - cs::MFBodyState* state = p->add_states(); - state->set_state_type(HS_ReflectDamage); - state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); - state->set_lasting_time(skill_meta->i->last_time() * 1000); - } + FillBodyState(p->mutable_states()); } ColliderComponent* Human::GetBoxBound() @@ -993,17 +930,6 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) for (auto& num : inventory_) { player_data->add_inventory(num); } - if (pain_killer_timer) { - int passed_time = (room->frame_no - pain_killer_frameno) * FRAME_RATE_MS; - int left_time = std::max(0, pain_killer_lastingtime * 1000 - passed_time); - int anodyne_max_time = MetaMgr::Instance()->GetSysParamAsInt("anodyne_max_time"); - left_time = std::min(left_time, anodyne_max_time * 1000); - - cs::MFBodyState* p = player_data->add_states(); - p->set_state_type(1); - p->set_left_time(left_time); - p->set_lasting_time(anodyne_max_time * 1000); - } player_data->set_energy_shield(energy_shield); #if 1 { @@ -1018,6 +944,7 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) player_data->set_skill_cd_time(skill_meta->i->last_time() * 1000); } #endif + FillBodyState(player_data->mutable_states()); } void Human::FillMFGasData(cs::MFGasData* gas_data) @@ -1113,3 +1040,71 @@ void Human::RecoverHp(int inc_hp) health = std::max(health, GetMaxHP()); } } + +void Human::FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState>* states) +{ + if (pain_killer_timer) { + int passed_time = (room->frame_no - pain_killer_frameno) * FRAME_RATE_MS; + int left_time = std::max(0, pain_killer_lastingtime * 1000 - passed_time); + int anodyne_max_time = MetaMgr::Instance()->GetSysParamAsInt("anodyne_max_time"); + left_time = std::min(left_time, anodyne_max_time * 1000); + + cs::MFBodyState* state = states->Add(); + state->set_state_type(1); + state->set_left_time(left_time); + state->set_lasting_time(anodyne_max_time * 1000); + } + if (a8::HasBitFlag(status, HS_Fly)) { + cs::MFBodyState* state = states->Add(); + state->set_state_type(2); + } + if (a8::HasBitFlag(status, HS_Jump)) { + int passed_time = (room->frame_no - jump_frameno) * FRAME_RATE_MS; + cs::MFBodyState* state = states->Add(); + state->set_state_type(3); + state->set_left_time(std::max(0, MetaMgr::Instance()->jump_time * 1000 - passed_time)); + state->set_lasting_time(MetaMgr::Instance()->jump_time * 1000); + } + if (a8::HasBitFlag(status, HS_Hide) && skill_meta) { + int passed_time = (room->frame_no - hide_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = states->Add(); + state->set_state_type(HS_Hide); + state->set_left_time(std::max(0, skill_meta->i->cd_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_Accelerate) && skill_meta) { + int passed_time = (room->frame_no - accelerate_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = states->Add(); + state->set_state_type(HS_Accelerate); + state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_DamageAdd) && skill_meta) { + int passed_time = (room->frame_no - damageadd_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = states->Add(); + state->set_state_type(HS_DamageAdd); + state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_DefAdd) && skill_meta) { + int passed_time = (room->frame_no - defadd_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = states->Add(); + state->set_state_type(HS_DefAdd); + state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_RecoverHP) && skill_meta) { + int passed_time = (room->frame_no - recover_hp_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = states->Add(); + state->set_state_type(HS_RecoverHP); + state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } + if (a8::HasBitFlag(status, HS_ReflectDamage) && skill_meta) { + int passed_time = (room->frame_no - reflect_damage_frameno_) * FRAME_RATE_MS; + cs::MFBodyState* state = states->Add(); + state->set_state_type(HS_ReflectDamage); + state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time)); + state->set_lasting_time(skill_meta->i->last_time() * 1000); + } +} diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 8d02adc..8ecb8ff 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -149,6 +149,7 @@ class Human : public Entity void DecInventory(int slot_id, int num); int GetVolume(int slot_id); void RecoverHp(int inc_hp); + void FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState>* states); protected: long long last_shot_frameno_ = 0;