var/global/BSACooldown = 0
var/global/floorIsLava = 0
////////////////////////////////
/proc/message_admins(var/text, var/admin_ref = 0, var/admin_holder_ref = 0)
var/rendered = "ADMIN LOG: [text]"
log_adminwarn(rendered)
for (var/client/C in admin_list)
if (C)
var/msg = rendered
if (admin_ref)
msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
if (admin_holder_ref && C.holder)
msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
C << msg
///////////////////////////////////////////////////////////////////////////////////////////////Panels
/obj/admins/proc/show_player_panel(var/mob/M in mob_list)
set category = "Admin"
set name = "Show Player Panel"
set desc="Edit player (respawn, ban, heal, etc)"
if(!M)
usr << "You seem to be selecting a mob that doesn't exist anymore."
return
if (!istype(src,/obj/admins))
src = usr.client.holder
if (!istype(src,/obj/admins))
usr << "Error: you are not an admin!"
return
var/body = "
Options for [M.key]"
body += "Options panel for [M]"
if(M.client)
body += " played by [M.client] "
if(M.client.holder)
body += "\[[M.client.holder.rank]\]"
else
body += "\[Player\]"
if(istype(M, /mob/new_player))
body += " Hasn't Entered Game "
else
body += " \[Heal\] "
body += "
\[ "
body += "VV - "
body += "TP - "
body += "PM - "
body += "SM - "
body += "JMP\]
"
body += "Mob type = [M.type]
"
body += "Kick | "
body += "Ban | "
body += "Jobban | "
body += "Notes "
if(M.client)
body += "| Prison | "
body += "
Mute: "
body += "\[IC | "
body += "OOC | "
body += "PRAY | "
body += "ADMINHELP | "
body += "DEADCHAT\]"
body += "(toggle all)"
body += "
"
body += "Jump to | "
body += "Get"
body += "
"
body += "Traitor panel | "
body += "Narrate to | "
body += "Subtle message"
if (M.client)
if(!istype(M, /mob/new_player))
body += "
"
body += "Transformation:"
body += "
"
//Monkey
if(ismonkey(M))
body += "Monkeyized | "
else
body += "Monkeyize | "
//Corgi
if(iscorgi(M))
body += "Corgized | "
else
body += "Corgize | "
//AI / Cyborg
if(isAI(M))
body += "Is an AI "
else if(ishuman(M))
body += "Make AI | "
body += "Make Robot | "
body += "Make Alien | "
body += "Make Metroid "
//Simple Animals
if(isanimal(M))
body += "Re-Animalize | "
else
body += "Animalize | "
body += "
"
body += "Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.
"
body += "Observer | "
body += "\[ Alien: Drone, "
body += "Hunter, "
body += "Queen, "
body += "Sentinel, "
body += "Larva \] "
body += "Human "
body += "\[ Metroid: Baby, "
body += "Adult \] "
body += "Monkey | "
body += "Cyborg | "
body += "Cat | "
body += "Runtime | "
body += "Corgi | "
body += "Ian | "
body += "Crab | "
body += "Coffee | "
//body += "Parrot | "
//body += "Poly | "
body += "\[ Construct: Armoured , "
body += "Builder , "
body += "Wraith \] "
body += "Shade"
body += "
"
if (M.client)
body += "
"
body += "Other actions:"
body += "
"
body += "Forcesay | "
body += "Thunderdome 1 | "
body += "Thunderdome 2 | "
body += "Thunderdome Admin | "
body += "Thunderdome Observer | "
body += "
"
body += ""
usr << browse(body, "window=adminplayeropts;size=550x515")
feedback_add_details("admin_verb","SPP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/access_news_network() //MARKER
set category = "Fun"
set name = "Access Newscaster Network"
set desc = "Allows you to view, add and edit news feeds."
if (!istype(src,/obj/admins))
src = usr.client.holder
if (!istype(src,/obj/admins))
usr << "Error: you are not an admin!"
return
var/dat
dat = text("Admin NewscasterAdmin Newscaster Unit
")
switch(admincaster_screen)
if(0)
dat += "Welcome to the admin newscaster.
Here you can add, edit and censor every newspiece on the network."
dat += "
Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units."
dat += "
Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!"
if(news_network.wanted_issue)
dat+= "
Read Wanted Issue"
dat+= "
Create Feed Channel"
dat+= "
View Feed Channels"
dat+= "
Submit new Feed story"
dat+= "
Exit"
var/wanted_already = 0
if(news_network.wanted_issue)
wanted_already = 1
dat+="
Feed Security functions:
"
dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue"
dat+="
Censor Feed Stories"
dat+="
Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel."
dat+="
The newscaster recognises you as:
[src.admincaster_signature]"
if(1)
dat+= "Station Feed Channels
"
if( isemptylist(news_network.network_channels) )
dat+="No active channels found..."
else
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
if(CHANNEL.is_admin_channel)
dat+="[CHANNEL.channel_name]
"
else
dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
dat+="
Refresh"
dat+="
Back"
if(2)
dat+="Creating new Feed Channel..."
dat+="
Channel Name: [src.admincaster_feed_channel.channel_name]
"
dat+="Channel Author: [src.admincaster_signature]
"
dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]
"
dat+="
Submit
Cancel
"
if(3)
dat+="Creating new Feed Message..."
dat+="
Receiving Channel: [src.admincaster_feed_channel.channel_name]
" //MARK
dat+="Message Author: [src.admincaster_signature]
"
dat+="Message Body: [src.admincaster_feed_message.body]
"
dat+="
Submit
Cancel
"
if(4)
dat+="Feed story successfully submitted to [src.admincaster_feed_channel.channel_name].
"
dat+="
Return
"
if(5)
dat+="Feed Channel [src.admincaster_feed_channel.channel_name] created successfully.
"
dat+="
Return
"
if(6)
dat+="ERROR: Could not submit Feed story to Network.
"
if(src.admincaster_feed_channel.channel_name=="")
dat+="•Invalid receiving channel name.
"
if(src.admincaster_feed_message.body == "" || src.admincaster_feed_message.body == "\[REDACTED\]")
dat+="•Invalid message body.
"
dat+="
Return
"
if(7)
dat+="ERROR: Could not submit Feed Channel to Network.
"
if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]")
dat+="•Invalid channel name.
"
var/check = 0
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == src.admincaster_feed_channel.channel_name)
check = 1
break
if(check)
dat+="•Channel name already in use.
"
dat+="
Return
"
if(9)
dat+="[src.admincaster_feed_channel.channel_name]: \[created by: [src.admincaster_feed_channel.author]\]
"
if(src.admincaster_feed_channel.censored)
dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
"
dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
else
if( isemptylist(src.admincaster_feed_channel.messages) )
dat+="No feed messages found in channel...
"
else
for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]
"
dat+="
Refresh"
dat+="
Back"
if(10)
dat+="Nanotrasen Feed Censorship Tool
"
dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
"
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it."
dat+="
Select Feed channel to get Stories from:
"
if(isemptylist(news_network.network_channels))
dat+="No feed channels found active...
"
else
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
dat+="
Cancel"
if(11)
dat+="Nanotrasen D-Notice Handler
"
dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
"
if(isemptylist(news_network.network_channels))
dat+="No feed channels found active...
"
else
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
dat+="
Back"
if(12)
dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.author] \]
"
dat+="[(src.admincaster_feed_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]
"
if( isemptylist(src.admincaster_feed_channel.messages) )
dat+="No feed messages found in channel...
"
else
for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]
"
dat+="[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]
"
dat+="
Back"
if(13)
dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.author] \]
"
dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
"
if(src.admincaster_feed_channel.censored)
dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
"
dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
else
if( isemptylist(src.admincaster_feed_channel.messages) )
dat+="No feed messages found in channel...
"
else
for(var/datum/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]
"
dat+="
Back"
if(14)
dat+="Wanted Issue Handler:"
var/wanted_already = 0
var/end_param = 1
if(news_network.wanted_issue)
wanted_already = 1
end_param = 2
if(wanted_already)
dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below."
dat+="
"
dat+="Criminal Name: [src.admincaster_feed_message.author]
"
dat+="Description: [src.admincaster_feed_message.body]
"
if(wanted_already)
dat+="Wanted Issue created by: [news_network.wanted_issue.backup_author]
"
else
dat+="Wanted Issue will be created under prosecutor: [src.admincaster_signature]
"
dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]"
if(wanted_already)
dat+="
Take down Issue"
dat+="
Cancel"
if(15)
dat+="Wanted issue for [src.admincaster_feed_message.author] is now in Network Circulation.
"
dat+="
Return
"
if(16)
dat+="ERROR: Wanted Issue rejected by Network.
"
if(src.admincaster_feed_message.author =="" || src.admincaster_feed_message.author == "\[REDACTED\]")
dat+="•Invalid name for person wanted.
"
if(src.admincaster_feed_message.body == "" || src.admincaster_feed_message.body == "\[REDACTED\]")
dat+="•Invalid description.
"
dat+="
Return
"
if(17)
dat+="Wanted Issue successfully deleted from Circulation
"
dat+="
Return
"
if(18)
dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [news_network.wanted_issue.backup_author]\]
"
dat+="Criminal: [news_network.wanted_issue.author]
"
dat+="Description: [news_network.wanted_issue.body]
"
dat+="
Back
"
if(19)
dat+="Wanted issue for [src.admincaster_feed_message.author] successfully edited.
"
dat+="
Return
"
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]"
usr << browse(dat, "window=admincaster_main;size=400x600")
onclose(usr, "admincaster_main")
/obj/admins/proc/Jobbans()
if ((src.rank in list( "Game Admin", "Game Master" )))
var/dat = "Job Bans!
"
for(var/t in jobban_keylist)
var/r = t
if( findtext(r,"##") )
r = copytext( r, 1, findtext(r,"##") )//removes the description
dat += text("| [t] (unban) |
")
dat += "
"
usr << browse(dat, "window=ban;size=400x400")
/obj/admins/proc/Game()
var/dat
var/lvl = 0
switch(src.rank)
if("Moderator")
lvl = 1
if("Temporary Admin")
lvl = 2
if("Admin Candidate")
lvl = 3
if("Trial Admin")
lvl = 4
if("Badmin")
lvl = 5
if("Game Admin")
lvl = 6
if("Game Master")
lvl = 7
dat += "Game Panel
\n"
if(lvl > 0)
// if(lvl >= 2 )
dat += "Change Game Mode
"
if(lvl > 0 && master_mode == "secret")
dat += "(Force Secret Mode)
"
dat += "
"
if(lvl >= 3 )
dat += "Create Object
"
dat += "Quick Create Object
"
dat += "Create Turf
"
if(lvl >= 5)
dat += "Create Mob
"
// if(lvl == 6 )
usr << browse(dat, "window=admin2;size=210x180")
return
/*
/obj/admins/proc/goons()
var/dat = "
GOOOOOOONS
| Key | SA Username |
"
for(var/t in goon_keylist)
dat += text("| [t] | [goon_keylist[ckey(t)]] |
")
dat += "
"
usr << browse(dat, "window=ban;size=300x400")
/obj/admins/proc/beta_testers()
var/dat = "
Beta testers
| Key |
"
for(var/t in beta_tester_keylist)
dat += text("| [t] |
")
dat += "
"
usr << browse(dat, "window=ban;size=300x400")
*/
/obj/admins/proc/Secrets()
if (!usr.client.holder)
return
var/lvl = 0
switch(src.rank)
if("Moderator")
lvl = 1
if("Temporary Admin")
lvl = 2
if("Admin Candidate")
lvl = 3
if("Trial Admin")
lvl = 4
if("Badmin")
lvl = 5
if("Game Admin")
lvl = 6
if("Game Master")
lvl = 7
var/dat = {"
Choose a secret, any secret at all.
Admin Secrets
Remove all bombs currently in existence
Bombing List
Show current traitors and objectives
Show last [length(lastsignalers)] signalers
Show last [length(lawchanges)] law changes
Show AI Laws
Show Game Mode
Show Crew Manifest
List DNA (Blood)
List Fingerprints
"}
if(lvl > 2)
dat += {"
'Random' Events
Spawn a wave of meteors
Spawn a gravitational anomaly (Untested)
Spawn wormholes (Untested)
Spawn blob(Untested)
Trigger an Alien infestation
Send in a space ninja
Trigger an Carp migration
Irradiate the station
Trigger a Prison Break
Trigger a Virus Outbreak
Spawn an Immovable Rod
Toggle a "lights out" event
Spawn an Ion Storm
Spawn Space-Vines
Trigger a communication blackout
Fun Secrets
Remove 'internal' clothing
Remove ALL clothing
Toxic Air (WARNING: dangerous)
Turn all humans into monkeys
Remove firesuits, grilles, and pods
Make all areas powered
Make all areas unpowered
Power all SMES
Toggle Prison Shuttle Status(Use with S/R)
Send Prison Shuttle
Return Prison Shuttle
Warp all Players to Prison
Everyone is the traitor
Ghost Mode
Make all players retarded
Make all items look like guns
Japanese Animes Mode
Move Administration Shuttle
Move Ferry
Move Alien Dinghy
Move Mining Shuttle
Break all lights
Fix all lights
Best Friend AI
The floor is lava! (DANGEROUS)
"}
//Station Shockwave
if(lvl >= 6)
dat += {"
Toggle bomb cap
"}
dat += "
"
if(lvl >= 5)
dat += {"
Security Level Elevated
Change all maintenance doors to engie/brig access only
Change all maintenance doors to brig access only
Remove cap on security officers
Coder Secrets
Show Job Debug
Admin Log
"}
usr << browse(dat, "window=secrets")
return
/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
//i.e. buttons/verbs
/obj/admins/proc/restart()
set category = "Server"
set name = "Restart"
set desc="Restarts the world"
if (!usr.client.holder)
return
var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel")
if(confirm == "Cancel")
return
if(confirm == "Yes")
world << "\red Restarting world! \blue Initiated by [usr.client.stealth ? "Admin" : usr.key]!"
log_admin("[key_name(usr)] initiated a reboot.")
feedback_set_details("end_error","admin reboot - by [usr.key] [usr.client.stealth ? "(stealth)" : ""]")
feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
if(blackbox)
blackbox.save_all_data_to_sql()
sleep(50)
world.Reboot()
/obj/admins/proc/announce()
set category = "Special Verbs"
set name = "Announce"
set desc="Announce your desires to the world"
var/message = input("Global message to send:", "Admin Announce", null, null) as message
if (message)
if(usr.client.holder.rank != "Game Admin" && usr.client.holder.rank != "Game Master")
message = adminscrub(message,500)
world << "\blue [usr.client.stealth ? "Administrator" : usr.key] Announces:\n \t [message]"
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!
/obj/admins/proc/toggleooc()
set category = "Server"
set desc="Toggle dis bitch"
set name="Toggle OOC"
ooc_allowed = !( ooc_allowed )
if (ooc_allowed)
world << "The OOC channel has been globally enabled!"
else
world << "The OOC channel has been globally disabled!"
log_admin("[key_name(usr)] toggled OOC.")
message_admins("[key_name_admin(usr)] toggled OOC.", 1)
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/toggleoocdead()
set category = "Server"
set desc="Toggle dis bitch"
set name="Toggle Dead OOC"
dooc_allowed = !( dooc_allowed )
log_admin("[key_name(usr)] toggled OOC.")
message_admins("[key_name_admin(usr)] toggled Dead OOC.", 1)
feedback_add_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/toggletraitorscaling()
set category = "Server"
set desc="Toggle traitor scaling"
set name="Toggle Traitor Scaling"
traitor_scaling = !traitor_scaling
log_admin("[key_name(usr)] toggled Traitor Scaling to [traitor_scaling].")
message_admins("[key_name_admin(usr)] toggled Traitor Scaling [traitor_scaling ? "on" : "off"].", 1)
feedback_add_details("admin_verb","TTS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/startnow()
set category = "Server"
set desc="Start the round RIGHT NOW"
set name="Start Now"
if(!ticker)
alert("Unable to start the game as it is not set up.")
return
if(ticker.current_state == GAME_STATE_PREGAME)
ticker.current_state = GAME_STATE_SETTING_UP
log_admin("[usr.key] has started the game.")
message_admins("[usr.key] has started the game.")
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 << "Error: Start Now: Game has already started."
return 0
/obj/admins/proc/toggleenter()
set category = "Server"
set desc="People can't enter"
set name="Toggle Entering"
enter_allowed = !( enter_allowed )
if (!( enter_allowed ))
world << "New players may no longer enter the game."
else
world << "New players may now enter the game."
log_admin("[key_name(usr)] toggled new player game entering.")
message_admins("\blue [key_name_admin(usr)] toggled new player game entering.", 1)
world.update_status()
feedback_add_details("admin_verb","TE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/toggleAI()
set category = "Server"
set desc="People can't be AI"
set name="Toggle AI"
config.allow_ai = !( config.allow_ai )
if (!( config.allow_ai ))
world << "The AI job is no longer chooseable."
else
world << "The AI job is chooseable now."
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!
/obj/admins/proc/toggleaban()
set category = "Server"
set desc="Respawn basically"
set name="Toggle Respawn"
abandon_allowed = !( abandon_allowed )
if (abandon_allowed)
world << "You may now respawn."
else
world << "You may no longer respawn :("
message_admins("\blue [key_name_admin(usr)] toggled respawn to [abandon_allowed ? "On" : "Off"].", 1)
log_admin("[key_name(usr)] toggled respawn to [abandon_allowed ? "On" : "Off"].")
world.update_status()
feedback_add_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/toggle_aliens()
set category = "Server"
set desc="Toggle alien mobs"
set name="Toggle Aliens"
aliens_allowed = !aliens_allowed
log_admin("[key_name(usr)] toggled Aliens to [aliens_allowed].")
message_admins("[key_name_admin(usr)] toggled Aliens [aliens_allowed ? "on" : "off"].", 1)
feedback_add_details("admin_verb","TA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/toggle_space_ninja()
set category = "Server"
set desc="Toggle space ninjas spawning."
set name="Toggle Space Ninjas"
toggle_space_ninja = !toggle_space_ninja
log_admin("[key_name(usr)] toggled Space Ninjas to [toggle_space_ninja].")
message_admins("[key_name_admin(usr)] toggled Space Ninjas [toggle_space_ninja ? "on" : "off"].", 1)
feedback_add_details("admin_verb","TSN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/delay()
set category = "Server"
set desc="Delay the game start"
set name="Delay"
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
return alert("Too late... The game has already started!", null, null, null, null, null)
going = !( going )
if (!( going ))
world << "The game start has been delayed."
log_admin("[key_name(usr)] delayed the game.")
else
world << "The game will start soon."
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!
/obj/admins/proc/adjump()
set category = "Server"
set desc="Toggle admin jumping"
set name="Toggle Jump"
config.allow_admin_jump = !(config.allow_admin_jump)
message_admins("\blue Toggled admin jumping to [config.allow_admin_jump].")
feedback_add_details("admin_verb","TJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/adspawn()
set category = "Server"
set desc="Toggle admin spawning"
set name="Toggle Spawn"
config.allow_admin_spawning = !(config.allow_admin_spawning)
message_admins("\blue Toggled admin item spawning to [config.allow_admin_spawning].")
feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/adrev()
set category = "Server"
set desc="Toggle admin revives"
set name="Toggle Revive"
config.allow_admin_rev = !(config.allow_admin_rev)
message_admins("\blue Toggled reviving to [config.allow_admin_rev].")
feedback_add_details("admin_verb","TAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/immreboot()
set category = "Server"
set desc="Reboots the server post haste"
set name="Immediate Reboot"
if( alert("Reboot server?",,"Yes","No") == "No")
return
world << "\red Rebooting world! \blue Initiated by [usr.client.stealth ? "Admin" : usr.key]!"
log_admin("[key_name(usr)] initiated an immediate reboot.")
feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.stealth ? "(stealth)" : ""]")
feedback_add_details("admin_verb","IR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
if(blackbox)
blackbox.save_all_data_to_sql()
world.Reboot()
/client/proc/deadchat()
set category = "Admin"
set desc="Toggles Deadchat Visibility"
set name="Deadchat Visibility"
if(deadchat == 0)
deadchat = 1
usr << "Deadchat turned on"
else
deadchat = 0
usr << "Deadchat turned off"
feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggleprayers()
set category = "Admin"
set desc="Toggles Prayer Visibility"
set name="Prayer Visibility"
if(seeprayers == 0)
seeprayers = 1
usr << "Prayer visibility turned on"
else
seeprayers = 0
usr << "Prayer visibility turned off"
feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/unprison(var/mob/M in mob_list)
set category = "Admin"
set name = "Unprison"
if (M.z == 2)
if (config.allow_admin_jump)
M.loc = pick(latejoin)
message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]", 1)
log_admin("[key_name(usr)] has unprisoned [key_name(M)]")
else
alert("Admin jumping disabled")
else
alert("[M.name] is not prisoned.")
feedback_add_details("admin_verb","UP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
if(!ticker || !ticker.mode)
return 0
if (!istype(M))
return 0
if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries))
if (ticker.mode.config_tag == "revolution")
return 2
return 1
if(M.mind in ticker.mode.cult)
if (ticker.mode.config_tag == "cult")
return 2
return 1
if(M.mind in ticker.mode.malf_ai)
if (ticker.mode.config_tag == "malfunction")
return 2
return 1
if(M.mind in ticker.mode.syndicates)
if (ticker.mode.config_tag == "nuclear")
return 2
return 1
if(M.mind in ticker.mode.wizards)
if (ticker.mode.config_tag == "wizard")
return 2
return 1
if(M.mind in ticker.mode.changelings)
if (ticker.mode.config_tag == "changeling")
return 2
return 1
for(var/datum/disease/D in M.viruses)
if(istype(D, /datum/disease/jungle_fever))
if (ticker.mode.config_tag == "monkey")
return 2
return 1
if(isrobot(M))
var/mob/living/silicon/robot/R = M
if(R.emagged)
return 1
if(M.mind&&M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist.
return 1
return 0
/*
/obj/admins/proc/get_sab_desc(var/target)
switch(target)
if(1)
return "Destroy at least 70% of the plasma canisters on the station"
if(2)
return "Destroy the AI"
if(3)
var/count = 0
for(var/mob/living/carbon/monkey/Monkey in world)
if(Monkey.z == 1)
count++
return "Kill all [count] of the monkeys on the station"
if(4)
return "Cut power to at least 80% of the station"
else
return "Error: Invalid sabotage target: [target]"
*/
/obj/admins/proc/spawn_atom(var/object as text)
set category = "Debug"
set desc= "(atom path) Spawn an atom"
set name= "Spawn"
if(usr.client.holder.level >= 5)
var/list/types = typesof(/atom)
var/list/matches = new()
for(var/path in types)
if(findtext("[path]", object))
matches += path
if(matches.len==0)
return
var/chosen
if(matches.len==1)
chosen = matches[1]
else
chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches
if(!chosen)
return
new chosen(usr.loc)
log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
else
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
return
feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/show_traitor_panel(var/mob/M in sortmobs())
set category = "Admin"
set desc = "Edit mobs's memory and role"
set name = "Show Traitor Panel"
if (!M.mind)
usr << "Sorry, this mob has no mind!"
return
M.mind.edit_memory()
feedback_add_details("admin_verb","STP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/toggletintedweldhelmets()
set category = "Debug"
set desc="Reduces view range when wearing welding helmets"
set name="Toggle tinted welding helmes"
tinted_weldhelh = !( tinted_weldhelh )
if (tinted_weldhelh)
world << "The tinted_weldhelh has been enabled!"
else
world << "The tinted_weldhelh has been disabled!"
log_admin("[key_name(usr)] toggled tinted_weldhelh.")
message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.", 1)
feedback_add_details("admin_verb","TTWH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/obj/admins/proc/toggleguests()
set category = "Server"
set desc="Guests can't enter"
set name="Toggle guests"
guests_allowed = !( guests_allowed )
if (!( guests_allowed ))
world << "Guests may no longer enter the game."
else
world << "Guests may now enter the game."
log_admin("[key_name(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.")
message_admins("\blue [key_name_admin(usr)] toggled guests game entering [guests_allowed?"":"dis"]allowed.", 1)
feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/unjobban_panel()
set name = "Unjobban Panel"
set category = "Admin"
if (src.holder)
src.holder.unjobbanpanel()
feedback_add_details("admin_verb","UJBP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/obj/admins/proc/output_ai_laws()
var/ai_number = 0
for(var/mob/living/silicon/S in mob_list)
ai_number++
if(isAI(S))
usr << "AI [key_name(S, usr)]'s laws:"
else if(isrobot(S))
var/mob/living/silicon/robot/R = S
usr << "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independant)"]: laws:"
else if (ispAI(S))
usr << "pAI [key_name(S, usr)]'s laws:"
else
usr << "SOMETHING SILICON [key_name(S, usr)]'s laws:"
if (S.laws == null)
usr << "[key_name(S, usr)]'s laws are null?? Contact a coder."
else
S.laws.show_laws(usr)
if(!ai_number)
usr << "No AIs located" //Just so you know the thing is actually working and not just ignoring you.
//
//
//ALL DONE
//*********************************************************************************************************
//TO-DO:
//
//
/**********************Administration Shuttle**************************/
var/admin_shuttle_location = 0 // 0 = centcom 13, 1 = station
proc/move_admin_shuttle()
var/area/fromArea
var/area/toArea
if (admin_shuttle_location == 1)
fromArea = locate(/area/shuttle/administration/station)
toArea = locate(/area/shuttle/administration/centcom)
else
fromArea = locate(/area/shuttle/administration/centcom)
toArea = locate(/area/shuttle/administration/station)
fromArea.move_contents_to(toArea)
if (admin_shuttle_location)
admin_shuttle_location = 0
else
admin_shuttle_location = 1
return
/**********************Centcom Ferry**************************/
var/ferry_location = 0 // 0 = centcom , 1 = station
proc/move_ferry()
var/area/fromArea
var/area/toArea
if (ferry_location == 1)
fromArea = locate(/area/shuttle/transport1/station)
toArea = locate(/area/shuttle/transport1/centcom)
else
fromArea = locate(/area/shuttle/transport1/centcom)
toArea = locate(/area/shuttle/transport1/station)
fromArea.move_contents_to(toArea)
if (ferry_location)
ferry_location = 0
else
ferry_location = 1
return
/**********************Alien ship**************************/
var/alien_ship_location = 1 // 0 = base , 1 = mine
proc/move_alien_ship()
var/area/fromArea
var/area/toArea
if (alien_ship_location == 1)
fromArea = locate(/area/shuttle/alien/mine)
toArea = locate(/area/shuttle/alien/base)
else
fromArea = locate(/area/shuttle/alien/base)
toArea = locate(/area/shuttle/alien/mine)
fromArea.move_contents_to(toArea)
if (alien_ship_location)
alien_ship_location = 0
else
alien_ship_location = 1
return