diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index fe16b5cc..97db679d 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -84,11 +84,12 @@ void Bullet::OnHit(std::set& objects) if (IsFlyHook()) { if (sender.Get() && !sender.Get()->dead) { for (auto& target : objects) { - if ( - !(target->IsCreature(room) && - ((Creature*)target)->IsCar())) { + Creature* c = target->IsCreature(room) ? (Creature*)target : nullptr; + if (!(c && c->IsCar())) { ProcFlyHook(target); - target->OnBulletHit(this); + if (!c || (c->team_id != sender.Get()->team_id)) { + target->OnBulletHit(this); + } } break; } @@ -535,7 +536,8 @@ void Bullet::Check(float distance) GetGridList(), [this, &objects, &c_hit_num, &eat] (Creature* c, bool& stop) { - if (sender.Get()->IsProperTarget(c)) { + bool no_teammate = !IsFlyHook(); + if (sender.Get()->IsProperTarget(c, no_teammate)) { if (gun_meta->i->ispenetrate() && hit_objects_.find(c->GetUniId()) != hit_objects_.end()) { //穿人 diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 8101ea9e..1fbd8002 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -414,7 +414,7 @@ void Incubator::NextWave() cs::SMPvePassWave notify_msg; int next_wave = hum->room->pve_data.GetWave() + 1 + 1; int max_wave = room->pve_data.max_wave; - next_wave = std::max(next_wave, max_wave); + next_wave = std::min(next_wave, max_wave); notify_msg.set_new_wave(next_wave); notify_msg.set_wait_time(hum->room->pve_mode_meta->pb->wave_prepare_time()); notify_msg.set_pve_max_wave(max_wave);