Fun Secrets
Transformation:
One *
All
Add Bio-Effect*:
One *
All
Remove Bio-Effect:
One *
All
Add Reagent*:
One *
All
Remove Reagent:
One *
All
Make everyone an Antagonist
Give everyone severe brain damage
Set station direction
Replace all airlocks with doors
Replace all floors and walls with wood
Replace all pools with ballpits
Raise all human corpses as undead
Swap station rooms around
Give everyone a random firearm
Set up a time warp
"}
if (src.level >= LEVEL_SHITGUY)
dat += {"
Give everyone saws for arms
Emag everything
Noir
The Great Switcharoo
Farty Party All The Time
"}
if (src.level >= LEVEL_SHITGUY || (src.level == LEVEL_SA && usr.client.holder.state == 2))
dat += {"
"
usr.Browse(dat, "window=gamepanel")
return
/datum/admins/proc/restart()
set category = "Special Verbs"
set name = "Restart"
set desc= "Restarts the world"
if (mapSwitcher.locked)
return alert("The map switcher is currently compiling the map for next round. You must wait until it finishes.")
var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel")
if(confirm == "Cancel")
return
if(confirm == "Yes")
boutput(world, "
Restarting world! Initiated by [admin_key(usr.client, 1)]!")
logTheThing("admin", usr, null, "initiated a reboot.")
logTheThing("diary", usr, null, "initiated a reboot.", "admin")
var/ircmsg[] = new()
ircmsg["key"] = usr.client.key
ircmsg["name"] = (usr && usr.real_name) ? usr.real_name : "NULL"
ircmsg["msg"] = "manually restarted the server."
ircbot.export("admin", ircmsg)
round_end_data(2) //Wire: Export round end packet (manual restart)
sleep(30)
Reboot_server()
/datum/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 != "Coder" && usr.client.holder.rank != "Host")
message = adminscrub(message,500)
boutput(world, "
[admin_key(usr.client, 1)] Announces:
[message]")
logTheThing("admin", usr, null, ": [message]")
logTheThing("diary", usr, null, ": [message]", "admin")
/datum/admins/proc/startnow()
set category = "Special Verbs"
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(current_state <= GAME_STATE_PREGAME)
current_state = GAME_STATE_SETTING_UP
logTheThing("admin", usr, null, "has started the game.")
logTheThing("diary", usr, null, "has started the game.", "admin")
message_admins("
[usr.key] has started the game.")
return 1
else
//alert("Game has already started you fucking jerk, stop spamming up the chat :ARGH:") //no, FUCK YOU coder, for making this annoying popup
boutput(usr,"Game is already started.")
return 0
/datum/admins/proc/delay_start()
set category = "Special Verbs"
set desc="Delay the game start"
set name="Delay Round Start"
if (current_state > GAME_STATE_PREGAME)
return alert("Too late... The game has already started!", null, null, null, null, null)
game_start_delayed = !(game_start_delayed)
if (game_start_delayed)
boutput(world, "
The game start has been delayed.")
logTheThing("admin", usr, null, "delayed the game start.")
logTheThing("diary", usr, null, "delayed the game start.", "admin")
message_admins("
[usr.key] has delayed the game start.")
else
boutput(world, "
The game will start soon.")
logTheThing("admin", usr, null, "removed the game start delay.")
logTheThing("diary", usr, null, "removed the game start delay.", "admin")
message_admins("
[usr.key] has removed the game start delay.")
/datum/admins/proc/delay_end()
set category = "Special Verbs"
set desc="Delay the server restart"
set name="Delay Round End"
if (game_end_delayed == 2)
logTheThing("admin", usr, null, "removed the restart delay and triggered an immediate restart.")
logTheThing("diary", usr, null, "removed the restart delay and triggered an immediate restart.", "admin")
message_admins("
[usr.key] removed the restart delay and triggered an immediate restart.")
ircbot.event("roundend")
Reboot_server()
else if (game_end_delayed == 0)
game_end_delayed = 1
game_end_delayer = usr.key
logTheThing("admin", usr, null, "delayed the server restart.")
logTheThing("diary", usr, null, "delayed the server restart.", "admin")
message_admins("
[usr.key] delayed the server restart.")
var/ircmsg[] = new()
ircmsg["key"] = (usr && usr.client) ? usr.client.key : "NULL"
ircmsg["name"] = (usr && usr.real_name) ? usr.real_name : "NULL"
ircmsg["msg"] = "has delayed the server restart."
ircbot.export("admin", ircmsg)
else if (game_end_delayed == 1)
game_end_delayed = 0
game_end_delayer = null
logTheThing("admin", usr, null, "removed the restart delay.")
logTheThing("diary", usr, null, "removed the restart delay.", "admin")
message_admins("
[usr.key] removed the restart delay.")
var/ircmsg[] = new()
ircmsg["key"] = (usr && usr.client) ? usr.client.key : "NULL"
ircmsg["name"] = (usr && usr.real_name) ? usr.real_name : "NULL"
ircmsg["msg"] = "has removed the server restart delay."
ircbot.export("admin", ircmsg)
/mob/proc/revive()
if(ishuman(src))
var/mob/living/carbon/human/H = src
H.full_heal()
H.remove_ailments() // don't spawn with heart failure
return
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
/proc/checktraitor(mob/M as mob)
set popup_menu = 0
if(!M || !M.mind || !ticker || !ticker.mode)
return 0
if (istraitor(M))
return 1
if (istype(ticker.mode, /datum/game_mode/revolution))
if(M.mind in (ticker.mode:head_revolutionaries + ticker.mode:revolutionaries))
return 1
else if (istype(ticker.mode, /datum/game_mode/nuclear))
if(M.mind in ticker.mode:syndicates)
return 1
else if (istype(ticker.mode, /datum/game_mode/spy))
if(M.mind in (ticker.mode:leaders + ticker.mode:spies))
return 1
else if (istype(ticker.mode, /datum/game_mode/gang))
if(M.mind in (ticker.mode:leaders))
return 1
for(var/datum/gang/G in ticker.mode:gangs)
if(M.mind in G.members)
return 1
if(M.mind in ticker.mode:traitors)
return 1
if(M.mind in ticker.mode:Agimmicks)
return 1
return 0
/datum/admins/proc/evilize(mob/M as mob, var/traitor_type, var/special = null, var/mass_traitor_obj = null, var/mass_traitor_esc = null)
if (!M || !traitor_type)
boutput(usr, "
No mob or traitor type specified.")
return
if (!src.level >= LEVEL_SA)
boutput(usr, "
You need to be a Secondary Administrator or above to use this command.")
return
if(isdead(M) || isobserver(M))
boutput(usr, "
You cannot make someone who is dead an antagonist.")
return
if (istype(M,/mob/new_player/))
boutput(usr, "
You cannot make someone who has not entered the game an antagonist.")
return
if (!M.client)
boutput(usr, "
You cannot make someone who is logged out an antagonist.")
return
if(checktraitor(M))
boutput(usr, "
That person is already an antagonist.")
return
if(!(ticker && ticker.mode && istype(ticker.mode, /datum/game_mode/gang)) && traitor_type == "gang leader")
boutput(usr, "
Gang Leaders are currently restricted to gang mode only.")
return
traitor_type = lowertext(traitor_type)
special = lowertext(special)
if(mass_traitor_obj)
var/datum/objective/custom_objective = new /datum/objective(mass_traitor_obj)
custom_objective.owner = M.mind
M.mind.objectives += custom_objective
if(mass_traitor_esc)
var/datum/objective/escape/escape_objective = new mass_traitor_esc
escape_objective.owner = M.mind
M.mind.objectives += escape_objective
else
var/list/eligible_objectives = list()
if (ishuman(M) || iscritter(M))
eligible_objectives = typesof(/datum/objective/regular/) + typesof(/datum/objective/escape/)
else if (issilicon(M))
eligible_objectives = list(/datum/objective/regular,/datum/objective/regular/assassinate,
/datum/objective/regular/force_evac_time,/datum/objective/regular/gimmick,/datum/objective/escape,/datum/objective/escape/hijack,
/datum/objective/escape/survive,/datum/objective/escape/kamikaze)
/*if (isrobot(M))
eligible_objectives += /datum/objective/regular/borgdeath*/
traitor_type = "traitor"
switch(traitor_type)
if ("changeling")
eligible_objectives += /datum/objective/specialist/absorb
if ("werewolf")
eligible_objectives += /datum/objective/specialist/werewolf/feed
if ("vampire")
eligible_objectives += /datum/objective/specialist/drinkblood
if ("hunter")
eligible_objectives += /datum/objective/specialist/hunter/trophy
if ("grinch")
eligible_objectives += /datum/objective/specialist/ruin_xmas
if ("gang leader")
var/datum/objective/gangObjective = new /datum/objective/specialist/gang( )
gangObjective.owner = M.mind
M.mind.objectives += gangObjective
var/done = 0
var/select_objective = null
var/datum/objective/new_objective = null
var/custom_text = "Go hog wild!"
while (done != 1)
select_objective = input(usr, "Add a new objective. Hit cancel when finished adding.", "Traitor Objectives") as null|anything in eligible_objectives
if (!select_objective)
done = 1
break
if (select_objective == /datum/objective/regular)
custom_text = input(usr,"Enter custom objective text.","Traitor Objectives","Go hog wild!") as null|text
if (custom_text)
new_objective = new select_objective(custom_text)
new_objective.owner = M.mind
new_objective.set_up()
M.mind.objectives += new_objective
else
boutput(usr, "
No text was entered. Objective not given.")
else
new_objective = new select_objective
new_objective.owner = M.mind
new_objective.set_up()
M.mind.objectives += new_objective
if (M.mind.objectives.len < 1)
boutput(usr, "
Not enough objectives specified.")
return
if (isAI(M))
var/mob/living/silicon/ai/A = M
A.syndicate = 1
A.syndicate_possible = 1
A.handle_robot_antagonist_status("admin", 0, usr)
else if (isrobot(M))
var/mob/living/silicon/robot/R = M
if (R.dependent)
boutput(usr, "
You can't evilize AI-controlled shells.")
return
R.syndicate = 1
R.syndicate_possible = 1
R.handle_robot_antagonist_status("admin", 0, usr)
else if (ishuman(M) || iscritter(M))
switch(traitor_type)
if("traitor")
M.show_text("
You have defected and become a traitor!
", "red")
if(special != "hardmode")
M.mind.special_role = "traitor"
M.verbs += /client/proc/gearspawn_traitor
SHOW_TRAITOR_RADIO_TIPS(M)
else
M.mind.special_role = "hard-mode traitor"
SHOW_TRAITOR_HARDMODE_TIPS(M)
if("changeling")
M.mind.special_role = "changeling"
M.show_text("
You have mutated into a changeling!
", "red")
M.make_changeling()
if("wizard")
M.mind.special_role = "wizard"
M.show_text("
You have been seduced by magic and become a wizard!
", "red")
SHOW_ADMINWIZARD_TIPS(M)
M.verbs += /client/proc/gearspawn_wizard
if("vampire")
M.mind.special_role = "vampire"
M.show_text("
You have joined the ranks of the undead and are now a vampire!
", "red")
M.make_vampire()
if("hunter")
M.mind.special_role = "hunter"
M.mind.assigned_role = "Hunter"
M.show_text("
You have become a hunter!
", "red")
M.make_hunter()
if("wrestler")
M.mind.special_role = "wrestler"
M.show_text("
You feel an urgent need to wrestle!
", "red")
M.make_wrestler(1)
if("werewolf")
M.mind.special_role = "werewolf"
M.show_text("
You have become a werewolf!
", "red")
M.make_werewolf(1)
if("grinch")
M.mind.special_role = "grinch"
M.make_grinch()
M.show_text("
You have become a grinch!
", "red")
if("gang leader")
// hi so this tried in the past to make someone a gang leader without, uh, giving them a gang
// seeing as gang leaders are only allowed during the gang gamemode, this should work
// error checks included anyways
if(istype(ticker)) // the day we assume the foundation of the world exists is the day it crumbles into sand
var/datum/game_mode/gang/G = ticker.mode
if(istype(G))
G.generate_gang(M.mind)
else
boutput(usr, "
The game mode isn't gang (or something is deeply fucked up).")
return
boutput(M, "
You are the leader of the [M.mind.gang.gang_name] gang!
")
boutput(M, "
You must recruit people to your cause and fight other gangs!")
boutput(M, "
You may kill anyone you want, but are advised to convince them to join you instead!")
boutput(M, "
You can use the Set Gang Base command once which will make your current area into your gang's base and spawn a locker.")
boutput(M, "
You can get gear from your gang's locker. You must store guns, drugs and cash there for points.")
boutput(M, "
People can join your gang by reading a flyer, obtained from your gang locker.")
boutput(M, "
Your objectives are to kill the opposing gang leaders, and stash guns, drugs and cash in your locker.")
M.verbs += /client/proc/set_gang_base
alert(M, "Use the Set Gang Base verb to claim a home turf, and start recruiting people with flyers from the locker!", "You are a gang leader!")
if("omnitraitor")
M.mind.special_role = "omnitraitor"
M.verbs += /client/proc/gearspawn_traitor
M.verbs += /client/proc/gearspawn_wizard
M.make_changeling()
M.make_vampire()
M.make_werewolf(1)
M.make_wrestler(1)
M.make_grinch()
M.show_text("
You have become an omnitraitor!
", "red")
SHOW_TRAITOR_OMNI_TIPS(M)
if("spy_thief")
if (M.stat || !isliving(M) || isintangible(M) || !ishuman(M) || !M.mind)
return
M.show_text("
You have defected to a Spy Thief!
", "red")
M.mind.special_role = "spy_thief"
var/mob/living/carbon/human/tmob = M
var/objective_set_path = /datum/objective_set/spy_theft
new objective_set_path(M.mind)
equip_spy_theft(tmob)
else
M.show_text("
You have become evil and are now an antagonist!
", "red")
if (!(M.mind in ticker.mode.Agimmicks))
ticker.mode.Agimmicks += M.mind
if (M.mind.current)
M.mind.current.antagonist_overlay_refresh(1, 0)
var/obj_count = 1
for(var/datum/objective/OBJ in M.mind.objectives)
boutput(M, "
Objective #[obj_count]: [OBJ.explanation_text]")
obj_count++
//to stop spamming during traitor all secret
if(!mass_traitor_obj)
logTheThing("admin", usr, M, "made %target% a[special ? " [special]" : ""] [traitor_type].")
logTheThing("diary", usr, M, "made %target% a[special ? " [special]" : ""] [traitor_type].", "admin")
message_admins("
[key_name(usr)] has made [key_name(M)] a[special ? " [special]" : ""] [traitor_type].")
return
/datum/admins/proc/get_item_desc(var/target)
switch (target)
if (1)
return "a fully loaded laser gun"
if (2)
return "a hand teleporter"
if (3)
return "a fully armed and heated plasma bomb"
if (4)
return "a jet pack"
if (5)
return "an ID card with universal access"
if (6)
return "a captain's dark green jumpsuit"
else
return "Error: Invalid theft target: [target]"
/proc/get_matches_string(var/text, var/list/possibles)
var/list/matches = new()
for (var/possible in possibles)
if (findtext(possible, text))
matches += possible
return matches
/proc/get_one_match_string(var/text, var/list/possibles)
var/list/matches = get_matches_string(text, possibles)
if (matches.len == 0)
return null
var/chosen
if (matches.len == 1)
chosen = matches[1]
else
chosen = input("Select a match", "matches for pattern", null) as null|anything in matches
if (!chosen)
return null
return chosen
/proc/get_matches(var/object, var/base = /atom)
var/list/types = typesof(base)
var/list/matches = new()
for(var/path in types)
if(findtext("[path]", object))
matches += path
return matches
/proc/get_one_match(var/object, var/base = /atom)
var/list/matches = get_matches(object, base)
if(matches.len==0)
return null
var/chosen
if(matches.len==1)
chosen = matches[1]
else
var/safe_matches = matches - list(/database, /client, /icon, /sound, /savefile)
chosen = input("Select an atom type", "Matches for pattern", null) as null|anything in safe_matches
if(!chosen)
return null
return chosen
/datum/admins/proc/spawn_atom(var/object as text)
set category = "Special Verbs"
set desc="(atom path) Spawn an atom"
set name="Spawn"
if (usr.client.holder.level >= LEVEL_CODER)
var/chosen = get_one_match(object)
if (chosen)
if (ispath(chosen, /turf))
var/turf/location = get_turf(usr)
if (location)
location.ReplaceWith(chosen, handle_air = 0)
else
var/atom/movable/A = new chosen()
A.set_loc(usr.loc)
if (usr.client.flourish)
spawn_animation1(A)
logTheThing("admin", usr, null, "spawned [chosen] at ([showCoords(usr.x, usr.y, usr.z)])")
logTheThing("diary", usr, null, "spawned [chosen] at ([showCoords(usr.x, usr.y, usr.z, 1)])", "admin")
else
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
return
/datum/admins/proc/show_chatbans(var/client/C)//do not use this as an example of how to write DM please.
if( !C.cloud_available() )
alert( "Failed to communicate to Goonhub." )
return
var/built = {"
Chat Bans (todo: prettify)"}
if(C.cloud_get( "adminhelp_banner" ))
built += "
Adminhelp Mute (Last by [C.cloud_get( "adminhelp_banner" )])
"
logTheThing("admin", src, C, "unmuted %target% from adminhelping.")
else
built += "
Adminhelp Mute"
logTheThing("admin", src, C, "muted %target% from adminhelping.")
if(C.cloud_get( "mentorhelp_banner" ))
built += "
Mentorhelp Mute (Last by [C.cloud_get( "mentorhelp_banner" )])
"
logTheThing("admin", src, C, "unmuted %target% from mentorhelping.")
else
built += "
Mentorhelp Mute"
logTheThing("admin", src, C, "muted %target% from mentorhelping.")
usr.Browse(built, "window=chatban;size=500x100")
/client/proc/respawn_target(mob/M as mob in world, var/forced = 0)
set name = "Respawn Target"
set category = null
set desc = "Respawn a mob"
set popup_menu = 0
if (!M) return
if (!forced && alert(src, "Respawn [M]?", "Confirmation", "Yes", "No") != "Yes")
return
logTheThing("admin", src, M, "respawned %target%")
logTheThing("diary", src, M, "respawned %target%.", "admin")
message_admins("[key_name(src)] respawned [key_name(M)].")
var/mob/new_player/newM = new()
newM.adminspawned = 1
newM.key = M.key
if (M.mind)
M.mind.damned = 0
M.mind.transfer_to(newM)
newM.Login()
newM.sight = SEE_TURFS //otherwise the HUD remains in the login screen
qdel(M)
boutput(newM, "
You have been respawned.")
return newM
/client/proc/respawn_self()
set name = "Respawn Self"
set category = "Special Verbs"
set desc = "Respawn yourself"
if(!isobserver(usr))
boutput(usr, "You can't respawn unless you're dead!")
return
logTheThing("admin", src, null, "respawned themselves.")
logTheThing("diary", src, null, "respawned themselves.", "admin")
message_admins("[key_name(src)] respawned themselves.")
var/mob/new_player/M = new()
M.key = usr.client.key
M.Login()
/client/proc/smnoclip()
set name = "Planar Shift"
set category = "Smiling Man Powers"
set desc = "Shift planes to toggle moving through walls and objects."
if(!isliving(usr))
return
usr.client.flying = !usr.client.flying
boutput(usr, "You are [usr.client.flying ? "now" : "no longer"] flying through matter.")
/client/Move(NewLoc, direct)
if(usr.client.flying)
if(!isturf(usr.loc))
usr.set_loc(get_turf(usr))
if(NewLoc)
usr.set_loc(NewLoc)
src.mob.dir = direct
return
if((direct & NORTH) && usr.y < world.maxy)
usr.y++
if((direct & SOUTH) && usr.y > 1)
usr.y--
if((direct & EAST) && usr.x < world.maxx)
usr.x++
if((direct & WEST) && usr.x > 1)
usr.x--
src.mob.dir = direct
else
..()
/*
/mob/living/carbon/proc/cloak()
//Buggy as heck because of the way updating clothing works (it clears all invisibility variables and sets them based on if you have a cloaking device on or not)
//It also clears overlays so the overlay will dissapear and bluh, I don't want to add another variable sooo this is what you get I guess.
//If the overlay dissapears you lose the cloaking too, so just retype cloak-self and it should work again
//If you don't lay down or force yourself to update clothing via fire or whatever it should be good enough to use for the purpose of spying on shitlords I guess.
set name = "Cloak self"
set category = "Special Verbs"
set desc = "Make yourself invisible!"
if (!iscarbon(usr))
boutput(usr, "Sorry, you have to be alive!")
return
if(!(usr.invisibility == 100))
boutput(usr, "You are now cloaked")
usr.set_clothing_icon_dirty()
usr.overlays += image("icon" = 'icons/mob/mob.dmi', "icon_state" = "shield")
usr.invisibility = 100
else
boutput(usr, "You are no longer cloaked")
usr.set_clothing_icon_dirty()
usr.invisibility = 0
*/
//
//
//ALL DONE
//*********************************************************************************************************
//
//