From 061a45c188c8ca5f1e5e58ec2a65564ab5540fd2 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 2 Apr 2019 16:05:00 +0800 Subject: [PATCH] 1 --- server/gameserver/player.cc | 33 ++++++++++++++++++++++++++++++++- server/gameserver/room.cc | 2 ++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index e3aa2ab..4452ba4 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -275,11 +275,13 @@ void Player::LootInteraction(Loot* entity) 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]; } @@ -290,7 +292,6 @@ void Player::LootInteraction(Loot* entity) SendNotifyMsg(notifymsg); return; } - weapon->weapon_idx = 0; weapon->weapon_id = entity->item_id; weapon->weapon_lv = 1; weapon->num = 0; @@ -355,6 +356,7 @@ void Player::_CMDropItem(f8::MsgHdr& hdr, const cs::CMDropItem& msg) if (msg.weapon_idx() >= 0 && msg.weapon_idx() < weapons.size()) { bool drop_ok = false; Weapon* weapon = &weapons[msg.weapon_idx()]; + int weapon_id = weapon->weapon_id; if (weapon->weapon_id != 0) { if (weapon->weapon_idx == 0) { if (weapon->weapon_id != default_weapon.weapon_id) { @@ -385,6 +387,30 @@ void Player::_CMDropItem(f8::MsgHdr& hdr, const cs::CMDropItem& msg) } } if (drop_ok) { + #if 1 + { + MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon_id); + if (equip_meta) { + Loot* entity = new Loot(); + entity->room = room; + entity->meta = equip_meta; + entity->entity_uniid = room->AllocUniid(); + { + Vector2D dir = Vector2D::UP; + dir.Rotate(a8::RandAngle()); + entity->pos = pos + dir * (5 + rand() % 50); + } + entity->item_id = weapon_id; + entity->count = 1; + entity->Initialize(); + room->uniid_hash_[entity->entity_uniid] = entity; + for (auto& pair : room->human_hash_) { + pair.second->new_objects.insert(entity); + pair.second->part_objects.insert(entity); + } + } + } + #endif for (auto& pair : room->human_hash_) { pair.second->new_objects.insert(this); } @@ -423,6 +449,11 @@ void Player::_CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg) void Player::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) { player_data->set_has_action(false); + player_data->set_cur_weapon_idx(curr_weapon->weapon_idx); + for (auto& weapon : weapons) { + auto p = player_data->add_weapons(); + weapon.ToPB(p); + } } void Player::FillMFGasData(cs::MFGasData* gas_data) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 00e9479..819be1a 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -479,7 +479,9 @@ void Room::UpdateGas() gas_data.pos_old = gas_data.pos_old_bk + dir * distance; } if (gas_data.rad_old - distance <= gas_data.rad_new) { + #if 0 assert(gas_data.pos_new == gas_data.pos_old); + #endif } } if (std::abs(gas_data.gas_progress - gas_data.rad_new) <= 0.001f) {