From 9ac84073b1d93d2b44f11d232c8509d874a71edb Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 11 Jul 2019 15:58:45 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 5 + server/gameserver/human.cc | 8 +- server/gameserver/metadata.cc | 5 + server/gameserver/metadata.h | 1 + server/gameserver/player.cc | 301 ---------------------------------- server/gameserver/room.cc | 3 +- 6 files changed, 17 insertions(+), 306 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 2f3428e..db90db7 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -222,6 +222,11 @@ enum HumanAttrType_e HAT_End }; +enum EquipType_e +{ + EquipType_Bullet = 1, +}; + const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4c4b01b..87fa9d0 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1578,8 +1578,7 @@ void Human::DeadDrop() if (inventory_[slot] > 0) { MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquipBySlotId(slot); if (equip_meta) { - if (equip_meta->i->equip_type() == 2 && - MetaMgr::Instance()->fighting_mode) { + if (!equip_meta->CanDrop()) { return; } a8::Vec2 drop_pos = pos; @@ -1748,7 +1747,10 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase) break; case Skill_Shot: { - + MetaData::Equip* bullet_meta = MetaMgr::Instance()->GetEquip(phase->param1.GetInt()); + if (bullet_meta) { + DirectShot(bullet_meta); + } } break; case Skill_SummonObject: diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index be470db..1a4fec8 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -82,6 +82,11 @@ namespace MetaData #endif } + bool Equip::CanDrop() + { + return i->equip_type() == EquipType_Bullet && MetaMgr::Instance()->fighting_mode; + } + void Player::Init() { { diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 11c6bc2..432975a 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -55,6 +55,7 @@ namespace MetaData std::array volume = {}; void Init(); + bool CanDrop(); }; struct Player diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 6a48ed4..d38e1e9 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -307,184 +307,6 @@ void Player::LootInteraction(Loot* entity) if (!item_meta) { return; } - switch (item_meta->i->equip_type()) { - case 1: - { - //装备 - if (item_meta->i->equip_subtype() == 1) { - //近战 - if (default_weapon.weapon_id != weapons[0].weapon_id) { - /* - cs::SMPickup notifymsg; - notifymsg.set_error_code(2); - SendNotifyMsg(notifymsg); - */ - return; - } else { - weapons[0].weapon_idx = 0; - weapons[0].weapon_id = entity->item_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(); - } - need_sync_active_player = true; - SyncAroundPlayers(); - } else { - Weapon* weapon = nullptr; - if (weapons[GUN_SLOT1].weapon_id == 0) { - weapon = &weapons[GUN_SLOT1]; - weapon->weapon_idx = GUN_SLOT1; - if (curr_weapon != &weapons[GUN_SLOT2]) { - curr_weapon = &weapons[GUN_SLOT1]; - } - } else if (weapons[GUN_SLOT2].weapon_id == 0) { - weapon = &weapons[GUN_SLOT2]; - weapon->weapon_idx = GUN_SLOT2; - if (curr_weapon != &weapons[GUN_SLOT1]) { - curr_weapon = &weapons[GUN_SLOT2]; - } - } - if (!weapon) { - /* - cs::SMPickup notifymsg; - notifymsg.set_error_code(2); - SendNotifyMsg(notifymsg); - */ - return; - } - weapon->weapon_id = entity->item_id; - weapon->weapon_lv = std::max(1, GetWeaponConfigLv(weapon->weapon_id)); - weapon->ammo = 0; - weapon->meta = item_meta; - weapon->Recalc(); - AutoLoadingBullet(); - need_sync_active_player = true; - SyncAroundPlayers(); - } - } - break; - case 8: - { - #if 0 - if (item_meta->i->is_luck()) { - if (skin_jlf.skin_id != 0) { - room->DropItem(pos, skin_jlf.skin_id, 1, skin_jlf.skin_lv); - } - skin_jlf.skin_id = entity->item_id; - skin_jlf.skin_lv = std::max(1, GetSkinConfigLv(skin_jlf.skin_id)); - skin_jlf_meta = MetaMgr::Instance()->GetDress(skin_jlf.skin_id); - if (skin_jlf_meta) { - skill_meta = MetaMgr::Instance()->GetSkill(skin_jlf_meta->i->skill_id()); - } else { - skill_meta = nullptr; - } - RecalcBuff(); - SyncAroundPlayers(); - } - #endif - } - break; - default: - { - #if 0 - 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()) - ) { - /* - cs::SMPickup notifymsg; - notifymsg.set_error_code(1); - SendNotifyMsg(notifymsg); - */ - return; - } - int add_num = GetVolume(item_meta->i->_inventory_slot()) - - GetInventory(item_meta->i->_inventory_slot()); - add_num = std::min(entity->count, 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 = entity->item_id; - weapon->weapon_lv = 1; - weapon->ammo += entity->count; - 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; - } - } - if (add_num < entity->count) { - //刷新数量 - entity->count -= add_num; - entity->BroadcastFullState(); - return; - } - } else { - switch (item_meta->i->equip_type()) { - case 7: - { - #if 0 - //背包 - 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()) { - return; - } - room->DropItem(pos, old_item_meta->i->id(), 1, 1); - } - backpack = item_meta->i->id(); - RecalcVolume(); - #endif - } - break; - case 4: - { - #if 0 - //防具 - 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()) { - return; - } - room->DropItem(pos, old_item_meta->i->id(), 1, 1); - } - chest = item_meta->i->id(); - RecalcAttr(); - } 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()) { - return; - } - room->DropItem(pos, old_item_meta->i->id(), 1, 1); - } - helmet = item_meta->i->id(); - RecalcAttr(); - } - #endif - } - break; - } - } - #endif - if (action_type == AT_None) { - AutoLoadingBullet(); - } - need_sync_active_player = true; - SyncAroundPlayers(); - } - break; - } entity->pickuped = true; room->RemoveObjectLater(entity); } @@ -524,129 +346,6 @@ 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 1: - { - //装备 - 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 = nullptr; - if (weapons[GUN_SLOT1].weapon_id == 0) { - weapon = &weapons[GUN_SLOT1]; - weapon->weapon_idx = GUN_SLOT1; - if (curr_weapon != &weapons[GUN_SLOT2]) { - curr_weapon = &weapons[GUN_SLOT1]; - } - } else if (weapons[GUN_SLOT2].weapon_id == 0) { - weapon = &weapons[GUN_SLOT2]; - weapon->weapon_idx = GUN_SLOT2; - if (curr_weapon != &weapons[GUN_SLOT1]) { - curr_weapon = &weapons[GUN_SLOT2]; - } - } - if (weapon) { - weapon->weapon_id = equip_id; - weapon->weapon_lv = std::max(1, GetWeaponConfigLv(weapon->weapon_id)); - weapon->ammo = 0; - weapon->meta = item_meta; - weapon->Recalc(); - } - } - } - break; - default: - { - #if 0 - 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: - { - #if 0 - //背包 - 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(pos, old_item_meta->i->id(), 1, 1); - } - backpack = item_meta->i->id(); - RecalcVolume(); - #endif - } - break; - case 4: - { - #if 0 - //防具 - 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(pos, old_item_meta->i->id(), 1, 1); - } - chest = item_meta->i->id(); - RecalcAttr(); - } 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(pos, old_item_meta->i->id(), 1, 1); - } - helmet = item_meta->i->id(); - RecalcAttr(); - } - #endif - } - break; - } - } - #endif - } - break; - } } }//end for need_sync_active_player = true; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 91ba6df..408a8a8 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -511,8 +511,7 @@ void Room::CreateLoot(int equip_id, a8::Vec2 pos, int count, int equip_lv) { MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id); if (equip_meta) { - if (equip_meta->i->equip_type() == 2 && - MetaMgr::Instance()->fighting_mode) { + if (!equip_meta->CanDrop()) { return; } Loot* entity = new Loot();