diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index c873a40..e9eb312 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1468,6 +1468,12 @@ void Human::FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState state->set_left_time(std::max(0, skill_meta->last_time * 1000 - passed_time)); state->set_lasting_time(skill_meta->last_time * 1000); } + if (a8::HasBitFlag(status, HS_AtkAdd)) { + cs::MFBodyState* state = states->Add(); + state->set_state_type(HS_AtkAdd); + state->set_left_time(999 * 1000); + state->set_lasting_time(999 * 1000); + } } void Human::SummonHero() diff --git a/server/gameserver/human.h b/server/gameserver/human.h index a3aa4ff..c8edb2a 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -24,6 +24,7 @@ enum HumanStatus HS_RecoverHP = 8, HS_ReflectDamage = 9, HS_SummonHero = 10, + HS_AtkAdd = 11, HS_End }; @@ -80,6 +81,7 @@ class Human : public Entity long long dead_frameno = 0; long long join_frameno = 0; int status = 0; + float atk_add = 0.0f; Weapon default_weapon; std::vector weapons; diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 97a2e8a..a552531 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -53,6 +53,10 @@ Player* PlayerMgr::CreatePlayerByCMJoin(long ip_saddr, int socket, const cs::CMJ hum->energy_shield = msg.energy_shield(); hum->create_tick = a8::XGetTickCount(); hum->account_registertime = f8::ExtractRegisterTimeFromSessionId(msg.session_id()); + hum->atk_add = msg.atk_add(); + if (hum->atk_add > 0.9999f) { + a8::SetBitFlag(hum->status, HS_AtkAdd); + } for (auto& weapon : msg.weapons()) { if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) { hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv(); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 07626a8..4543f1e 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -588,6 +588,7 @@ message MFBodyState 8: 回血 9: 反伤 10: 分身 + 11:攻击加成 */ optional int32 state_type = 1; optional float left_time = 2; //剩余时间(单位毫秒) @@ -625,6 +626,7 @@ message CMJoin repeated int32 prepare_items = 19; //战斗前准备道具 战前准备护盾存到energy_shield optional string session_id = 20; //session_id optional string from_appid = 21; //from_appid + optional float atk_add = 22; //攻击加成 } //移动