diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 8645642..4567a1a 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -24,6 +24,7 @@ class Car : public MoveableEntity virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; + bool IsDriver(Human* hum) { return driver_ == hum && driver_; } void GetDown(Human* passenger); void GetOn(Human* passenger); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4f211e1..740a4f5 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -389,10 +389,17 @@ void Human::GetAabbBox(AabbCollider& aabb_box) } aabb_box.active = true; aabb_box.owner = this; - aabb_box._min.x = -meta->i->radius(); - aabb_box._min.y = -meta->i->radius(); - aabb_box._max.x = meta->i->radius(); - aabb_box._max.y = meta->i->radius(); + if (GetCar() && GetCar()->IsDriver(this)) { + aabb_box._min.x = -GetCar()->meta->i->rad(); + aabb_box._min.y = -GetCar()->meta->i->rad(); + aabb_box._max.x = GetCar()->meta->i->rad(); + aabb_box._max.y = GetCar()->meta->i->rad(); + } else { + aabb_box._min.x = -meta->i->radius(); + aabb_box._min.y = -meta->i->radius(); + aabb_box._max.x = meta->i->radius(); + aabb_box._max.y = meta->i->radius(); + } } bool Human::IsDead(Room * room) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 29a0bff..579e23d 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -132,6 +132,9 @@ void Player::UpdateMove() if (HasBuffEffect(kBET_Vertigo)) { return; } + if (HasBuffEffect(kBET_Passenger)) { + return; + } if (HasBuffEffect(kBET_Camouflage)) { RemoveBuffByEffectId(kBET_Camouflage); } @@ -145,14 +148,6 @@ void Player::UpdateMove() if (GetLastCollisionDoor() && !TestCollision(room, GetLastCollisionDoor())) { SetLastCollisionDoor(nullptr); } - #if 0 - a8::Vec2 old_pos = GetPos(); - if (tank_weapon.meta) { - CheckSkinTank(); - tank_oil_value -= old_pos.Distance(GetPos()) * (MetaMgr::Instance()->average_oil / 100.0f); - tank_oil_value = std::max(0.0f, tank_oil_value); - } - #endif #ifdef DEBUG room->CheckPartObjects(); #endif