mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-13 18:33:22 +00:00
* there was an attempt * adds ice moon map adds config options for choosing mining maps areas now have options that affect random generation on them weather now has an option to not target indoor areas adds base for icemoon ruins turns many 1's into booleans adds ice chasms adds ztraits for weather stuff * fixes up ice ruins to be ice moon compatible adds lower z level to the ice moon mine ice chasms now have a smoothed icon megafauna only spawn in the underground portion of ice moon now * openspace fixes * adds new areas and underground specific ruins * Adds the abandoned village ruin for Ice Moon * adds abandoned village ruin and fixes some area and tile stuff to work with ice moon * random mining maps are no longer picked in the config you can no longer change the mining map before setup is complete * adds above and below ground ruin as a test * adds debug functionality for ice moon ruins fixes a bug where multiz was impossible unless there were shared areas because of whitelisted areas adds multiple whitelist areas for ruin placement in a list all underground areas are now outdoors underground plasma lava rivers are now only spawned in unexplored areas so ruins don't get destroyed by them * adds unique spawners to icemoon to replace tendrils adds 2 new mobs to icemoon the polar bear and wolf adds a clothing flag for shoes that dont slip on ice modifies mining site to be ready except for the boss adds the ability for tunnel width to be a specification, ice moon can have 1 tile wide tunnels and rarely 2 wide tunnels adds a no caves mineral for ice moon ruins * wolves no longer run into lava or chasms bears now enrage sooner bear spawners can now actually be created adds base for ice moon atmospherics adds base for a new boss and achievements / score really bad coder icon for ice boots added * ice moon now has it's own planetary atmos! (thank god) * new frost miner stuff megafauna recovery time can now be tailored to have different cooldowns to ranged or melee attacks by default sets both of them, with two arguments the first is ranged cooldown and the second is melee cooldown * converts a bunch of lavaland maps to be compatible with ice moon adds tendrils from lavaland to the bottom of ice moon with the other megafauna * updates mob drops for ice moon mobs updates config entry default value for ice moon updates ice moon map to have new gulag * updates station parallax for icemoon removes extra lavaland ported ruins updates to demonic frost miner adds ladder to icemoon map near station * updates ice moon map to have the ladder inside the mining base plant flora dont spawn on the lower z level of ice moon now you get sand from mining rocks now buncha demonic frost miner changes holy cow * adds the buried library * improves map, fixes comment * make this crap work with the station cause i have to lol it is pretty cool though and now i understand the mapping crap better * updates ice ruin blacklist * ice moon stop being too cold thanks icebox changes, now actually has its own z level that can spawn ruins and such instead of just being openspace tunnel width is now not stupid * fixes a demonic frost miner bug where orbs werent exploding after death atmosphere temp is now correct fixes library ruin for icemoon polar bear range is now fixed, only aggros in a short range and follows further than 3 tiles reverts necropolis chest change * Adds a new ruin: bathouse, barebones edition * adds many new ruins fixes a bug with tunnel creation that caused it to enter no tunnel allowed areas finishes the frost miner and adds loot to him you can now force a wabbajack option * main z level now always has gravity for ice box * hopefully the hot springs arent the buggiest thing in the world anymore protects areas near the station from having openspace * icebox takes less players fixes the ladder positioning on every icemoon map * snowstorms now only occur on the station level fixes some issues with the icebox z level having openspace over the lower level mining base * Update code/datums/map_config.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/datums/ruins/lavaland.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/game/objects/structures/lavaland/necropolis_tendril.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/game/turfs/closed/minerals.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/game/turfs/open/chasm.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/game/turfs/open/floor/plating/asteroid.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * Update code/modules/ruins/icemoonruin_code/hotsprings.dm Co-Authored-By: spookydonut <github@spooksoftware.com> * fixes areas on the lust ruin polar bears now drop a goliath plate equivalent wolfs now drop a watcher sinew equivalent adds snow legions adds a crusher trophy for the demonic frost miner that prevents movement fixes a bug with asteroid mobs where the aggro icon would never show adds ice to the snow cave tunnel generation * starts work on the wendigo megafauna * replaces snowball machine gun with more miner useful content adds gentle var for knockback to prevent stunning on hit polar bears move slower now new icon for phase 2 demonic miner now * fixes lust ruin areas fixes whitespace fixes nesting issues adds underground specific mobs * name / location fixes demonic frost miner doesnt stun on knockback now ice demons move faster * fixes icebox having the wrong baseturf * adds achievement defines to the wendigo snowstorm for the lower z level again adds a new helper for ranged target turfs theres now a specific subtype for rivers fixes a bug where ice and spawners spawned with rocks and other flora on top of them adds indestructible ice rock turf fixes a bug with ice demons teleport distance being incorrect adds the start of wendigos attacks * Apply suggestions from code review Co-Authored-By: Rohesie <rohesie@gmail.com> * Update code/modules/mapping/ruins.dm Co-Authored-By: Rohesie <rohesie@gmail.com> * Fixes a dumb bug with ruins from a webedit review The syndicate shuttle can now land on mineral turfs * the final commit, all that im going to change after this is documentation for procs lol makes both ice moon z levels below the station underground, and makes it so they generate rivers of their baseturf * adds nice animation to wendigo scream * small fixes * finishes autodoccing everything i could find * ok im done for real now * adds anywhere ruins does review stuff * review stuff * ok it removes the stuff now * fix removal * fixes from the git * adds surroundings to the asteroid and lavaland sites adds butchering gloves to wrath ruins the lower icebox levels are no longer station levels fixes capitals on blood drunk and frost miner boss medals adds engineering outpost ruin by trollbreeder adds boxstation job changes to icebox polar bear transformation no longer has immunity to lavaland mobs fixes ice whelp spelling mistake * fixes engi outpost atmospherics fixes missing plating on solar panels changes slowdown for icemoon turfs * fixes ruins areas so tunnels can spawn into some of them adds lights to icebox below area openspace turfs mine the thing below them now * fixes wall boundings on asteroid and lavaland domes * ur lame armhulen * adds public mining area to icebox adds computer vendors to icebox * minor fixes * fixes map type error * removes slowdown entirely increases ore chances fixes openspace on main map fixes a ton of active turfs at roundstart modifies demonic frost miner loot to be cooler and more useful since the boss was hardly killed during tests tunnels are wider underground now openspace now deletes itself if it spawns above a ruin * improve da ruins * tries to fix multiple atmos issues with ruins removes bz from the planetary atmos since it could cause unstoppable chain reactions which would cause massive lag demonic frost miner drill now automatically scans everywhere around you fixes tunnel generation issue makes it so randomly generated turfs inherit their no_ruins flags Co-authored-by: Jonathan Church <jchurch093@gmail.com> Co-authored-by: s <wesoda24@gmail.com> Co-authored-by: spookydonut <github@spooksoftware.com> Co-authored-by: Rohesie <rohesie@gmail.com>
892 lines
31 KiB
Plaintext
892 lines
31 KiB
Plaintext
/client/proc/Debug2()
|
|
set category = "Debug"
|
|
set name = "Debug-Game"
|
|
if(!check_rights(R_DEBUG))
|
|
return
|
|
|
|
if(GLOB.Debug2)
|
|
GLOB.Debug2 = 0
|
|
message_admins("[key_name(src)] toggled debugging off.")
|
|
log_admin("[key_name(src)] toggled debugging off.")
|
|
else
|
|
GLOB.Debug2 = 1
|
|
message_admins("[key_name(src)] toggled debugging on.")
|
|
log_admin("[key_name(src)] toggled debugging on.")
|
|
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Toggle Debug Two") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
|
|
|
|
|
|
/* 21st Sept 2010
|
|
Updated by Skie -- Still not perfect but better!
|
|
Stuff you can't do:
|
|
Call proc /mob/proc/Dizzy() for some player
|
|
Because if you select a player mob as owner it tries to do the proc for
|
|
/mob/living/carbon/human/ instead. And that gives a run-time error.
|
|
But you can call procs that are of type /mob/living/carbon/human/proc/ for that player.
|
|
*/
|
|
|
|
/client/proc/Cell()
|
|
set category = "Debug"
|
|
set name = "Air Status in Location"
|
|
if(!mob)
|
|
return
|
|
var/turf/T = get_turf(mob)
|
|
if(!isturf(T))
|
|
return
|
|
atmosanalyzer_scan(usr, T, TRUE)
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Air Status In Location") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
|
|
/client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list)
|
|
set category = "Fun"
|
|
set name = "Make Robot"
|
|
|
|
if(!SSticker.HasRoundStarted())
|
|
alert("Wait until the game starts")
|
|
return
|
|
if(ishuman(M))
|
|
log_admin("[key_name(src)] has robotized [M.key].")
|
|
var/mob/living/carbon/human/H = M
|
|
INVOKE_ASYNC(H, /mob/living/carbon/human.proc/Robotize)
|
|
|
|
else
|
|
alert("Invalid mob")
|
|
|
|
/client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list)
|
|
set category = "Fun"
|
|
set name = "Make Blob"
|
|
|
|
if(!SSticker.HasRoundStarted())
|
|
alert("Wait until the game starts")
|
|
return
|
|
if(ishuman(M))
|
|
log_admin("[key_name(src)] has blobized [M.key].")
|
|
var/mob/living/carbon/human/H = M
|
|
H.become_overmind()
|
|
else
|
|
alert("Invalid mob")
|
|
|
|
|
|
/client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list)
|
|
set category = "Fun"
|
|
set name = "Make Simple Animal"
|
|
|
|
if(!SSticker.HasRoundStarted())
|
|
alert("Wait until the game starts")
|
|
return
|
|
|
|
if(!M)
|
|
alert("That mob doesn't seem to exist, close the panel and try again.")
|
|
return
|
|
|
|
if(isnewplayer(M))
|
|
alert("The mob must not be a new_player.")
|
|
return
|
|
|
|
log_admin("[key_name(src)] has animalized [M.key].")
|
|
INVOKE_ASYNC(M, /mob.proc/Animalize)
|
|
|
|
|
|
/client/proc/makepAI(turf/T in GLOB.mob_list)
|
|
set category = "Fun"
|
|
set name = "Make pAI"
|
|
set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
|
|
|
|
var/list/available = list()
|
|
for(var/mob/C in GLOB.mob_list)
|
|
if(C.key)
|
|
available.Add(C)
|
|
var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in sortNames(available)
|
|
if(!choice)
|
|
return 0
|
|
if(!isobserver(choice))
|
|
var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No")
|
|
if(confirm != "Yes")
|
|
return 0
|
|
var/obj/item/paicard/card = new(T)
|
|
var/mob/living/silicon/pai/pai = new(card)
|
|
|
|
var/chosen_name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text|null
|
|
|
|
if (isnull(chosen_name))
|
|
return
|
|
|
|
pai.name = chosen_name
|
|
pai.real_name = pai.name
|
|
pai.key = choice.key
|
|
card.setPersonality(pai)
|
|
for(var/datum/paiCandidate/candidate in SSpai.candidates)
|
|
if(candidate.key == choice.key)
|
|
SSpai.candidates.Remove(candidate)
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
|
|
/client/proc/cmd_admin_alienize(mob/M in GLOB.mob_list)
|
|
set category = "Fun"
|
|
set name = "Make Alien"
|
|
|
|
if(!SSticker.HasRoundStarted())
|
|
alert("Wait until the game starts")
|
|
return
|
|
if(ishuman(M))
|
|
INVOKE_ASYNC(M, /mob/living/carbon/human/proc/Alienize)
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Alien") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
log_admin("[key_name(usr)] made [key_name(M)] into an alien at [AREACOORD(M)].")
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] made [ADMIN_LOOKUPFLW(M)] into an alien.</span>")
|
|
else
|
|
alert("Invalid mob")
|
|
|
|
/client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list)
|
|
set category = "Fun"
|
|
set name = "Make slime"
|
|
|
|
if(!SSticker.HasRoundStarted())
|
|
alert("Wait until the game starts")
|
|
return
|
|
if(ishuman(M))
|
|
INVOKE_ASYNC(M, /mob/living/carbon/human/proc/slimeize)
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Slime") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
log_admin("[key_name(usr)] made [key_name(M)] into a slime at [AREACOORD(M)].")
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] made [ADMIN_LOOKUPFLW(M)] into a slime.</span>")
|
|
else
|
|
alert("Invalid mob")
|
|
|
|
|
|
//TODO: merge the vievars version into this or something maybe mayhaps
|
|
/client/proc/cmd_debug_del_all(object as text)
|
|
set category = "Debug"
|
|
set name = "Del-All"
|
|
|
|
var/list/matches = get_fancy_list_of_atom_types()
|
|
if (!isnull(object) && object!="")
|
|
matches = filter_fancy_list(matches, object)
|
|
|
|
if(matches.len==0)
|
|
return
|
|
var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in sortList(matches)
|
|
if(hsbitem)
|
|
hsbitem = matches[hsbitem]
|
|
var/counter = 0
|
|
for(var/atom/O in world)
|
|
if(istype(O, hsbitem))
|
|
counter++
|
|
qdel(O)
|
|
CHECK_TICK
|
|
log_admin("[key_name(src)] has deleted all ([counter]) instances of [hsbitem].")
|
|
message_admins("[key_name_admin(src)] has deleted all ([counter]) instances of [hsbitem].")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
|
|
|
|
/client/proc/cmd_debug_make_powernets()
|
|
set category = "Debug"
|
|
set name = "Make Powernets"
|
|
SSmachines.makepowernets()
|
|
log_admin("[key_name(src)] has remade the powernet. makepowernets() called.")
|
|
message_admins("[key_name_admin(src)] has remade the powernets. makepowernets() called.")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Powernets") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
|
|
/client/proc/cmd_admin_grantfullaccess(mob/M in GLOB.mob_list)
|
|
set category = "Debug"
|
|
set name = "Grant Full Access"
|
|
|
|
if(!SSticker.HasRoundStarted())
|
|
alert("Wait until the game starts")
|
|
return
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/obj/item/worn = H.wear_id
|
|
var/obj/item/card/id/id = null
|
|
if(worn)
|
|
id = worn.GetID()
|
|
if(id)
|
|
id.icon_state = "gold"
|
|
id.access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
|
|
else
|
|
id = new /obj/item/card/id/gold(H.loc)
|
|
id.access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
|
|
id.registered_name = H.real_name
|
|
id.assignment = "Captain"
|
|
id.update_label()
|
|
|
|
if(worn)
|
|
if(istype(worn, /obj/item/pda))
|
|
var/obj/item/pda/PDA = worn
|
|
PDA.id = id
|
|
id.forceMove(PDA)
|
|
else if(istype(worn, /obj/item/storage/wallet))
|
|
var/obj/item/storage/wallet/W = worn
|
|
W.front_id = id
|
|
id.forceMove(W)
|
|
W.update_icon()
|
|
else
|
|
H.equip_to_slot(id,ITEM_SLOT_ID)
|
|
|
|
else
|
|
alert("Invalid mob")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Grant Full Access") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
log_admin("[key_name(src)] has granted [M.key] full access.")
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has granted [M.key] full access.</span>")
|
|
|
|
/client/proc/cmd_assume_direct_control(mob/M in GLOB.mob_list)
|
|
set category = "Admin - Game"
|
|
set name = "Assume direct control"
|
|
set desc = "Direct intervention"
|
|
|
|
if(M.ckey)
|
|
if(alert("This mob is being controlled by [M.key]. Are you sure you wish to assume control of it? [M.key] will be made a ghost.",,"Yes","No") != "Yes")
|
|
return
|
|
if(!M || QDELETED(M))
|
|
to_chat(usr, "<span class='warning'>The target mob no longer exists.</span>")
|
|
return
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] assumed direct control of [M].</span>")
|
|
log_admin("[key_name(usr)] assumed direct control of [M].")
|
|
var/mob/adminmob = mob
|
|
if(M.ckey)
|
|
M.ghostize(FALSE)
|
|
M.ckey = ckey
|
|
if(isobserver(adminmob))
|
|
qdel(adminmob)
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
|
|
/client/proc/cmd_give_direct_control(mob/M in GLOB.mob_list)
|
|
set category = "Admin - Game"
|
|
set name = "Give direct control"
|
|
|
|
if(!M)
|
|
return
|
|
if(M.ckey)
|
|
if(alert("This mob is being controlled by [M.key]. Are you sure you wish to give someone else control of it? [M.key] will be made a ghost.",,"Yes","No") != "Yes")
|
|
return
|
|
var/client/newkey = input(src, "Pick the player to put in control.", "New player") as null|anything in sortList(GLOB.clients)
|
|
var/mob/oldmob = newkey.mob
|
|
var/delmob = FALSE
|
|
if((isobserver(oldmob) || alert("Do you want to delete [newkey]'s old mob?","Delete?","Yes","No") != "No"))
|
|
delmob = TRUE
|
|
if(!M || QDELETED(M))
|
|
to_chat(usr, "<span class='warning'>The target mob no longer exists, aborting.</span>")
|
|
return
|
|
if(M.ckey)
|
|
M.ghostize(FALSE)
|
|
M.ckey = newkey.key
|
|
if(delmob)
|
|
qdel(oldmob)
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] gave away direct control of [M] to [newkey].</span>")
|
|
log_admin("[key_name(usr)] gave away direct control of [M] to [newkey].")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
|
|
/client/proc/cmd_admin_test_atmos_controllers()
|
|
set category = "Mapping"
|
|
set name = "Test Atmos Monitoring Consoles"
|
|
|
|
var/list/dat = list()
|
|
|
|
if(SSticker.current_state == GAME_STATE_STARTUP)
|
|
to_chat(usr, "Game still loading, please hold!", confidential = TRUE)
|
|
return
|
|
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] used the Test Atmos Monitor debug command.</span>")
|
|
log_admin("[key_name(usr)] used the Test Atmos Monitor debug command.")
|
|
|
|
var/bad_shit = 0
|
|
for(var/obj/machinery/computer/atmos_control/tank/console in GLOB.atmos_air_controllers)
|
|
dat += "<h1>[console] at [AREACOORD(console)]:</h1><br>"
|
|
if(console.input_tag == console.output_tag)
|
|
dat += "Error: input_tag is the same as the output_tag, \"[console.input_tag]\"!<br>"
|
|
bad_shit++
|
|
if(!LAZYLEN(console.input_info))
|
|
dat += "Failed to find a valid outlet injector as an input with the tag [console.input_tag].<br>"
|
|
bad_shit++
|
|
if(!LAZYLEN(console.output_info))
|
|
dat += "Failed to find a valid siphon pump as an outlet with the tag [console.output_tag].<br>"
|
|
bad_shit++
|
|
if(!bad_shit)
|
|
dat += "<B>STATUS:</B> NORMAL"
|
|
else
|
|
bad_shit = 0
|
|
dat += "<br>"
|
|
CHECK_TICK
|
|
|
|
var/datum/browser/popup = new(usr, "testatmoscontroller", "Test Atmos Monitoring Consoles", 500, 750)
|
|
popup.set_content(dat.Join())
|
|
popup.open()
|
|
|
|
/client/proc/cmd_admin_areatest(on_station)
|
|
set category = "Mapping"
|
|
set name = "Test Areas"
|
|
|
|
var/list/dat = list()
|
|
var/list/areas_all = list()
|
|
var/list/areas_with_APC = list()
|
|
var/list/areas_with_multiple_APCs = list()
|
|
var/list/areas_with_air_alarm = list()
|
|
var/list/areas_with_RC = list()
|
|
var/list/areas_with_light = list()
|
|
var/list/areas_with_LS = list()
|
|
var/list/areas_with_intercom = list()
|
|
var/list/areas_with_camera = list()
|
|
var/list/station_areas_blacklist = typecacheof(list(/area/holodeck/rec_center, /area/shuttle, /area/engine/supermatter, /area/science/test_area, /area/space, /area/solar, /area/mine, /area/ruin, /area/asteroid))
|
|
|
|
if(SSticker.current_state == GAME_STATE_STARTUP)
|
|
to_chat(usr, "Game still loading, please hold!", confidential = TRUE)
|
|
return
|
|
|
|
var/log_message
|
|
if(on_station)
|
|
dat += "<b>Only checking areas on station z-levels.</b><br><br>"
|
|
log_message = "station z-levels"
|
|
else
|
|
log_message = "all z-levels"
|
|
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] used the Test Areas debug command checking [log_message].</span>")
|
|
log_admin("[key_name(usr)] used the Test Areas debug command checking [log_message].")
|
|
|
|
for(var/area/A in world)
|
|
if(on_station)
|
|
var/list/area_turfs = get_area_turfs(A.type)
|
|
if (!length(area_turfs))
|
|
continue
|
|
var/turf/picked = pick(area_turfs)
|
|
if(is_station_level(picked.z))
|
|
if(!(A.type in areas_all) && !is_type_in_typecache(A, station_areas_blacklist))
|
|
areas_all.Add(A.type)
|
|
else if(!(A.type in areas_all))
|
|
areas_all.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
for(var/obj/machinery/power/apc/APC in GLOB.apcs_list)
|
|
var/area/A = APC.area
|
|
if(!A)
|
|
dat += "Skipped over [APC] in invalid location, [APC.loc]."
|
|
continue
|
|
if(!(A.type in areas_with_APC))
|
|
areas_with_APC.Add(A.type)
|
|
else if(A.type in areas_all)
|
|
areas_with_multiple_APCs.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
for(var/obj/machinery/airalarm/AA in GLOB.machines)
|
|
var/area/A = get_area(AA)
|
|
if(!A) //Make sure the target isn't inside an object, which results in runtimes.
|
|
dat += "Skipped over [AA] in invalid location, [AA.loc].<br>"
|
|
continue
|
|
if(!(A.type in areas_with_air_alarm))
|
|
areas_with_air_alarm.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
for(var/obj/machinery/requests_console/RC in GLOB.machines)
|
|
var/area/A = get_area(RC)
|
|
if(!A)
|
|
dat += "Skipped over [RC] in invalid location, [RC.loc].<br>"
|
|
continue
|
|
if(!(A.type in areas_with_RC))
|
|
areas_with_RC.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
for(var/obj/machinery/light/L in GLOB.machines)
|
|
var/area/A = get_area(L)
|
|
if(!A)
|
|
dat += "Skipped over [L] in invalid location, [L.loc].<br>"
|
|
continue
|
|
if(!(A.type in areas_with_light))
|
|
areas_with_light.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
for(var/obj/machinery/light_switch/LS in GLOB.machines)
|
|
var/area/A = get_area(LS)
|
|
if(!A)
|
|
dat += "Skipped over [LS] in invalid location, [LS.loc].<br>"
|
|
continue
|
|
if(!(A.type in areas_with_LS))
|
|
areas_with_LS.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
for(var/obj/item/radio/intercom/I in GLOB.machines)
|
|
var/area/A = get_area(I)
|
|
if(!A)
|
|
dat += "Skipped over [I] in invalid location, [I.loc].<br>"
|
|
continue
|
|
if(!(A.type in areas_with_intercom))
|
|
areas_with_intercom.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
for(var/obj/machinery/camera/C in GLOB.machines)
|
|
var/area/A = get_area(C)
|
|
if(!A)
|
|
dat += "Skipped over [C] in invalid location, [C.loc].<br>"
|
|
continue
|
|
if(!(A.type in areas_with_camera))
|
|
areas_with_camera.Add(A.type)
|
|
CHECK_TICK
|
|
|
|
var/list/areas_without_APC = areas_all - areas_with_APC
|
|
var/list/areas_without_air_alarm = areas_all - areas_with_air_alarm
|
|
var/list/areas_without_RC = areas_all - areas_with_RC
|
|
var/list/areas_without_light = areas_all - areas_with_light
|
|
var/list/areas_without_LS = areas_all - areas_with_LS
|
|
var/list/areas_without_intercom = areas_all - areas_with_intercom
|
|
var/list/areas_without_camera = areas_all - areas_with_camera
|
|
|
|
if(areas_without_APC.len)
|
|
dat += "<h1>AREAS WITHOUT AN APC:</h1>"
|
|
for(var/areatype in areas_without_APC)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(areas_with_multiple_APCs.len)
|
|
dat += "<h1>AREAS WITH MULTIPLE APCS:</h1>"
|
|
for(var/areatype in areas_with_multiple_APCs)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(areas_without_air_alarm.len)
|
|
dat += "<h1>AREAS WITHOUT AN AIR ALARM:</h1>"
|
|
for(var/areatype in areas_without_air_alarm)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(areas_without_RC.len)
|
|
dat += "<h1>AREAS WITHOUT A REQUEST CONSOLE:</h1>"
|
|
for(var/areatype in areas_without_RC)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(areas_without_light.len)
|
|
dat += "<h1>AREAS WITHOUT ANY LIGHTS:</h1>"
|
|
for(var/areatype in areas_without_light)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(areas_without_LS.len)
|
|
dat += "<h1>AREAS WITHOUT A LIGHT SWITCH:</h1>"
|
|
for(var/areatype in areas_without_LS)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(areas_without_intercom.len)
|
|
dat += "<h1>AREAS WITHOUT ANY INTERCOMS:</h1>"
|
|
for(var/areatype in areas_without_intercom)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(areas_without_camera.len)
|
|
dat += "<h1>AREAS WITHOUT ANY CAMERAS:</h1>"
|
|
for(var/areatype in areas_without_camera)
|
|
dat += "[areatype]<br>"
|
|
CHECK_TICK
|
|
|
|
if(!(areas_with_APC.len || areas_with_multiple_APCs.len || areas_with_air_alarm.len || areas_with_RC.len || areas_with_light.len || areas_with_LS.len || areas_with_intercom.len || areas_with_camera.len))
|
|
dat += "<b>No problem areas!</b>"
|
|
|
|
var/datum/browser/popup = new(usr, "testareas", "Test Areas", 500, 750)
|
|
popup.set_content(dat.Join())
|
|
popup.open()
|
|
|
|
|
|
/client/proc/cmd_admin_areatest_station()
|
|
set category = "Mapping"
|
|
set name = "Test Areas (STATION Z)"
|
|
cmd_admin_areatest(TRUE)
|
|
|
|
/client/proc/cmd_admin_areatest_all()
|
|
set category = "Mapping"
|
|
set name = "Test Areas (ALL)"
|
|
cmd_admin_areatest(FALSE)
|
|
|
|
/client/proc/cmd_admin_dress(mob/M in GLOB.mob_list)
|
|
set category = "Admin - Events"
|
|
set name = "Select equipment"
|
|
if(!(ishuman(M) || isobserver(M)))
|
|
alert("Invalid mob")
|
|
return
|
|
|
|
var/dresscode = robust_dress_shop()
|
|
|
|
if(!dresscode)
|
|
return
|
|
|
|
var/delete_pocket
|
|
var/mob/living/carbon/human/H
|
|
if(isobserver(M))
|
|
H = M.change_mob_type(/mob/living/carbon/human, null, null, TRUE)
|
|
else
|
|
H = M
|
|
if(H.l_store || H.r_store || H.s_store) //saves a lot of time for admins and coders alike
|
|
if(alert("Drop Items in Pockets? No will delete them.", "Robust quick dress shop", "Yes", "No") == "No")
|
|
delete_pocket = TRUE
|
|
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Select Equipment") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
for (var/obj/item/I in H.get_equipped_items(delete_pocket))
|
|
qdel(I)
|
|
if(dresscode != "Naked")
|
|
H.equipOutfit(dresscode)
|
|
|
|
H.regenerate_icons()
|
|
|
|
log_admin("[key_name(usr)] changed the equipment of [key_name(H)] to [dresscode].")
|
|
message_admins("<span class='adminnotice'>[key_name_admin(usr)] changed the equipment of [ADMIN_LOOKUPFLW(H)] to [dresscode].</span>")
|
|
|
|
/client/proc/robust_dress_shop()
|
|
|
|
var/list/baseoutfits = list("Naked","Custom","As Job...", "As Plasmaman...")
|
|
var/list/outfits = list()
|
|
var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job) - typesof(/datum/outfit/plasmaman)
|
|
|
|
for(var/path in paths)
|
|
var/datum/outfit/O = path //not much to initalize here but whatever
|
|
if(initial(O.can_be_admin_equipped))
|
|
outfits[initial(O.name)] = path
|
|
|
|
var/dresscode = input("Select outfit", "Robust quick dress shop") as null|anything in baseoutfits + sortList(outfits)
|
|
if (isnull(dresscode))
|
|
return
|
|
|
|
if (outfits[dresscode])
|
|
dresscode = outfits[dresscode]
|
|
|
|
if (dresscode == "As Job...")
|
|
var/list/job_paths = subtypesof(/datum/outfit/job)
|
|
var/list/job_outfits = list()
|
|
for(var/path in job_paths)
|
|
var/datum/outfit/O = path
|
|
if(initial(O.can_be_admin_equipped))
|
|
job_outfits[initial(O.name)] = path
|
|
|
|
dresscode = input("Select job equipment", "Robust quick dress shop") as null|anything in sortList(job_outfits)
|
|
dresscode = job_outfits[dresscode]
|
|
if(isnull(dresscode))
|
|
return
|
|
|
|
if (dresscode == "As Plasmaman...")
|
|
var/list/plasmaman_paths = subtypesof(/datum/outfit/plasmaman)
|
|
var/list/plasmaman_outfits = list()
|
|
for(var/path in plasmaman_paths)
|
|
var/datum/outfit/O = path
|
|
if(initial(O.can_be_admin_equipped))
|
|
plasmaman_outfits[initial(O.name)] = path
|
|
|
|
dresscode = input("Select plasmeme equipment", "Robust quick dress shop") as null|anything in sortList(plasmaman_outfits)
|
|
dresscode = plasmaman_outfits[dresscode]
|
|
if(isnull(dresscode))
|
|
return
|
|
|
|
if (dresscode == "Custom")
|
|
var/list/custom_names = list()
|
|
for(var/datum/outfit/D in GLOB.custom_outfits)
|
|
custom_names[D.name] = D
|
|
var/selected_name = input("Select outfit", "Robust quick dress shop") as null|anything in sortList(custom_names)
|
|
dresscode = custom_names[selected_name]
|
|
if(isnull(dresscode))
|
|
return
|
|
|
|
return dresscode
|
|
|
|
/client/proc/startSinglo()
|
|
|
|
set category = "Debug"
|
|
set name = "Start Singularity"
|
|
set desc = "Sets up the singularity and all machines to get power flowing through the station"
|
|
|
|
if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes")
|
|
return
|
|
|
|
for(var/obj/machinery/power/emitter/E in GLOB.machines)
|
|
if(E.anchored)
|
|
E.active = 1
|
|
|
|
for(var/obj/machinery/field/generator/F in GLOB.machines)
|
|
if(F.active == 0)
|
|
F.active = 1
|
|
F.state = 2
|
|
F.power = 250
|
|
F.anchored = TRUE
|
|
F.warming_up = 3
|
|
F.start_fields()
|
|
F.update_icon()
|
|
|
|
spawn(30)
|
|
for(var/obj/machinery/the_singularitygen/G in GLOB.machines)
|
|
if(G.anchored)
|
|
var/obj/singularity/S = new /obj/singularity(get_turf(G), 50)
|
|
// qdel(G)
|
|
S.energy = 1750
|
|
S.current_size = 7
|
|
S.icon = 'icons/effects/224x224.dmi'
|
|
S.icon_state = "singularity_s7"
|
|
S.pixel_x = -96
|
|
S.pixel_y = -96
|
|
S.grav_pull = 0
|
|
//S.consume_range = 3
|
|
S.dissipate = 0
|
|
//S.dissipate_delay = 10
|
|
//S.dissipate_track = 0
|
|
//S.dissipate_strength = 10
|
|
|
|
for(var/obj/machinery/power/rad_collector/Rad in GLOB.machines)
|
|
if(Rad.anchored)
|
|
if(!Rad.loaded_tank)
|
|
var/obj/item/tank/internals/plasma/Plasma = new/obj/item/tank/internals/plasma(Rad)
|
|
Plasma.air_contents.assert_gas(/datum/gas/plasma)
|
|
Plasma.air_contents.gases[/datum/gas/plasma][MOLES] = 70
|
|
Rad.drainratio = 0
|
|
Rad.loaded_tank = Plasma
|
|
Plasma.forceMove(Rad)
|
|
|
|
if(!Rad.active)
|
|
Rad.toggle_power()
|
|
|
|
for(var/obj/machinery/power/smes/SMES in GLOB.machines)
|
|
if(SMES.anchored)
|
|
SMES.input_attempt = 1
|
|
|
|
/client/proc/cmd_debug_mob_lists()
|
|
set category = "Debug"
|
|
set name = "Debug Mob Lists"
|
|
set desc = "For when you just gotta know"
|
|
|
|
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs","Clients","Joined Clients"))
|
|
if("Players")
|
|
to_chat(usr, jointext(GLOB.player_list,","), confidential = TRUE)
|
|
if("Admins")
|
|
to_chat(usr, jointext(GLOB.admins,","), confidential = TRUE)
|
|
if("Mobs")
|
|
to_chat(usr, jointext(GLOB.mob_list,","), confidential = TRUE)
|
|
if("Living Mobs")
|
|
to_chat(usr, jointext(GLOB.alive_mob_list,","), confidential = TRUE)
|
|
if("Dead Mobs")
|
|
to_chat(usr, jointext(GLOB.dead_mob_list,","), confidential = TRUE)
|
|
if("Clients")
|
|
to_chat(usr, jointext(GLOB.clients,","), confidential = TRUE)
|
|
if("Joined Clients")
|
|
to_chat(usr, jointext(GLOB.joined_player_list,","), confidential = TRUE)
|
|
|
|
/client/proc/cmd_display_del_log()
|
|
set category = "Debug"
|
|
set name = "Display del() Log"
|
|
set desc = "Display del's log of everything that's passed through it."
|
|
|
|
var/list/dellog = list("<B>List of things that have gone through qdel this round</B><BR><BR><ol>")
|
|
sortTim(SSgarbage.items, cmp=/proc/cmp_qdel_item_time, associative = TRUE)
|
|
for(var/path in SSgarbage.items)
|
|
var/datum/qdel_item/I = SSgarbage.items[path]
|
|
dellog += "<li><u>[path]</u><ul>"
|
|
if (I.failures)
|
|
dellog += "<li>Failures: [I.failures]</li>"
|
|
dellog += "<li>qdel() Count: [I.qdels]</li>"
|
|
dellog += "<li>Destroy() Cost: [I.destroy_time]ms</li>"
|
|
if (I.hard_deletes)
|
|
dellog += "<li>Total Hard Deletes [I.hard_deletes]</li>"
|
|
dellog += "<li>Time Spent Hard Deleting: [I.hard_delete_time]ms</li>"
|
|
if (I.slept_destroy)
|
|
dellog += "<li>Sleeps: [I.slept_destroy]</li>"
|
|
if (I.no_respect_force)
|
|
dellog += "<li>Ignored force: [I.no_respect_force]</li>"
|
|
if (I.no_hint)
|
|
dellog += "<li>No hint: [I.no_hint]</li>"
|
|
dellog += "</ul></li>"
|
|
|
|
dellog += "</ol>"
|
|
|
|
usr << browse(dellog.Join(), "window=dellog")
|
|
|
|
/client/proc/cmd_display_overlay_log()
|
|
set category = "Debug"
|
|
set name = "Display overlay Log"
|
|
set desc = "Display SSoverlays log of everything that's passed through it."
|
|
|
|
render_stats(SSoverlays.stats, src)
|
|
|
|
/client/proc/cmd_display_init_log()
|
|
set category = "Debug"
|
|
set name = "Display Initialize() Log"
|
|
set desc = "Displays a list of things that didn't handle Initialize() properly"
|
|
|
|
usr << browse(replacetext(SSatoms.InitLog(), "\n", "<br>"), "window=initlog")
|
|
|
|
/client/proc/debug_huds(i as num)
|
|
set category = "Debug"
|
|
set name = "Debug HUDs"
|
|
set desc = "Debug the data or antag HUDs"
|
|
|
|
if(!holder)
|
|
return
|
|
debug_variables(GLOB.huds[i])
|
|
|
|
/client/proc/jump_to_ruin()
|
|
set category = "Debug"
|
|
set name = "Jump to Ruin"
|
|
set desc = "Displays a list of all placed ruins to teleport to."
|
|
if(!holder)
|
|
return
|
|
var/list/names = list()
|
|
for(var/i in GLOB.ruin_landmarks)
|
|
var/obj/effect/landmark/ruin/ruin_landmark = i
|
|
var/datum/map_template/ruin/template = ruin_landmark.ruin_template
|
|
|
|
var/count = 1
|
|
var/name = template.name
|
|
var/original_name = name
|
|
|
|
while(name in names)
|
|
count++
|
|
name = "[original_name] ([count])"
|
|
|
|
names[name] = ruin_landmark
|
|
|
|
var/ruinname = input("Select ruin", "Jump to Ruin") as null|anything in sortList(names)
|
|
|
|
|
|
var/obj/effect/landmark/ruin/landmark = names[ruinname]
|
|
|
|
if(istype(landmark))
|
|
var/datum/map_template/ruin/template = landmark.ruin_template
|
|
usr.forceMove(get_turf(landmark))
|
|
to_chat(usr, "<span class='name'>[template.name]</span>", confidential = TRUE)
|
|
to_chat(usr, "<span class='italics'>[template.description]</span>", confidential = TRUE)
|
|
|
|
/client/proc/place_ruin()
|
|
set category = "Debug"
|
|
set name = "Spawn Ruin"
|
|
set desc = "Attempt to randomly place a specific ruin."
|
|
if (!holder)
|
|
return
|
|
|
|
var/list/exists = list()
|
|
for(var/landmark in GLOB.ruin_landmarks)
|
|
var/obj/effect/landmark/ruin/L = landmark
|
|
exists[L.ruin_template] = landmark
|
|
|
|
var/list/names = list()
|
|
names += "---- Space Ruins ----"
|
|
for(var/name in SSmapping.space_ruins_templates)
|
|
names[name] = list(SSmapping.space_ruins_templates[name], ZTRAIT_SPACE_RUINS, list(/area/space))
|
|
names += "---- Lava Ruins ----"
|
|
for(var/name in SSmapping.lava_ruins_templates)
|
|
names[name] = list(SSmapping.lava_ruins_templates[name], ZTRAIT_LAVA_RUINS, list(/area/lavaland/surface/outdoors/unexplored))
|
|
names += "---- Ice Ruins ----"
|
|
for(var/name in SSmapping.ice_ruins_templates)
|
|
names[name] = list(SSmapping.ice_ruins_templates[name], ZTRAIT_ICE_RUINS, list(/area/icemoon/surface/outdoors/unexplored, /area/icemoon/underground/unexplored))
|
|
names += "---- Ice Underground Ruins ----"
|
|
for(var/name in SSmapping.ice_ruins_underground_templates)
|
|
names[name] = list(SSmapping.ice_ruins_underground_templates[name], ZTRAIT_ICE_RUINS_UNDERGROUND, list(/area/icemoon/underground/unexplored))
|
|
|
|
var/ruinname = input("Select ruin", "Spawn Ruin") as null|anything in sortList(names)
|
|
var/data = names[ruinname]
|
|
if (!data)
|
|
return
|
|
var/datum/map_template/ruin/template = data[1]
|
|
if (exists[template])
|
|
var/response = alert("There is already a [template] in existence.", "Spawn Ruin", "Jump", "Place Another", "Cancel")
|
|
if (response == "Jump")
|
|
usr.forceMove(get_turf(exists[template]))
|
|
return
|
|
else if (response == "Cancel")
|
|
return
|
|
|
|
var/len = GLOB.ruin_landmarks.len
|
|
seedRuins(SSmapping.levels_by_trait(data[2]), max(1, template.cost), data[3], list(ruinname = template))
|
|
if (GLOB.ruin_landmarks.len > len)
|
|
var/obj/effect/landmark/ruin/landmark = GLOB.ruin_landmarks[GLOB.ruin_landmarks.len]
|
|
log_admin("[key_name(src)] randomly spawned ruin [ruinname] at [COORD(landmark)].")
|
|
usr.forceMove(get_turf(landmark))
|
|
to_chat(src, "<span class='name'>[template.name]</span>", confidential = TRUE)
|
|
to_chat(src, "<span class='italics'>[template.description]</span>", confidential = TRUE)
|
|
else
|
|
to_chat(src, "<span class='warning'>Failed to place [template.name].</span>", confidential = TRUE)
|
|
|
|
/client/proc/clear_dynamic_transit()
|
|
set category = "Debug"
|
|
set name = "Clear Dynamic Turf Reservations"
|
|
set desc = "Deallocates all reserved space, restoring it to round start conditions."
|
|
if(!holder)
|
|
return
|
|
var/answer = alert("WARNING: THIS WILL WIPE ALL RESERVED SPACE TO A CLEAN SLATE! ANY MOVING SHUTTLES, ELEVATORS, OR IN-PROGRESS PHOTOGRAPHY WILL BE DELETED!", "Really wipe dynamic turfs?", "YES", "NO")
|
|
if(answer != "YES")
|
|
return
|
|
message_admins("<span class='adminnotice'>[key_name_admin(src)] cleared dynamic transit space.</span>")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Clear Dynamic Transit") // If...
|
|
log_admin("[key_name(src)] cleared dynamic transit space.")
|
|
SSmapping.wipe_reservations() //this goes after it's logged, incase something horrible happens.
|
|
|
|
/client/proc/toggle_medal_disable()
|
|
set category = "Debug"
|
|
set name = "Toggle Medal Disable"
|
|
set desc = "Toggles the safety lock on trying to contact the medal hub."
|
|
|
|
if(!check_rights(R_DEBUG))
|
|
return
|
|
|
|
SSachievements.achievements_enabled = !SSachievements.achievements_enabled
|
|
|
|
message_admins("<span class='adminnotice'>[key_name_admin(src)] [SSachievements.achievements_enabled ? "disabled" : "enabled"] the medal hub lockout.</span>")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Toggle Medal Disable") // If...
|
|
log_admin("[key_name(src)] [SSachievements.achievements_enabled ? "disabled" : "enabled"] the medal hub lockout.")
|
|
|
|
/client/proc/view_runtimes()
|
|
set category = "Debug"
|
|
set name = "View Runtimes"
|
|
set desc = "Open the runtime Viewer"
|
|
|
|
if(!holder)
|
|
return
|
|
|
|
GLOB.error_cache.show_to(src)
|
|
|
|
/client/proc/pump_random_event()
|
|
set category = "Debug"
|
|
set name = "Pump Random Event"
|
|
set desc = "Schedules the event subsystem to fire a new random event immediately. Some events may fire without notification."
|
|
if(!holder)
|
|
return
|
|
|
|
SSevents.scheduled = world.time
|
|
|
|
message_admins("<span class='adminnotice'>[key_name_admin(src)] pumped a random event.</span>")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Pump Random Event")
|
|
log_admin("[key_name(src)] pumped a random event.")
|
|
|
|
/client/proc/start_line_profiling()
|
|
set category = "Profile"
|
|
set name = "Start Line Profiling"
|
|
set desc = "Starts tracking line by line profiling for code lines that support it"
|
|
|
|
LINE_PROFILE_START
|
|
|
|
message_admins("<span class='adminnotice'>[key_name_admin(src)] started line by line profiling.</span>")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Start Line Profiling")
|
|
log_admin("[key_name(src)] started line by line profiling.")
|
|
|
|
/client/proc/stop_line_profiling()
|
|
set category = "Profile"
|
|
set name = "Stops Line Profiling"
|
|
set desc = "Stops tracking line by line profiling for code lines that support it"
|
|
|
|
LINE_PROFILE_STOP
|
|
|
|
message_admins("<span class='adminnotice'>[key_name_admin(src)] stopped line by line profiling.</span>")
|
|
SSblackbox.record_feedback("tally", "admin_verb", 1, "Stop Line Profiling")
|
|
log_admin("[key_name(src)] stopped line by line profiling.")
|
|
|
|
/client/proc/show_line_profiling()
|
|
set category = "Profile"
|
|
set name = "Show Line Profiling"
|
|
set desc = "Shows tracked profiling info from code lines that support it"
|
|
|
|
var/sortlist = list(
|
|
"Avg time" = /proc/cmp_profile_avg_time_dsc,
|
|
"Total Time" = /proc/cmp_profile_time_dsc,
|
|
"Call Count" = /proc/cmp_profile_count_dsc
|
|
)
|
|
var/sort = input(src, "Sort type?", "Sort Type", "Avg time") as null|anything in sortlist
|
|
if (!sort)
|
|
return
|
|
sort = sortlist[sort]
|
|
profile_show(src, sort)
|
|
|
|
/client/proc/reload_configuration()
|
|
set category = "Debug"
|
|
set name = "Reload Configuration"
|
|
set desc = "Force config reload to world default"
|
|
if(!check_rights(R_DEBUG))
|
|
return
|
|
if(alert(usr, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modificatoins?", "Really reset?", "No", "Yes") == "Yes")
|
|
config.admin_reload()
|