diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 7865917..6ce4aea 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -21,6 +21,10 @@ Car::~Car() void Car::Initialize() { MoveableEntity::Initialize(); + hero_meta_ = MetaMgr::Instance()->GetPlayer(meta->i->heroid()); + if (!hero_meta_) { + abort(); + } } void Car::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) diff --git a/server/gameserver/entityfactory.cc b/server/gameserver/entityfactory.cc index dd34b26..2f7bfef 100644 --- a/server/gameserver/entityfactory.cc +++ b/server/gameserver/entityfactory.cc @@ -8,6 +8,7 @@ #include "bullet.h" #include "android.h" #include "player.h" +#include "car.h" void EntityFactory::Init() { @@ -78,3 +79,11 @@ Player* EntityFactory::MakePlayer(int entity_uniid) hum->entity_subtype_ = EST_Player; return hum; } + +Car* EntityFactory::MakeCar(int entity_uniid) +{ + Car* hum = new Car(); + hum->entity_uniid_ = entity_uniid; + hum->entity_type_ = ET_Car; + return hum; +} diff --git a/server/gameserver/entityfactory.h b/server/gameserver/entityfactory.h index 6a01818..f2389db 100644 --- a/server/gameserver/entityfactory.h +++ b/server/gameserver/entityfactory.h @@ -7,6 +7,7 @@ class Loot; class Bullet; class Android; class Player; +class Car; class EntityFactory : public a8::Singleton { private: @@ -24,6 +25,7 @@ class EntityFactory : public a8::Singleton Bullet* MakeBullet(int entity_uniid); Android* MakeAndroid(int entity_uniid); Player* MakePlayer(int entity_uniid); + Car* MakeCar(int entity_uniid); private: }; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index eb9b5e8..841b2a7 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -549,19 +549,21 @@ void Room::CreateBullet(Human* hum, Car* Room::CreateCar(Human* driver, int car_uniid, - MetaData::Equip* meta, + MetaData::Equip* item_meta, const a8::Vec2& pos) { - Car* car = nullptr; -#if 0 - car_.car_uniid = car_uniid; - car_.car_id = item_meta->i->id(); - car_.meta = item_meta; - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(car_.meta->i->buffid()); + Car* car = EntityFactory::Instance()->MakeCar(car_uniid); + car->meta = item_meta; + car->room = this; + car->SetPos(pos); + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(car->meta->i->buffid()); if (buff_meta) { - AddBuff(this, buff_meta, 1); + driver->AddBuff(driver, buff_meta, 1); } -#endif + car->Initialize(); + AddToEntityHash(car); + grid_service->AddCar(car); + car->BroadcastFullState(this); return car; }