diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 7f57e40..ecd8249 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -487,7 +487,13 @@ void Human::Shot(a8::Vec2& target_dir, bool& shot_ok) } bullet_dir.Rotate(bullet_angle / 180.0f); room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance); - room->CreateBullet(this, curr_weapon, bullet_born_pos, bullet_dir, fly_distance); + room->CreateBullet(this, + curr_weapon->meta, + curr_weapon->GetUpgradeMeta(), + curr_weapon->bullet_meta, + bullet_born_pos, + bullet_dir, + fly_distance); } --curr_weapon->ammo; int slot_id = curr_weapon->meta->i->_inventory_slot(); @@ -581,7 +587,14 @@ void Human::TankShot(a8::Vec2& target_dir) bullet_dir.Rotate(bullet_angle / 180.0f); room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance); if (room->BattleStarted()) { - room->CreateBullet(this, &tank_weapon, bullet_born_pos, bullet_dir, fly_distance, true); + room->CreateBullet(this, + tank_weapon.meta, + tank_weapon.GetUpgradeMeta(), + tank_weapon.bullet_meta, + bullet_born_pos, + bullet_dir, + fly_distance, + true); } } --tank_weapon.ammo; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index dc22641..cbd6f68 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -383,7 +383,13 @@ void Player::Shot() } room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance); if (room->BattleStarted()) { - room->CreateBullet(this, curr_weapon, bullet_born_pos, bullet_dir, fly_distance); + room->CreateBullet(this, + curr_weapon->meta, + curr_weapon->GetUpgradeMeta(), + curr_weapon->bullet_meta, + bullet_born_pos, + bullet_dir, + fly_distance); } } } else { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index c4a2263..f2b8c1a 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -483,16 +483,22 @@ int Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv) } } -void Room::CreateBullet(Human* hum, Weapon* weapon, - a8::Vec2 pos, a8::Vec2 dir, float fly_distance, bool is_tank_skin) +void Room::CreateBullet(Human* hum, + MetaData::Equip* weapon_meta, + MetaData::EquipUpgrade* weapon_upgrade_meta, + MetaData::Equip* bullet_meta, + a8::Vec2 pos, + a8::Vec2 dir, + float fly_distance, + bool is_tank_skin) { if (grid_service->CanAdd(pos.x, pos.y)) { Bullet* bullet = EntityFactory::Instance()->MakeBullet(AllocUniid()); bullet->player = hum; bullet->room = this; - bullet->gun_meta = weapon->meta; - bullet->gun_upgrade_meta = weapon->GetUpgradeMeta(); - bullet->meta = MetaMgr::Instance()->GetEquip(weapon->meta->i->use_bullet()); + bullet->gun_meta = weapon_meta; + bullet->gun_upgrade_meta = weapon_upgrade_meta; + bullet->meta = bullet_meta; bullet->SetPos(pos); bullet->dir = dir; bullet->born_pos = pos; diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 591fe85..f778585 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -89,8 +89,14 @@ public: void DropItem(a8::Vec2 pos, int item_id, int item_count, int item_lv); int CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv); - void CreateBullet(Human* hum, Weapon* weapon, - a8::Vec2 pos, a8::Vec2 dir, float fly_distance, bool is_tank_skin = false); + void CreateBullet(Human* hum, + MetaData::Equip* weapon_meta, + MetaData::EquipUpgrade* weapon_upgrade_meta, + MetaData::Equip* bullet_meta, + a8::Vec2 pos, + a8::Vec2 dir, + float fly_distance, + bool is_tank_skin = false); void OnHumanDie(Human* hum); void OnHumanRevive(Human* hum); diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index 96ccafa..667e895 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -14,6 +14,7 @@ void Weapon::ToPB(cs::MFWeapon* pb_obj) void Weapon::Recalc() { upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id); + bullet_meta = MetaMgr::Instance()->GetEquip(meta->i->use_bullet()); } int Weapon::GetClipVolume() diff --git a/server/gameserver/types.h b/server/gameserver/types.h index ba43604..b982aa2 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -38,6 +38,7 @@ struct Weapon int weapon_lv = 0; int ammo = 0; MetaData::Equip* meta = nullptr; + MetaData::Equip* bullet_meta = nullptr; void ToPB(cs::MFWeapon* pb_obj); void Recalc();