Attack logging, better intent switcher HUD, alien species fixes, misc admin commands, moderator commands.

This commit is contained in:
Erthilo
2012-09-24 17:56:49 +01:00
parent 1ed6478d65
commit a88c318051
27 changed files with 1176 additions and 226 deletions

View File

@@ -815,6 +815,7 @@
#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" #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\chairs.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\stools.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\simulated.dm"
#include "code\game\turfs\turf.dm" #include "code\game\turfs\turf.dm"
#include "code\game\turfs\unsimulated.dm" #include "code\game\turfs\unsimulated.dm"
@@ -1330,5 +1331,5 @@
#include "code\ZAS\ZAS_Zones.dm" #include "code\ZAS\ZAS_Zones.dm"
#include "interface\interface.dm" #include "interface\interface.dm"
#include "interface\skin.dmf" #include "interface\skin.dmf"
#include "maps\tgstation.2.0.9.dmm" #include "maps\tgstation.2.0.9.1.dmm"
// END_INCLUDE // END_INCLUDE

View File

@@ -12,6 +12,8 @@
var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
datum/shuttle_controller 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/location = 0 //0 = somewhere far away (in spess), 1 = at SS13, 2 = returned from SS13
var/online = 0 var/online = 0
var/direction = 1 //-1 = going back to central command, 1 = going to SS13, 2 = in transit to centcom (not recalled) 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 var/timelimit //important when the shuttle gets called for more than shuttlearrivetime
//timeleft = 360 //600 //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/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 // call the shuttle
// if not called before, set the endtime to T+600 seconds // if not called before, set the endtime to T+600 seconds
// otherwise if outgoing, switch to incoming // otherwise if outgoing, switch to incoming
proc/incall(coeff = 1) proc/incall(coeff = 1)
if(deny_shuttle && alert == 1) //crew transfer shuttle does not gets recalled by gamemode
return
if(endtime) if(endtime)
if(direction == -1) if(direction == -1)
setdirection(1) setdirection(1)
else else
settimeleft(SHUTTLEARRIVETIME*coeff) settimeleft(SHUTTLEARRIVETIME*coeff)
online = 1 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() proc/recall()
if(direction == 1) if(direction == 1)
var/timeleft = timeleft() 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 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 // returns the time (in seconds) before shuttle arrival
// note if direction = -1, gives a count-up to SHUTTLEARRIVETIME // note if direction = -1, gives a count-up to SHUTTLEARRIVETIME
@@ -277,6 +302,7 @@ datum/shuttle_controller
spawn() S.startspawn() spawn() S.startspawn()
*/ */
departed = 1 // It's going!
location = 0 // in deep space location = 0 // in deep space
direction = 2 // heading to centcom direction = 2 // heading to centcom

View File

@@ -1,5 +1,5 @@
/proc/command_alert(var/text, var/title = "") /proc/command_alert(var/text, var/title = "", var/maintitle = "NanoTrasen Update")
world << "<h1 class='alert'>[command_name()] Update</h1>" world << "<h1 class='alert'>[maintitle]</h1>"
if (title && length(title) > 0) if (title && length(title) > 0)
world << "<h2 class='alert'>[html_encode(title)]</h2>" world << "<h2 class='alert'>[html_encode(title)]</h2>"

View File

@@ -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. 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) M.take_organ_damage(src:throwforce)
log_attack("<font color='red'>[hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])</font>")
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)) else if(isobj(hit_atom))
var/obj/O = hit_atom var/obj/O = hit_atom

View File

