From 02002054deff33c4df247a4a7d3933c253d5e6bb Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Tue, 28 Feb 2012 13:39:51 -0700 Subject: [PATCH] Teleporter has a cancel button. Improved the admin player panel. Disposals now work right with things thrown at them. Nuke upgraded to use realtime. --- code/WorkInProgress/Tastyfish/livestock.dm | 10 ++--- code/game/events/Events/PowerOffline.dm | 4 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 35 +++++++++------ code/game/machinery/telecomms/broadcaster.dm | 8 ++-- code/game/machinery/teleporter.dm | 9 ++-- code/game/specops_shuttle.dm | 10 ++--- code/modules/admin/admin.dm | 45 +++++++++++++++++--- code/modules/admin/player_panel.dm | 38 ++++++++++------- code/modules/recycling/disposal.dm | 6 ++- 9 files changed, 112 insertions(+), 53 deletions(-) diff --git a/code/WorkInProgress/Tastyfish/livestock.dm b/code/WorkInProgress/Tastyfish/livestock.dm index f13e5b52918..a88c4f50e9d 100644 --- a/code/WorkInProgress/Tastyfish/livestock.dm +++ b/code/WorkInProgress/Tastyfish/livestock.dm @@ -103,7 +103,7 @@ // Cow /mob/living/simple_animal/livestock/cow - name = "cow" + name = "\improper Cow" icon_state = "cow" icon_living = "cow" icon_dead = "cow_d" @@ -137,7 +137,7 @@ // Chicken /mob/living/simple_animal/livestock/chicken - name = "chicken" + name = "\improper Chicken" icon_state = "chick" icon_living = "chick" icon_dead = "chick_d" @@ -163,7 +163,7 @@ desc = "Tasty!" /obj/structure/closet/critter - desc = "A critter crate." + desc = "\improper Critter crate." name = "Critter Crate" icon = 'storage.dmi' icon_state = "critter" @@ -172,7 +172,7 @@ icon_closed = "critter" /datum/supply_packs/chicken - name = "Chicken crate" + name = "\improper Chicken crate" contains = list("/mob/living/simple_animal/livestock/chicken", "/obj/item/weapon/reagent_containers/food/snacks/grown/corn") cost = 10 @@ -181,7 +181,7 @@ group = "Hydroponics" /datum/supply_packs/cow - name = "Cow crate" + name = "\improper Cow crate" contains = list("/mob/living/simple_animal/livestock/cow", "/obj/item/weapon/reagent_containers/food/snacks/grown/corn") cost = 50 diff --git a/code/game/events/Events/PowerOffline.dm b/code/game/events/Events/PowerOffline.dm index f71d9b4096e..92f4c9e643f 100644 --- a/code/game/events/Events/PowerOffline.dm +++ b/code/game/events/Events/PowerOffline.dm @@ -1,8 +1,10 @@ /datum/event/power_offline + var/list/protected_areas = list(/area/ai_monitored/storage/eva, /area/engine, /area/toxins/xenobiology, /area/turret_protected/ai) + Announce() for(var/obj/machinery/power/apc/a in world) if(!a.crit && a.z == 1) - if(istype(a.area, /area/engine) || istype(a.area, /area/toxins/xenobiology) || istype(a.area, /area/turret_protected/ai)) + if(a.area in protected_areas) continue a.eventoff = 1 a.update() diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 26139859a8a..dcc30eceecc 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -6,7 +6,8 @@ density = 1 var/deployable = 0.0 var/extended = 0.0 - var/timeleft = 60.0 + var/timeleft = 1200 + var/time_actual = 0 var/timing = 0.0 var/r_code = "ADMIN" var/code = "" @@ -22,8 +23,7 @@ /obj/machinery/nuclearbomb/process() if (src.timing) - src.timeleft-- - if (src.timeleft <= 0) + if((time_actual <= world.timeofday) && ((world.timeofday + (time_actual - world.timeofday)) <= 864000) ) explode() for(var/mob/M in viewers(1, src)) if ((M.client && M.machine == src)) @@ -35,18 +35,23 @@ /obj/machinery/nuclearbomb/attack_hand(mob/user as mob) if (src.extended) + var/time_left = time2text(time_actual-world.timeofday, "mm:ss") + if(world.timeofday + (time_actual - world.timeofday) >= 864000) + time_left = time2text(time_actual-(864000 - world.timeofday), "mm:ss") + if(!timing) + time_left = time2text(timeleft, "mm:ss") user.machine = src var/dat = text("Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------")) if (src.auth) if (src.yes_code) - dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) + dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: --- [] +++
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), src, src, src, src, time_left, src, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) else - dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) else if (src.timing) - dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) else - dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) var/message = "AUTH" if (src.auth) message = text("[]", src.code) @@ -111,17 +116,22 @@ if (src.yes_code) if (href_list["time"]) var/time = text2num(href_list["time"]) - src.timeleft += time - src.timeleft = min(max(round(src.timeleft), 5), 600) + timeleft = min(max(time + (timeleft/10), 120), 900) * 10 if (href_list["timer"]) - if (src.timing == -1.0) + if (timing == -1.0) return - src.timing = !( src.timing ) - if (src.timing) + timing = !( timing ) + if (timing) + time_actual = world.timeofday + timeleft + if(time_actual >= 864000) + time_actual -= 864000 src.icon_state = "nuclearbomb2" if(!src.safety) bomb_set = 1//There can still be issues with this reseting when there are multiple bombs. Not a big deal tho for Nuke/N else + timeleft = time_actual - world.timeofday + if(timeleft < 0) + timeleft += 864000 src.icon_state = "nuclearbomb1" bomb_set = 0 if (href_list["safety"]) @@ -153,6 +163,7 @@ /obj/machinery/nuclearbomb/proc/explode() if (src.safety) src.timing = 0 + timeleft = 0 return src.timing = -1.0 src.yes_code = 0 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 31753036f56..c3ac2943d8c 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -394,7 +394,7 @@ var var/J = job var/rendered = "[part_a][N][part_b][quotedmsg][part_c]" for (var/mob/R in heard_masked) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][N] ([J]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) @@ -405,7 +405,7 @@ var var/rendered = "[part_a][M.real_name][part_b][quotedmsg][part_c]" for (var/mob/R in heard_normal) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][realname] ([job]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) @@ -419,7 +419,7 @@ var rendered = "[part_a][vname][part_b][M.voice_message][part_c]" for (var/mob/R in heard_voice) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][vname] ([job]) [part_b][vmessage]][part_c]", 2) else R.show_message(rendered, 2) @@ -435,7 +435,7 @@ var var/rendered = "[part_a][vname][part_b][quotedmsg][part_c]" for (var/mob/R in heard_garbled) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][vname][part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 8e33bebe72e..22bac2a5936 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -83,10 +83,11 @@ areaindex[tmpname] = 1 L[tmpname] = I - var/desc = input("Please select a location to lock in.", "Locking Computer") in L - src.locked = L[desc] - for(var/mob/O in hearers(src, null)) - O.show_message("\blue Locked In", 2) + var/desc = input("Please select a location to lock in.", "Locking Computer") in L|null + if(desc) + src.locked = L[desc] + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Locked In", 2) src.add_fingerprint(usr) return diff --git a/code/game/specops_shuttle.dm b/code/game/specops_shuttle.dm index 18838470a1a..b2d73d36ac4 100644 --- a/code/game/specops_shuttle.dm +++ b/code/game/specops_shuttle.dm @@ -232,7 +232,7 @@ var/specops_shuttle_timeleft = 0 if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return 0 for(var/obj/machinery/computer/specops_shuttle/S in world) - if(world.time <= S.specops_shuttle_timereset) + if(world.timeofday <= S.specops_shuttle_timereset) return 0 return 1 @@ -286,10 +286,10 @@ var/specops_shuttle_timeleft = 0 if (!specops_can_move()) usr << "\blue Central Command will not allow the Special Operations shuttle to return yet." - if(world.time <= specops_shuttle_timereset) - if (((world.time - specops_shuttle_timereset)/10) > 60) - usr << "\blue [-((world.time - specops_shuttle_timereset)/10)/60] minutes remain!" - usr << "\blue [-(world.time - specops_shuttle_timereset)/10] seconds remain!" + if(world.timeofday <= specops_shuttle_timereset) + if (((world.timeofday - specops_shuttle_timereset)/10) > 60) + usr << "\blue [-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!" + usr << "\blue [-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!" return usr << "\blue The Special Operations shuttle will arrive at Central Command in [(SPECOPS_MOVETIME/10)] seconds." diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4cb7a48f3ea..8ba9a6c4bcf 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -258,11 +258,16 @@ if ((M.client && M.client.holder && (M.client.holder.level >= src.level))) alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) return - M << "\red You have been kicked from the server" - log_admin("[key_name(usr)] booted [key_name(M)].") - message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) - //M.client = null - del(M.client) + switch(alert("Are you sure?", ,"Yes", "NO, WAIT.. DAMMIT! NOT THAT BUTTON!")) + if("Yes") + if(ismob(M)) + M << "\red You have been kicked from the server" + log_admin("[key_name(usr)] booted [key_name(M)].") + message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) + //M.client = null + del(M.client) + else + src << "Looks like someone already beat you." if (href_list["removejobban"]) if ((src.rank in list("Game Admin", "Game Master" ))) @@ -1759,6 +1764,36 @@ C.files.RefreshResearch() owner:rnd_check_designs() + #define AUTOBANTIME 10 + if(href_list["warn"]) + var/mob/M = locate(href_list["warn"]) + if (ismob(M)) + var/client/user + if(istype(usr, /client)) + user = usr + else if(istype(usr, /mob)) + user = usr.client + + if(!user.holder) + src << "Only administrators may use this command." + return + if(M.client && M.client.holder && (M.client.holder.level >= user.holder.level)) + alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) + return + if(!M.client.warned) + M << "\red You have been warned by an administrator. This is the only warning you will recieve." + M.client.warned = 1 + message_admins("\blue [user.ckey] warned [M.ckey].") + else + AddBan(M.ckey, M.computer_id, "Autobanning due to previous warn", user.ckey, 1, AUTOBANTIME) + M << "\redYou have been autobanned by [user.ckey]. This is what we in the biz like to call a \"second warning\"." + M << "\red This is a temporary ban; it will automatically be removed in [AUTOBANTIME] minutes." + log_admin("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + ban_unban_log_save("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + message_admins("\blue [user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + feedback_inc("ban_warn",1) + + del(M.client) ///////////////////////////////////////////////////////////////////////////////////////////////Panels diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index c317f9f7073..3ccc5ff58b1 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -11,6 +11,7 @@ for(var/mob/M in mobs) if(M.ckey) var/color = "#e6e6e6" + i++ if(i%2 == 0) color = "#f2f2f2" var/real = (M.real_name == M.original_name ? M.real_name : "[M.original_name] (as [M.real_name])") @@ -19,26 +20,32 @@ dat += "[M.name] \[[real]\]
[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])" // Adds current name if(isobserver(M)) dat += "Ghost" - if(isalien(M)) + else if(isalien(M)) dat += "Alien" - if(islarva(M)) + else if(islarva(M)) dat += "Alien larva" - if(ishuman(M)) + else if(istajaran(M)) + dat += "Tajaran" + else if(ishuman(M)) dat += "[M.job]" - if(ismetroid(M)) + else if(ismetroid(M)) dat += "Metroid" - if(ismonkey(M)) + else if(ismonkey(M)) dat += "Monkey" - if(isAI(M)) + else if(isAI(M)) dat += "AI" - if(ispAI(M)) + else if(ispAI(M)) dat += "pAI" - if(isrobot(M)) + else if(isrobot(M)) dat += "Cyborg" - if(isanimal(M)) + else if(isanimal(M)) dat += "Animal" - if(iscorgi(M)) + else if(iscorgi(M)) dat += "Corgi" + else if(istype(M,/mob/new_player)) + dat += "New Player" + else + dat += "ERROR" if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job. var/mob/living/carbon/human/H = M @@ -81,13 +88,14 @@ "} dat += {"[player_has_info(M.ckey) ? "Info" : "N/A"] - Boot | Ban | Jobban -
[muting]
- PP | + PM | + PP | VV | SM | JMP | - CA + CA +
[muting]
+ Warn | Boot | Ban | Jobban "} switch(is_special_character(M)) @@ -100,7 +108,7 @@ dat += "" - usr << browse(dat, "window=players;size=905x480") + usr << browse(dat, "window=players;size=905x600") //The old one /obj/admins/proc/player_panel_old() diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index aaa19ce3694..cf605048c7e 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -439,8 +439,10 @@ del(H) CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if (istype(mover,/obj/item) && !istype(mover,/obj/item/weapon/dummy)) + if (istype(mover,/obj/item)) var/obj/item/I = mover + if(!mover.throwing) + return ..() if(prob(75)) I.loc = src for(var/mob/M in viewers(src)) @@ -450,7 +452,7 @@ M.show_message("\the [I] bounces off of \the [src]'s rim!", 3) return 0 else - return ..(mover, target, height, air_group) + return ..() //The toilet does not need to pressurized but can only handle small items. //You can also choke people by dunking them into the toilet.