From e96243a29a9566eb9225241eaeb708f98e574873 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 5 Mar 2021 13:54:36 +0800 Subject: [PATCH] 1 --- server/gameserver/car.cc | 18 +++++++++++++----- server/gameserver/car.h | 6 ++++-- server/gameserver/human.cc | 29 ++++++++++++++++++++--------- server/gameserver/human.h | 2 +- server/gameserver/player.cc | 3 +-- 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 58cd62a..99ce512 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -36,18 +36,18 @@ void Car::GetDown(Human* passenger) if (later_removed_) { return; } - if (passengers.find(passenger) == passengers.end()) { + if (passengers_.find(passenger) == passengers_.end()) { return; } - if (driver == passenger) { - driver = nullptr; + if (driver_ == passenger) { + driver_ = nullptr; } if (meta->i->buffid()) { passenger->RemoveBuffById(meta->i->buffid()); passenger->RecalcSelfCollider(); } - passengers.erase(passenger); - if (passengers.empty()) { + passengers_.erase(passenger); + if (passengers_.empty()) { int loot_uniid = room->CreateLoot(meta->i->id(), GetPos(), 1, 1); Entity* loot_entity = room->GetEntityByUniId(loot_uniid); if (loot_entity && loot_entity->IsEntityType(ET_Loot)) { @@ -72,3 +72,11 @@ void Car::GetDown(Human* passenger) SyncAroundPlayers(__FILE__, __LINE__, __func__); room->NotifyUiUpdate(); } + +void Car::GetOn(Human* passenger) +{ + if (later_removed_) { + return; + } + +} diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 1f834e7..6c406ec 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -16,8 +16,6 @@ class Car : public MoveableEntity public: int car_uniid = 0; MetaData::Equip* meta = nullptr; - Human* driver = nullptr; - std::set passengers; Car(); virtual ~Car() override; @@ -26,7 +24,11 @@ class Car : public MoveableEntity virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; void GetDown(Human* passenger); + void GetOn(Human* passenger); private: bool later_removed_ = false; + Human* driver_ = nullptr; + std::set passengers_; + }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 3937713..dd16ec1 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1368,9 +1368,9 @@ void Human::DoGetOn(int obj_uniid) DoGetOnWithLoot((Loot*)entity); } break; - case ET_Player: + case ET_Car: { - DoGetOnWithTeammate((Human*)entity); + DoGetOnWithCar((Car*)entity); } break; default: @@ -4241,6 +4241,9 @@ void Human::DoGetOnWithLoot(Loot* entity) item_meta, GetPos() ); + car_->GetOn(this); + room->NotifyUiUpdate(); + #if 0 SetCar(car_); SetSeat(0); SetPos(entity->GetPos()); @@ -4259,11 +4262,13 @@ void Human::DoGetOnWithLoot(Loot* entity) CancelAction(); SyncAroundPlayers(__FILE__, __LINE__, __func__); room->TakeOnCarObject(car_->car_uniid); - room->NotifyUiUpdate(); + #endif } -void Human::DoGetOnWithTeammate(Human* teammate) +void Human::DoGetOnWithCar(Car* car) { + car->GetOn(this); + #if 0 if (teammate->team_id != team_id) { return; } @@ -4276,16 +4281,15 @@ void Human::DoGetOnWithTeammate(Human* teammate) if (!teammate->HasBuffEffect(kBET_Driver)) { return; } - if (HasBuffEffect(kBET_Driver)) { + if (GetCar()) { return; } - if (HasBuffEffect(kBET_Passenger)) { + if (!teammate->GetCar()) { return; } + teammate->GetCar()->PassengerGetOn(this); - #if 0 - teammate->GetCar().passengers.insert(this); - #endif + SetCar(teammate->GetCar()); SetPos(teammate->GetPos()); { MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(PASSENGER_BUFFID); @@ -4293,6 +4297,13 @@ void Human::DoGetOnWithTeammate(Human* teammate) 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 } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 8b6de6e..d458def 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -353,7 +353,7 @@ private: void OnLand(); void NextReload(int prev_weapon_id, int prev_weapon_idx); void DoGetOnWithLoot(Loot* loot_entity); - void DoGetOnWithTeammate(Human* teammate); + void DoGetOnWithCar(Car* car); protected: int level_ = 0; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 94b7d0f..29a0bff 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -802,8 +802,7 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google: item_meta, GetPos() ); - SetCar(car); - SetSeat(0); + car->GetOn(this); } } break;