mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-14 19:51:59 +00:00
* Adds Preferences To Suppress Ghost Role Rolls (#68102) Hey there, Ever since November of 2021, I've wanted something where I could simply not get any ghost roles while adminned. Some people also do not want to get any ghost rolls whatsoever when they play, for it is their personal preference. This PR seeks to resolve both of these issues with two new preferences. The first preference will show up to everyone, Suppress All Ghost Rolls. It will return on the main proc that pops up the window, does the sound, all that. You will not hear a peep of a word out of your game. This is dangerous if you like playing as ghost roles, but if you abhor the thought of it... it's just for you. The second preference is for admins. You can selectively suppress ghost roles while adminned. This is useful because when you're running an event or doing stuff where you need to offer multiple ghost roles (or you need to focus on a ticket and someone is spamming Xenobiology mob spawns), this is absolutely perfect for suppressing. Same return as the player option, but it checks to see if you are currently adminned via the client.holder variable. This is just because some admins (i'm some admins) don't want to turn in on just in case they forget to turn it off down the line because they actually play the game (lying). There's probably a much cleaner way to do this code-wise, but I couldn't figure it out. Any help is appreciated. I tested it extensively on my local (even using a guest account), and everything seems to work rather nicely after about an hour of trial-and-error. Why It's Good For The Game Players who want to just alt-tab or maybe chill in deadchat (or have an extreme loathing of ghost roles) can just simply not get any of that. Admins who want to focus on tickets and not have windows pop up to interfere in good administrative work (and be the most annoying thing in the world) can also do that. Everyone is happy. Changelog cl qol: There is now a new preference in Game Preferences, Suppress All Ghost Rolls. If you tick this preference, you will not get a singular window pop-up whenever a Ghost Role is available. Intended for the few who really do need it. admin: Admins get another additional preference where Suppress All Ghost Roles only works while they are currently in an adminned state. They will still get ghost rolls normally when they are in a deadminned state. /cl * Adds Preferences To Suppress Ghost Role Rolls Co-authored-by: san7890 <the@san7890.com>
185 lines
5.2 KiB
Plaintext
185 lines
5.2 KiB
Plaintext
/// Determines what accessories your ghost will look like they have.
|
|
/datum/preference/choiced/ghost_accessories
|
|
savefile_key = "ghost_accs"
|
|
savefile_identifier = PREFERENCE_PLAYER
|
|
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
|
|
|
/datum/preference/choiced/ghost_accessories/init_possible_values()
|
|
return list(GHOST_ACCS_NONE, GHOST_ACCS_DIR, GHOST_ACCS_FULL)
|
|
|
|
/datum/preference/choiced/ghost_accessories/create_default_value()
|
|
return GHOST_ACCS_DEFAULT_OPTION
|
|
|
|
/datum/preference/choiced/ghost_accessories/apply_to_client(client/client, value)
|
|
var/mob/dead/observer/ghost = client.mob
|
|
if (!istype(ghost))
|
|
return
|
|
|
|
ghost.ghost_accs = value
|
|
ghost.update_appearance()
|
|
|
|
/datum/preference/choiced/ghost_accessories/deserialize(input, datum/preferences/preferences)
|
|
// Old ghost preferences used to be 1/50/100.
|
|
// Whoever did that wasted an entire day of my time trying to get those sent
|
|
// properly, so I'm going to buck them.
|
|
if (isnum(input))
|
|
switch (input)
|
|
if (1)
|
|
input = GHOST_ACCS_NONE
|
|
if (50)
|
|
input = GHOST_ACCS_DIR
|
|
if (100)
|
|
input = GHOST_ACCS_FULL
|
|
|
|
return ..(input)
|
|
|
|
/// Determines the appearance of your ghost to others, when you are a BYOND member
|
|
/datum/preference/choiced/ghost_form
|
|
savefile_key = "ghost_form"
|
|
savefile_identifier = PREFERENCE_PLAYER
|
|
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
|
should_generate_icons = TRUE
|
|
|
|
var/static/list/ghost_forms = list(
|
|
"catghost" = "Cat",
|
|
"ghost" = "Default",
|
|
"ghost_black" = "Black",
|
|
"ghost_blazeit" = "Blaze it",
|
|
"ghost_blue" = "Blue",
|
|
"ghost_camo" = "Camo",
|
|
"ghost_cyan" = "Cyan",
|
|
"ghost_dblue" = "Dark blue",
|
|
"ghost_dcyan" = "Dark cyan",
|
|
"ghost_dgreen" = "Dark green",
|
|
"ghost_dpink" = "Dark pink",
|
|
"ghost_dred" = "Dark red",
|
|
"ghost_dyellow" = "Dark yellow",
|
|
"ghost_fire" = "Fire",
|
|
"ghost_funkypurp" = "Funky purple",
|
|
"ghost_green" = "Green",
|
|
"ghost_grey" = "Grey",
|
|
"ghost_mellow" = "Mellow",
|
|
"ghost_pink" = "Pink",
|
|
"ghost_pinksherbert" = "Pink Sherbert",
|
|
"ghost_purpleswirl" = "Purple Swirl",
|
|
"ghost_rainbow" = "Rainbow",
|
|
"ghost_red" = "Red",
|
|
"ghost_yellow" = "Yellow",
|
|
"ghostian2" = "Ian",
|
|
"ghostking" = "King",
|
|
"skeleghost" = "Skeleton",
|
|
)
|
|
|
|
/datum/preference/choiced/ghost_form/init_possible_values()
|
|
var/list/values = list()
|
|
|
|
for (var/ghost_form in ghost_forms)
|
|
values[ghost_form] = icon('icons/mob/mob.dmi', ghost_form)
|
|
|
|
return values
|
|
|
|
/datum/preference/choiced/ghost_form/create_default_value()
|
|
return "ghost"
|
|
|
|
/datum/preference/choiced/ghost_form/apply_to_client(client/client, value)
|
|
var/mob/dead/observer/ghost = client.mob
|
|
if (!istype(ghost))
|
|
return
|
|
|
|
if (!client.is_content_unlocked())
|
|
return
|
|
|
|
ghost.update_icon(ALL, value)
|
|
|
|
/datum/preference/choiced/ghost_form/compile_constant_data()
|
|
var/list/data = ..()
|
|
|
|
data[CHOICED_PREFERENCE_DISPLAY_NAMES] = ghost_forms
|
|
|
|
return data
|
|
|
|
/// Toggles the HUD for ghosts
|
|
/datum/preference/toggle/ghost_hud
|
|
savefile_key = "ghost_hud"
|
|
savefile_identifier = PREFERENCE_PLAYER
|
|
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
|
|
|
/datum/preference/toggle/ghost_hud/apply_to_client(client/client, value)
|
|
if (isobserver(client?.mob))
|
|
client?.mob.hud_used?.show_hud()
|
|
|
|
/// Determines what ghosts orbiting look like to you.
|
|
/datum/preference/choiced/ghost_orbit
|
|
savefile_key = "ghost_orbit"
|
|
savefile_identifier = PREFERENCE_PLAYER
|
|
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
|
|
|
/datum/preference/choiced/ghost_orbit/init_possible_values()
|
|
return list(
|
|
GHOST_ORBIT_CIRCLE,
|
|
GHOST_ORBIT_TRIANGLE,
|
|
GHOST_ORBIT_SQUARE,
|
|
GHOST_ORBIT_HEXAGON,
|
|
GHOST_ORBIT_PENTAGON,
|
|
)
|
|
|
|
/datum/preference/choiced/ghost_orbit/apply_to_client(client/client, value)
|
|
var/mob/dead/observer/ghost = client.mob
|
|
if (!istype(ghost))
|
|
return
|
|
|
|
if (!client.is_content_unlocked())
|
|
return
|
|
|
|
ghost.ghost_orbit = value
|
|
|
|
/// Determines how to show other ghosts
|
|
/datum/preference/choiced/ghost_others
|
|
savefile_key = "ghost_others"
|
|
savefile_identifier = PREFERENCE_PLAYER
|
|
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
|
|
|
/datum/preference/choiced/ghost_others/init_possible_values()
|
|
return list(
|
|
GHOST_OTHERS_SIMPLE,
|
|
GHOST_OTHERS_DEFAULT_SPRITE,
|
|
GHOST_OTHERS_THEIR_SETTING,
|
|
)
|
|
|
|
/datum/preference/choiced/ghost_others/create_default_value()
|
|
return GHOST_OTHERS_DEFAULT_OPTION
|
|
|
|
/datum/preference/choiced/ghost_others/apply_to_client(client/client, value)
|
|
var/mob/dead/observer/ghost = client.mob
|
|
if (!istype(ghost))
|
|
return
|
|
|
|
ghost.update_sight()
|
|
|
|
/datum/preference/choiced/ghost_others/deserialize(input, datum/preferences/preferences)
|
|
// Old ghost preferences used to be 1/50/100.
|
|
// Whoever did that wasted an entire day of my time trying to get those sent
|
|
// properly, so I'm going to buck them.
|
|
if (isnum(input))
|
|
switch (input)
|
|
if (1)
|
|
input = GHOST_OTHERS_SIMPLE
|
|
if (50)
|
|
input = GHOST_OTHERS_DEFAULT_SPRITE
|
|
if (100)
|
|
input = GHOST_OTHERS_THEIR_SETTING
|
|
|
|
return ..(input, preferences)
|
|
|
|
/// Whether or not ghosts can examine things by clicking on them.
|
|
/datum/preference/toggle/inquisitive_ghost
|
|
savefile_key = "inquisitive_ghost"
|
|
savefile_identifier = PREFERENCE_PLAYER
|
|
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
|
|
|
/// When enabled, prevents any and all ghost role pop-ups.
|
|
/datum/preference/toggle/ghost_roles
|
|
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
|
|
savefile_key = "ghost_roles"
|
|
savefile_identifier = PREFERENCE_PLAYER
|