From 72540b8569f904e9b594e9f0b3e79b26ca8d50fe Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 13 Apr 2023 17:00:59 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/bufffactory.cc | 3 +++ server/gameserver/buff/direct_set_attr.cc | 26 +++++++++++++++++++++++ server/gameserver/buff/direct_set_attr.h | 14 ++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 server/gameserver/buff/direct_set_attr.cc create mode 100644 server/gameserver/buff/direct_set_attr.h diff --git a/server/gameserver/buff/bufffactory.cc b/server/gameserver/buff/bufffactory.cc index 8cd14638..9558fd59 100644 --- a/server/gameserver/buff/bufffactory.cc +++ b/server/gameserver/buff/bufffactory.cc @@ -43,6 +43,7 @@ #include "buff/modify_attr.h" #include "buff/modify_base_attr.h" #include "buff/modify_grow_attr.h" +#include "buff/direct_set_attr.h" #include "buff/vertigo.h" #include "buff/cond_add.h" #include "buff/distance_dmg_addition.h" @@ -56,6 +57,8 @@ std::shared_ptr BuffFactory::MakeBuff(const mt::Buff* buff_meta) return std::make_shared(); case kBET_ModifyGrowAttr: return std::make_shared(); + case kBET_DirectSetAttr: + return std::make_shared(); case kBET_SummonLoot: return std::make_shared(); case kBET_DistanceDmgAddition: diff --git a/server/gameserver/buff/direct_set_attr.cc b/server/gameserver/buff/direct_set_attr.cc new file mode 100644 index 00000000..80075279 --- /dev/null +++ b/server/gameserver/buff/direct_set_attr.cc @@ -0,0 +1,26 @@ +#include "precompile.h" + +#include "buff/direct_set_attr.h" + +#include "creature.h" +#include "human.h" +#include "car.h" +#include "ability.h" + +#include "mt/Buff.h" + +void DirectSetAttrBuff::Activate() +{ + int attr_id = meta->_int_buff_param1; + float value = meta->GetBuffParam2(this); + if (IsValidHumanAttr(attr_id)) { + handle_ = owner->GetAbility()->AddAttrDirect(attr_id, value); + } +} + +void DirectSetAttrBuff::Deactivate() +{ + if (!handle_.expired()) { + owner->GetAbility()->RemoveAttrDirect(handle_); + } +} diff --git a/server/gameserver/buff/direct_set_attr.h b/server/gameserver/buff/direct_set_attr.h new file mode 100644 index 00000000..6cc514c8 --- /dev/null +++ b/server/gameserver/buff/direct_set_attr.h @@ -0,0 +1,14 @@ +#pragma once + +#include "buff.h" + +class DirectSetAttrBuff : public Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + + private: + AttrDirectHandle handle_; +};