From 8095e7c3d7513716e0f5f534d8de4ca43bbca2d9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 17 Jun 2023 11:16:16 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/callfunc.cc | 32 ++++++++----------- server/gameserver/buff/callfunc.h | 6 ++-- server/gameserver/mt/Buff.cc | 50 ++++++++++++++++++++++++++++++ server/gameserver/mt/Buff.h | 12 +++++++ server/gameserver/mtb/Buff.h | 8 ++++- server/gameserver/mtb/mtb.all.cc | 2 ++ server/tools/protobuild/mt.proto | 2 ++ 7 files changed, 88 insertions(+), 24 deletions(-) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 1a6f07ed..3b7593a1 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -167,21 +167,10 @@ void CallFuncBuff::Activate() owner->room->frame_event.AddHpChg(owner->GetWeakPtrRef()); } break; - case BuffCallFunc_e::kSummonCarSpecPointAnyOper: + case BuffCallFunc_e::kSummonCarSpecPoint: { - SummonCarSpecPoint(0); + SummonCarSpecPoint(); } - break; - case BuffCallFunc_e::kSummonCarSpecPointTeamOper: - { - SummonCarSpecPoint(1); - } - break; - case BuffCallFunc_e::kSummonCarSpecPointOnlyOper: - { - SummonCarSpecPoint(2); - } - break; default: { } @@ -886,20 +875,25 @@ void CallFuncBuff::ProcAddMaxHp() } } -void CallFuncBuff::SummonCarSpecPoint(int oper_type) +void CallFuncBuff::SummonCarSpecPoint() { float delay_time = meta->GetBuffParam2(this); - int oper = meta->GetBuffParam3(this); - float x = meta->GetBuffParam4(this); - float y = meta->GetBuffParam5(this); - float z = meta->GetBuffParam6(this); + int oper_type = meta->GetBuffParam3(this); + int oper = meta->GetBuffParam4(this); + int car_id = meta->GetBuffParam5(this); + float x = meta->GetBuffParam6(this); + float y = meta->GetBuffParam7(this); + float z = meta->GetBuffParam8(this); owner->room->xtimer.SetTimeoutWpEx ( delay_time / FRAME_RATE_MS, - [room = owner->room, delay_time, oper_type, oper, x, y, z] + [room = owner->room, delay_time, oper_type, car_id, oper, x, y, z] (int event, const a8::Args* args) mutable { if (a8::TIMER_DELETE_EVENT == event) { + if (!room->IsGameOver()) { + + } } }, &owner->room->xtimer_attacher_); diff --git a/server/gameserver/buff/callfunc.h b/server/gameserver/buff/callfunc.h index 1c258f6b..10f144d7 100644 --- a/server/gameserver/buff/callfunc.h +++ b/server/gameserver/buff/callfunc.h @@ -27,9 +27,7 @@ A8_DECLARE_CLASS_ENUM(BuffCallFunc_e, int, kDecSkillCd = 27, kRefreshHp = 28, kAddMaxHp = 29, - kSummonCarSpecPointAnyOper = 30, - kSummonCarSpecPointTeamOper = 31, - kSummonCarSpecPointOnlyOper = 32, + kSummonCarSpecPoint = 30, ); @@ -59,7 +57,7 @@ class CallFuncBuff : public Buff void SummonObstacleSpecDistance(); void ClearSummonObstacle(); void DecSkillCd(); - void SummonCarSpecPoint(int oper_type); + void SummonCarSpecPoint(); float hold_param2_ = 0.0; Weapon* hold_weapon_ = nullptr; diff --git a/server/gameserver/mt/Buff.cc b/server/gameserver/mt/Buff.cc index a87c7534..d5e4546f 100644 --- a/server/gameserver/mt/Buff.cc +++ b/server/gameserver/mt/Buff.cc @@ -20,12 +20,16 @@ namespace mt _buff_param4 = a8::XValue(buff_param4()).GetDouble(); _buff_param5 = a8::XValue(buff_param5()).GetDouble(); _buff_param6 = a8::XValue(buff_param6()).GetDouble(); + _buff_param7 = a8::XValue(buff_param7()).GetDouble(); + _buff_param8 = a8::XValue(buff_param8()).GetDouble(); _int_buff_param1 = a8::XValue(buff_param1()); _int_buff_param2 = a8::XValue(buff_param2()); _int_buff_param3 = a8::XValue(buff_param3()); _int_buff_param4 = a8::XValue(buff_param4()); _int_buff_param5 = a8::XValue(buff_param5()); _int_buff_param6 = a8::XValue(buff_param6()); + _int_buff_param7 = a8::XValue(buff_param7()); + _int_buff_param8 = a8::XValue(buff_param8()); _res_scale = a8::XValue(res_scale()).GetDouble(); { std::vector strings; @@ -101,6 +105,22 @@ namespace mt _buff_param6_int_set.insert(a8::XValue(str).GetInt()); } } + { + std::vector strings; + a8::Split(buff_param7(), strings, '|'); + for (auto& str : strings) { + _buff_param7_int_list.push_back(a8::XValue(str).GetInt()); + _buff_param7_int_set.insert(a8::XValue(str).GetInt()); + } + } + { + std::vector strings; + a8::Split(buff_param8(), strings, '|'); + for (auto& str : strings) { + _buff_param8_int_list.push_back(a8::XValue(str).GetInt()); + _buff_param8_int_set.insert(a8::XValue(str).GetInt()); + } + } { std::vector strings; a8::Split(only_spec_race(), strings, '|'); @@ -156,6 +176,12 @@ namespace mt if (a8::lisp::Expr::MaybeExpr(buff_param6())) { _buff_param6_expr = LispEnv::Instance()->CompileSkillNumberExpr(buff_param6()); } + if (a8::lisp::Expr::MaybeExpr(buff_param7())) { + _buff_param7_expr = LispEnv::Instance()->CompileSkillNumberExpr(buff_param7()); + } + if (a8::lisp::Expr::MaybeExpr(buff_param8())) { + _buff_param8_expr = LispEnv::Instance()->CompileSkillNumberExpr(buff_param8()); + } if (a8::lisp::Expr::MaybeExpr(res_scale())) { _res_scale_expr = LispEnv::Instance()->CompileSkillNumberExpr(res_scale()); } @@ -491,6 +517,30 @@ namespace mt return _buff_param6; } + float Buff::GetBuffParam7(::Buff* buff) const + { + if (_buff_param7_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _buff_param7_expr, + buff + ); + } + return _buff_param7; + } + + float Buff::GetBuffParam8(::Buff* buff) const + { + if (_buff_param8_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _buff_param8_expr, + buff + ); + } + return _buff_param8; + } + float Buff::GetResScale(::Buff* buff) const { if (_res_scale_expr) { diff --git a/server/gameserver/mt/Buff.h b/server/gameserver/mt/Buff.h index 3fe72413..f02037fd 100644 --- a/server/gameserver/mt/Buff.h +++ b/server/gameserver/mt/Buff.h @@ -34,24 +34,32 @@ namespace mt float _buff_param4 = 0.0f; float _buff_param5 = 0.0f; float _buff_param6 = 0.0f; + float _buff_param7 = 0.0f; + float _buff_param8 = 0.0f; int _int_buff_param1 = 0; int _int_buff_param2 = 0; int _int_buff_param3 = 0; int _int_buff_param4 = 0; int _int_buff_param5 = 0; int _int_buff_param6 = 0; + int _int_buff_param7 = 0; + int _int_buff_param8 = 0; std::vector _buff_param1_int_list; std::vector _buff_param2_int_list; std::vector _buff_param3_int_list; std::vector _buff_param4_int_list; std::vector _buff_param5_int_list; std::vector _buff_param6_int_list; + std::vector _buff_param7_int_list; + std::vector _buff_param8_int_list; std::set _buff_param1_int_set; std::set _buff_param2_int_set; std::set _buff_param3_int_set; std::set _buff_param4_int_set; std::set _buff_param5_int_set; std::set _buff_param6_int_set; + std::set _buff_param7_int_set; + std::set _buff_param8_int_set; std::vector>>> _batch_add_list; std::vector>> _post_remove_action; std::set _immune_buffeffect; @@ -72,6 +80,8 @@ namespace mt float GetBuffParam4(::Buff* buff) const; float GetBuffParam5(::Buff* buff) const; float GetBuffParam6(::Buff* buff) const; + float GetBuffParam7(::Buff* buff) const; + float GetBuffParam8(::Buff* buff) const; float GetBuffInterval(::Buff* buff) const; float GetResScale(::Buff* buff) const; bool HasBuffInterval() const; @@ -86,6 +96,8 @@ namespace mt std::shared_ptr _buff_param4_expr; std::shared_ptr _buff_param5_expr; std::shared_ptr _buff_param6_expr; + std::shared_ptr _buff_param7_expr; + std::shared_ptr _buff_param8_expr; std::shared_ptr _res_scale_expr; std::shared_ptr _buff_interval_expr; diff --git a/server/gameserver/mtb/Buff.h b/server/gameserver/mtb/Buff.h index fa79e0d8..4b5bd1ea 100644 --- a/server/gameserver/mtb/Buff.h +++ b/server/gameserver/mtb/Buff.h @@ -21,6 +21,8 @@ namespace mtb const std::string buff_param4() const { return buff_param4_; }; const std::string buff_param5() const { return buff_param5_; }; const std::string buff_param6() const { return buff_param6_; }; + const std::string buff_param7() const { return buff_param7_; }; + const std::string buff_param8() const { return buff_param8_; }; const std::string duration_time() const { return duration_time_; }; float buff_valueup() const { return buff_valueup_; }; const std::string immune_buffeffect_list() const { return immune_buffeffect_list_; }; @@ -83,6 +85,8 @@ namespace mtb bool has_effect_list() const { return __flags__.test(33);}; bool has_res_scale() const { return __flags__.test(34);}; bool has_tenacity() const { return __flags__.test(35);}; + bool has_buff_param7() const { return __flags__.test(36);}; + bool has_buff_param8() const { return __flags__.test(37);}; protected: @@ -97,6 +101,8 @@ namespace mtb std::string buff_param4_; std::string buff_param5_; std::string buff_param6_; + std::string buff_param7_; + std::string buff_param8_; std::string duration_time_; float buff_valueup_ = 0.0f; std::string immune_buffeffect_list_; @@ -124,7 +130,7 @@ namespace mtb int tenacity_ = 0; public: - std::bitset<36> __flags__; + std::bitset<38> __flags__; }; }; diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index b63f6847..89586ab6 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -490,6 +490,8 @@ namespace mtb meta_class->SetSimpleField(33, "effect_list", a8::reflect::ET_STRING, my_offsetof2(Buff, effect_list_)); meta_class->SetSimpleField(34, "res_scale", a8::reflect::ET_STRING, my_offsetof2(Buff, res_scale_)); meta_class->SetSimpleField(35, "tenacity", a8::reflect::ET_INT32, my_offsetof2(Buff, tenacity_)); + meta_class->SetSimpleField(36, "buff_param6", a8::reflect::ET_STRING, my_offsetof2(Buff, buff_param7_)); + meta_class->SetSimpleField(37, "buff_param6", a8::reflect::ET_STRING, my_offsetof2(Buff, buff_param8_)); } return meta_class; } diff --git a/server/tools/protobuild/mt.proto b/server/tools/protobuild/mt.proto index 26b17350..e79bbec8 100755 --- a/server/tools/protobuild/mt.proto +++ b/server/tools/protobuild/mt.proto @@ -368,6 +368,8 @@ message Buff required string buff_param4 = 9; optional string buff_param5 = 19; optional string buff_param6 = 37; + optional string buff_param7 = 38; + optional string buff_param8 = 39; required string duration_time = 10; optional float buff_valueup = 11; required string immune_buffeffect_list = 12;