diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 9567d75..a2017b2 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -1,6 +1,7 @@ #include "precompile.h" #include "car.h" +#include "collider.h" #include "human.h" #include "room.h" #include "metamgr.h" @@ -249,4 +250,28 @@ void Car::BeKill(int killer_id, const std::string& killer_name, int weapon_id) BroadcastDeleteState(room); RemoveFromAroundPlayers(room); room->grid_service->RemoveCreature(this); + room->RemoveObjectLater(this); + for (Human* passenger : passengers_) { + if (meta->i->buffid()) { + passenger->RemoveBuffById(meta->i->buffid()); + passenger->RecalcSelfCollider(); + } + passenger->SetCar(nullptr); + passenger->SetSeat(0); + passenger->second_weapon = Weapon(); + passenger->CancelAction(); + passenger->RemoveBuffByEffectId(kBET_Driver); + passenger->RemoveBuffByEffectId(kBET_Passenger); + room->frame_event.AddCarChg(passenger); + } +} + +void Car::GetAabbBox(AabbCollider& aabb_box) +{ + aabb_box.active = true; + aabb_box.owner = this; + aabb_box._min.x = -hero_meta_->i->radius(); + aabb_box._min.y = -hero_meta_->i->radius(); + aabb_box._max.x = hero_meta_->i->radius(); + aabb_box._max.y = hero_meta_->i->radius(); } diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 59edb9c..4797048 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -25,6 +25,7 @@ class Car : public Creature virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; virtual void OnBulletHit(Bullet* bullet) override; + virtual void GetAabbBox(AabbCollider& aabb_box) override; bool IsDriver(Human* hum) { return driver_ == hum && driver_; } void GetDown(Human* passenger);