This commit is contained in:
aozhiwei 2019-07-11 15:58:45 +08:00
parent a754e09114
commit 9ac84073b1
6 changed files with 17 additions and 306 deletions

View File

@ -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";

View File

@ -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:

View File

@ -82,6 +82,11 @@ namespace MetaData
#endif
}
bool Equip::CanDrop()
{
return i->equip_type() == EquipType_Bullet && MetaMgr::Instance()->fighting_mode;
}
void Player::Init()
{
{

View File

@ -55,6 +55,7 @@ namespace MetaData
std::array<int, IS_END> volume = {};
void Init();
bool CanDrop();
};
struct Player

View File

@ -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;

View File

@ -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();