mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-24 13:47:33 +01:00
Merge branch 'master' of https://github.com/Yawn-Wider/YWPolarisVore into UpstreamMergeApril2020
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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") )
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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]")
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)]->IRC:</B> [keywordparsedmsg]</font>")
|
||||
to_chat(X, "<span class='pm notice'><B>PM: [key_name(src, X, 0)]->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)]->[key_name(recipient, X, 0)]:</B> [keywordparsedmsg]</font>" )
|
||||
to_chat(X, "<span class='pm notice'><B>PM: [key_name(src, X, 0)]->[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
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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,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)]")
|
||||
@@ -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
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
@@ -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]")
|
||||
|
||||
@@ -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)
|
||||
@@ -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!
|
||||
@@ -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"
|
||||
|
||||
@@ -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>")
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>")
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user