diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index ffd0e231..771c78a3 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2686,10 +2686,26 @@ void Creature::CheckBulletHitHoldShield(IBullet* bullet, bool& eat) void Creature::AddEnergyShield(int value) { - + energy_shield = value; + max_energy_shield = value; + room->frame_event.AddPropChg + ( + GetWeakPtrRef(), + kPropEnergyShield, + energy_shield, + max_energy_shield, + true); } void Creature::ClearEnergyShield() { - + energy_shield = 0; + max_energy_shield = 0; + room->frame_event.AddPropChg + ( + GetWeakPtrRef(), + kPropEnergyShield, + energy_shield, + max_energy_shield, + true); } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 72f87c8e..c7a4cedc 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -88,6 +88,8 @@ class Creature : public MoveableEntity int power_idx = -1; std::function on_add_buff; int over_delay_time = 0; + int energy_shield = 0; + int max_energy_shield = 0; Weapon second_weapon; Position context_pos; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 38696825..80d90bfb 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -694,7 +694,13 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, i float old_hp = GetHP(); if (energy_shield > 0.001f) { energy_shield = std::max(0.0f, energy_shield - dec_hp); - SyncAroundPlayers(__FILE__, __LINE__, __func__); + room->frame_event.AddPropChg + ( + GetWeakPtrRef(), + kPropEnergyShield, + energy_shield, + max_energy_shield, + true); } else { float old_health = GetHP(); float new_health = std::max(0.0f, GetHP() - dec_hp); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 2961e2a7..bb06e188 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -221,8 +221,6 @@ class Human : public Creature int backpack = 0; int helmet = 0; int chest = 0; - int energy_shield = 0; - int max_energy_shield = 0; int vip = 0; long long join_frameno = 0; long long enable_frameno = 0; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index bd17df54..74172443 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -181,8 +181,8 @@ message MFVec3 valule: 目标对象 value3: 回传值,当目标对象是自己的时候才需要传(value3==0 || value3==null不用传) property_type: 40 能量护盾 - valule: 当前护盾值 - value2: max护盾值 + property_subtype: 当前护盾值 + value: max护盾值 */ message MFPropertyChg {