diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index f96c7105..a889aa68 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -18,6 +18,7 @@ #include "roomobstacle.h" #include "car.h" #include "creature.h" +#include "skillhelper.h" Bullet::Bullet():MoveableEntity() { @@ -845,11 +846,14 @@ void Bullet::TriggerHitBuff(Entity* e) for (int buff_id : gun_meta->hit_buff_list) { MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); if (buff_meta) { - c->AddBuff( - sender.Get(), - buff_meta, - skill_meta - ); + int buff_uniid = c->AddBuff( + sender.Get(), + buff_meta, + skill_meta + ); + if (skill_meta && buff_uniid) { + SkillHelper::ProcBulletHitBuff(this, c, buff_uniid); + } } } } diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 7a29eb8b..c4b796fe 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2093,7 +2093,7 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance, int InternalShot(this, GetCurrWeapon()->meta, GetCurrWeapon()->bullet_meta, - nullptr, + GetCurrWeapon()->skill_meta, fly_distance, GetCurrWeapon()->weapon_uniid, trace_target_uniid); diff --git a/server/gameserver/skillhelper.cc b/server/gameserver/skillhelper.cc index 6b74b9ed..87c03697 100644 --- a/server/gameserver/skillhelper.cc +++ b/server/gameserver/skillhelper.cc @@ -1,6 +1,12 @@ #include "precompile.h" #include "skillhelper.h" +#include "creature.h" +#include "buff.h" +#include "bullet.h" +#include "skill.h" +#include "metadata.h" +#include "room.h" std::map SkillHelper::magic_skill_hash_; std::map SkillHelper::skill_magic_hash_; @@ -190,3 +196,33 @@ int SkillHelper::GetSwzbPullDistance(const MetaData::Skill* skill_meta) { return 0; } + +void SkillHelper::ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid) +{ + Buff* buff = c->GetBuffByUniId(buff_uniid); + if (!buff) { + return; + } + auto skill_meta = bullet->skill_meta; + if (!skill_meta) { + return; + } + switch (skill_meta->GetMagicId()) { + case MAGIC_AXXF: + { + if (buff->meta->i->buff_id() == 201011 && + buff->meta->i->buff_effect() == kBET_Vertigo) { + c->room->xtimer.ModifyTimer + (buff->remover_timer, + skill_meta->number_meta->int_time / FRAME_RATE_MS); + } else { + + } + } + break; + default: + { + } + break; + } +} diff --git a/server/gameserver/skillhelper.h b/server/gameserver/skillhelper.h index 57f4a7d1..ee146996 100644 --- a/server/gameserver/skillhelper.h +++ b/server/gameserver/skillhelper.h @@ -5,6 +5,8 @@ namespace MetaData struct Skill; }; +class Bullet; +class Creature; class SkillHelper { public: @@ -26,6 +28,8 @@ class SkillHelper static int GetSwzbEffect(const MetaData::Skill* skill_meta); static int GetSwzbPullDistance(const MetaData::Skill* skill_meta); + static void ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid); + private: static std::map magic_skill_hash_;