diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 77b61dc..0798cfe 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -404,95 +404,9 @@ void Player::Shot() return; } - Shot(); - if (!curr_weapon->meta) { - return; - } - - if (curr_weapon->weapon_idx != 0 && - curr_weapon->ammo <= 0) { - AutoLoadingBullet(); - return; - } - - if (action_type == AT_Reload) { - CancelAction(); - } - if (action_type == AT_Reload || - action_type == AT_Rescue || - action_type == AT_UseItem || - action_type == AT_Relive) { - CancelAction(); - } - - InternalShot(this, - curr_weapon->meta, - curr_weapon->GetUpgradeMeta(), - curr_weapon->bullet_meta, - curr_weapon->weapon_lv, - 0, - fly_distance, - false); - - if (curr_weapon->weapon_idx != 0) { - --curr_weapon->ammo; - } - int slot_id = curr_weapon->meta->i->_inventory_slot(); - //扔完手雷,如无手雷,则优先换武器1>武器2 - switch (slot_id) { - case IS_FRAG: - { - //手雷 - if (curr_weapon->ammo <= 0) { - if (GetInventory(slot_id) > 0) { - DecInventory(slot_id, 1); - ++curr_weapon->ammo; - } else { - int weapon_idx = curr_weapon->weapon_idx; - *curr_weapon = Weapon(); - curr_weapon->weapon_idx = weapon_idx; - if (weapons[SMOKE_SLOT].weapon_id != 0) { - curr_weapon = &weapons[SMOKE_SLOT]; - } else { - AutoChgWeapon(); - } - AutoLoadingBullet(); - } - } - need_sync_active_player = true; - SyncAroundPlayers(__FILE__, __LINE__, __func__); - } - break; - case IS_SMOKE: - { - //烟雾弹 - if (curr_weapon->ammo <= 0) { - if (GetInventory(slot_id) > 0) { - DecInventory(slot_id, 1); - ++curr_weapon->ammo; - } else { - int weapon_idx = curr_weapon->weapon_idx; - *curr_weapon = Weapon(); - curr_weapon->weapon_idx = weapon_idx; - if (weapons[FRAG_SLOT].weapon_id != 0) { - curr_weapon = &weapons[FRAG_SLOT]; - } else { - AutoChgWeapon(); - } - AutoLoadingBullet(); - } - } - need_sync_active_player = true; - SyncAroundPlayers(__FILE__, __LINE__, __func__); - } - break; - } - if (curr_weapon->weapon_idx != 0 && - curr_weapon->ammo <= 0) { - AutoLoadingBullet(); - } - last_shot_frameno_ = room->GetFrameNo(); - room->frame_event.AddWeaponAmmoChg(this); + bool shot_ok = false; + a8::Vec2 target_dir = attack_dir; + Creature::Shot(target_dir, shot_ok, fly_distance); } void Player::ProcInteraction()