Duty Officers

This commit is contained in:
SoundScopes
2015-02-18 15:08:03 +00:00
parent 330a2e7938
commit 6d945b97d2
21 changed files with 809 additions and 140 deletions
+107 -96
View File
@@ -46,6 +46,10 @@ var/global/floorIsLava = 0
usr << "Error: you are not an admin!"
return
if(!src.rights & (R_ADMIN|R_MOD|R_FUN|R_DEV))
usr << "Error: you are not an admin!"
return
var/body = "<html><head><center><title>Options for [M.key]</title></head>"
body += "<body>Options panel for <b>[M]</b>"
if(M.client)
@@ -122,98 +126,100 @@ var/global/floorIsLava = 0
"}
if (M.client)
if(!istype(M, /mob/new_player))
body += "<br><br>"
body += "<b>Transformation:</b>"
body += "<br>"
if(check_rights(R_ADMIN|R_MOD|R_FUN,0))
if(!istype(M, /mob/new_player))
body += "<br><br>"
body += "<b>Transformation:</b>"
body += "<br>"
//Monkey
if(ismonkey(M))
body += "<B>Monkeyized</B> | "
else
body += "<A href='?src=\ref[src];monkeyone=\ref[M]'>Monkeyize</A> | "
//Monkey
if(ismonkey(M))
body += "<B>Monkeyized</B> | "
else
body += "<A href='?src=\ref[src];monkeyone=\ref[M]'>Monkeyize</A> | "
//Corgi
if(iscorgi(M))
body += "<B>Corgized</B> | "
else
body += "<A href='?src=\ref[src];corgione=\ref[M]'>Corgize</A> | "
//Corgi
if(iscorgi(M))
body += "<B>Corgized</B> | "
else
body += "<A href='?src=\ref[src];corgione=\ref[M]'>Corgize</A> | "
//AI / Cyborg
if(isAI(M))
body += "<B>Is an AI</B> "
else if(ishuman(M))
body += {"<A href='?src=\ref[src];makeai=\ref[M]'>Make AI</A> |
<A href='?src=\ref[src];makerobot=\ref[M]'>Make Robot</A> |
<A href='?src=\ref[src];makeslime=\ref[M]'>Make slime</A> |
<A href='?src=\ref[src];makealien=\ref[M]'>Make Alien(BROKEN)</A> |
//AI / Cyborg
if(isAI(M))
body += "<B>Is an AI</B> "
else if(ishuman(M))
body += {"<A href='?src=\ref[src];makeai=\ref[M]'>Make AI</A> |
<A href='?src=\ref[src];makerobot=\ref[M]'>Make Robot</A> |
<A href='?src=\ref[src];makeslime=\ref[M]'>Make slime</A> |
<A href='?src=\ref[src];makealien=\ref[M]'>Make Alien(BROKEN)</A> |
"}
//Simple Animals
if(isanimal(M))
body += "<A href='?src=\ref[src];makeanimal=\ref[M]'>Re-Animalize</A> | "
else
body += "<A href='?src=\ref[src];makeanimal=\ref[M]'>Animalize</A> | "
// DNA2 - Admin Hax
if(M.dna && iscarbon(M))
body += "<br><br>"
body += "<b>DNA Blocks:</b><br><table border='2'><tr><th>&nbsp;</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th>"
var/bname
for(var/block=1;block<=DNA_SE_LENGTH;block++)
if(((block-1)%5)==0)
body += "</tr><tr><th>[block-1]</th>"
bname = assigned_blocks[block]
body += "<td>"
if(bname)
var/bstate=M.dna.GetSEState(block)
var/bcolor="[(bstate)?"#006600":"#ff0000"]"
body += "<A href='?src=\ref[src];togmutate=\ref[M];block=[block]' style='color:[bcolor];'>[bname]</A><sub>[block]</sub>"
else
body += "[block]"
body+="</td>"
body += "</tr></table>"
body += {"<br><br>
<b>Rudimentary transformation:</b><font size=2><br>These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.</font><br>
<A href='?src=\ref[src];simplemake=observer;mob=\ref[M]'>Observer</A> |
<A href='?src=\ref[src];simplemake=robot;mob=\ref[M]'>Cyborg</A> |
<A href='?src=\ref[src];simplemake=human;mob=\ref[M]'>Human</A><br>
Slime: <A href='?src=\ref[src];simplemake=slime;mob=\ref[M]'>Baby</A> |
<A href='?src=\ref[src];simplemake=adultslime;mob=\ref[M]'>Adult</A><br>
Animal: <A href='?src=\ref[src];simplemake=monkey;mob=\ref[M]'>Monkey</A> |
<A href='?src=\ref[src];simplemake=cat;mob=\ref[M]'>Cat</A> |
<A href='?src=\ref[src];simplemake=runtime;mob=\ref[M]'>Runtime</A> |
<A href='?src=\ref[src];simplemake=corgi;mob=\ref[M]'>Corgi</A> |
<A href='?src=\ref[src];simplemake=ian;mob=\ref[M]'>Ian</A> |
<A href='?src=\ref[src];simplemake=crab;mob=\ref[M]'>Crab</A> |
<A href='?src=\ref[src];simplemake=coffee;mob=\ref[M]'>Coffee</A> |
<A href='?src=\ref[src];simplemake=nymph;mob=\ref[M]'>Nymph</A><br>
Construct: <A href='?src=\ref[src];simplemake=constructarmoured;mob=\ref[M]'>Armoured</A> |
<A href='?src=\ref[src];simplemake=constructbuilder;mob=\ref[M]'>Builder</A> |
<A href='?src=\ref[src];simplemake=constructwraith;mob=\ref[M]'>Wraith</A> |
<A href='?src=\ref[src];simplemake=shade;mob=\ref[M]'>Shade</A><br>
Alien: <A href='?src=\ref[src];simplemake=drone;mob=\ref[M]'>Drone</A> |
<A href='?src=\ref[src];simplemake=hunter;mob=\ref[M]'>Hunter</A> |
<A href='?src=\ref[src];simplemake=queen;mob=\ref[M]'>Queen</A> |
<A href='?src=\ref[src];simplemake=sentinel;mob=\ref[M]'>Sentinel</A> |
<A href='?src=\ref[src];simplemake=larva;mob=\ref[M]'>Larva</A><br>
"}
//Simple Animals
if(isanimal(M))
body += "<A href='?src=\ref[src];makeanimal=\ref[M]'>Re-Animalize</A> | "
else
body += "<A href='?src=\ref[src];makeanimal=\ref[M]'>Animalize</A> | "
// DNA2 - Admin Hax
if(M.dna && iscarbon(M))
body += "<br><br>"
body += "<b>DNA Blocks:</b><br><table border='2'><tr><th>&nbsp;</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th>"
var/bname
for(var/block=1;block<=DNA_SE_LENGTH;block++)
if(((block-1)%5)==0)
body += "</tr><tr><th>[block-1]</th>"
bname = assigned_blocks[block]
body += "<td>"
if(bname)
var/bstate=M.dna.GetSEState(block)
var/bcolor="[(bstate)?"#006600":"#ff0000"]"
body += "<A href='?src=\ref[src];togmutate=\ref[M];block=[block]' style='color:[bcolor];'>[bname]</A><sub>[block]</sub>"
else
body += "[block]"
body+="</td>"
body += "</tr></table>"
body += {"<br><br>
<b>Rudimentary transformation:</b><font size=2><br>These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.</font><br>
<A href='?src=\ref[src];simplemake=observer;mob=\ref[M]'>Observer</A> |
<A href='?src=\ref[src];simplemake=robot;mob=\ref[M]'>Cyborg</A> |
<A href='?src=\ref[src];simplemake=human;mob=\ref[M]'>Human</A><br>
Slime: <A href='?src=\ref[src];simplemake=slime;mob=\ref[M]'>Baby</A> |
<A href='?src=\ref[src];simplemake=adultslime;mob=\ref[M]'>Adult</A><br>
Animal: <A href='?src=\ref[src];simplemake=monkey;mob=\ref[M]'>Monkey</A> |
<A href='?src=\ref[src];simplemake=cat;mob=\ref[M]'>Cat</A> |
<A href='?src=\ref[src];simplemake=runtime;mob=\ref[M]'>Runtime</A> |
<A href='?src=\ref[src];simplemake=corgi;mob=\ref[M]'>Corgi</A> |
<A href='?src=\ref[src];simplemake=ian;mob=\ref[M]'>Ian</A> |
<A href='?src=\ref[src];simplemake=crab;mob=\ref[M]'>Crab</A> |
<A href='?src=\ref[src];simplemake=coffee;mob=\ref[M]'>Coffee</A> |
<A href='?src=\ref[src];simplemake=nymph;mob=\ref[M]'>Nymph</A><br>
Construct: <A href='?src=\ref[src];simplemake=constructarmoured;mob=\ref[M]'>Armoured</A> |
<A href='?src=\ref[src];simplemake=constructbuilder;mob=\ref[M]'>Builder</A> |
<A href='?src=\ref[src];simplemake=constructwraith;mob=\ref[M]'>Wraith</A> |
<A href='?src=\ref[src];simplemake=shade;mob=\ref[M]'>Shade</A><br>
Alien: <A href='?src=\ref[src];simplemake=drone;mob=\ref[M]'>Drone</A> |
<A href='?src=\ref[src];simplemake=hunter;mob=\ref[M]'>Hunter</A> |
<A href='?src=\ref[src];simplemake=queen;mob=\ref[M]'>Queen</A> |
<A href='?src=\ref[src];simplemake=sentinel;mob=\ref[M]'>Sentinel</A> |
<A href='?src=\ref[src];simplemake=larva;mob=\ref[M]'>Larva</A><br>
"}
if (M.client)
body += {"<br><br>
<b>Other actions:</b>
<br>
<A href='?src=\ref[src];forcespeech=\ref[M]'>Forcesay</A> |
<A href='?src=\ref[src];tdome1=\ref[M]'>Thunderdome 1</A> |
<A href='?src=\ref[src];tdome2=\ref[M]'>Thunderdome 2</A> |
<A href='?src=\ref[src];tdomeadmin=\ref[M]'>Thunderdome Admin</A> |
<A href='?src=\ref[src];tdomeobserve=\ref[M]'>Thunderdome Observer</A> |
"}
if(check_rights(R_ADMIN|R_FUN,0))
body += {"<br><br>
<b>Other actions:</b>
<br>
<A href='?src=\ref[src];forcespeech=\ref[M]'>Forcesay</A> |
<A href='?src=\ref[src];tdome1=\ref[M]'>Thunderdome 1</A> |
<A href='?src=\ref[src];tdome2=\ref[M]'>Thunderdome 2</A> |
<A href='?src=\ref[src];tdomeadmin=\ref[M]'>Thunderdome Admin</A> |
<A href='?src=\ref[src];tdomeobserve=\ref[M]'>Thunderdome Observer</A> |
"}
body += {"<br>
</center></body></html>
@@ -589,14 +595,16 @@ var/global/floorIsLava = 0
usr << browse(dat, "window=ban;size=400x400")
/datum/admins/proc/Game()
if(!check_rights(0)) return
if(!check_rights(R_ADMIN|R_FUN)) return
var/dat = {"
<center><B>Game Panel</B></center><hr>\n
<A href='?src=\ref[src];c_mode=1'>Change Game Mode</A><br>
"}
if(master_mode == "secret")
dat += "<A href='?src=\ref[src];f_secret=1'>(Force Secret Mode)</A><br>"
var/dat = ""
if(check_rights(R_ADMIN,0))
dat += {"
<center><B>Game Panel</B></center><hr>\n
<A href='?src=\ref[src];c_mode=1'>Change Game Mode</A><br>
"}
if(master_mode == "secret")
dat += "<A href='?src=\ref[src];f_secret=1'>(Force Secret Mode)</A><br>"
dat += {"
<BR>
@@ -604,10 +612,13 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];quick_create_object=1'>Quick Create Object</A><br>
<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>
<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>
<br><A href='?src=\ref[src];vsc=airflow'>Edit Airflow Settings</A><br>
<A href='?src=\ref[src];vsc=plasma'>Edit Plasma Settings</A><br>
<A href='?src=\ref[src];vsc=default'>Choose a default ZAS setting</A><br>
"}
if(check_rights(R_ADMIN,0))
dat += {"
<br><A href='?src=\ref[src];vsc=airflow'>Edit Airflow Settings</A><br>
<A href='?src=\ref[src];vsc=plasma'>Edit Plasma Settings</A><br>
<A href='?src=\ref[src];vsc=default'>Choose a default ZAS setting</A><br>
"}
usr << browse(dat, "window=admin2;size=210x280")
return
+1
View File
@@ -42,6 +42,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if("spawn","create") rights |= R_SPAWN
if("mod") rights |= R_MOD
if("developer") rights |= R_DEV
if("dutyofficer") rights |= R_DUTYOFF
admin_ranks[rank] = rights
previous_rights = rights
+8 -1
View File
@@ -1,5 +1,6 @@
/*
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
var/list/admin_verbs_default = list(
var/list/admin_verbs_default = list(
/client/proc/player_panel,
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
@@ -101,6 +102,7 @@ var/list/admin_verbs_sounds = list(
var/list/admin_verbs_fun = list(
//Hey look it's in order of letters ^_^
/datum/admins/proc/access_news_network,
/datum/admins/proc/Game,
/datum/admins/proc/toggle_aliens,
/datum/admins/proc/toggle_space_ninja,
/client/proc/admin_ghost,
@@ -138,6 +140,7 @@ var/list/admin_verbs_fun = list(
/client/proc/send_space_ninja,
/client/proc/toggle_view_range
)
var/list/admin_verbs_dev = list(
/client/proc/dsay,
/client/proc/togglebuildmodeself,
@@ -388,6 +391,7 @@ var/list/admin_verbs_mod = list(
/client/proc/toggle_power_update_profiling,
/client/proc/atmos_toggle_debug
)
*/
/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
set name = "Adminverbs - Hide Most"
@@ -445,6 +449,9 @@ var/list/admin_verbs_mod = list(
else if(istype(mob,/mob/new_player))
src << "<font color='red'>Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.</font>"
else
//first lets see if this works
if(!holder.original_mob)
holder.original_mob = mob
//ghostize
var/mob/body = mob
body.ghostize(1)
+2
View File
@@ -8,6 +8,8 @@ var/list/admin_datums = list()
var/datum/marked_datum
var/mob/living/original_mob = null //used to return to body from Duty Officers
var/admincaster_screen = 0 //See newscaster.dm under machinery for a full description
var/datum/feed_message/admincaster_feed_message = new /datum/feed_message //These two will act as holders.
var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel
@@ -0,0 +1,417 @@
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
var/list/admin_verbs_default = list(
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
/client/proc/hide_verbs, /*hides all our adminverbs*/
)
var/list/admin_verbs_admin = list(
// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage
// /client/proc/sendmob, /*sends a mob somewhere*/ -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage
// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/
// /client/proc/deadchat /*toggles deadchat on/off*/
/datum/admins/proc/announce, /*priority announce something to all clients.*/
/datum/admins/proc/access_news_network, /*allows access of newscasters*/
/datum/admins/proc/PlayerNotes,
/datum/admins/proc/show_player_info,
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
/datum/admins/proc/show_skills,
/datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/
/datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/toggledevooc,
/datum/admins/proc/togglemodooc,
/datum/admins/proc/togglelooc,
/datum/admins/proc/togglemodlooc,
/datum/admins/proc/toggledevlooc,
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
/datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/
/datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
/client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/
/client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
/client/proc/alertlevels,
/client/proc/allow_character_respawn, /* Allows a ghost to respawn */
/client/proc/check_ai_laws, /*shows AI and borg laws*/
/client/proc/check_antagonists,
/client/proc/check_customitem_activity,
/client/proc/check_words, /*displays cult-words*/
/client/proc/cleartox,
/client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/
/client/proc/cmd_admin_create_centcom_report,
/client/proc/cmd_admin_change_custom_event,
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
/client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
/client/proc/cmd_admin_rejuvenate,
/client/proc/cmd_admin_unwind,
/client/proc/cmd_admin_wind,
/client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
/client/proc/cmd_duty_say,
/client/proc/cmd_mentor_check_new_players,
/client/proc/cmd_mod_say,
/client/proc/colorooc, /*allows us to set a custom colour for everythign we say in ooc*/
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
/client/proc/free_slot, /*frees slot for chosen job*/
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
/client/proc/Getmob, /*teleports a mob to our location*/
/client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
/client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/
/client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/
/client/proc/global_man_up,
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
/client/proc/Jump,
/client/proc/jumptocoord, /*we ghost and jump to a coordinate*/
/client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/
/client/proc/jumptomob, /*allows us to jump to a specific mob*/
/client/proc/jumptoturf, /*allows us to jump to a specific turf*/
/client/proc/man_up,
/client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/
/client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/
/client/proc/response_team, // Response Teams admin verb
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
/client/proc/toggle_antagHUD_use,
/client/proc/toggle_antagHUD_restrictions,
/client/proc/toggleattacklogs,
/client/proc/toggledebuglogs,
/client/proc/toggleghostwriters,
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
/client/proc/toggledrones,
/client/proc/toggleprayers,
/client/proc/toggle_view_range, /*changes how far we can see*/
/client/proc/secrets,
/client/proc/set_ooc
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
/client/proc/jobbans,
/client/proc/warning_panel
)
var/list/admin_verbs_sounds = list(
/client/proc/play_local_sound,
/client/proc/play_sound
)
var/list/admin_verbs_fun = list(
//Hey look it's in order of letters ^_^
/datum/admins/proc/access_news_network,
/datum/admins/proc/toggle_aliens,
/datum/admins/proc/toggle_space_ninja,
/client/proc/admin_ghost,
/client/proc/alertlevels,
/client/proc/check_ai_laws,
/client/proc/cinematic,
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/cmd_admin_change_custom_event,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/cmd_admin_delete,
/client/proc/cmd_admin_direct_narrate,
/client/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
/client/proc/cmd_admin_pm_context,
/client/proc/cmd_admin_pm_panel,
/client/proc/cmd_admin_subtle_message,
/client/proc/cmd_admin_world_narrate,
/client/proc/cmd_debug_tog_aliens,
/client/proc/cmd_mod_say,
/client/proc/debug_variables,
/client/proc/drop_bomb,
/client/proc/dsay,
/client/proc/editappear,
/client/proc/everyone_random,
/client/proc/game_panel,
/client/proc/Getmob,
/client/proc/Getkey,
/client/proc/hide_most_verbs,
/client/proc/Jump,
/client/proc/jumptokey,
/client/proc/jumptomob,
/client/proc/make_area_sound,
/client/proc/make_sound,
/client/proc/object_talk,
/client/proc/one_click_antag,
/client/proc/player_panel,
/client/proc/secrets,
/client/proc/send_space_ninja,
/client/proc/toggle_view_range
)
var/list/admin_verbs_dev = list(
/datum/admins/proc/restart,
/client/proc/admin_ghost,
/client/proc/air_report,
/client/proc/enable_debug_verbs,
/client/proc/cmd_admin_delete,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_make_powernets,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_dev_bst,
/client/proc/cmd_dev_say,
/client/proc/cmd_dev_reset_gravity,
/client/proc/cmd_dev_reset_floating,
/client/proc/Debug2,
/client/proc/debug_controller,
/client/proc/debug_variables,
/client/proc/dsay,
/client/proc/getruntimelog,
/client/proc/giveruntimelog,
/client/proc/hide_most_verbs,
/client/proc/kill_air,
/client/proc/kill_airgroup,
/client/proc/player_panel,
/client/proc/reload_admins,
/client/proc/restart_controller,
/client/proc/togglebuildmodeself,
/client/proc/toggledebuglogs,
/client/proc/togglescopeslogs,
/client/proc/ZASSettings
)
var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
/client/proc/respawn_character
)
var/list/admin_verbs_server = list(
/datum/admins/proc/adrev,
/datum/admins/proc/adspawn,
/datum/admins/proc/adjump,
/datum/admins/proc/delay,
/datum/admins/proc/toggleaban,
/datum/admins/proc/toggleAI,
/datum/admins/proc/toggle_aliens,
/datum/admins/proc/toggle_space_ninja,
/datum/admins/proc/immreboot,
/datum/admins/proc/startnow,
/datum/admins/proc/restart,
/client/proc/check_customitem_activity,
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
/client/proc/cmd_debug_del_all,
/client/proc/everyone_random,
/client/proc/nanomapgen_DumpImage,
/client/proc/SDQL_query,
/client/proc/SDQL2_query,
/client/proc/Set_Holiday,
/client/proc/ToRban,
/client/proc/toggle_log_hrefs,
/client/proc/toggle_random_events
)
var/list/admin_verbs_debug = list(
/datum/admins/proc/delay,
/datum/admins/proc/restart,
/client/proc/air_report,
/client/proc/callproc,
/client/proc/cmd_admin_delete,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_make_powernets,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_debug_tog_aliens,
/client/proc/cmd_dev_reset_gravity,
/client/proc/cmd_dev_reset_floating,
/client/proc/Debug2,
/client/proc/debug_controller,
/client/proc/debug_variables,
/client/proc/enable_debug_verbs,
/client/proc/fillspace,
/client/proc/getruntimelog,
/client/proc/hide_activity,
/client/proc/kill_air,
/client/proc/kill_airgroup,
/client/proc/show_distribution_map,
/client/proc/toggledebuglogs,
/client/proc/reload_admins,
/client/proc/restart_controller,
/client/proc/remake_distribution_map,
/client/proc/ZASSettings,
)
var/list/admin_verbs_possess = list(
/proc/possess,
/proc/release
)
var/list/admin_verbs_permissions = list(
/client/proc/edit_admin_permissions
)
var/list/admin_verbs_rejuv = list(
/client/proc/respawn_character
)
var/list/admin_verbs_mod = list(
/datum/admins/proc/PlayerNotes,
/datum/admins/proc/show_player_info,
/datum/admins/proc/show_skills,
/datum/admins/proc/show_player_panel,
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/check_antagonists, /*shows all antags*/
/client/proc/check_ai_laws,
/client/proc/cmd_admin_check_contents,
/client/proc/cmd_admin_wind,
/client/proc/cmd_admin_unwind,
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
/client/proc/cmd_mentor_check_new_players,
/client/proc/cmd_mod_say,
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/
/client/proc/dsay,
/client/proc/hide_most_verbs,
/client/proc/jobbans,
/client/proc/player_panel,
/client/proc/player_panel_new,
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
/client/proc/toggleattacklogs,
/client/proc/toggledebuglogs,
/client/proc/toggleprayers
)
//verbs which can be hidden - needs work
var/list/admin_verbs_hideable = list(
/datum/admins/proc/access_news_network,
/datum/admins/proc/adjump,
/datum/admins/proc/adrev,
/datum/admins/proc/adspawn,
/datum/admins/proc/announce,
/datum/admins/proc/delay,
/datum/admins/proc/immreboot,
/datum/admins/proc/restart,
/datum/admins/proc/show_traitor_panel,
/datum/admins/proc/startnow,
/datum/admins/proc/toggleaban,
/datum/admins/proc/toggleAI,
/datum/admins/proc/toggle_aliens,
/datum/admins/proc/toggleenter,
/datum/admins/proc/toggleguests,
/datum/admins/proc/toggle_space_ninja,
/datum/admins/proc/view_txt_log,
/datum/admins/proc/view_atk_log,
/client/proc/admin_call_shuttle,
/client/proc/admin_cancel_shuttle,
/client/proc/admin_ghost,
/client/proc/air_report,
/client/proc/callproc,
/client/proc/check_words,
/client/proc/cinematic,
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/cmd_admin_check_contents,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/cmd_admin_direct_narrate,
/client/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
/client/proc/cmd_admin_subtle_message,
/client/proc/cmd_admin_world_narrate,
/client/proc/cmd_debug_make_powernets,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_tog_aliens,
/client/proc/colorooc,
// /client/proc/deadchat,
/client/proc/deadmin_self,
/client/proc/Debug2,
/client/proc/debug_controller,
/client/proc/drop_bomb,
/client/proc/enable_debug_verbs,
/client/proc/everyone_random,
/client/proc/kill_air,
/client/proc/kill_airgroup,
/client/proc/make_area_sound,
/client/proc/make_sound,
/client/proc/object_talk,
/client/proc/play_local_sound,
/client/proc/play_sound,
/client/proc/reload_admins,
/client/proc/restart_controller,
/client/proc/send_space_ninja,
/client/proc/Set_Holiday,
/client/proc/set_ooc,
/client/proc/startSinglo,
/client/proc/toggle_hear_radio,
/client/proc/toggle_log_hrefs,
/client/proc/toggleprayers,
/client/proc/toggle_random_events,
/client/proc/toggle_view_range,
/client/proc/ToRban,
/proc/possess,
/proc/release
)
/client/proc/remove_admin_verbs()
verbs.Remove(
admin_verbs_default,
/client/proc/togglebuildmodeself,
/client/proc/stealth,
admin_verbs_admin,
admin_verbs_ban,
admin_verbs_fun,
admin_verbs_server,
admin_verbs_debug,
admin_verbs_possess,
admin_verbs_permissions,
admin_verbs_rejuv,
admin_verbs_sounds,
admin_verbs_spawn,
admin_verbs_dev,
admin_verbs_duty,
/*Debug verbs added by "show debug verbs"*/
/client/proc/Cell,
/client/proc/do_not_use_these,
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
/client/proc/air_status,
/client/proc/atmosscan,
/client/proc/powerdebug,
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
/client/proc/cmd_assume_direct_control,
/client/proc/jump_to_dead_group,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
/client/proc/kaboom,
/client/proc/splash,
/client/proc/cmd_admin_areatest,
/client/proc/view_power_update_stats_area,
/client/proc/view_power_update_stats_machines,
/client/proc/toggle_power_update_profiling,
/client/proc/atmos_toggle_debug
)
var/list/admin_verbs_duty = list(
/client/proc/spawn_duty_officer,
/client/proc/cmd_duty_say,
/client/verb/returntobody
)
/client/proc/add_admin_verbs()
if(holder)
verbs += admin_verbs_default
if(holder.rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself
if(holder.rights & R_ADMIN) verbs += admin_verbs_admin
if(holder.rights & R_BAN) verbs += admin_verbs_ban
if(holder.rights & R_FUN) verbs += admin_verbs_fun
if(holder.rights & R_SERVER) verbs += admin_verbs_server
if(holder.rights & R_DEBUG) verbs += admin_verbs_debug
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
if(holder.rights & R_STEALTH) verbs += /client/proc/stealth
if(holder.rights & R_REJUVINATE) verbs += admin_verbs_rejuv
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
if(holder.rights & R_MOD) verbs += admin_verbs_mod
if(holder.rights & R_DEV) verbs += admin_verbs_dev
if(holder.rights & R_DUTYOFF) verbs += admin_verbs_duty //hehe duty
+3
View File
@@ -333,6 +333,9 @@
for(var/mob/M in mobs)
if(!M.ckey) continue
if(M.client && M.client.holder && M.client.holder.fakekey)
if(!usr.client.holder.rights & (R_ADMIN|R_MOD))
continue
dat += "<tr><td>[M.name]</td>"
if(isAI(M))
-1
View File
@@ -1554,7 +1554,6 @@
src.owner << "Message reply to transmitted successfully."
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(H)]: [input]")
message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)] <a href='?_src_=holder;CentcommFaxView=\ref[input]'>view message</a>", 1)
message_mods("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]")
else if(href_list["jumpto"])
+19 -1
View File
@@ -49,7 +49,25 @@
log_admin("[key_name(src)] : [msg]")
if(check_rights(R_DEV,0))
msg = "<span class='devsay'><span class='prefix'>DEV:</span> <EM>[key_name(usr, 1)]</EM>: <span class='message'>[msg]</span></span>"
msg = "<span class='devsay'><span class='prefix'>DEV:</span> <EM>[key_name(usr, 0, 1, 0)]</EM>: <span class='message'>[msg]</span></span>"
for(var/client/C in admins)
if(R_DEV & C.holder.rights)
C << msg
/client/proc/cmd_duty_say(msg as text)
set category = "Admin"
set name = "Dosay"
set hidden = 1
if(!check_rights(R_DUTYOFF)) return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
if(!msg) return
log_admin("[key_name(src)] : [msg]")
if(check_rights(R_DUTYOFF,0))
msg = "<span class='dutysay'><span class='prefix'>DOfficer:</span> <EM>[key_name(usr, 0, 1, 0)]</EM>: <span class='message'>[msg]</span></span>"
for(var/client/C in admins)
if(C.holder.rights & (R_ADMIN|R_DUTYOFF))
C << msg
+3 -3
View File
@@ -20,7 +20,7 @@
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
for(var/client/C in admins)
if(((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights)) || (R_FUN & C.holder.rights) && (C.prefs.toggles & CHAT_PRAYER))
if(C.holder.rights & (R_ADMIN|R_MOD|R_FUN) && (C.prefs.toggles & CHAT_PRAYER))
C << msg
usr << "Your prayers have been received by the gods."
@@ -35,12 +35,12 @@
else
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
for(var/client/C in admins)
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights) || (R_FUN & C.holder.rights))
if(C.holder.rights & (R_ADMIN|R_DUTYOFF|R_FUN))
C << msg
/proc/Syndicate_announce(var/text , var/mob/Sender)
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
msg = "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
for(var/client/C in admins)
if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights) || (R_FUN & C.holder.rights))
if(C.holder.rights & (R_ADMIN|R_MOD|R_FUN))
C << msg
+24 -7
View File
@@ -27,6 +27,10 @@
src << "\red The game hasn't started yet!"
return
if(istype(mob, /mob/living))
if(!holder.original_mob)
holder.original_mob = mob
//I couldn't get the normal way to work so this works.
//This whole section looks like a hack, I don't like it.
var/T = get_turf(usr)
@@ -154,13 +158,15 @@
spawn(5)
del(s)
if(key)
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
ghost.key = key
ghost.mind.name = "[ghost.key] BSTech"
ghost.name = "[ghost.key] BSTech"
ghost.real_name = "[ghost.key] BSTech"
ghost.voice_name = "[ghost.key] BSTech"
if(client.holder && client.holder.original_mob)
client.holder.original_mob.key = key
else
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
ghost.key = key
ghost.mind.name = "[ghost.key] BSTech"
ghost.name = "[ghost.key] BSTech"
ghost.real_name = "[ghost.key] BSTech"
ghost.voice_name = "[ghost.key] BSTech"
del(src)
return
@@ -294,6 +300,17 @@
src.sleeping = 0
verb/bstquit()
set name = "Teleport out"
set desc = "Activate bluespace to leave (and return to your original mob(if you have one))"
set category = "BST"
var/client/C = src.client
if(C.holder && C.holder.original_mob)
C.holder.original_mob.key = key
C.holder.original_mob = null
suicide()
//Equipment. All should have canremove set to 0
//All items with a /bst need the attack_hand() proc overrided to stop people getting overpowered items.
+172
View File
@@ -0,0 +1,172 @@
/client/proc/spawn_duty_officer()
set category = "Special Verbs"
set name = "Spawn Duty Officer"
set desc = "Spawns a Duty Officer to do Duty"
if(!check_rights(R_DUTYOFF)) return
if(!holder)
return //how did they get here?
if(!ticker)
alert("Wait until the game starts")
return
if(ticker.current_state < GAME_STATE_PLAYING)
src << "\red The game hasn't started yet!"
return
if(mob.mind.special_role == "Duty Officer")
src << "\red You are already a Duty Officer"
return
if(istype(mob, /mob/living))
holder.original_mob = mob
for (var/obj/effect/landmark/L in landmarks_list)
if(L.name == "DutyOfficer")
var/new_name = input(usr, "Pick a name","Name") as null|text
var/mob/living/carbon/human/M = new(null)
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
if(new_facial)
M.r_facial = hex2num(copytext(new_facial, 2, 4))
M.g_facial = hex2num(copytext(new_facial, 4, 6))
M.b_facial = hex2num(copytext(new_facial, 6, 8))
var/new_hair = input("Please select hair color.", "Character Generation") as color
if(new_facial)
M.r_hair = hex2num(copytext(new_hair, 2, 4))
M.g_hair = hex2num(copytext(new_hair, 4, 6))
M.b_hair = hex2num(copytext(new_hair, 6, 8))
var/new_eyes = input("Please select eye color.", "Character Generation") as color
if(new_eyes)
M.r_eyes = hex2num(copytext(new_eyes, 2, 4))
M.g_eyes = hex2num(copytext(new_eyes, 4, 6))
M.b_eyes = hex2num(copytext(new_eyes, 6, 8))
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
if (!new_tone)
new_tone = 35
M.s_tone = max(min(round(text2num(new_tone)), 220), 1)
M.s_tone = -M.s_tone + 35
// hair
var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
var/list/hairs = list()
// loop through potential hairs
for(var/x in all_hairs)
var/datum/sprite_accessory/hair/H = new x
hairs.Add(H.name)
del(H)
//hair
var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in hair_styles_list
if(new_hstyle)
M.h_style = new_hstyle
// facial hair
var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
if(new_fstyle)
M.f_style = new_fstyle
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
if (new_gender)
if(new_gender == "Male")
M.gender = MALE
else
M.gender = FEMALE
//M.rebuild_appearance()
M.update_hair()
M.update_body()
M.check_dna(M)
M.real_name = new_name
M.name = new_name
M.age = input("Enter your characters age:","Num") as null|num
if(!M.age)
M.age = rand(35,50)
if(M.age < 33 || M.age > 60)
src << "\red The age you selected was not in a valid range for a Duty Officer"
if(M.age < 33)
M.age = 33
else
M.age = 60
src << "\red Your age has been set to [M.age]"
M.dna.ready_dna(M)
//Creates mind stuff.
M.mind = new
M.mind.current = M
M.mind.original = M
M.mind.admin_mob_placeholder = mob
M.mind.assigned_role = "Central Command Duty Officer"
M.mind.special_role = "Duty Officer"
M.loc = L.loc
M.key = key
spawn(1)
holder.original_mob.key = "@[key]"
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom/officer(M), slot_w_uniform)
M.equip_if_possible(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), slot_gloves)
M.equip_if_possible(new /obj/item/device/radio/headset/ert(M), slot_l_ear)
M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(M), slot_glasses)
M.equip_if_possible(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head)
M.equip_if_possible(new /obj/item/weapon/melee/telebaton(M), slot_l_store)
M.equip_if_possible(new /obj/item/device/taperecorder(M), slot_r_store)
var/obj/item/device/pda/central/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "Central Command Duty Officer"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_if_possible(pda, slot_belt)
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
W.icon_state = "centcom"
W.item_state = "id_inv"
W.access = get_all_accesses() + get_centcom_access("Duty Officer")
W.assignment = "Central Command Duty Officer"
W.registered_name = M.real_name
M.equip_if_possible(W, slot_wear_id)
verbs += /client/verb/returntobody
break
/client/verb/returntobody()
set name = "Return to mob"
set desc = "The Duty is done, return to your original mob"
set category = "Special Verbs"
if(!check_rights(0)) return
if(mob.mind.special_role != "Duty Officer")
verbs -= /client/verb/returntobody
return
if(!holder) return
var/mob/M = mob
var/area/A = get_area(M)
if(!is_type_in_list(A,centcom_areas))
src << "\red You need to be back at central to do this"
return
if(holder.original_mob)
if(holder.original_mob == M)
verbs -= /client/verb/returntobody
return
holder.original_mob.key = key
else
if(mob.mind.admin_mob_placeholder)
mob.mind.admin_mob_placeholder.key = key
mob.mind.admin_mob_placeholder = null
else
mob.ghostize(0)
verbs -= /client/verb/returntobody
del(M)
@@ -243,6 +243,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
usr << "<span class='warning'>The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.</span>"
return
mind.current.ajourn=0
if(mind.current == client.holder.original_mob)
client.holder.original_mob = null
mind.current.key = key
return 1
+20 -19
View File
@@ -710,24 +710,25 @@ note dizziness decrements automatically in the mob's Life() proc.
if(statpanel("Status")) //not looking at that panel
if(client && client.holder)
stat(null,"Location:\t([x], [y], [z])")
stat(null,"CPU:\t[world.cpu]")
stat(null,"Instances:\t[world.contents.len]")
if(client.holder.rights & (R_ADMIN|R_MOD|R_DEV|R_FUN))
stat(null,"Location:\t([x], [y], [z])")
stat(null,"CPU:\t[world.cpu]")
stat(null,"Instances:\t[world.contents.len]")
if(master_controller)
stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])")
stat(null,"Air-[master_controller.air_cost]\tSun-[master_controller.sun_cost]")
stat(null,"Mob-[master_controller.mobs_cost]\t#[mob_list.len]")
stat(null,"Dis-[master_controller.diseases_cost]\t#[active_diseases.len]")
stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]")
stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]")
stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]")
stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]")
stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]")
else
stat(null,"MasterController-ERROR")
if(delta_level:active)
stat(null,"Delta Countdown-[delta_level.timeleft()]")
if(master_controller)
stat(null,"MasterController-[last_tick_duration] ([master_controller.processing?"On":"Off"]-[controller_iteration])")
stat(null,"Air-[master_controller.air_cost]\tSun-[master_controller.sun_cost]")
stat(null,"Mob-[master_controller.mobs_cost]\t#[mob_list.len]")
stat(null,"Dis-[master_controller.diseases_cost]\t#[active_diseases.len]")
stat(null,"Mch-[master_controller.machines_cost]\t#[machines.len]")
stat(null,"Obj-[master_controller.objects_cost]\t#[processing_objects.len]")
stat(null,"Net-[master_controller.networks_cost]\tPnet-[master_controller.powernets_cost]")
stat(null,"NanoUI-[master_controller.nano_cost]\t#[nanomanager.processing_uis.len]")
stat(null,"Tick-[master_controller.ticker_cost]\tALL-[master_controller.total_cost]")
else
stat(null,"MasterController-ERROR")
if(delta_level:active)
stat(null,"Delta Countdown-[delta_level.timeleft()]")
if(!ooc_allowed)
stat(null,"OOC is globaly muted")
if(!looc_allowed)
@@ -739,7 +740,7 @@ note dizziness decrements automatically in the mob's Life() proc.
var/total = 0
var/staff = 0
for(var/client/C in clients)
if(C.holder && (C.holder.rights & R_ADMIN || C.holder.rights & R_MOD))
if(C.holder && (C.holder.rights & (R_ADMIN|R_MOD)))
staff++
if(istype(C.mob, /mob/living))
players++
@@ -748,7 +749,7 @@ note dizziness decrements automatically in the mob's Life() proc.
if(istype(C.mob, /mob/new_player))
lobby++
total++
stat(null, "Players: [total]\tModeration Staff: [staff]")
stat(null, "Players: [total]\t Moderation Staff: [staff]")
stat(null, "Living: [players]\tGhosts: [ghosts]\tLobby: [lobby]")
if(client)
stat(null, "Round Time: [round(world.time / 36000)]:[(world.time / 600 % 60) < 10 ? add_zero(world.time / 600 % 60, 1) : world.time / 600 % 60]")