@@ -84,12 +84,16 @@
//Intent small buttons //Intent small buttons
/*
#define ui_help_small "12:8,1:1" #define ui_help_small "12:8,1:1"
#define ui_disarm_small "12:15,1:18" #define ui_disarm_small "12:15,1:18"
#define ui_grab_small "12:32,1:18" #define ui_grab_small "12:32,1:18"
#define ui_harm_small "12:39,1:1" #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 //#define ui_swapbutton "6:-16,1:5" //Unused
@@ -160,6 +164,12 @@ obj/hud/New(var/type = 0)
/obj/hud /obj/hud
var/obj/screen/action_intent var/obj/screen/action_intent
var/obj/screen/move_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/hud_shown = 1 //Used for the HUD toggle (F12)
var/inventory_shown = 1 //the inventory var/inventory_shown = 1 //the inventory

View File

@@ -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 --- // --- 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 --- // --- This following recording is intended for research and feedback in the use of department radio channels ---

View File

@@ -12,7 +12,7 @@
var/list/darkMask = null var/list/darkMask = null
var/obj/screen/r_hand_hud_object = null var/obj/screen/r_hand_hud_object = null
var/obj/screen/l_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/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) var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons)

View File

@@ -15,6 +15,11 @@
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user) /obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
if((CLUMSY in user.mutations) && prob(50)) if((CLUMSY in user.mutations) && prob(50))
user << "<span class='warning'>Huh? How does this thing work?</span>" user << "<span class='warning'>Huh? How does this thing work?</span>"
log_attack("<font color='red'>[user.name] ([user.ckey]) clumsily primed \a [src]</font>")
log_admin("ATTACK: [user] ([user.ckey]) clumsily primed \a [src]")
message_admins("ATTACK: [user] ([user.ckey]) clumsily primed \a [src]")
active = 1 active = 1
icon_state = initial(icon_state) + "_active" icon_state = initial(icon_state) + "_active"
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
@@ -56,7 +61,12 @@
/obj/item/weapon/grenade/attack_self(mob/user as mob) /obj/item/weapon/grenade/attack_self(mob/user as mob)
if(!active) if(!active)
if(clown_check(user)) if(clown_check(user))
user << "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>" user << "<span class='warning'>You prime \the [name]! [det_time/10] seconds!</span>"
log_attack("<font color='red'>[user.name] ([user.ckey]) primed \a [src].</font>")
log_admin("ATTACK: [user] ([user.ckey]) primed \a [src].")
message_admins("ATTACK: [user] ([user.ckey]) primed \a [src].")
active = 1 active = 1
icon_state = initial(icon_state) + "_active" icon_state = initial(icon_state) + "_active"
add_fingerprint(user) add_fingerprint(user)

View File

@@ -1,5 +1,5 @@
/mob/verb/listen_ooc() /mob/verb/listen_ooc()
set name = "Un/Mute OOC" set name = "Hear/Stop Hearing OOC"
set category = "OOC" set category = "OOC"
if (src.client) if (src.client)
@@ -44,7 +44,7 @@
for (var/client/C) for (var/client/C)
if(C.listen_ooc) 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") if (src.client.holder.rank == "Admin Observer")
C << "<span class='adminobserverooc'><span class='prefix'>OOC:</span> <EM>[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>" C << "<span class='adminobserverooc'><span class='prefix'>OOC:</span> <EM>[src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>"
else if (src.client.holder.rank == "Retired Admin") else if (src.client.holder.rank == "Retired Admin")

View File

@@ -32,7 +32,7 @@ proc/get_all_admin_clients()
else else
entry += "\t[C.key][C.stealth ? " <i>(as [C.fakekey])</i>" : ""]" entry += "\t[C.key][C.stealth ? " <i>(as [C.fakekey])</i>" : ""]"
if(usr.client.holder) if(usr.client.holder && (usr.client.holder.level != 0))
var/mob/M = C.mob var/mob/M = C.mob
entry += " - Playing as [M.real_name]" entry += " - Playing as [M.real_name]"
switch(M.stat) switch(M.stat)

View File

@@ -9,19 +9,14 @@ var/global/floorIsLava = 0
log_adminwarn(rendered) log_adminwarn(rendered)
for (var/client/C in admin_list) for (var/client/C in admin_list)
if (C) if (C)
var/msg = rendered if(C.holder.level)
if (admin_ref) if(C.holder.level > -3 && C.holder.level != 0)
msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]") var/msg = rendered
if (admin_holder_ref && C.holder) if (admin_ref)
msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]") msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
C << msg if (admin_holder_ref && C.holder)
msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
/obj/admins/proc/player_has_info(var/key as text) C << msg
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
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages /proc/msg_admin_attack(var/text) //Toggleable Attack Messages
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>" var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>"
@@ -202,6 +197,76 @@ var/global/floorIsLava = 0
M.change_mob_type( /mob/living/simple_animal/constructwraith , null, null, delmob) M.change_mob_type( /mob/living/simple_animal/constructwraith , null, null, delmob)
if("shade") if("shade")
M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob) 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 /////////////////////////////////////new ban stuff
@@ -216,6 +281,13 @@ var/global/floorIsLava = 0
alert(usr,"This ban has already been lifted / does not exist.","Error","Ok") alert(usr,"This ban has already been lifted / does not exist.","Error","Ok")
unbanpanel() 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"]) if(href_list["unbane"])
UpdateTime() UpdateTime()
var/reason var/reason
@@ -484,6 +556,24 @@ var/global/floorIsLava = 0
else else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[dd_replacetext("Wizard", " ", "&nbsp")]</a></td>" jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[dd_replacetext("Wizard", " ", "&nbsp")]</a></td>"
//Emergency Response Team
if(jobban_isbanned(M, "Emergency Response Team" || isbanned_dept))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'><font color=red>[dd_replacetext("Emergency Response Team", " ", "&nbsp")]</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>[dd_replacetext("Emergency Response Team", " ", "&nbsp")]</a></td>"
//Misc (Grey)
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='B5B5B5'><th colspan='10'>Misc Positions</th></tr><tr align='center'>"
//Records
if(jobban_isbanned(M, "Records"))
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Records;jobban4=\ref[M]'><font color=red>[dd_replacetext("Records", " ", "&nbsp")]</font></a></td>"
else
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Records;jobban4=\ref[M]'>[dd_replacetext("Records", " ", "&nbsp")]</a></td>"
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment /* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
if(jobban_isbanned(M, "malf AI") || isbanned_dept) if(jobban_isbanned(M, "malf AI") || isbanned_dept)
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[dd_replacetext("Malf AI", " ", "&nbsp")]</font></a></td>" jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[dd_replacetext("Malf AI", " ", "&nbsp")]</font></a></td>"
@@ -597,6 +687,8 @@ var/global/floorIsLava = 0
M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>" M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>"
M << "\red <B>The reason is: [reason]</B>" M << "\red <B>The reason is: [reason]</B>"
M << "\red Jobban can be lifted only upon request." 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 href_list["jobban2"] = 1 // lets it fall through and refresh
return 1 return 1
@@ -864,7 +956,7 @@ var/global/floorIsLava = 0
return return
if (href_list["sendtoprison"]) 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") var/confirm = alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No")
if(confirm != "Yes") if(confirm != "Yes")
@@ -1149,6 +1241,41 @@ var/global/floorIsLava = 0
else else
alert("The mob must not be a new_player.") alert("The mob must not be a new_player.")
return 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 else
alert("You cannot perform this action. You must be of a higher administrative rank!") alert("You cannot perform this action. You must be of a higher administrative rank!")
return 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 // Now isn't that much better? IT IS NOW A PROC, i.e. kinda like a big panel like unstable
if (href_list["adminplayeropts"]) if (href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"]) if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
show_player_panel(M) 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"]) if (href_list["adminplayervars"])
var/mob/M = locate(href_list["adminplayervars"]) if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
if(src && src.owner) var/mob/M = locate(href_list["adminplayervars"])
if(istype(src.owner,/client)) if(src && src.owner)
var/client/cl = src.owner if(istype(src.owner,/client))
cl.debug_variables(M) var/client/cl = src.owner
else if(ismob(src.owner))
var/mob/MO = src.owner
if(MO.client)
var/client/cl = MO.client
cl.debug_variables(M) 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"]) if (href_list["adminplayersubtlemessage"])
var/mob/M = locate(href_list["adminplayersubtlemessage"]) if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
if(src && src.owner) var/mob/M = locate(href_list["adminplayersubtlemessage"])
if(istype(src.owner,/client)) if(src && src.owner)
var/client/cl = src.owner if(istype(src.owner,/client))
cl.cmd_admin_subtle_message(M) var/client/cl = src.owner
else if(ismob(src.owner))
var/mob/MO = src.owner
if(MO.client)
var/client/cl = MO.client
cl.cmd_admin_subtle_message(M) 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"]) if (href_list["adminplayerobservejump"])
var/mob/M = locate(href_list["adminplayerobservejump"]) if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
if(src && src.owner) var/mob/M = locate(href_list["adminplayerobservejump"])
var/client/C if(src && src.owner)
if(istype(src.owner,/client)) var/client/C
C = src.owner if(istype(src.owner,/client))
else if(ismob(src.owner)) C = src.owner
var/mob/MO = src.owner else if(ismob(src.owner))
C = MO.client var/mob/MO = src.owner
if(C) C = MO.client
if(state == 1) if(C)
C.admin_ghost() if(state == 1)
sleep(2) C.admin_ghost()
C.jumptomob(M) sleep(2)
C.jumptomob(M)
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["adminplayerobservecoodjump"]) if (href_list["adminplayerobservecoodjump"])
@@ -1336,14 +1480,19 @@ var/global/floorIsLava = 0
if (href_list["traitor_panel_pp"]) if (href_list["traitor_panel_pp"])
var/mob/M = locate(href_list["traitor_panel_pp"]) if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
if(isnull(M)) var/mob/M = locate(href_list["traitor_panel_pp"])
usr << "Mob doesn't seem to exist." if(isnull(M))
return usr << "Mob doesn't seem to exist."
if(!ismob(M)) return
usr << "This doen't seem to be a mob." if(!ismob(M))
return usr << "This doen't seem to be a mob."
show_traitor_panel(M) return
show_traitor_panel(M)
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["BlueSpaceArtillery"]) if (href_list["BlueSpaceArtillery"])
var/mob/target = locate(href_list["BlueSpaceArtillery"]) var/mob/target = locate(href_list["BlueSpaceArtillery"])
@@ -1467,8 +1616,12 @@ var/global/floorIsLava = 0
return return
if (href_list["narrateto"]) if (href_list["narrateto"])
var/mob/M = locate(href_list["narrateto"]) if(rank in list("Game Admin", "Game Master"))
usr.client.cmd_admin_direct_narrate(M) 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"]) if (href_list["subtlemessage"])
var/mob/M = locate(href_list["subtlemessage"]) var/mob/M = locate(href_list["subtlemessage"])
@@ -1514,7 +1667,16 @@ var/global/floorIsLava = 0
return create_mob(usr) return create_mob(usr)
else else
alert("You are not a high enough administrator! Sorry!!!!") 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 (href_list["prom_demot"])
if ((src.rank in list("Trial Admin", "Badmin", "Game Admin", "Game Master" ))) if ((src.rank in list("Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/client/C = locate(href_list["prom_demot"]) var/client/C = locate(href_list["prom_demot"])
@@ -1532,6 +1694,7 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];chgadlvl=Temporary Admin;client4ad=\ref[C]'>Temporary Admin</A> // Secondary Admin<BR> <A href='?src=\ref[src];chgadlvl=Temporary Admin;client4ad=\ref[C]'>Temporary Admin</A> // Secondary Admin<BR>
<A href='?src=\ref[src];chgadlvl=Moderator;client4ad=\ref[C]'>Moderator</A> // Moderator<BR> <A href='?src=\ref[src];chgadlvl=Moderator;client4ad=\ref[C]'>Moderator</A> // Moderator<BR>
<A href='?src=\ref[src];chgadlvl=Admin Observer;client4ad=\ref[C]'>Admin Observer</A> // Filthy Xeno<BR> <A href='?src=\ref[src];chgadlvl=Admin Observer;client4ad=\ref[C]'>Admin Observer</A> // Filthy Xeno<BR>
<A href='?src=\ref[src];chgadlvl=Retired Admin;client4ad=\ref[C]'>Retired Admin</A> // Retired Administrator<BR>
<A href='?src=\ref[src];chgadlvl=Remove;client4ad=\ref[C]'>Remove Admin</A><BR>"} <A href='?src=\ref[src];chgadlvl=Remove;client4ad=\ref[C]'>Remove Admin</A><BR>"}
else if(src.level == 5) else if(src.level == 5)
//coder //coder
@@ -1542,6 +1705,7 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];chgadlvl=Temporary Admin;client4ad=\ref[C]'>Temporary Admin</A> // Secondary Admin<BR> <A href='?src=\ref[src];chgadlvl=Temporary Admin;client4ad=\ref[C]'>Temporary Admin</A> // Secondary Admin<BR>
<A href='?src=\ref[src];chgadlvl=Moderator;client4ad=\ref[C]'>Moderator</A> // Moderator<BR> <A href='?src=\ref[src];chgadlvl=Moderator;client4ad=\ref[C]'>Moderator</A> // Moderator<BR>
<A href='?src=\ref[src];chgadlvl=Admin Observer;client4ad=\ref[C]'>Admin Observer</A> // Filthy Xeno<BR> <A href='?src=\ref[src];chgadlvl=Admin Observer;client4ad=\ref[C]'>Admin Observer</A> // Filthy Xeno<BR>
<A href='?src=\ref[src];chgadlvl=Retired Admin;client4ad=\ref[C]'>Retired Admin</A> // Retired Administrator<BR>
<A href='?src=\ref[src];chgadlvl=Remove;client4ad=\ref[C]'>Remove Admin</A><BR>"} <A href='?src=\ref[src];chgadlvl=Remove;client4ad=\ref[C]'>Remove Admin</A><BR>"}
else else
alert("Not a high enough level admin, sorry.") alert("Not a high enough level admin, sorry.")
@@ -2267,7 +2431,7 @@ var/global/floorIsLava = 0
return return
if (href_list["secretsadmin"]) 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 var/ok = 0
switch(href_list["secretsadmin"]) switch(href_list["secretsadmin"])
if("clear_bombs") if("clear_bombs")
@@ -2381,6 +2545,46 @@ var/global/floorIsLava = 0
if(href_list["vsc"] == "default") if(href_list["vsc"] == "default")
vsc.SetDefault(usr) 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 <B>You have been warned by an administrator. This is the only warning you will recieve.</B>"
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 << "\red<BIG><B>You have been autobanned by [user.ckey].</B></BIG>"
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 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. src.admincaster_screen = 18 //The ac_ prefix before the hrefs stands for AdminCaster.
@@ -2727,6 +2931,9 @@ var/global/floorIsLava = 0
body += "<A href='?src=\ref[src];tdome2=\ref[M]'>Thunderdome 2</A> | " body += "<A href='?src=\ref[src];tdome2=\ref[M]'>Thunderdome 2</A> | "
body += "<A href='?src=\ref[src];tdomeadmin=\ref[M]'>Thunderdome Admin</A> | " body += "<A href='?src=\ref[src];tdomeadmin=\ref[M]'>Thunderdome Admin</A> | "
body += "<A href='?src=\ref[src];tdomeobserve=\ref[M]'>Thunderdome Observer</A> | " body += "<A href='?src=\ref[src];tdomeobserve=\ref[M]'>Thunderdome Observer</A> | "
body += "<A href='?src=\ref[src];granttaj=\ref[M]'>Grant Tajaran (Temp)</A> | "
body += "<A href='?src=\ref[src];grantsog=\ref[M]'>Grant Soghun (Temp)</A> | "
body += "<A href='?src=\ref[src];grantskrell=\ref[M]'>Grant Skrell (Temp)</A> | "
body += "<br>" body += "<br>"
body += "</body></html>" body += "</body></html>"
@@ -2735,6 +2942,84 @@ var/global/floorIsLava = 0
feedback_add_details("admin_verb","SPP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","SPP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/player_info/var/author // admin who authored the information
/datum/player_info/var/rank //rank of admin who made the notes
/datum/player_info/var/content // text content of the information
/datum/player_info/var/timestamp // Because this is bloody annoying
/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
/obj/admins/proc/show_player_info(var/key as text)
set category = "Admin"
set name = "Show Player Info"
if (!istype(src,/obj/admins))
src = usr.client.holder
if (!istype(src,/obj/admins))
usr << "Error: you are not an admin!"
return
var/dat = "<html><head><title>Info on [key]</title></head>"
dat += "<body>"
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
var/list/infos
info >> infos
if(!infos)
dat += "No information found on the given key.<br>"
else
var/update_file = 0
var/i = 0
for(var/datum/player_info/I in infos)
i += 1
if(!I.timestamp)
I.timestamp = "Pre-4/3/2012"
update_file = 1
if(!I.rank)
I.rank = "N/A"
update_file = 1
dat += "<font color=#008800>[I.content]</font> <i>by [I.author] ([I.rank])</i> on <i><font color=blue>[I.timestamp]</i></font> "
if(I.author == usr.key)
dat += "<A href='?src=\ref[src];remove_player_info=[key];remove_index=[i]'>Remove</A>"
dat += "<br><br>"
if(update_file) info << infos
dat += "<br>"
dat += "<A href='?src=\ref[src];add_player_info=[key]'>Add Comment</A><br>"
dat += "</body></html>"
usr << browse(dat, "window=adminplayerinfo;size=480x480")
/obj/admins/proc/show_skills(var/mob/living/carbon/human/M as mob in world)
set category = "Admin"
set name = "Show Skills"
if (!istype(src,/obj/admins))
src = usr.client.holder
if (!istype(src,/obj/admins))
usr << "Error: you are not an admin!"
return
show_skill_window(usr, M)
return
/client/proc/update_mob_sprite(mob/living/carbon/human/H as mob)
set category = "Admin"
set name = "Update Mob Sprite"
set desc = "Should fix any mob sprite update errors."
if (!holder)
src << "Only administrators may use this command."
return
if(istype(H))
H.regenerate_icons()
/obj/admins/proc/access_news_network() //MARKER /obj/admins/proc/access_news_network() //MARKER
set category = "Fun" set category = "Fun"
set name = "Access Newscaster Network" set name = "Access Newscaster Network"
@@ -2940,6 +3225,21 @@ var/global/floorIsLava = 0
dat += "</table>" dat += "</table>"
usr << browse(dat, "window=ban;size=400x400") usr << browse(dat, "window=ban;size=400x400")
/obj/admins/proc/PlayerNotes()
var/dat = "<B>Player notes</B><HR><table>"
var/savefile/S=new("data/player_notes.sav")
var/list/note_keys
S >> note_keys
if(!note_keys)
dat += "No notes found."
else
sortList(note_keys)
for(var/t in note_keys)
dat += text("<tr><td><A href='?src=\ref[src];view_player_info=[t]'>[t]</A></td></tr>")
dat += "</table>"
usr << browse(dat, "window=player_notes;size=400x400")
/obj/admins/proc/Game() /obj/admins/proc/Game()
var/dat var/dat
@@ -2978,6 +3278,10 @@ var/global/floorIsLava = 0
dat += "<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>" dat += "<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>"
if(lvl >= 5) if(lvl >= 5)
dat += "<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>" dat += "<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>"
if(lvl >= 3 )
dat += "<br><A href='?src=\ref[src];vsc=airflow'>Edit Airflow Settings</A><br>"
dat += "<A href='?src=\ref[src];vsc=plasma'>Edit Plasma Settings</A><br>"
dat += "<A href='?src=\ref[src];vsc=default'>Choose a default ZAS setting</A><br>"
// if(lvl == 6 ) // if(lvl == 6 )
usr << browse(dat, "window=admin2;size=210x180") usr << browse(dat, "window=admin2;size=210x180")
return return
@@ -3046,6 +3350,7 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR> <A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR> <A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
<A href='?src=\ref[src];secretsfun=virus'>Trigger a Virus Outbreak</A><BR> <A href='?src=\ref[src];secretsfun=virus'>Trigger a Virus Outbreak</A><BR>
<A href='?src=\ref[src];secretsfun=trigger_armed_response_team'>Trigger the Emergency Response Team</A><BR>
<A href='?src=\ref[src];secretsfun=immovable'>Spawn an Immovable Rod</A><BR> <A href='?src=\ref[src];secretsfun=immovable'>Spawn an Immovable Rod</A><BR>
<A href='?src=\ref[src];secretsfun=lightsout'>Toggle a "lights out" event</A><BR> <A href='?src=\ref[src];secretsfun=lightsout'>Toggle a "lights out" event</A><BR>
<A href='?src=\ref[src];secretsfun=ionstorm'>Spawn an Ion Storm</A><BR> <A href='?src=\ref[src];secretsfun=ionstorm'>Spawn an Ion Storm</A><BR>
@@ -3076,6 +3381,7 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];secretsfun=movealienship'>Move Alien Dinghy</A><BR> <A href='?src=\ref[src];secretsfun=movealienship'>Move Alien Dinghy</A><BR>
<A href='?src=\ref[src];secretsfun=moveminingshuttle'>Move Mining Shuttle</A><BR> <A href='?src=\ref[src];secretsfun=moveminingshuttle'>Move Mining Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A><BR> <A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A><BR>
<A href='?src=\ref[src];secretsfun=electric'>Trigger Electrical Storm</A><BR>"
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR> <A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
<A href='?src=\ref[src];secretsfun=friendai'>Best Friend AI</A><BR> <A href='?src=\ref[src];secretsfun=friendai'>Best Friend AI</A><BR>
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS)</A><BR>"} <A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS)</A><BR>"}
@@ -3105,12 +3411,160 @@ var/global/floorIsLava = 0
usr << browse(dat, "window=secrets") usr << browse(dat, "window=secrets")
return return
/obj/admins/proc/Voting()
var/dat
var/lvl = 0
switch(src.rank)
if("Moderator")
lvl = 1
if("Temporary Admin")
lvl = 2
if("Admin Candidate")
lvl = 3
if("Trial Admin")
lvl = 4
if("Badmin")
lvl = 5
if("Game Admin")
lvl = 6
if("Game Master")
lvl = 7
dat += "<center><B>Voting</B></center><hr>\n"
if(lvl > 0)
dat += {"
<A href='?src=\ref[src];votekill=1'>Abort Vote</A><br>
<A href='?src=\ref[src];vmode=1'>Start Vote</A><br>
<A href='?src=\ref[src];voteres=1'>Toggle Voting</A><br>
"}
usr << browse(dat, "window=admin2;size=210x160")
return
/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge /////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
//i.e. buttons/verbs //i.e. buttons/verbs
/*
/obj/admins/proc/vmode()
set category = "Server"
set hidden = 1 // It doesn't have a cancel button, so it shouldn't be autocompleted. Should be started via Voting() instead
if (!usr.client.holder)
return
var/confirm = alert("What vote would you like to start?", "Vote", "Restart", "Custom Vote", "Change Game Mode")
switch(confirm)
if("Cancel")
return
if("Restart")
vote.mode = 0
// hack to yield 0=restart, 1=changemode
if("Change Game Mode")
vote.mode = 1
if(!ticker)
if(going)
world << "<B>The game start has been delayed.</B>"
going = 0
if("Custom Vote")
vote.mode = 2
vote.enteringchoices = 1
vote.customname = input(usr, "What are you voting for?", "Custom Vote") as text
if(!vote.customname)
vote.enteringchoices = 0
vote.voting = 0
return
var/N = input(usr, "How many options does this vote have?", "Custom Vote", 0) as num
if(!N)
vote.enteringchoices = 0
vote.voting = 0
return
var/i
vote.choices = list()
for(i=1; i<=N; i++)
var/addvote = input(usr, "What is option #[i]?", "Enter Option #[i]") as text
vote.choices += addvote
vote.enteringchoices = 0
vote.voting = 1
// now voting
vote.votetime = world.timeofday + config.vote_period*10
// when the vote will end
spawn(config.vote_period*10)
vote.endvote()
if(vote.mode == 2)
world << "\red<B>*** A custom vote has been initiated by [usr.key].</B>"
world << "\red You have [vote.timetext(config.vote_period)] to vote."
else
world << "\red<B>*** A vote to [vote.mode?"change game mode":"restart"] has been initiated by [usr.key].</B>"
world << "\red You have [vote.timetext(config.vote_period)] to vote."
log_admin("Voting to [vote.mode?"change mode":"restart round"] forced by admin [key_name(usr)]")
for(var/mob/CM in world)
if(CM.client)
if(config.vote_no_default || (config.vote_no_dead && CM.stat == 2))
CM.client.vote = "none"
else
CM.client.vote = "default"
for(var/mob/CM in world)
if(CM.client)
if(config.vote_no_default || (config.vote_no_dead && CM.stat == 2))
CM.client.vote = "none"
else
CM.client.vote = "default"
//feedback_add_details("admin_verb","SV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/votekill()
set category = "Server"
set name = "Abort Vote"
set desc="Aborts a vote"
if(vote.voting == 0)
alert("No votes in progress")
return
world << "\red <b>*** Voting aborted by [usr.client.stealth ? "Admin Candidate" : usr.key].</b>"
log_admin("Voting aborted by [key_name(usr)]")
vote.voting = 0
vote.nextvotetime = world.timeofday + 10*config.vote_delay
for(var/mob/M in world)
// clear vote window from all clients
if(M.client)
M << browse(null, "window=vote")
M.client.showvote = 0
//feedback_add_details("admin_verb","AV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/voteres()
set category = "Server"
set name = "Toggle Voting"
set desc="Toggles Votes"
var/confirm = alert("What vote would you like to toggle?", "Vote", "Restart [config.allow_vote_restart ? "Off" : "On"]", "Change Game Mode [config.allow_vote_mode ? "Off" : "On"]", "Cancel")
if(confirm == "Cancel")
return
if(confirm == "Restart [config.allow_vote_restart ? "Off" : "On"]")
config.allow_vote_restart = !config.allow_vote_restart
world << "<b>Player restart voting toggled to [config.allow_vote_restart ? "On" : "Off"]</b>."
log_admin("Restart voting toggled to [config.allow_vote_restart ? "On" : "Off"] by [key_name(usr)].")
if(config.allow_vote_restart)
vote.nextvotetime = world.timeofday
if(confirm == "Change Game Mode [config.allow_vote_mode ? "Off" : "On"]")
config.allow_vote_mode = !config.allow_vote_mode
world << "<b>Player mode voting toggled to [config.allow_vote_mode ? "On" : "Off"]</b>."
log_admin("Mode voting toggled to [config.allow_vote_mode ? "On" : "Off"] by [key_name(usr)].")
if(config.allow_vote_mode)
vote.nextvotetime = world.timeofday
//feedback_add_details("admin_verb","TV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
*/
/obj/admins/proc/restart() /obj/admins/proc/restart()
set category = "Server" set category = "Server"
set name = "Restart" set name = "Restart"

