From 0cd2123369bcebeebf9785078bbe952773ed17a0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 5 Mar 2021 11:41:25 +0800 Subject: [PATCH] 1 --- server/gameserver/car.cc | 6 +++ server/gameserver/car.h | 3 ++ server/gameserver/gridservice.cc | 15 ++++++++ server/gameserver/gridservice.h | 5 +++ server/gameserver/human.cc | 65 ++++++++------------------------ server/gameserver/player.cc | 17 +++++---- server/gameserver/room.cc | 9 ++++- server/gameserver/room.h | 3 +- 8 files changed, 64 insertions(+), 59 deletions(-) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index f8cb574..58cd62a 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -33,6 +33,9 @@ void Car::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) void Car::GetDown(Human* passenger) { + if (later_removed_) { + return; + } if (passengers.find(passenger) == passengers.end()) { return; } @@ -56,6 +59,8 @@ void Car::GetDown(Human* passenger) loot_entity->GetPos()); } room->TakeOffCarObject(loot_uniid, GetPos()); + room->RemoveObjectLater(this); + later_removed_ = true; } passenger->SetCar(nullptr); passenger->SetSeat(0); @@ -65,4 +70,5 @@ void Car::GetDown(Human* passenger) passenger->RemoveBuffByEffectId(kBET_Passenger); room->frame_event.AddCarChg(passenger); SyncAroundPlayers(__FILE__, __LINE__, __func__); + room->NotifyUiUpdate(); } diff --git a/server/gameserver/car.h b/server/gameserver/car.h index 0291344..1f834e7 100644 --- a/server/gameserver/car.h +++ b/server/gameserver/car.h @@ -26,4 +26,7 @@ class Car : public MoveableEntity virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; void GetDown(Human* passenger); + + private: + bool later_removed_ = false; }; diff --git a/server/gameserver/gridservice.cc b/server/gameserver/gridservice.cc index cebc63a..5b38ddc 100644 --- a/server/gameserver/gridservice.cc +++ b/server/gameserver/gridservice.cc @@ -191,6 +191,21 @@ void GridService::DelBullet(Bullet* bullet) cell.RemoveBullet(bullet); } +void GridService::AddCar(Car* car) +{ + +} + +void GridService::MoveCar(Car* car) +{ + +} + +void GridService::DelCar(Car* car) +{ + +} + void GridService::AddRoomEntity(Room* room, Entity* entity) { assert(!entity->IsEntityType(ET_Player)); diff --git a/server/gameserver/gridservice.h b/server/gameserver/gridservice.h index fe5b42d..6ccb8a4 100644 --- a/server/gameserver/gridservice.h +++ b/server/gameserver/gridservice.h @@ -4,6 +4,7 @@ class Human; class Entity; class Room; class Bullet; +class Car; class GridCell; class GridService { @@ -26,6 +27,10 @@ class GridService void MoveBullet(Bullet* bullet); void DelBullet(Bullet* bullet); + void AddCar(Car* car); + void MoveCar(Car* car); + void DelCar(Car* car); + void AddRoomEntity(Room* room, Entity* entity); void DelRoomEntity(Room* room, Entity* entity); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 680e945..a04f677 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1378,33 +1378,6 @@ void Human::DoGetOn(int obj_uniid) } } -void Human::DoGetDown() -{ - if (GetCar()) { - GetCar()->GetDown(this); - int loot_uniid = room->CreateLoot(car_->meta->i->id(), GetPos(), 1, 1); - Entity* loot_entity = room->GetEntityByUniId(loot_uniid); - if (loot_entity && loot_entity->IsEntityType(ET_Loot)) { - ((Loot*)loot_entity)->bullet_num = 0; - ((Loot*)loot_entity)->param1 = 0; - ((Loot*)loot_entity)->param2 = 0; - room->UpdateCarObject(car_->car_uniid, - loot_entity->GetEntityUniId(), - loot_entity->GetPos()); - } - room->TakeOffCarObject(loot_uniid, GetPos()); - if (car_->meta->i->buffid()) { - RemoveBuffById(car_->meta->i->buffid()); - RecalcSelfCollider(); - } - SyncAroundPlayers(__FILE__, __LINE__, __func__); - room->NotifyUiUpdate(); - SetCar(nullptr); - car_weapon = Weapon(); - CancelAction(); - } -} - void Human::FindLocation() { Entity* target = nullptr; @@ -4246,31 +4219,30 @@ void Human::NextReload(int prev_weapon_id, int prev_weapon_idx) } } +void Human::DoGetDown() +{ + if (GetCar()) { + GetCar()->GetDown(this); + } +} + void Human::DoGetOnWithLoot(Loot* entity) { MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(entity->item_id); if (!item_meta) { return; } - if (car_) { - int loot_uniid = room->CreateLoot(car_->meta->i->id(), GetPos(), 1, 1); - Entity* loot_entity = room->GetEntityByUniId(loot_uniid); - if (loot_entity && loot_entity->IsEntityType(ET_Loot)) { - ((Loot*)loot_entity)->bullet_num = 0; - ((Loot*)loot_entity)->param1 = 0; - ((Loot*)loot_entity)->param2 = 0; - room->UpdateCarObject(car_->car_uniid, - loot_entity->GetEntityUniId(), - loot_entity->GetPos()); - } - room->TakeOffCarObject(loot_uniid, GetPos()); - if (car_->meta->i->buffid()) { - RemoveBuffById(car_->meta->i->buffid()); - } - car_weapon = Weapon(); + if (GetCar()) { + GetCar()->GetDown(this); } + car_ = room->CreateCar( + this, + item_meta, + GetPos() + ); car_->car_uniid = entity->GetEntityUniId(); - car_->meta = item_meta; + SetCar(car_); + SetSeat(0); SetPos(entity->GetPos()); { MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(DRIVER_BUFFID); @@ -4284,11 +4256,6 @@ void Human::DoGetOnWithLoot(Loot* entity) AddBuff(this, buff_meta, 1); } } - #if 0 - car_.driver = this; - car_.passengers.clear(); - car_.passengers.insert(this); - #endif CancelAction(); SyncAroundPlayers(__FILE__, __LINE__, __func__); room->TakeOnCarObject(car_->car_uniid); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 9d15893..b0ff57d 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -11,6 +11,7 @@ #include "obstacle.h" #include "building.h" #include "loot.h" +#include "car.h" #include "app.h" #include "collider.h" #include "typeconvert.h" @@ -794,13 +795,15 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google: if (GetCar()) { abort(); } - SetCar(room->CreateCar - ( - this, - car_uniid, - item_meta, - GetPos() - )); + Car* car = room->CreateCar + ( + this, + item_meta, + GetPos() + ); + car->car_uniid = car_uniid; + SetCar(car); + SetSeat(0); } } break; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 14d7796..1c8268c 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -19,6 +19,7 @@ #include "roomobstacle.h" #include "building.h" #include "loot.h" +#include "car.h" #include "roommgr.h" #include "app.h" #include "gamelog.h" @@ -523,7 +524,6 @@ void Room::CreateBullet(Human* hum, } Car* Room::CreateCar(Human* driver, - int car_uniid, MetaData::Equip* meta, const a8::Vec2& pos) { @@ -565,6 +565,13 @@ void Room::RemoveObjectLater(RoomEntity* entity) entity->room->RemoveFromHuamnHash((Human*)entity); } break; + case ET_Car: + { + entity->BroadcastDeleteState(entity->room); + entity->room->grid_service->DelCar((Car*)entity); + entity->room->RemoveFromMoveableHash((Car*)entity); + } + break; default: { abort(); diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 5bb2f94..5aa8393 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -108,7 +108,6 @@ public: float fly_distance, bool is_tank_skin = false); Car* CreateCar(Human* driver, - int car_uniid, MetaData::Equip* meta, const a8::Vec2& pos); @@ -157,9 +156,9 @@ public: void OnZombieAppear(Human* hum); int GetAliveCountByRace(RaceType_e race); int GetOnlinePlayerNum(); + int AllocUniid(); private: - int AllocUniid(); void ShuaAndroid(); void ShowAndroid(Human* target, int num); void CreateAndroid(int android_num);