diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 99ce512..0aa0d15 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -78,5 +78,43 @@ void Car::GetOn(Human* passenger) if (later_removed_) { return; } - + if (meta->int_param2 <= 0) { + abort(); + } + if (meta->int_param2 <= passengers_.size()) { + return; + } + if (passengers_.find(passenger) != passengers_.end()) { + return; + } + if (passenger->GetCar()) { + return; + } + for (auto hum : passengers_) { + if (hum->team_id != passenger->team_id) { + return; + } + } + passengers_.insert(passenger); + if (!driver_) { + driver_ = passenger; + } + passenger->SetCar(this); + passenger->SetPos(GetPos()); + { + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff + (driver_ == passenger ? DRIVER_BUFFID : PASSENGER_BUFFID); + if (buff_meta) { + passenger->AddBuff(passenger, buff_meta, 1); + } + } + { + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(meta->i->buffid()); + if (buff_meta) { + passenger->AddBuff(passenger, buff_meta, 1); + } + } + passenger->CancelAction(); + room->frame_event.AddCarChg(passenger); + SyncAroundPlayers(__FILE__, __LINE__, __func__); } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index dd16ec1..8dfd9c4 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -4243,67 +4243,9 @@ void Human::DoGetOnWithLoot(Loot* entity) ); car_->GetOn(this); room->NotifyUiUpdate(); - #if 0 - SetCar(car_); - SetSeat(0); - SetPos(entity->GetPos()); - { - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(DRIVER_BUFFID); - if (buff_meta) { - AddBuff(this, buff_meta, 1); - } - } - { - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(car_->meta->i->buffid()); - if (buff_meta) { - AddBuff(this, buff_meta, 1); - } - } - CancelAction(); - SyncAroundPlayers(__FILE__, __LINE__, __func__); - room->TakeOnCarObject(car_->car_uniid); - #endif } void Human::DoGetOnWithCar(Car* car) { car->GetOn(this); - #if 0 - if (teammate->team_id != team_id) { - return; - } - if (teammate->GetEntityUniId() == GetEntityUniId()) { - return; - } - if (teammate->IsDead(room)) { - return; - } - if (!teammate->HasBuffEffect(kBET_Driver)) { - return; - } - if (GetCar()) { - return; - } - if (!teammate->GetCar()) { - return; - } - teammate->GetCar()->PassengerGetOn(this); - - SetCar(teammate->GetCar()); - SetPos(teammate->GetPos()); - { - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(PASSENGER_BUFFID); - if (buff_meta) { - AddBuff(this, buff_meta, 1); - } - } - { - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(car_->meta->i->buffid()); - if (buff_meta) { - AddBuff(this, buff_meta, 1); - } - } - CancelAction(); - SyncAroundPlayers(__FILE__, __LINE__, __func__); - #endif }