View File

@@ -93,6 +93,9 @@
del(src) del(src)
return return
if ("Retired Admin")
holder.level = -3
else else
del(holder) del(holder)
return return
@@ -104,43 +107,34 @@
if (holder.level >= -1) if (holder.level >= -1)
verbs += /client/proc/investigate_show verbs += /client/proc/investigate_show
verbs += /client/proc/cmd_admin_say verbs += /client/proc/cmd_admin_say
verbs += /client/proc/cmd_mod_say
verbs += /client/proc/cmd_admin_gib_self verbs += /client/proc/cmd_admin_gib_self
verbs += /client/proc/update_mob_sprite
verbs += /client/proc/deadmin_self verbs += /client/proc/deadmin_self
else if (holder.level == -3) // Retired Admin
verbs += /client/proc/cmd_admin_say
verbs += /client/proc/cmd_mod_say
return
else return else return
//Moderator //Moderator
if (holder.level >= 0) if (holder.level >= 0)
verbs += /obj/admins/proc/announce
verbs += /obj/admins/proc/startnow
verbs += /obj/admins/proc/toggleAI //Toggle the AI
verbs += /obj/admins/proc/toggleenter //Toggle enterting
verbs += /obj/admins/proc/toggleguests //Toggle guests entering
verbs += /obj/admins/proc/toggleooc //toggle ooc
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
verbs += /obj/admins/proc/show_player_panel
verbs += /client/proc/deadchat //toggles deadchat
//verbs += /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro
verbs += /client/proc/cmd_admin_pm_context verbs += /client/proc/cmd_admin_pm_context
verbs += /client/proc/cmd_admin_pm_panel verbs += /client/proc/cmd_admin_pm_panel
verbs += /client/proc/cmd_admin_subtle_message
//verbs += /client/proc/warn - was never used
verbs += /client/proc/dsay
verbs += /client/proc/admin_ghost
verbs += /client/proc/game_panel
verbs += /client/proc/player_panel
verbs += /client/proc/player_panel_new
verbs += /client/proc/unban_panel
verbs += /client/proc/jobbans
verbs += /client/proc/unjobban_panel
verbs += /client/proc/hide_verbs verbs += /client/proc/hide_verbs
verbs += /client/proc/general_report
verbs += /client/proc/air_report
verbs += /client/proc/deadmin_self verbs += /client/proc/deadmin_self
verbs += /client/proc/check_ai_laws verbs += /client/proc/admin_ghost
//verbs += /client/proc/cmd_admin_prison --Merged with player panel verbs += /client/proc/Report
//verbs += /obj/admins/proc/unprison --Merged with player panel verbs += /client/proc/display_admin_reports
verbs += /obj/admins/proc/show_skills
else return else return
if(holder.level == 0) //Moderators don't get asay, only msay
verbs -= /client/proc/cmd_admin_say
verbs -= /client/proc/investigate_show
verbs -= /client/proc/cmd_admin_gib_self
verbs += /client/proc/mod_panel
//Temporary Admin //Temporary Admin
if (holder.level >= 1) if (holder.level >= 1)
verbs += /obj/admins/proc/delay //game start delay verbs += /obj/admins/proc/delay //game start delay
@@ -152,6 +146,33 @@
verbs += /client/proc/toggle_hear_radio verbs += /client/proc/toggle_hear_radio
verbs += /client/proc/deadmin_self verbs += /client/proc/deadmin_self
//verbs += /client/proc/cmd_admin_attack_log --Merged with view variables //verbs += /client/proc/cmd_admin_attack_log --Merged with view variables
//
//MOVED FROM MODERATOR
//
verbs += /obj/admins/proc/announce
verbs += /obj/admins/proc/startnow
verbs += /obj/admins/proc/toggleAI //Toggle the AI
verbs += /obj/admins/proc/toggleenter //Toggle enterting
verbs += /obj/admins/proc/toggleguests //Toggle guests entering
verbs += /obj/admins/proc/toggleooc //toggle ooc
verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc
verbs += /obj/admins/proc/show_player_panel
verbs += /client/proc/deadchat //toggles deadchat
//verbs += /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro
verbs += /client/proc/cmd_admin_subtle_message
//verbs += /client/proc/warn - was never used
verbs += /client/proc/dsay
verbs += /client/proc/game_panel
verbs += /client/proc/player_panel
verbs += /client/proc/player_panel_new
verbs += /client/proc/unban_panel
verbs += /client/proc/jobbans
verbs += /client/proc/unjobban_panel
verbs += /client/proc/check_ai_laws
//verbs += /client/proc/cmd_admin_prison --Merged with player panel
//verbs += /obj/admins/proc/unprison --Merged with player panel
else return else return
//Admin Candidate //Admin Candidate
@@ -187,8 +208,9 @@
verbs += /proc/possess verbs += /proc/possess
verbs += /proc/release verbs += /proc/release
verbs += /client/proc/one_click_antag verbs += /client/proc/one_click_antag
//BS12 Commands
verbs += /client/proc/admin_deny_shuttle
verbs += /client/proc/editappear
else return else return
//Badmin //Badmin
@@ -429,6 +451,15 @@
verbs -= /obj/admins/proc/access_news_network verbs -= /obj/admins/proc/access_news_network
verbs -= /client/proc/one_click_antag verbs -= /client/proc/one_click_antag
verbs -= /client/proc/invisimin verbs -= /client/proc/invisimin
//BS12 Admin Verbs
verbs -= /client/proc/update_mob_sprite
verbs -= /client/proc/mod_panel
verbs -= /client/proc/admin_deny_shuttle
verbs -= /client/proc/playernotes
verbs -= /obj/admins/proc/show_skills
verbs -= /client/proc/Report
verbs -= /client/proc/display_admin_reports
verbs -= /client/proc/editappear
return return
/client/proc/admin_ghost() /client/proc/admin_ghost()
@@ -490,6 +521,14 @@
feedback_add_details("admin_verb","PPN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","PPN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return return
/client/proc/mod_panel()
set name = "Moderator Panel"
set category = "Admin"
if(holder)
holder.mod_panel()
feedback_add_details("admin_verb","MDRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/client/proc/check_antagonists() /client/proc/check_antagonists()
set name = "Check Antagonists" set name = "Check Antagonists"
set category = "Admin" set category = "Admin"
@@ -560,6 +599,13 @@
message_admins("[key_name_admin(usr)] has turned stealth mode [stealth ? "ON" : "OFF"]", 1) message_admins("[key_name_admin(usr)] has turned stealth mode [stealth ? "ON" : "OFF"]", 1)
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/playernotes()
set name = "Show Player Info"
set category = "Admin"
if(holder)
holder.PlayerNotes()
return
#define AUTOBATIME 10 #define AUTOBATIME 10
/client/proc/warn(var/mob/M in player_list) /client/proc/warn(var/mob/M in player_list)
/*set category = "Special Verbs" /*set category = "Special Verbs"
@@ -807,6 +853,98 @@
config.log_hrefs = 1 config.log_hrefs = 1
src << "<b>Started logging hrefs</b>" src << "<b>Started logging hrefs</b>"
/client/proc/editappear(mob/living/carbon/human/M as mob in world)
set name = "Edit Appearance"
set category = "Fun"
if(!istype(M, /mob/living/carbon/human))
usr << "\red You can only do this to humans!"
return
switch(alert("You sure you wish to edit this mob's appearance?",,"Yes","No"))
if("No")
return
if(!ishuman(M))
usr << "\red Non-humans are not editable yet!"
else
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
if(new_facial)
M.r_facial = hex2num(copytext(new_facial, 2, 4))
M.g_facial = hex2num(copytext(new_facial, 4, 6))
M.b_facial = hex2num(copytext(new_facial, 6, 8))
var/new_hair = input("Please select hair color.", "Character Generation") as color
if(new_facial)
M.r_hair = hex2num(copytext(new_hair, 2, 4))
M.g_hair = hex2num(copytext(new_hair, 4, 6))
M.b_hair = hex2num(copytext(new_hair, 6, 8))
var/new_eyes = input("Please select eye color.", "Character Generation") as color
if(new_eyes)
M.r_eyes = hex2num(copytext(new_eyes, 2, 4))
M.g_eyes = hex2num(copytext(new_eyes, 4, 6))
M.b_eyes = hex2num(copytext(new_eyes, 6, 8))
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
if (new_tone)
M.s_tone = max(min(round(text2num(new_tone)), 220), 1)
M.s_tone = -M.s_tone + 35
// hair
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
var/list/hairs = list()
// loop through potential hairs
for(var/x in all_hairs)
var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x
hairs.Add(H.name) // add hair name to hairs
del(H) // delete the hair after it's all done
var/new_style = input("Please select hair style", "Character Generation") as null|anything in hairs
// if new style selected (not cancel)
if (new_style)
M.h_style = new_style
for(var/x in all_hairs) // loop through all_hairs again. Might be slightly CPU expensive, but not significantly.
var/datum/sprite_accessory/hair/H = new x // create new hair datum
if(H.name == new_style)
M.h_style = H // assign the hair_style variable a new hair datum
break
else
del(H) // if hair H not used, delete. BYOND can garbage collect, but better safe than sorry
// facial hair
var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
var/list/fhairs = list()
for(var/x in all_fhairs)
var/datum/sprite_accessory/facial_hair/H = new x
fhairs.Add(H.name)
del(H)
new_style = input("Please select facial style", "Character Generation") as null|anything in fhairs
if(new_style)
M.f_style = new_style
for(var/x in all_fhairs)
var/datum/sprite_accessory/facial_hair/H = new x
if(H.name == new_style)
M.f_style = H
break
else
del(H)
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender)
if(new_gender == "Male")
M.gender = MALE
else
M.gender = FEMALE
M.regenerate_icons()
M.update_body()
M.check_dna(M)
/client/proc/check_ai_laws() /client/proc/check_ai_laws()
set name = "Check AI Laws" set name = "Check AI Laws"
set category = "Admin" set category = "Admin"

View File

@@ -1,3 +1,227 @@
/obj/admins/proc/player_panel_new()//The new one
if (!usr.client.holder)
return
var/dat = "<html><head><title>Player Menu</title></head>"
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name/Real Name</th><th>Type</th><th>Assigned Job</th><th>Info</th><th>Options</th><th>Traitor?</th></tr></B>"
//add <th>IP:</th> to this if wanting to add back in IP checking
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
var/list/mobs = get_sorted_mobs()
var/i = 1
for(var/mob/M in mobs)
if(M.ckey)
var/color = "#e6e6e6"
i++
if(i%2 == 0)
color = "#f2f2f2"
var/real = (M.name == M.real_name ? "<b>[M.name]/[M.real_name]</b>" : "<b>[M.real_name] (as [M.name]/[M.real_name])</b>")
var/turf/T = get_turf(M)
var/client_key = (M.key? M.key : "No key")
dat += "<tr align='center' bgcolor='[color]'><td>[real] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
if(isobserver(M))
dat += "<td>Ghost</td>"
else if(isalien(M))
dat += "<td>Alien</td>"
else if(islarva(M))
dat += "<td>Alien larva</td>"
else if(istajaran(M))
dat += "<td>Tajaran</td>"
else if(ishuman(M))
dat += "<td>[M.job]</td>"
else if(ismetroid(M))
dat += "<td>Metroid</td>"
else if(ismonkey(M))
dat += "<td>Monkey</td>"
else if(isAI(M))
dat += "<td>AI</td>"
else if(ispAI(M))
dat += "<td>pAI</td>"
else if(isrobot(M))
dat += "<td>Cyborg</td>"
else if(isanimal(M))
dat += "<td>Animal</td>"
else if(iscorgi(M))
dat += "<td>Corgi</td>"
else if(istype(M,/mob/new_player))
dat += "<td>New Player</td>"
else
dat += "<td>\red ERROR</td>\black"
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
if (H.wear_id)
var/obj/item/weapon/card/id/id
if(istype(H.wear_id, /obj/item/device/pda))
var/obj/item/device/pda/PDA = H.wear_id
if(!isnull(PDA.id)) // The PDA may contain no ID
id = PDA.id // The ID is contained inside the PDA
else
id = H.wear_id // The ID was on the ID slot
if(!id) // Happens when there's no ID in the PDA located on the wear_id slot
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel
if(istype(id, /obj/item/weapon/card/id/syndicate))
dat += "<td><font color=purple>Antagonist</font></td>"
else
usr << "<font color=red>ERROR:</font> Inform the coders that an [id.name] was checked for its assignment variable, and it was null."
dat += "<td><font color=red>ERROR</font></td>"
else
if(M.mind.assigned_role == id.assignment) // Polymorph
dat += "<td>[M.mind.assigned_role]</td>"
else
dat += "<td>[M.mind.assigned_role] ([id.assignment])"
else
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
else
dat += "<td>No Assigned Role</td>"
var/muting = "Not Currently Working"
// if(M.client)
// muting = {"<A href='?src=\ref[src];mute2=\ref[M]'>Mute: [(M.client.muted ? "Muted" : "Voiced")]</A> |
// <A href='?src=\ref[src];mute_complete=\ref[M]'>Complete mute: [(M.client.muted ? "Completely Muted" : "Voiced")]</A>
// "}
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A> |
<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A> |
<A HREF='?src=\ref[src];adminplayervars=\ref[M]'>VV</A> |
<A HREF='?src=\ref[src];traitor_panel_pp=\ref[M]'>TP</A> |
<A HREF='?src=\ref[src];adminplayersubtlemessage=\ref[M]'>SM</A> |
<A HREF='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</A></font>
<br><font size="2">[muting]</font><br>
<font size="2"><A href='?src=\ref[src];warn=\ref[M]'>Warn</A> | <A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | <A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | <A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A></td>
"}
switch(is_special_character(M))
if(0)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
if(1)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
if(2)
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
dat += "</table></body></html>"
usr << browse(dat, "window=players;size=905x600")
/obj/admins/proc/mod_panel()//The new one
if (!usr.client.holder)
return
var/dat = "<html><head><title>Player Menu</title></head>"
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name/Real Name</th><th>IP/CID</th><th>Info</th><th>Options</th><th>Traitor?</th></tr></B>"
//add <th>IP:</th> to this if wanting to add back in IP checking <th>Type</th> <th>Assigned Job</th> <th>Traitor?</th>
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
var/list/mobs = get_sorted_mobs()
var/i = 1
for(var/mob/M in mobs)
if(M.ckey)
var/color = "#e6e6e6"
i++
if(i%2 == 0)
color = "#f2f2f2"
var/real = (M.name == M.real_name ? "<b>[M.name]/[M.real_name]</b>" : "<b>[M.real_name] (as [M.name]/[M.real_name])</b>")
var/turf/T = get_turf(M)
var/client_key = (M.key? M.key : "No key")
dat += "<tr align='center' bgcolor='[color]'><td>[real] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
/* if(isobserver(M))
dat += "<td>Ghost</td>"
else if(isalien(M))
dat += "<td>Alien</td>"
else if(islarva(M))
dat += "<td>Alien larva</td>"
else if(istajaran(M))
dat += "<td>Tajaran</td>"
else if(ishuman(M))
dat += "<td>[M.job]</td>"
else if(ismetroid(M))
dat += "<td>Metroid</td>"
else if(ismonkey(M))
dat += "<td>Monkey</td>"
else if(isAI(M))
dat += "<td>AI</td>"
else if(ispAI(M))
dat += "<td>pAI</td>"
else if(isrobot(M))
dat += "<td>Cyborg</td>"
else if(isanimal(M))
dat += "<td>Animal</td>"
else if(iscorgi(M))
dat += "<td>Corgi</td>"
else if(istype(M,/mob/new_player))
dat += "<td>New Player</td>"
else
dat += "<td>\red ERROR</td>\black"
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
if (H.wear_id)
var/obj/item/weapon/card/id/id
if(istype(H.wear_id, /obj/item/device/pda))
var/obj/item/device/pda/PDA = H.wear_id
if(!isnull(PDA.id)) // The PDA may contain no ID
id = PDA.id // The ID is contained inside the PDA
else
id = H.wear_id // The ID was on the ID slot
if(!id) // Happens when there's no ID in the PDA located on the wear_id slot
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel
if(istype(id, /obj/item/weapon/card/id/syndicate))
dat += "<td><font color=purple>Antagonist</font></td>"
else
usr << "<font color=red>ERROR:</font> Inform the coders that an [id.name] was checked for its assignment variable, and it was null."
dat += "<td><font color=red>ERROR</font></td>"
else
if(M.mind.assigned_role == id.assignment) // Polymorph
dat += "<td>[M.mind.assigned_role]</td>"
else
dat += "<td>[M.mind.assigned_role] ([id.assignment])"
else
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
else
dat += "<td>No Assigned Role</td>"
*/
dat += {"<td>IP: [M.client ? M.client.address : "Disconnected"]<br>
CID: [M.client ? M.client.computer_id : "Disconnected"]</td>
"}
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A></td>
"}
switch(is_special_character(M))
if(0)
dat += {"<td align=center>Loyal</td>"}
if(1)
dat += {"<td align=center><font color=red>Antag</font></td>"}
if(2)
dat += {"<td align=center><font color=red><b>Mode-Antag</b></font></td>"}
dat += "</table></body></html>"
usr << browse(dat, "window=players;size=600x600")
/* //TG Player Panel
/obj/admins/proc/player_panel_new()//The new one /obj/admins/proc/player_panel_new()//The new one
if (!usr.client.holder) if (!usr.client.holder)
return return
@@ -316,7 +540,7 @@
"} "}
usr << browse(dat, "window=players;size=600x480") usr << browse(dat, "window=players;size=600x480")
*/
//The old one //The old one
/obj/admins/proc/player_panel_old() /obj/admins/proc/player_panel_old()
if (!usr.client.holder) if (!usr.client.holder)
@@ -492,113 +716,4 @@
dat += "</body></html>" dat += "</body></html>"
usr << browse(dat, "window=roundstatus;size=400x500") usr << browse(dat, "window=roundstatus;size=400x500")
else else
alert("The game hasn't started yet!") alert("The game hasn't started yet!")
/obj/admins/proc/mod_panel()//The new one
if (!usr.client.holder)
return
var/dat = "<html><head><title>Player Menu</title></head>"
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name/Real Name</th><th>IP/CID</th><th>Info</th><th>Options</th><th>Traitor?</th></tr></B>"
//add <th>IP:</th> to this if wanting to add back in IP checking <th>Type</th> <th>Assigned Job</th> <th>Traitor?</th>
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
var/list/mobs = get_sorted_mobs()
var/i = 1
for(var/mob/M in mobs)
if(M.ckey)
var/color = "#e6e6e6"
i++
if(i%2 == 0)
color = "#f2f2f2"
//no idea what tg used to replace original_name, probably a proc floating around somewhere
//var/real = (M.real_name == M.original_name ? "<b>[M.name]/[M.real_name]</b>" : "<b>[M.original_name] (as [M.name]/[M.real_name])</b>")
var/real = "<b>[M.name]/[M.real_name]</b>"
var/turf/T = get_turf(M)
var/client_key = (M.key? M.key : "No key")
dat += "<tr align='center' bgcolor='[color]'><td>[real] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
/* if(isobserver(M))
dat += "<td>Ghost</td>"
else if(isalien(M))
dat += "<td>Alien</td>"
else if(islarva(M))
dat += "<td>Alien larva</td>"
else if(istajaran(M))
dat += "<td>Tajaran</td>"
else if(ishuman(M))
dat += "<td>[M.job]</td>"
else if(ismetroid(M))
dat += "<td>Metroid</td>"
else if(ismonkey(M))
dat += "<td>Monkey</td>"
else if(isAI(M))
dat += "<td>AI</td>"
else if(ispAI(M))
dat += "<td>pAI</td>"
else if(isrobot(M))
dat += "<td>Cyborg</td>"
else if(isanimal(M))
dat += "<td>Animal</td>"
else if(iscorgi(M))
dat += "<td>Corgi</td>"
else if(istype(M,/mob/new_player))
dat += "<td>New Player</td>"
else
dat += "<td>\red ERROR</td>\black"
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
if (H.wear_id)
var/obj/item/weapon/card/id/id
if(istype(H.wear_id, /obj/item/device/pda))
var/obj/item/device/pda/PDA = H.wear_id
if(!isnull(PDA.id)) // The PDA may contain no ID
id = PDA.id // The ID is contained inside the PDA
else
id = H.wear_id // The ID was on the ID slot
if(!id) // Happens when there's no ID in the PDA located on the wear_id slot
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel
if(istype(id, /obj/item/weapon/card/id/syndicate))
dat += "<td><font color=purple>Antagonist</font></td>"
else
usr << "<font color=red>ERROR:</font> Inform the coders that an [id.name] was checked for its assignment variable, and it was null."
dat += "<td><font color=red>ERROR</font></td>"
else
if(M.mind.assigned_role == id.assignment) // Polymorph
dat += "<td>[M.mind.assigned_role]</td>"
else
dat += "<td>[M.mind.assigned_role] ([id.assignment])"
else
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
else
dat += "<td>No Assigned Role</td>"
*/
dat += {"<td>IP: [M.client ? M.client.address : "Disconnected"]<br>
CID: [M.client ? M.client.computer_id : "Disconnected"]</td>
"}
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A></td>
"}
switch(is_special_character(M))
if(0)
dat += {"<td align=center>Loyal</td>"}
if(1)
dat += {"<td align=center><font color=red>Antag</font></td>"}
if(2)
dat += {"<td align=center><font color=red><b>Mode-Antag</b></font></td>"}
dat += "</table></body></html>"
usr << browse(dat, "window=players;size=600x600")

View File

@@ -819,6 +819,22 @@ Traitors and the like can also be revived with the previous role mostly intact.
return return
/client/proc/admin_deny_shuttle()
set category = "Admin"
set name = "Toggle Deny Shuttle"
if (!ticker)
return
if (!holder)
src << "Only administrators may use this command."
return
emergency_shuttle.deny_shuttle = !emergency_shuttle.deny_shuttle
log_admin("[key_name(src)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.")
message_admins("[key_name_admin(usr)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.")
/client/proc/cmd_admin_attack_log(mob/M as mob in mob_list) /client/proc/cmd_admin_attack_log(mob/M as mob in mob_list)
set category = "Special Verbs" set category = "Special Verbs"
set name = "Attack Log" set name = "Attack Log"

View File

@@ -217,7 +217,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
A.loc = T A.loc = T
else else
A << "This mob is not located in the game world." A << "This mob is not located in the game world."
/*
/mob/dead/observer/verb/boo() /mob/dead/observer/verb/boo()
set category = "Ghost" set category = "Ghost"
set name = "Boo!" set name = "Boo!"
@@ -231,7 +231,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return return
//Maybe in the future we can add more <i>spooky</i> code here! //Maybe in the future we can add more <i>spooky</i> code here!
return return
*/
/mob/dead/observer/verb/toggle_alien_candidate() /mob/dead/observer/verb/toggle_alien_candidate()
set name = "Toggle Be Alien Candidate" set name = "Toggle Be Alien Candidate"
set category = "Ghost" set category = "Ghost"

View File

@@ -46,6 +46,45 @@
src.adding += using src.adding += using
action_intent = using action_intent = using
//intent small hud objects
using = new src.h_type( src )
using.name = "help"
using.icon = 'screen1_alien.dmi'
using.icon_state = (mymob.a_intent == "help" ? "help_small_active" : "help_small")
using.screen_loc = ui_help_small
using.layer = 21
src.adding += using
help_intent = using
using = new src.h_type( src )
using.name = "disarm"
using.icon = 'screen1_alien.dmi'
using.icon_state = (mymob.a_intent == "disarm" ? "disarm_small_active" : "disarm_small")
using.screen_loc = ui_disarm_small
using.layer = 21
src.adding += using
disarm_intent = using
using = new src.h_type( src )
using.name = "grab"
using.icon = 'screen1_alien.dmi'
using.icon_state = (mymob.a_intent == "grab" ? "grab_small_active" : "grab_small")
using.screen_loc = ui_grab_small
using.layer = 21
src.adding += using
grab_intent = using
using = new src.h_type( src )
using.name = "harm"
using.icon = 'screen1_alien.dmi'
using.icon_state = (mymob.a_intent == "hurt" ? "harm_small_active" : "harm_small")
using.screen_loc = ui_harm_small
using.layer = 21
src.adding += using
hurt_intent = using
//end intent small hud objects
using = new src.h_type( src ) using = new src.h_type( src )
using.name = "mov_intent" using.name = "mov_intent"
using.dir = SOUTHWEST using.dir = SOUTHWEST

View File

@@ -393,6 +393,10 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been thrown by [usr.name] ([usr.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>") M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been thrown by [usr.name] ([usr.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>") usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
log_attack("<font color='red'>[usr.name] ([usr.ckey]) Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
log_admin("ATTACK: [usr.name] ([usr.ckey]) Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]")
msg_admin_attack("ATTACK: [usr.name] ([usr.ckey]) Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]")
if(!item) return //Grab processing has a chance of returning null if(!item) return //Grab processing has a chance of returning null
u_equip(item) u_equip(item)

View File

@@ -51,6 +51,45 @@
src.adding += using src.adding += using
action_intent = using action_intent = using
//intent small hud objects
using = new src.h_type( src )
using.name = "help"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "help" ? "help_small_active" : "help_small")
using.screen_loc = ui_help_small
using.layer = 21
src.adding += using
help_intent = using
using = new src.h_type( src )
using.name = "disarm"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "disarm" ? "disarm_small_active" : "disarm_small")
using.screen_loc = ui_disarm_small
using.layer = 21
src.adding += using
disarm_intent = using
using = new src.h_type( src )
using.name = "grab"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "grab" ? "grab_small_active" : "grab_small")
using.screen_loc = ui_grab_small
using.layer = 21
src.adding += using
grab_intent = using
using = new src.h_type( src )
using.name = "harm"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "hurt" ? "harm_small_active" : "harm_small")
using.screen_loc = ui_harm_small
using.layer = 21
src.adding += using
hurt_intent = using
//end intent small hud objects
using = new src.h_type( src ) using = new src.h_type( src )
using.name = "mov_intent" using.name = "mov_intent"
using.dir = SOUTHWEST using.dir = SOUTHWEST

View File

@@ -54,6 +54,45 @@
src.adding += using src.adding += using
action_intent = using action_intent = using
//intent small hud objects
using = new src.h_type( src )
using.name = "help"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "help" ? "help_small_active" : "help_small")
using.screen_loc = ui_help_small
using.layer = 21
src.adding += using
help_intent = using
using = new src.h_type( src )
using.name = "disarm"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "disarm" ? "disarm_small_active" : "disarm_small")
using.screen_loc = ui_disarm_small
using.layer = 21
src.adding += using
disarm_intent = using
using = new src.h_type( src )
using.name = "grab"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "grab" ? "grab_small_active" : "grab_small")
using.screen_loc = ui_grab_small
using.layer = 21
src.adding += using
grab_intent = using
using = new src.h_type( src )
using.name = "harm"
using.icon = ui_style
using.icon_state = (mymob.a_intent == "hurt" ? "harm_small_active" : "harm_small")
using.screen_loc = ui_harm_small
using.layer = 21
src.adding += using
hurt_intent = using
//end intent small hud objects
using = new src.h_type( src ) using = new src.h_type( src )
using.name = "mov_intent" using.name = "mov_intent"
using.dir = SOUTHWEST using.dir = SOUTHWEST

