修复隐身问题

This commit is contained in:
aozhiwei 2019-07-18 13:28:55 +08:00
parent 8df475806c
commit cd0d0726ae
2 changed files with 20 additions and 11 deletions

View File

@ -24,7 +24,7 @@
#include "framework/cpp/utils.h" #include "framework/cpp/utils.h"
#include "framework/cpp/httpclientpool.h" #include "framework/cpp/httpclientpool.h"
const int HIDE_BUFF_ID = 1010; const int GRASS_HIDE_BUFF_ID = 1016;
Human::Human():Entity() Human::Human():Entity()
{ {
@ -570,7 +570,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
room->OnHumanDie(this); room->OnHumanDie(this);
{ {
OnLeaveGrass(); OnLeaveGrass();
RemoveBuff(HIDE_BUFF_ID); RemoveBuffById(GRASS_HIDE_BUFF_ID);
} }
SyncAroundPlayers(); SyncAroundPlayers();
} }
@ -1403,7 +1403,7 @@ void Human::AddBuff(MetaData::Buff* buff_meta)
if (!buff_meta->EffectCanStack()) { if (!buff_meta->EffectCanStack()) {
Buff* buff = GetBuffByEffectId(buff_meta->i->buff_effect()); Buff* buff = GetBuffByEffectId(buff_meta->i->buff_effect());
if (buff) { if (buff) {
RemoveBuff(buff->meta->i->buff_id()); RemoveBuffById(buff->meta->i->buff_id());
} }
} }
Buff* buff = &a8::FastAppend(buff_list_); Buff* buff = &a8::FastAppend(buff_list_);
@ -1423,7 +1423,7 @@ void Human::AddBuff(MetaData::Buff* buff_meta)
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
Human* hum = (Human*)param.sender.GetUserData(); Human* hum = (Human*)param.sender.GetUserData();
hum->RemoveBuff(param.param1); hum->RemoveBuffById(param.param1);
}, },
&buff->xtimer_attacher.timer_list_ &buff->xtimer_attacher.timer_list_
); );
@ -1431,7 +1431,7 @@ void Human::AddBuff(MetaData::Buff* buff_meta)
ProcBuffEffect(buff); ProcBuffEffect(buff);
} }
void Human::RemoveBuff(int buff_id) void Human::RemoveBuffById(int buff_id)
{ {
for (auto itr = buff_list_.begin(); itr != buff_list_.end(); ++itr) { for (auto itr = buff_list_.begin(); itr != buff_list_.end(); ++itr) {
if (itr->meta->i->buff_id() == buff_id) { if (itr->meta->i->buff_id() == buff_id) {
@ -1445,6 +1445,14 @@ void Human::RemoveBuff(int buff_id)
} }
} }
void Human::RemoveBuffByEffectId(int buff_effect_id)
{
Buff* buff = GetBuffByEffectId(buff_effect_id);
if (buff) {
RemoveBuffById(buff->meta->i->buff_id());
}
}
bool Human::HasBuffEffect(int buff_effect_id) bool Human::HasBuffEffect(int buff_effect_id)
{ {
return GetBuffByEffectId(buff_effect_id) != nullptr; return GetBuffByEffectId(buff_effect_id) != nullptr;
@ -1535,7 +1543,7 @@ void Human::OnAttack()
{ {
if (a8::HasBitFlag(status, HS_InGrass)) { if (a8::HasBitFlag(status, HS_InGrass)) {
if (HasBuffEffect(BET_Hide)) { if (HasBuffEffect(BET_Hide)) {
RemoveBuff(buff_effect_[BET_Hide]->meta->i->buff_id()); RemoveBuffByEffectId(BET_Hide);
} }
if (grass_hide_timer_list_) { if (grass_hide_timer_list_) {
room->xtimer.ModifyTimer(grass_hide_timer_list_, room->xtimer.ModifyTimer(grass_hide_timer_list_,
@ -1546,7 +1554,7 @@ void Human::OnAttack()
{ {
Human* hum = (Human*)param.sender.GetUserData(); Human* hum = (Human*)param.sender.GetUserData();
hum->grass_hide_timer_list_ = nullptr; hum->grass_hide_timer_list_ = nullptr;
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(HIDE_BUFF_ID); MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(GRASS_HIDE_BUFF_ID);
if (buff_meta) { if (buff_meta) {
hum->AddBuff(buff_meta); hum->AddBuff(buff_meta);
} }
@ -1580,7 +1588,7 @@ void Human::OnEnterGrass()
{ {
Human* hum = (Human*)param.sender.GetUserData(); Human* hum = (Human*)param.sender.GetUserData();
hum->grass_hide_timer_list_ = nullptr; hum->grass_hide_timer_list_ = nullptr;
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(HIDE_BUFF_ID); MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(GRASS_HIDE_BUFF_ID);
if (buff_meta) { if (buff_meta) {
hum->AddBuff(buff_meta); hum->AddBuff(buff_meta);
} }
@ -1611,7 +1619,7 @@ void Human::OnLeaveGrass()
{ {
Human* hum = (Human*)param.sender.GetUserData(); Human* hum = (Human*)param.sender.GetUserData();
hum->leave_grass_timer_list_ = nullptr; hum->leave_grass_timer_list_ = nullptr;
hum->RemoveBuff(HIDE_BUFF_ID); hum->RemoveBuffById(GRASS_HIDE_BUFF_ID);
}, },
&xtimer_attacher.timer_list_); &xtimer_attacher.timer_list_);
} }
@ -1766,7 +1774,7 @@ void Human::_UpdateAssaultMove()
room->frame_event.AddExplosion(0, pos, 2); room->frame_event.AddExplosion(0, pos, 2);
room->grid_service.MoveHuman(this); room->grid_service.MoveHuman(this);
} }
RemoveBuff(buff->meta->i->buff_id()); RemoveBuffById(buff->meta->i->buff_id());
a8::UnSetBitFlag(status, HS_Assaulting); a8::UnSetBitFlag(status, HS_Assaulting);
} }
} }

View File

@ -201,7 +201,8 @@ class Human : public Entity
int GetSkillCd(); int GetSkillCd();
void TriggerBuff(std::set<Entity*>& target_list, BuffTriggerType_e trigger_type); void TriggerBuff(std::set<Entity*>& target_list, BuffTriggerType_e trigger_type);
void AddBuff(MetaData::Buff* buff_meta); void AddBuff(MetaData::Buff* buff_meta);
void RemoveBuff(int buff_id); void RemoveBuffById(int buff_id);
void RemoveBuffByEffectId(int buff_effect_id);
bool HasBuffEffect(int buff_effect_id); bool HasBuffEffect(int buff_effect_id);
Buff* GetBuffByEffectId(int effect_id); Buff* GetBuffByEffectId(int effect_id);
void RecalcBuffAttr(); void RecalcBuffAttr();