buff post action添加addbuff处理

This commit is contained in:
aozhiwei 2021-06-17 18:48:52 +08:00
parent 458c8c0d70
commit e8d711dcd3
7 changed files with 40 additions and 5 deletions

View File

@ -450,3 +450,17 @@ void Buff::ProcTurnOver(Creature* caster)
);
}
}
CreatureWeakPtr& Buff::GetCaster()
{
return caster_;
}
void Buff::SetCaster(Creature* caster)
{
if (caster) {
caster_.Attach(caster);
} else {
caster_.Reset();
}
}

View File

@ -1,5 +1,7 @@
#pragma once
#include "weakptr.h"
namespace MetaData
{
struct Player;
@ -36,6 +38,8 @@ class Buff
bool NeedSync(Human* hum);
void FillMFBuff(cs::MFBuff* buff_pb);
bool FreezeOperate();
CreatureWeakPtr& GetCaster();
void SetCaster(Creature* caster);
void ProcDelayAddBuff(Creature* caster);
void ProcIntervalAddBuff(Creature* caster);
@ -59,4 +63,5 @@ private:
private:
int hold_curr_weapon_idx_ = 0;
std::list<Weapon> hold_weapons_;
CreatureWeakPtr caster_;
};

View File

@ -323,7 +323,8 @@ enum GameChannel_e
enum PostBuffAction_e
{
kRemoveBuffByIdAction = 1,
kRemoveBuffByEffectAction = 2
kRemoveBuffByEffectAction = 2,
kAddBuffAction = 3
};
enum ObstacleType_e

View File

@ -67,6 +67,7 @@ enum BuffEffectType_e
kBET_InGrass = 56, //在草丛
kBET_InWater = 57, //在水里
kBET_InIce = 58, //在冰里
kBET_PullToWalkable = 59, //从碰撞里以自己方向拖出来直到没有碰撞
kBET_BatchAddBuff = 60, //批量添加buff
kBET_BeRecycle = 61, //待回收
kBET_Trace = 62, //追踪玩家

View File

@ -192,6 +192,7 @@ void Creature::AddBuff(Creature* caster,
}
}
Buff* buff = &a8::FastAppend(buff_list_);
buff->SetCaster(caster);
buff->skill_lv = skill_lv;
buff->owner = this;
buff->meta = buff_meta;
@ -272,7 +273,7 @@ void Creature::TryAddBuff(Creature* caster, int buff_id)
void Creature::RemoveBuffById(int buff_id)
{
std::vector<MetaData::Buff*> removed_buffs;
std::vector<std::tuple<MetaData::Buff*, Creature*>> removed_buffs;
for (auto itr = buff_list_.begin(); itr != buff_list_.end(); ++itr) {
Buff& buff = *itr;
if (buff.meta->i->buff_id() == buff_id) {
@ -280,13 +281,15 @@ void Creature::RemoveBuffById(int buff_id)
if (!list_empty(&buff.depend_entry)) {
list_del_init(&buff.depend_entry);
}
removed_buffs.push_back(buff.meta);
removed_buffs.push_back(std::make_tuple(buff.meta, buff.GetCaster().Get()));
OnBuffRemove(buff);
buff_list_.erase(itr);
break;
}
}
for (MetaData::Buff* buff_meta : removed_buffs) {
for (auto& tuple1 : removed_buffs) {
MetaData::Buff* buff_meta = std::get<0>(tuple1);
Creature* caster = std::get<1>(tuple1);
for (const auto& tuple : buff_meta->post_remove_action) {
switch (std::get<0>(tuple)) {
case kRemoveBuffByIdAction:
@ -303,6 +306,13 @@ void Creature::RemoveBuffById(int buff_id)
}
}
break;
case kAddBuffAction:
{
for (int buff_id :std::get<1>(tuple)) {
TryAddBuff(caster, buff_id);
}
}
break;
default:
break;
}

View File

@ -3,6 +3,7 @@
#include "weakptr.h"
#include "moveableentity.h"
#include "buff.h"
#include "weakptr.h"
#include "cs_proto.pb.h"

View File

@ -765,12 +765,15 @@ namespace MetaData
std::vector<std::string> strings3;
a8::Split(strings2[1], strings3, ';');
if (strings2[0] == "remove_buff_by_id" ||
strings2[0] == "remove_buff_by_effect") {
strings2[0] == "remove_buff_by_effect" ||
strings2[0] == "add_buff") {
auto& action = a8::FastAppend(post_remove_action);
if (strings2[0] == "remove_buff_by_id") {
std::get<0>(action) = kRemoveBuffByIdAction;
} else if (strings2[0] == "remove_buff_by_effect") {
std::get<0>(action) = kRemoveBuffByEffectAction;
} else if (strings2[0] == "add_buff") {
std::get<0>(action) = kAddBuffAction;
}
for (auto& str3 : strings3) {
if (!str3.empty()) {