View File

@@ -69,15 +69,31 @@
if("help") if("help")
usr.a_intent = "disarm" usr.a_intent = "disarm"
usr.hud_used.action_intent.icon_state = "disarm" usr.hud_used.action_intent.icon_state = "disarm"
usr.hud_used.hurt_intent.icon_state = "harm_small"
usr.hud_used.help_intent.icon_state = "help_small"
usr.hud_used.grab_intent.icon_state = "grab_small"
usr.hud_used.disarm_intent.icon_state = "disarm_small_active"
if("disarm") if("disarm")
usr.a_intent = "grab" usr.a_intent = "grab"
usr.hud_used.action_intent.icon_state = "grab" usr.hud_used.action_intent.icon_state = "grab"
usr.hud_used.hurt_intent.icon_state = "harm_small"
usr.hud_used.help_intent.icon_state = "help_small"
usr.hud_used.grab_intent.icon_state = "grab_small_active"
usr.hud_used.disarm_intent.icon_state = "disarm_small"
if("grab") if("grab")
usr.a_intent = "hurt" usr.a_intent = "hurt"
usr.hud_used.action_intent.icon_state = "harm" usr.hud_used.action_intent.icon_state = "harm"
usr.hud_used.hurt_intent.icon_state = "harm_small_active"
usr.hud_used.help_intent.icon_state = "help_small"
usr.hud_used.grab_intent.icon_state = "grab_small"
usr.hud_used.disarm_intent.icon_state = "disarm_small"
if("hurt") if("hurt")
usr.a_intent = "help" usr.a_intent = "help"
usr.hud_used.action_intent.icon_state = "help" usr.hud_used.action_intent.icon_state = "help"
usr.hud_used.hurt_intent.icon_state = "harm_small"
usr.hud_used.help_intent.icon_state = "help_small_active"
usr.hud_used.grab_intent.icon_state = "grab_small"
usr.hud_used.disarm_intent.icon_state = "disarm_small"
else if(isrobot(usr)) else if(isrobot(usr))
if(usr.a_intent == "help") if(usr.a_intent == "help")
usr.a_intent = "hurt" usr.a_intent = "hurt"

