diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index d5f3d72e01e..62784d8c8ca 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -170,28 +170,25 @@
if(!linked_console)
dat += "Scan for R&D Console
"
if(loaded_item)
- if(recentlyExperimented)
- dat += "The [src] is still resetting!"
- else
- dat += "Loaded Item: [loaded_item]
"
- dat += "Technology:
"
- var/list/D = ConvertReqString2List(loaded_item.origin_tech)
- for(var/T in D)
- dat += "[T]
"
- dat += "
Available tests:"
- dat += "
Poke"
- dat += "
Irradiate"
- dat += "
Gas"
- dat += "
Burn"
- dat += "
Freeze"
- dat += "
Destroy
"
- if(istype(loaded_item,/obj/item/weapon/relic))
- dat += "
Discover
"
- dat += "
Eject"
+ dat += "Loaded Item: [loaded_item]
"
+ dat += "Technology:
"
+ var/list/D = ConvertReqString2List(loaded_item.origin_tech)
+ for(var/T in D)
+ dat += "[T]
"
+ dat += "
Available tests:"
+ dat += "
Poke"
+ dat += "
Irradiate"
+ dat += "
Gas"
+ dat += "
Burn"
+ dat += "
Freeze"
+ dat += "
Destroy
"
+ if(istype(loaded_item,/obj/item/weapon/relic))
+ dat += "
Discover
"
+ dat += "
Eject"
else
dat += "Nothing loaded."
dat += "
Refresh
"
- dat += "
Close
"
+ dat += "
Close
"
var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src)
popup.set_content(dat)
popup.open()
@@ -460,27 +457,23 @@
visible_message("[src]'s crusher goes way too many levels too high, crushing right through space-time!")
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor")
- var/list/throwAt = list()
- for(var/i in oview(7,src))
- if(istype(i,/obj/item) || istype(i,/mob/living))
- throwAt.Add(i)
- var/counter
- for(counter = 1, counter < throwAt.len, ++counter)
- var/cast = throwAt[counter]
- cast:throw_at(src,10,1)
+ for(var/atom/movable/AM in oview(7,src))
+ if(!AM.anchored)
+ spawn(0)
+ AM.throw_at(src,10,1)
+
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("[src]'s crusher goes one level too high, crushing right into space-time!")
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor")
- var/list/oViewStuff = oview(7,src)
var/list/throwAt = list()
- for(var/i in oViewStuff)
- if(istype(i,/obj/item) || istype(i,/mob/living))
- throwAt.Add(i)
- var/counter
- for(counter = 1, counter < throwAt.len, ++counter)
- var/cast = throwAt[counter]
- cast:throw_at(pick(throwAt),10,1)
+ for(var/atom/movable/AM in oview(7,src))
+ if(!AM.anchored)
+ throwAt.Add(AM)
+ for(var/counter = 1, counter < throwAt.len, ++counter)
+ var/atom/movable/cast = throwAt[counter]
+ spawn(0)
+ cast.throw_at(pick(throwAt),10,1)
ejectItem(TRUE)
////////////////////////////////////////////////////////////////////////////////////////////////
if(exp == FAIL)
@@ -553,8 +546,9 @@
var/scantype = href_list["function"]
var/obj/item/process = locate(href_list["item"]) in src
- if(scantype == "close")
+ if(href_list["close"])
usr << browse(null, "window=experimentor")
+ return
else if(scantype == "search")
var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src)
if(D)
@@ -567,6 +561,14 @@
if(recentlyExperimented)
usr << "[src] has been used too recently!"
return
+ else if(!loaded_item)
+ updateUsrDialog() //Set the interface to unloaded mode
+ usr << "[src] is not currently loaded!"
+ return
+ else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item)
+ updateUsrDialog() //Refresh interface to update interface hrefs
+ usr << "Interface failure detected in [src]. Please try again."
+ return
var/dotype
if(text2num(scantype) == SCANTYPE_DISCOVER)
dotype = SCANTYPE_DISCOVER
@@ -579,9 +581,8 @@
var/list/temp_tech = ConvertReqString2List(process.origin_tech)
for(var/T in temp_tech)
linked_console.files.UpdateTech(T, temp_tech[T])
- linked_console.files.UpdateDesigns(process,process.type)
- if(scantype != "close")
- src.updateUsrDialog()
+ linked_console.files.UpdateDesigns(process,temp_tech)
+ src.updateUsrDialog()
return
//~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~