This commit is contained in:
aozhiwei 2019-04-02 15:25:06 +08:00
parent 08ce0b619a
commit 523c92e1c5

View File

@ -267,12 +267,22 @@ void Player::LootInteraction(Loot* entity)
weapons[0].num = 0; weapons[0].num = 0;
need_sync_active_player = true; need_sync_active_player = true;
} }
need_sync_active_player = true;
for (auto& pair : room->human_hash_) {
pair.second->new_objects.insert(this);
}
} else { } else {
Weapon* weapon = nullptr; Weapon* weapon = nullptr;
if (weapons[GUN_SLOT1].weapon_id == 0) { if (weapons[GUN_SLOT1].weapon_id == 0) {
weapon = &weapons[GUN_SLOT1]; weapon = &weapons[GUN_SLOT1];
if (curr_weapon != &weapons[GUN_SLOT2]) {
curr_weapon = &weapons[GUN_SLOT1];
}
} else if (weapons[GUN_SLOT2].weapon_id == 0) { } else if (weapons[GUN_SLOT2].weapon_id == 0) {
weapon = &weapons[GUN_SLOT2]; weapon = &weapons[GUN_SLOT2];
if (curr_weapon != &weapons[GUN_SLOT1]) {
curr_weapon = &weapons[GUN_SLOT2];
}
} }
if (!weapon) { if (!weapon) {
cs::SMPickup notifymsg; cs::SMPickup notifymsg;
@ -280,11 +290,14 @@ void Player::LootInteraction(Loot* entity)
SendNotifyMsg(notifymsg); SendNotifyMsg(notifymsg);
return; return;
} }
weapons[0].weapon_idx = 0; weapon->weapon_idx = 0;
weapons[0].weapon_id = entity->item_id; weapon->weapon_id = entity->item_id;
weapons[0].weapon_lv = 1; weapon->weapon_lv = 1;
weapons[0].num = 0; weapon->num = 0;
need_sync_active_player = true; need_sync_active_player = true;
for (auto& pair : room->human_hash_) {
pair.second->new_objects.insert(this);
}
} }
} }
break; break;
@ -338,7 +351,47 @@ void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg)
void Player::_CMDropItem(f8::MsgHdr& hdr, const cs::CMDropItem& msg) void Player::_CMDropItem(f8::MsgHdr& hdr, const cs::CMDropItem& msg)
{ {
if (msg.has_weapon_idx()) {
if (msg.weapon_idx() >= 0 && msg.weapon_idx() < weapons.size()) {
bool drop_ok = false;
Weapon* weapon = &weapons[msg.weapon_idx()];
if (weapon->weapon_id != 0) {
if (weapon->weapon_idx == 0) {
if (weapon->weapon_id != default_weapon.weapon_id) {
drop_ok = true;
*weapon = default_weapon;
}
} else if (weapon->weapon_idx == GUN_SLOT1) {
drop_ok = true;
*weapon = Weapon();
weapon->weapon_idx = msg.weapon_idx();
if (curr_weapon == weapon) {
if (weapons[GUN_SLOT2].weapon_id != 0) {
curr_weapon = &weapons[GUN_SLOT2];
} else {
curr_weapon = &weapons[0];
}
}
} else if (weapon->weapon_idx == GUN_SLOT2) {
drop_ok = true;
*weapon = Weapon();
weapon->weapon_idx = msg.weapon_idx();
if (curr_weapon == weapon) {
if (weapons[GUN_SLOT1].weapon_id != 0) {
curr_weapon = &weapons[GUN_SLOT1];
} else {
curr_weapon = &weapons[0];
}
}
}
if (drop_ok) {
for (auto& pair : room->human_hash_) {
pair.second->new_objects.insert(this);
}
}
}
}
}
} }
void Player::_CMEmote(f8::MsgHdr& hdr, const cs::CMEmote& msg) void Player::_CMEmote(f8::MsgHdr& hdr, const cs::CMEmote& msg)
@ -425,9 +478,10 @@ void Player::MakeUpdateMsg()
} }
#endif #endif
} }
if (updated_times == 0) { if (updated_times == 0 || need_sync_active_player) {
update_msg->set_active_player_id(entity_uniid); update_msg->set_active_player_id(entity_uniid);
FillMFActivePlayerData(update_msg->mutable_active_player_data()); FillMFActivePlayerData(update_msg->mutable_active_player_data());
need_sync_active_player = true;
} }
if (updated_times == 0 || last_sync_gas_frameno < room->gas_data.gas_start_frameno) { if (updated_times == 0 || last_sync_gas_frameno < room->gas_data.gas_start_frameno) {
last_sync_gas_frameno = room->gas_data.gas_start_frameno; last_sync_gas_frameno = room->gas_data.gas_start_frameno;