View File

@@ -241,13 +241,26 @@
return return
switch(name) switch(name)
if("act_intent") if("act_intent")
if(ishuman(usr) || istype(usr,/mob/living/carbon/alien/humanoid) || islarva(usr)) if (usr.hud_used.show_intent_icons)
var/intent = usr.a_intent usr.hud_used.show_intent_icons = 0
if(intent == "hurt") usr.client.screen -= usr.hud_used.intent_small_hud_objects
intent = "harm" //hurt and harm have different sprite names for some reason. if("harm")
usr.hud_used.action_intent.icon_state = "[intent]" if (usr.hud_used.show_intent_icons)
usr.hud_used.show_intent_icons = 0
usr.client.screen -= usr.hud_used.intent_small_hud_objects
if("help")
if (usr.hud_used.show_intent_icons)
usr.hud_used.show_intent_icons = 0
usr.client.screen -= usr.hud_used.intent_small_hud_objects
if("disarm")
if (usr.hud_used.show_intent_icons)
usr.hud_used.show_intent_icons = 0
usr.client.screen -= usr.hud_used.intent_small_hud_objects
if("grab")
if (usr.hud_used.show_intent_icons)
usr.hud_used.show_intent_icons = 0
usr.client.screen -= usr.hud_used.intent_small_hud_objects
*/ */
/obj/screen/Click(location, control, params) /obj/screen/Click(location, control, params)
switch(name) switch(name)
if("map") if("map")
@@ -381,19 +394,39 @@
if("help") if("help")
usr.a_intent = "help" usr.a_intent = "help"
usr.hud_used.action_intent.icon_state = "help" usr.hud_used.action_intent.icon_state = "help"
usr.hud_used.show_intent_icons = 0 usr.hud_used.hurt_intent.icon_state = "harm_small"
usr.hud_used.help_intent.icon_state = "help_small_active"
usr.hud_used.grab_intent.icon_state = "grab_small"
usr.hud_used.disarm_intent.icon_state = "disarm_small"
// usr.hud_used.show_intent_icons = 0
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
if("harm") if("harm")
usr.a_intent = "hurt" usr.a_intent = "hurt"
usr.hud_used.action_intent.icon_state = "harm" usr.hud_used.action_intent.icon_state = "harm"
usr.hud_used.show_intent_icons = 0 usr.hud_used.hurt_intent.icon_state = "harm_small_active"
usr.hud_used.help_intent.icon_state = "help_small"
usr.hud_used.grab_intent.icon_state = "grab_small"
usr.hud_used.disarm_intent.icon_state = "disarm_small"
// usr.hud_used.show_intent_icons = 0
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
if("grab") if("grab")
usr.a_intent = "grab" usr.a_intent = "grab"
usr.hud_used.action_intent.icon_state = "grab" usr.hud_used.action_intent.icon_state = "grab"
usr.hud_used.show_intent_icons = 0 usr.hud_used.hurt_intent.icon_state = "harm_small"
usr.hud_used.help_intent.icon_state = "help_small"
usr.hud_used.grab_intent.icon_state = "grab_small_active"
usr.hud_used.disarm_intent.icon_state = "disarm_small"
// usr.hud_used.show_intent_icons = 0
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
if("disarm") if("disarm")
usr.a_intent = "disarm" usr.a_intent = "disarm"
usr.hud_used.action_intent.icon_state = "disarm" usr.hud_used.action_intent.icon_state = "disarm"
usr.hud_used.show_intent_icons = 0 usr.hud_used.hurt_intent.icon_state = "harm_small"
usr.hud_used.help_intent.icon_state = "help_small"
usr.hud_used.grab_intent.icon_state = "grab_small"
usr.hud_used.disarm_intent.icon_state = "disarm_small_active"
// usr.hud_used.show_intent_icons = 0
// usr.client.screen -= usr.hud_used.intent_small_hud_objects
if("pull") if("pull")
usr.stop_pulling() usr.stop_pulling()
if("throw") if("throw")

View File

@@ -114,6 +114,9 @@
for (var/mob/C in viewers(src)) for (var/mob/C in viewers(src))
C.show_message("\red [GM.name] has been placed in the [src] by [user].", 3) C.show_message("\red [GM.name] has been placed in the [src] by [user].", 3)
del(G) del(G)
log_attack("<font color='red'>[usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.</font>")
log_admin("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
msg_admin_attack("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
return return
if(!I) return if(!I) return

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 113 KiB