From efa1bfc6d1da33a2e294bef275147a3696a3ebe4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2019 10:49:55 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 6 +++++- server/gameserver/room.cc | 24 ++++++++++++++++++++---- server/gameserver/room.h | 4 +++- server/gameserver/types.h | 1 - 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4f73dca..a6645f1 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1207,7 +1207,10 @@ void Human::DoGetDown() if (loot_entity && loot_entity->entity_type == ET_Loot) { ((Loot*)loot_entity)->bullet_num = tank_weapon.ammo; } + room->UpdateCarObject(skin_tank.tank_uniid, entity_uniid, pos); + room->TakeOffCarObject(entity_uniid, pos); skin_tank = Skin(); + skin_tank_meta = nullptr; tank_weapon = Weapon(); RecalcSelfCollider(); SyncAroundPlayers(); @@ -2326,7 +2329,7 @@ void Human::ProcLootSkin(Loot* entity, MetaData::Equip* item_meta) Entity* loot_entity = room->GetEntityByUniId(entity_uniid); if (loot_entity && loot_entity->entity_type == ET_Loot) { ((Loot*)loot_entity)->bullet_num = tank_weapon.ammo; - room->UpdateCarObject(skin_tank.tank_uniid, entity_uniid); + room->UpdateCarObject(skin_tank.tank_uniid, loot_entity->entity_uniid, loot_entity->pos); } } skin_tank.tank_uniid = entity->entity_uniid; @@ -2346,6 +2349,7 @@ void Human::ProcLootSkin(Loot* entity, MetaData::Equip* item_meta) RecalcSelfCollider(); RecalcBuff(); SyncAroundPlayers(); + room->TakeOnCarObject(skin_tank.tank_uniid); room->NotifyUiUpdate(); room->frame_event.AddTankBulletNumChg(this); } else { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e407d8a..875f818 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -358,10 +358,9 @@ void Room::CreateThings() if (loot_entity && loot_entity->entity_type == ET_Loot) { ((Loot*)loot_entity)->bullet_num = equip_meta->i->clip_volume(); CarObject car; - car.car_uniid = loot_entity->entity_uniid; car.car_id = equip_meta->i->id(); car.pos = loot_entity->pos; - car_hash_[car.car_uniid] = car; + car_hash_[loot_entity->entity_uniid] = car; } } } @@ -1402,17 +1401,34 @@ void Room::NotifyUiUpdate() &xtimer_attacher.timer_list_); } -void Room::UpdateCarObject(int old_uniid, int new_uniid) +void Room::UpdateCarObject(int old_uniid, int new_uniid, a8::Vec2 pos) { auto itr = car_hash_.find(old_uniid); if (itr != car_hash_.end()) { CarObject new_obj = itr->second; - new_obj.car_uniid = new_uniid; + new_obj.pos = pos; car_hash_[new_uniid] = new_obj; car_hash_.erase(old_uniid); } } +void Room::TakeOnCarObject(int car_uniid) +{ + auto itr = car_hash_.find(car_uniid); + if (itr != car_hash_.end()) { + itr->second.taken = true; + } +} + +void Room::TakeOffCarObject(int car_uniid, a8::Vec2 pos) +{ + auto itr = car_hash_.find(car_uniid); + if (itr != car_hash_.end()) { + itr->second.pos = pos; + itr->second.taken = false; + } +} + void Room::NotifyWxVoip() { xtimer.AddDeadLineTimerAndAttach(0, diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 94c621c..49dd9e8 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -93,7 +93,9 @@ public: float& new_x, float& new_y); void FillSMUiUpdate(cs::SMUiUpdate& msg); void NotifyUiUpdate(); - void UpdateCarObject(int old_uniid, int new_uniid); + void UpdateCarObject(int old_uniid, int new_uniid, a8::Vec2 pos); + void TakeOnCarObject(int car_uniid); + void TakeOffCarObject(int car_uniid, a8::Vec2 pos); private: int AllocUniid(); diff --git a/server/gameserver/types.h b/server/gameserver/types.h index a5a4f41..2c81c8c 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -113,7 +113,6 @@ struct HumanAbility struct CarObject { - int car_uniid = 0; int car_id = 0; a8::Vec2 pos; bool taken = false;