Merge remote-tracking branch 'upstream/master'

This commit is contained in:
DeltaFire
2020-10-06 14:49:58 +02:00
30 changed files with 463 additions and 337 deletions
+2
View File
@@ -1186,6 +1186,8 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico
SSassets.transport.register_asset(key, I)
for (var/thing2 in targets)
SSassets.transport.send_assets(thing2, key)
if(sourceonly)
return SSassets.transport.get_asset_url(key)
return "<img class='icon icon-[icon_state]' src='[SSassets.transport.get_asset_url(key)]'>"
+1
View File
@@ -1,6 +1,7 @@
PROCESSING_SUBSYSTEM_DEF(dcs)
name = "Datum Component System"
flags = SS_NO_INIT
wait = 1 SECONDS
var/list/elements_by_type = list()
+3 -3
View File
@@ -60,9 +60,9 @@ SUBSYSTEM_DEF(economy)
secmedsrv_payout() // Payout based on crew safety, health, and mood.
civ_payout() // Payout based on ??? Profit
car_payout() // Cargo's natural gain in the cash moneys.
for(var/A in bank_accounts)
var/datum/bank_account/B = A
B.payday(1)
for(var/account in bank_accounts)
var/datum/bank_account/bank_account = account
bank_account.payday(1)
/datum/controller/subsystem/economy/proc/get_dep_account(dep_id)
+1 -1
View File
@@ -100,7 +100,7 @@ SUBSYSTEM_DEF(events)
// REEEEEEEEE
/client/proc/forceEvent()
set name = "Trigger Event"
set category = "Fun"
set category = "Admin.Events"
if(!holder ||!check_rights(R_FUN))
return
+1 -1
View File
@@ -447,7 +447,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
//Manual loading of away missions.
/client/proc/admin_away()
set name = "Load Away Mission / Virtual Reality"
set category = "Fun"
set category = "Admin.Events"
if(!holder ||!check_rights(R_FUN))
return
+25 -22
View File
@@ -27,28 +27,6 @@ SUBSYSTEM_DEF(statpanels)
var/ETA = SSshuttle.emergency.getModeStr()
if(ETA)
global_data += "[ETA] [SSshuttle.emergency.getTimerStr()]"
/* Please fix
if(SSvote.mode)
var/static/list/supported = list(PLURALITY_VOTING, APPROVAL_VOTING)
global_data += "Vote active!, There is currently a vote running. Question: [SSvote.question]"
if(!(SSvote.vote_system in supported))
global_data += "<STATPANEL VOTING DISABLED>, The current vote system is not supported by statpanel rendering. Please vote manually by opening the vote popup using the action button or chat link."
return
global_data += "Time Left:, [round(SSvote.end_time - world.time)] seconds"
global_data += "Choices:"
for(var/i in 1 to SSvote.choice_statclicks.len)
var/choice = SSvote.choice_statclicks[i]
var/ivotedforthis = FALSE
if(usr.ckey)
switch(SSvote.vote_system)
if(APPROVAL_VOTING)
ivotedforthis = SSvote.voted[usr.ckey] && (i in SSvote.voted[usr.ckey])
if(PLURALITY_VOTING)
ivotedforthis = SSvote.voted[usr.ckey] == i
global_data += (ivotedforthis? "\[X\]" : "\[ \]", SSvote.choice_statclicks[choice])
*/
encoded_global_data = url_encode(json_encode(global_data))
src.currentrun = GLOB.clients.Copy()
@@ -63,6 +41,31 @@ SUBSYSTEM_DEF(statpanels)
var/ping_str = url_encode("Ping: [round(target.lastping, 1)]ms (Average: [round(target.avgping, 1)]ms)")
var/other_str = url_encode(json_encode(target.mob.get_status_tab_items()))
target << output("[encoded_global_data];[ping_str];[other_str]", "statbrowser:update")
if(SSvote.mode)
var/list/vote_arry = list(
list("Vote active!", "There is currently a vote running. Question: [SSvote.question]")
) //see the MC on how this works.
if(!(SSvote.vote_system in list(PLURALITY_VOTING, APPROVAL_VOTING)))
vote_arry[++vote_arry.len] += list("STATPANEL VOTING DISABLED!", "The current vote system is not supported by statpanel rendering. Please vote manually by opening the vote popup using the action button or chat link.", "disabled")
//does not return.
else
vote_arry[++vote_arry.len] += list("Time Left:", " [round(SSvote.end_time - world.time)] seconds")
vote_arry[++vote_arry.len] += list("Choices:", "")
for(var/choice in SSvote.choice_statclicks)
var/choice_id = SSvote.choice_statclicks[choice]
var/ivotedforthis = FALSE
if(target.ckey)
switch(SSvote.vote_system)
if(APPROVAL_VOTING)
ivotedforthis = SSvote.voted[target.ckey] && (text2num(choice_id) in SSvote.voted[usr.ckey])
if(PLURALITY_VOTING)
ivotedforthis = (SSvote.voted[target.ckey] == text2num(choice_id))
vote_arry[++vote_arry.len] += list(ivotedforthis ? "\[X\]" : "\[ \]", choice, "[REF(SSvote)];vote=[choice_id];statpannel=1")
var/vote_str = url_encode(json_encode(vote_arry))
target << output("[vote_str]", "statbrowser:update_voting")
else
var/null_bullet = url_encode(json_encode(list(list(null))))
target << output("[null_bullet]", "statbrowser:update_voting")
if(!target.holder)
target << output("", "statbrowser:remove_admin_tabs")
else
+6 -48
View File
@@ -16,6 +16,7 @@ SUBSYSTEM_DEF(vote)
var/question = null
var/list/choices = list()
/// List of choice = object for statclick objects for statpanel voting
/// statclick rework? 2: list("name"="id")
var/list/choice_statclicks = list()
var/list/scores = list()
var/list/choice_descs = list() // optional descriptions
@@ -49,34 +50,6 @@ SUBSYSTEM_DEF(vote)
client_popup.open(0)
next_pop = world.time+VOTE_COOLDOWN
/**
* Renders a statpanel. Directly uses statpanel/stat calls since this is called from base of mob/Stat().
*/
/datum/controller/subsystem/vote/proc/render_statpanel(mob/M)
if(!mode) // check if vote is running
return
if(!statpanel("Status")) // don't bother if they're not focused on this panel
return
var/static/list/supported = list(PLURALITY_VOTING, APPROVAL_VOTING)
stat("Vote active!", "There is currently a vote running. Question: [question]")
if(!(vote_system in supported))
stat("<STATPANEL VOTING DISABLED>", "The current vote system is not supported by statpanel rendering. Please vote manually by opening the vote popup using the action button or chat link.")
return
stat("Time Left:", "[round(end_time - world.time)] seconds")
stat(null, null)
stat("Choices:", null)
stat(null, null)
for(var/i in 1 to choice_statclicks.len)
var/choice = choice_statclicks[i]
var/ivotedforthis = FALSE
switch(vote_system)
if(APPROVAL_VOTING)
ivotedforthis = voted[usr.ckey] && (i in voted[usr.ckey])
if(PLURALITY_VOTING)
ivotedforthis = voted[usr.ckey] == i
stat(ivotedforthis? "\[X\]" : "\[ \]", choice_statclicks[choice])
stat(null, null)
/datum/controller/subsystem/vote/proc/reset()
initiator = null
end_time = 0
@@ -87,26 +60,10 @@ SUBSYSTEM_DEF(vote)
voted.Cut()
voting.Cut()
scores.Cut()
cleanup_statclicks()
choice_statclicks = list()
display_votes = initial(display_votes) //CIT CHANGE - obfuscated votes
remove_action_buttons()
/datum/controller/subsystem/vote/proc/cleanup_statclicks()
for(var/choice in choice_statclicks)
qdel(choice_statclicks[choice])
choice_statclicks = list()
/obj/effect/statclick/vote
name = "ERROR"
var/choice
/obj/effect/statclick/vote/Click()
SSvote.submit_vote(choice)
/obj/effect/statclick/vote/New(loc, choice, name)
src.choice = choice
src.name = name
/datum/controller/subsystem/vote/proc/get_result()
//get the highest number of votes
var/greatest_votes = 0
@@ -582,10 +539,10 @@ SUBSYSTEM_DEF(vote)
to_chat(world, "\n<font color='purple'><b>[text]</b>\nType <b>vote</b> or click <a href='?src=[REF(src)]'>here</a> to place your votes.\nYou have [DisplayTimeText(vp)] to vote.</font>")
end_time = started_time+vp
// generate statclick list
cleanup_statclicks()
choice_statclicks = list()
for(var/i in 1 to choices.len)
var/choice = choices[i]
choice_statclicks[choice] = new /obj/effect/statclick/vote(null, i, choice)
choice_statclicks[choice] = "[i]"
//
for(var/c in GLOB.clients)
SEND_SOUND(c, sound('sound/misc/server-ready.ogg'))
@@ -785,7 +742,8 @@ SUBSYSTEM_DEF(vote)
submit_vote(round(text2num(href_list["vote"])),round(text2num(href_list["score"])))
else
submit_vote(round(text2num(href_list["vote"])))
usr.vote()
if(!href_list["statpannel"])
usr.vote()
/datum/controller/subsystem/vote/proc/remove_action_buttons()
for(var/v in generated_actions)
+2 -2
View File
@@ -12,7 +12,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////Panels
/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list)
set category = "Admin"
set category = "Admin.Game"
set name = "Show Player Panel"
set desc="Edit player (respawn, ban, heal, etc)"
@@ -211,7 +211,7 @@
/datum/admins/proc/access_news_network() //MARKER
set category = "Fun"
set category = "Admin.Events"
set name = "Access Newscaster Network"
set desc = "Allows you to view, add and edit news feeds."
+1 -1
View File
@@ -6,7 +6,7 @@
/client/proc/investigate_show()
set name = "Investigate"
set category = "Admin"
set category = "Admin.Game"
if(!holder)
return
+14 -14
View File
@@ -348,7 +348,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/admin_ghost()
set category = "Admin"
set category = "Admin.Game"
set name = "Aghost"
if(!holder)
return FALSE
@@ -379,7 +379,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/invisimin()
set name = "Invisimin"
set category = "Admin"
set category = "Admin.Game"
set desc = "Toggles ghost-like invisibility (Don't abuse this)"
if(holder && mob)
if(mob.invisibility == INVISIBILITY_OBSERVER)
@@ -391,7 +391,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/check_antagonists()
set name = "Check Antagonists"
set category = "Admin"
set category = "Admin.Game"
if(holder)
holder.check_antagonists()
log_admin("[key_name(usr)] checked antagonists.") //for tsar~
@@ -411,14 +411,14 @@ GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/game_panel()
set name = "Game Panel"
set category = "Admin"
set category = "Admin.Game"
if(holder)
holder.Game()
SSblackbox.record_feedback("tally", "admin_verb", 1, "Game Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/secrets()
set name = "Secrets"
set category = "Admin"
set category = "Admin.Game"
if (holder)
holder.Secrets()
SSblackbox.record_feedback("tally", "admin_verb", 1, "Secrets Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -472,7 +472,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Stealth Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/drop_bomb()
set category = "Special Verbs"
set category = "Admin.Fun"
set name = "Drop Bomb"
set desc = "Cause an explosion of varying strength at your location."
@@ -514,7 +514,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Bomb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/drop_dynex_bomb()
set category = "Special Verbs"
set category = "Admin.Fun"
set name = "Drop DynEx Bomb"
set desc = "Cause an explosion of varying strength at your location."
@@ -561,7 +561,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
message_admins("[key_name_admin(usr)] has modified Dynamic Explosion Scale: [ex_scale]")
/client/proc/give_spell(mob/T in GLOB.mob_list)
set category = "Fun"
set category = "Admin.Fun"
set name = "Give Spell"
set desc = "Gives a spell to a mob."
@@ -585,7 +585,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
message_admins("<span class='danger'>Spells given to mindless mobs will not be transferred in mindswap or cloning!</span>")
/client/proc/remove_spell(mob/T in GLOB.mob_list)
set category = "Fun"
set category = "Admin.Fun"
set name = "Remove Spell"
set desc = "Remove a spell from the selected mob."
@@ -598,7 +598,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Remove Spell") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/give_disease(mob/living/T in GLOB.mob_living_list)
set category = "Fun"
set category = "Admin.Fun"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
if(!istype(T))
@@ -613,7 +613,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
message_admins("<span class='adminnotice'>[key_name_admin(usr)] gave [key_name(T)] the disease [D].</span>")
/client/proc/object_say(obj/O in world)
set category = "Special Verbs"
set category = "Admin.Events"
set name = "OSay"
set desc = "Makes an object say something."
var/message = input(usr, "What do you want the message to be?", "Make Sound") as text | null
@@ -625,7 +625,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Object Say") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/togglebuildmodeself()
set name = "Toggle Build Mode Self"
set category = "Special Verbs"
set category = "Admin.Events"
if (!(holder.rank.rights & R_BUILDMODE))
return
if(src.mob)
@@ -634,7 +634,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/check_ai_laws()
set name = "Check AI Laws"
set category = "Admin"
set category = "Admin.Game"
if(holder)
src.holder.output_ai_laws()
@@ -717,7 +717,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
/client/proc/toggle_AI_interact()
set name = "Toggle Admin AI Interact"
set category = "Admin"
set category = "Admin.Game"
set desc = "Allows you to interact with most machines as an AI would as a ghost"
AI_Interact = !AI_Interact
+1 -1
View File
@@ -5,7 +5,7 @@
/datum/verbs/menu/Admin/verb/playerpanel()
set name = "Player Panel"
set desc = "Player Panel"
set category = "Admin"
set category = "Admin.Game"
if(usr.client.holder)
usr.client.holder.player_panel_new()
SSblackbox.record_feedback("tally", "admin_verb", 1, "Player Panel New") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+8 -8
View File
@@ -1,7 +1,7 @@
/client/proc/jumptoarea(area/A in GLOB.sortedAreas)
set name = "Jump to Area"
set desc = "Area to jump to"
set category = "Admin"
set category = "Admin.Game"
if(!src.holder)
to_chat(src, "Only administrators may use this command.", confidential = TRUE)
return
@@ -28,7 +28,7 @@
/client/proc/jumptoturf(turf/T in world)
set name = "Jump to Turf"
set category = "Admin"
set category = "Admin.Game"
if(!src.holder)
to_chat(src, "Only administrators may use this command.", confidential = TRUE)
return
@@ -40,7 +40,7 @@
return
/client/proc/jumptomob(mob/M in GLOB.mob_list)
set category = "Admin"
set category = "Admin.Game"
set name = "Jump to Mob"
if(!src.holder)
@@ -59,7 +59,7 @@
to_chat(A, "This mob is not located in the game world.", confidential = TRUE)
/client/proc/jumptocoord(tx as num, ty as num, tz as num)
set category = "Admin"
set category = "Admin.Game"
set name = "Jump to Coordinate"
if (!holder)
@@ -74,7 +74,7 @@
message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]")
/client/proc/jumptokey()
set category = "Admin"
set category = "Admin.Game"
set name = "Jump to Key"
if(!src.holder)
@@ -97,7 +97,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Jump To Key") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/Getmob(mob/M in GLOB.mob_list - GLOB.dummy_mob_list)
set category = "Admin"
set category = "Admin.Game"
set name = "Get Mob"
set desc = "Mob to teleport"
if(!src.holder)
@@ -113,7 +113,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Get Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/Getkey()
set category = "Admin"
set category = "Admin.Game"
set name = "Get Key"
set desc = "Key to teleport"
@@ -141,7 +141,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Get Key") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/sendmob(mob/M in sortmobs())
set category = "Admin"
set category = "Admin.Game"
set name = "Send Mob"
if(!src.holder)
to_chat(src, "Only administrators may use this command.", confidential = TRUE)
+1 -1
View File
@@ -1,5 +1,5 @@
/datum/admins/proc/open_borgopanel(borgo in GLOB.silicon_mobs)
set category = "Admin"
set category = "Admin.Game"
set name = "Show Borg Panel"
set desc = "Show borg panel"
+1 -1
View File
@@ -1,6 +1,6 @@
/client/proc/cinematic()
set name = "cinematic"
set category = "Fun"
set category = "Admin.Fun"
set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted.
set hidden = 1
if(!SSticker)
+1 -1
View File
@@ -1,5 +1,5 @@
/client/proc/dsay(msg as text)
set category = "Special Verbs"
set category = "Admin.Game"
set name = "Dsay"
set hidden = 1
if(!holder)
+35 -8
View File
@@ -27,7 +27,7 @@
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 category = "Admin.Fun"
set name = "Make Robot"
if(!SSticker.HasRoundStarted())
@@ -43,7 +43,7 @@
alert("Invalid mob")
/client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list)
set category = "Fun"
set category = "Admin.Fun"
set name = "Make Blob"
if(!SSticker.HasRoundStarted())
@@ -58,7 +58,7 @@
/client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list)
set category = "Fun"
set category = "Admin.Fun"
set name = "Make Simple Animal"
if(!SSticker.HasRoundStarted())
@@ -79,7 +79,7 @@
/client/proc/makepAI(turf/T in GLOB.mob_list)
set category = "Fun"
set category = "Admin.Fun"
set name = "Make pAI"
set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
@@ -106,7 +106,7 @@
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 category = "Admin.Fun"
set name = "Make Alien"
if(!SSticker.HasRoundStarted())
@@ -121,7 +121,7 @@
alert("Invalid mob")
/client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list)
set category = "Fun"
set category = "Admin.Fun"
set name = "Make slime"
if(!SSticker.HasRoundStarted())
@@ -211,7 +211,7 @@
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"
set category = "Admin.Game"
set name = "Assume direct control"
set desc = "Direct intervention"
@@ -229,6 +229,33 @@
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
M.client?.init_verbs()
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"
@@ -455,7 +482,7 @@
cmd_admin_areatest(FALSE)
/client/proc/cmd_admin_dress(mob/M in GLOB.mob_list)
set category = "Fun"
set category = "Admin.Events"
set name = "Select equipment"
if(!(ishuman(M) || isobserver(M)))
alert("Invalid mob")
+1 -1
View File
@@ -1,5 +1,5 @@
/client/proc/roll_dices()
set category = "Fun"
set category = "Admin.Fun"
set name = "Roll Dice"
if(!check_rights(R_FUN))
return
+1 -1
View File
@@ -1,7 +1,7 @@
/client/proc/one_click_antag()
set name = "Create Antagonist"
set desc = "Auto-create an antagonist of your choice"
set category = "Admin"
set category = "Admin.Events"
if(holder)
holder.one_click_antag()
+5 -5
View File
@@ -1,5 +1,5 @@
/client/proc/play_sound(S as sound)
set category = "Fun"
set category = "Admin.Fun"
set name = "Play Global Sound"
if(!check_rights(R_SOUNDS))
return
@@ -42,7 +42,7 @@
/client/proc/play_local_sound(S as sound)
set category = "Fun"
set category = "Admin.Fun"
set name = "Play Local Sound"
if(!check_rights(R_SOUNDS))
return
@@ -53,7 +53,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Local Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/play_web_sound()
set category = "Fun"
set category = "Admin.Fun"
set name = "Play Internet Sound"
if(!check_rights(R_SOUNDS))
return
@@ -136,7 +136,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Internet Sound")
/client/proc/manual_play_web_sound()
set category = "Fun"
set category = "Admin.Fun"
set name = "Manual Play Internet Sound"
if(!check_rights(R_SOUNDS))
return
@@ -182,7 +182,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Manual Play Internet Sound")
/client/proc/set_round_end_sound(S as sound)
set category = "Fun"
set category = "Admin.Fun"
set name = "Set Round End Sound"
if(!check_rights(R_SOUNDS))
return
+70 -29
View File
@@ -20,7 +20,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Everything") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_subtle_message(mob/M in GLOB.mob_list)
set category = "Special Verbs"
set category = "Admin.Events"
set name = "Subtle Message"
if(!ismob(M))
@@ -46,7 +46,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Subtle Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_headset_message(mob/M in GLOB.mob_list)
set category = "Special Verbs"
set category = "Admin.Events"
set name = "Headset Message"
admin_headset_message(M)
@@ -128,7 +128,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Modify Antagonist Reputation") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_world_narrate()
set category = "Special Verbs"
set category = "Admin.Events"
set name = "Global Narrate"
if(!check_rights(R_ADMIN))
@@ -144,7 +144,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Global Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_direct_narrate(mob/M)
set category = "Special Verbs"
set category = "Admin.Events"
set name = "Direct Narrate"
if(!check_rights(R_ADMIN))
@@ -169,7 +169,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Direct Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_local_narrate(atom/A)
set category = "Special Verbs"
set category = "Admin.Events"
set name = "Local Narrate"
if(!check_rights(R_ADMIN))
@@ -190,7 +190,7 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Local Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_godmode(mob/M in GLOB.mob_list)
set category = "Special Verbs"
set category = "Admin.Game"
set name = "Godmode"
if(!check_rights(R_ADMIN))
return
@@ -335,7 +335,7 @@ Works kind of like entering the game with a new character. Character receives a
Traitors and the like can also be revived with the previous role mostly intact.
/N */
/client/proc/respawn_character()
set category = "Special Verbs"
set category = "Admin.Game"
set name = "Respawn Character"
set desc = "Respawn a person that has been gibbed/dusted/killed. They must be a ghost for this to work and preferably should not have a body to go back into."
if(!check_rights(R_ADMIN))
@@ -503,7 +503,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
return new_character
/client/proc/cmd_admin_add_freeform_ai_law()
set category = "Fun"
set category = "Admin.Events"
set name = "Add Custom AI law"
if(!check_rights(R_ADMIN))
@@ -546,7 +546,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
SSblackbox.record_feedback("tally", "admin_verb", 1, "Rejuvinate") //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 category = "Admin.Events"
set name = "Create Command Report"
if(!check_rights(R_ADMIN))
@@ -572,7 +572,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_change_command_name()
set category = "Special Verbs"
set category = "Admin.Events"
set name = "Change Command Name"
if(!check_rights(R_ADMIN))
@@ -595,7 +595,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
admin_delete(A)
/client/proc/cmd_admin_list_open_jobs()
set category = "Admin"
set category = "Admin.Game"
set name = "Manage Job Slots"
if(!check_rights(R_ADMIN))
@@ -604,7 +604,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
SSblackbox.record_feedback("tally", "admin_verb", 1, "Manage Job Slots") //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 category = "Admin.Fun"
set name = "Explosion"
if(!check_rights(R_ADMIN))
@@ -640,7 +640,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
/client/proc/cmd_admin_emp(atom/O as obj|mob|turf in world)
set category = "Special Verbs"
set category = "Admin.Fun"
set name = "EM Pulse"
if(!check_rights(R_ADMIN))
@@ -656,7 +656,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
SSblackbox.record_feedback("tally", "admin_verb", 1, "EM Pulse") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_gib(mob/M in GLOB.mob_list)
set category = "Special Verbs"
set category = "Admin.Fun"
set name = "Gib"
if(!check_rights(R_ADMIN))
@@ -683,7 +683,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/cmd_admin_gib_self()
set name = "Gibself"
set category = "Fun"
set category = "Admin.Fun"
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm == "Yes")
@@ -702,7 +702,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Contents") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_view_range()
set category = "Special Verbs"
set category = "Admin.Game"
set name = "Change View Range"
set desc = "switches between 1x and custom views"
@@ -717,8 +717,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Change View Range", "[view]")) //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 category = "Admin.Events"
set name = "Call Shuttle"
if(EMERGENCY_AT_LEAST_DOCKED)
@@ -738,7 +737,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
/client/proc/admin_cancel_shuttle()
set category = "Admin"
set category = "Admin.Events"
set name = "Cancel Shuttle"
if(!check_rights(0))
return
@@ -754,9 +753,51 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("<span class='adminnotice'>[key_name_admin(usr)] admin-recalled the emergency shuttle.</span>")
return
/*
/client/proc/admin_disable_shuttle()
set category = "Admin.Events"
set name = "Disable Shuttle"
if(!check_rights(R_ADMIN))
return
if(SSshuttle.emergency.mode == SHUTTLE_DISABLED)
to_chat(usr, "<span class='warning'>Error, shuttle is already disabled.</span>")
return
if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes")
return
message_admins("<span class='adminnotice'>[key_name_admin(usr)] disabled the shuttle.</span>")
SSshuttle.lastMode = SSshuttle.emergency.mode
SSshuttle.lastCallTime = SSshuttle.emergency.timeLeft(1)
SSshuttle.adminEmergencyNoRecall = TRUE
SSshuttle.emergency.setTimer(0)
SSshuttle.emergency.mode = SHUTTLE_DISABLED
priority_announce("Warning: Emergency Shuttle uplink failure, shuttle disabled until further notice.", "Emergency Shuttle Uplink Alert", 'sound/misc/announce_dig.ogg')
/client/proc/admin_enable_shuttle()
set category = "Admin - Events"
set category = "Admin.Events"
set name = "Enable Shuttle"
if(!check_rights(R_ADMIN))
return
if(SSshuttle.emergency.mode != SHUTTLE_DISABLED)
to_chat(usr, "<span class='warning'>Error, shuttle not disabled.</span>")
return
if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes")
return
message_admins("<span class='adminnotice'>[key_name_admin(usr)] enabled the emergency shuttle.</span>")
SSshuttle.adminEmergencyNoRecall = FALSE
SSshuttle.emergencyNoRecall = FALSE
if(SSshuttle.lastMode == SHUTTLE_DISABLED) //If everything goes to shit, fix it.
SSshuttle.lastMode = SHUTTLE_IDLE
SSshuttle.emergency.mode = SSshuttle.lastMode
if(SSshuttle.lastCallTime < 10 SECONDS && SSshuttle.lastMode != SHUTTLE_IDLE)
SSshuttle.lastCallTime = 10 SECONDS //Make sure no insta departures.
SSshuttle.emergency.setTimer(SSshuttle.lastCallTime)
priority_announce("Warning: Emergency Shuttle uplink reestablished, shuttle enabled.", "Emergency Shuttle Uplink Alert", 'sound/misc/announce_dig.ogg')
*/
/client/proc/everyone_random()
set category = "Fun"
set category = "Admin.Fun"
set name = "Make Everyone Random"
set desc = "Make everyone have a random appearance. You can only use this before rounds!"
@@ -804,7 +845,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/admin_change_sec_level()
set category = "Special Verbs"
set category = "Admin.Events"
set name = "Set Security Level"
set desc = "Changes the security level. Announcement only, i.e. setting to Delta won't activate nuke"
@@ -821,7 +862,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in GLOB.nuke_list)
set name = "Toggle Nuke"
set category = "Fun"
set category = "Admin.Events"
set popup_menu = 0
if(!check_rights(R_DEBUG))
return
@@ -1016,7 +1057,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
usr << browse(dat, "window=dressup;size=550x600")
/client/proc/toggle_combo_hud()
set category = "Admin"
set category = "Admin.Game"
set name = "Toggle Combo HUD"
set desc = "Toggles the Admin Combo HUD (antag, sci, med, eng)"
@@ -1051,7 +1092,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
/client/proc/run_weather()
set category = "Fun"
set category = "Admin.Events"
set name = "Run Weather"
set desc = "Triggers a weather on the z-level you choose."
@@ -1075,7 +1116,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
SSblackbox.record_feedback("tally", "admin_verb", 1, "Run Weather")
/client/proc/mass_zombie_infection()
set category = "Fun"
set category = "Admin.Fun"
set name = "Mass Zombie Infection"
set desc = "Infects all humans with a latent organ that will zombify \
them on death."
@@ -1095,7 +1136,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Infection")
/client/proc/mass_zombie_cure()
set category = "Fun"
set category = "Admin.Fun"
set name = "Mass Zombie Cure"
set desc = "Removes the zombie infection from all humans, returning them to normal."
if(!check_rights(R_ADMIN))
@@ -1113,7 +1154,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Cure")
/client/proc/polymorph_all()
set category = "Fun"
set category = "Admin.Fun"
set name = "Polymorph All"
set desc = "Applies the effects of the bolt of change to every single mob."
@@ -1203,7 +1244,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Hub Visibility", "[GLOB.hub_visibility ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_toggle_fov()
set category = "Fun"
set category = "Admin.Fun"
set name = "Enable/Disable Field of Vision"
var/static/busy_toggling_fov = FALSE
@@ -1256,7 +1297,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
/client/proc/smite(mob/living/carbon/human/target as mob)
set name = "Smite"
set category = "Fun"
set category = "Admin.Fun"
if(!check_rights(R_ADMIN) || !check_rights(R_FUN))
return
+1 -1
View File
@@ -1,5 +1,5 @@
/datum/admins/proc/open_shuttlepanel()
set category = "Admin"
set category = "Admin.Events"
set name = "Shuttle Manipulator"
set desc = "Opens the shuttle manipulator UI."
+1 -1
View File
@@ -1,5 +1,5 @@
/client/proc/triple_ai()
set category = "Fun"
set category = "Admin.Events"
set name = "Create AI Triumvirate"
if(SSticker.current_state > GAME_STATE_PREGAME)
+1 -1
View File
@@ -12,7 +12,7 @@
/client/proc/centcom_podlauncher() //Creates a verb for admins to open up the ui
set name = "Config/Launch Supplypod"
set desc = "Configure and launch a CentCom supplypod full of whatever your heart desires!"
set category = "Admin"
set category = "Admin.Events"
var/datum/centcom_podlauncher/plaunch = new(usr)//create the datum
plaunch.ui_interact(usr)//datum has a tgui component, here we open the window
+5 -5
View File
@@ -386,7 +386,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
//Admin Preferences
/client/proc/toggleadminhelpsound()
set name = "Hear/Silence Adminhelps"
set category = "Preferences"
set category = "Preferences.Admin"
set desc = "Toggle hearing a notification when admin PMs are received"
if(!holder)
return
@@ -397,7 +397,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/toggleannouncelogin()
set name = "Do/Don't Announce Login"
set category = "Preferences"
set category = "Preferences.Admin"
set desc = "Toggle if you want an announcement to admins when you login during a round"
if(!holder)
return
@@ -408,7 +408,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/toggle_hear_radio()
set name = "Show/Hide Radio Chatter"
set category = "Preferences"
set category = "Preferences.Admin"
set desc = "Toggle seeing radiochatter from nearby radios and speakers"
if(!holder)
return
@@ -419,7 +419,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/deadchat()
set name = "Show/Hide Deadchat"
set category = "Preferences"
set category = "Preferences.Admin"
set desc ="Toggles seeing deadchat"
prefs.chat_toggles ^= CHAT_DEAD
prefs.save_preferences()
@@ -428,7 +428,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS
/client/proc/toggleprayers()
set name = "Show/Hide Prayers"
set category = "Preferences"
set category = "Preferences.Admin"
set desc = "Toggles seeing prayers"
prefs.chat_toggles ^= CHAT_PRAYER
prefs.save_preferences()
+3 -3
View File
@@ -111,16 +111,16 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
/client/proc/set_ooc(newColor as color)
set name = "Set Player OOC Color"
set desc = "Modifies player OOC Color"
set category = "Fun"
set category = "Admin.Fun"
GLOB.OOC_COLOR = sanitize_ooccolor(newColor)
/client/proc/reset_ooc()
set name = "Reset Player OOC Color"
set desc = "Returns player OOC Color to default"
set category = "Fun"
set category = "Admin.Fun"
GLOB.OOC_COLOR = null
/client/verb/colorooc()
/client/verb/colorooc() //this is admin and people who bought byond.
set name = "Set Your OOC Color"
set category = "Preferences"
@@ -50,7 +50,7 @@
plantname = "Fairygrass"
product = /obj/item/reagent_containers/food/snacks/grown/grass/fairy
icon_grow = "fairygrass-grow"
icon_dead = "fairygrass-dead"
icon_dead = "grass-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/blue)
mutatelist = list (/obj/item/seeds/grass/carpet)
reagents_add = list(/datum/reagent/consumable/nutriment = 0.02, /datum/reagent/hydrogen = 0.05, /datum/reagent/drug/space_drugs = 0.15)
@@ -193,6 +193,8 @@
growthstages = 3
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
icon_grow = "chanter-grow"
icon_dead = "chanter-dead"
reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
mutatelist = list(/obj/item/seeds/chanterelle/jupitercup)
@@ -0,0 +1,4 @@
author: "TheObserver-sys"
delete-after: True
changes:
- bugfix: "Drake? Where's the dead fairygrass sprite?"
+265 -177
View File
@@ -7,149 +7,172 @@
<meta http-equiv="Cache-Control" content="max-age=15; must-revalidate" />
<link id="goonStyle" rel="stylesheet" type="text/css" href="browserOutput_white.css" media="all" />
<style>
body {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: 12px !important;
margin: 0 !important;
padding: 0 !important;
}
body.dark {
background-color: #131313;
color: #abc6ec;
}
body {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: 12px !important;
margin: 0 !important;
padding: 0 !important;
}
body.dark {
background-color: #131313;
color: #abc6ec;
}
#menu {
background-color: white;
position: fixed;
padding: 7px;
width: 100%;
}
.dark #menu {
background-color: #131313;
}
#menu {
background-color: #F0F0F0;
position: fixed;
width: 100%;
}
#statcontent {
padding: 0 7px 7px 7px;
}
.dark #menu {
background-color: #202020;
}
a {
color: black;
text-decoration: none
}
.dark a {
color: #abc6ec;
}
a:hover, .dark a:hover {
text-decoration: underline;
}
#statcontent {
padding: 7px 7px 7px 7px;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
background-color: #333;
}
a {
color: black;
text-decoration: none
}
li {
float: left;
}
.dark a {
color: #abc6ec;
}
li a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
a:hover, .dark a:hover {
text-decoration: underline;
}
li a:hover:not(.active) {
background-color: #111;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
background-color: #333;
}
.button-container {
display: inline-flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: flex-start;
align-items: flex-start;
min-width: 0;
min-height: 0;
white-space: pre-wrap;
}
.button {
background-color: #FFFFFE;
border-color: rgba(255, 255, 254, 0.5);
border-width: 1px;
color: black;
padding: 7px 14px;
text-align: center;
text-decoration: none;
font-size: 12px;
margin: 2px 2px;
cursor: pointer;
border-radius: 10%;
transition-duration: 0.25s;
order: 3;
}
.dark button {
background-color: #252525;
border-color: rgba(37, 37, 36, 0.5);
color: white;
}
.button:hover {
border-color: rgba(255, 255, 254, 0.5);
background-color: #252525;
color: white;
}
.dark button:hover {
border-color: rgba(37, 37, 36, 0.5);
background-color: #FFFFFE;
color: #252525;
}
.button:active, .button.active {
text-decoration: underline;
}
.grid-container {
display: inline-flex;
flex-wrap: wrap;
justify-content: flex-start;
align-items: flex-start;
min-width: 0;
min-height: 0;
white-space: pre-wrap;
}
.grid-item {
color: black;
width: 150px;
font-size: 11px;
line-height: 24px;
text-align: left;
min-width: 0;
min-height: 0;
white-space: pre-wrap;
padding-right: 12px; /* A little more than two spaces, to look good in IE8 where flex-justify does nothing */
}
.link {
display: inline;
background: none;
border: none;
padding: 7px 14px;
color: black;
text-decoration: none;
cursor: pointer;
font-size: 13px;
margin: 2px 2px;
}
.dark .link {
color: #abc6ec;
}
.link:hover {
text-decoration: underline;
}
img {
-ms-interpolation-mode: nearest-neighbor;
image-rendering: pixelated;
}
li {
float: left;
}
li a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover:not(.active) {
background-color: #111;
}
.button-container {
display: inline-flex;
flex-wrap: wrap-reverse;
flex-direction: row;
align-items: flex-start;
overflow-x: hidden;
white-space: pre-wrap;
padding: 0 4px;
}
.button {
background-color: #dfdfdf;
border-color: #cecece;
border-width: 1px;
border-style: solid;
color: rgba(0, 0, 0, 0.7);
padding: 6px 4px;
text-align: center;
text-decoration: none;
font-size: 12px;
margin: 0;
cursor: pointer;
transition-duration: 0.25s;
order: 3;
min-width: 40px;
}
.dark button {
background-color: #444444;
border-color: #343434;
color: rgba(255, 255, 255, 0.7);
}
.button:hover {
background-color: #ececec;
}
.dark button:hover {
background-color: #4d4d4d;
}
.button:active, .button.active {
background-color: #ffffff;
color: black;
border-top: 1px solid #cecece;
border-left: 1px solid #cecece;
border-right: 1px solid #cecece;
border-bottom: 1px solid #ffffff;
}
.dark .button:active, .dark .button.active {
background-color: #131313;
color: white;
border-top: 1px solid #343434;
border-left: 1px solid #343434;
border-right: 1px solid #343434;
border-bottom: 1px solid #131313;
}
.grid-container {
display: inline-flex;
flex-wrap: wrap;
justify-content: flex-start;
align-items: flex-start;
min-width: 0;
min-height: 0;
white-space: pre-wrap;
}
.grid-item {
color: black;
width: 150px;
font-size: 11px;
line-height: 24px;
text-align: left;
min-width: 0;
min-height: 0;
white-space: pre-wrap;
padding-right: 12px; /* A little more than two spaces, to look good in IE8 where flex-justify does nothing */
}
.link {
display: inline;
background: none;
border: none;
padding: 7px 14px;
color: black;
text-decoration: none;
cursor: pointer;
font-size: 13px;
margin: 2px 2px;
}
.dark .link {
color: #abc6ec;
}
.link:hover {
text-decoration: underline;
}
img {
-ms-interpolation-mode: nearest-neighbor;
image-rendering: pixelated;
}
</style>
</head>
<body>
@@ -267,9 +290,10 @@ if (window.location) {
}); */
// Status panel implementation ------------------------------------------------
var status_tab_parts = ["loading..."];
var status_tab_parts = ["Loading..."];
var current_tab = null;
var mc_tab_parts = [["loading...", ""]];
var mc_tab_parts = [["Loading...", ""]];
var vote_parts = [[null]];
var href_token = null;
var spells = [];
var spell_tabs = [];
@@ -288,6 +312,8 @@ var statcontentdiv = document.querySelector('#statcontent');
var storedimages = [];
function createStatusTab(name) {
if (name.indexOf(".") != -1)
name = name.split(".")[0];
if(document.getElementById(name) || name.trim() == "")
return;
if(!verb_tabs.includes(name) && !permanent_tabs.includes(name))
@@ -302,12 +328,8 @@ function createStatusTab(name) {
B.className = "button";
//ORDERING ALPHABETICALLY
B.style.order = name.charCodeAt(0);
if(name == "Status" || name == "MC") {
if(name == "Status")
B.style.order = 1;
else
B.style.order = 2;
}
if(name == "Status" || name == "MC")
B.style.order = name == "Status" ? 1 : 2;
//END ORDERING
menu.appendChild(B);
SendTabToByond(name);
@@ -327,6 +349,19 @@ function removeStatusTab(name) {
under_menu.style.height = menu.clientHeight + 'px';
}
function sortVerbs() {
verbs.sort(function (a, b) {
var selector = a[0] == b[0] ? 1 : 0;
if (a[selector].toUpperCase() < b[selector].toUpperCase()) {
return 1;
}
else if (a[selector].toUpperCase() > b[selector].toUpperCase()) {
return -1;
}
return 0;
})
}
window.onresize = function () {
under_menu.style.height = menu.clientHeight + 'px';
}
@@ -365,19 +400,19 @@ function check_verbs() {
for(var v = verb_tabs.length - 1; v >= 0; v--){
verbs_cat_check(verb_tabs[v]);
}
//checkStatusTab(); // removes any empty status tabs
}
function verbs_cat_check(cat) {
var tabCat = cat.indexOf(".") != -1 ? cat.split(".")[0] : cat;
var verbs_in_cat = 0;
var verbcat = "";
if(!verb_tabs.includes(cat)){
removeStatusTab(cat);
if(!verb_tabs.includes(tabCat)){
removeStatusTab(tabCat);
return;
}
for(var v = 0; v < verbs.length; v++){
var part = verbs[v];
verbcat = part[0];
verbcat = part[0].indexOf(".") != -1 ? part[0].split(".") : part[0];
if(verbcat != cat || verbcat.trim() == ""){
continue;
}
@@ -387,8 +422,8 @@ function verbs_cat_check(cat) {
}
}
if(verbs_in_cat != 1) {
removeStatusTab(cat);
if(current_tab == cat)
removeStatusTab(tabCat);
if(current_tab == tabCat)
tab_change("Status");
}
}
@@ -411,17 +446,20 @@ function add_verb_list(v) {
to_add.sort(); // sort what we're adding
for(var i = 0; i < to_add.length; i++) {
var part = to_add[i];
if (!part[0])
continue;
var category = part[0].indexOf(".") == -1 ? part[0] : part[0].split(".")[0]
if(findVerbindex(part[1], verbs))
continue;
if(verb_tabs.includes(part[0])){
if(verb_tabs.includes(category)){
verbs.push(part);
if(current_tab == part[0]) {
draw_verbs(part[0]); // redraw if we added a verb to the tab we're currently in
if(current_tab == category) {
draw_verbs(category); // redraw if we added a verb to the tab we're currently in
}
} else if(part[0]) {
verb_tabs.push(part[0]);
} else if(category) {
verb_tabs.push(category);
verbs.push(part);
createStatusTab(part[0]);
createStatusTab(category);
}
}
}
@@ -432,7 +470,7 @@ function remove_verb_list(v) {
remove_verb(to_remove[i]);
}
check_verbs();
verbs.sort();
sortVerbs();
if(verb_tabs.includes(current_tab))
draw_verbs(current_tab);
}
@@ -455,7 +493,7 @@ function init_verbs(c, v) {
}
if(v) {
add_verb_list(v);
verbs.sort(); // sort them
sortVerbs(); // sort them
if(do_update) {
draw_verbs(current_tab);
}
@@ -491,6 +529,12 @@ function update(global_data, ping_entry, other_entries) {
else if(current_tab == "Debug Stat Panel")
draw_debug();
}
/// citadel statvoting
function update_voting(vote_data) {
vote_parts = JSON.parse(vote_data);
if(current_tab == "Status")
draw_status();
}
function update_mc(global_mc_data, coords_entry) {
mc_tab_parts = JSON.parse(global_mc_data);
@@ -586,7 +630,7 @@ function tab_change(tab) {
}else if(tab == turfname) {
draw_listedturf();
} else {
statcontentdiv[textContentKey] = "loading...";
statcontentdiv[textContentKey] = "Loading...";
}
window.location.href = "byond://winset?statbrowser.is-visible=true";
}
@@ -667,6 +711,33 @@ function draw_status() {
document.getElementById("statcontent").appendChild(div);
}
}
//voting shitcode. See mc for more info.
if(vote_parts && vote_parts[0][0]) { //null verification.
var table = document.createElement("table");
for(var i = 0; i < vote_parts.length; i++) {
var part = vote_parts[i];
var tr = document.createElement("tr");
var td1 = document.createElement("td");
td1[textContentKey] = part[0];
var td2 = document.createElement("td");
if(part[2]) {
var a = document.createElement("a");
if(part[2] === "disabled") {
a.href = "byond://winset?command=Vote";
} else {
a.href = "?src=" + part[2];
}
a[textContentKey] = part[1];
td2.appendChild(a);
} else {
td2[textContentKey] = part[1];
}
tr.appendChild(td1);
tr.appendChild(td2);
table.appendChild(tr);
}
document.getElementById("statcontent").appendChild(table);
}
if(verb_tabs.length == 0 || !verbs)
{
window.location.href = "byond://winset?command=Fix-Stat-Panel";
@@ -912,29 +983,46 @@ function draw_spells(cat) {
function draw_verbs(cat){
statcontentdiv[textContentKey] = "";
var table = document.createElement("newdiv");
var table = document.createElement("div");
var additions = {}; // additional sub-categories to be rendered
table.className = "grid-container";
var command = ""; // typecast name to string
verbs.sort();
sortVerbs();
verbs.reverse(); // sort verbs backwards before we draw
for(var i = verbs.length - 1; i >= 0; i--) {
var part = verbs[i]; // should be a list containing category and command
if(!part[1]) continue;
if(part[0] != cat){
continue;
for (var i = 0; i < verbs.length; ++i) {
var part = verbs[i];
var name = part[0];
var command = part[1];
if (command && name.lastIndexOf(cat, 0) != -1 && (name.length == cat.length || name.charAt(cat.length) == ".")) {
var subCat = name.lastIndexOf(".") != -1 ? name.split(".")[1] : null;
if (subCat && !additions[subCat]) {
var newTable = document.createElement("div");
newTable.className = "grid-container";
additions[subCat] = newTable;
}
var a = document.createElement("a");
a.href = "byond://winset?command=" + command.replace(/\s/g, "-");
a[textContentKey] = command;
a.className = "grid-item";
(subCat ? additions[subCat] : table).appendChild(a);
}
}
// Append base table to view
var content = document.getElementById("statcontent");
content.appendChild(table);
// Append additional sub-categories if relevant
for (var cat in additions) {
if (additions.hasOwnProperty(cat)) {
// do addition here
var header = document.createElement("h3");
header[textContentKey] = cat;
content.appendChild(header);
content.appendChild(additions[cat]);
}
if(part[0].trim() == ""){
verbs.splice(i, 1);
continue;
}
command = part[1];
var a = document.createElement("a");
a.href = "byond://winset?command=" + command.replace(/\s/g, "-");
a[textContentKey] = command;
a.className = "grid-item";
table.appendChild(a);
}
document.getElementById("statcontent").appendChild(table);
}
function set_theme(which) {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB