diff --git a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm index 378848e26e..ed23b965df 100644 --- a/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm +++ b/code/modules/research/xenoarchaeology/machinery/geosample_scanner.dm @@ -1,6 +1,6 @@ /obj/machinery/radiocarbon_spectrometer - name = "Radiocarbon spectrometer" + name = "radiocarbon spectrometer" desc = "A specialised, complex scanner for gleaning information on all manner of small things." anchored = 1 density = 1 @@ -91,9 +91,13 @@ user << "You remove [amount_transferred]u of coolant from [src]." update_coolant() return + if(scanned_item) + user << "\The [src] already has \a [scanned_item] inside!" + return user.drop_item() I.loc = src scanned_item = I + user << "You put \the [I] into \the [src]." /obj/machinery/radiocarbon_spectrometer/proc/update_coolant() var/total_purity = 0 diff --git a/code/world.dm b/code/world.dm index af96bdab4b..ef5c8c91db 100644 --- a/code/world.dm +++ b/code/world.dm @@ -209,6 +209,69 @@ var/world_topic_spam_protect_time = world.timeofday return list2params(positions) + else if(copytext(T,1,5) == "info") + var/input[] = params2list(T) + if(input["key"] != config.comms_password) + if(world_topic_spam_protect_ip == addr && abs(world_topic_spam_protect_time - world.time) < 50) + + spawn(50) + world_topic_spam_protect_time = world.time + return "Bad Key (Throttled)" + + world_topic_spam_protect_time = world.time + world_topic_spam_protect_ip = addr + + return "Bad Key" + + var/search = input["info"] + var/ckey = ckey(search) + + var/list/match = list() + + for(var/mob/M in mob_list) + if(findtext(M.name, search)) + match += M + else if(M.ckey == ckey) + match += M + else if(M.mind && findtext(M.mind.assigned_role, search)) + match += M + + if(!match.len) + return "No matches" + else if(match.len == 1) + var/mob/M = match[1] + var/info = list() + info["key"] = M.key + info["name"] = M.name == M.real_name ? M.name : "[M.name] ([M.real_name])" + info["role"] = M.mind ? (M.mind.assigned_role ? M.mind.assigned_role : "No role") : "No mind" + var/turf/MT = get_turf(M) + info["loc"] = M.loc ? "[M.loc]" : "null" + info["turf"] = MT ? "[MT] @ [MT.x], [MT.y], [MT.z]" : "null" + info["area"] = MT ? "[MT.loc]" : "null" + info["antag"] = M.mind ? (M.mind.special_role ? M.mind.special_role : "Not antag") : "No mind" + info["hasbeenrev"] = M.mind ? M.mind.has_been_rev : "No mind" + info["stat"] = M.stat + info["type"] = M.type + if(isliving(M)) + var/mob/living/L = M + info["damage"] = list2params(list( + oxy = L.getOxyLoss(), + tox = L.getToxLoss(), + fire = L.getFireLoss(), + brute = L.getBruteLoss(), + clone = L.getCloneLoss(), + brain = L.getBrainLoss() + )) + else + info["damage"] = "non-living" + info["gender"] = M.gender + return list2params(info) + else + var/list/ret = list() + for(var/mob/M in match) + ret[M.key] = M.name + return list2params(ret) + else if(copytext(T,1,9) == "adminmsg") /* We got an adminmsg from IRC bot lets split the input then validate the input. diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 486e578cb6..b68ccd373c 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