From 0efdb6e23c4f1deb3453cf24b2648f5c2fed277c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 12 Jul 2019 15:20:47 +0800 Subject: [PATCH] 1 --- server/gameserver/frameevent.cc | 30 ++++++++++++++------------ server/gameserver/frameevent.h | 3 +-- server/gameserver/framemaker.cc | 15 ++++--------- server/gameserver/human.cc | 7 ++---- server/gameserver/human.h | 3 +-- server/tools/protobuild/cs_proto.proto | 10 ++++----- 6 files changed, 29 insertions(+), 39 deletions(-) diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index c41141b..1c19e4e 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -170,16 +170,17 @@ void FrameEvent::AddRevive(Human* hum) void FrameEvent::AddBuff(Human* hum, Buff* buff) { { - cs::MFAddBuff add_buff_pb; - add_buff_pb.set_obj_id(hum->entity_uniid); - buff->FillMFBuff(add_buff_pb.mutable_buff()); - add_buffs_.push_back(std::make_tuple(hum, add_buff_pb)); + cs::MFBuffChg chged_buff_pb; + chged_buff_pb.set_obj_id(hum->entity_uniid); + chged_buff_pb.set_chg(0); + buff->FillMFBuff(chged_buff_pb.mutable_buff()); + chged_buffs_.push_back(std::make_tuple(hum, chged_buff_pb)); } { - int idx = add_buffs_.size() - 1; + int idx = chged_buffs_.size() - 1; for (auto& cell : hum->grid_list) { for (auto& hum : cell->human_list) { - hum->add_buffs_.push_back(idx); + hum->chged_buffs_.push_back(idx); } } } @@ -188,13 +189,17 @@ void FrameEvent::AddBuff(Human* hum, Buff* buff) void FrameEvent::RemoveBuff(Human* hum, int buff_id) { { - remove_buffs_.push_back(std::make_tuple(hum->entity_uniid, buff_id)); + cs::MFBuffChg chged_buff_pb; + chged_buff_pb.set_obj_id(hum->entity_uniid); + chged_buff_pb.set_chg(1); + chged_buff_pb.mutable_buff()->set_buff_id(buff_id); + chged_buffs_.push_back(std::make_tuple(hum, chged_buff_pb)); } { - int idx = remove_buffs_.size() - 1; + int idx = chged_buffs_.size() - 1; for (auto& cell : hum->grid_list) { for (auto& hum : cell->human_list) { - hum->remove_buffs_.push_back(idx); + hum->chged_buffs_.push_back(idx); } } } @@ -226,10 +231,7 @@ void FrameEvent::Clear() if (!dead_objs_.empty()) { dead_objs_.clear(); } - if (!add_buffs_.empty()) { - add_buffs_.clear(); - } - if (!remove_buffs_.empty()) { - remove_buffs_.clear(); + if (!chged_buffs_.empty()) { + chged_buffs_.clear(); } } diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index c995863..8ac19d4 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -31,8 +31,7 @@ private: std::vector<::cs::MFExplosion> explosions_; std::vector> smokes_; std::vector> emotes_; - std::vector> add_buffs_; - std::vector> remove_buffs_; + std::vector> chged_buffs_; std::vector revive_objs_; std::vector> dead_objs_; diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index bbd4cf4..2acda85 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -73,17 +73,10 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum) p->add_values(std::get<1>(room->frame_event.dead_objs_[idx])); } } - for (size_t idx : hum->add_buffs_) { - if (idx < room->frame_event.add_buffs_.size()) { - auto p = msg->add_add_buff_list(); - *p = std::get<1>(room->frame_event.add_buffs_[idx]); - } - } - for (size_t idx : hum->remove_buffs_) { - if (idx < room->frame_event.remove_buffs_.size()) { - auto p = msg->add_remove_buff_list(); - p->set_key(std::get<0>(room->frame_event.remove_buffs_[idx])); - p->set_value(std::get<1>(room->frame_event.remove_buffs_[idx])); + for (size_t idx : hum->chged_buffs_) { + if (idx < room->frame_event.chged_buffs_.size()) { + auto p = msg->add_chged_buff_list(); + *p = std::get<1>(room->frame_event.chged_buffs_[idx]); } } if (room->frame_event.airdrops_.size() > 0) { diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 1d69e80..eb4fc84 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1660,11 +1660,8 @@ void Human::ClearFrameData() if (!emotes_.empty()) { emotes_.clear(); } - if (!add_buffs_.empty()) { - add_buffs_.clear(); - } - if (!remove_buffs_.empty()) { - remove_buffs_.clear(); + if (!chged_buffs_.empty()) { + chged_buffs_.clear(); } if (!revive_objs_.empty()) { revive_objs_.clear(); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 398f159..aed8121 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -246,8 +246,7 @@ protected: std::vector bullets_; std::vector smokes_; std::vector explosions_; - std::vector add_buffs_; - std::vector remove_buffs_; + std::vector chged_buffs_; std::vector revive_objs_; std::vector dead_objs_; std::set observers_; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index a7fc325..47cb6d4 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -531,11 +531,12 @@ message MFBuff optional float lasting_time = 3; //持续时间(总时间毫秒) } -//add buff -message MFAddBuff +//buff变更 +message MFBuffChg { optional int32 obj_id = 1; //对象id - optional MFBuff buff = 2; //buff + optional int32 chg = 2; //0:新增/更新 1:删除 + optional MFBuff buff = 3; //buff } //end mfmsg @@ -695,8 +696,7 @@ message SMUpdate optional MFAirDrop airdrop = 17; //空投 repeated int32 revive_objids = 18; //复活的玩家 repeated MFTuple dead_objs = 19; //死亡的玩家values[0]:objid values[1]:多少毫秒后复活 - repeated MFAddBuff add_buff_list = 20; //新增的buff列表 - repeated MFPair remove_buff_list = 21; //移除的buff列表 key:objid value:buff_id + repeated MFBuffChg chged_buff_list = 20; //buff变更列表 } //滚动消息