Merge branch 'master' into botFixes

This commit is contained in:
Kelenius
2016-03-01 14:48:24 +03:00
435 changed files with 7227 additions and 12036 deletions
@@ -165,19 +165,18 @@
if(1)
for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion
A.forceMove(src.loc)
A.ex_act(severity++)
A.ex_act(severity + 1)
qdel(src)
if(2)
if(prob(50))
for (var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
A.ex_act(severity++)
A.ex_act(severity + 1)
qdel(src)
if(3)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
A.ex_act(severity++)
qdel(src)
/obj/structure/closet/proc/damage(var/damage)
@@ -318,8 +317,6 @@
return 1
/obj/structure/closet/proc/req_breakout()
if(breakout)
return 0 //Already breaking out.
if(opened)
return 0 //Door's open... wait, why are you in it's contents then?
if(!welded)
@@ -329,10 +326,7 @@
/obj/structure/closet/proc/mob_breakout(var/mob/living/escapee)
var/breakout_time = 2 //2 minutes by default
if(!req_breakout())
return
if(!escapee.canClick())
if(breakout || !req_breakout())
return
escapee.setClickCooldown(100)
@@ -340,17 +334,14 @@
//okay, so the closet is either welded or locked... resist!!!
escapee << "<span class='warning'>You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)</span>"
visible_message("<span class='danger'>The [src] begins to shake violently!</span>")
visible_message("<span class='danger'>\The [src] begins to shake violently!</span>")
breakout = 1 //can't think of a better way to do this right now.
for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2
playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1)
animate_shake()
if(!do_after(escapee, 50)) //5 seconds
breakout = 0
return
if(!escapee || escapee.stat || escapee.loc != src)
if(!escapee || escapee.incapacitated() || escapee.loc != src)
breakout = 0
return //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
//Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
@@ -358,10 +349,14 @@
breakout = 0
return
playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1)
animate_shake()
add_fingerprint(escapee)
//Well then break it!
breakout = 0
escapee << "<span class='warning'>You successfully break out!</span>"
visible_message("<span class='danger'>\the [escapee] successfully broke out of \the [src]!</span>")
visible_message("<span class='danger'>\The [escapee] successfully broke out of \the [src]!</span>")
playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1)
break_open()
animate_shake()
@@ -93,11 +93,24 @@
/obj/structure/closet/lawcloset/New()
..()
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/suit/storage/toggle/internalaffairs(src)
new /obj/item/clothing/suit/storage/toggle/internalaffairs(src)
new /obj/item/clothing/under/lawyer/bluesuit(src)
new /obj/item/clothing/under/lawyer/bluesuit(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket(src)
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/suit/storage/lawyer/purpjacket(src)
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/clothing/shoes/laceup(src)
@@ -66,11 +66,12 @@
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
user.drop_item()
if (W) W.forceMove(src.loc)
else if(istype(W, /obj/item/weapon/card/id))
else if(W.GetID())
var/obj/item/weapon/card/id/I = W.GetID()
if(src.broken)
user << "<span class='warning'>It appears to be broken.</span>"
return
var/obj/item/weapon/card/id/I = W
if(!I || !I.registered_name) return
if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name)))
//they can open all lockers, or nobody owns this, or they own this locker
@@ -90,7 +90,7 @@
else
togglelock(user)
/obj/structure/closet/secure_closet/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
/obj/structure/closet/secure_closet/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "")
if(!broken)
broken = 1
locked = 0
@@ -100,8 +100,11 @@
if(visual_feedback)
visible_message(visual_feedback, audible_feedback)
else if(user && emag_source)
visible_message("<span class='warning'>\The [src] has been broken by \the [user] with \an [emag_source]!</span>", "You hear a faint electrical spark.")
else
visible_message("<span class='warning'>The locker has been broken by [user] with an electromagnetic card!</span>", "You hear a faint electrical spark.")
visible_message("<span class='warning'>\The [src] sparks and breaks open!</span>", "You hear a faint electrical spark.")
return 1
/obj/structure/closet/secure_closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
@@ -126,8 +129,11 @@
/obj/structure/closet/secure_closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
overlays.Cut()
if(!opened)
if(locked)
if(broken)
icon_state = icon_off
else if(locked)
icon_state = icon_locked
else
icon_state = icon_closed
@@ -136,24 +142,12 @@
else
icon_state = icon_opened
/obj/structure/closet/secure_closet/req_breakout()
if(!opened && locked) return 1
return ..() //It's a secure closet, but isn't locked.
/obj/structure/closet/secure_closet/break_open()
desc += " It appears to be broken."
icon_state = icon_off
spawn()
flick(icon_broken, src)
sleep(10)
flick(icon_broken, src)
sleep(10)
broken = 1
locked = 0
update_icon()
//Do this to prevent contents from being opened into nullspace (read: bluespace)
if(istype(loc, /obj/structure/bigDelivery))
var/obj/structure/bigDelivery/BD = loc
BD.unwrap()
open()
..()
@@ -125,7 +125,8 @@
new /obj/item/taperoll/police(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/shield/riot/tele(src)
new /obj/item/clothing/accessory/badge/hos(src)
new /obj/item/weapon/storage/box/holobadge/hos(src)
new /obj/item/clothing/accessory/badge/holo/hos(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
@@ -135,6 +136,7 @@
new /obj/item/weapon/melee/telebaton(src)
new /obj/item/clothing/head/beret/sec/corporate/hos(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src)
new /obj/item/device/flashlight/maglight(src)
return
@@ -169,7 +171,7 @@
new /obj/item/device/radio/headset/headset_sec/alt(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src)
new /obj/item/taperoll/police(src)
new /obj/item/clothing/accessory/badge/warden(src)
new /obj/item/clothing/accessory/badge/holo/warden(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
@@ -178,6 +180,7 @@
new /obj/item/weapon/storage/box/holobadge(src)
new /obj/item/clothing/head/beret/sec/corporate/warden(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src)
new /obj/item/device/flashlight/maglight(src)
return
@@ -220,6 +223,7 @@
new /obj/item/ammo_magazine/c45m/rubber(src)
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src)
new /obj/item/device/flashlight/maglight(src)
return
@@ -277,7 +281,7 @@
new /obj/item/clothing/suit/storage/det_trench/grey(src)
new /obj/item/clothing/suit/storage/forensics/blue(src)
new /obj/item/clothing/suit/storage/forensics/red(src)
new /obj/item/clothing/accessory/badge/detective(src)
new /obj/item/clothing/accessory/badge/holo/detective(src)
new /obj/item/clothing/gloves/black(src)
new /obj/item/clothing/head/det(src)
new /obj/item/clothing/head/det/grey(src)
@@ -533,6 +533,7 @@
new /obj/item/clothing/suit/armor/tactical(src)
new /obj/item/clothing/head/helmet/tactical(src)
new /obj/item/clothing/mask/balaclava/tactical(src)
new /obj/item/clothing/mask/balaclava(src)
new /obj/item/clothing/glasses/sunglasses/sechud/tactical(src)
if(prob(25))
new /obj/item/weapon/storage/belt/security/tactical/bandolier(src)
@@ -556,10 +557,12 @@
new /obj/item/clothing/under/rank/centcom(src)
new /obj/item/clothing/under/ert(src)
new /obj/item/clothing/under/syndicate/combat(src)
new /obj/item/device/radio/headset/ert(src)
new /obj/item/device/radio/headset/ert/alt(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/shoes/swat(src)
new /obj/item/clothing/gloves/swat(src)
new /obj/item/clothing/mask/balaclava/tactical(src)
new /obj/item/clothing/mask/balaclava(src)
new /obj/item/clothing/mask/bandana/skull(src)
new /obj/item/clothing/mask/bandana/skull(src)
return
+28 -23
View File
@@ -127,13 +127,12 @@
var/obj/effect/mist/mymist = null
var/ismist = 0 //needs a var so we can make it linger~
var/watertemp = "normal" //freezing, normal, or boiling
var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process()
var/is_washing = 0
var/list/temperature_settings = list("normal" = 310, "boiling" = T0C+100, "freezing" = T0C)
/obj/machinery/shower/New()
..()
create_reagents(2)
create_reagents(50)
//add heat controls? when emagged, you can freeze to death in it?
@@ -171,6 +170,7 @@
overlays.Cut() //once it's been on for a while, in addition to handling the water overlay.
if(mymist)
qdel(mymist)
mymist = null
if(on)
overlays += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
@@ -190,20 +190,9 @@
spawn(250)
if(src && !on)
qdel(mymist)
mymist = null
ismist = 0
/obj/machinery/shower/Crossed(atom/movable/O)
..()
wash(O)
if(ismob(O))
mobpresent += 1
process_heat(O)
/obj/machinery/shower/Uncrossed(atom/movable/O)
if(ismob(O))
mobpresent -= 1
..()
//Yes, showers are super powerful as far as washing goes.
/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob)
if(!on) return
@@ -292,24 +281,30 @@
if(isturf(loc))
var/turf/tile = loc
loc.clean_blood()
for(var/obj/effect/E in tile)
if(istype(E,/obj/effect/rune) || istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay))
qdel(E)
reagents.splash(O, 10)
/obj/machinery/shower/process()
if(!on) return
for(var/thing in loc)
var/atom/movable/AM = thing
var/mob/living/L = thing
if(istype(AM) && AM.simulated)
wash(AM)
if(istype(L))
process_heat(L)
wash_floor()
if(!mobpresent) return
for(var/mob/living/L in loc)
process_heat(L)
reagents.add_reagent("water", reagents.get_free_space())
/obj/machinery/shower/proc/wash_floor()
if(!ismist && is_washing)
return
is_washing = 1
var/turf/T = get_turf(src)
reagents.add_reagent("water", 2)
reagents.splash(T, reagents.total_volume)
T.clean(src)
spawn(100)
is_washing = 0
@@ -345,6 +340,20 @@
anchored = 1
var/busy = 0 //Something's being washed at the moment
/obj/structure/sink/MouseDrop_T(var/obj/item/thing, var/mob/user)
..()
if(!istype(thing) || !thing.is_open_container())
return ..()
if(!usr.Adjacent(src))
return ..()
if(!thing.reagents || thing.reagents.total_volume == 0)
usr << "<span class='warning'>\The [thing] is empty.</span>"
return
// Clear the vessel.
visible_message("<span class='notice'>\The [usr] tips the contents of \the [thing] into \the [src].</span>")
thing.reagents.clear_reagents()
thing.update_icon()
/obj/structure/sink/attack_hand(mob/user as mob)
if (ishuman(user))
var/mob/living/carbon/human/H = user
@@ -408,9 +417,6 @@
"<span class='danger'>[user] was stunned by \his wet [O]!</span>", \
"<span class='userdanger'>[user] was stunned by \his wet [O]!</span>")
return 1
// Short of a rewrite, this is necessary to stop monkeycubes being washed.
else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
return
else if(istype(O, /obj/item/weapon/mop))
O.reagents.add_reagent("water", 5)
user << "<span class='notice'>You wet \the [O] in \the [src].</span>"
@@ -443,7 +449,6 @@
name = "kitchen sink"
icon_state = "sink_alt"
/obj/structure/sink/puddle //splishy splashy ^_^
name = "puddle"
icon_state = "puddle"
+4 -4
View File
@@ -135,7 +135,7 @@
return 1
if(is_full_window())
return 0 //full tile window, you can't move into it!
if(get_dir(loc, target) == dir)
if(get_dir(loc, target) & dir)
return !density
else
return 1
@@ -187,8 +187,8 @@
playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1)
user.do_attack_animation(src)
usr.visible_message("<span class='danger'>[usr.name] bangs against the [src.name]!</span>",
"<span class='danger'>You bang against the [src.name]!</span>",
usr.visible_message("<span class='danger'>\The [usr] bangs against \the [src]!</span>",
"<span class='danger'>You bang against \the [src]!</span>",
"You hear a banging sound.")
else
playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1)
@@ -295,7 +295,7 @@
if(usr.incapacitated())
return 0
if(anchored)
usr << "It is fastened to the floor therefore you can't rotate it!"
return 0