diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index db1b771..ff8b100 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3160,6 +3160,7 @@ void Human::GMAddItem(int item_id, int item_num) dto.item_level = 1; dto.handled = false; dto.item_meta = item_meta; + ProcAddItemDto(dto); need_sync_active_player = true; SyncAroundPlayers(__FILE__, __LINE__, __func__); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 2cf54c2..bdcd358 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -541,132 +541,14 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google: handled_items.insert(equip_id); MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(equip_id); if (item_meta) { - switch (item_meta->i->equip_type()) { - case EQUIP_TYPE_WEAPON: - { - //装备 - if (item_meta->i->equip_subtype() == 1) { - //近战 - if (default_weapon.weapon_id == weapons[0].weapon_id) { - weapons[0].weapon_idx = 0; - weapons[0].weapon_id = equip_id; - weapons[0].weapon_lv = std::max(1, GetWeaponConfigLv(weapons[0].weapon_id)); - weapons[0].ammo = 0; - weapons[0].meta = item_meta; - weapons[0].Recalc(); - } - } else { - Weapon* weapon = TakeonWeapon(item_meta); - if (weapon) { - weapon->weapon_id = item_meta->i->id(); - weapon->weapon_lv = std::max(1, 1); - weapon->ammo = 0; - weapon->meta = item_meta; - weapon->Recalc(); - if (GetCurrWeapon() != weapon) { - SetCurrWeapon(weapon); - } - } - } - } - break; - case EQUIP_TYPE_CAR: - { - int car_uniid = room->CreateAndTakeonCar(item_meta->i->id(), GetPos()); - if (car_uniid != -1) { - if (GetCar()) { - abort(); - } - Car* car = room->CreateCar - ( - this, - car_uniid, - item_meta, - GetPos(), - team_id - ); - car->GetOn(this); - } - } - break; - default: - { - if (item_meta->i->_inventory_slot() >= 0 && - item_meta->i->_inventory_slot() < IS_END) { - if (GetInventory(item_meta->i->_inventory_slot()) >= - GetVolume(item_meta->i->_inventory_slot()) - ) { - break; - } - int add_num = GetVolume(item_meta->i->_inventory_slot()) - - GetInventory(item_meta->i->_inventory_slot()); - add_num = std::min(1, add_num); - - AddInventory(item_meta->i->_inventory_slot(), add_num); - if (item_meta->i->_inventory_slot() == 5 || - item_meta->i->_inventory_slot() == 6) { - Weapon* weapon = &weapons[3 + (item_meta->i->_inventory_slot() - 5)]; - weapon->weapon_id = equip_id; - weapon->weapon_lv = 1; - weapon->ammo += 1; - weapon->meta = item_meta; - weapon->Recalc(); - DecInventory(item_meta->i->_inventory_slot(), add_num); - } - if (item_meta->i->_inventory_slot() > 12) { - if (item_meta->i->_inventory_slot() - 12 > curr_scope_idx) { - curr_scope_idx = item_meta->i->_inventory_slot() - 12; - } - } - } else { - switch (item_meta->i->equip_type()) { - case 7: - { - //背包 - MetaData::Equip* old_item_meta = MetaMgr::Instance()->GetEquip(backpack); - if (old_item_meta) { - if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) { - break; - } - room->DropItem(GetPos(), old_item_meta->i->id(), 1, 1); - } - backpack = item_meta->i->id(); - RecalcVolume(); - } - break; - case 4: - { - //防具 - if (item_meta->i->equip_subtype() == 1) { - //盔甲 - MetaData::Equip* old_item_meta = MetaMgr::Instance()->GetEquip(chest); - if (old_item_meta) { - if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) { - break; - } - room->DropItem(GetPos(), old_item_meta->i->id(), 1, 1); - } - chest = item_meta->i->id(); - RecalcBaseAttr(); - } else if (item_meta->i->equip_subtype() == 2) { - //头盔 - MetaData::Equip* old_item_meta = MetaMgr::Instance()->GetEquip(helmet); - if (old_item_meta) { - if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) { - break; - } - room->DropItem(GetPos(), old_item_meta->i->id(), 1, 1); - } - helmet = item_meta->i->id(); - RecalcBaseAttr(); - } - } - break; - } - } - } - break; - } + AddItemDTO dto; + dto.uniid = 0; + dto.item_id = item_meta->i->id(); + dto.count = 1; + dto.item_level = 1; + dto.handled = false; + dto.item_meta = item_meta; + ProcAddItemDto(dto); } }//end for if (GetCurrWeapon()) { @@ -679,8 +561,7 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google: } for (auto& spec_weapon : spec_weapons) { MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(second_weapon.weapon_id); - if (item_meta && - item_meta->i->equip_type() == EQUIP_TYPE_WEAPON) { + if (item_meta) { if (item_meta->i->equip_subtype() != 1) { int weapon_idx = GUN_SLOT1; if (weapons[weapon_idx].weapon_id != 0) { @@ -700,7 +581,7 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google: } } need_sync_active_player = true; - if (prepare_items.size() > 0) { + if (!prepare_items.empty()) { SyncAroundPlayers(__FILE__, __LINE__, __func__); } } diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 370b5b2..6856b08 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -79,7 +79,7 @@ Player* PlayerMgr::CreatePlayerByCMJoin(Player* hum, for (auto& weapon : msg.weapons()) { if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) { MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon.weapon_id()); - if (equip_meta) { + if (equip_meta && equip_meta->i->equip_type() == EQUIP_TYPE_WEAPON) { hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv(); Weapon& spec_weapon = a8::FastAppend(hum->spec_weapons); spec_weapon.weapon_id = weapon.weapon_id();