From a38978a4fd6f5cd916115c5944f5f9acba5bc98b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Jul 2021 11:37:52 +0800 Subject: [PATCH] 1 --- server/gameserver/car.cc | 20 ++++++++++++++------ server/gameserver/player.cc | 2 +- server/tools/protobuild/cs_proto.proto | 1 + 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 11e7e2a..b9eec6a 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -80,6 +80,7 @@ void Car::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) p->set_oil(cur_oil_); p->set_max_oil(meta->i->max_oil()); p->set_bullet_num(weapons[GUN_SLOT1].ammo); + p->set_seat_num(meta->int_param2); FillBuffList(hum, p->mutable_buff_list()); } @@ -186,28 +187,35 @@ void Car::GetOn(Human* passenger) void Car::SwitchSeat(Human* passenger, int seat) { - if (seat != 0) { + if (later_removed_) { return; } - if (driver_) { + if (seat < 0 || seat >= meta->int_param2) { return; } if (!IsPassenger(passenger)) { return; } - if (passenger->GetSeat() == seat) { - return; - } if (GetPassengerBySeat(seat)) { return; } - if (!IsDriver(passenger)) { + + if (seat == 0) { passenger->RemoveBuffByEffectId(kBET_Passenger); passenger->SetSeat(seat); driver_ = passenger; passenger->MustBeAddBuff(passenger, DRIVER_BUFFID); room->frame_event.AddCarChg(passenger->GetWeakPtrRef()); SyncAroundPlayers(__FILE__, __LINE__, __func__); + } else { + if (driver_ == passenger) { + driver_ = nullptr; + passenger->RemoveBuffByEffectId(kBET_Driver); + passenger->MustBeAddBuff(passenger, PASSENGER_BUFFID); + } + passenger->SetSeat(seat); + room->frame_event.AddCarChg(passenger->GetWeakPtrRef()); + SyncAroundPlayers(__FILE__, __LINE__, __func__); } } diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 3a67735..81aa03d 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1151,7 +1151,7 @@ void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) get_on = msg.get_on(); } if (msg.has_switch_seat()) { - switch_seat = msg.has_switch_seat(); + switch_seat = msg.has_switch_seat() + 1; } if (msg.has_jump()) { jump = true; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 0d6faaa..1fbbf88 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -484,6 +484,7 @@ message MFCarFull !!!注意这里只返回客户端必要的用于显示玩家外观的信息而不是全量信息 */ repeated MFPlayerFull passengers = 6; + optional int32 seat_num = 17; //座位数 optional int32 born_frameno = 8; //出生帧号 born_frameno == SMUpdate.frmanoe时表示在当前这帧出生 }