Merge pull request #2674 from VOREStation/aro-thatbugfix

Fixes Exploit with Power Tools
This commit is contained in:
Arokha Sieyes
2018-01-04 03:28:19 -05:00
committed by GitHub
3 changed files with 79 additions and 12 deletions

View File

@@ -60,13 +60,27 @@
throwforce = 8
attack_verb = list("drilled", "screwed", "jabbed")
toolspeed = 0.25
var/obj/item/weapon/screwdriver/power/counterpart = null
/obj/item/weapon/wrench/power/New(newloc, no_counterpart = TRUE)
..(newloc)
if(!counterpart && no_counterpart)
counterpart = new(src, FALSE)
counterpart.counterpart = src
/obj/item/weapon/wrench/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
return ..()
/obj/item/weapon/wrench/power/attack_self(mob/user)
playsound(get_turf(user),'sound/items/change_drill.ogg',50,1)
var/obj/item/weapon/screwdriver/power/s_drill = new /obj/item/weapon/screwdriver/power
user.drop_item(src)
counterpart.forceMove(get_turf(src))
src.forceMove(counterpart)
user.put_in_active_hand(counterpart)
to_chat(user, "<span class='notice'>You attach the screw driver bit to [src].</span>")
qdel(src)
user.put_in_active_hand(s_drill)
/*
* Screwdriver
@@ -168,13 +182,27 @@
usesound = 'sound/items/drill_use.ogg'
toolspeed = 0.25
random_color = FALSE
var/obj/item/weapon/wrench/power/counterpart = null
/obj/item/weapon/screwdriver/power/New(newloc, no_counterpart = TRUE)
..(newloc)
if(!counterpart && no_counterpart)
counterpart = new(src, FALSE)
counterpart.counterpart = src
/obj/item/weapon/screwdriver/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
return ..()
/obj/item/weapon/screwdriver/power/attack_self(mob/user)
playsound(get_turf(user),'sound/items/change_drill.ogg',50,1)
var/obj/item/weapon/wrench/power/w_drill = new /obj/item/weapon/wrench/power
user.drop_item(src)
counterpart.forceMove(get_turf(src))
src.forceMove(counterpart)
user.put_in_active_hand(counterpart)
to_chat(user, "<span class='notice'>You attach the bolt driver bit to [src].</span>")
qdel(src)
user.put_in_active_hand(w_drill)
/*
* Wirecutters
@@ -245,13 +273,27 @@
force = 15
toolspeed = 0.25
random_color = FALSE
var/obj/item/weapon/crowbar/power/counterpart = null
/obj/item/weapon/wirecutters/power/New(newloc, no_counterpart = TRUE)
..(newloc)
if(!counterpart && no_counterpart)
counterpart = new(src, FALSE)
counterpart.counterpart = src
/obj/item/weapon/wirecutters/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
return ..()
/obj/item/weapon/wirecutters/power/attack_self(mob/user)
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
var/obj/item/weapon/crowbar/power/pryjaws = new /obj/item/weapon/crowbar/power
user.drop_item(src)
counterpart.forceMove(get_turf(src))
src.forceMove(counterpart)
user.put_in_active_hand(counterpart)
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
qdel(src)
user.put_in_active_hand(pryjaws)
/*
* Welding Tool
@@ -910,13 +952,28 @@
usesound = 'sound/items/jaws_pry.ogg'
force = 15
toolspeed = 0.25
var/obj/item/weapon/wirecutters/power/counterpart = null
/obj/item/weapon/crowbar/power/New(newloc, no_counterpart = TRUE)
..(newloc)
if(!counterpart && no_counterpart)
counterpart = new(src, FALSE)
counterpart.counterpart = src
/obj/item/weapon/crowbar/power/Destroy()
if(counterpart)
counterpart.counterpart = null // So it can qdel cleanly.
qdel_null(counterpart)
return ..()
/obj/item/weapon/crowbar/power/attack_self(mob/user)
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
var/obj/item/weapon/wirecutters/power/cutjaws = new /obj/item/weapon/wirecutters/power
user.drop_item(src)
counterpart.forceMove(get_turf(src))
src.forceMove(counterpart)
user.put_in_active_hand(counterpart)
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
qdel(src)
user.put_in_active_hand(cutjaws)
/*/obj/item/weapon/combitool
name = "combi-tool"

View File

@@ -149,6 +149,11 @@
set category = "Object"
set src = usr
if(world.time <= next_click) // This isn't really a 'click' but it'll work for our purposes.
return
next_click = world.time + 1
if(istype(loc,/obj/mecha)) return
if(hand)

View File

@@ -936,6 +936,11 @@
set category = "IC"
set src = usr
if(world.time <= next_click) // Hard check, before anything else, to avoid crashing
return
next_click = world.time + 1
var/obj/item/W = get_active_hand()
if (W)
W.attack_self(src)