diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index d69939e..4e59d47 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -233,6 +233,7 @@ enum BulletType_e BulletType_Normal = 1, //普通子弹 BulletType_Missile = 2, //导弹 BulletType_FireBomb = 3, //燃烧弹 + BulletType_Trace = 4, //追踪弹(超出射程无伤害) }; enum ColliderTag_e diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 50c7a5a..bb68ba3 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -215,7 +215,7 @@ void Human::Shot() } DirectShot(curr_weapon->meta, 0); - if (curr_weapon->meta->i->equip_subtype() == BulletType_Missile) { + if (curr_weapon->meta->NeedTrace()) { room->xtimer.AddDeadLineTimerAndAttach(curr_weapon->meta->i->time() * SERVER_FRAME_RATE, a8::XParams() .SetSender(this) @@ -257,10 +257,10 @@ void Human::DirectShot(MetaData::Equip* bullet_meta, int skill_id) } bullet_dir.Rotate(bullet_angle / 180.0f); int hit_time = 0; - if (bullet_meta->i->equip_subtype() == BulletType_Missile) { + if (bullet_meta->NeedTrace()) { hit_time = bullet_meta->i->time() * 1000; } - if (bullet_meta->i->equip_subtype() == BulletType_Missile) { + if (bullet_meta->NeedTrace()) { if (skill_id != 0) { room->frame_event.AddBullet(this, bullet_meta->i->id(), curr_weapon->weapon_lv, bullet_born_pos, bullet_dir, @@ -2078,7 +2078,7 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase) MetaData::Equip* bullet_meta = MetaMgr::Instance()->GetEquip(phase->param1.GetInt()); if (bullet_meta) { DirectShot(bullet_meta, skill_meta->i->skill_id()); - if (bullet_meta->i->equip_subtype() == BulletType_Missile) { + if (bullet_meta->NeedTrace()) { room->xtimer.AddDeadLineTimerAndAttach(bullet_meta->i->time() * SERVER_FRAME_RATE, a8::XParams() .SetSender(this) diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index f749a80..733a1bd 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -87,6 +87,13 @@ namespace MetaData return i->equip_type() == EquipType_Bullet && MetaMgr::Instance()->fighting_mode; } + bool Equip::NeedTrace() + { + return i->equip_type() == EquipType_Bullet && + i->equip_subtype() == BulletType_Missile && + i->equip_subtype() == BulletType_Trace; + } + void Player::Init() { { diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 8d59352..bda26f2 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -56,6 +56,7 @@ namespace MetaData void Init(); bool CanDrop(); + bool NeedTrace(); }; struct Player