/client/proc/cmd_admin_drop_everything(mob/M as mob in mob_list) set category = null set name = "Drop Everything" if(!holder) return var/confirm = alert(src, "Make [M] drop everything?", "Message", "Yes", "No") if(confirm != "Yes") return for(var/obj/item/W in M) M.drop_from_inventory(W) log_admin("[key_name(usr)] made [key_name(M)] drop everything!") message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!", 1) feedback_add_details("admin_verb","DEVR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_prison(mob/M as mob in mob_list) set category = "Admin" set name = "Prison" if(!holder) 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) return //strip their stuff before they teleport into a cell :downs: for(var/obj/item/W in M) M.drop_from_inventory(W) //teleport person to cell M.Paralyse(5) sleep(5) //so they black out before warping M.loc = pick(prisonwarp) if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/prisoner = M 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) to_chat(M, "You have been sent to the prison station!") log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.") message_admins("[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1) feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //Allows staff to determine who the newer players are. /client/proc/cmd_check_new_players() set category = "Admin" set name = "Check new Players" if(!holder) return var/age = alert(src, "Age check", "Show accounts yonger then _____ days","7", "30" , "All") if(age == "All") age = 9999999 else age = text2num(age) var/missing_ages = 0 var/msg = "" var/highlight_special_characters = 1 for(var/client/C in GLOB.clients) if(C.player_age == "Requires database") missing_ages = 1 continue if(C.player_age < age) msg += "[key_name(C, 1, 1, highlight_special_characters)]: account is [C.player_age] days old
" if(missing_ages) to_chat(src, "Some accounts did not have proper ages set in their clients. This function requires database to be present.") if(msg != "") src << browse(msg, "window=Player_age_check") else to_chat(src, "No matches for that age range found.") /client/proc/cmd_admin_subtle_message(mob/M as mob in mob_list) set category = "Special Verbs" set name = "Subtle Message" if(!ismob(M)) return if (!holder) return var/msg = sanitize(input("Message:", text("Subtle PM to [M.key]")) as text) if (!msg) return if(usr) if (usr.client) if(usr.client.holder) to_chat(M, "You hear a voice in your head... [msg]") log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]") msg = " SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]" message_admins(msg) admin_ticket_log(M, msg) feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_world_narrate() // Allows administrators to fluff events a little easier -- TLE set category = "Special Verbs" set name = "Global Narrate" if (!holder) return 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 to_world("[msg]") log_admin("GlobalNarrate: [key_name(usr)] : [msg]") message_admins(" GlobalNarrate: [key_name_admin(usr)] : [msg]
", 1) feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE set category = "Special Verbs" set name = "Direct Narrate" if(!holder) return if(!M) M = input("Direct narrate to who?", "Active Players") as null|anything in get_mob_with_client_list() if(!M) return 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 to_chat(M, msg) log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]") msg = " DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]
" message_admins(msg) admin_ticket_log(M, msg) feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_godmode(mob/M as mob in mob_list) set category = "Special Verbs" set name = "Godmode" if(!holder) return M.status_flags ^= GODMODE to_chat(usr, " Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]") 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"]" message_admins(msg) admin_ticket_log(M, msg) feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) if(automute) if(!config.automute_on) return else if(!usr || !usr.client) return if(!usr.client.holder) to_chat(usr, "Error: cmd_admin_mute: You don't have permission to do this.") return if(!M.client) to_chat(usr, "Error: cmd_admin_mute: This mob doesn't have a client tied to it.") if(M.client.holder) to_chat(usr, "Error: cmd_admin_mute: You cannot mute an admin/mod.") if(!M.client) return if(M.client.holder) return var/muteunmute var/mute_string switch(mute_type) if(MUTE_IC) mute_string = "IC (say and emote)" if(MUTE_OOC) mute_string = "OOC" if(MUTE_PRAY) mute_string = "pray" if(MUTE_ADMINHELP) mute_string = "adminhelp, admin PM and ASAY" if(MUTE_DEADCHAT) mute_string = "deadchat and DSAY" if(MUTE_ALL) mute_string = "everything" else return if(automute) muteunmute = "auto-muted" 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) to_chat(M, "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin.") feedback_add_details("admin_verb","AUTOMUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return if(M.client.prefs.muted & mute_type) muteunmute = "unmuted" M.client.prefs.muted &= ~mute_type else muteunmute = "muted" M.client.prefs.muted |= mute_type 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) to_chat(M, "You have been [muteunmute] from [mute_string].") 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) 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.") message_admins("[key_name_admin(src)] has added a random AI law.", 1) var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No") if(show_log == "Yes") command_announcement.Announce("Ion storm detected near \the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') IonStorm(0) feedback_add_details("admin_verb","ION") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /* Allow admins to set players to be able to respawn/bypass 30 min wait, without the admin having to edit variables directly Ccomp's first proc. */ /client/proc/get_ghosts(var/notify = 0,var/what = 2) // what = 1, return ghosts ass list. // what = 2, return mob list var/list/mobs = list() var/list/ghosts = list() var/list/sortmob = sortAtom(mob_list) // get the mob list. var/any=0 for(var/mob/observer/dead/M in sortmob) mobs.Add(M) //filter it where it's only ghosts any = 1 //if no ghosts show up, any will just be 0 if(!any) if(notify) to_chat(src, "There doesn't appear to be any ghosts for you to select.") return for(var/mob/M in mobs) var/name = M.name ghosts[name] = M //get the name of the mob for the popup list if(what==1) return ghosts else return mobs /client/proc/allow_character_respawn() set category = "Special Verbs" set name = "Allow player to respawn" set desc = "Let a player bypass the wait to respawn or allow them to re-enter their corpse." if(!holder) return var/target = input("Select a ckey to allow to rejoin", "Allow Respawn Selector") as null|anything in GLOB.respawn_timers if(!target) return if(GLOB.respawn_timers[target] == -1) // Their respawn timer is set to -1, which is 'not allowed to respawn' var/response = alert(src, "Are you sure you wish to allow this individual to respawn? They would normally not be able to.","Allow impossible respawn?","No","Yes") if(response == "No") return GLOB.respawn_timers -= target var/found_client = FALSE for(var/c in GLOB.clients) var/client/C = c if(C.ckey == target) found_client = C to_chat(C, "You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.") if(isobserver(C.mob)) var/mob/observer/dead/G = C.mob G.can_reenter_corpse = 1 to_chat(C, "You can also re-enter your corpse, if you still have one!") break if(!found_client) to_chat(src, "The associated client didn't appear to be connected, so they couldn't be notified, but they can now respawn if they reconnect.") log_admin("[key_name(usr)] allowed [found_client ? key_name(found_client) : target] to bypass the respawn time limit") message_admins("Admin [key_name_admin(usr)] allowed [found_client ? key_name_admin(found_client) : target] to bypass the respawn time limit", 1) /client/proc/toggle_antagHUD_use() set category = "Server" set name = "Toggle antagHUD usage" set desc = "Toggles antagHUD usage for observers" if(!holder) return var/action="" if(config.antag_hud_allowed) for(var/mob/observer/dead/g in get_ghosts()) if(!g.client.holder) //Remove the verb from non-admin ghosts g.verbs -= /mob/observer/dead/verb/toggle_antagHUD 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 to_chat(g, "The Administrator has disabled AntagHUD ") config.antag_hud_allowed = 0 to_chat(src, "AntagHUD usage has been disabled") action = "disabled" else 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 to_chat(g, "The Administrator has enabled AntagHUD ") // Notify all observers they can now use AntagHUD config.antag_hud_allowed = 1 action = "enabled" to_chat(src, "AntagHUD usage has been enabled") log_admin("[key_name(usr)] has [action] antagHUD usage for observers") message_admins("Admin [key_name_admin(usr)] has [action] antagHUD usage for observers", 1) /client/proc/toggle_antagHUD_restrictions() 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) return var/action="" if(config.antag_hud_restricted) for(var/mob/observer/dead/g in get_ghosts()) to_chat(g, "The administrator has lifted restrictions on joining the round if you use AntagHUD") action = "lifted restrictions" config.antag_hud_restricted = 0 to_chat(src, "AntagHUD restrictions have been lifted") else for(var/mob/observer/dead/g in get_ghosts()) to_chat(g, "The administrator has placed restrictions on joining the round if you use AntagHUD") to_chat(g, "Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions ") g.antagHUD = 0 g.has_enabled_antagHUD = 0 action = "placed restrictions" config.antag_hud_restricted = 1 to_chat(src, "AntagHUD restrictions have been enabled") log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD") message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1) /* If a guy was gibbed and you want to revive him, this is a good way to do so. Works kind of like entering the game with a new character. Character receives a new mind if they didn't have one. Traitors and the like can also be revived with the previous role mostly intact. /N */ /client/proc/respawn_character() set category = "Special Verbs" set name = "Spawn Character" set desc = "(Re)Spawn a client's loaded character." if(!holder) return 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 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 var/announce = alert(src,"Announce as if they had just arrived?", "Announce", "Yes", "No", "Cancel") if(announce == "Cancel") return else if(announce == "Yes") //Too bad buttons can't just have 1/0 values and different display strings announce = 1 else announce = 0 var/inhabit = alert(src,"Put the person into the spawned mob?", "Inhabit", "Yes", "No", "Cancel") if(inhabit == "Cancel") return else if(inhabit == "Yes") inhabit = 1 else inhabit = 0 //Name matching is ugly but mind doesn't persist to look at. var/charjob var/records var/datum/data/record/record_found record_found = find_general_record("name",picked_client.prefs.real_name) //Found their record, they were spawned previously if(record_found) var/samejob = alert(src,"Found [picked_client.prefs.real_name] in data core. They were [record_found.fields["real_rank"]] this round. Assign same job? They will not be re-added to the manifest/records, either way.","Previously spawned","Yes","Assistant","No") if(samejob == "Yes") charjob = record_found.fields["real_rank"] else if(samejob == USELESS_JOB) //VOREStation Edit - Visitor not Assistant charjob = USELESS_JOB //VOREStation Edit - Visitor not Assistant else records = alert(src,"No data core entry detected. Would you like add them to the manifest, and sec/med/HR records?","Records","Yes","No","Cancel") if(records == "Cancel") return if(records == "Yes") records = 1 else records = 0 //Well you're not reloading their job or they never had one. if(!charjob) var/pickjob = input(src,"Pick a job to assign them (or none).","Job Select","-No Job-") as null|anything in joblist + "-No Job-" if(!pickjob) return if(pickjob != "-No Job-") charjob = pickjob //If you've picked a job by now, you can equip them. var/equipment if(charjob) equipment = alert(src,"Spawn them with equipment?", "Equipment", "Yes", "No", "Cancel") if(equipment == "Cancel") return else if(equipment == "Yes") equipment = 1 else equipment = 0 //For logging later var/admin = key_name_admin(src) var/player_key = picked_client.key //VOREStation Add - Needed for persistence var/picked_ckey = picked_client.ckey var/picked_slot = picked_client.prefs.default_slot //VOREStation Add End 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 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) else //I have no idea how you're here to_chat(src, "Invalid spawn location choice.") return //Did we actually get a loc to spawn them? if(!spawnloc) to_chat(src, "Couldn't get valid spawn location.") 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) to_chat(src, "Something went wrong and spawning failed.") return //Write the appearance and whatnot out to the character picked_client.prefs.copy_to(new_character) if(new_character.dna) new_character.dna.ResetUIFrom(new_character) new_character.sync_organ_dna() if(inhabit) new_character.key = player_key //Were they any particular special role? If so, copy. if(new_character.mind) var/datum/antagonist/antag_data = get_antag_data(new_character.mind.special_role) if(antag_data) antag_data.add_antagonist(new_character.mind) antag_data.place_mob(new_character) //VOREStation Add - Required for persistence if(new_character.mind) new_character.mind.loaded_from_ckey = picked_ckey new_character.mind.loaded_from_slot = picked_slot //VOREStation Add End //If desired, apply equipment. if(equipment) if(charjob) job_master.EquipRank(new_character, charjob, 1) //equip_custom_items(new_character) //VOREStation Removal //If desired, add records. if(records) data_core.manifest_inject(new_character) //A redraw for good measure new_character.update_icons_all() //If we're announcing their arrival if(announce) AnnounceArrival(new_character, new_character.mind.assigned_role, "Common", new_character.z) 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) 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! return new_character /client/proc/cmd_admin_add_freeform_ai_law() set category = "Fun" set name = "Add Custom AI law" if(!holder) 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) to_chat(usr, "Upload failed. No signal is being detected from the AI.") else if (M.see_in_dark == 0) 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) to_chat(O,input + "... LAWS UPDATED!") O.show_laws() log_admin("Admin [key_name(usr)] has added a new AI law - [input]") message_admins("Admin [key_name_admin(usr)] has added a new AI law - [input]", 1) var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No") if(show_log == "Yes") command_announcement.Announce("Ion storm detected near the [station_name()]. Please check all AI-controlled equipment for errors.", "Anomaly Alert", new_sound = 'sound/AI/ionstorm.ogg') feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list) set category = "Special Verbs" set name = "Rejuvenate" if(!holder) return if(!mob) return if(!istype(M)) alert("Cannot revive a ghost") return if(config.allow_admin_rev) M.revive() log_admin("[key_name(usr)] healed / revived [key_name(M)]") var/msg = "Admin [key_name_admin(usr)] healed / revived [ADMIN_LOOKUPFLW(M)]!" message_admins(msg) admin_ticket_log(M, msg) else alert("Admin revive disabled") feedback_add_details("admin_verb","REJU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_create_centcom_report() set category = "Special Verbs" set name = "Create Command Report" if(!holder) 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) return if(!customname) customname = "[using_map.company_name] Update" //New message handling post_comm_message(customname, replacetext(input, "\n", "
")) switch(alert("Should this be announced to the general population?",,"Yes","No")) if("Yes") command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1); if("No") to_world("New [using_map.company_name] Update available at all communication consoles.") world << sound('sound/AI/commandreport.ogg') log_admin("[key_name(src)] has created a command report: [input]") message_admins("[key_name_admin(src)] has created a command report", 1) feedback_add_details("admin_verb","CCR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_delete(atom/O as obj|mob|turf in admin_atom_validate(O)) // I don't understand precisely how this fixes the string matching against a substring, but it does - Ater set category = "Admin" set name = "Delete" if (!holder) return admin_delete(O) /client/proc/cmd_admin_list_open_jobs() set category = "Admin" set name = "List free slots" if (!holder) return if(job_master) for(var/datum/job/job in job_master.occupations) to_chat(src, "[job.title]: [job.total_positions]") feedback_add_details("admin_verb","LFS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world) set category = "Special Verbs" set name = "Explosion" if(!check_rights(R_DEBUG|R_FUN)) return //VOREStation Edit var/devastation = input("Range of total devastation. -1 to none", text("Input")) as num|null if(devastation == null) return var/heavy = input("Range of heavy impact. -1 to none", text("Input")) as num|null if(heavy == null) return var/light = input("Range of light impact. -1 to none", text("Input")) as num|null if(light == null) return var/flash = input("Range of flash. -1 to none", text("Input")) as num|null if(flash == null) return if ((devastation != -1) || (heavy != -1) || (light != -1) || (flash != -1)) if ((devastation > 20) || (heavy > 20) || (light > 20)) if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No") return explosion(O, devastation, heavy, light, flash) log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])", 1) feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return else return /client/proc/cmd_admin_emp(atom/O as obj|mob|turf in world) set category = "Special Verbs" set name = "EM Pulse" if(!check_rights(R_DEBUG|R_FUN)) return //VOREStation Edit var/heavy = input("Range of heavy pulse.", text("Input")) as num|null if(heavy == null) return var/med = input("Range of medium pulse.", text("Input")) as num|null if(med == null) return var/light = input("Range of light pulse.", text("Input")) as num|null if(light == null) return var/long = input("Range of long pulse.", text("Input")) as num|null if(long == null) return if (heavy || med || light || long) empulse(O, heavy, med, light, long) log_admin("[key_name(usr)] created an EM Pulse ([heavy],[med],[light],[long]) at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] created an EM PUlse ([heavy],[med],[light],[long]) at ([O.x],[O.y],[O.z])", 1) feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return else return /client/proc/cmd_admin_gib(mob/M as mob in mob_list) set category = "Special Verbs" set name = "Gib" if(!check_rights(R_ADMIN|R_FUN)) return //VOREStation Edit var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") if(confirm != "Yes") return //Due to the delay here its easy for something to have happened to the mob if(!M) return log_admin("[key_name(usr)] has gibbed [key_name(M)]") message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1) if(istype(M, /mob/observer/dead)) gibs(M.loc) return M.gib() feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_gib_self() 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 return else mob.gib() log_admin("[key_name(usr)] used gibself.") message_admins("[key_name_admin(usr)] used gibself.", 1) feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /* /client/proc/cmd_manual_ban() set name = "Manual Ban" set category = "Special Verbs" if(!authenticated || !holder) to_chat(src, "Only administrators may use this command.") return var/mob/M = null switch(alert("How would you like to ban someone today?", "Manual Ban", "Key List", "Enter Manually", "Cancel")) if("Key List") var/list/keys = list() for(var/mob/M in player_list) keys += M.client var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in keys if(!selection) return M = selection:mob if ((M.client && M.client.holder && (M.client.holder.level >= holder.level))) alert("You cannot perform this action. You must be of a higher administrative rank!") return switch(alert("Temporary Ban?",,"Yes","No")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num if(!mins) return if(mins >= 525600) mins = 525599 var/reason = input(usr,"Reason?","reason","Griefer") as text if(!reason) return if(M) AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins) to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason].") to_chat(M, "This is a temporary ban, it will be removed in [mins] minutes.") to_chat(M, "To try to resolve this matter head to http://ss13.donglabs.com/forum/") log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.") message_admins("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.") 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, "#", "")]") del(M.client) qdel(M) else if("No") var/reason = input(usr,"Reason?","reason","Griefer") as text if(!reason) return AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0) to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason].") to_chat(M, "This is a permanent ban.") to_chat(M, "To try to resolve this matter head to http://ss13.donglabs.com/forum/") log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.") message_admins("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.") 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, "#", "")]") del(M.client) qdel(M) */ /client/proc/update_world() // If I see anyone granting powers to specific keys like the code that was here, // I will both remove their SVN access and permanently ban them from my servers. return /client/proc/cmd_admin_check_contents(mob/living/M as mob in mob_list) set category = "Special Verbs" 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) 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. /client/proc/cmd_admin_remove_phoron() set category = "Debug" set name = "Stabilize Atmos." if(!holder) to_chat(src, "Only administrators may use this command.") return feedback_add_details("admin_verb","STATM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! // DEFERRED spawn(0) for(var/turf/T in view()) T.poison = 0 T.oldpoison = 0 T.tmppoison = 0 T.oxygen = 755985 T.oldoxy = 755985 T.tmpoxy = 755985 T.co2 = 14.8176 T.oldco2 = 14.8176 T.tmpco2 = 14.8176 T.n2 = 2.844e+006 T.on2 = 2.844e+006 T.tn2 = 2.844e+006 T.tsl_gas = 0 T.osl_gas = 0 T.sl_gas = 0 T.temp = 293.15 T.otemp = 293.15 T.ttemp = 293.15 */ /client/proc/toggle_view_range() set category = "Special Verbs" 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("[key_name_admin(usr)] changed their view range to [view].", 1) //why? removed by order of XSI 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" if ((!( ticker ) || !emergency_shuttle.location())) return if(!check_rights(R_ADMIN)) return //VOREStation Edit var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") if(confirm != "Yes") return var/choice if(ticker.mode.auto_recall_shuttle) choice = input("The shuttle will just return if you call it. Call anyway?") in list("Confirm", "Cancel") if(choice == "Confirm") emergency_shuttle.auto_recall = 1 //enable auto-recall else return choice = input("Is this an emergency evacuation or a crew transfer?") in list("Emergency", "Crew Transfer") if (choice == "Emergency") emergency_shuttle.call_evac() else emergency_shuttle.call_transfer() feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] admin-called the emergency shuttle.") message_admins("[key_name_admin(usr)] admin-called the emergency shuttle.", 1) return /client/proc/admin_cancel_shuttle() set category = "Admin" set name = "Cancel Shuttle" if(!check_rights(R_ADMIN)) return //VOREStation Edit if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") return if(!ticker || !emergency_shuttle.can_recall()) return emergency_shuttle.recall() feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] admin-recalled the emergency shuttle.") message_admins("[key_name_admin(usr)] admin-recalled the emergency shuttle.", 1) return /client/proc/admin_deny_shuttle() set category = "Admin" set name = "Toggle Deny Shuttle" if (!ticker) return if(!check_rights(R_ADMIN)) return //VOREStation Edit emergency_shuttle.deny_shuttle = !emergency_shuttle.deny_shuttle log_admin("[key_name(src)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.") message_admins("[key_name_admin(usr)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.") /client/proc/cmd_admin_attack_log(mob/M as mob in mob_list) set category = "Special Verbs" set name = "Attack Log" to_chat(usr, "Attack Log for [mob]") for(var/t in M.attack_log) 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! /client/proc/everyone_random() set category = "Fun" set name = "Make Everyone Random" set desc = "Make everyone have a random appearance. You can only use this before rounds!" if(!check_rights(R_FUN)) return if (ticker && ticker.mode) 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) to_chat(usr, "Disabled.") return var/notifyplayers = alert(src, "Do you want to notify the players?", "Options", "Yes", "No", "Cancel") if(notifyplayers == "Cancel") return log_admin("Admin [key_name(src)] has forced the players to have random appearances.") message_admins("Admin [key_name_admin(usr)] has forced the players to have random appearances.", 1) if(notifyplayers == "Yes") to_world("Admin [usr.key] has forced the players to have completely random identities!") to_chat(usr, "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet.") 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! /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 to_chat(usr, "Random events enabled") message_admins("Admin [key_name_admin(usr)] has enabled random events.", 1) else config.allow_random_events = 0 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! /client/proc/despawn_player(var/mob/M in living_mob_list) set name = "Cryo Player" set category = "Admin" set desc = "Removes a player from the round as if they'd cryo'd." set popup_menu = FALSE if(!check_rights(R_ADMIN|R_EVENT)) return if(!M) return var/confirm = alert("Are you sure you want to cryo [M]?","Confirmation","No","Yes") if(confirm == "No") return var/list/human_cryopods = list() var/list/robot_cryopods = list() for(var/obj/machinery/cryopod/CP in machines) if(!CP.control_computer) continue //Broken pod w/o computer, move on. var/listname = "[CP.name] ([CP.x],[CP.y],[CP.z])" if(istype(CP,/obj/machinery/cryopod/robot)) robot_cryopods[listname] = CP else human_cryopods[listname] = CP //Gotta log this up here before they get ghostized and lose their key or anything. log_and_message_admins("[key_name(src)] admin cryo'd [key_name(M)].") feedback_add_details("admin_verb","ACRYO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(ishuman(M)) var/obj/machinery/cryopod/CP = human_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in human_cryopods] if(!CP) return M.ghostize() CP.despawn_occupant(M) return else if(issilicon(M)) if(isAI(M)) var/mob/living/silicon/ai/ai = M empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(ai.loc) global_announcer.autosay("[ai] has been moved to intelligence storage.", "Artificial Intelligence Oversight") ai.clear_client() return else var/obj/machinery/cryopod/robot/CP = robot_cryopods[input(usr,"Select a cryopod to use","Cryopod Choice") as null|anything in robot_cryopods] if(!CP) return M.ghostize() CP.despawn_occupant(M) return else if(isliving(M)) M.ghostize() qdel(M) //Bye