mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 17:52:36 +00:00
Automatic deadminning (#42780)
* does the thing * cleanup * unbroke deadminning param broke the verb somehow? honk. * correct prefs * more robust handling * corrected return, cleanup
This commit is contained in:
@@ -16,6 +16,12 @@
|
||||
#define DISABLE_ARRIVALRATTLE (1<<13)
|
||||
#define COMBOHUD_LIGHTING (1<<14)
|
||||
|
||||
#define DEADMIN_ALWAYS (1<<15)
|
||||
#define DEADMIN_ANTAGONIST (1<<16)
|
||||
#define DEADMIN_POSITION_HEAD (1<<17)
|
||||
#define DEADMIN_POSITION_SECURITY (1<<18)
|
||||
#define DEADMIN_POSITION_SILICON (1<<19)
|
||||
|
||||
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS)
|
||||
|
||||
//Chat toggles
|
||||
@@ -69,4 +75,4 @@
|
||||
//Flags in the players table in the db
|
||||
#define DB_FLAG_EXEMPT 1
|
||||
|
||||
#define DEFAULT_CYBORG_NAME "Default Cyborg Name"
|
||||
#define DEFAULT_CYBORG_NAME "Default Cyborg Name"
|
||||
|
||||
@@ -5,6 +5,22 @@
|
||||
config_entry_value = "Game Master"
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/auto_deadmin_players
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/auto_deadmin_antagonists
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/auto_deadmin_heads
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/auto_deadmin_silicons
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/auto_deadmin_security
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
|
||||
/datum/config_entry/string/servername // server name (the name of the game window)
|
||||
|
||||
/datum/config_entry/string/serversqlname // short form server name used for the DB
|
||||
|
||||
@@ -426,6 +426,12 @@ SUBSYSTEM_DEF(job)
|
||||
|
||||
SSpersistence.antag_rep_change[M.client.ckey] += job.GetAntagRep()
|
||||
|
||||
if(M.client.holder)
|
||||
if(CONFIG_GET(flag/auto_deadmin_players) || (M.client.prefs?.toggles & DEADMIN_ALWAYS))
|
||||
M.client.holder.auto_deadmin()
|
||||
else
|
||||
handle_auto_deadmin_roles(M.client, rank)
|
||||
|
||||
to_chat(M, "<b>You are the [rank].</b>")
|
||||
if(job)
|
||||
to_chat(M, "<b>As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>")
|
||||
@@ -443,6 +449,18 @@ SUBSYSTEM_DEF(job)
|
||||
|
||||
return H
|
||||
|
||||
/datum/controller/subsystem/job/proc/handle_auto_deadmin_roles(client/C, rank)
|
||||
if(!C?.holder)
|
||||
return TRUE
|
||||
var/datum/job/job = GetJob(rank)
|
||||
if(!job)
|
||||
return
|
||||
if((job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) && (CONFIG_GET(flag/auto_deadmin_heads) || (C.prefs?.toggles & DEADMIN_POSITION_HEAD)))
|
||||
return C.holder.auto_deadmin()
|
||||
else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) && (CONFIG_GET(flag/auto_deadmin_security) || (C.prefs?.toggles & DEADMIN_POSITION_SECURITY)))
|
||||
return C.holder.auto_deadmin()
|
||||
else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SILICON) && (CONFIG_GET(flag/auto_deadmin_silicons) || (C.prefs?.toggles & DEADMIN_POSITION_SILICON))) //in the event there's ever psuedo-silicon roles added, ie synths.
|
||||
return C.holder.auto_deadmin()
|
||||
|
||||
/datum/controller/subsystem/job/proc/setup_officer_positions()
|
||||
var/datum/job/J = SSjob.GetJob("Security Officer")
|
||||
|
||||
@@ -269,6 +269,14 @@
|
||||
log_admin("[key_name(usr)] forcefully deadmined [admin_key]")
|
||||
D.deactivate() //after logs so the deadmined admin can see the message.
|
||||
|
||||
/datum/admins/proc/auto_deadmin()
|
||||
to_chat(owner, "<span class='interface'>You are now a normal player.</span>")
|
||||
var/old_owner = owner
|
||||
deactivate()
|
||||
message_admins("[old_owner] deadmined via auto-deadmin config.")
|
||||
log_admin("[old_owner] deadmined via auto-deadmin config.")
|
||||
return TRUE
|
||||
|
||||
/datum/admins/proc/change_admin_rank(admin_ckey, admin_key, use_db, datum/admins/D, legacy_only)
|
||||
var/datum/admin_rank/R
|
||||
var/list/rank_names = list()
|
||||
|
||||
@@ -73,6 +73,8 @@ GLOBAL_LIST_EMPTY(antagonists)
|
||||
give_antag_moodies()
|
||||
if(is_banned(owner.current) && replace_banned)
|
||||
replace_banned_player()
|
||||
else if(owner.current.client?.holder && (CONFIG_GET(flag/auto_deadmin_antagonists) || owner.current.client.prefs?.toggles & DEADMIN_ANTAGONIST))
|
||||
owner.current.client.holder.auto_deadmin()
|
||||
|
||||
/datum/antagonist/proc/is_banned(mob/M)
|
||||
if(!M)
|
||||
|
||||
@@ -495,7 +495,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
dat += "<b>Income Updates:</b> <a href='?_src_=prefs;preference=income_pings'>[(chat_toggles & CHAT_BANKCARD) ? "Allowed" : "Muted"]</a><br>"
|
||||
dat += "<br>"
|
||||
|
||||
|
||||
dat += "<b>FPS:</b> <a href='?_src_=prefs;preference=clientfps;task=input'>[clientfps]</a><br>"
|
||||
|
||||
dat += "<b>Parallax (Fancy Space):</b> <a href='?_src_=prefs;preference=parallaxdown' oncontextmenu='window.location.href=\"?_src_=prefs;preference=parallaxup\";return false;'>"
|
||||
@@ -598,6 +598,35 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(CONFIG_GET(flag/allow_admin_asaycolor))
|
||||
dat += "<br>"
|
||||
dat += "<b>ASAY Color:</b> <span style='border: 1px solid #161616; background-color: [asaycolor ? asaycolor : "#FF4500"];'> </span> <a href='?_src_=prefs;preference=asaycolor;task=input'>Change</a><br>"
|
||||
|
||||
//deadmin
|
||||
dat += "<h2>Deadmin While Playing</h2>"
|
||||
if(CONFIG_GET(flag/auto_deadmin_players))
|
||||
dat += "<b>Always Deadmin:</b> FORCED</a><br>"
|
||||
else
|
||||
dat += "<b>Always Deadmin:</b> <a href = '?_src_=prefs;preference=toggle_deadmin_always'>[(toggles & DEADMIN_ALWAYS)?"Enabled":"Disabled"]</a><br>"
|
||||
if(!(toggles & DEADMIN_ALWAYS))
|
||||
dat += "<br>"
|
||||
if(!CONFIG_GET(flag/auto_deadmin_antagonists))
|
||||
dat += "<b>As Antag:</b> <a href = '?_src_=prefs;preference=toggle_deadmin_antag'>[(toggles & DEADMIN_ANTAGONIST)?"Deadmin":"Keep Admin"]</a><br>"
|
||||
else
|
||||
dat += "<b>As Antag:</b> FORCED<br>"
|
||||
|
||||
if(!CONFIG_GET(flag/auto_deadmin_heads))
|
||||
dat += "<b>As Command:</b> <a href = '?_src_=prefs;preference=toggle_deadmin_head'>[(toggles & DEADMIN_POSITION_HEAD)?"Deadmin":"Keep Admin"]</a><br>"
|
||||
else
|
||||
dat += "<b>As Command:</b> FORCED<br>"
|
||||
|
||||
if(!CONFIG_GET(flag/auto_deadmin_security))
|
||||
dat += "<b>As Security:</b> <a href = '?_src_=prefs;preference=toggle_deadmin_security'>[(toggles & DEADMIN_POSITION_SECURITY)?"Deadmin":"Keep Admin"]</a><br>"
|
||||
else
|
||||
dat += "<b>As Security:</b> FORCED<br>"
|
||||
|
||||
if(!CONFIG_GET(flag/auto_deadmin_silicons))
|
||||
dat += "<b>As Silicon:</b> <a href = '?_src_=prefs;preference=toggle_deadmin_silicon'>[(toggles & DEADMIN_POSITION_SILICON)?"Deadmin":"Keep Admin"]</a><br>"
|
||||
else
|
||||
dat += "<b>As Silicon:</b> FORCED<br>"
|
||||
|
||||
dat += "</td>"
|
||||
dat += "</tr></table>"
|
||||
|
||||
@@ -1426,6 +1455,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
user.client.toggle_hear_radio()
|
||||
if("toggle_prayers")
|
||||
user.client.toggleprayers()
|
||||
if("toggle_deadmin_always")
|
||||
toggles ^= DEADMIN_ALWAYS
|
||||
if("toggle_deadmin_antag")
|
||||
toggles ^= DEADMIN_ANTAGONIST
|
||||
if("toggle_deadmin_head")
|
||||
toggles ^= DEADMIN_POSITION_HEAD
|
||||
if("toggle_deadmin_security")
|
||||
toggles ^= DEADMIN_POSITION_SECURITY
|
||||
if("toggle_deadmin_silicon")
|
||||
toggles ^= DEADMIN_POSITION_SILICON
|
||||
|
||||
|
||||
if("be_special")
|
||||
var/be_special_type = href_list["be_special_type"]
|
||||
|
||||
@@ -13,8 +13,9 @@
|
||||
var/list/head_announce = null
|
||||
|
||||
//Bitflags for the job
|
||||
var/flag = 0
|
||||
var/department_flag = 0
|
||||
var/flag = NONE
|
||||
var/department_flag = NONE
|
||||
var/auto_deadmin_role_flags = NONE
|
||||
|
||||
//Players will be allowed to spawn in as jobs that are set to "Station"
|
||||
var/faction = "None"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/ai
|
||||
title = "AI"
|
||||
flag = AI_JF
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/captain
|
||||
title = "Captain"
|
||||
flag = CAPTAIN
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY
|
||||
department_head = list("CentCom")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/chief_engineer
|
||||
title = "Chief Engineer"
|
||||
flag = CHIEF
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
|
||||
department_head = list("Captain")
|
||||
department_flag = ENGSEC
|
||||
head_announce = list("Engineering")
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
flag = CMO_JF
|
||||
department_head = list("Captain")
|
||||
department_flag = MEDSCI
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
|
||||
head_announce = list(RADIO_CHANNEL_MEDICAL)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/cyborg
|
||||
title = "Cyborg"
|
||||
flag = CYBORG
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 0
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/detective
|
||||
title = "Detective"
|
||||
flag = DETECTIVE
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
|
||||
department_head = list("Head of Security")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/hop
|
||||
title = "Head of Personnel"
|
||||
flag = HOP
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
|
||||
department_head = list("Captain")
|
||||
department_flag = CIVILIAN
|
||||
head_announce = list(RADIO_CHANNEL_SUPPLY, RADIO_CHANNEL_SERVICE)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/hos
|
||||
title = "Head of Security"
|
||||
flag = HOS
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY
|
||||
department_head = list("Captain")
|
||||
department_flag = ENGSEC
|
||||
head_announce = list(RADIO_CHANNEL_SECURITY)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/rd
|
||||
title = "Research Director"
|
||||
flag = RD_JF
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
|
||||
department_head = list("Captain")
|
||||
department_flag = MEDSCI
|
||||
head_announce = list("Science")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/officer
|
||||
title = "Security Officer"
|
||||
flag = OFFICER
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
|
||||
department_head = list("Head of Security")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/job/warden
|
||||
title = "Warden"
|
||||
flag = WARDEN
|
||||
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
|
||||
department_head = list("Head of Security")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
|
||||
@@ -121,6 +121,9 @@ INITIALIZE_IMMEDIATE(/mob/dead)
|
||||
if (isturf(T))
|
||||
update_z(T.z)
|
||||
|
||||
/mob/dead/auto_deadmin_on_login()
|
||||
return
|
||||
|
||||
/mob/dead/Logout()
|
||||
update_z(null)
|
||||
return ..()
|
||||
|
||||
@@ -336,7 +336,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
client.change_view(CONFIG_GET(string/default_view))
|
||||
SStgui.on_transfer(src, mind.current) // Transfer NanoUIs.
|
||||
mind.current.key = key
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/dead/observer/verb/stay_dead()
|
||||
set category = "Ghost"
|
||||
|
||||
@@ -12,4 +12,3 @@
|
||||
/mob/proc/death(gibbed)
|
||||
SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed)
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_DEATH, src , gibbed)
|
||||
return
|
||||
@@ -5,3 +5,11 @@
|
||||
if(rev)
|
||||
rev.remove_revolutionary(TRUE)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/silicon/auto_deadmin_on_login()
|
||||
if(!client?.holder)
|
||||
return TRUE
|
||||
if(CONFIG_GET(flag/auto_deadmin_silicons) || (client.prefs?.toggles & DEADMIN_POSITION_SILICON))
|
||||
return client.holder.auto_deadmin()
|
||||
return ..()
|
||||
|
||||
@@ -132,6 +132,12 @@
|
||||
if(!picked)
|
||||
pickVisualAppearence()
|
||||
|
||||
/mob/living/simple_animal/drone/auto_deadmin_on_login()
|
||||
if(!client?.holder)
|
||||
return TRUE
|
||||
if(CONFIG_GET(flag/auto_deadmin_silicons) || (client.prefs?.toggles & DEADMIN_POSITION_SILICON))
|
||||
return client.holder.auto_deadmin()
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/drone/death(gibbed)
|
||||
..(gibbed)
|
||||
|
||||
@@ -47,10 +47,21 @@
|
||||
if(client.player_details.player_actions.len)
|
||||
for(var/datum/action/A in client.player_details.player_actions)
|
||||
A.Grant(src)
|
||||
|
||||
|
||||
for(var/foo in client.player_details.post_login_callbacks)
|
||||
var/datum/callback/CB = foo
|
||||
CB.Invoke()
|
||||
log_played_names(client.ckey,name,real_name)
|
||||
auto_deadmin_on_login()
|
||||
|
||||
log_message("Client [key_name(src)] has taken ownership of mob [src]([src.type])", LOG_OWNERSHIP)
|
||||
|
||||
/mob/proc/auto_deadmin_on_login() //return true if they're not an admin at the end.
|
||||
if(!client?.holder)
|
||||
return TRUE
|
||||
if(CONFIG_GET(flag/auto_deadmin_players) || (client.prefs?.toggles & DEADMIN_ALWAYS))
|
||||
return client.holder.auto_deadmin()
|
||||
if(mind.has_antag_datum(/datum/antagonist) && (CONFIG_GET(flag/auto_deadmin_antagonists) || client.prefs?.toggles & DEADMIN_ANTAGONIST))
|
||||
return client.holder.auto_deadmin()
|
||||
if(job)
|
||||
return SSjob.handle_auto_deadmin_roles(client, job)
|
||||
|
||||
@@ -385,6 +385,19 @@ AUTOADMIN_RANK Game Master
|
||||
## Uncomment to automatically give that admin rank to all players
|
||||
#AUTOADMIN
|
||||
|
||||
|
||||
## Uncomment to automatically deadmin players when the game starts.
|
||||
#AUTO_DEADMIN_PLAYERS
|
||||
|
||||
## Uncomment to automatically deadmin antagonists when they gain the role.
|
||||
#AUTO_DEADMIN_ANTAGONISTS
|
||||
|
||||
## Uncomment to automatically deadmin specific role sets when a player joins the game.
|
||||
#AUTO_DEADMIN_HEADS
|
||||
#AUTO_DEADMIN_SECURITY
|
||||
#AUTO_DEADMIN_SILICONS
|
||||
|
||||
|
||||
## CLIENT VERSION CONTROL
|
||||
## This allows you to configure the minimum required client version, as well as a warning version, and message for both.
|
||||
## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower.
|
||||
|
||||
Reference in New Issue
Block a user