From a69205270c9324cec7f076103c9a24dfaeff02d1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 31 Jul 2020 15:10:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A2=AB=E5=8A=A8=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/constant.h | 3 +++ server/gameserver/human.cc | 34 ++++++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index e6d9ecb..ef4699f 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -135,6 +135,9 @@ enum BuffEffectType_e kBET_DecHp = 16, //扣血 kBET_PullDone = 17, //拖拽到目的地 kBET_DelayAddBuff = 18, //延迟加buff + kBET_CliEffect1 = 19, //僵尸被动光环减速(客户端表现用) + kBET_CliEffect2 = 20, //僵尸被动光环毒物(客户端表现用) + kBET_CliEffect3 = 21, //僵尸被动光环地震(客户端表现用) kBET_End }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 403cde7..b42ca2b 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3810,6 +3810,10 @@ void Human::AddPassiveSkill(MetaData::Skill* skill_meta) &xtimer_attacher.timer_list_); passive_skill_metas_[skill_meta] = tmp_timer; AddPassiveSkillBuff(skill_meta); + if (skill_meta->i->skill_cd() > 10000) { + //永久被动被动技能 + AddPassiveSkillBuff(skill_meta); + } } } @@ -3818,6 +3822,7 @@ void Human::RemovePassiveSkill(MetaData::Skill* skill_meta) auto itr = passive_skill_metas_.find(skill_meta); if (itr != passive_skill_metas_.end()) { ClearPassiveSkillBuff(skill_meta); + room->xtimer.DeleteTimer(itr->second); passive_skill_metas_.erase(itr); } } @@ -3842,18 +3847,35 @@ bool Human::HasPassiveSkill(MetaData::Skill* skill_meta) void Human::ClearPassiveSkillBuff(MetaData::Skill* skill_meta) { for (int buff_id : skill_meta->buff_list) { - RemoveBuffById(buff_id); + Buff* buff = GetBuffById(buff_id); + if (buff && + (buff->meta->i->buff_target() == kBuffTargetSelf || + buff->meta->i->buff_target() == kBuffTargetFriendly)) { + RemoveBuffById(buff_id); + } } } void Human::AddPassiveSkillBuff(MetaData::Skill* skill_meta) { - for (int buff_id : skill_meta->buff_list) { - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); - if (buff_meta) { - AddBuff(this, buff_meta, buff_id); - } + if (!skill_meta) { + return; } + MetaData::Skill* old_curr_skill = skill_meta_; + int old_skill_target_id = skill_target_id; + a8::Vec2 old_skill_target_pos = skill_target_pos; + + skill_meta_ = skill_meta; + skill_target_id = GetEntityUniId(); + skill_target_pos = GetPos(); + + std::set target_list; + SelectSkillTargets(GetPos(), target_list); + TriggerBuff(target_list, kBTT_UseSkill); + + skill_meta_= old_curr_skill; + skill_target_id = old_skill_target_id; + skill_target_pos = old_skill_target_pos; } void Human::OnMetaChange()