From 1efbf7783e77b7fd28f109d65bb67b68cd94ecfd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 16 Mar 2023 10:00:27 +0800 Subject: [PATCH] 1 --- server/gameserver/gungrasp.cc | 4 +- server/gameserver/mt/Grasp.cc | 116 ------------------------------- server/gameserver/mt/Grasp.h | 9 --- server/gameserver/mtb/Grasp.h | 8 ++- server/gameserver/mtb/mtb.all.cc | 4 +- server/gameserver/trigger.cc | 1 + server/gameserver/trigger.h | 1 + server/tools/protobuild/mt.proto | 2 + 8 files changed, 17 insertions(+), 128 deletions(-) diff --git a/server/gameserver/gungrasp.cc b/server/gameserver/gungrasp.cc index 7fe3d52a..8a214f6d 100644 --- a/server/gameserver/gungrasp.cc +++ b/server/gameserver/gungrasp.cc @@ -22,11 +22,13 @@ GunGrasp::~GunGrasp() void GunGrasp::Init() { + #if 0 owner_->GetTrigger()->AddListener ( - kDieEvent, + kTakeonWeaponEvent [this] (const a8::Args& args) mutable { } ); + #endif } diff --git a/server/gameserver/mt/Grasp.cc b/server/gameserver/mt/Grasp.cc index 43972eb7..2d46db44 100644 --- a/server/gameserver/mt/Grasp.cc +++ b/server/gameserver/mt/Grasp.cc @@ -3,30 +3,12 @@ #include "mt/Grasp.h" IMPL_TABLE(mt::Grasp) -std::map> mt::Grasp::hero_weapon_hash_; - -static std::set hero_lv_sets({1, 5, 10, 15}); namespace mt { void Grasp::Init1() { - buff1_meta = mt::GraspBuff::GetById(graspbuff_id1()); - if (graspbuff_id1() && !buff1_meta) { - abort(); - } - floor2_buff_meta = mt::GraspBuff::GetById(graspbuff_id1_floor2()); - if (graspbuff_id1_floor2() && !floor2_buff_meta) { - abort(); - } - buff2_meta = mt::GraspBuff::GetById(graspbuff_id2()); - if (graspbuff_id2() && !buff2_meta) { - abort(); - } - if (hero_lv_sets.find(hero_lv()) == hero_lv_sets.end()) { - abort(); - } } void Grasp::Init2() @@ -36,104 +18,6 @@ namespace mt void Grasp::StaticPreInit() { - Traverse - ( - [] (const mt::Grasp* meta, bool& stop) - { - auto itr = hero_weapon_hash_.find(a8::MakeInt64(meta->hero_id(), meta->weapon_id())); - if (itr != hero_weapon_hash_.end()) { - auto itr2 = itr->second.find(meta->hero_lv()); - if (itr2 == itr->second.end()) { - itr->second[meta->hero_lv()] = GraspBuffs(); - } - itr2 = itr->second.find(meta->hero_lv()); - if (itr2 == itr->second.end()) { - abort(); - } - if (meta->buff1_meta && meta->floor2_buff_meta) { - itr2->second.push_back(std::make_tuple(meta->buff1_meta, meta->floor2_buff_meta)); - } else { - if (meta->buff1_meta) { - itr2->second.push_back(std::make_tuple(meta->buff1_meta, nullptr)); - } - } - if (meta->buff2_meta) { - itr2->second.push_back(std::make_tuple(meta->buff2_meta, nullptr)); - } - } - }); - auto merge_func = - [] (mt::GraspBuffs* a, mt::GraspBuffs* b) - { - for (auto& tuple1 : *b) { - bool found = false; - for (auto& tuple2 : *a) { - if (std::get<0>(tuple1) && std::get<1>(tuple1)) { - if (std::get<0>(tuple1) == std::get<0>(tuple2) && - std::get<1>(tuple1) == std::get<1>(tuple2)) { - found = true; - break; - } - } else if (std::get<0>(tuple1) && - ( - std::get<0>(tuple1) == std::get<0>(tuple2) || - std::get<0>(tuple1) == std::get<1>(tuple2) - ) - ) { - found = true; - break; - } else if (std::get<1>(tuple1) && - (std::get<1>(tuple1) == std::get<0>(tuple2) || - std::get<1>(tuple1) == std::get<1>(tuple2)) - ) { - found = true; - break; - } - }//end for tuple2 - if (!found) { - a->push_back(tuple1); - } - } - }; - for (auto& pair : hero_weapon_hash_) { - if (!pair.second.empty()) { - std::vector> tuples; - { - for (auto& pair2 : pair.second) { - tuples.push_back(std::make_tuple(pair2.first, &pair2.second)); - } - } - std::sort - (tuples.begin(), tuples.end(), - [] (std::tuple& a, std::tuple& b) -> bool - { - if (std::get<0>(a) == std::get<0>(b)) { - abort(); - } else { - return std::get<0>(a) > std::get<0>(b); - } - }); - for (size_t i = tuples.size() - 1; i >= 0; ++i) { - int lv = std::get<0>(tuples[i]); - auto buffs = std::get<1>(tuples[i]); - for (size_t ii = 0; ii < tuples.size(); ++ii) { - if (std::get<0>(tuples[ii]) < lv) { - merge_func(buffs, std::get<1>(tuples[ii])); - } - } - } - } - } - } - - GraspBuffs* Grasp::GetGrasp(int hero_id, int hero_lv, int weapon_id) - { - auto itr = hero_weapon_hash_.find(a8::MakeInt64(hero_id, weapon_id)); - if (itr != hero_weapon_hash_.end()) { - auto itr2 = itr->second.find(hero_lv); - return itr2 != itr->second.end() ? &itr2->second : nullptr; - } - return nullptr; } } diff --git a/server/gameserver/mt/Grasp.h b/server/gameserver/mt/Grasp.h index 75d77930..286e1648 100644 --- a/server/gameserver/mt/Grasp.h +++ b/server/gameserver/mt/Grasp.h @@ -6,7 +6,6 @@ namespace mt { - typedef std::vector> GraspBuffs; DECLARE_ID_TABLE(Grasp, mtb::Grasp, "grasp@grasp.json", @@ -17,14 +16,6 @@ namespace mt void Init2(); void StaticPreInit(); - const mt::GraspBuff* buff1_meta = nullptr; - const mt::GraspBuff* floor2_buff_meta = nullptr; - const mt::GraspBuff* buff2_meta = nullptr; - - static GraspBuffs* GetGrasp(int hero_id, int hero_lv, int weapon_id); - - private: - static std::map> hero_weapon_hash_; }; } diff --git a/server/gameserver/mtb/Grasp.h b/server/gameserver/mtb/Grasp.h index 87a7c9dd..1ffb622f 100644 --- a/server/gameserver/mtb/Grasp.h +++ b/server/gameserver/mtb/Grasp.h @@ -17,6 +17,8 @@ namespace mtb int graspbuff_id1_floor2() const { return graspbuff_id1_floor2_; }; int graspbuff_id2() const { return graspbuff_id2_; }; int weapon_id() const { return weapon_id_; }; + const std::string add_buff_list() const { return add_buff_list_; }; + const std::string remove_buff_list() const { return remove_buff_list_; }; bool has_grasp_id() const { return __flags__.test(0);}; bool has_hero_id() const { return __flags__.test(1);}; @@ -25,6 +27,8 @@ namespace mtb bool has_graspbuff_id1_floor2() const { return __flags__.test(4);}; bool has_graspbuff_id2() const { return __flags__.test(5);}; bool has_weapon_id() const { return __flags__.test(6);}; + bool has_add_buff_list() const { return __flags__.test(7);}; + bool has_remove_buff_list() const { return __flags__.test(8);}; protected: @@ -35,9 +39,11 @@ namespace mtb int graspbuff_id1_floor2_ = 0; int graspbuff_id2_ = 0; int weapon_id_ = 0; + std::string add_buff_list_; + std::string remove_buff_list_; public: - std::bitset<7> __flags__; + std::bitset<9> __flags__; }; }; diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index 753d31f2..19cd7abb 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -748,7 +748,7 @@ namespace mtb { a8::reflect::Class* meta_class = nullptr; if (!meta_class) { - meta_class = new a8::reflect::Class("Grasp", 7, 0); + meta_class = new a8::reflect::Class("Grasp", 9, 0); meta_class->SetSimpleField(0, "grasp_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, grasp_id_)); meta_class->SetSimpleField(1, "hero_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, hero_id_)); meta_class->SetSimpleField(2, "hero_lv", a8::reflect::ET_INT32, my_offsetof2(Grasp, hero_lv_)); @@ -756,6 +756,8 @@ namespace mtb meta_class->SetSimpleField(4, "graspbuff_id1_floor2", a8::reflect::ET_INT32, my_offsetof2(Grasp, graspbuff_id1_floor2_)); meta_class->SetSimpleField(5, "graspbuff_id2", a8::reflect::ET_INT32, my_offsetof2(Grasp, graspbuff_id2_)); meta_class->SetSimpleField(6, "weapon_id", a8::reflect::ET_INT32, my_offsetof2(Grasp, weapon_id_)); + meta_class->SetSimpleField(7, "add_buff_list", a8::reflect::ET_STRING, my_offsetof2(Grasp, add_buff_list_)); + meta_class->SetSimpleField(8, "remove_buff_list", a8::reflect::ET_STRING, my_offsetof2(Grasp, remove_buff_list_)); } return meta_class; } diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index e42452b1..ebaea2eb 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -97,6 +97,7 @@ void Trigger::TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon) } } } + DispatchEvent(kTakeonWeaponEvent, {old_weapon, new_weapon}); } void Trigger::Shot(const mt::Equip* weapon_meta) diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index a9eed9ee..e2d03c9c 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -41,6 +41,7 @@ enum EventId_e kAttacked, kStartJump, kEndJump, + kTakeonWeaponEvent }; class Weapon; diff --git a/server/tools/protobuild/mt.proto b/server/tools/protobuild/mt.proto index 7d66c27b..a3cb8641 100755 --- a/server/tools/protobuild/mt.proto +++ b/server/tools/protobuild/mt.proto @@ -564,6 +564,8 @@ message Grasp optional int32 graspbuff_id1_floor2 = 5; optional int32 graspbuff_id2 = 6; optional int32 weapon_id = 7; + optional string add_buff_list = 8; + optional string remove_buff_list = 9; } message GraspBuff