Holodeck rack exploit fix

This commit is contained in:
Markolie
2015-09-23 02:50:54 +02:00
parent 86b7312492
commit e020a8716b
2 changed files with 148 additions and 195 deletions
+145 -192
View File
@@ -12,153 +12,144 @@
light_color = LIGHT_COLOR_CYAN
attack_ai(var/mob/user as mob)
return src.attack_hand(user)
/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
return attack_hand(user)
attack_hand(var/mob/user as mob)
/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob)
if(..())
return 1
user.set_machine(src)
var/dat
if(..())
return
user.set_machine(src)
var/dat
dat += "<B>Holodeck Control System</B><BR>"
dat += "<HR>Current Loaded Programs:<BR>"
dat += "<B>Holodeck Control System</B><BR>"
dat += "<HR>Current Loaded Programs:<BR>"
dat += "<A href='?src=\ref[src];emptycourt=1'>((Empty Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];boxingcourt=1'>((Boxing Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];basketball=1'>((Basketball Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];thunderdomecourt=1'>((Thunderdome Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];beach=1'>((Beach)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];desert=1'>((Desert)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];space=1'>((Space)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];picnicarea=1'>((Picnic Area)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];snowfield=1'>((Snow Field)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];theatre=1'>((Theatre)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];meetinghall=1'>((Meeting Hall)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];emptycourt=1'>((Empty Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];boxingcourt=1'>((Boxing Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];basketball=1'>((Basketball Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];thunderdomecourt=1'>((Thunderdome Court)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];beach=1'>((Beach)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];desert=1'>((Desert)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];space=1'>((Space)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];picnicarea=1'>((Picnic Area)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];snowfield=1'>((Snow Field)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];theatre=1'>((Theatre)</font>)</A><BR>"
dat += "<A href='?src=\ref[src];meetinghall=1'>((Meeting Hall)</font>)</A><BR>"
// dat += "<A href='?src=\ref[src];turnoff=1'>((Shutdown System)</font>)</A><BR>"
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
if(emagged)
if(emagged)
/* dat += "<A href='?src=\ref[src];burntest=1'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>"*/
dat += "<A href='?src=\ref[src];wildlifecarp=1'>(<font color=red>Begin Wildlife Simulation</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>"
if(issilicon(user))
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
else
if(issilicon(user))
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
dat += "<BR>"
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>"*/
dat += "<A href='?src=\ref[src];wildlifecarp=1'>(<font color=red>Begin Wildlife Simulation</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
dat += "<BR>"
if(issilicon(user))
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
else
if(issilicon(user))
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
dat += "<BR>"
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/HolodeckControl/Topic(href, href_list)
if(..())
return 1
return
if(href_list["emptycourt"])
target = locate(/area/holodeck/source_emptycourt)
if(target)
loadProgram(target)
else if(href_list["boxingcourt"])
target = locate(/area/holodeck/source_boxingcourt)
if(target)
loadProgram(target)
Topic(href, href_list)
if(..())
return
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
else if(href_list["basketball"])
target = locate(/area/holodeck/source_basketball)
if(target)
loadProgram(target)
if(href_list["emptycourt"])
target = locate(/area/holodeck/source_emptycourt)
if(target)
loadProgram(target)
else if(href_list["thunderdomecourt"])
target = locate(/area/holodeck/source_thunderdomecourt)
if(target)
loadProgram(target)
else if(href_list["boxingcourt"])
target = locate(/area/holodeck/source_boxingcourt)
if(target)
loadProgram(target)
else if(href_list["beach"])
target = locate(/area/holodeck/source_beach)
if(target)
loadProgram(target)
else if(href_list["basketball"])
target = locate(/area/holodeck/source_basketball)
if(target)
loadProgram(target)
else if(href_list["desert"])
target = locate(/area/holodeck/source_desert)
if(target)
loadProgram(target)
else if(href_list["thunderdomecourt"])
target = locate(/area/holodeck/source_thunderdomecourt)
if(target)
loadProgram(target)
else if(href_list["space"])
target = locate(/area/holodeck/source_space)
if(target)
loadProgram(target)
else if(href_list["beach"])
target = locate(/area/holodeck/source_beach)
if(target)
loadProgram(target)
else if(href_list["picnicarea"])
target = locate(/area/holodeck/source_picnicarea)
if(target)
loadProgram(target)
else if(href_list["desert"])
target = locate(/area/holodeck/source_desert)
if(target)
loadProgram(target)
else if(href_list["snowfield"])
target = locate(/area/holodeck/source_snowfield)
if(target)
loadProgram(target)
else if(href_list["space"])
target = locate(/area/holodeck/source_space)
if(target)
loadProgram(target)
else if(href_list["theatre"])
target = locate(/area/holodeck/source_theatre)
if(target)
loadProgram(target)
else if(href_list["picnicarea"])
target = locate(/area/holodeck/source_picnicarea)
if(target)
loadProgram(target)
else if(href_list["meetinghall"])
target = locate(/area/holodeck/source_meetinghall)
if(target)
loadProgram(target)
else if(href_list["snowfield"])
target = locate(/area/holodeck/source_snowfield)
if(target)
loadProgram(target)
else if(href_list["theatre"])
target = locate(/area/holodeck/source_theatre)
if(target)
loadProgram(target)
else if(href_list["meetinghall"])
target = locate(/area/holodeck/source_meetinghall)
if(target)
loadProgram(target)
else if(href_list["turnoff"])
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
else if(href_list["turnoff"])
target = locate(/area/holodeck/source_plating)
if(target)
loadProgram(target)
/*
else if(href_list["burntest"])
if(!emagged) return
target = locate(/area/holodeck/source_burntest)
if(target)
loadProgram(target)
else if(href_list["burntest"])
if(!emagged) return
target = locate(/area/holodeck/source_burntest)
if(target)
loadProgram(target)
*/
else if(href_list["wildlifecarp"])
if(!emagged) return
target = locate(/area/holodeck/source_wildlife)
if(target)
loadProgram(target)
else if(href_list["AIoverride"])
if(!issilicon(usr)) return
emagged = !emagged
if(emagged)
message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
log_game("[key_name(usr)] overrided the holodeck's safeties")
else
message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
log_game("[key_name(usr)] restored the holodeck's safeties")
src.add_fingerprint(usr)
src.updateUsrDialog()
return
else if(href_list["wildlifecarp"])
if(!emagged) return
target = locate(/area/holodeck/source_wildlife)
if(target)
loadProgram(target)
else if(href_list["AIoverride"])
if(!issilicon(usr)) return
emagged = !emagged
if(emagged)
message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
log_game("[key_name(usr)] overrided the holodeck's safeties")
else
message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
log_game("[key_name(usr)] restored the holodeck's safeties")
add_fingerprint(usr)
updateUsrDialog()
return
/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob, params)
return
@@ -189,12 +180,10 @@
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/ex_act(severity)
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/blob_act()
emergencyShutdown()
..()
@@ -206,8 +195,8 @@
if(!..())
return
if(active)
if(!checkInteg(linkedholodeck))
damaged = 1
target = locate(/area/holodeck/source_plating)
@@ -332,14 +321,7 @@
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
// Holographic Items!
/turf/simulated/floor/holofloor/
thermal_conductivity = 0
@@ -363,53 +345,24 @@
return
// HOLOFLOOR DOES NOT GIVE A FUCK
/obj/structure/table/holotable
name = "table"
desc = "A square piece of metal standing on four metal legs. It can not move."
icon = 'icons/obj/structures.dmi'
icon_state = "table"
density = 1
anchored = 1.0
layer = 2.8
throwpass = 1 //You can throw objects over this, despite it's density.
/obj/structure/table/holotable/attack_alien(mob/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
/obj/structure/table/holotable/attack_alien(mob/user as mob)
return attack_hand(user)
/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob)
return attack_hand(user)
/obj/structure/table/holotable/attack_hand(mob/user as mob)
return // HOLOTABLE DOES NOT GIVE A FUCK
/obj/structure/table/holotable/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
user << "\red You need a better grip to do that!"
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("\red [G.assailant] puts [G.affecting] on the table.")
qdel(W)
return
if (istype(W, /obj/item/weapon/grab))
return ..()
if (istype(W, /obj/item/weapon/wrench))
user << "It's a holotable! There are no bolts!"
return
if(isrobot(user))
user << "<span class='warning'>It's a holotable! There are no bolts!</span>"
return
/obj/structure/table/holotable/wood
@@ -418,7 +371,6 @@
icon = 'icons/obj/structures.dmi'
icon_state = "wood_table"
/obj/item/clothing/gloves/boxing/hologlove
name = "boxing gloves"
desc = "Because you really needed another excuse to punch your crewmates."
@@ -435,10 +387,23 @@
pressure_resistance = 4*ONE_ATMOSPHERE
anchored = 1.0
flags = ON_BORDER
/obj/structure/rack/holorack
name = "rack"
/obj/structure/rack/holorack/attack_alien(mob/user as mob)
return attack_hand(user)
/obj/structure/holowindow/Destroy()
return ..()
/obj/structure/rack/holorack/attack_animal(mob/living/simple_animal/user as mob)
return attack_hand(user)
/obj/structure/rack/holorack/attack_hand(mob/user as mob)
return // HOLORACK DOES NOT GIVE A FUCK
/obj/structure/rack/holorack/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/wrench))
user << "<span class='warning'>It's a holorack! There are no bolts!</span>"
return
/obj/item/weapon/holo
damtype = STAMINA
@@ -454,22 +419,17 @@
flags = NOSHIELD
var/active = 0
/obj/item/weapon/holo/esword/green
New()
_color = "green"
/obj/item/weapon/holo/esword/green/New()
_color = "green"
/obj/item/weapon/holo/esword/red
New()
_color = "red"
/obj/item/weapon/holo/esword/red/New()
_color = "red"
/obj/item/weapon/holo/esword/IsShield()
if(active)
return 1
return 0
/obj/item/weapon/holo/esword/attack(target as mob, mob/user as mob)
..()
/obj/item/weapon/holo/esword/New()
_color = pick("red","blue","green","purple")
@@ -480,13 +440,13 @@
icon_state = "sword[_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
user << "\blue [src] is now active."
user << "<span class='notice'>[src] is now active.</span>"
else
force = 3
icon_state = "sword0"
w_class = 2
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
user << "\blue [src] can now be concealed."
user << "<span class='notice'>[src] can now be concealed.</span>"
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
@@ -495,7 +455,6 @@
return
//BASKETBALL OBJECTS
/obj/item/weapon/beach_ball/holoball
icon = 'icons/obj/basketball.dmi'
icon_state = "basketball"
@@ -506,7 +465,7 @@
/obj/structure/holohoop
name = "basketball hoop"
desc = "Boom, Shakalaka!."
desc = "Boom, Shakalaka!"
icon = 'icons/obj/basketball.dmi'
icon_state = "hoop"
anchored = 1
@@ -517,16 +476,16 @@
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
user << "\red You need a better grip to do that!"
user << "<span class='warning'>You need a better grip to do that!</span>"
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("\red [G.assailant] dunks [G.affecting] into the [src]!", 3)
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>", 3)
qdel(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src)
visible_message("\blue [user] dunks [W] into the [src]!", 3)
visible_message("<span class='notice'>[user] dunks [W] into the [src]!</span>", 3)
return
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -536,14 +495,13 @@
return
if(prob(50))
I.loc = src.loc
visible_message("\blue Swish! \the [I] lands in \the [src].", 3)
visible_message("<span class='notice'>Swish! \the [I] lands in \the [src].</span>", 3)
else
visible_message("\red \the [I] bounces off of \the [src]'s rim!", 3)
visible_message("<span class='alert'>\The [I] bounces off of \the [src]'s rim!</span>", 3)
return 0
else
return ..(mover, target, height, air_group)
/obj/machinery/readybutton
name = "Ready Declaration Device"
desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!"
@@ -563,10 +521,6 @@
user << "The station AI is not to interact with these devices"
return
/obj/machinery/readybutton/New()
..()
/obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
user << "The device is a solid button, there's nothing you can do with it!"
@@ -604,7 +558,6 @@
icon_state = "auth_off"
/obj/machinery/readybutton/proc/begin_event()
eventstarted = 1
for(var/obj/structure/holowindow/W in currentarea)