diff --git a/baystation12.dme b/baystation12.dme
index 9b3973f721..3abe6716ee 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -815,6 +815,7 @@
#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\stools.dm"
+#include "code\game\player\admin_report.dm"
#include "code\game\turfs\simulated.dm"
#include "code\game\turfs\turf.dm"
#include "code\game\turfs\unsimulated.dm"
@@ -1330,5 +1331,5 @@
#include "code\ZAS\ZAS_Zones.dm"
#include "interface\interface.dm"
#include "interface\skin.dmf"
-#include "maps\tgstation.2.0.9.dmm"
+#include "maps\tgstation.2.0.9.1.dmm"
// END_INCLUDE
diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm
index 2af57a876d..d3e3a6b2a3 100644
--- a/code/controllers/shuttle_controller.dm
+++ b/code/controllers/shuttle_controller.dm
@@ -12,6 +12,8 @@
var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
datum/shuttle_controller
+ var/alert = 0 //0 = emergency, 1 = crew cycle
+
var/location = 0 //0 = somewhere far away (in spess), 1 = at SS13, 2 = returned from SS13
var/online = 0
var/direction = 1 //-1 = going back to central command, 1 = going to SS13, 2 = in transit to centcom (not recalled)
@@ -20,29 +22,52 @@ datum/shuttle_controller
var/timelimit //important when the shuttle gets called for more than shuttlearrivetime
//timeleft = 360 //600
var/fake_recall = 0 //Used in rounds to prevent "ON NOES, IT MUST [INSERT ROUND] BECAUSE SHUTTLE CAN'T BE CALLED"
-
+ var/deny_shuttle = 0 //for admins not allowing it to be called.
+ var/departed = 0
// call the shuttle
// if not called before, set the endtime to T+600 seconds
// otherwise if outgoing, switch to incoming
proc/incall(coeff = 1)
+ if(deny_shuttle && alert == 1) //crew transfer shuttle does not gets recalled by gamemode
+ return
+
if(endtime)
if(direction == -1)
setdirection(1)
else
settimeleft(SHUTTLEARRIVETIME*coeff)
online = 1
+ //turning on the red lights in hallways
+ if(alert == 0)
+ for(var/area/A in world)
+ if(istype(A, /area/hallway))
+ A.readyalert()
+
+
+ proc/shuttlealert(var/X)
+ alert = X
+
proc/recall()
if(direction == 1)
var/timeleft = timeleft()
- if(timeleft >= 600)
+ if(alert == 0)
+ if(timeleft >= 600)
+ return
+ captain_announce("The emergency shuttle has been recalled.")
+ world << sound('sound/AI/shuttlerecalled.ogg')
+ setdirection(-1)
+ online = 1
+ for(var/area/A in world)
+ if(istype(A, /area/hallway))
+ A.readyreset()
+ return
+ else //makes it possible to send shuttle back.
+ captain_announce("The shuttle has been recalled.")
+ setdirection(-1)
+ online = 1
return
- captain_announce("The emergency shuttle has been recalled.")
- world << sound('sound/AI/shuttlerecalled.ogg')
- setdirection(-1)
- online = 1
-
// returns the time (in seconds) before shuttle arrival
// note if direction = -1, gives a count-up to SHUTTLEARRIVETIME
@@ -277,6 +302,7 @@ datum/shuttle_controller
spawn() S.startspawn()
*/
+ departed = 1 // It's going!
location = 0 // in deep space
direction = 2 // heading to centcom
diff --git a/code/defines/procs/command_alert.dm b/code/defines/procs/command_alert.dm
index 23ee3c1119..d7a97fe254 100644
--- a/code/defines/procs/command_alert.dm
+++ b/code/defines/procs/command_alert.dm
@@ -1,5 +1,5 @@
-/proc/command_alert(var/text, var/title = "")
- world << "
[command_name()] Update
"
+/proc/command_alert(var/text, var/title = "", var/maintitle = "NanoTrasen Update")
+ world << "[maintitle]
"
if (title && length(title) > 0)
world << "[html_encode(title)]
"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index e10782efb8..d24ad0796c 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -27,6 +27,9 @@
if(isobj(src))//Hate typecheckin for a child object but this is just fixing crap another guy broke so if someone wants to put the time in and make this proper feel free.
M.take_organ_damage(src:throwforce)
+ log_attack("[hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])")
+ log_admin("ATTACK: [hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])")
+ msg_admin_attack("ATTACK: [hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])")
else if(isobj(hit_atom))
var/obj/O = hit_atom
diff --git a/code/game/hud.dm b/code/game/hud.dm
index c2859aad99..a7f407924d 100644
--- a/code/game/hud.dm
+++ b/code/game/hud.dm
@@ -84,12 +84,16 @@
//Intent small buttons
+/*
#define ui_help_small "12:8,1:1"
#define ui_disarm_small "12:15,1:18"
#define ui_grab_small "12:32,1:18"
#define ui_harm_small "12:39,1:1"
-
-
+*/
+#define ui_help_small "13:18,1:-3"
+#define ui_disarm_small "13:18,1:12"
+#define ui_grab_small "14:2,1:12"
+#define ui_harm_small "14:2,1:-3"
//#define ui_swapbutton "6:-16,1:5" //Unused
@@ -160,6 +164,12 @@ obj/hud/New(var/type = 0)
/obj/hud
var/obj/screen/action_intent
var/obj/screen/move_intent
+
+ var/obj/screen/hurt_intent
+ var/obj/screen/disarm_intent
+ var/obj/screen/help_intent
+ var/obj/screen/grab_intent
+
var/hud_shown = 1 //Used for the HUD toggle (F12)
var/inventory_shown = 1 //the inventory
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index 0dfac8157e..c79438f8ba 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -366,7 +366,11 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
// --- Filter the message; place it in quotes apply a verb ---
- var/quotedmsg = M.say_quote(message)
+ var/quotedmsg = "\"" + message + "\"" //BS12 EDIT For Arrivals Computer
+ if(job == "Automated Announcement")
+ quotedmsg = message
+ else if(M)
+ quotedmsg = M.say_quote(message)
// --- This following recording is intended for research and feedback in the use of department radio channels ---
diff --git a/code/game/objects/hud.dm b/code/game/objects/hud.dm
index 7559f9044b..a3a712affb 100644
--- a/code/game/objects/hud.dm
+++ b/code/game/objects/hud.dm
@@ -12,7 +12,7 @@
var/list/darkMask = null
var/obj/screen/r_hand_hud_object = null
var/obj/screen/l_hand_hud_object = null
- var/show_intent_icons = 0
+ var/show_intent_icons = 1
var/list/obj/screen/hotkeybuttons = null
var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons)
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index 035ef2f3ee..3f2d4d576b 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -15,6 +15,11 @@
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
if((CLUMSY in user.mutations) && prob(50))
user << "Huh? How does this thing work?"
+
+ log_attack("[user.name] ([user.ckey]) clumsily primed \a [src]")
+ log_admin("ATTACK: [user] ([user.ckey]) clumsily primed \a [src]")
+ message_admins("ATTACK: [user] ([user.ckey]) clumsily primed \a [src]")
+
active = 1
icon_state = initial(icon_state) + "_active"
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
@@ -56,7 +61,12 @@
/obj/item/weapon/grenade/attack_self(mob/user as mob)
if(!active)
if(clown_check(user))
- user << "You prime the [name]! [det_time/10] seconds!"
+ user << "You prime \the [name]! [det_time/10] seconds!"
+
+ log_attack("[user.name] ([user.ckey]) primed \a [src].")
+ log_admin("ATTACK: [user] ([user.ckey]) primed \a [src].")
+ message_admins("ATTACK: [user] ([user.ckey]) primed \a [src].")
+
active = 1
icon_state = initial(icon_state) + "_active"
add_fingerprint(user)
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index a8d42da9ae..6aa859e851 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -1,5 +1,5 @@
/mob/verb/listen_ooc()
- set name = "Un/Mute OOC"
+ set name = "Hear/Stop Hearing OOC"
set category = "OOC"
if (src.client)
@@ -44,7 +44,7 @@
for (var/client/C)
if(C.listen_ooc)
- if (src.client.holder && (!src.client.stealth || (C.holder && C.holder.level > 0)))
+ if (src.client.holder && (!src.client.stealth || (C.holder && C.holder.level != 0)))
if (src.client.holder.rank == "Admin Observer")
C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]"
else if (src.client.holder.rank == "Retired Admin")
diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index 15fe7d38cf..3fe5bc613e 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -32,7 +32,7 @@ proc/get_all_admin_clients()
else
entry += "\t[C.key][C.stealth ? " (as [C.fakekey])" : ""]"
- if(usr.client.holder)
+ if(usr.client.holder && (usr.client.holder.level != 0))
var/mob/M = C.mob
entry += " - Playing as [M.real_name]"
switch(M.stat)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 4274446b7a..178c17b529 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -9,19 +9,14 @@ var/global/floorIsLava = 0
log_adminwarn(rendered)
for (var/client/C in admin_list)
if (C)
- var/msg = rendered
- if (admin_ref)
- msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
- if (admin_holder_ref && C.holder)
- msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
- C << msg
-
-/obj/admins/proc/player_has_info(var/key as text)
- var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
- var/list/infos
- info >> infos
- if(!infos || !infos.len) return 0
- else return 1
+ if(C.holder.level)
+ if(C.holder.level > -3 && C.holder.level != 0)
+ var/msg = rendered
+ if (admin_ref)
+ msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
+ if (admin_holder_ref && C.holder)
+ msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
+ C << msg
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
var/rendered = "ADMIN LOG: [text]"
@@ -202,6 +197,76 @@ var/global/floorIsLava = 0
M.change_mob_type( /mob/living/simple_animal/constructwraith , null, null, delmob)
if("shade")
M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob)
+ if(href_list["view_player_info"])
+ show_player_info(href_list["view_player_info"])
+
+ if(href_list["add_player_info"])
+ var/key = href_list["add_player_info"]
+ var/add = input("Add Player Info") as null|text
+ if(!add) return
+
+ var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
+ var/list/infos
+ info >> infos
+ if(!infos) infos = list()
+
+ var/datum/player_info/P = new
+ P.author = usr.key
+ P.rank = usr.client.holder.rank
+ P.content = add
+ var/modifyer = "th"
+ switch(time2text(world.timeofday, "DD"))
+ if("01","21","31")
+ modifyer = "st"
+ if("02","22",)
+ modifyer = "nd"
+ if("03","23")
+ modifyer = "rd"
+ var/day_string = "[time2text(world.timeofday, "DD")][modifyer]"
+ if(copytext(day_string,1,2) == "0")
+ day_string = copytext(day_string,2)
+ var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY")
+ var/day_loc = findtext(full_date, time2text(world.timeofday, "DD"))
+ P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]"
+
+ infos += P
+
+ info << infos
+
+ message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
+ log_admin("[key_name(usr)] has edited [key]'s notes.")
+
+ del info
+
+ var/savefile/note_list = new("data/player_notes.sav")
+ var/list/note_keys
+ note_list >> note_keys
+ if(!note_keys) note_keys = list()
+ if(!note_keys.Find(key)) note_keys += key
+ note_list << note_keys
+ del note_list
+
+ show_player_info(key)
+
+ if(href_list["remove_player_info"])
+ var/key = href_list["remove_player_info"]
+ var/index = text2num(href_list["remove_index"])
+
+ var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
+ var/list/infos
+ info >> infos
+ if(!infos || infos.len < index) return
+
+ var/datum/player_info/item = infos[index]
+ infos.Remove(item)
+ info << infos
+
+ message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
+ log_admin("[key_name(usr)] deleted one of [key]'s notes.")
+
+ del info
+
+ show_player_info(key)
/////////////////////////////////////new ban stuff
@@ -216,6 +281,13 @@ var/global/floorIsLava = 0
alert(usr,"This ban has already been lifted / does not exist.","Error","Ok")
unbanpanel()
+ if(href_list["unban_cid"])
+ var/banfolder = href_list["unban_cid"]
+ Banlist.cd = "/base/[banfolder]"
+ var/key = Banlist["key"]
+ if(alert(usr, "Are you sure you want to remove the computer ID for [key]'s ban? Without the ID, a different account could get on the server from [key]'s computer.", "Confirmation", "Yes", "No") == "Yes")
+ Banlist["skipIdCheck"] << 1
+
if(href_list["unbane"])
UpdateTime()
var/reason
@@ -484,6 +556,24 @@ var/global/floorIsLava = 0
else
jobs += "[dd_replacetext("Wizard", " ", " ")] | "
+ //Emergency Response Team
+ if(jobban_isbanned(M, "Emergency Response Team" || isbanned_dept))
+ jobs += "[dd_replacetext("Emergency Response Team", " ", " ")] | "
+ else
+ jobs += "[dd_replacetext("Emergency Response Team", " ", " ")] | "
+
+ //Misc (Grey)
+ jobs += ""
+ jobs += "| Misc Positions |
|---|
"
+
+ //Records
+ if(jobban_isbanned(M, "Records"))
+ jobs += "| [dd_replacetext("Records", " ", " ")] | "
+ else
+ jobs += "[dd_replacetext("Records", " ", " ")] | "
+
+
+
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
jobs += "[dd_replacetext("Malf AI", " ", " ")] | "
@@ -597,6 +687,8 @@ var/global/floorIsLava = 0
M << "\redYou have been jobbanned by [usr.client.ckey] from: [msg]."
M << "\red The reason is: [reason]"
M << "\red Jobban can be lifted only upon request."
+ if(config.banappeals)
+ M << "\red To try to resolve this matter head to [config.banappeals]"
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
@@ -864,7 +956,7 @@ var/global/floorIsLava = 0
return
if (href_list["sendtoprison"])
- if ((src.rank in list( "Moderator", "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
+ if ((src.rank in list(/* "Moderator", */"Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/confirm = alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No")
if(confirm != "Yes")
@@ -1149,6 +1241,41 @@ var/global/floorIsLava = 0
else
alert("The mob must not be a new_player.")
return
+ if (href_list["granttaj"])
+ if (src.level>=5)
+ var/mob/M = locate(href_list["granttaj"])
+ for (var/s in alien_whitelist)
+ if(findtext(s,"[M.ckey] - Tajaran"))
+ alert("This key is already on the whitelist!", null, null, null, null, null)
+ return
+ alien_whitelist += "[M.ckey] - Tajaran"
+ usr << "[M.ckey] added to Tajaran whitelist."
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+ return
+
+ if (href_list["grantsog"])
+ if (src.level>=5)
+ var/mob/M = locate(href_list["grantsog"])
+ for (var/s in alien_whitelist)
+ if(findtext(s,"[M.ckey] - Soghun"))
+ alert("This key is already on the whitelist!", null, null, null, null, null)
+ return
+ alien_whitelist += "[M.ckey] - Soghun"
+ usr << "[M.ckey] added to Soghun whitelist."
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+ return
+
+ if (href_list["grantskrell"])
+ if (src.level>=5)
+ var/mob/M = locate(href_list["grantskrell"])
+ for (var/s in alien_whitelist)
+ if(findtext(s,"[M.ckey] - Skrell"))
+ alert("This key is already on the whitelist!", null, null, null, null, null)
+ return
+ alien_whitelist += "[M.ckey] - Skrell"
+ usr << "[M.ckey] added to Skrell whitelist."
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
return
@@ -1191,47 +1318,64 @@ var/global/floorIsLava = 0
// Now isn't that much better? IT IS NOW A PROC, i.e. kinda like a big panel like unstable
if (href_list["adminplayeropts"])
- var/mob/M = locate(href_list["adminplayeropts"])
- show_player_panel(M)
+ if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
+ var/mob/M = locate(href_list["adminplayeropts"])
+ show_player_panel(M)
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+
+ if (href_list["player_info"])
+ var/key = href_list["player_info"]
+ show_player_info(key)
if (href_list["adminplayervars"])
- var/mob/M = locate(href_list["adminplayervars"])
- if(src && src.owner)
- if(istype(src.owner,/client))
- var/client/cl = src.owner
- cl.debug_variables(M)
- else if(ismob(src.owner))
- var/mob/MO = src.owner
- if(MO.client)
- var/client/cl = MO.client
+ if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
+ var/mob/M = locate(href_list["adminplayervars"])
+ if(src && src.owner)
+ if(istype(src.owner,/client))
+ var/client/cl = src.owner
cl.debug_variables(M)
+ else if(ismob(src.owner))
+ var/mob/MO = src.owner
+ if(MO.client)
+ var/client/cl = MO.client
+ cl.debug_variables(M)
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["adminplayersubtlemessage"])
- var/mob/M = locate(href_list["adminplayersubtlemessage"])
- if(src && src.owner)
- if(istype(src.owner,/client))
- var/client/cl = src.owner
- cl.cmd_admin_subtle_message(M)
- else if(ismob(src.owner))
- var/mob/MO = src.owner
- if(MO.client)
- var/client/cl = MO.client
+ if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
+ var/mob/M = locate(href_list["adminplayersubtlemessage"])
+ if(src && src.owner)
+ if(istype(src.owner,/client))
+ var/client/cl = src.owner
cl.cmd_admin_subtle_message(M)
+ else if(ismob(src.owner))
+ var/mob/MO = src.owner
+ if(MO.client)
+ var/client/cl = MO.client
+ cl.cmd_admin_subtle_message(M)
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["adminplayerobservejump"])
- var/mob/M = locate(href_list["adminplayerobservejump"])
- if(src && src.owner)
- var/client/C
- if(istype(src.owner,/client))
- C = src.owner
- else if(ismob(src.owner))
- var/mob/MO = src.owner
- C = MO.client
- if(C)
- if(state == 1)
- C.admin_ghost()
- sleep(2)
- C.jumptomob(M)
+ if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
+ var/mob/M = locate(href_list["adminplayerobservejump"])
+ if(src && src.owner)
+ var/client/C
+ if(istype(src.owner,/client))
+ C = src.owner
+ else if(ismob(src.owner))
+ var/mob/MO = src.owner
+ C = MO.client
+ if(C)
+ if(state == 1)
+ C.admin_ghost()
+ sleep(2)
+ C.jumptomob(M)
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+
if (href_list["adminplayerobservecoodjump"])
@@ -1336,14 +1480,19 @@ var/global/floorIsLava = 0
if (href_list["traitor_panel_pp"])
- var/mob/M = locate(href_list["traitor_panel_pp"])
- if(isnull(M))
- usr << "Mob doesn't seem to exist."
- return
- if(!ismob(M))
- usr << "This doen't seem to be a mob."
- return
- show_traitor_panel(M)
+ if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
+ var/mob/M = locate(href_list["traitor_panel_pp"])
+ if(isnull(M))
+ usr << "Mob doesn't seem to exist."
+ return
+ if(!ismob(M))
+ usr << "This doen't seem to be a mob."
+ return
+ show_traitor_panel(M)
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+
+
if (href_list["BlueSpaceArtillery"])
var/mob/target = locate(href_list["BlueSpaceArtillery"])
@@ -1467,8 +1616,12 @@ var/global/floorIsLava = 0
return
if (href_list["narrateto"])
- var/mob/M = locate(href_list["narrateto"])
- usr.client.cmd_admin_direct_narrate(M)
+ if(rank in list("Game Admin", "Game Master"))
+ var/mob/M = locate(href_list["narrateto"])
+ usr.client.cmd_admin_direct_narrate(M)
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+ return
if (href_list["subtlemessage"])
var/mob/M = locate(href_list["subtlemessage"])
@@ -1514,7 +1667,16 @@ var/global/floorIsLava = 0
return create_mob(usr)
else
alert("You are not a high enough administrator! Sorry!!!!")
+/*
+ if (href_list["vmode"])
+ vmode()
+ if (href_list["votekill"])
+ votekill()
+
+ if (href_list["voteres"])
+ voteres()
+*/
if (href_list["prom_demot"])
if ((src.rank in list("Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/client/C = locate(href_list["prom_demot"])
@@ -1532,6 +1694,7 @@ var/global/floorIsLava = 0
Temporary Admin // Secondary Admin
Moderator // Moderator
Admin Observer // Filthy Xeno
+ Retired Admin // Retired Administrator
Remove Admin
"}
else if(src.level == 5)
//coder
@@ -1542,6 +1705,7 @@ var/global/floorIsLava = 0
Temporary Admin // Secondary Admin
Moderator // Moderator
Admin Observer // Filthy Xeno
+ Retired Admin // Retired Administrator
Remove Admin
"}
else
alert("Not a high enough level admin, sorry.")
@@ -2267,7 +2431,7 @@ var/global/floorIsLava = 0
return
if (href_list["secretsadmin"])
- if ((src.rank in list( "Moderator", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
+ if ((src.rank in list(/* "Moderator", */"Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/ok = 0
switch(href_list["secretsadmin"])
if("clear_bombs")
@@ -2381,6 +2545,46 @@ var/global/floorIsLava = 0
if(href_list["vsc"] == "default")
vsc.SetDefault(usr)
+ if (href_list["rnd_max"])
+ for(var/obj/machinery/computer/rdconsole/C in world)
+ for(var/datum/tech/T in C.files.known_tech)
+ T.level = 6
+ C.files.RefreshResearch()
+
+ for(var/obj/machinery/r_n_d/server/C in world)
+ for(var/datum/tech/T in C.files.known_tech)
+ T.level = 6
+ 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]."
+ 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)
if(href_list["ac_view_wanted"]) //Admin newscaster Topic() stuff be here
src.admincaster_screen = 18 //The ac_ prefix before the hrefs stands for AdminCaster.
@@ -2727,6 +2931,9 @@ var/global/floorIsLava = 0
body += "Thunderdome 2 | "
body += "Thunderdome Admin | "
body += "Thunderdome Observer | "
+ body += "Grant Tajaran (Temp) | "
+ body += "Grant Soghun (Temp) | "
+ body += "Grant Skrell (Temp) | "
body += "
"
body += "