From 8707e378457251bf56d746a7c3714b3127de9fce Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 23 Dec 2014 21:08:00 +0100 Subject: [PATCH] Fixes russian revolver being abusabled. You can no longer use it on someone other than yourself. Aiming somewhere other than head/eyes/mouth doesn't instakill but still deals damage. You need to spin the chamber after each shooting attempt. Only humans can use the gun. Making a can_trigger_gun() proc that tests if the mob can trigger the gun. --- code/modules/projectiles/gun.dm | 23 ++++---- .../projectiles/guns/projectile/revolver.dm | 53 ++++++++++--------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index f902ae5917d..240b2378209 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -83,23 +83,28 @@ M.drop_item() return + if(isliving(user)) + var/mob/living/L = user + if(!can_trigger_gun(L)) + return + + process_fire(target,user,flag,params) + +/obj/item/weapon/gun/proc/can_trigger_gun(mob/living/user) if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" - return + return 0 if(trigger_guard) - if(istype(user, /mob/living)) - var/mob/living/M = user - if (HULK in M.mutations) - M << "Your meaty finger is much too large for the trigger guard!" - return + if (HULK in user.mutations) + user << "Your meaty finger is much too large for the trigger guard!" + return 0 if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.dna && NOGUNS in H.dna.species.specflags) user << "Your fingers don't fit in the trigger guard!" - return - - process_fire(target,user,flag,params) + return 0 + return 1 /obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 49727229591..c829cff0c4a 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -175,7 +175,7 @@ return /obj/item/weapon/gun/projectile/revolver/russian/attack_self(mob/user as mob) - if(!spun && get_ammo(0,0)) + if(!spun && can_shoot()) user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") Spin() else @@ -193,34 +193,35 @@ user << "[src] is empty." /obj/item/weapon/gun/projectile/revolver/russian/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) - if(!spun && get_ammo(0,0)) - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") - Spin() - ..() - spun = 0 - -/obj/item/weapon/gun/projectile/revolver/russian/attack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj) - if(!spun && get_ammo(0,0)) - user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") - Spin() + if(user.a_intent == "harm") // Flogging action + return + if(isliving(user)) + if(!can_trigger_gun(user)) + return + if(target != user) + user << "A mechanism prevents you from shooting anyone but yourself." return - - if(target == user) - if(!chambered) - user.visible_message("*click*", "*click*") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(!spun) + user << "You need to spin the revolver's chamber first." return - if(isliving(target) && isliving(user)) - var/obj/item/organ/limb/affecting = user.zone_sel.selecting - if(affecting == "head") - var/obj/item/ammo_casing/AC = chambered - if(AC.fire(user, user)) + spun = 0 + + if(chambered) + var/obj/item/ammo_casing/AC = chambered + if(AC.fire(user, user)) + playsound(user, fire_sound, 50, 1) + var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) + var/limb_name = affecting.getDisplayName() + if(affecting == "head" || affecting == "eyes" || affecting == "mouth") user.apply_damage(300, BRUTE, affecting) - playsound(user, fire_sound, 50, 1) - user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a [istype(AC.BB, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") - return + user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a gunshot!") else - user.visible_message("*click*", "*click*") - return - ..() + user.visible_message("[user.name] cowardly fires [src] at \his [limb_name]!", "You cowardly fire [src] at your [limb_name]!", "You hear a gunshot!") + return + + user.visible_message("*click*") + playsound(user, 'sound/weapons/empty.ogg', 100, 1)