diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 2e53683..9736694 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -51,4 +51,5 @@ void Hero::FillMFObjectFull(cs::MFObjectFull* full_data) skin.ToPB(p->mutable_skin()); weapon.ToPB(p->mutable_weapon()); + p->set_energy_shield(energy_shield); } diff --git a/server/gameserver/hero.h b/server/gameserver/hero.h index 4ed1855..a342d75 100644 --- a/server/gameserver/hero.h +++ b/server/gameserver/hero.h @@ -17,6 +17,7 @@ class Hero : public Entity Tank skin; Weapon weapon; + int energy_shield = 0; Hero(); virtual ~Hero() override; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 260aaf6..9054b85 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -120,6 +120,8 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) #if 0 p->set_downed(downed); #endif + p->set_energy_shield(energy_shield); + p->set_max_energy_shield(max_energy_shield); p->set_disconnected(disconnected); tank_.ToPB(p->mutable_skin()); if (tankskin.skin_id != 0) { @@ -483,7 +485,9 @@ 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) { - { + if (energy_shield > 0.001f) { + energy_shield = std::max(0.0f, energy_shield - dec_hp); + } else { float old_health = GetHP(); ability.hp = std::max(0.0f, GetHP() - dec_hp); if (GetHP() - old_health > 0.001f) { @@ -738,12 +742,8 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) for (auto& num : inventory_) { player_data->add_inventory(num); } - #if 0 player_data->set_energy_shield(energy_shield); - { - player_data->set_max_energy_shield(max_energy_shield); - } - #endif + player_data->set_max_energy_shield(max_energy_shield); if (skill_meta_) { player_data->set_skill_left_time(GetSkillLeftTime()); player_data->set_skill_cd_time(GetSkillCd()); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index cb19fab..abdfca4 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -69,6 +69,9 @@ class Human : public Entity int curr_scope_idx = 0; + int energy_shield = 0; + int max_energy_shield = 0; + bool need_sync_team_data = false; bool need_sync_teammate_data = false; bool need_sync_active_player = false; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 761d4fa..bd7686d 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -47,6 +47,7 @@ void Player::Initialize() } } driver_meta_ = MetaMgr::Instance()->GetDriver(driver.driver_id); + max_energy_shield = energy_shield; RecalcBaseAttr(); } diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index d46ef81..37c2f62 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -50,6 +50,7 @@ Player* PlayerMgr::CreatePlayerByCMJoin(long ip_saddr, int socket, const cs::CMJ hum->auto_fill = msg.auto_fill(); hum->use_touch = msg.use_touch(); hum->avatar_url = msg.avatar_url(); + hum->energy_shield = msg.energy_shield(); hum->create_tick = a8::XGetTickCount(); hum->account_registertime = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); for (auto& weapon : msg.weapons()) {