From 9166c948825ee6b81bec283b6a60941a1269cba4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 23 Mar 2021 14:19:35 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 4 ++-- server/gameserver/creature.cc | 9 +++++++++ server/gameserver/creature.h | 1 + server/gameserver/frameevent.cc | 11 ++++++++--- server/gameserver/frameevent.h | 4 ++-- server/gameserver/framemaker.cc | 16 ++++++---------- server/gameserver/human.cc | 9 ++++++--- server/gameserver/skill.cc | 7 +++++++ server/gameserver/skill.h | 6 ++++++ 9 files changed, 47 insertions(+), 20 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 8031856..0d67084 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -277,7 +277,7 @@ enum PropertyType_e { kPropHp = 1, kPropMaxHp = 2, - kPropSkillLeftTime = 4, + kPropSkillLeftTime_ = 4, kPropSkillCd = 5, kPropTankBulletNum = 6, kPropTankOil = 7, @@ -287,7 +287,7 @@ enum PropertyType_e kPropCar = 11, kPropZombieId = 23, - kPropSkillLefTime = 24, + kPropSkillLeftTime = 24, }; enum MapObjectType_e diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 5509fd6..5579258 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -281,6 +281,15 @@ void Creature::FillBuffList(::google::protobuf::RepeatedPtrField<::cs::MFBuff>* } } +void Creature::FillSkillList(::google::protobuf::RepeatedPtrField< cs::MFSkill >* + pb_skill_list) +{ + for (auto& pair : skill_hash_) { + auto skill = pb_skill_list->Add(); + pair.second->FillMFSkill(skill); + } +} + void Creature::AddPassiveSkill(int skill_id) { MetaData::Skill* skill_meta = MetaMgr::Instance()->GetSkill(skill_id); diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 946f05a..e53264a 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -48,6 +48,7 @@ class Creature : public MoveableEntity float GetBuffAttrAbs(int attr_id); float GetBuffAttrRate(int attr_id); void FillBuffList(::google::protobuf::RepeatedPtrField<::cs::MFBuff>* pb_buff_list); + void FillSkillList(::google::protobuf::RepeatedPtrField< cs::MFSkill >* pb_skill_list); void TriggerBuff(Skill* skill, std::set& target_list, BuffTriggerType_e trigger_type); Skill* GetSkill(int skill_id); void AddSkill(int skill_id); diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index d566168..cba544e 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -238,11 +238,16 @@ void FrameEvent::RemoveBuff(Human* sender, int buff_id) } } -void FrameEvent::AddSkillCdChg(Human* hum) +void FrameEvent::AddSkillCdChg(Human* sender, int skill_id, int left_time) { - chged_skillcds_.push_back(hum); + chged_skillcds_.push_back(std::make_tuple(sender, skill_id, left_time)); int idx = chged_skillcds_.size() - 1; - hum->chged_skillcds_.push_back(idx); + sender->TouchAllLayerHumanList + ( + [idx] (Human* hum, bool& stop) + { + hum->chged_skillcds_.push_back(idx); + }); } void FrameEvent::AddItemChg(Human* hum, int item_id, int item_num) diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index 3825789..2d61f0e 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -27,7 +27,7 @@ public: void AddWeaponAmmoChg(Human* hum); void AddBuff(Human* hum, Buff* buff); void RemoveBuff(Human* hum, int buff_id); - void AddSkillCdChg(Human* hum); + void AddSkillCdChg(Human* hum, int skill_id, int left_time); void AddItemChg(Human* hum, int item_id, int item_num); void AddZombieIdChg(Human* hum); void AddDead(Human* sender, int revive_time); @@ -47,7 +47,7 @@ private: std::vector chged_bullet_nums_; std::vector> chged_weapon_ammo_; std::vector chged_hps_; - std::vector chged_skillcds_; + std::vector> chged_skillcds_; std::vector chged_zombieids_; std::vector chged_cars_; std::vector> dead_alive_objs_; diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index 2d1d09e..c11cda5 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -149,25 +149,21 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum) *p = std::get<1>(room->frame_event.chged_buffs_[idx]); } } - #if 0 for (size_t idx : hum->chged_skillcds_) { if (idx < room->frame_event.chged_skillcds_.size()) { - Human* target = room->frame_event.chged_skillcds_[idx]; + auto tuple = room->frame_event.chged_skillcds_[idx]; + Human* target = std::get<0>(tuple); + int skill_id = std::get<1>(tuple); + int left_time = std::get<2>(tuple); { auto p = msg->add_chged_property_list(); p->set_obj_id(target->GetEntityUniId()); p->set_property_type(kPropSkillLeftTime); - p->set_value(target->GetSkillLeftTime()); - } - { - auto p = msg->add_chged_property_list(); - p->set_obj_id(target->GetEntityUniId()); - p->set_property_type(kPropSkillCd); - p->set_value(target->GetSkillCd()); + p->set_property_subtype(skill_id); + p->set_value(left_time); } } } - #endif for (size_t idx : hum->chged_hps_) { if (idx < room->frame_event.chged_hps_.size()) { Human* target = room->frame_event.chged_hps_[idx]; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index ca2a9cb..a5fa476 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -217,6 +217,7 @@ void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data } FillBodyState(p->mutable_states()); FillBuffList(p->mutable_buff_list()); + FillSkillList(p->mutable_skill_list()); if (dead) { p->set_killer_name(stats.killer_name); p->set_killer_id(stats.killer_id); @@ -1486,6 +1487,7 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) #endif FillBodyState(player_data->mutable_states()); FillItemList(player_data->mutable_items()); + FillSkillList(player_data->mutable_skill_list()); } void Human::FillMFGasData(cs::MFGasData* gas_data) @@ -3512,9 +3514,10 @@ void Human::DoSkillPostProc(bool used, int skill_id, int target_id, const a8::Ve { if (used) { ++stats.skill_times; -#if 0 - room->frame_event.AddSkillCdChg(this); -#endif + Skill* skill = GetSkill(skill_id); + if (skill) { + room->frame_event.AddSkillCdChg(this, skill_id, skill->GetLeftTime()); + } OnAttack(); } } diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index f4f2f91..2bf5fbc 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -23,6 +23,13 @@ int Skill::GetLeftTime() return skill_left_time; } +void Skill::FillMFSkill(cs::MFSkill* skill_pb) +{ + skill_pb->set_skill_id(meta->i->skill_id()); + skill_pb->set_left_time(GetLeftTime()); + skill_pb->set_cd_time(GetCd()); +} + void Skill::ClearPassiveSkillBuff() { for (int buff_id : meta->buff_list) { diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index a249888..3d5ab87 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -5,6 +5,11 @@ namespace MetaData struct Skill; } +namespace cs +{ + class MFSkill; +} + class Creature; class Skill { @@ -17,6 +22,7 @@ class Skill int GetCd(); int GetLeftTime(); int GetPassedTime(); + void FillMFSkill(cs::MFSkill* skill_pb); void ClearPassiveSkillBuff(); void AddPassiveSkillBuff();