Merge branch 'master' of https://github.com/Yawn-Wider/YWPolarisVore into UpstreamMergeApril2020

This commit is contained in:
Erik
2020-04-11 16:53:35 -07:00
2323 changed files with 1758903 additions and 156537 deletions
+18 -17
View File
@@ -50,9 +50,10 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
if(query.NextRow())
validckey = 1
if(!validckey)
if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key)))
message_admins("<font color='red'>[key_name_admin(usr)] attempted to ban [ckey], but [ckey] has not been seen yet. Please only ban actual players.</font>",1)
return
if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) //VOREStation Edit Start.
var/confirm = alert(usr, "This ckey hasn't been seen, are you sure?", "Confirm Badmin" , "Yes", "No")
if(confirm == "No")
return //VOREStation Edit End
var/a_ckey
var/a_computerid
@@ -82,7 +83,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
var/sql = "INSERT INTO erro_ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)"
var/DBQuery/query_insert = dbcon.NewQuery(sql)
query_insert.Execute()
usr << "<font color='blue'>Ban saved to database.</font>"
to_chat(usr, "<font color='blue'>Ban saved to database.</font>")
message_admins("[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1)
@@ -136,17 +137,17 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
ban_number++;
if(ban_number == 0)
usr << "<font color='red'>Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.</font>"
to_chat(usr, "<font color='red'>Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.</font>")
return
if(ban_number > 1)
usr << "<font color='red'>Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.</font>"
to_chat(usr, "<font color='red'>Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.</font>")
return
if(istext(ban_id))
ban_id = text2num(ban_id)
if(!isnum(ban_id))
usr << "<font color='red'>Database update failed due to a ban ID mismatch. Contact the database admin.</font>"
to_chat(usr, "<font color='red'>Database update failed due to a ban ID mismatch. Contact the database admin.</font>")
return
DB_ban_unban_by_id(ban_id)
@@ -156,7 +157,7 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
if(!check_rights(R_BAN)) return
if(!isnum(banid) || !istext(param))
usr << "Cancelled"
to_chat(usr, "Cancelled")
return
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, duration, reason FROM erro_ban WHERE id = [banid]")
@@ -172,7 +173,7 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
duration = query.item[2]
reason = query.item[3]
else
usr << "Invalid ban id. Contact the database admin"
to_chat(usr, "Invalid ban id. Contact the database admin")
return
reason = sql_sanitize_text(reason)
@@ -184,7 +185,7 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
value = sanitize(input("Insert the new reason for [pckey]'s ban", "New Reason", "[reason]", null) as null|text)
value = sql_sanitize_text(value)
if(!value)
usr << "Cancelled"
to_chat(usr, "Cancelled")
return
var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_ban SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from <cite><b>\\\"[reason]\\\"</b></cite> to <cite><b>\\\"[value]\\\"</b></cite><BR>') WHERE id = [banid]")
@@ -194,7 +195,7 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
if(!value)
value = input("Insert the new duration (in minutes) for [pckey]'s ban", "New Duration", "[duration]", null) as null|num
if(!isnum(value) || !value)
usr << "Cancelled"
to_chat(usr, "Cancelled")
return
var/DBQuery/update_query = dbcon.NewQuery("UPDATE erro_ban SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]<br>'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]")
@@ -205,10 +206,10 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
DB_ban_unban_by_id(banid)
return
else
usr << "Cancelled"
to_chat(usr, "Cancelled")
return
else
usr << "Cancelled"
to_chat(usr, "Cancelled")
return
datum/admins/proc/DB_ban_unban_by_id(var/id)
@@ -231,11 +232,11 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
ban_number++;
if(ban_number == 0)
usr << "<font color='red'>Database update failed due to a ban id not being present in the database.</font>"
to_chat(usr, "<font color='red'>Database update failed due to a ban id not being present in the database.</font>")
return
if(ban_number > 1)
usr << "<font color='red'>Database update failed due to multiple bans having the same ID. Contact the database admin.</font>"
to_chat(usr, "<font color='red'>Database update failed due to multiple bans having the same ID. Contact the database admin.</font>")
return
if(!src.owner || !istype(src.owner, /client))
@@ -271,7 +272,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
establish_db_connection()
if(!dbcon.IsConnected())
usr << "<font color='red'>Failed to establish database connection</font>"
to_chat(usr, "<font color='red'>Failed to establish database connection</font>")
return
var/output = "<div align='center'><table width='90%'><tr>"
@@ -300,7 +301,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
output += "<option value=''>--</option>"
for(var/j in get_all_jobs())
output += "<option value='[j]'>[j]</option>"
for(var/j in nonhuman_positions)
for(var/j in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC))
output += "<option value='[j]'>[j]</option>"
var/list/bantypes = list("traitor","changeling","operative","revolutionary","cultist","wizard") //For legacy bans.
for(var/antag_type in all_antag_types) // Grab other bans.
+5 -5
View File
@@ -106,7 +106,7 @@ var/savefile/Banlist
Banlist.cd = "/base"
if ( Banlist.dir.Find("[ckey][computerid]") )
usr << text("<font color='red'>Ban already exists.</font>")
to_chat(usr, "<font color='red'>Ban already exists.</font>")
return 0
else
Banlist.dir.Add("[ckey][computerid]")
@@ -208,17 +208,17 @@ var/savefile/Banlist
Banlist.cd = "/base"
Banlist.dir.Add("trash[i]trashid[i]")
Banlist.cd = "/base/trash[i]trashid[i]"
Banlist["key"] << "trash[i]"
to_chat(Banlist["key"], "trash[i]")
else
Banlist.cd = "/base"
Banlist.dir.Add("[last]trashid[i]")
Banlist.cd = "/base/[last]trashid[i]"
Banlist["key"] << last
Banlist["id"] << "trashid[i]"
Banlist["reason"] << "Trashban[i]."
to_chat(Banlist["id"], "trashid[i]")
to_chat(Banlist["reason"], "Trashban[i].")
Banlist["temp"] << a
Banlist["minutes"] << CMinutes + rand(1,2000)
Banlist["bannedby"] << "trashmin"
to_chat(Banlist["bannedby"], "trashmin")
last = "trash[i]"
Banlist.cd = "/base"
+2 -1
View File
@@ -37,7 +37,8 @@
F[cleaned] << 1
F["last_update"] << world.realtime
log_misc("ToR data updated!")
if(usr) usr << "ToRban updated."
if(usr)
to_chat(usr, "ToRban updated.")
return 1
log_misc("ToR data update aborted: no data.")
return 0
+75 -72
View File
@@ -10,7 +10,7 @@ var/global/floorIsLava = 0
for(var/client/C in admins)
if((R_ADMIN|R_MOD) & C.holder.rights)
C << msg
to_chat(C,msg)
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
var/rendered = "<span class=\"log_message\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
@@ -18,12 +18,12 @@ var/global/floorIsLava = 0
if((R_ADMIN|R_MOD) & C.holder.rights)
if(C.is_preference_enabled(/datum/client_preference/mod/show_attack_logs))
var/msg = rendered
C << msg
to_chat(C,msg)
proc/admin_notice(var/message, var/rights)
for(var/mob/M in mob_list)
if(check_rights(rights, 0, M))
M << message
to_chat(M,message)
///////////////////////////////////////////////////////////////////////////////////////////////Panels
@@ -33,12 +33,12 @@ proc/admin_notice(var/message, var/rights)
set desc="Edit player (respawn, ban, heal, etc)"
if(!M)
usr << "You seem to be selecting a mob that doesn't exist anymore."
to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.")
return
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
to_chat(usr, "Error: you are not an admin!")
return
var/body = "<html><head><title>Options for [M.key]</title></head>"
@@ -75,6 +75,7 @@ proc/admin_notice(var/message, var/rights)
if(M.client)
body += "| <A HREF='?src=\ref[src];sendtoprison=\ref[M]'>Prison</A> | "
body += "\ <A HREF='?src=\ref[src];sendbacktolobby=\ref[M]'>Send back to Lobby</A> | "
var/muted = M.client.prefs.muted
body += {"<br><b>Mute: </b>
\[<A href='?src=\ref[src];mute=\ref[M];mute_type=[MUTE_IC]'><font color='[(muted & MUTE_IC)?"red":"blue"]'>IC</font></a> |
@@ -90,7 +91,7 @@ proc/admin_notice(var/message, var/rights)
<A href='?src=\ref[src];getmob=\ref[M]'>Get</A> |
<A href='?src=\ref[src];sendmob=\ref[M]'>Send To</A>
<br><br>
[check_rights(R_ADMIN|R_MOD,0) ? "<A href='?src=\ref[src];traitor=\ref[M]'>Traitor panel</A> | " : "" ]
[check_rights(R_ADMIN|R_MOD|R_EVENT,0) ? "<A href='?src=\ref[src];traitor=\ref[M]'>Traitor panel</A> | " : "" ]
<A href='?src=\ref[src];narrateto=\ref[M]'>Narrate to</A> |
<A href='?src=\ref[src];subtlemessage=\ref[M]'>Subtle message</A>
"}
@@ -128,6 +129,8 @@ proc/admin_notice(var/message, var/rights)
else
body += "<A href='?src=\ref[src];makeanimal=\ref[M]'>Animalize</A> | "
body += "<A href='?src=\ref[src];respawn=\ref[M.client]'>Respawn</A> | "
// DNA2 - Admin Hax
if(M.dna && iscarbon(M))
body += "<br><br>"
@@ -222,7 +225,7 @@ proc/admin_notice(var/message, var/rights)
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
to_chat(usr, "Error: you are not an admin!")
return
PlayerNotesPage(1)
@@ -280,7 +283,7 @@ proc/admin_notice(var/message, var/rights)
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
to_chat(usr, "Error: you are not an admin!")
return
var/dat = "<html><head><title>Info on [key]</title></head>"
dat += "<body>"
@@ -330,7 +333,7 @@ proc/admin_notice(var/message, var/rights)
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
to_chat(usr, "Error: you are not an admin!")
return
var/dat
dat = text("<HEAD><TITLE>Admin Newscaster</TITLE></HEAD><H3>Admin Newscaster Unit</H3>")
@@ -561,8 +564,8 @@ proc/admin_notice(var/message, var/rights)
else
dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
//world << "Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]"
//world << "Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]"
//to_world("Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]")
//to_world("Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]")
usr << browse(dat, "window=admincaster_main;size=400x600")
onclose(usr, "admincaster_main")
@@ -645,7 +648,7 @@ proc/admin_notice(var/message, var/rights)
if(confirm == "Cancel")
return
if(confirm == "Yes")
world << "<span class='danger'>Restarting world!</span> <span class='notice'>Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!</span>"
to_world("<span class='danger'>Restarting world!</span> <span class='notice'>Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!</span>")
log_admin("[key_name(usr)] initiated a reboot.")
feedback_set_details("end_error","admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]")
@@ -669,7 +672,7 @@ proc/admin_notice(var/message, var/rights)
if(!check_rights(R_SERVER,0))
message = sanitize(message, 500, extra = 0)
message = replacetext(message, "\n", "<br>") // required since we're putting it in a <p> tag
world << "<span class=notice><b>[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:</b><p style='text-indent: 50px'>[message]</p></span>"
to_world("<span class=notice><b>[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:</b><p style='text-indent: 50px'>[message]</p></span>")
log_admin("Announce: [key_name(usr)] : [message]")
feedback_add_details("admin_verb","A") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -710,7 +713,7 @@ var/datum/announcement/minor/admin_min_announcer = new
if(!channel) //They picked a channel
return
to_chat(usr,"<span class='notice'><B>Intercom Convo Directions</B><br>Start the conversation with the sender, a pipe (|), and then the message on one line. Then hit enter to \
to_chat(usr, "<span class='notice'><B>Intercom Convo Directions</B><br>Start the conversation with the sender, a pipe (|), and then the message on one line. Then hit enter to \
add another line, and type a (whole) number of seconds to pause between that message, and the next message, then repeat the message syntax up to 20 times. For example:<br>\
--- --- ---<br>\
Some Guy|Hello guys, what's up?<br>\
@@ -734,12 +737,12 @@ var/datum/announcement/minor/admin_min_announcer = new
//Time to find how they screwed up.
//Wasn't the right length
if((decomposed.len) % 3) //+1 to accomidate the lack of a wait time for the last message
to_chat(usr,"<span class='warning'>You passed [decomposed.len] segments (senders+messages+pauses). You must pass a multiple of 3, minus 1 (no pause after the last message). That means a sender and message on every other line (starting on the first), separated by a pipe character (|), and a number every other line that is a pause in seconds.</span>")
to_chat(usr, "<span class='warning'>You passed [decomposed.len] segments (senders+messages+pauses). You must pass a multiple of 3, minus 1 (no pause after the last message). That means a sender and message on every other line (starting on the first), separated by a pipe character (|), and a number every other line that is a pause in seconds.</span>")
return
//Too long a conversation
if((decomposed.len / 3) > 20)
to_chat(usr,"<span class='warning'>This conversation is too long! 20 messages maximum, please.</span>")
to_chat(usr, "<span class='warning'>This conversation is too long! 20 messages maximum, please.</span>")
return
//Missed some sleeps, or sanitized to nothing.
@@ -748,24 +751,24 @@ var/datum/announcement/minor/admin_min_announcer = new
//Sanitize sender
var/clean_sender = sanitize(decomposed[i])
if(!clean_sender)
to_chat(usr,"<span class='warning'>One part of your conversation was not able to be sanitized. It was the sender of the [(i+2)/3]\th message.</span>")
to_chat(usr, "<span class='warning'>One part of your conversation was not able to be sanitized. It was the sender of the [(i+2)/3]\th message.</span>")
return
decomposed[i] = clean_sender
//Sanitize message
var/clean_message = sanitize(decomposed[++i])
if(!clean_message)
to_chat(usr,"<span class='warning'>One part of your conversation was not able to be sanitized. It was the body of the [(i+2)/3]\th message.</span>")
to_chat(usr, "<span class='warning'>One part of your conversation was not able to be sanitized. It was the body of the [(i+2)/3]\th message.</span>")
return
decomposed[i] = clean_message
//Sanitize wait time
var/clean_time = text2num(decomposed[++i])
if(!isnum(clean_time))
to_chat(usr,"<span class='warning'>One part of your conversation was not able to be sanitized. It was the wait time after the [(i+2)/3]\th message.</span>")
to_chat(usr, "<span class='warning'>One part of your conversation was not able to be sanitized. It was the wait time after the [(i+2)/3]\th message.</span>")
return
if(clean_time > 60)
to_chat(usr,"<span class='warning'>Max 60 second wait time between messages for sanity's sake please.</span>")
to_chat(usr, "<span class='warning'>Max 60 second wait time between messages for sanity's sake please.</span>")
return
decomposed[i] = clean_time
@@ -791,9 +794,9 @@ var/datum/announcement/minor/admin_min_announcer = new
config.ooc_allowed = !(config.ooc_allowed)
if (config.ooc_allowed)
world << "<B>The OOC channel has been globally enabled!</B>"
to_world("<B>The OOC channel has been globally enabled!</B>")
else
world << "<B>The OOC channel has been globally disabled!</B>"
to_world("<B>The OOC channel has been globally disabled!</B>")
log_and_message_admins("toggled OOC.")
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -807,9 +810,9 @@ var/datum/announcement/minor/admin_min_announcer = new
config.looc_allowed = !(config.looc_allowed)
if (config.looc_allowed)
world << "<B>The LOOC channel has been globally enabled!</B>"
to_world("<B>The LOOC channel has been globally enabled!</B>")
else
world << "<B>The LOOC channel has been globally disabled!</B>"
to_world("<B>The LOOC channel has been globally disabled!</B>")
log_and_message_admins("toggled LOOC.")
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -824,9 +827,9 @@ var/datum/announcement/minor/admin_min_announcer = new
config.dsay_allowed = !(config.dsay_allowed)
if (config.dsay_allowed)
world << "<B>Deadchat has been globally enabled!</B>"
to_world("<B>Deadchat has been globally enabled!</B>")
else
world << "<B>Deadchat has been globally disabled!</B>"
to_world("<B>Deadchat has been globally disabled!</B>")
log_admin("[key_name(usr)] toggled deadchat.")
message_admins("[key_name_admin(usr)] toggled deadchat.", 1)
feedback_add_details("admin_verb","TDSAY") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc
@@ -881,7 +884,7 @@ var/datum/announcement/minor/admin_min_announcer = new
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return 1
else
usr << "<font color='red'>Error: Start Now: Game has already started.</font>"
to_chat(usr, "<font color='red'>Error: Start Now: Game has already started.</font>")
return 0
/datum/admins/proc/toggleenter()
@@ -890,9 +893,9 @@ var/datum/announcement/minor/admin_min_announcer = new
set name="Toggle Entering"
config.enter_allowed = !(config.enter_allowed)
if (!(config.enter_allowed))
world << "<B>New players may no longer enter the game.</B>"
to_world("<B>New players may no longer enter the game.</B>")
else
world << "<B>New players may now enter the game.</B>"
to_world("<B>New players may now enter the game.</B>")
log_admin("[key_name(usr)] toggled new player game entering.")
message_admins("<font color='blue'>[key_name_admin(usr)] toggled new player game entering.</font>", 1)
world.update_status()
@@ -904,9 +907,9 @@ var/datum/announcement/minor/admin_min_announcer = new
set name="Toggle AI"
config.allow_ai = !( config.allow_ai )
if (!( config.allow_ai ))
world << "<B>The AI job is no longer chooseable.</B>"
to_world("<B>The AI job is no longer chooseable.</B>")
else
world << "<B>The AI job is chooseable now.</B>"
to_world("<B>The AI job is chooseable now.</B>")
log_admin("[key_name(usr)] toggled AI allowed.")
world.update_status()
feedback_add_details("admin_verb","TAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -917,9 +920,9 @@ var/datum/announcement/minor/admin_min_announcer = new
set name="Toggle Respawn"
config.abandon_allowed = !(config.abandon_allowed)
if(config.abandon_allowed)
world << "<B>You may now respawn.</B>"
to_world("<B>You may now respawn.</B>")
else
world << "<B>You may no longer respawn :(</B>"
to_world("<B>You may no longer respawn :(</B>")
message_admins("<font color='blue'>[key_name_admin(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].</font>", 1)
log_admin("[key_name(usr)] toggled respawn to [config.abandon_allowed ? "On" : "Off"].")
world.update_status()
@@ -956,10 +959,10 @@ var/datum/announcement/minor/admin_min_announcer = new
return //alert("Round end delayed", null, null, null, null, null)
round_progressing = !round_progressing
if (!round_progressing)
world << "<b>The game start has been delayed.</b>"
to_world("<b>The game start has been delayed.</b>")
log_admin("[key_name(usr)] delayed the game.")
else
world << "<b>The game will start soon.</b>"
to_world("<b>The game will start soon.</b>")
log_admin("[key_name(usr)] removed the delay.")
feedback_add_details("admin_verb","DELAY") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -994,7 +997,7 @@ var/datum/announcement/minor/admin_min_announcer = new
if(!usr.client.holder) return
if( alert("Reboot server?",,"Yes","No") == "No")
return
world << "<font color='red'><b>Rebooting world!</b></font> <font color='blue'>Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!</font>"
to_world("<font color='red'><b>Rebooting world!</b></font> <font color='blue'>Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key]!</font>")
log_admin("[key_name(usr)] initiated an immediate reboot.")
feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]")
@@ -1088,18 +1091,18 @@ var/datum/announcement/minor/admin_min_announcer = new
if(!check_rights(R_SPAWN)) return
if(!custom_items)
usr << "Custom item list is null."
to_chat(usr, "Custom item list is null.")
return
if(!custom_items.len)
usr << "Custom item list not populated."
to_chat(usr, "Custom item list not populated.")
return
for(var/assoc_key in custom_items)
usr << "[assoc_key] has:"
to_chat(usr, "[assoc_key] has:")
var/list/current_items = custom_items[assoc_key]
for(var/datum/custom_item/item in current_items)
usr << "- name: [item.name] icon: [item.item_icon] path: [item.item_path] desc: [item.item_desc]"
to_chat(usr, "- name: [item.name] icon: [item.item_icon] path: [item.item_path] desc: [item.item_desc]")
/datum/admins/proc/spawn_plant(seedtype in plant_controller.seeds)
set category = "Debug"
@@ -1154,10 +1157,10 @@ var/datum/announcement/minor/admin_min_announcer = new
set name = "Show Traitor Panel"
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(!M.mind)
usr << "This mob has no mind!"
to_chat(usr, "This mob has no mind!")
return
M.mind.edit_memory()
@@ -1243,9 +1246,9 @@ var/datum/announcement/minor/admin_min_announcer = new
set name="Toggle tinted welding helmets."
config.welder_vision = !( config.welder_vision )
if (config.welder_vision)
world << "<B>Reduced welder vision has been enabled!</B>"
to_world("<B>Reduced welder vision has been enabled!</B>")
else
world << "<B>Reduced welder vision has been disabled!</B>"
to_world("<B>Reduced welder vision has been disabled!</B>")
log_admin("[key_name(usr)] toggled welder vision.")
message_admins("[key_name_admin(usr)] toggled welder vision.", 1)
feedback_add_details("admin_verb","TTWH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -1256,9 +1259,9 @@ var/datum/announcement/minor/admin_min_announcer = new
set name="Toggle guests"
config.guests_allowed = !(config.guests_allowed)
if (!(config.guests_allowed))
world << "<B>Guests may no longer enter the game.</B>"
to_world("<B>Guests may no longer enter the game.</B>")
else
world << "<B>Guests may now enter the game.</B>"
to_world("<B>Guests may now enter the game.</B>")
log_admin("[key_name(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.")
message_admins("<font color='blue'>[key_name_admin(usr)] toggled guests game entering [config.guests_allowed?"":"dis"]allowed.</font>", 1)
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -1268,21 +1271,21 @@ var/datum/announcement/minor/admin_min_announcer = new
for(var/mob/living/silicon/S in mob_list)
ai_number++
if(isAI(S))
usr << "<b>AI [key_name(S, usr)]'s laws:</b>"
to_chat(usr, "<b>AI [key_name(S, usr)]'s laws:</b>")
else if(isrobot(S))
var/mob/living/silicon/robot/R = S
usr << "<b>CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"]: laws:</b>"
to_chat(usr, "<b>CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"]: laws:</b>")
else if (ispAI(S))
usr << "<b>pAI [key_name(S, usr)]'s laws:</b>"
to_chat(usr, "<b>pAI [key_name(S, usr)]'s laws:</b>")
else
usr << "<b>SOMETHING SILICON [key_name(S, usr)]'s laws:</b>"
to_chat(usr, "<b>SOMETHING SILICON [key_name(S, usr)]'s laws:</b>")
if (S.laws == null)
usr << "[key_name(S, usr)]'s laws are null?? Contact a coder."
to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.")
else
S.laws.show_laws(usr)
if(!ai_number)
usr << "<b>No AIs located</b>" //Just so you know the thing is actually working and not just ignoring you.
to_chat(usr, "<b>No AIs located</b>") //Just so you know the thing is actually working and not just ignoring you.
/datum/admins/proc/show_skills()
set category = "Admin"
@@ -1291,7 +1294,7 @@ var/datum/announcement/minor/admin_min_announcer = new
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
to_chat(usr, "Error: you are not an admin!")
return
var/mob/living/carbon/human/M = input("Select mob.", "Select mob.") as null|anything in human_mob_list
@@ -1373,7 +1376,7 @@ var/datum/announcement/minor/admin_min_announcer = new
return //Extra sanity check to make sure only observers are shoved into things
//Same as assume-direct-control perm requirements.
if (!check_rights(R_VAREDIT,0) || !check_rights(R_ADMIN|R_DEBUG,0))
if (!check_rights(R_VAREDIT,0) || !check_rights(R_ADMIN|R_DEBUG|R_EVENT,0))
return 0
if (!frommob.ckey)
return 0
@@ -1403,16 +1406,16 @@ var/datum/announcement/minor/admin_min_announcer = new
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
to_chat(usr, "Error: you are not an admin!")
return
if(!ticker || !ticker.mode)
usr << "Mode has not started."
to_chat(usr, "Mode has not started.")
return
var/antag_type = input("Choose a template.","Force Latespawn") as null|anything in all_antag_types
if(!antag_type || !all_antag_types[antag_type])
usr << "Aborting."
to_chat(usr, "Aborting.")
return
var/datum/antagonist/antag = all_antag_types[antag_type]
@@ -1426,12 +1429,12 @@ var/datum/announcement/minor/admin_min_announcer = new
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins) || !check_rights(R_ADMIN))
usr << "Error: you are not an admin!"
if (!istype(src,/datum/admins) || !check_rights(R_ADMIN|R_EVENT|R_FUN))
to_chat(usr, "Error: you are not an admin!")
return
if(!ticker || !ticker.mode)
usr << "Mode has not started."
to_chat(usr, "Mode has not started.")
return
log_and_message_admins("attempting to force mode autospawn.")
@@ -1444,7 +1447,7 @@ var/datum/announcement/minor/admin_min_announcer = new
var/msg
if(check_rights(R_ADMIN|R_MOD))
if(check_rights(R_ADMIN|R_MOD|R_EVENT))
if (H.paralysis == 0)
H.paralysis = 8000
msg = "has paralyzed [key_name(H)]."
@@ -1462,14 +1465,14 @@ var/datum/announcement/minor/admin_min_announcer = new
set popup_menu = FALSE //VOREStation Edit - Declutter.
var/crystals
if(check_rights(R_ADMIN))
if(check_rights(R_ADMIN|R_EVENT))
crystals = input("Amount of telecrystals for [H.ckey], currently [H.mind.tcrystals].", crystals) as null|num
if (!isnull(crystals))
H.mind.tcrystals = crystals
var/msg = "[key_name(usr)] has modified [H.ckey]'s telecrystals to [crystals]."
message_admins(msg)
else
usr << "You do not have access to this command."
to_chat(usr, "You do not have access to this command.")
/datum/admins/proc/add_tcrystals(mob/living/carbon/human/H as mob)
set category = "Debug"
@@ -1478,14 +1481,14 @@ var/datum/announcement/minor/admin_min_announcer = new
set popup_menu = FALSE //VOREStation Edit - Declutter.
var/crystals
if(check_rights(R_ADMIN))
if(check_rights(R_ADMIN|R_EVENT))
crystals = input("Amount of telecrystals to give to [H.ckey], currently [H.mind.tcrystals].", crystals) as null|num
if (!isnull(crystals))
H.mind.tcrystals += crystals
var/msg = "[key_name(usr)] has added [crystals] to [H.ckey]'s telecrystals."
message_admins(msg)
else
usr << "You do not have access to this command."
to_chat(usr, "You do not have access to this command.")
/datum/admins/proc/sendFax()
@@ -1499,7 +1502,7 @@ var/datum/announcement/minor/admin_min_announcer = new
if (!istype(src,/datum/admins))
src = usr.client.holder
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
to_chat(usr, "Error: you are not an admin!")
return
var/replyorigin = input(src.owner, "Please specify who the fax is coming from", "Origin") as text|null
@@ -1557,20 +1560,20 @@ datum/admins/var/obj/item/weapon/paper/admin/faxreply // var to hold fax replies
if(destination.receivefax(P))
src.owner << "<span class='notice'>Message reply to transmitted successfully.</span>"
to_chat(src.owner, "<span class='notice'>Message reply to transmitted successfully.</span>")
if(P.sender) // sent as a reply
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(P.sender)]")
for(var/client/C in admins)
if((R_ADMIN | R_MOD) & C.holder.rights)
C << "<span class='log_message'><span class='prefix'>FAX LOG:</span>[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(P.sender)] (<a href='?_src_=holder;AdminFaxView=\ref[rcvdcopy]'>VIEW</a>)</span>"
if((R_ADMIN | R_MOD | R_EVENT) & C.holder.rights)
to_chat(C, "<span class='log_message'><span class='prefix'>FAX LOG:</span>[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(P.sender)] (<a href='?_src_=holder;AdminFaxView=\ref[rcvdcopy]'>VIEW</a>)</span>")
else
log_admin("[key_name(src.owner)] has sent a fax message to [destination.department]")
for(var/client/C in admins)
if((R_ADMIN | R_MOD) & C.holder.rights)
C << "<span class='log_message'><span class='prefix'>FAX LOG:</span>[key_name_admin(src.owner)] has sent a fax message to [destination.department] (<a href='?_src_=holder;AdminFaxView=\ref[rcvdcopy]'>VIEW</a>)</span>"
if((R_ADMIN | R_MOD | R_EVENT) & C.holder.rights)
to_chat(C, "<span class='log_message'><span class='prefix'>FAX LOG:</span>[key_name_admin(src.owner)] has sent a fax message to [destination.department] (<a href='?_src_=holder;AdminFaxView=\ref[rcvdcopy]'>VIEW</a>)</span>")
else
src.owner << "<span class='warning'>Message reply failed.</span>"
to_chat(src.owner, "<span class='warning'>Message reply failed.</span>")
spawn(100)
qdel(P)
+1 -1
View File
@@ -23,7 +23,7 @@
if(!message) return
var/F = investigate_subject2file(subject)
if(!F) return
F << "<small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
to_chat(F, "<small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>")
//ADMINVERBS
/client/proc/investigate_show( subject in list("hrefs","notes","singulo","telesci") )
+1 -1
View File
@@ -26,7 +26,7 @@
return
if( findtext(memo,"<script",1,0) )
return
F[ckey] << "[key] on [time2text(world.realtime,"(DDD) DD MMM hh:mm")]<br>[memo]"
to_chat(F[ckey], "[key] on [time2text(world.realtime,"(DDD) DD MMM hh:mm")]<br>[memo]")
message_admins("[key] set an admin memo:<br>[memo]")
//show all memos
+152 -23
View File
@@ -1,6 +1,7 @@
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
var/list/admin_verbs_default = list(
/datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags,
/client/proc/player_panel_new, //shows an interface for all players, with links to various panels,
/client/proc/player_panel,
/client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player,
/client/proc/hide_verbs, //hides all our adminverbs,
@@ -15,7 +16,6 @@ var/list/admin_verbs_default = list(
)
var/list/admin_verbs_admin = list(
/client/proc/player_panel_new, //shows an interface for all players, with links to various panels,
/datum/admins/proc/set_tcrystals,
/datum/admins/proc/add_tcrystals,
/client/proc/invisimin, //allows our mob to go invisible/visible,
@@ -107,7 +107,8 @@ var/list/admin_verbs_admin = list(
/client/proc/fixatmos,
/datum/admins/proc/quick_nif, //VOREStation Add,
/datum/admins/proc/sendFax,
/client/proc/despawn_player
/client/proc/despawn_player,
/datum/admins/proc/view_feedback
)
var/list/admin_verbs_ban = list(
@@ -141,7 +142,7 @@ var/list/admin_verbs_fun = list(
/datum/admins/proc/quick_nif, //CHOMPStation Addition 13/1/20 TFF - Allow spawning NIFs into players,
/client/proc/smite_vr, //VOREStation Add,
/client/proc/smite,
/client/proc/admin_lightning_strike
/client/proc/admin_lightning_strike,
)
var/list/admin_verbs_spawn = list(
@@ -236,7 +237,8 @@ var/list/admin_verbs_debug = list(
/datum/admins/proc/change_weather,
/datum/admins/proc/change_time,
/client/proc/admin_give_modifier,
/client/proc/simple_DPS
/client/proc/simple_DPS,
/datum/admins/proc/view_feedback
)
var/list/admin_verbs_paranoid_debug = list(
@@ -343,6 +345,8 @@ var/list/admin_verbs_mod = list(
/client/proc/cmd_mod_say,
/client/proc/cmd_event_say,
/datum/admins/proc/show_player_info,
/datum/admins/proc/show_traitor_panel,
/client/proc/colorooc,
/client/proc/player_panel_new,
/client/proc/dsay,
/datum/admins/proc/show_skills,
@@ -362,14 +366,139 @@ var/list/admin_verbs_mod = list(
/datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently,
)
//VOREStation Edit Start - Highly Modified List
var/list/admin_verbs_event_manager = list(
/client/proc/cmd_admin_say, //admin-only ooc chat,
/datum/admins/proc/quick_nif, //CHOMPStation Addition 13/1/20 TFF - Allow spawning NIFs into players,
/client/proc/cmd_admin_say, //VOREStation Edit - Event managers can use asay,
/client/proc/cmd_admin_pm_context,
/client/proc/cmd_admin_pm_panel,
/client/proc/admin_ghost,
/datum/admins/proc/show_player_info,
/client/proc/dsay,
/client/proc/cmd_admin_subtle_message,
/client/proc/debug_variables,
/client/proc/check_antagonists,
/client/proc/aooc,
/datum/admins/proc/paralyze_mob,
/client/proc/cmd_admin_direct_narrate,
/client/proc/allow_character_respawn,
/datum/admins/proc/sendFax,
/client/proc/respawn_character,
/proc/possess,
/proc/release,
/datum/admins/proc/change_weather,
/datum/admins/proc/change_time,
/client/proc/admin_give_modifier,
/client/proc/Jump,
/client/proc/jumptomob,
/client/proc/jumptocoord,
/client/proc/cmd_admin_delete,
/datum/admins/proc/delay,
/client/proc/Set_Holiday,
/client/proc/make_sound,
/client/proc/toggle_random_events,
/datum/admins/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
/client/proc/drop_bomb,
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/make_sound,
/client/proc/toggle_random_events,
/client/proc/editappear,
/client/proc/roll_dices,
/datum/admins/proc/call_supply_drop,
/datum/admins/proc/call_drop_pod,
/datum/admins/proc/PlayerNotes,
/client/proc/callproc,
/client/proc/callproc_datum,
/client/proc/debug_controller,
/client/proc/show_gm_status,
/datum/admins/proc/change_weather,
/datum/admins/proc/change_time,
/client/proc/admin_give_modifier,
/datum/admins/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
/datum/admins/proc/set_tcrystals,
/datum/admins/proc/add_tcrystals,
/client/proc/invisimin, //allows our mob to go invisible/visible,
/datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind.,
/datum/admins/proc/show_game_mode, //Configuration window for the current game mode.,
/datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc,
/datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc,
/datum/admins/proc/announce, //priority announce something to all clients.,
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
/client/proc/toggle_view_range, //changes how far we can see,
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
/client/proc/cmd_admin_pm_panel, //admin-pm list,
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
/client/proc/cmd_admin_check_contents, //displays the contents of an instance,
/client/proc/cmd_admin_check_player_logs, //checks a player's attack logs,
/client/proc/cmd_admin_check_dialogue_logs, //checks a player's dialogue logs,
/datum/admins/proc/access_news_network, //allows access of newscasters,
/client/proc/jumptocoord, //we ghost and jump to a coordinate,
/client/proc/Getmob, //teleports a mob to our location,
/client/proc/Getkey, //teleports a mob with a certain ckey to our location,
/client/proc/Jump,
/client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey,
/client/proc/jumptomob, //allows us to jump to a specific mob,
/client/proc/jumptoturf, //allows us to jump to a specific turf,
/client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom,
/client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
/client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/check_words, //displays cult-words,
/client/proc/check_ai_laws, //shows AI and borg laws,
/client/proc/rename_silicon, //properly renames silicons,
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
/client/proc/check_antagonists,
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
/client/proc/secrets,
/client/proc/game_panel, //game panel, allows to change game-mode etc,
/client/proc/cmd_mod_say,
/client/proc/cmd_event_say
/client/proc/cmd_event_say,
/datum/admins/proc/show_player_info,
/client/proc/free_slot, //frees slot for chosen job,
/client/proc/cmd_admin_change_custom_event,
/client/proc/cmd_admin_rejuvenate,
/client/proc/toggleghostwriters,
/datum/admins/proc/show_skills,
/client/proc/man_up,
/client/proc/global_man_up,
/client/proc/response_team, // Response Teams admin verb,
/client/proc/trader_ship, // Trader ship admin verb,
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
/client/proc/event_manager_panel,
/client/proc/aooc,
/client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
/client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance ,
/client/proc/change_security_level,
/client/proc/makePAI,
/client/proc/toggle_debug_logs,
/client/proc/toggle_attack_logs,
/datum/admins/proc/paralyze_mob,
/client/proc/fixatmos,
/datum/admins/proc/sendFax,
/client/proc/despawn_player,
/datum/admins/proc/view_feedback,
/datum/admins/proc/capture_map,
/client/proc/Set_Holiday,
/datum/admins/proc/startnow,
/datum/admins/proc/restart,
/datum/admins/proc/delay,
/client/proc/cmd_mod_say,
/datum/admins/proc/immreboot,
/client/proc/everyone_random,
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
/client/proc/cmd_debug_del_all,
/client/proc/toggle_random_events,
/client/proc/modify_server_news
)
//VOREStation Edit End
/client/proc/add_admin_verbs()
if(holder)
@@ -479,11 +608,11 @@ var/list/admin_verbs_event_manager = list(
if(holder && mob)
if(mob.invisibility == INVISIBILITY_OBSERVER)
mob.invisibility = initial(mob.invisibility)
mob << "<font color='red'><b>Invisimin off. Invisibility reset.</b></font>"
to_chat(mob, "<font color='red'><b>Invisimin off. Invisibility reset.</b></font>")
mob.alpha = max(mob.alpha + 100, 255)
else
mob.invisibility = INVISIBILITY_OBSERVER
mob << "<font color='blue'><b>Invisimin on. You are now as invisible as a ghost.</b></font>"
to_chat(mob, "<font color='blue'><b>Invisimin on. You are now as invisible as a ghost.</b></font>")
mob.alpha = max(mob.alpha - 100, 0)
@@ -613,7 +742,7 @@ var/list/admin_verbs_event_manager = list(
if(!warned_ckey || !istext(warned_ckey)) return
if(warned_ckey in admin_datums)
usr << "<font color='red'>Error: warn(): You can't warn admins.</font>"
to_chat(usr, "<font color='red'>Error: warn(): You can't warn admins.</font>")
return
var/datum/preferences/D
@@ -629,7 +758,7 @@ var/list/admin_verbs_event_manager = list(
ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [AUTOBANTIME] minute autoban.")
if(C)
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
C << "<font color='red'><BIG><B>You have been autobanned due to a warning by [ckey].</B></BIG><br>This is a temporary ban, it will be removed in [AUTOBANTIME] minutes.</font>"
to_chat(C, "<font color='red'><BIG><B>You have been autobanned due to a warning by [ckey].</B></BIG><br>This is a temporary ban, it will be removed in [AUTOBANTIME] minutes.</font>")
del(C)
else
message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
@@ -637,7 +766,7 @@ var/list/admin_verbs_event_manager = list(
feedback_inc("ban_warn",1)
else
if(C)
C << "<font color='red'><BIG><B>You have been formally warned by an administrator.</B></BIG><br>Further warnings will result in an autoban.</font>"
to_chat(C, "<font color='red'><BIG><B>You have been formally warned by an administrator.</B></BIG><br>Further warnings will result in an autoban.</font>")
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
else
message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.")
@@ -769,10 +898,10 @@ var/list/admin_verbs_event_manager = list(
set desc = "Toggle Air Processing"
if(!SSair.can_fire)
SSair.can_fire = TRUE
usr << "<b>Enabled air processing.</b>"
to_chat(usr, "<b>Enabled air processing.</b>")
else
SSair.can_fire = FALSE
usr << "<b>Disabled air processing.</b>"
to_chat(usr, "<b>Disabled air processing.</b>")
feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] used 'kill air'.")
message_admins("<font color='blue'>[key_name_admin(usr)] used 'kill air'.</font>", 1)
@@ -823,7 +952,7 @@ var/list/admin_verbs_event_manager = list(
set name = "Rename Silicon"
set category = "Admin"
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
var/mob/living/silicon/S = input("Select silicon.", "Rename Silicon.") as null|anything in silicon_mob_list
if(!S) return
@@ -838,7 +967,7 @@ var/list/admin_verbs_event_manager = list(
set name = "Manage Silicon Laws"
set category = "Admin"
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT)) return
var/mob/living/silicon/S = input("Select silicon.", "Manage Silicon Laws") as null|anything in silicon_mob_list
if(!S) return
@@ -873,7 +1002,7 @@ var/list/admin_verbs_event_manager = list(
if(!H) return
if(!H.client)
usr << "Only mobs with clients can alter their own appearance."
to_chat(usr, "Only mobs with clients can alter their own appearance.")
return
var/datum/gender/T = gender_datums[H.get_visible_gender()]
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
@@ -890,7 +1019,7 @@ var/list/admin_verbs_event_manager = list(
set desc = "Sets the station security level"
set category = "Admin"
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT)) return
var sec_level = input(usr, "It's currently code [get_security_level()].", "Select Security Level") as null|anything in (list("green","yellow","violet","orange","blue","red","delta")-get_security_level())
if(alert("Switch from code [get_security_level()] to code [sec_level]?","Change security level?","Yes","No") == "Yes")
set_security_level(sec_level)
@@ -916,7 +1045,7 @@ var/list/admin_verbs_event_manager = list(
var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in human_mob_list
if(!istype(M, /mob/living/carbon/human))
usr << "<font color='red'>You can only do this to humans!</font>"
to_chat(usr, "<font color='red'>You can only do this to humans!</font>")
return
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Tajaran can result in unintended consequences.",,"Yes","No"))
if("No")
@@ -991,7 +1120,7 @@ var/list/admin_verbs_event_manager = list(
if (J.current_positions >= J.total_positions && J.total_positions != -1)
jobs += J.title
if (!jobs.len)
usr << "There are no fully staffed jobs."
to_chat(usr, "There are no fully staffed jobs.")
return
var/job = input("Please select job slot to free", "Free job slot") as null|anything in jobs
if (job)
@@ -1035,8 +1164,8 @@ var/list/admin_verbs_event_manager = list(
if(alert("Are you sure you want to tell them to man up?","Confirmation","Deal with it","No")=="No") return
T << "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>"
T << "<span class='notice'>Move along.</span>"
to_chat(T, "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>")
to_chat(T, "<span class='notice'>Move along.</span>")
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
message_admins("<font color='blue'>[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.</font>", 1)
@@ -1049,7 +1178,7 @@ var/list/admin_verbs_event_manager = list(
if(alert("Are you sure you want to tell the whole server up?","Confirmation","Deal with it","No")=="No") return
for (var/mob/T as mob in mob_list)
T << "<br><center><span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move along.</span></center><br>"
to_chat(T, "<br><center><span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move along.</span></center><br>")
T << 'sound/voice/ManUp1.ogg'
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
+1 -1
View File
@@ -42,7 +42,7 @@ DEBUG
set name = "list all jobbans"
for(var/s in jobban_keylist)
world << s
to_world(s)
/mob/verb/reload_jobbans()
set name = "reload jobbans"
+4 -4
View File
@@ -62,7 +62,7 @@ generally it would be used like so:
proc/admin_proc()
if(!check_rights(R_ADMIN)) return
world << "you have enough rights!"
to_world("you have enough rights!")
NOTE: It checks usr by default. Supply the "user" argument if you wish to check for a specific mob.
*/
@@ -76,7 +76,7 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
return FALSE
if(!C.holder)
if(show_msg)
C << "<span class='warning'>Error: You are not an admin.</span>"
to_chat(C, "<span class='warning'>Error: You are not an admin.</span>")
return FALSE
if(rights_required)
@@ -84,7 +84,7 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
return TRUE
else
if(show_msg)
C << "<span class='warning'>Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].</span>"
to_chat(C, "<span class='warning'>Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].</span>")
return FALSE
else
return TRUE
@@ -98,7 +98,7 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
if(usr.client.holder.rights != other.holder.rights)
if( (usr.client.holder.rights & other.holder.rights) == other.holder.rights )
return 1 //we have all the rights they have and more
usr << "<font color='red'>Error: Cannot proceed. They have more or equal rights to us.</font>"
to_chat(usr, "<font color='red'>Error: Cannot proceed. They have more or equal rights to us.</font>")
return 0
/client/proc/mark_datum(datum/D)
+6 -6
View File
@@ -7,13 +7,13 @@
return
if(isnull(tx) || isnull(ty) || isnull(tz) || isnull(range))
usr << "Capture Map Part, captures part of a map using camara like rendering."
usr << "Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range"
usr << "Target coordinates specify bottom left corner of the capture, range defines render distance to opposite corner."
to_chat(usr, "Capture Map Part, captures part of a map using camara like rendering.")
to_chat(usr, "Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range")
to_chat(usr, "Target coordinates specify bottom left corner of the capture, range defines render distance to opposite corner.")
return
if(range > 32 || range <= 0)
usr << "Capturing range is incorrect, it must be within 1-32."
to_chat(usr, "Capturing range is incorrect, it must be within 1-32.")
return
if(locate(tx,ty,tz))
@@ -53,7 +53,7 @@
cap.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff)
var/file_name = "map_capture_x[tx]_y[ty]_z[tz]_r[range].png"
usr << "Saved capture in cache as [file_name]."
to_chat(usr, "Saved capture in cache as [file_name].")
usr << browse_rsc(cap, file_name)
else
usr << "Target coordinates are incorrect."
to_chat(usr, "Target coordinates are incorrect.")
+13 -13
View File
@@ -141,7 +141,7 @@ var/savefile/Banlistjob
Banlistjob.cd = "/base"
if ( Banlistjob.dir.Find("[ckey][computerid][rank]") )
usr << text("<font color='red'>Banjob already exists.</font>")
to_chat(usr,"<font color='red'>Banjob already exists.</font>")
return 0
else
Banlistjob.dir.Add("[ckey][computerid][rank]")
@@ -219,22 +219,22 @@ var/savefile/Banlistjob
/*/datum/admins/proc/permjobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
if(AddBanjob(ckey, computerid, reason, usr.ckey, 0, 0, job))
M << "<font color='red'><BIG><B>You have been banned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a permanent ban.</font>"
to_chat(M, "<font color='red'><BIG><B>You have been banned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
to_chat(M, "<font color='red'>This is a permanent ban.</font>")
if(config.banappeals)
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
to_chat(M, "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>")
else
M << "<font color='red'>No ban appeals URL has been set.</font>"
to_chat(M, "<font color='red'>No ban appeals URL has been set.</font>")
log_admin("[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("<font color='blue'>[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.</font>")
/datum/admins/proc/timejobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
if(AddBanjob(ckey, computerid, reason, usr.ckey, 1, mins, job))
M << "<font color='red'><BIG><B>You have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>"
to_chat(M, "<font color='red'><BIG><B>You have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
to_chat(M, "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>")
if(config.banappeals)
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
to_chat(M, "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>")
else
M << "<font color='red'>No ban appeals URL has been set.</font>"
to_chat(M, "<font color='red'>No ban appeals URL has been set.</font>")
log_admin("[usr.client.ckey] has jobbanned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("<font color='blue'>[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")*/
//////////////////////////////////// DEBUG ////////////////////////////////////
@@ -253,17 +253,17 @@ var/savefile/Banlistjob
Banlistjob.cd = "/base"
Banlistjob.dir.Add("trash[i]trashid[i]")
Banlistjob.cd = "/base/trash[i]trashid[i]"
Banlistjob["key"] << "trash[i]"
to_chat(Banlistjob["key"], "trash[i]")
else
Banlistjob.cd = "/base"
Banlistjob.dir.Add("[last]trashid[i]")
Banlistjob.cd = "/base/[last]trashid[i]"
Banlistjob["key"] << last
Banlistjob["id"] << "trashid[i]"
Banlistjob["reason"] << "Trashban[i]."
to_chat(Banlistjob["id"], "trashid[i]")
to_chat(Banlistjob["reason"], "Trashban[i].")
Banlistjob["temp"] << a
Banlistjob["minutes"] << CMinutes + rand(1,2000)
Banlistjob["bannedby"] << "trashmin"
to_chat(Banlistjob["bannedby"], "trashmin")
last = "trash[i]"
Banlistjob.cd = "/base"
@@ -51,13 +51,13 @@
return
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
usr << "<font color='red'>You do not have permission to do this!</font>"
to_chat(usr, "<font color='red'>You do not have permission to do this!</font>")
return
establish_db_connection()
if(!dbcon.IsConnected())
usr << "<font color='red'>Failed to establish database connection</font>"
to_chat(usr, "<font color='red'>Failed to establish database connection</font>")
return
if(!adm_ckey || !new_rank)
@@ -85,14 +85,14 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');")
log_query.Execute()
usr << "<font color='blue'>New admin added.</font>"
to_chat(usr, "<font color='blue'>New admin added.</font>")
else
if(!isnull(admin_id) && isnum(admin_id))
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET rank = '[new_rank]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');")
log_query.Execute()
usr << "<font color='blue'>Admin rank changed.</font>"
to_chat(usr, "<font color='blue'>Admin rank changed.</font>")
/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission)
if(config.admin_legacy_system) return
@@ -101,12 +101,12 @@
return
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
usr << "<font color='red'>You do not have permission to do this!</font>"
to_chat(usr, "<font color='red'>You do not have permission to do this!</font>")
return
establish_db_connection()
if(!dbcon.IsConnected())
usr << "<font color='red'>Failed to establish database connection</font>"
to_chat(usr, "<font color='red'>Failed to establish database connection</font>")
return
if(!adm_ckey || !new_permission)
@@ -140,10 +140,10 @@
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');")
log_query.Execute()
usr << "<font color='blue'>Permission removed.</font>"
to_chat(usr, "<font color='blue'>Permission removed.</font>")
else //This admin doesn't have this permission, so we are adding it.
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET flags = '[admin_rights | new_permission]' WHERE id = [admin_id]")
insert_query.Execute()
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]')")
log_query.Execute()
usr << "<font color='blue'>Permission added.</font>"
to_chat(usr, "<font color='blue'>Permission added.</font>")
@@ -2,17 +2,17 @@
name = "Jump a Shuttle"
/datum/admin_secret_item/admin_secret/jump_shuttle/can_execute(var/mob/user)
if(!shuttle_controller) return 0
if(!SSshuttles) return 0
return ..()
/datum/admin_secret_item/admin_secret/jump_shuttle/execute(var/mob/user)
. = ..()
if(!.)
return
var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in shuttle_controller.shuttles
var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in SSshuttles.shuttles
if (!shuttle_tag) return
var/datum/shuttle/S = shuttle_controller.shuttles[shuttle_tag]
var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag]
var/origin_area = input(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)") as null|area in world
if (!origin_area) return
@@ -2,7 +2,7 @@
name = "Launch a Shuttle"
/datum/admin_secret_item/admin_secret/launch_shuttle/can_execute(var/mob/user)
if(!shuttle_controller) return 0
if(!SSshuttles) return 0
return ..()
/datum/admin_secret_item/admin_secret/launch_shuttle/execute(var/mob/user)
@@ -10,15 +10,15 @@
if(!.)
return
var/list/valid_shuttles = list()
for (var/shuttle_tag in shuttle_controller.shuttles)
if (istype(shuttle_controller.shuttles[shuttle_tag], /datum/shuttle/ferry))
for (var/shuttle_tag in SSshuttles.shuttles)
if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock))
valid_shuttles += shuttle_tag
var/shuttle_tag = input(user, "Which shuttle do you want to launch?") as null|anything in valid_shuttles
if (!shuttle_tag)
return
var/datum/shuttle/ferry/S = shuttle_controller.shuttles[shuttle_tag]
var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag]
if (S.can_launch())
S.launch(user)
log_and_message_admins("launched the [shuttle_tag] shuttle", user)
@@ -2,7 +2,7 @@
name = "Launch a Shuttle (Forced)"
/datum/admin_secret_item/admin_secret/launch_shuttle_forced/can_execute(var/mob/user)
if(!shuttle_controller) return 0
if(!SSshuttles) return 0
return ..()
/datum/admin_secret_item/admin_secret/launch_shuttle_forced/execute(var/mob/user)
@@ -10,15 +10,15 @@
if(!.)
return
var/list/valid_shuttles = list()
for (var/shuttle_tag in shuttle_controller.shuttles)
if (istype(shuttle_controller.shuttles[shuttle_tag], /datum/shuttle/ferry))
for (var/shuttle_tag in SSshuttles.shuttles)
if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock))
valid_shuttles += shuttle_tag
var/shuttle_tag = input(user, "Which shuttle's launch do you want to force?") as null|anything in valid_shuttles
if (!shuttle_tag)
return
var/datum/shuttle/ferry/S = shuttle_controller.shuttles[shuttle_tag]
var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag]
if (S.can_force())
S.force_launch(user)
log_and_message_admins("forced the [shuttle_tag] shuttle", user)
@@ -2,7 +2,7 @@
name = "Move a Shuttle"
/datum/admin_secret_item/admin_secret/move_shuttle/can_execute(var/mob/user)
if(!shuttle_controller) return 0
if(!SSshuttles) return 0
return ..()
/datum/admin_secret_item/admin_secret/move_shuttle/execute(var/mob/user)
@@ -13,16 +13,15 @@
if (confirm == "Cancel")
return
var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in shuttle_controller.shuttles
var/shuttle_tag = input(user, "Which shuttle do you want to jump?") as null|anything in SSshuttles.shuttles
if (!shuttle_tag) return
var/datum/shuttle/S = shuttle_controller.shuttles[shuttle_tag]
var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag]
var/origin_area = input(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)") as null|area in world
if (!origin_area) return
var/destination_tag = input(user, "Which landmark do you want to jump to? (IF YOU GET THIS WRONG THINGS WILL BREAK)") as null|anything in SSshuttles.registered_shuttle_landmarks
if (!destination_tag) return
var/destination_location = SSshuttles.get_landmark(destination_tag)
if (!destination_location) return
var/destination_area = input(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)") as null|area in world
if (!destination_area) return
S.move(origin_area, destination_area)
S.attempt_move(destination_location)
log_and_message_admins("moved the [shuttle_tag] shuttle", user)
@@ -1,7 +0,0 @@
/datum/admin_secret_item/fun_secret/make_all_areas_powered
name = "Make All Areas Powered"
/datum/admin_secret_item/fun_secret/make_all_areas_powered/execute(var/mob/user)
. = ..()
if(.)
power_restore()
@@ -1,7 +0,0 @@
/datum/admin_secret_item/fun_secret/make_all_areas_unpowered
name = "Make All Areas Unpowered"
/datum/admin_secret_item/fun_secret/make_all_areas_unpowered/execute(var/mob/user)
. = ..()
if(.)
power_failure()
@@ -0,0 +1,7 @@
/datum/admin_secret_item/fun_secret/power_failure_begin
name = "Power Failure Begin"
/datum/admin_secret_item/fun_secret/power_failure_begin/execute(var/mob/user)
. = ..()
if(.)
power_failure()
@@ -0,0 +1,7 @@
/datum/admin_secret_item/fun_secret/power_failure_end
name = "Power Failure End"
/datum/admin_secret_item/fun_secret/power_failure_end/execute(var/mob/user)
. = ..()
if(.)
power_restore()
@@ -17,7 +17,7 @@
gravity_is_on = !gravity_is_on
for(var/area/A in all_areas)
A.gravitychange(gravity_is_on,A)
A.gravitychange(gravity_is_on)
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","Grav")
+174 -142
View File
@@ -11,7 +11,7 @@
return
if(href_list["ahelp"])
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
var/ahelp_ref = href_list["ahelp"]
@@ -63,23 +63,23 @@
switch(bantype)
if(BANTYPE_PERMA)
if(!banckey || !banreason)
usr << "Not enough parameters (Requires ckey and reason)"
to_chat(usr, "Not enough parameters (Requires ckey and reason)")
return
banduration = null
banjob = null
if(BANTYPE_TEMP)
if(!banckey || !banreason || !banduration)
usr << "Not enough parameters (Requires ckey, reason and duration)"
to_chat(usr, "Not enough parameters (Requires ckey, reason and duration)")
return
banjob = null
if(BANTYPE_JOB_PERMA)
if(!banckey || !banreason || !banjob)
usr << "Not enough parameters (Requires ckey, reason and job)"
to_chat(usr, "Not enough parameters (Requires ckey, reason and job)")
return
banduration = null
if(BANTYPE_JOB_TEMP)
if(!banckey || !banreason || !banjob || !banduration)
usr << "Not enough parameters (Requires ckey, reason and job)"
to_chat(usr, "Not enough parameters (Requires ckey, reason and job)")
return
var/mob/playermob
@@ -116,14 +116,14 @@
var/new_ckey = ckey(input(usr,"New admin's ckey","Admin ckey", null) as text|null)
if(!new_ckey) return
if(new_ckey in admin_datums)
usr << "<font color='red'>Error: Topic 'editrights': [new_ckey] is already an admin</font>"
to_chat(usr, "<font color='red'>Error: Topic 'editrights': [new_ckey] is already an admin</font>")
return
adm_ckey = new_ckey
task = "rank"
else if(task != "show")
adm_ckey = ckey(href_list["ckey"])
if(!adm_ckey)
usr << "<font color='red'>Error: Topic 'editrights': No valid ckey</font>"
to_chat(usr, "<font color='red'>Error: Topic 'editrights': No valid ckey</font>")
return
var/datum/admins/D = admin_datums[adm_ckey]
@@ -155,7 +155,7 @@
if(config.admin_legacy_system)
new_rank = ckeyEx(new_rank)
if(!new_rank)
usr << "<font color='red'>Error: Topic 'editrights': Invalid rank</font>"
to_chat(usr, "<font color='red'>Error: Topic 'editrights': Invalid rank</font>")
return
if(config.admin_legacy_system)
if(admin_ranks.len)
@@ -198,7 +198,7 @@
edit_admin_permissions()
else if(href_list["call_shuttle"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT)) return
if( ticker.mode.name == "blob" )
alert("You can't call the shuttle during blob!")
@@ -264,7 +264,7 @@
var/mob/M = locate(href_list["mob"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
var/delmob = 0
@@ -370,14 +370,14 @@
var/mob/M = locate(href_list["jobban2"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(!M.ckey) //sanity
usr << "This mob has no ckey"
to_chat(usr, "This mob has no ckey")
return
if(!job_master)
usr << "Job Master has not been setup!"
to_chat(usr, "Job Master has not been setup!")
return
var/dat = ""
@@ -394,8 +394,8 @@
//Regular jobs
//Command (Blue)
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr align='center' bgcolor='ccccff'><th colspan='[length(command_positions)]'><a href='?src=\ref[src];jobban3=commanddept;jobban4=\ref[M]'>Command Positions</a></th></tr><tr align='center'>"
for(var/jobPos in command_positions)
jobs += "<tr align='center' bgcolor='ccccff'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND))]'><a href='?src=\ref[src];jobban3=commanddept;jobban4=\ref[M]'>Command Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -415,8 +415,8 @@
//Security (Red)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ffddf0'><th colspan='[length(security_positions)]'><a href='?src=\ref[src];jobban3=securitydept;jobban4=\ref[M]'>Security Positions</a></th></tr><tr align='center'>"
for(var/jobPos in security_positions)
jobs += "<tr bgcolor='ffddf0'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY))]'><a href='?src=\ref[src];jobban3=securitydept;jobban4=\ref[M]'>Security Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -436,8 +436,8 @@
//Engineering (Yellow)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='fff5cc'><th colspan='[length(engineering_positions)]'><a href='?src=\ref[src];jobban3=engineeringdept;jobban4=\ref[M]'>Engineering Positions</a></th></tr><tr align='center'>"
for(var/jobPos in engineering_positions)
jobs += "<tr bgcolor='fff5cc'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_ENGINEERING))]'><a href='?src=\ref[src];jobban3=engineeringdept;jobban4=\ref[M]'>Engineering Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_ENGINEERING))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -457,8 +457,8 @@
//Cargo (Yellow)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='fff5cc'><th colspan='[length(cargo_positions)]'><a href='?src=\ref[src];jobban3=cargodept;jobban4=\ref[M]'>Cargo Positions</a></th></tr><tr align='center'>"
for(var/jobPos in cargo_positions)
jobs += "<tr bgcolor='fff5cc'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_CARGO))]'><a href='?src=\ref[src];jobban3=cargodept;jobban4=\ref[M]'>Cargo Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_CARGO))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -478,8 +478,8 @@
//Medical (White)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ffeef0'><th colspan='[length(medical_positions)]'><a href='?src=\ref[src];jobban3=medicaldept;jobban4=\ref[M]'>Medical Positions</a></th></tr><tr align='center'>"
for(var/jobPos in medical_positions)
jobs += "<tr bgcolor='ffeef0'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_MEDICAL))]'><a href='?src=\ref[src];jobban3=medicaldept;jobban4=\ref[M]'>Medical Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_MEDICAL))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -499,8 +499,8 @@
//Science (Purple)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='e79fff'><th colspan='[length(science_positions)]'><a href='?src=\ref[src];jobban3=sciencedept;jobban4=\ref[M]'>Science Positions</a></th></tr><tr align='center'>"
for(var/jobPos in science_positions)
jobs += "<tr bgcolor='e79fff'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_RESEARCH))]'><a href='?src=\ref[src];jobban3=sciencedept;jobban4=\ref[M]'>Science Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_RESEARCH))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -520,8 +520,8 @@
//Exploration (Purple)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='e79fff'><th colspan='[length(planet_positions)]'><a href='?src=\ref[src];jobban3=explorationdept;jobban4=\ref[M]'>Exploration Positions</a></th></tr><tr align='center'>"
for(var/jobPos in planet_positions)
jobs += "<tr bgcolor='e79fff'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_PLANET))]'><a href='?src=\ref[src];jobban3=sciencedept;jobban4=\ref[M]'>Science Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_PLANET))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -541,8 +541,8 @@
//Civilian (Grey)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='dddddd'><th colspan='[length(civilian_positions)]'><a href='?src=\ref[src];jobban3=civiliandept;jobban4=\ref[M]'>Civilian Positions</a></th></tr><tr align='center'>"
for(var/jobPos in civilian_positions)
jobs += "<tr bgcolor='dddddd'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_CIVILIAN))]'><a href='?src=\ref[src];jobban3=civiliandept;jobban4=\ref[M]'>Civilian Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_CIVILIAN))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -568,8 +568,8 @@
//Non-Human (Green)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='ccffcc'><th colspan='[length(nonhuman_positions)+1]'><a href='?src=\ref[src];jobban3=nonhumandept;jobban4=\ref[M]'>Non-human Positions</a></th></tr><tr align='center'>"
for(var/jobPos in nonhuman_positions)
jobs += "<tr bgcolor='ccffcc'><th colspan='[length(SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC))+1]'><a href='?src=\ref[src];jobban3=nonhumandept;jobban4=\ref[M]'>Non-human Positions</a></th></tr><tr align='center'>"
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC))
if(!jobPos) continue
var/datum/job/job = job_master.GetJob(jobPos)
if(!job) continue
@@ -631,16 +631,16 @@
//JOBBAN'S INNARDS
else if(href_list["jobban3"])
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN,0))
usr << "<span class='warning'>You do not have the appropriate permissions to add job bans!</span>"
to_chat(usr, "<span class='warning'>You do not have the appropriate permissions to add job bans!</span>")
return
if(check_rights(R_MOD,0) && !check_rights(R_ADMIN,0) && !config.mods_can_job_tempban) // If mod and tempban disabled
usr << "<span class='warning'>Mod jobbanning is disabled!</span>"
to_chat(usr, "<span class='warning'>Mod jobbanning is disabled!</span>")
return
var/mob/M = locate(href_list["jobban4"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(M != usr) //we can jobban ourselves
@@ -649,65 +649,65 @@
return
if(!job_master)
usr << "Job Master has not been setup!"
to_chat(usr, "Job Master has not been setup!")
return
//get jobs for department if specified, otherwise just returnt he one job in a list.
var/list/joblist = list()
switch(href_list["jobban3"])
if("commanddept")
for(var/jobPos in command_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
if("securitydept")
for(var/jobPos in security_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
if("engineeringdept")
for(var/jobPos in engineering_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_ENGINEERING))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
if("cargodept")
for(var/jobPos in cargo_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_CARGO))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
if("medicaldept")
for(var/jobPos in medical_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_MEDICAL))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
if("sciencedept")
for(var/jobPos in science_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_RESEARCH))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
//VOREStation Edit Start
if("explorationdept")
for(var/jobPos in planet_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_PLANET))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
//VOREStation Edit End
if("civiliandept")
for(var/jobPos in civilian_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_CIVILIAN))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
if("nonhumandept")
joblist += "pAI"
for(var/jobPos in nonhuman_positions)
for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC))
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
@@ -726,16 +726,16 @@
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
if("Yes")
if(!check_rights(R_MOD,0) && !check_rights(R_BAN, 0))
usr << "<span class='warning'> You Cannot issue temporary job-bans!</span>"
to_chat(usr, "<span class='warning'> You Cannot issue temporary job-bans!</span>")
return
if(config.ban_legacy_system)
usr << "<font color='red'>Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.</font>"
to_chat(usr, "<font color='red'>Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.</font>")
return
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
if(!mins)
return
if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config.mod_job_tempban_max)
usr << "<span class='warning'> Moderators can only job tempban up to [config.mod_job_tempban_max] minutes!</span>"
to_chat(usr, "<span class='warning'> Moderators can only job tempban up to [config.mod_job_tempban_max] minutes!</span>")
return
var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null)
if(!reason)
@@ -755,9 +755,9 @@
msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes</font>", 1)
M << "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>"
M << "<font color='red'><B>The reason is: [reason]</B></font>"
M << "<font color='red'>This jobban will be lifted in [mins] minutes.</font>"
to_chat(M, "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>")
to_chat(M, "<font color='red'><B>The reason is: [reason]</B></font>")
to_chat(M, "<font color='red'>This jobban will be lifted in [mins] minutes.</font>")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("No")
@@ -776,9 +776,9 @@
else msg += ", [job]"
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]</font>", 1)
M << "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>"
M << "<font color='red'><B>The reason is: [reason]</B></font>"
M << "<font color='red'>Jobban can be lifted only upon request.</font>"
to_chat(M, "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>")
to_chat(M, "<font color='red'><B>The reason is: [reason]</B></font>")
to_chat(M, "<font color='red'>Jobban can be lifted only upon request.</font>")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
if("Cancel")
@@ -788,7 +788,7 @@
//all jobs in joblist are banned already OR we didn't give a reason (implying they shouldn't be banned)
if(joblist.len) //at least 1 banned job exists in joblist so we have stuff to unban.
if(!config.ban_legacy_system)
usr << "Unfortunately, database based unbanning cannot be done through this panel"
to_chat(usr, "Unfortunately, database based unbanning cannot be done through this panel")
DB_ban_panel(M.ckey)
return
var/msg
@@ -809,7 +809,7 @@
continue
if(msg)
message_admins("<font color='blue'>[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]</font>", 1)
M << "<font color='red'><BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG></font>"
to_chat(M, "<font color='red'><BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG></font>")
href_list["jobban2"] = 1 // lets it fall through and refresh
return 1
return 0 //we didn't do anything!
@@ -847,11 +847,11 @@
else if(href_list["newban"])
if(!check_rights(R_MOD,0) && !check_rights(R_BAN, 0))
usr << "<span class='warning'>You do not have the appropriate permissions to add bans!</span>"
to_chat(usr, "<span class='warning'>You do not have the appropriate permissions to add bans!</span>")
return
if(check_rights(R_MOD,0) && !check_rights(R_ADMIN, 0) && !config.mods_can_job_tempban) // If mod and tempban disabled
usr << "<span class='warning'>Mod jobbanning is disabled!</span>"
to_chat(usr, "<span class='warning'>Mod jobbanning is disabled!</span>")
return
var/mob/M = locate(href_list["newban"])
@@ -865,7 +865,7 @@
if(!mins)
return
if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config.mod_tempban_max)
usr << "<span class='warning'>Moderators can only job tempban up to [config.mod_tempban_max] minutes!</span>"
to_chat(usr, "<span class='warning'>Moderators can only job tempban up to [config.mod_tempban_max] minutes!</span>")
return
if(mins >= 525600) mins = 525599
var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null)
@@ -874,15 +874,15 @@
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
ban_unban_log_save("[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.")
notes_add(M.ckey,"[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.",usr)
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>"
to_chat(M, "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
to_chat(M, "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>")
feedback_inc("ban_tmp",1)
DB_ban_record(BANTYPE_TEMP, M, mins, reason)
feedback_inc("ban_tmp_mins",mins)
if(config.banappeals)
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
to_chat(M, "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>")
else
M << "<font color='red'>No ban appeals URL has been set.</font>"
to_chat(M, "<font color='red'>No ban appeals URL has been set.</font>")
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")
var/datum/admin_help/AH = M.client ? M.client.current_ticket : null
@@ -901,12 +901,12 @@
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP)
if("No")
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a permanent ban.</font>"
to_chat(M, "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
to_chat(M, "<font color='red'>This is a permanent ban.</font>")
if(config.banappeals)
M << "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>"
to_chat(M, "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>")
else
M << "<font color='red'>No ban appeals URL has been set.</font>"
to_chat(M, "<font color='red'>No ban appeals URL has been set.</font>")
ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.")
notes_add(M.ckey,"[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.",usr)
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
@@ -935,7 +935,7 @@
cmd_admin_mute(M, mute_type)
else if(href_list["c_mode"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT)) return
if(ticker && ticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
@@ -948,7 +948,7 @@
usr << browse(dat, "window=c_mode")
else if(href_list["f_secret"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT)) return
if(ticker && ticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
@@ -962,20 +962,20 @@
usr << browse(dat, "window=f_secret")
else if(href_list["c_mode2"])
if(!check_rights(R_ADMIN|R_SERVER)) return
if(!check_rights(R_ADMIN|R_SERVER|R_EVENT)) return
if (ticker && ticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [config.mode_names[master_mode]].")
message_admins("<font color='blue'>[key_name_admin(usr)] set the mode as [config.mode_names[master_mode]].</font>", 1)
world << "<font color='blue'><b>The mode is now: [config.mode_names[master_mode]]</b></font>"
to_world("<font color='blue'><b>The mode is now: [config.mode_names[master_mode]]</b></font>")
Game() // updates the main game menu
world.save_mode(master_mode)
.(href, list("c_mode"=1))
else if(href_list["f_secret2"])
if(!check_rights(R_ADMIN|R_SERVER)) return
if(!check_rights(R_ADMIN|R_SERVER|R_EVENT)) return
if(ticker && ticker.mode)
return alert(usr, "The game has already started.", null, null, null, null)
@@ -992,7 +992,7 @@
var/mob/living/carbon/human/H = locate(href_list["monkeyone"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)]")
@@ -1004,7 +1004,7 @@
var/mob/living/carbon/human/H = locate(href_list["corgione"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
log_admin("[key_name(usr)] attempting to corgize [key_name(H)]")
@@ -1016,7 +1016,7 @@
var/mob/M = locate(href_list["forcespeech"])
if(!ismob(M))
usr << "this can only be used on instances of type /mob"
to_chat(usr, "this can only be used on instances of type /mob")
var/speech = input("What will [key_name(M)] say?.", "Force speech", "")// Don't need to sanitize, since it does that in say(), we also trust our admins.
if(!speech) return
@@ -1033,10 +1033,10 @@
var/mob/M = locate(href_list["sendtoprison"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(istype(M, /mob/living/silicon/ai))
usr << "This cannot be used on instances of type /mob/living/silicon/ai"
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
return
var/turf/prison_cell = pick(prisonwarp)
@@ -1061,10 +1061,33 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
M << "<font color='red'>You have been sent to the prison station!</font>"
to_chat(M, "<font color='red'>You have been sent to the prison station!</font>")
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("<font color='blue'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</font>", 1)
else if(href_list["sendbacktolobby"])
if(!check_rights(R_ADMIN))
return
var/mob/M = locate(href_list["sendbacktolobby"])
if(!isobserver(M))
to_chat(usr, "<span class='notice'>You can only send ghost players back to the Lobby.</span>")
return
if(!M.client)
to_chat(usr, "<span class='warning'>[M] doesn't seem to have an active client.</span>")
return
if(alert(usr, "Send [key_name(M)] back to Lobby?", "Message", "Yes", "No") != "Yes")
return
log_admin("[key_name(usr)] has sent [key_name(M)] back to the Lobby.")
message_admins("[key_name(usr)] has sent [key_name(M)] back to the Lobby.")
var/mob/new_player/NP = new()
NP.ckey = M.ckey
qdel(M)
else if(href_list["tdome1"])
if(!check_rights(R_FUN)) return
@@ -1073,10 +1096,10 @@
var/mob/M = locate(href_list["tdome1"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(istype(M, /mob/living/silicon/ai))
usr << "This cannot be used on instances of type /mob/living/silicon/ai"
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
return
for(var/obj/item/I in M)
@@ -1086,7 +1109,7 @@
sleep(5)
M.loc = pick(tdome1)
spawn(50)
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 1)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 1)", 1)
@@ -1098,10 +1121,10 @@
var/mob/M = locate(href_list["tdome2"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(istype(M, /mob/living/silicon/ai))
usr << "This cannot be used on instances of type /mob/living/silicon/ai"
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
return
for(var/obj/item/I in M)
@@ -1111,7 +1134,7 @@
sleep(5)
M.loc = pick(tdome2)
spawn(50)
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 2)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 2)", 1)
@@ -1123,17 +1146,17 @@
var/mob/M = locate(href_list["tdomeadmin"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(istype(M, /mob/living/silicon/ai))
usr << "This cannot be used on instances of type /mob/living/silicon/ai"
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
return
M.Paralyse(5)
sleep(5)
M.loc = pick(tdomeadmin)
spawn(50)
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Admin.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Admin.)", 1)
@@ -1145,10 +1168,10 @@
var/mob/M = locate(href_list["tdomeobserve"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(istype(M, /mob/living/silicon/ai))
usr << "This cannot be used on instances of type /mob/living/silicon/ai"
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
return
for(var/obj/item/I in M)
@@ -1162,7 +1185,7 @@
sleep(5)
M.loc = pick(tdomeobserve)
spawn(50)
M << "<font color='blue'>You have been sent to the Thunderdome.</font>"
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Observer.)")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1)
@@ -1171,7 +1194,7 @@
var/mob/living/L = locate(href_list["revive"])
if(!istype(L))
usr << "This can only be used on instances of type /mob/living"
to_chat(usr, "This can only be used on instances of type /mob/living")
return
if(config.allow_admin_rev)
@@ -1179,14 +1202,14 @@
message_admins("<font color='red'>Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!</font>", 1)
log_admin("[key_name(usr)] healed / Rrvived [key_name(L)]")
else
usr << "Admin Rejuvinates have been disabled"
to_chat(usr, "Admin Rejuvinates have been disabled")
else if(href_list["makeai"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["makeai"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
message_admins("<font color='red'>Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!</font>", 1)
@@ -1198,7 +1221,7 @@
var/mob/living/carbon/human/H = locate(href_list["makealien"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
usr.client.cmd_admin_alienize(H)
@@ -1208,7 +1231,7 @@
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
usr.client.cmd_admin_robotize(H)
@@ -1218,17 +1241,26 @@
var/mob/M = locate(href_list["makeanimal"])
if(istype(M, /mob/new_player))
usr << "This cannot be used on instances of type /mob/new_player"
to_chat(usr, "This cannot be used on instances of type /mob/new_player")
return
usr.client.cmd_admin_animalize(M)
else if(href_list["respawn"])
if(!check_rights(R_SPAWN))
return
var/client/C = locate(href_list["respawn"])
if(!istype(C))
return
usr.client.respawn_character_proper(C)
else if(href_list["togmutate"])
if(!check_rights(R_SPAWN)) return
var/mob/living/carbon/human/H = locate(href_list["togmutate"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
var/block=text2num(href_list["block"])
usr.client.cmd_admin_toggle_block(H,block)
@@ -1302,7 +1334,7 @@
else if(href_list["adminmoreinfo"])
var/mob/M = locate(href_list["adminmoreinfo"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
var/location_description = ""
@@ -1342,19 +1374,19 @@
if(MALE,FEMALE) gender_description = "[M.gender]"
else gender_description = "<font color='red'><b>[M.gender]</b></font>"
src.owner << "<b>Info about [M.name]:</b> "
src.owner << "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]"
src.owner << "Name = <b>[M.name]</b>; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = <b>[M.key]</b>;"
src.owner << "Location = [location_description];"
src.owner << "[special_role_description]"
src.owner << "(<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a>) (<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[M]'>VV</A>) (<A HREF='?src=\ref[src];subtlemessage=\ref[M]'>SM</A>) ([admin_jump_link(M, src)]) (<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A>)"
to_chat(src.owner, "<b>Info about [M.name]:</b> ")
to_chat(src.owner, "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]")
to_chat(src.owner, "Name = <b>[M.name]</b>; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = <b>[M.key]</b>;")
to_chat(src.owner, "Location = [location_description];")
to_chat(src.owner, "[special_role_description]")
to_chat(src.owner, "(<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a>) (<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[M]'>VV</A>) (<A HREF='?src=\ref[src];subtlemessage=\ref[M]'>SM</A>) ([admin_jump_link(M, src)]) (<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A>)")
else if(href_list["adminspawncookie"])
if(!check_rights(R_ADMIN|R_FUN)) return
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
var/mob/living/carbon/human/H = locate(href_list["adminspawncookie"])
if(!ishuman(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_l_hand )
@@ -1371,24 +1403,24 @@
log_admin("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
feedback_inc("admin_cookies_spawned",1)
H << "<font color='blue'>Your prayers have been answered!! You received the <b>best cookie</b>!</font>"
to_chat(H, "<font color='blue'>Your prayers have been answered!! You received the <b>best cookie</b>!</font>")
else if(href_list["adminsmite"])
if(!check_rights(R_ADMIN|R_FUN)) return
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
var/mob/living/carbon/human/H = locate(href_list["adminsmite"])
if(!ishuman(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
owner.smite(H)
else if(href_list["BlueSpaceArtillery"])
if(!check_rights(R_ADMIN|R_FUN)) return
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
var/mob/living/M = locate(href_list["BlueSpaceArtillery"])
if(!isliving(M))
usr << "This can only be used on instances of type /mob/living"
to_chat(usr, "This can only be used on instances of type /mob/living")
return
if(alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Blue Space Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes")
@@ -1399,41 +1431,41 @@
else if(href_list["CentComReply"])
var/mob/living/L = locate(href_list["CentComReply"])
if(!istype(L))
usr << "This can only be used on instances of type /mob/living/"
to_chat(usr, "This can only be used on instances of type /mob/living/")
return
if(L.can_centcom_reply())
var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from CentCom", ""))
if(!input) return
src.owner << "You sent [input] to [L] via a secure channel."
to_chat(src.owner, "You sent [input] to [L] via a secure channel.")
log_admin("[src.owner] replied to [key_name(L)]'s CentCom message with the message [input].")
message_admins("[src.owner] replied to [key_name(L)]'s CentCom message with: \"[input]\"")
if(!isAI(L))
L << "<span class='info'>You hear something crackle in your headset for a moment before a voice speaks.</span>"
L << "<span class='info'>Please stand by for a message from Central Command.</span>"
L << "<span class='info'>Message as follows.</span>"
L << "<span class='notice'>[input]</span>"
L << "<span class='info'>Message ends.</span>"
to_chat(L, "<span class='info'>You hear something crackle in your headset for a moment before a voice speaks.</span>")
to_chat(L, "<span class='info'>Please stand by for a message from Central Command.</span>")
to_chat(L, "<span class='info'>Message as follows.</span>")
to_chat(L, "<span class='notice'>[input]</span>")
to_chat(L, "<span class='info'>Message ends.</span>")
else
src.owner << "The person you are trying to contact does not have functional radio equipment."
to_chat(src.owner, "The person you are trying to contact does not have functional radio equipment.")
else if(href_list["SyndicateReply"])
var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
usr << "The person you are trying to contact is not wearing a headset"
to_chat(usr, "The person you are trying to contact is not wearing a headset")
return
var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from a shadowy figure...", ""))
if(!input) return
src.owner << "You sent [input] to [H] via a secure channel."
to_chat(src.owner, "You sent [input] to [H] via a secure channel.")
log_admin("[src.owner] replied to [key_name(H)]'s illegal message with the message [input].")
H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. <b>\"[input]\"</b> Message ends.\""
to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. <b>\"[input]\"</b> Message ends.\"")
else if(href_list["AdminFaxView"])
var/obj/item/fax = locate(href_list["AdminFaxView"])
@@ -1455,7 +1487,7 @@
usr << browse(data, "window=[B.name]")
else
usr << "<font color='red'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</font>"
to_chat(usr, "<font color='red'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</font>")
else if (href_list["AdminFaxViewPage"])
var/page = text2num(href_list["AdminFaxViewPage"])
@@ -1488,38 +1520,38 @@
P.adminbrowse()
else if(href_list["jumpto"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT|R_MOD)) return
var/mob/M = locate(href_list["jumpto"])
usr.client.jumptomob(M)
else if(href_list["getmob"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT|R_FUN)) return
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes") return
var/mob/M = locate(href_list["getmob"])
usr.client.Getmob(M)
else if(href_list["sendmob"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT|R_FUN)) return
var/mob/M = locate(href_list["sendmob"])
usr.client.sendmob(M)
else if(href_list["narrateto"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT|R_FUN)) return
var/mob/M = locate(href_list["narrateto"])
usr.client.cmd_admin_direct_narrate(M)
else if(href_list["subtlemessage"])
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return
if(!check_rights(R_MOD|R_ADMIN|R_EVENT|R_FUN,0)) return
var/mob/M = locate(href_list["subtlemessage"])
usr.client.cmd_admin_subtle_message(M)
else if(href_list["traitor"])
if(!check_rights(R_ADMIN|R_MOD)) return
if(!check_rights(R_ADMIN|R_MOD|R_EVENT)) return
if(!ticker || !ticker.mode)
alert("The game hasn't started yet!")
@@ -1527,7 +1559,7 @@
var/mob/M = locate(href_list["traitor"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob."
to_chat(usr, "This can only be used on instances of type /mob.")
return
show_traitor_panel(M)
@@ -1551,7 +1583,7 @@
if(!check_rights(R_SPAWN)) return
if(!config.allow_admin_spawning)
usr << "Spawning of items is not allowed."
to_chat(usr, "Spawning of items is not allowed.")
return
var/atom/loc = usr.loc
@@ -1611,24 +1643,24 @@
where = "onfloor"
if( where == "inhand" )
usr << "Support for inhand not available yet. Will spawn on floor."
to_chat(usr, "Support for inhand not available yet. Will spawn on floor.")
where = "onfloor"
if ( where == "inhand" ) //Can only give when human or monkey
if ( !( ishuman(usr) || issmall(usr) ) )
usr << "Can only spawn in hand when you're a human or a monkey."
to_chat(usr, "Can only spawn in hand when you're a human or a monkey.")
where = "onfloor"
else if ( usr.get_active_hand() )
usr << "Your active hand is full. Spawning on floor."
to_chat(usr, "Your active hand is full. Spawning on floor.")
where = "onfloor"
if ( where == "inmarked" )
if ( !marked_datum )
usr << "You don't have any object marked. Abandoning spawn."
to_chat(usr, "You don't have any object marked. Abandoning spawn.")
return
else
if ( !istype(marked_datum,/atom) )
usr << "The object you have marked cannot be used as a target. Target must be of type /atom. Abandoning spawn."
to_chat(usr, "The object you have marked cannot be used as a target. Target must be of type /atom. Abandoning spawn.")
return
var/atom/target //Where the object will be spawned
@@ -1868,7 +1900,7 @@
populate_inactive_customitems_list(src.owner)
else if(href_list["vsc"])
if(check_rights(R_ADMIN|R_SERVER))
if(check_rights(R_ADMIN|R_SERVER|R_EVENT))
if(href_list["vsc"] == "airflow")
vsc.ChangeSettingsDialog(usr,vsc.settings)
if(href_list["vsc"] == "phoron")
@@ -1880,26 +1912,26 @@
if(check_rights(R_SPAWN)) //VOREStation Edit
var/mob/M = locate(href_list["toglang"])
if(!istype(M))
usr << "[M] is illegal type, must be /mob!"
to_chat(usr, "[M] is illegal type, must be /mob!")
return
var/lang2toggle = href_list["lang"]
var/datum/language/L = GLOB.all_languages[lang2toggle]
if(L in M.languages)
if(!M.remove_language(lang2toggle))
usr << "Failed to remove language '[lang2toggle]' from \the [M]!"
to_chat(usr, "Failed to remove language '[lang2toggle]' from \the [M]!")
else
if(!M.add_language(lang2toggle))
usr << "Failed to add language '[lang2toggle]' from \the [M]!"
to_chat(usr, "Failed to add language '[lang2toggle]' from \the [M]!")
show_player_panel(M)
else if(href_list["cryoplayer"])
if(!check_rights(R_ADMIN)) return
if(!check_rights(R_ADMIN|R_EVENT)) return
var/mob/living/carbon/M = locate(href_list["cryoplayer"]) //VOREStation edit from just an all mob check to mob/living/carbon
if(!istype(M))
to_chat(usr,"<span class='warning'>Mob doesn't exist!</span>")
to_chat(usr, "<span class='warning'>Mob doesn't exist!</span>")
return
var/client/C = usr.client
+1 -1
View File
@@ -31,6 +31,6 @@
var/F = file("broken_icons.txt")
fdel(F)
F << text
world << "Completeled successfully and written to [F]"
to_world("Completeled successfully and written to [F]")
+1 -1
View File
@@ -511,7 +511,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
set name = "Show Ticket List"
set category = "Admin"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG, TRUE))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT, TRUE))
return
var/browse_to
+11 -10
View File
@@ -8,7 +8,7 @@
set name = "Jump to Area"
set desc = "Area to jump to"
set category = "Admin"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if(config.allow_admin_jump)
@@ -21,10 +21,10 @@
else
alert("Admin jumping disabled")
/client/proc/jumptoturf(var/turf/T in turfs)
/client/proc/jumptoturf(var/turf/T in world)
set name = "Jump to Turf"
set category = "Admin"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if(config.allow_admin_jump)
log_admin("[key_name(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]")
@@ -40,7 +40,8 @@
set category = "Admin"
set name = "Jump to Mob"
set popup_menu = FALSE //VOREStation Edit - Declutter.
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if(config.allow_admin_jump)
@@ -54,7 +55,7 @@
A.on_mob_jump()
A.loc = T
else
A << "This mob is not located in the game world."
to_chat(A, "This mob is not located in the game world.")
else
alert("Admin jumping disabled")
@@ -62,7 +63,7 @@
set category = "Admin"
set name = "Jump to Coordinate"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if (config.allow_admin_jump)
@@ -82,7 +83,7 @@
set category = "Admin"
set name = "Jump to Key"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if(config.allow_admin_jump)
@@ -106,7 +107,7 @@
set category = "Admin"
set name = "Get Mob"
set desc = "Mob to teleport"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if(config.allow_admin_jump)
log_admin("[key_name(usr)] jumped to [key_name(M)]")
@@ -124,7 +125,7 @@
set name = "Get Key"
set desc = "Key to teleport"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if(config.allow_admin_jump)
@@ -152,7 +153,7 @@
/client/proc/sendmob(var/mob/M in sortmobs())
set category = "Admin"
set name = "Send Mob"
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
var/area/A = input(usr, "Pick an area.", "Pick an area") in return_sorted_areas()
if(A)
+32 -32
View File
@@ -6,7 +6,7 @@
set category = null
set name = "Admin PM Mob"
if(!holder)
to_chat(src, "<font color='red'>Error: Admin-PM-Context: Only administrators may use this command.</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM-Context: Only administrators may use this command.</span>")
return
if( !ismob(M) || !M.client )
return
@@ -18,7 +18,7 @@
set category = "Admin"
set name = "Admin PM"
if(!holder)
to_chat(src, "<font color='red'>Error: Admin-PM-Panel: Only administrators may use this command.</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM-Panel: Only administrators may use this command.</span>")
return
var/list/client/targets[0]
for(var/client/T)
@@ -37,7 +37,7 @@
/client/proc/cmd_ahelp_reply(whom)
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM: You are unable to use admin PM-s (muted).</span>")
return
var/client/C
if(istext(whom))
@@ -48,16 +48,16 @@
C = whom
if(!C)
if(holder)
to_chat(src, "<font color='red'>Error: Admin-PM: Client not found.</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM: Client not found.</span>")
return
var/datum/admin_help/AH = C.current_ticket
if(AH)
message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help.")
message_admins("<span class='pm'>[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help.</span>")
var/msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null
if (!msg)
message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.")
message_admins("<span class='pm'>[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.</span>")
return
cmd_admin_pm(whom, msg, AH)
@@ -65,12 +65,12 @@
//Fetching a message if needed. src is the sender and C is the target client
/client/proc/cmd_admin_pm(whom, msg, datum/admin_help/AH)
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM: You are unable to use admin PM-s (muted).</span>")
return
if(!holder && !current_ticket) //no ticket? https://www.youtube.com/watch?v=iHSPf6x1Fdo
to_chat(src, "<font color='red'>You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.</font>")
to_chat(src, "<font color='blue'>Message: [msg]</font>")
to_chat(src, "<span class='pm warning'>You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.</span>")
to_chat(src, "<span class='pm notice'>Message: [msg]</span>")
return
var/client/recipient
@@ -95,14 +95,14 @@
if(!msg)
return
if(holder)
to_chat(src, "<font color='red'>Error: Use the admin IRC channel, nerd.</font>")
to_chat(src, "<span class='pm warning'>Error: Use the admin IRC channel, nerd.</span>")
return
else
if(!recipient)
if(holder)
to_chat(src, "<font color='red'>Error: Admin-PM: Client not found.</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM: Client not found.</span>")
to_chat(src, msg)
else
current_ticket.MessageNoRecipient(msg)
@@ -116,12 +116,12 @@
return
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM: You are unable to use admin PM-s (muted).</span>")
return
if(!recipient)
if(holder)
to_chat(src, "<font color='red'>Error: Admin-PM: Client not found.</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM: Client not found.</span>")
else
current_ticket.MessageNoRecipient(msg)
return
@@ -140,27 +140,27 @@
var/keywordparsedmsg = keywords_lookup(msg)
if(irc)
to_chat(src, "<font color='blue'>PM to-<b>Admins</b>: [rawmsg]</font>")
admin_ticket_log(src, "<font color='red'>Reply PM from-<b>[key_name(src, TRUE, TRUE)]</b> to <i>IRC</i>: [keywordparsedmsg]</font>")
to_chat(src, "<span class='pm notice'>PM to-<b>Admins</b>: [rawmsg]</span>")
admin_ticket_log(src, "<span class='pm warning'>Reply PM from-<b>[key_name(src, TRUE, TRUE)]</b> to <i>IRC</i>: [keywordparsedmsg]</span>")
ircreplyamount--
send2irc("Reply: [ckey]",rawmsg)
else
if(recipient.holder)
if(holder) //both are admins
to_chat(recipient, "<font color='red'>Admin PM from-<b>[key_name(src, recipient, 1)]</b>: [keywordparsedmsg]</font>")
to_chat(src, "<font color='blue'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: [keywordparsedmsg]</font>")
to_chat(recipient, "<span class='pm warning'>Admin PM from-<b>[key_name(src, recipient, 1)]</b>: [keywordparsedmsg]</span>")
to_chat(src, "<span class='pm notice'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: [keywordparsedmsg]</span>")
//omg this is dumb, just fill in both their tickets
var/interaction_message = "<font color='purple'>PM from-<b>[key_name(src, recipient, 1)]</b> to-<b>[key_name(recipient, src, 1)]</b>: [keywordparsedmsg]</font>"
var/interaction_message = "<span class='pm notice'>PM from-<b>[key_name(src, recipient, 1)]</b> to-<b>[key_name(recipient, src, 1)]</b>: [keywordparsedmsg]</span>"
admin_ticket_log(src, interaction_message)
if(recipient != src) //reeee
admin_ticket_log(recipient, interaction_message)
else //recipient is an admin but sender is not
var/replymsg = "<font color='red'>Reply PM from-<b>[key_name(src, recipient, 1)]</b>: [keywordparsedmsg]</font>"
var/replymsg = "<span class='pm warning'>Reply PM from-<b>[key_name(src, recipient, 1)]</b>: [keywordparsedmsg]</span>"
admin_ticket_log(src, replymsg)
to_chat(recipient, replymsg)
to_chat(src, "<font color='blue'>PM to-<b>Admins</b>: [msg]</font>")
to_chat(src, "<span class='pm notice'>PM to-<b>Admins</b>: [msg]</span>")
//play the recieving admin the adminhelp sound (if they have them enabled)
if(recipient.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
@@ -171,12 +171,12 @@
if(!recipient.current_ticket)
new /datum/admin_help(msg, recipient, TRUE)
to_chat(recipient, "<font color='red' size='4'><b>-- Administrator private message --</b></font>")
to_chat(recipient, "<font color='red'>Admin PM from-<b>[key_name(src, recipient, 0)]</b>: [msg]</font>")
to_chat(recipient, "<font color='red'><i>Click on the administrator's name to reply.</i></font>")
to_chat(src, "<font color='blue'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: [msg]</font>")
to_chat(recipient, "<span class='pm warning' size='4'><b>-- Administrator private message --</b></span>")
to_chat(recipient, "<span class='pm warning'>Admin PM from-<b>[key_name(src, recipient, 0)]</b>: [msg]</span>")
to_chat(recipient, "<span class='pm warning'><i>Click on the administrator's name to reply.</i></span>")
to_chat(src, "<span class='pm notice'>Admin PM to-<b>[key_name(recipient, src, 1)]</b>: [msg]</span>")
admin_ticket_log(recipient, "<font color='blue'>PM From [key_name_admin(src)]: [keywordparsedmsg]</font>")
admin_ticket_log(recipient, "<span class='pm notice'>PM From [key_name_admin(src)]: [keywordparsedmsg]</span>")
//always play non-admin recipients the adminhelp sound
recipient << 'sound/effects/adminhelp.ogg'
@@ -195,19 +195,19 @@
return
else //neither are admins
to_chat(src, "<font color='red'>Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.</font>")
to_chat(src, "<span class='pm warning'>Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.</span>")
return
if(irc)
log_admin("PM: [key_name(src)]->IRC: [rawmsg]")
for(var/client/X in admins)
to_chat(X, "<font color='blue'><B>PM: [key_name(src, X, 0)]-&gt;IRC:</B> [keywordparsedmsg]</font>")
to_chat(X, "<span class='pm notice'><B>PM: [key_name(src, X, 0)]-&gt;IRC:</B> [keywordparsedmsg]</span>")
else
log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]")
//we don't use message_admins here because the sender/receiver might get it too
for(var/client/X in admins)
if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient
to_chat(X, "<font color='blue'><B>PM: [key_name(src, X, 0)]-&gt;[key_name(recipient, X, 0)]:</B> [keywordparsedmsg]</font>" )
to_chat(X, "<span class='pm notice'><B>PM: [key_name(src, X, 0)]-&gt;[key_name(recipient, X, 0)]:</B> [keywordparsedmsg]</span>" )
/proc/IrcPm(target,msg,sender)
var/client/C = GLOB.directory[target]
@@ -256,11 +256,11 @@
message_admins("IRC message from [sender] to [key_name_admin(C)] : [msg]")
log_admin("IRC PM: [sender] -> [key_name(C)] : [msg]")
to_chat(C, "<font color='red' size='4'><b>-- Administrator private message --</b></font>")
to_chat(C, "<font color='red'>Admin PM from-<b><a href='?priv_msg=[stealthkey]'>[adminname]</A></b>: [msg]</font>")
to_chat(C, "<font color='red'><i>Click on the administrator's name to reply.</i></font>")
to_chat(C, "<span class='pm warning'><font size='4'><b>-- Administrator private message --</b></font></span>")
to_chat(C, "<span class='pm warning'>Admin PM from-<b><a href='?priv_msg=[stealthkey]'>[adminname]</A></b>: [msg]</span>")
to_chat(C, "<span class='pm warning'><i>Click on the administrator's name to reply.</i></span>")
admin_ticket_log(C, "<font color='blue'>PM From [irc_tagged]: [msg]</font>")
admin_ticket_log(C, "<span class='pm notice'>PM From [irc_tagged]: [msg]</span>")
window_flash(C, ignorepref = TRUE)
//always play non-admin recipients the adminhelp sound
+3 -3
View File
@@ -14,7 +14,7 @@
//VOREStation Edit Start - Adds R_EVENT
for(var/client/C in admins)
if(check_rights(R_ADMIN|R_EVENT))
C << "<span class='admin_channel'>" + create_text_tag("admin", "ADMIN:", C) + " <span class='name'>[key_name(usr, 1)]</span>([admin_jump_link(mob, src)]): <span class='message'>[msg]</span></span>"
to_chat(C, "<span class='admin_channel'>" + create_text_tag("admin", "ADMIN:", C) + " <span class='name'>[key_name(usr, 1)]</span>([admin_jump_link(mob, src)]): <span class='message'>[msg]</span></span>")
//VOREStation Edit End
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -38,7 +38,7 @@
sender_name = "<span class='admin'>[sender_name]</span>"
for(var/client/C in admins)
if(check_rights(R_ADMIN|R_MOD|R_SERVER|R_STEALTH)) //VOREStation Edit
C << "<span class='mod_channel'>" + create_text_tag("mod", "MOD:", C) + " <span class='name'>[sender_name]</span>([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>"
to_chat(C, "<span class='mod_channel'>" + create_text_tag("mod", "MOD:", C) + " <span class='name'>[sender_name]</span>([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>")
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -60,6 +60,6 @@
if(check_rights(R_ADMIN, 0))
sender_name = "<span class='admin'>[sender_name]</span>"
for(var/client/C in admins)
C << "<span class='event_channel'>" + create_text_tag("event", "EVENT:", C) + " <span class='name'>[sender_name]</span>([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>"
to_chat(C, "<span class='event_channel'>" + create_text_tag("event", "EVENT:", C) + " <span class='name'>[sender_name]</span>([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>")
feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+2 -2
View File
@@ -3,7 +3,7 @@
set name = "AOOC"
set desc = "Antagonist OOC"
var/is_admin = check_rights(R_ADMIN|R_MOD, show_msg = 0)
var/is_admin = check_rights(R_ADMIN|R_MOD|R_EVENT, show_msg = 0)
var/is_antag = usr.mind && usr.mind.special_role
if(!is_antag && !is_admin) // Non-antagonists and non-admins have no business using this.
@@ -30,7 +30,7 @@
var/player_display = (is_admin && !is_antag) ? "[display_name]([usr.client.holder.rank])" : display_name
for(var/mob/M in mob_list)
if(check_rights(R_ADMIN|R_MOD, 0, M)) // Staff can see AOOC unconditionally, and with more details.
if(check_rights(R_ADMIN|R_MOD|R_EVENT, 0, M)) // Staff can see AOOC unconditionally, and with more details.
to_chat(M, "<span class='ooc'><span class='aooc'>[create_text_tag("aooc", "Antag-OOC:", M.client)] <EM>[get_options_bar(src, 0, 1, 1)]([admin_jump_link(usr, M.client.holder)]):</EM> <span class='message'>[msg]</span></span></span>")
else if(M.client) // Players can only see AOOC if observing, or if they are an antag type allowed to use AOOC.
var/datum/antagonist/A = null
+10 -10
View File
@@ -10,25 +10,25 @@
if(alert("WARNING: This command should not be run on a live server. Do you want to continue?", "Check Piping", "No", "Yes") == "No")
return
usr << "Checking for disconnected pipes..."
to_chat(usr, "Checking for disconnected pipes...")
//all plumbing - yes, some things might get stated twice, doesn't matter.
for (var/obj/machinery/atmospherics/plumbing in machines)
if (plumbing.nodealert)
usr << "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])"
to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])")
//Manifolds
for (var/obj/machinery/atmospherics/pipe/manifold/pipe in machines)
if (!pipe.node1 || !pipe.node2 || !pipe.node3)
usr << "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])"
to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])")
//Pipes
for (var/obj/machinery/atmospherics/pipe/simple/pipe in machines)
if (!pipe.node1 || !pipe.node2)
usr << "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])"
to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])")
usr << "Checking for overlapping pipes..."
to_chat(usr, "Checking for overlapping pipes...")
next_turf:
for(var/turf/T in turfs)
for(var/turf/T in world)
for(var/dir in cardinal)
var/list/connect_types = list(1 = 0, 2 = 0, 3 = 0)
for(var/obj/machinery/atmospherics/pipe in T)
@@ -36,9 +36,9 @@
for(var/connect_type in pipe.connect_types)
connect_types[connect_type] += 1
if(connect_types[1] > 1 || connect_types[2] > 1 || connect_types[3] > 1)
usr << "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])"
to_chat(usr, "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])")
continue next_turf
usr << "Done"
to_chat(usr, "Done")
/client/proc/powerdebug()
set category = "Mapping"
@@ -52,9 +52,9 @@
if (!PN.nodes || !PN.nodes.len)
if(PN.cables && (PN.cables.len > 1))
var/obj/structure/cable/C = PN.cables[1]
usr << "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]"
to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]")
if (!PN.cables || (PN.cables.len < 10))
if(PN.cables && (PN.cables.len > 1))
var/obj/structure/cable/C = PN.cables[1]
usr << "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]"
to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]")
+241 -133
View File
@@ -1,3 +1,15 @@
#define BUILDMODE_BASIC 1
#define BUILDMODE_ADVANCED 2
#define BUILDMODE_EDIT 3
#define BUILDMODE_THROW 4
#define BUILDMODE_ROOM 5
#define BUILDMODE_LADDER 6
#define BUILDMODE_CONTENTS 7
#define BUILDMODE_LIGHTS 8
#define BUILDMODE_AI 9
#define LAST_BUILDMODE 9
/proc/togglebuildmode(mob/M as mob in player_list)
set name = "Toggle Build Mode"
set category = "Special Verbs"
@@ -6,6 +18,7 @@
log_admin("[key_name(usr)] has left build mode.")
M.client.buildmode = 0
M.client.show_popup_menus = 1
M.plane_holder.set_vis(VIS_BUILDMODE, FALSE)
for(var/obj/effect/bmode/buildholder/H)
if(H.cl == M.client)
qdel(H)
@@ -13,6 +26,7 @@
log_admin("[key_name(usr)] has entered build mode.")
M.client.buildmode = 1
M.client.show_popup_menus = 0
M.plane_holder.set_vis(VIS_BUILDMODE, TRUE)
var/obj/effect/bmode/buildholder/H = new/obj/effect/bmode/buildholder()
var/obj/effect/bmode/builddir/A = new/obj/effect/bmode/builddir(H)
@@ -72,73 +86,87 @@
screen_loc = "NORTH,WEST+1"
Click()
switch(master.cl.buildmode)
if(1) // Basic Build
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Left Mouse Button = Construct / Upgrade</span>"
usr << "<span class='notice'>Right Mouse Button = Deconstruct / Delete / Downgrade</span>"
usr << "<span class='notice'>Left Mouse Button + ctrl = R-Window</span>"
usr << "<span class='notice'>Left Mouse Button + alt = Airlock</span>"
usr << ""
usr << "<span class='notice'>Use the button in the upper left corner to</span>"
usr << "<span class='notice'>change the direction of built objects.</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(2) // Adv. Build
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>"
usr << "<span class='notice'>Middle Mouse Button on buildmode button= On/Off object type saying</span>"
usr << "<span class='notice'>Middle Mouse Button on turf/obj = Capture object type</span>"
usr << "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>"
usr << "<span class='notice'>Right Mouse Button = Delete objects</span>"
usr << "<span class='notice'>Mouse Button + ctrl = Copy object type</span>"
usr << ""
usr << "<span class='notice'>Use the button in the upper left corner to</span>"
usr << "<span class='notice'>change the direction of built objects.</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(3) // Edit
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Right Mouse Button on buildmode button = Select var(type) & value</span>"
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Set var(type) & value</span>"
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset var's value</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(4) // Throw
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>"
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Throw</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(5) // Room Build
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Left Mouse Button on turf = Select as point A</span>"
usr << "<span class='notice'>Right Mouse Button on turf = Select as point B</span>"
usr << "<span class='notice'>Right Mouse Button on buildmode button = Change floor/wall type</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(6) // Make Ladders
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Left Mouse Button on turf = Set as upper ladder loc</span>"
usr << "<span class='notice'>Right Mouse Button on turf = Set as lower ladder loc</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(7) // Move Into Contents
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>"
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Move into selection</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(8) // Make Lights
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Left Mouse Button on turf/obj/mob = Make it glow</span>"
usr << "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset glowing</span>"
usr << "<span class='notice'>Right Mouse Button on buildmode button = Change glow properties</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(9) // Control mobs with ai_holders.
usr << "<span class='notice'>***********************************************************</span>"
usr << "<span class='notice'>Left Mouse Button on AI mob = Select/Deselect mob</span>"
usr << "<span class='notice'>Left Mouse Button + alt on AI mob = Toggle hostility on mob</span>"
usr << "<span class='notice'>Left Mouse Button + ctrl on AI mob = Reset target/following/movement</span>"
usr << "<span class='notice'>Right Mouse Button on enemy mob = Command selected mobs to attack mob</span>"
usr << "<span class='notice'>Right Mouse Button on allied mob = Command selected mobs to follow mob</span>"
usr << "<span class='notice'>Right Mouse Button + shift on any mob = Command selected mobs to follow mob regardless of faction</span>"
usr << "<span class='notice'>Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)</span>"
usr << "<span class='notice'>Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be inturrupted by enemies)</span>"
usr << "<span class='notice'>Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf</span>"
usr << "<span class='notice'>***********************************************************</span>"
if(BUILDMODE_BASIC)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button = Construct / Upgrade</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button = Deconstruct / Delete / Downgrade</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + ctrl = R-Window</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + alt = Airlock</span>")
to_chat(usr, "")
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_ADVANCED)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>")
to_chat(usr, "<span class='notice'>Middle Mouse Button on buildmode button= On/Off object type saying</span>")
to_chat(usr, "<span class='notice'>Middle Mouse Button on turf/obj = Capture object type</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button = Delete objects</span>")
to_chat(usr, "<span class='notice'>Mouse Button + ctrl = Copy object type</span>")
to_chat(usr, "")
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_EDIT)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Select var(type) & value</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Set var(type) & value</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset var's value</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_THROW)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Throw</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_ROOM)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf = Select as point A</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf = Select as point B</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Change floor/wall type</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_LADDER)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf = Set as upper ladder loc</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf = Set as lower ladder loc</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_CONTENTS)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Move into selection</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_LIGHTS)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Make it glow</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset glowing</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Change glow properties</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
if(BUILDMODE_AI)
to_chat(usr, "<span class='notice'>***********************************************************</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button drag box = Select only mobs in box</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button drag box + shift = Select additional mobs in area</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on non-mob = Deselect all mobs</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button on AI mob = Select/Deselect mob</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + alt on AI mob = Toggle hostility on mob</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + shift on AI mob = Toggle AI (also resets)</span>")
to_chat(usr, "<span class='notice'>Left Mouse Button + ctrl on AI mob = Copy mob faction</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button + ctrl on any mob = Paste mob faction copied with Left Mouse Button + shift</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on enemy mob = Command selected mobs to attack mob</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on allied mob = Command selected mobs to follow mob</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button + shift on any mob = Command selected mobs to follow mob regardless of faction</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be inturrupted by enemies)</span>")
to_chat(usr, "<span class='notice'>Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf</span>")
to_chat(usr, "<span class='notice'>***********************************************************</span>")
return 1
/obj/effect/bmode/buildquit
@@ -159,6 +187,7 @@
var/obj/effect/bmode/buildquit/buildquit = null
var/atom/movable/throw_atom = null
var/list/selected_mobs = list()
var/copied_faction = null
/obj/effect/bmode/buildholder/Destroy()
qdel(builddir)
@@ -184,7 +213,6 @@
selected_mobs -= unit
C.images -= unit.selected_image
/obj/effect/bmode/buildmode
icon_state = "buildmode1"
screen_loc = "NORTH,WEST+2"
@@ -207,48 +235,25 @@
if(pa.Find("middle"))
switch(master.cl.buildmode)
if(2)
if(BUILDMODE_ADVANCED)
objsay=!objsay
if(pa.Find("left"))
switch(master.cl.buildmode)
if(1)
master.cl.buildmode = 2
src.icon_state = "buildmode2"
if(2)
master.cl.buildmode = 3
src.icon_state = "buildmode3"
if(3)
master.cl.buildmode = 4
src.icon_state = "buildmode4"
if(4)
master.cl.buildmode = 5
src.icon_state = "buildmode5"
if(5)
master.cl.buildmode = 6
src.icon_state = "buildmode6"
if(6)
master.cl.buildmode = 7
src.icon_state = "buildmode7"
if(7)
master.cl.buildmode = 8
src.icon_state = "buildmode8"
if(8)
master.cl.buildmode = 9
src.icon_state = "buildmode9"
if(9)
master.cl.buildmode = 1
src.icon_state = "buildmode1"
if(master.cl.buildmode == LAST_BUILDMODE)
master.cl.buildmode = 1
else
master.cl.buildmode++
src.icon_state = "buildmode[master.cl.buildmode]"
else if(pa.Find("right"))
switch(master.cl.buildmode)
if(1) // Basic Build
if(BUILDMODE_BASIC)
return 1
if(2) // Adv. Build
if(BUILDMODE_ADVANCED)
objholder = get_path_from_partial_text(/obj/structure/closet)
if(3) // Edit
if(BUILDMODE_EDIT)
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
@@ -267,14 +272,16 @@
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
if("turf-reference")
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
if(5) // Room build
if(BUILDMODE_ROOM)
var/choice = alert("Would you like to change the floor or wall holders?","Room Builder", "Floor", "Wall")
switch(choice)
if("Floor")
floor_holder = get_path_from_partial_text(/turf/simulated/floor/plating)
if("Wall")
wall_holder = get_path_from_partial_text(/turf/simulated/wall)
if(8) // Lights
if(BUILDMODE_LIGHTS)
var/choice = alert("Change the new light range, power, or color?", "Light Maker", "Range", "Power", "Color")
switch(choice)
if("Range")
@@ -301,7 +308,7 @@
var/list/pa = params2list(params)
switch(buildmode)
if(1) // Basic Build
if(BUILDMODE_BASIC)
if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") )
if(istype(object,/turf/space))
var/turf/T = object
@@ -350,7 +357,8 @@
if(NORTHWEST)
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
WIN.set_dir(NORTHWEST)
if(2) // Adv. Build
if(BUILDMODE_ADVANCED)
if(pa.Find("left") && !pa.Find("ctrl"))
if(ispath(holder.buildmode.objholder,/turf))
var/turf/T = get_turf(object)
@@ -363,27 +371,27 @@
qdel(object)
else if(pa.Find("ctrl"))
holder.buildmode.objholder = object.type
user << "<span class='notice'>[object]([object.type]) copied to buildmode.</span>"
to_chat(user, "<span class='notice'>[object]([object.type]) copied to buildmode.</span>")
if(pa.Find("middle"))
holder.buildmode.objholder = text2path("[object.type]")
if(holder.buildmode.objsay) usr << "[object.type]"
if(holder.buildmode.objsay)
to_chat(usr, "[object.type]")
if(3) // Edit
if(BUILDMODE_EDIT)
if(pa.Find("left")) //I cant believe this shit actually compiles.
if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
object.vars[holder.buildmode.varholder] = holder.buildmode.valueholder
else
user << "<span class='danger'>[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'</span>"
to_chat(user, "<span class='danger'>[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'</span>")
if(pa.Find("right"))
if(object.vars.Find(holder.buildmode.varholder))
log_admin("[key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]")
object.vars[holder.buildmode.varholder] = initial(object.vars[holder.buildmode.varholder])
else
user << "<span class='danger'>[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'</span>"
to_chat(user, "<span class='danger'>[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'</span>")
if(4) // Throw
if(BUILDMODE_THROW)
if(pa.Find("left"))
if(istype(object, /atom/movable))
holder.throw_atom = object
@@ -391,17 +399,18 @@
if(holder.throw_atom)
holder.throw_atom.throw_at(object, 10, 1)
log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]")
if(5) // Room build
if(BUILDMODE_ROOM)
if(pa.Find("left"))
holder.buildmode.coordA = get_turf(object)
user << "<span class='notice'>Defined [object] ([object.type]) as point A.</span>"
to_chat(user, "<span class='notice'>Defined [object] ([object.type]) as point A.</span>")
if(pa.Find("right"))
holder.buildmode.coordB = get_turf(object)
user << "<span class='notice'>Defined [object] ([object.type]) as point B.</span>"
to_chat(user, "<span class='notice'>Defined [object] ([object.type]) as point B.</span>")
if(holder.buildmode.coordA && holder.buildmode.coordB)
user << "<span class='notice'>A and B set, creating rectangle.</span>"
to_chat(user, "<span class='notice'>A and B set, creating rectangle.</span>")
holder.buildmode.make_rectangle(
holder.buildmode.coordA,
holder.buildmode.coordB,
@@ -410,17 +419,18 @@
)
holder.buildmode.coordA = null
holder.buildmode.coordB = null
if(6) // Ladders
if(BUILDMODE_LADDER)
if(pa.Find("left"))
holder.buildmode.coordA = get_turf(object)
user << "<span class='notice'>Defined [object] ([object.type]) as upper ladder location.</span>"
to_chat(user, "<span class='notice'>Defined [object] ([object.type]) as upper ladder location.</span>")
if(pa.Find("right"))
holder.buildmode.coordB = get_turf(object)
user << "<span class='notice'>Defined [object] ([object.type]) as lower ladder location.</span>"
to_chat(user, "<span class='notice'>Defined [object] ([object.type]) as lower ladder location.</span>")
if(holder.buildmode.coordA && holder.buildmode.coordB)
user << "<span class='notice'>Ladder locations set, building ladders.</span>"
to_chat(user, "<span class='notice'>Ladder locations set, building ladders.</span>")
var/obj/structure/ladder/A = new /obj/structure/ladder/up(holder.buildmode.coordA)
var/obj/structure/ladder/B = new /obj/structure/ladder(holder.buildmode.coordB)
A.target_up = B
@@ -429,7 +439,8 @@
B.update_icon()
holder.buildmode.coordA = null
holder.buildmode.coordB = null
if(7) // Move into contents
if(BUILDMODE_CONTENTS)
if(pa.Find("left"))
if(istype(object, /atom))
holder.throw_atom = object
@@ -437,23 +448,32 @@
if(holder.throw_atom && istype(object, /atom/movable))
object.forceMove(holder.throw_atom)
log_admin("[key_name(usr)] moved [object] into [holder.throw_atom].")
if(8) // Lights
if(BUILDMODE_LIGHTS)
if(pa.Find("left"))
if(object)
object.set_light(holder.buildmode.new_light_range, holder.buildmode.new_light_intensity, holder.buildmode.new_light_color)
if(pa.Find("right"))
if(object)
object.set_light(0, 0, "#FFFFFF")
if(9) // AI control
if(BUILDMODE_AI)
if(pa.Find("left"))
if(isliving(object))
var/mob/living/L = object
// Reset processes.
if(pa.Find("ctrl"))
if(!isnull(L.get_AI_stance())) // Null means there's no AI datum or it has one but is player controlled w/o autopilot on.
// Pause/unpause AI
if(pa.Find("shift"))
var/stance = L.get_AI_stance()
if(!isnull(stance)) // Null means there's no AI datum or it has one but is player controlled w/o autopilot on.
var/datum/ai_holder/AI = L.ai_holder
AI.forget_everything()
to_chat(user, span("notice", "\The [L]'s AI has forgotten its target/movement destination/leader."))
if(stance == STANCE_SLEEP)
AI.go_wake()
to_chat(user, span("notice", "\The [L]'s AI has been enabled."))
else
AI.go_sleep()
to_chat(user, span("notice", "\The [L]'s AI has been disabled."))
return
else
to_chat(user, span("warning", "\The [L] is not AI controlled."))
return
@@ -468,6 +488,12 @@
to_chat(user, span("warning", "\The [L] is not AI controlled."))
return
// Copy faction
if(pa.Find("ctrl"))
holder.copied_faction = L.faction
to_chat(user, span("notice", "Copied faction '[holder.copied_faction]'."))
return
// Select/Deselect
if(!isnull(L.get_AI_stance()))
if(L in holder.selected_mobs)
@@ -476,10 +502,27 @@
else
holder.select_AI_mob(user.client, L)
to_chat(user, span("notice", "Selected \the [L]."))
return
else
to_chat(user, span("warning", "\The [L] is not AI controlled."))
return
else //Not living
for(var/mob/living/unit in holder.selected_mobs)
holder.deselect_AI_mob(user.client, unit)
if(pa.Find("right"))
// Paste faction
if(pa.Find("ctrl") && isliving(object))
if(!holder.copied_faction)
to_chat(user, span("warning", "LMB+Shift a mob to copy their faction before pasting."))
return
else
var/mob/living/L = object
L.faction = holder.copied_faction
to_chat(user, span("notice", "Pasted faction '[holder.copied_faction]'."))
return
if(istype(object, /atom)) // Force attack.
var/atom/A = object
@@ -490,6 +533,9 @@
AI.give_target(A)
i++
to_chat(user, span("notice", "Commanded [i] mob\s to attack \the [A]."))
var/image/orderimage = image(buildmode_hud,A,"ai_targetorder")
orderimage.plane = PLANE_BUILDMODE
flick_overlay(orderimage, list(user.client), 8, TRUE)
return
if(isliving(object)) // Follow or attack.
@@ -514,16 +560,67 @@
if(j)
message += "[j] mob\s to follow \the [L]."
to_chat(user, span("notice", message))
var/image/orderimage = image(buildmode_hud,L,"ai_targetorder")
orderimage.plane = PLANE_BUILDMODE
flick_overlay(orderimage, list(user.client), 8, TRUE)
return
if(isturf(object)) // Move or reposition.
var/turf/T = object
var/i = 0
var/forced = 0
var/told = 0
for(var/mob/living/unit in holder.selected_mobs)
var/datum/ai_holder/AI = unit.ai_holder
AI.give_destination(T, 1, pa.Find("shift")) // If shift is held, the mobs will not stop moving to attack a visible enemy.
i++
to_chat(user, span("notice", "Commanded [i] mob\s to move to \the [T]."))
if(unit.get_AI_stance() == STANCE_SLEEP)
unit.forceMove(T)
forced++
else
AI.give_destination(T, 1, pa.Find("shift")) // If shift is held, the mobs will not stop moving to attack a visible enemy.
told++
to_chat(user, span("notice", "Commanded [told] mob\s to move to \the [T], and manually placed [forced] of them."))
var/image/orderimage = image(buildmode_hud,T,"ai_turforder")
orderimage.plane = PLANE_BUILDMODE
flick_overlay(orderimage, list(user.client), 8, TRUE)
return
/proc/build_drag(var/client/user, buildmode, var/atom/fromatom, var/atom/toatom, var/atom/fromloc, var/atom/toloc, var/fromcontrol, var/tocontrol, params)
var/obj/effect/bmode/buildholder/holder = null
for(var/obj/effect/bmode/buildholder/H)
if(H.cl == user)
holder = H
break
if(!holder) return
var/list/pa = params2list(params)
switch(buildmode)
if(BUILDMODE_AI)
//Holding shift prevents the deselection of existing
if(!pa.Find("shift"))
for(var/mob/living/unit in holder.selected_mobs)
holder.deselect_AI_mob(user, unit)
var/turf/c1 = get_turf(fromatom)
var/turf/c2 = get_turf(toatom)
if(!c1 || !c2)
return //Dragged outside window or something
var/low_x = min(c1.x,c2.x)
var/low_y = min(c1.y,c2.y)
var/hi_x = max(c1.x,c2.x)
var/hi_y = max(c1.y,c2.y)
var/z = c1.z //Eh
var/i = 0
for(var/mob/living/L in living_mob_list)
if(L.z != z || L.client)
continue
if(L.x >= low_x && L.x <= hi_x && L.y >= low_y && L.y <= hi_y)
holder.select_AI_mob(user, L)
i++
to_chat(user, span("notice", "Band-selected [i] mobs."))
return
/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path)
var/desired_path = input("Enter full or partial typepath.","Typepath","[default_path]")
@@ -595,4 +692,15 @@
if(isturf(floor_type))
T.ChangeTurf(floor_type)
else
new floor_type(T)
new floor_type(T)
#undef BUILDMODE_BASIC
#undef BUILDMODE_ADVANCED
#undef BUILDMODE_EDIT
#undef BUILDMODE_THROW
#undef BUILDMODE_ROOM
#undef BUILDMODE_LADDER
#undef BUILDMODE_CONTENTS
#undef BUILDMODE_LIGHTS
#undef BUILDMODE_AI
#undef LAST_BUILDMODE
+4 -4
View File
@@ -19,10 +19,10 @@
custom_event_msg = input
world << "<h1 class='alert'>Custom Event</h1>"
world << "<h2 class='alert'>A custom event is starting. OOC Info:</h2>"
world << "<span class='alert'>[custom_event_msg]</span>"
world << "<br>"
to_world("<h1 class='alert'>Custom Event</h1>")
to_world("<h2 class='alert'>A custom event is starting. OOC Info:</h2>")
to_world("<span class='alert'>[custom_event_msg]</span>")
to_world("<br>")
// normal verb for players to view info
/client/verb/cmd_view_custom_event()
+40 -39
View File
@@ -303,7 +303,7 @@
set name = "Assume direct control"
set desc = "Direct intervention"
if(!check_rights(R_DEBUG|R_ADMIN)) return
if(!check_rights(R_DEBUG|R_ADMIN|R_EVENT)) return
if(M.ckey)
if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes")
return
@@ -388,33 +388,33 @@
var/list/areas_without_intercom = areas_all - areas_with_intercom
var/list/areas_without_camera = areas_all - areas_with_camera
world << "<b>AREAS WITHOUT AN APC:</b>"
to_world("<b>AREAS WITHOUT AN APC:</b>")
for(var/areatype in areas_without_APC)
world << "* [areatype]"
to_world("* [areatype]")
world << "<b>AREAS WITHOUT AN AIR ALARM:</b>"
to_world("<b>AREAS WITHOUT AN AIR ALARM:</b>")
for(var/areatype in areas_without_air_alarm)
world << "* [areatype]"
to_world("* [areatype]")
world << "<b>AREAS WITHOUT A REQUEST CONSOLE:</b>"
to_world("<b>AREAS WITHOUT A REQUEST CONSOLE:</b>")
for(var/areatype in areas_without_RC)
world << "* [areatype]"
to_world("* [areatype]")
world << "<b>AREAS WITHOUT ANY LIGHTS:</b>"
to_world("<b>AREAS WITHOUT ANY LIGHTS:</b>")
for(var/areatype in areas_without_light)
world << "* [areatype]"
to_world("* [areatype]")
world << "<b>AREAS WITHOUT A LIGHT SWITCH:</b>"
to_world("<b>AREAS WITHOUT A LIGHT SWITCH:</b>")
for(var/areatype in areas_without_LS)
world << "* [areatype]"
to_world("* [areatype]")
world << "<b>AREAS WITHOUT ANY INTERCOMS:</b>"
to_world("<b>AREAS WITHOUT ANY INTERCOMS:</b>")
for(var/areatype in areas_without_intercom)
world << "* [areatype]"
to_world("* [areatype]")
world << "<b>AREAS WITHOUT ANY CAMERAS:</b>"
to_world("<b>AREAS WITHOUT ANY CAMERAS:</b>")
for(var/areatype in areas_without_camera)
world << "* [areatype]"
to_world("* [areatype]")
/datum/admins/proc/cmd_admin_dress(input in getmobs())
set category = "Fun"
@@ -539,7 +539,7 @@
Pump.air2.gas["nitrogen"] = 3750 //The contents of 2 canisters.
Pump.air2.temperature = 50
Pump.air2.update_values()
Pump.use_power=1
Pump.update_use_power(USE_POWER_IDLE)
Pump.target_pressure = 4500
Pump.update_icon()
@@ -638,13 +638,14 @@
return
var/datum/planet/planet = input(usr, "Which planet do you want to modify the weather on?", "Change Weather") in SSplanets.planets
var/datum/weather/new_weather = input(usr, "What weather do you want to change to?", "Change Weather") as null|anything in planet.weather_holder.allowed_weather_types
if(new_weather)
planet.weather_holder.change_weather(new_weather)
planet.weather_holder.rebuild_forecast()
var/log = "[key_name(src)] changed [planet.name]'s weather to [new_weather]."
message_admins(log)
log_admin(log)
if(istype(planet))
var/datum/weather/new_weather = input(usr, "What weather do you want to change to?", "Change Weather") as null|anything in planet.weather_holder.allowed_weather_types
if(new_weather)
planet.weather_holder.change_weather(new_weather)
planet.weather_holder.rebuild_forecast()
var/log = "[key_name(src)] changed [planet.name]'s weather to [new_weather]."
message_admins(log)
log_admin(log)
/datum/admins/proc/change_time()
set category = "Debug"
@@ -655,20 +656,20 @@
return
var/datum/planet/planet = input(usr, "Which planet do you want to modify time on?", "Change Time") in SSplanets.planets
if(istype(planet))
var/datum/time/current_time_datum = planet.current_time
var/new_hour = input(usr, "What hour do you want to change to?", "Change Time", text2num(current_time_datum.show_time("hh"))) as null|num
if(!isnull(new_hour))
var/new_minute = input(usr, "What minute do you want to change to?", "Change Time", text2num(current_time_datum.show_time("mm")) ) as null|num
if(!isnull(new_minute))
var/type_needed = current_time_datum.type
var/datum/time/new_time = new type_needed()
new_time = new_time.add_hours(new_hour)
new_time = new_time.add_minutes(new_minute)
planet.current_time = new_time
spawn(1)
planet.update_sun()
var/datum/time/current_time_datum = planet.current_time
var/new_hour = input(usr, "What hour do you want to change to?", "Change Time", text2num(current_time_datum.show_time("hh"))) as null|num
if(!isnull(new_hour))
var/new_minute = input(usr, "What minute do you want to change to?", "Change Time", text2num(current_time_datum.show_time("mm")) ) as null|num
if(!isnull(new_minute))
var/type_needed = current_time_datum.type
var/datum/time/new_time = new type_needed()
new_time = new_time.add_hours(new_hour)
new_time = new_time.add_minutes(new_minute)
planet.current_time = new_time
spawn(1)
planet.update_sun()
var/log = "[key_name(src)] changed [planet.name]'s time to [planet.current_time.show_time("hh:mm")]."
message_admins(log)
log_admin(log)
var/log = "[key_name(src)] changed [planet.name]'s time to [planet.current_time.show_time("hh:mm")]."
message_admins(log)
log_admin(log)
+7 -7
View File
@@ -128,7 +128,7 @@
return
if(!air_master)
usr << "Cannot find air_system"
to_chat(usr, "Cannot find air_system")
return
var/datum/air_group/dead_groups = list()
for(var/datum/air_group/group in air_master.air_groups)
@@ -150,7 +150,7 @@
return
if(!air_master)
usr << "Cannot find air_system"
to_chat(usr, "Cannot find air_system")
return
var/turf/T = get_turf(usr)
@@ -159,7 +159,7 @@
AG.next_check = 30
AG.group_processing = 0
else
usr << "Local airgroup is unsimulated!"
to_chat(usr, "Local airgroup is unsimulated!")
feedback_add_details("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
*/
@@ -168,9 +168,9 @@
set desc = "This spams all the active jobban entries for the current round to standard output."
set category = "Debug"
usr << "<b>Jobbans active in this round.</b>"
to_chat(usr, "<b>Jobbans active in this round.</b>")
for(var/t in jobban_keylist)
usr << "[t]"
to_chat(usr, "[t]")
/client/proc/print_jobban_old_filter()
set name = "Search Jobban Log"
@@ -181,7 +181,7 @@
if(!job_filter)
return
usr << "<b>Jobbans active in this round.</b>"
to_chat(usr, "<b>Jobbans active in this round.</b>")
for(var/t in jobban_keylist)
if(findtext(t, job_filter))
usr << "[t]"
to_chat(usr, "[t]")
+2 -2
View File
@@ -14,11 +14,11 @@
var/dice = num2text(sum) + "d" + num2text(side)
if(alert("Do you want to inform the world about your game?",,"Yes", "No") == "Yes")
world << "<h2 style=\"color:#A50400\">The dice have been rolled by Gods!</h2>"
to_world("<h2 style=\"color:#A50400\">The dice have been rolled by Gods!</h2>")
var/result = roll(dice)
if(alert("Do you want to inform the world about the result?",,"Yes", "No") == "Yes")
world << "<h2 style=\"color:#A50400\">Gods rolled [dice], result is [result]</h2>"
to_world("<h2 style=\"color:#A50400\">Gods rolled [dice], result is [result]</h2>")
message_admins("[key_name_admin(src)] rolled dice [dice], result is [result]", 1)
+23
View File
@@ -0,0 +1,23 @@
//Merged Doohl's and the existing ticklag as they both had good elements about them ~
//Replaces the old Ticklag verb, fps is easier to understand
/client/proc/set_server_fps()
set category = "Debug"
set name = "Set Server FPS"
set desc = "Sets game speed in frames-per-second. Can potentially break the game"
if(!check_rights(R_DEBUG))
return
var/new_fps = round(input("Sets game frames-per-second. Can potentially break the game (default: [config.fps])", "FPS", world.fps) as num|null)
if(new_fps <= 0)
to_chat(src, "<span class='danger'>Error: set_server_fps(): Invalid world.fps value. No changes made.</span>")
return
if(new_fps > config.fps * 1.5)
if(alert(src, "You are setting fps to a high value:\n\t[new_fps] frames-per-second\n\tconfig.fps = [config.fps]", "Warning!", "Confirm", "ABORT-ABORT-ABORT") != "Confirm")
return
var/msg = "[key_name(src)] has modified world.fps to [new_fps]"
log_admin(msg, 0)
message_admins(msg, 0)
world.change_fps(new_fps)
feedback_add_details("admin_verb", "SETFPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+2 -2
View File
@@ -33,7 +33,7 @@
return
target.verbs |= /client/proc/getruntimelog
target << "<font color='red'>You have been granted access to runtime logs. Please use them responsibly or risk being banned.</font>"
to_chat(target, "<font color='red'>You have been granted access to runtime logs. Please use them responsibly or risk being banned.</font>")
return
@@ -100,7 +100,7 @@
set name = "Show Server Attack Log"
set desc = "Shows today's server attack log."
to_chat(usr,"This verb doesn't actually do anything.")
to_chat(usr, "This verb doesn't actually do anything.")
/*
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")] Attack.log"
+9 -9
View File
@@ -2,7 +2,7 @@
set category = "Admin"
set name = "Fix Atmospherics Grief"
if(!check_rights(R_ADMIN|R_DEBUG)) return
if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT)) return
if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No")
@@ -10,14 +10,14 @@
feedback_add_details("admin_verb","FA")
log_and_message_admins("Full atmosphere reset initiated by [usr].")
world << "<span class = 'danger'>Initiating restart of atmosphere. The server may lag a bit.</span>"
to_world("<span class = 'danger'>Initiating restart of atmosphere. The server may lag a bit.</span>")
sleep(10)
var/current_time = world.timeofday
// Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes.
for(var/obj/machinery/power/supermatter/S in machines)
S.power = 0
usr << "\[1/5\] - Supermatter depowered"
to_chat(usr, "\[1/5\] - Supermatter depowered")
// Remove all gases from all pipenets
for(var/datum/pipe_network/PN in pipe_networks)
@@ -25,27 +25,27 @@
G.gas = list()
G.update_values()
usr << "\[2/5\] - All pipenets purged of gas."
to_chat(usr, "\[2/5\] - All pipenets purged of gas.")
// Delete all zones.
for(var/zone/Z in world)
Z.c_invalidate()
usr << "\[3/5\] - All ZAS Zones removed."
to_chat(usr, "\[3/5\] - All ZAS Zones removed.")
var/list/unsorted_overlays = list()
for(var/id in gas_data.tile_overlay)
unsorted_overlays |= gas_data.tile_overlay[id]
for(var/turf/simulated/T in turfs)
for(var/turf/simulated/T in world)
T.air = null
T.overlays.Remove(unsorted_overlays)
T.zone = null
usr << "\[4/5\] - All turfs reset to roundstart values."
to_chat(usr, "\[4/5\] - All turfs reset to roundstart values.")
SSair.RebootZAS()
usr << "\[5/5\] - ZAS Rebooted"
world << "<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>"
to_chat(usr, "\[5/5\] - ZAS Rebooted")
to_world("<span class = 'danger'>Atmosphere restart completed in <b>[(world.timeofday - current_time)/10]</b> seconds.</span>")
+3 -3
View File
@@ -1,6 +1,6 @@
/client/proc/admin_lightning_strike()
set name = "Lightning Strike"
set desc = "Causes lightning to strike on your tile. This will hurt things on or nearby it severely."
set desc = "Causes lightning to strike on your tile. This can be made to hurt things on or nearby it severely."
set category = "Fun"
if(!check_rights(R_FUN))
@@ -28,7 +28,7 @@
// Do a lightning flash for the whole planet, if the turf belongs to a planet.
var/datum/planet/P = null
P = SSplanets.z_to_planet[T.z]
P = LAZYACCESS(SSplanets.z_to_planet, T.z)
if(P)
var/datum/weather_holder/holder = P.weather_holder
flick("lightning_flash", holder.special_visuals)
@@ -64,7 +64,7 @@
// Otherwise only those on the current z-level will hear it.
var/sound = get_sfx("thunder")
for(var/mob/M in player_list)
if((P && M.z in P.expected_z_levels) || M.z == T.z)
if( (P && (M.z in P.expected_z_levels)) || M.z == T.z)
if(M.is_preference_enabled(/datum/client_preference/weather_sounds))
M.playsound_local(get_turf(M), soundin = sound, vol = 70, vary = FALSE, is_global = TRUE)
+16 -16
View File
@@ -139,7 +139,7 @@ var/list/debug_verbs = list (
,/client/proc/cmd_assume_direct_control
,/client/proc/jump_to_dead_group
,/client/proc/startSinglo
,/client/proc/ticklag
,/client/proc/set_server_fps
,/client/proc/cmd_admin_grantfullaccess
,/client/proc/kaboom
,/client/proc/cmd_admin_areatest
@@ -221,7 +221,7 @@ var/list/debug_verbs = list (
var/turf/simulated/location = get_turf(usr)
if(!istype(location, /turf/simulated)) // We're in space, let's not cause runtimes.
usr << "<font color='red'>this debug tool cannot be used from space</font>"
to_chat(usr, "<font color='red'>this debug tool cannot be used from space</font>")
return
var/icon/red = new('icons/misc/debug_group.dmi', "red") //created here so we don't have to make thousands of these.
@@ -229,11 +229,11 @@ var/list/debug_verbs = list (
var/icon/blue = new('icons/misc/debug_group.dmi', "blue")
if(!usedZAScolors)
usr << "ZAS Test Colors"
usr << "Green = Zone you are standing in"
usr << "Blue = Connected zone to the zone you are standing in"
usr << "Yellow = A zone that is connected but not one adjacent to your connected zone"
usr << "Red = Not connected"
to_chat(usr, "ZAS Test Colors")
to_chat(usr, "Green = Zone you are standing in")
to_chat(usr, "Blue = Connected zone to the zone you are standing in")
to_chat(usr, "Yellow = A zone that is connected but not one adjacent to your connected zone")
to_chat(usr, "Red = Not connected")
usedZAScolors = 1
testZAScolors_zones += location.zone
@@ -317,9 +317,9 @@ var/list/debug_verbs = list (
if(i*10+j <= atom_list.len)
temp_atom = atom_list[i*10+j]
line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
world << line*/
to_world(line)*/
world << "There are [count] objects of type [type_path] on z-level [num_level]"
to_world("There are [count] objects of type [type_path] on z-level [num_level]")
feedback_add_details("admin_verb","mOBJZ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/count_objects_all()
@@ -344,9 +344,9 @@ var/list/debug_verbs = list (
if(i*10+j <= atom_list.len)
temp_atom = atom_list[i*10+j]
line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
world << line*/
to_world(line)*/
world << "There are [count] objects of type [type_path] in the game world"
to_world("There are [count] objects of type [type_path] in the game world")
feedback_add_details("admin_verb","mOBJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -365,7 +365,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Regroup All Airgroups Attempt"
usr << "<font color='red'>Proc disabled.</font>" //Why not.. Delete the procs instead?
to_chat(usr, "<font color='red'>Proc disabled.</font>") //Why not.. Delete the procs instead?
/*prevent_airgroup_regroup = 0
for(var/datum/air_group/AG in air_master.air_groups)
@@ -376,7 +376,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill pipe processing"
usr << "<font color='red'>Proc disabled.</font>"
to_chat(usr, "<font color='red'>Proc disabled.</font>")
/*pipe_processing_killed = !pipe_processing_killed
if(pipe_processing_killed)
@@ -388,7 +388,7 @@ var/global/prevent_airgroup_regroup = 0
set category = "Mapping"
set name = "Kill air processing"
usr << "<font color='red'>Proc disabled.</font>"
to_chat(usr, "<font color='red'>Proc disabled.</font>")
/*air_processing_killed = !air_processing_killed
if(air_processing_killed)
@@ -402,7 +402,7 @@ var/global/say_disabled = 0
set category = "Mapping"
set name = "Disable all communication verbs"
usr << "<font color='red'>Proc disabled.</font>"
to_chat(usr, "<font color='red'>Proc disabled.</font>")
/*say_disabled = !say_disabled
if(say_disabled)
@@ -417,7 +417,7 @@ var/global/movement_disabled_exception //This is the client that calls the proc,
set category = "Mapping"
set name = "Disable all movement"
usr << "<font color='red'>Proc disabled.</font>"
to_chat(usr, "<font color='red'>Proc disabled.</font>")
/*movement_disabled = !movement_disabled
if(movement_disabled)
+1 -1
View File
@@ -61,7 +61,7 @@ var/list/sounds_cache = list()
for(var/mob/living/carbon/human/CP in human_mob_list)
if(CP.real_name=="Cuban Pete" && CP.key!="Rosham")
CP << "Your body can't contain the rhumba beat"
to_chat(CP, "Your body can't contain the rhumba beat")
CP.gib()
+1 -1
View File
@@ -4,7 +4,7 @@
if(istype(O,/obj/singularity))
if(config.forbid_singulo_possession)
usr << "It is forbidden to possess singularities."
to_chat(usr, "It is forbidden to possess singularities.")
return
var/turf/T = get_turf(O)
+10 -10
View File
@@ -3,7 +3,7 @@
set name = "Pray"
if(say_disabled) //This is here to try to identify lag problems
usr << "<font color='red'>Speech is currently admin-disabled.</font>"
to_chat(usr, "<font color='red'>Speech is currently admin-disabled.</font>")
return
msg = sanitize(msg)
@@ -13,18 +13,18 @@
if(msg)
client.handle_spam_prevention(MUTE_PRAY)
if(usr.client.prefs.muted & MUTE_PRAY)
usr << "<font color='red'> You cannot pray (muted).</font>"
to_chat(usr, "<font color='red'> You cannot pray (muted).</font>")
return
var/image/cross = image('icons/obj/storage.dmi',"bible")
msg = "<font color='blue'>\icon[cross] <b><font color=#AD5AAD>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>) (<A HREF='?_src_=holder;adminsmite=\ref[src]'>SMITE</a>):</b> [msg]</font>"
msg = "<font color='blue'>[bicon(cross)] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>) (<A HREF='?_src_=holder;adminsmite=\ref[src]'>SMITE</a>):</b> [msg]</font>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
if(R_ADMIN|R_EVENT & C.holder.rights)
if(C.is_preference_enabled(/datum/client_preference/admin/show_chat_prayers))
C << msg
to_chat(C,msg)
C << 'sound/effects/ding.ogg'
usr << "Your prayers have been received by the gods."
to_chat(usr, "Your prayers have been received by the gods.")
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
//log_admin("HELP: [key_name(src)]: [msg]")
@@ -32,13 +32,13 @@
/proc/CentCom_announce(var/msg, var/mob/Sender, var/iamessage)
msg = "<font color='blue'><b><font color=orange>[uppertext(using_map.boss_short)]M[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentComReply=\ref[Sender]'>RPLY</A>):</b> [msg]</font>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
if(R_ADMIN|R_EVENT & C.holder.rights)
to_chat(C,msg)
C << 'sound/machines/signal.ogg'
/proc/Syndicate_announce(var/msg, var/mob/Sender)
msg = "<font color='blue'><b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]</font>"
for(var/client/C in admins)
if(R_ADMIN & C.holder.rights)
C << msg
if(R_ADMIN|R_EVENT & C.holder.rights)
to_chat(C,msg)
C << 'sound/machines/signal.ogg'
+98 -62
View File
@@ -2,7 +2,6 @@
set category = null
set name = "Drop Everything"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
var/confirm = alert(src, "Make [M] drop everything?", "Message", "Yes", "No")
@@ -20,8 +19,8 @@
set category = "Admin"
set name = "Prison"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
if (ismob(M))
if(istype(M, /mob/living/silicon/ai))
alert("The AI can't be sent to prison you jerk!", null, null, null, null, null)
@@ -38,7 +37,7 @@
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(prisoner), slot_w_uniform)
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
spawn(50)
M << "<font color='red'>You have been sent to the prison station!</font>"
to_chat(M, "<font color='red'>You have been sent to the prison station!</font>")
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
message_admins("<font color='blue'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</font>", 1)
feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -48,7 +47,7 @@
set category = "Admin"
set name = "Check new Players"
if(!holder)
to_chat(src, "Only staff members may use this command.")
return
var/age = alert(src, "Age check", "Show accounts yonger then _____ days","7", "30" , "All")
@@ -83,7 +82,6 @@
if(!ismob(M)) return
if (!holder)
to_chat(src, "Only administrators may use this command.")
return
var/msg = sanitize(input("Message:", text("Subtle PM to [M.key]")) as text)
@@ -93,7 +91,7 @@
if(usr)
if (usr.client)
if(usr.client.holder)
M << "<B>You hear a voice in your head...</B> <i>[msg]</i>"
to_chat(M, "<B>You hear a voice in your head...</B> <i>[msg]</i>")
log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]")
msg = "<span class='adminnotice'><b> SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] :</b> [msg]</span>"
@@ -106,14 +104,15 @@
set name = "Global Narrate"
if (!holder)
to_chat(src, "Only administrators may use this command.")
return
var/msg = sanitize(input("Message:", text("Enter the text you wish to appear to everyone:")) as text)
var/msg = input("Message:", text("Enter the text you wish to appear to everyone:")) as text
if(!(msg[1] == "<" && msg[length(msg)] == ">")) //You can use HTML but only if the whole thing is HTML. Tries to prevent admin 'accidents'.
msg = sanitize(msg)
if (!msg)
return
world << "[msg]"
to_world("[msg]")
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
message_admins("<font color='blue'><B> GlobalNarrate: [key_name_admin(usr)] : [msg]<BR></B></font>", 1)
feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -123,7 +122,6 @@
set name = "Direct Narrate"
if(!holder)
to_chat(src, "Only administrators and moderators may use this command.")
return
if(!M)
@@ -132,7 +130,9 @@
if(!M)
return
var/msg = sanitize(input("Message:", text("Enter the text you wish to appear to your target:")) as text)
var/msg = input("Message:", text("Enter the text you wish to appear to your target:")) as text
if(msg && !(msg[1] == "<" && msg[length(msg)] == ">")) //You can use HTML but only if the whole thing is HTML. Tries to prevent admin 'accidents'.
msg = sanitize(msg)
if( !msg )
return
@@ -147,11 +147,12 @@
/client/proc/cmd_admin_godmode(mob/M as mob in mob_list)
set category = "Special Verbs"
set name = "Godmode"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
M.status_flags ^= GODMODE
usr << "<font color='blue'> Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]</font>"
to_chat(usr, "<font color='blue'> Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]</font>")
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]")
var/msg = "[key_name_admin(usr)] has toggled [ADMIN_LOOKUPFLW(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]"
@@ -168,12 +169,12 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
if(!usr || !usr.client)
return
if(!usr.client.holder)
usr << "<font color='red'>Error: cmd_admin_mute: You don't have permission to do this.</font>"
to_chat(usr, "<font color='red'>Error: cmd_admin_mute: You don't have permission to do this.</font>")
return
if(!M.client)
usr << "<font color='red'>Error: cmd_admin_mute: This mob doesn't have a client tied to it.</font>"
to_chat(usr, "<font color='red'>Error: cmd_admin_mute: This mob doesn't have a client tied to it.</font>")
if(M.client.holder)
usr << "<font color='red'>Error: cmd_admin_mute: You cannot mute an admin/mod.</font>"
to_chat(usr, "<font color='red'>Error: cmd_admin_mute: You cannot mute an admin/mod.</font>")
if(!M.client)
return
if(M.client.holder)
@@ -196,7 +197,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
M.client.prefs.muted |= mute_type
log_admin("SPAM AUTOMUTE: [muteunmute] [key_name(M)] from [mute_string]")
message_admins("SPAM AUTOMUTE: [muteunmute] [key_name_admin(M)] from [mute_string].", 1)
M << "<span class='alert'>You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin.</span>"
to_chat(M, "<span class='alert'>You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin.</span>")
feedback_add_details("admin_verb","AUTOMUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
@@ -209,15 +210,16 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
log_admin("[key_name(usr)] has [muteunmute] [key_name(M)] from [mute_string]")
message_admins("[key_name_admin(usr)] has [muteunmute] [key_name_admin(M)] from [mute_string].", 1)
M << "<span class = 'alert'>You have been [muteunmute] from [mute_string].</span>"
to_chat(M, "<span class = 'alert'>You have been [muteunmute] from [mute_string].</span>")
feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_add_random_ai_law()
set category = "Fun"
set name = "Add Random AI Law"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm != "Yes") return
log_admin("[key_name(src)] has added a random AI law.")
@@ -264,8 +266,10 @@ Ccomp's first proc.
set category = "Special Verbs"
set name = "Allow player to respawn"
set desc = "Let's the player bypass the wait to respawn or allow them to re-enter their corpse."
if(!holder)
to_chat(src, "Only administrators and moderators may use this command.")
return
var/list/ghosts= get_ghosts(1,1)
var/target = input("Please, select a ghost!", "COME BACK TO LIFE!", null, null) as null|anything in ghosts
@@ -295,7 +299,8 @@ Ccomp's first proc.
set desc = "Toggles antagHUD usage for observers"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
var/action=""
if(config.antag_hud_allowed)
for(var/mob/observer/dead/g in get_ghosts())
@@ -304,7 +309,7 @@ Ccomp's first proc.
if(g.antagHUD)
g.antagHUD = 0 // Disable it on those that have it enabled
g.has_enabled_antagHUD = 2 // We'll allow them to respawn
g << "<font color='red'><B>The Administrator has disabled AntagHUD </B></font>"
to_chat(g, "<font color='red'><B>The Administrator has disabled AntagHUD </B></font>")
config.antag_hud_allowed = 0
to_chat(src, "<font color='red'><B>AntagHUD usage has been disabled</B></font>")
action = "disabled"
@@ -312,7 +317,7 @@ Ccomp's first proc.
for(var/mob/observer/dead/g in get_ghosts())
if(!g.client.holder) // Add the verb back for all non-admin ghosts
g.verbs += /mob/observer/dead/verb/toggle_antagHUD
g << "<font color='blue'><B>The Administrator has enabled AntagHUD </B></font>" // Notify all observers they can now use AntagHUD
to_chat(g, "<font color='blue'><B>The Administrator has enabled AntagHUD </B></font>") // Notify all observers they can now use AntagHUD
config.antag_hud_allowed = 1
action = "enabled"
to_chat(src, "<font color='blue'><B>AntagHUD usage has been enabled</B></font>")
@@ -327,19 +332,21 @@ Ccomp's first proc.
set category = "Server"
set name = "Toggle antagHUD Restrictions"
set desc = "Restricts players that have used antagHUD from being able to join this round."
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
var/action=""
if(config.antag_hud_restricted)
for(var/mob/observer/dead/g in get_ghosts())
g << "<font color='blue'><B>The administrator has lifted restrictions on joining the round if you use AntagHUD</B></font>"
to_chat(g, "<font color='blue'><B>The administrator has lifted restrictions on joining the round if you use AntagHUD</B></font>")
action = "lifted restrictions"
config.antag_hud_restricted = 0
to_chat(src, "<font color='blue'><B>AntagHUD restrictions have been lifted</B></font>")
else
for(var/mob/observer/dead/g in get_ghosts())
g << "<font color='red'><B>The administrator has placed restrictions on joining the round if you use AntagHUD</B></font>"
g << "<font color='red'><B>Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions </B></font>"
to_chat(g, "<font color='red'><B>The administrator has placed restrictions on joining the round if you use AntagHUD</B></font>")
to_chat(g, "<font color='red'><B>Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions </B></font>")
g.antagHUD = 0
g.has_enabled_antagHUD = 0
action = "placed restrictions"
@@ -358,16 +365,22 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "Spawn Character"
set desc = "(Re)Spawn a client's loaded character."
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
//I frontload all the questions so we don't have a half-done process while you're reading.
var/client/picked_client = input(src, "Please specify which client's character to spawn.", "Client", "") as null|anything in GLOB.clients
if(!picked_client)
return
var/location = alert(src,"Please specify where to spawn them.", "Location", "Right Here", "Arrivals", "Cancel")
respawn_character_proper(picked_client)
/client/proc/respawn_character_proper(client/picked_client)
if(!istype(picked_client))
return
//I frontload all the questions so we don't have a half-done process while you're reading.
var/location = alert(src, "Please specify where to spawn them.", "Location", "Right Here", "Arrivals", "Cancel")
if(location == "Cancel" || !location)
return
@@ -438,15 +451,17 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/mob/living/carbon/human/new_character
var/spawnloc
var/sparks
//Where did you want to spawn them?
switch(location)
if("Right Here") //Spawn them on your turf
if(!src.mob)
to_chat(src, "You can't use 'Right Here' when you are not 'Right Anywhere'!")
return
spawnloc = get_turf(src.mob)
sparks = alert(src,"Sparks like they teleported in?", "Showy", "Yes", "No", "Cancel")
if(sparks == "Cancel")
return
if(sparks == "No")
sparks = FALSE
if("Arrivals") //Spawn them at a latejoin spawnpoint
spawnloc = pick(latejoin)
@@ -461,6 +476,14 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
new_character = new(spawnloc)
if(sparks)
anim(spawnloc,new_character,'icons/mob/mob.dmi',,"phasein",,new_character.dir)
playsound(spawnloc, "sparks", 50, 1)
var/datum/effect/effect/system/spark_spread/spk = new(new_character)
spk.set_up(5, 0, new_character)
spk.attach(new_character)
spk.start()
//We were able to spawn them, right?
if(!new_character)
@@ -507,7 +530,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
log_admin("[admin] has spawned [player_key]'s character [new_character.real_name].")
message_admins("[admin] has spawned [player_key]'s character [new_character.real_name].", 1)
new_character << "You have been fully spawned. Enjoy the game."
to_chat(new_character, "You have been fully spawned. Enjoy the game.")
feedback_add_details("admin_verb","RSPCH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -516,21 +539,22 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/cmd_admin_add_freeform_ai_law()
set category = "Fun"
set name = "Add Custom AI law"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
var/input = sanitize(input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null)
if(!input)
return
for(var/mob/living/silicon/ai/M in mob_list)
if (M.stat == 2)
usr << "Upload failed. No signal is being detected from the AI."
to_chat(usr, "Upload failed. No signal is being detected from the AI.")
else if (M.see_in_dark == 0)
usr << "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power."
to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.")
else
M.add_ion_law(input)
for(var/mob/living/silicon/ai/O in mob_list)
O << input + "<font color='red'>... LAWS UPDATED!</font>"
to_chat(O,input + "<font color='red'>... LAWS UPDATED!</font>")
O.show_laws()
log_admin("Admin [key_name(usr)] has added a new AI law - [input]")
@@ -544,9 +568,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list)
set category = "Special Verbs"
set name = "Rejuvenate"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
if(!mob)
return
if(!istype(M))
@@ -566,9 +591,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/cmd_admin_create_centcom_report()
set category = "Special Verbs"
set name = "Create Command Report"
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
var/input = sanitize(input(usr, "Please enter anything you want. Anything. Serious.", "What?", "") as message|null, extra = 0)
var/customname = sanitizeSafe(input(usr, "Pick a title for the report.", "Title") as text|null)
if(!input)
@@ -583,7 +609,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if("Yes")
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
if("No")
world << "<font color='red'>New [using_map.company_name] Update available at all communication consoles.</font>"
to_world("<font color='red'>New [using_map.company_name] Update available at all communication consoles.</font>")
world << sound('sound/AI/commandreport.ogg')
log_admin("[key_name(src)] has created a command report: [input]")
@@ -595,8 +621,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "Delete"
if (!holder)
to_chat(src, "Only administrators may use this command.")
return
admin_delete(O)
/client/proc/cmd_admin_list_open_jobs()
@@ -604,8 +630,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "List free slots"
if (!holder)
to_chat(src, "Only administrators may use this command.")
return
if(job_master)
for(var/datum/job/job in job_master.occupations)
to_chat(src, "[job.title]: [job.total_positions]")
@@ -690,6 +716,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "Gibself"
set category = "Fun"
if(!holder)
return
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm == "Yes")
if (istype(mob, /mob/observer/dead)) // so they don't spam gibs everywhere
@@ -732,9 +761,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
if(M)
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes</font>."
M << "<font color='red'>To try to resolve this matter head to http://ss13.donglabs.com/forum/</font>"
to_chat(M, "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
to_chat(M, "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes</font>.")
to_chat(M, "<font color='red'>To try to resolve this matter head to http://ss13.donglabs.com/forum/</font>")
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")
world.Export("http://216.38.134.132/adminlog.php?type=ban&key=[usr.client.key]&key2=[M.key]&msg=[html_decode(reason)]&time=[mins]&server=[replacetext(config.server_name, "#", "")]")
@@ -747,9 +776,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!reason)
return
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
M << "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>"
M << "<font color='red'>This is a permanent ban.</font>"
M << "<font color='red'>To try to resolve this matter head to http://ss13.donglabs.com/forum/</font>"
to_chat(M, "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
to_chat(M, "<font color='red'>This is a permanent ban.</font>")
to_chat(M, "<font color='red'>To try to resolve this matter head to http://ss13.donglabs.com/forum/</font>")
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.</font>")
world.Export("http://216.38.134.132/adminlog.php?type=ban&key=[usr.client.key]&key2=[M.key]&msg=[html_decode(reason)]&time=perma&server=[replacetext(config.server_name, "#", "")]")
@@ -767,9 +796,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "Check Contents"
set popup_menu = FALSE //VOREStation Edit - Declutter.
if(!holder)
return
var/list/L = M.get_contents()
for(var/t in L)
usr << "[t]"
to_chat(usr, "[t]")
feedback_add_details("admin_verb","CC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/* This proc is DEFERRED. Does not do anything.
@@ -808,10 +840,15 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "Change View Range"
set desc = "switches between 1x and custom views"
if(!holder)
return
var/view = src.view
if(view == world.view)
view = input("Select view range:", "FUCK YE", 7) in list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,128)
else
view = world.view
mob.set_viewsize(view)
log_admin("[key_name(usr)] changed their view range to [view].")
//message_admins("<font color='blue'>[key_name_admin(usr)] changed their view range to [view].</font>", 1) //why? removed by order of XSI
@@ -819,7 +856,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
feedback_add_details("admin_verb","CVRA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/admin_call_shuttle()
set category = "Admin"
set name = "Call Shuttle"
@@ -887,9 +923,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "Attack Log"
usr << text("<font color='red'><b>Attack Log for []</b></font>", mob)
to_chat(usr, "<font color='red'><b>Attack Log for [mob]</b></font>")
for(var/t in M.attack_log)
usr << t
to_chat(usr,t)
feedback_add_details("admin_verb","ATTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -901,13 +937,13 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_FUN)) return
if (ticker && ticker.mode)
usr << "Nope you can't do this, the game's already started. This only works before rounds!"
to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!")
return
if(ticker.random_players)
ticker.random_players = 0
message_admins("Admin [key_name_admin(usr)] has disabled \"Everyone is Special\" mode.", 1)
usr << "Disabled."
to_chat(usr, "Disabled.")
return
@@ -919,9 +955,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.", 1)
if(notifyplayers == "Yes")
world << "<font color='blue'><b>Admin [usr.key] has forced the players to have completely random identities!</font></b>"
to_world("<font color='blue'><b>Admin [usr.key] has forced the players to have completely random identities!</font></b>")
usr << "<i>Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet</i>."
to_chat(usr, "<i>Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet</i>.")
ticker.random_players = 1
feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -930,17 +966,17 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/toggle_random_events()
set category = "Server"
set name = "Toggle random events on/off"
set desc = "Toggles random events such as meteors, black holes, blob (but not space dust) on/off"
if(!check_rights(R_SERVER)) return //VOREStation Edit
if(!config.allow_random_events)
config.allow_random_events = 1
usr << "Random events enabled"
to_chat(usr, "Random events enabled")
message_admins("Admin [key_name_admin(usr)] has enabled random events.", 1)
else
config.allow_random_events = 0
usr << "Random events disabled"
to_chat(usr, "Random events disabled")
message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1)
feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -950,7 +986,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set desc = "Removes a player from the round as if they'd cryo'd."
set popup_menu = FALSE
if(!check_rights(R_ADMIN))
if(!check_rights(R_ADMIN|R_EVENT))
return
if(!M)
+1 -1
View File
@@ -2,8 +2,8 @@
set category = "Special Verbs"
set name = "Spawn Character As Mob"
set desc = "Spawn a specified ckey as a chosen mob."
if(!holder)
to_chat(src, "Only administrators may use this command.")
return
var/client/picked_client = input(src, "Who are we spawning as a mob?", "Client", "Cancel") as null|anything in GLOB.clients
+4 -4
View File
@@ -11,11 +11,11 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
return
if(!ticker)
usr << "<font color='red'>The game hasn't started yet!</font>"
to_chat(usr, "<font color='red'>The game hasn't started yet!</font>")
return
if(world.time < 6000)
usr << "<font color='red'>There are [(6000-world.time)/10] seconds remaining before it may be called.</font>"
to_chat(usr, "<font color='red'>There are [(6000-world.time)/10] seconds remaining before it may be called.</font>")
return
var/datum/antagonist/deathsquad/team
@@ -33,7 +33,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
return
if(team.deployed)
usr << "<font color='red'>Someone is already sending a team.</font>"
to_chat(usr, "<font color='red'>Someone is already sending a team.</font>")
return
if(alert("Do you want to send in a strike team? Once enabled, this is irreversible.",,"Yes","No")!="Yes")
@@ -49,7 +49,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
return
if(team.deployed)
usr << "Looks like someone beat you to it."
to_chat(usr, "Looks like someone beat you to it.")
return
team.attempt_random_spawn()
-24
View File
@@ -1,24 +0,0 @@
//Merged Doohl's and the existing ticklag as they both had good elements about them ~Carn
/client/proc/ticklag()
set category = "Debug"
set name = "Set Ticklag"
set desc = "Sets a new tick lag. Recommend you don't mess with this too much! Stable, time-tested ticklag value is 0.9"
if(!check_rights(R_DEBUG)) return
var/newtick = input("Sets a new tick lag. Please don't mess with this too much! The stable, time-tested ticklag value is 0.9","Lag of Tick", world.tick_lag) as num|null
//I've used ticks of 2 before to help with serious singulo lags
if(newtick && newtick <= 2 && newtick > 0)
log_admin("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
message_admins("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
world.tick_lag = newtick
feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
switch(alert("Enable Tick Compensation?","Tick Comp is currently: [config.Tickcomp]","Yes","No"))
if("Yes") config.Tickcomp = 1
else config.Tickcomp = 0
else
to_chat(src, "<font color='red'>Error: ticklag(): Invalid world.ticklag value. No changes made.</font>")
+4 -4
View File
@@ -3,20 +3,20 @@
set name = "Create AI Triumvirate"
if(ticker.current_state > GAME_STATE_PREGAME)
usr << "This option is currently only usable during pregame. This may change at a later date."
to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.")
return
if(job_master && ticker)
var/datum/job/job = job_master.GetJob("AI")
if(!job)
usr << "Unable to locate the AI job"
to_chat(usr, "Unable to locate the AI job")
return
if(ticker.triai)
ticker.triai = 0
usr << "Only one AI will be spawned at round start."
to_chat(usr, "Only one AI will be spawned at round start.")
message_admins("<font color='blue'>[key_name_admin(usr)] has toggled off triple AIs at round start.</font>", 1)
else
ticker.triai = 1
usr << "There will be an AI Triumvirate at round start."
to_chat(usr, "There will be an AI Triumvirate at round start.")
message_admins("<font color='blue'>[key_name_admin(usr)] has toggled on triple AIs at round start.</font>", 1)
return
@@ -310,6 +310,13 @@ GLOBAL_PROTECT(VVpixelmovement)
if(!variable)
return
if(variable in GLOB.VVpixelmovement)
if(!check_rights(R_DEBUG))
return
var/prompt = alert(src, "Editing this var may irreparably break tile gliding for the rest of the round. THIS CAN'T BE UNDONE", "DANGER", "ABORT ", "Continue", " ABORT")
if (prompt != "Continue")
return
if(!O.can_vv_get(variable))
return
+60 -60
View File
@@ -16,7 +16,7 @@
var/mob/M = locate(href_list["rename"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
var/new_name = sanitize(input(usr,"What would you like to name this mob?","Input a name",M.real_name) as text|null, MAX_NAME_LEN)
@@ -31,7 +31,7 @@
var/D = locate(href_list["datumedit"])
if(!istype(D,/datum) && !istype(D,/client))
usr << "This can only be used on instances of types /client or /datum"
to_chat(usr, "This can only be used on instances of types /client or /datum")
return
modify_variables(D, href_list["varnameedit"], 1)
@@ -41,7 +41,7 @@
var/D = locate(href_list["datumchange"])
if(!istype(D,/datum) && !istype(D,/client))
usr << "This can only be used on instances of types /client or /datum"
to_chat(usr, "This can only be used on instances of types /client or /datum")
return
modify_variables(D, href_list["varnamechange"], 0)
@@ -51,7 +51,7 @@
var/atom/A = locate(href_list["datummass"])
if(!istype(A))
usr << "This can only be used on instances of type /atom"
to_chat(usr, "This can only be used on instances of type /atom")
return
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
@@ -61,41 +61,41 @@
var/mob/M = locate(href_list["mob_player_panel"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
src.holder.show_player_panel(M)
href_list["datumrefresh"] = href_list["mob_player_panel"]
else if(href_list["give_spell"])
if(!check_rights(R_ADMIN|R_FUN)) return
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
var/mob/M = locate(href_list["give_spell"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
src.give_spell(M)
href_list["datumrefresh"] = href_list["give_spell"]
else if(href_list["give_modifier"])
if(!check_rights(R_ADMIN|R_FUN|R_DEBUG))
if(!check_rights(R_ADMIN|R_FUN|R_DEBUG|R_EVENT))
return
var/mob/living/M = locate(href_list["give_modifier"])
if(!istype(M))
usr << "This can only be used on instances of type /mob/living"
to_chat(usr, "This can only be used on instances of type /mob/living")
return
src.admin_give_modifier(M)
href_list["datumrefresh"] = href_list["give_modifier"]
else if(href_list["give_disease2"])
if(!check_rights(R_ADMIN|R_FUN)) return
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
var/mob/M = locate(href_list["give_disease2"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
src.give_disease2(M)
@@ -106,7 +106,7 @@
var/mob/M = locate(href_list["godmode"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
src.cmd_admin_godmode(M)
@@ -117,7 +117,7 @@
var/mob/M = locate(href_list["gib"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
src.cmd_admin_gib(M)
@@ -127,18 +127,18 @@
var/mob/M = locate(href_list["build_mode"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
togglebuildmode(M)
href_list["datumrefresh"] = href_list["build_mode"]
else if(href_list["drop_everything"])
if(!check_rights(R_DEBUG|R_ADMIN)) return
if(!check_rights(R_DEBUG|R_ADMIN|R_EVENT)) return
var/mob/M = locate(href_list["drop_everything"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(usr.client)
@@ -149,7 +149,7 @@
var/mob/M = locate(href_list["direct_control"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
to_chat(usr, "This can only be used on instances of type /mob")
return
if(usr.client)
@@ -160,7 +160,7 @@
var/mob/living/carbon/human/H = locate(href_list["make_skeleton"])
if(!istype(H))
usr << "This can only be used on instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
return
H.ChangeToSkeleton()
@@ -217,7 +217,7 @@
var/atom/A = locate(href_list["rotatedatum"])
if(!istype(A))
usr << "This can only be done to instances of type /atom"
to_chat(usr, "This can only be done to instances of type /atom")
return
switch(href_list["rotatedir"])
@@ -230,12 +230,12 @@
var/mob/living/carbon/human/H = locate(href_list["makemonkey"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
return
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
holder.Topic(href, list("monkeyone"=href_list["makemonkey"]))
@@ -244,12 +244,12 @@
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
return
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
holder.Topic(href, list("makerobot"=href_list["makerobot"]))
@@ -258,12 +258,12 @@
var/mob/living/carbon/human/H = locate(href_list["makealien"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
return
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
holder.Topic(href, list("makealien"=href_list["makealien"]))
@@ -272,12 +272,12 @@
var/mob/living/carbon/human/H = locate(href_list["makeai"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
return
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
holder.Topic(href, list("makeai"=href_list["makeai"]))
@@ -286,26 +286,26 @@
var/mob/living/carbon/human/H = locate(href_list["setspecies"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
return
var/new_species = input("Please choose a new species.","Species",null) as null|anything in GLOB.all_species
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
if(H.set_species(new_species))
usr << "Set species of [H] to [H.species]."
to_chat(usr, "Set species of [H] to [H.species].")
else
usr << "Failed! Something went wrong."
to_chat(usr, "Failed! Something went wrong.")
else if(href_list["addlanguage"])
if(!check_rights(R_SPAWN)) return
var/mob/H = locate(href_list["addlanguage"])
if(!istype(H))
usr << "This can only be done to instances of type /mob"
to_chat(usr, "This can only be done to instances of type /mob")
return
var/new_language = input("Please choose a language to add.","Language",null) as null|anything in GLOB.all_languages
@@ -314,24 +314,24 @@
return
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
if(H.add_language(new_language))
usr << "Added [new_language] to [H]."
to_chat(usr, "Added [new_language] to [H].")
else
usr << "Mob already knows that language."
to_chat(usr, "Mob already knows that language.")
else if(href_list["remlanguage"])
if(!check_rights(R_SPAWN)) return
var/mob/H = locate(href_list["remlanguage"])
if(!istype(H))
usr << "This can only be done to instances of type /mob"
to_chat(usr, "This can only be done to instances of type /mob")
return
if(!H.languages.len)
usr << "This mob knows no languages."
to_chat(usr, "This mob knows no languages.")
return
var/datum/language/rem_language = input("Please choose a language to remove.","Language",null) as null|anything in H.languages
@@ -340,13 +340,13 @@
return
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
if(H.remove_language(rem_language.name))
usr << "Removed [rem_language] from [H]."
to_chat(usr, "Removed [rem_language] from [H].")
else
usr << "Mob doesn't know that language."
to_chat(usr, "Mob doesn't know that language.")
else if(href_list["addverb"])
if(!check_rights(R_DEBUG)) return
@@ -354,7 +354,7 @@
var/mob/living/H = locate(href_list["addverb"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living"
to_chat(usr, "This can only be done to instances of type /mob/living")
return
var/list/possibleverbs = list()
possibleverbs += "Cancel" // One for the top...
@@ -366,13 +366,13 @@
if(istype(H,/mob/living/silicon/ai))
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
if(istype(H,/mob/living/simple_mob))
possibleverbs += typesof(/mob/living/simple_mob/proc,/mob/living/simple_mob/verb) //VOREStation edit, Apparently polaris simplemobs have no verbs at all.
possibleverbs += typesof(/mob/living/simple_mob/proc)
possibleverbs -= H.verbs
possibleverbs += "Cancel" // ...And one for the bottom
var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
if(!verb || verb == "Cancel")
return
@@ -385,11 +385,11 @@
var/mob/H = locate(href_list["remverb"])
if(!istype(H))
usr << "This can only be done to instances of type /mob"
to_chat(usr, "This can only be done to instances of type /mob")
return
var/verb = input("Please choose a verb to remove.","Verbs",null) as null|anything in H.verbs
if(!H)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
if(!verb)
return
@@ -401,18 +401,18 @@
var/mob/living/carbon/M = locate(href_list["addorgan"])
if(!istype(M))
usr << "This can only be done to instances of type /mob/living/carbon"
to_chat(usr, "This can only be done to instances of type /mob/living/carbon")
return
var/new_organ = input("Please choose an organ to add.","Organ",null) as null|anything in typesof(/obj/item/organ)-/obj/item/organ
if(!new_organ) return
if(!M)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
if(locate(new_organ) in M.internal_organs)
usr << "Mob already has that organ."
to_chat(usr, "Mob already has that organ.")
return
new new_organ(M)
@@ -423,20 +423,20 @@
var/mob/living/carbon/M = locate(href_list["remorgan"])
if(!istype(M))
usr << "This can only be done to instances of type /mob/living/carbon"
to_chat(usr, "This can only be done to instances of type /mob/living/carbon")
return
var/obj/item/organ/rem_organ = input("Please choose an organ to remove.","Organ",null) as null|anything in M.internal_organs
if(!M)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
if(!(locate(rem_organ) in M.internal_organs))
usr << "Mob does not have that organ."
to_chat(usr, "Mob does not have that organ.")
return
usr << "Removed [rem_organ] from [M]."
to_chat(usr, "Removed [rem_organ] from [M].")
rem_organ.removed()
qdel(rem_organ)
@@ -446,13 +446,13 @@
var/mob/H = locate(href_list["fix_nano"])
if(!istype(H) || !H.client)
usr << "This can only be done on mobs with clients"
to_chat(usr, "This can only be done on mobs with clients")
return
SSnanoui.send_resources(H.client)
H.client.send_resources()
usr << "Resource files sent"
H << "Your NanoUI Resource files have been refreshed"
to_chat(usr, "Resource files sent")
to_chat(H, "Your NanoUI Resource files have been refreshed")
log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ")
@@ -461,12 +461,12 @@
var/mob/M = locate(href_list["regenerateicons"])
if(!ismob(M))
usr << "This can only be done to instances of type /mob"
to_chat(usr, "This can only be done to instances of type /mob")
return
M.regenerate_icons()
else if(href_list["adjustDamage"] && href_list["mobToDamage"])
if(!check_rights(R_DEBUG|R_ADMIN|R_FUN)) return
if(!check_rights(R_DEBUG|R_ADMIN|R_FUN|R_EVENT)) return
var/mob/living/L = locate(href_list["mobToDamage"])
if(!istype(L)) return
@@ -476,7 +476,7 @@
var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num
if(!L)
usr << "Mob doesn't exist anymore"
to_chat(usr, "Mob doesn't exist anymore")
return
switch(Text)
@@ -487,7 +487,7 @@
if("brain") L.adjustBrainLoss(amount)
if("clone") L.adjustCloneLoss(amount)
else
usr << "You caused an error. DEBUG: Text:[Text] Mob:[L]"
to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]")
return
if(amount != 0)