[MIRROR] Ghost Pool Protection Admin Button (#226)

* Ghost Pool Protection Admin Button (#52683)

* Ghost Pool Protection

* okay

* Update tgui.bundle.js

* just a bit of feedback

* temporarily

Co-authored-by: Emmanuel S. <emmanuelssr@gmail.com>

* Update GhostPoolProtection.js

* Update tgui.bundle.js

* my devserver broke

* okay done for real

* conflict resolution bundle

* Rohesies dope review

Co-authored-by: Rohesie <rohesie@gmail.com>

Co-authored-by: Emmanuel S. <emmanuelssr@gmail.com>
Co-authored-by: Rohesie <rohesie@gmail.com>

* Ghost Pool Protection Admin Button

Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Emmanuel S. <emmanuelssr@gmail.com>
Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
SkyratBot
2020-08-07 01:39:43 +01:00
committed by GitHub
co-authored by Emmanuel S. Rohesie tralezab
parent f053e12c16
commit 38c75c7573
18 changed files with 232 additions and 4 deletions
+1
View File
@@ -30,6 +30,7 @@ GLOBAL_PROTECT(admin_verbs_admin)
/datum/verbs/menu/Admin/verb/playerpanel,
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/
/client/proc/ghost_pool_protection, /*opens a menu for toggling ghost roles*/
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
/datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/
@@ -0,0 +1,86 @@
//very similar to centcom_podlauncher in terms of how this is coded, so i kept a lot of comments from it
/client/proc/ghost_pool_protection() //Creates a verb for admins to open up the ui
set name = "Ghost Pool Protection"
set desc = "Choose which ways people can get into the round, or just clear it out completely for admin events."
set category = "Admin - Events"
var/datum/ghost_pool_menu/tgui = new(usr)//create the datum
tgui.ui_interact(usr)//datum has a tgui component, here we open the window
/datum/ghost_pool_menu
var/client/holder //client of whoever is using this datum
//when submitted, what the pool flags will be set to
var/new_role_flags = ALL
//EVERY TYPE OF WAY SOMEONE IS GETTING BACK INTO THE ROUND!
//these are the same comments as the ones in admin.dm defines, please update those if you change them here
/*
var/events_or_midrounds = TRUE //ie fugitives, space dragon, etc. also includes dynamic midrounds as it's the same deal
var/spawners = TRUE //ie ashwalkers, free golems, beach bums
var/station_sentience = TRUE //ie posibrains, mind monkeys, sentience potion, etc.
var/minigames = TRUE //ie mafia, ctf
var/misc = TRUE //oddities like split personality and any animal ones like spiders, xenos
*/
/datum/ghost_pool_menu/New(user)//user can either be a client or a mob due to byondcode(tm)
if (istype(user, /client))
var/client/user_client = user
holder = user_client //if its a client, assign it to holder
else
var/mob/user_mob = user
holder = user_mob.client //if its a mob, assign the mob's client to holder
new_role_flags = GLOB.ghost_role_flags
/datum/ghost_pool_menu/ui_state(mob/user)
return GLOB.admin_state
/datum/ghost_pool_menu/ui_close()
qdel(src)
/datum/ghost_pool_menu/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "GhostPoolProtection")
ui.open()
/datum/ghost_pool_menu/ui_data(mob/user)
var/list/data = list()
data["events_or_midrounds"] = (new_role_flags & GHOSTROLE_MIDROUND_EVENT)
data["spawners"] = (new_role_flags & GHOSTROLE_SPAWNER)
data["station_sentience"] = (new_role_flags & GHOSTROLE_STATION_SENTIENCE)
data["silicons"] = (new_role_flags & GHOSTROLE_SILICONS)
data["minigames"] = (new_role_flags & GHOSTROLE_MINIGAME)
return data
/datum/ghost_pool_menu/ui_act(action, params)
. = ..()
if(.)
return
switch(action)
if("toggle_events_or_midrounds")
new_role_flags ^= GHOSTROLE_MIDROUND_EVENT
if("toggle_spawners")
new_role_flags ^= GHOSTROLE_SPAWNER
if("toggle_station_sentience")
new_role_flags ^= GHOSTROLE_STATION_SENTIENCE
if("toggle_silicons")
new_role_flags ^= GHOSTROLE_SILICONS
if("toggle_minigames")
new_role_flags ^= GHOSTROLE_MINIGAME
if("all_roles")
new_role_flags = ALL
if("no_roles")
new_role_flags = NONE
if("apply_settings")
to_chat(usr, "Settings Applied!")
var/msg
switch(new_role_flags)
if(ALL)
msg = "enabled all of"
if(NONE)
msg = "disabled all of"
else
msg = "modified"
message_admins("[key_name_admin(holder)] has [msg] this round's allowed ghost roles.")
GLOB.ghost_role_flags = new_role_flags
@@ -216,6 +216,9 @@
return
if(!(GLOB.ghost_role_flags & GHOSTROLE_MINIGAME))
to_chat(user, "<span class='warning'>CTF has been temporarily disabled by admins.</span>")
return
people_who_want_to_play |= user.ckey
var/num = people_who_want_to_play.len
var/remaining = CTF_REQUIRED_PLAYERS - num
+3
View File
@@ -37,6 +37,9 @@
/obj/effect/mob_spawn/attack_ghost(mob/user)
if(!SSticker.HasRoundStarted() || !loc || !ghost_usable)
return
if(!(GLOB.ghost_role_flags & GHOSTROLE_SPAWNER) && !(flags_1 & ADMIN_SPAWNED_1))
to_chat(user, "<span class='warning'>An admin has temporarily disabled non-admin ghost roles!</span>")
return
if(!uses)
to_chat(user, "<span class='warning'>This spawner is out of charges!</span>")
return
+2
View File
@@ -375,6 +375,8 @@
something.apply_damage(5,BRUTE,BODY_ZONE_HEAD,FALSE,FALSE,FALSE) //notably: no damage resist (it's in your helmet), no damage spread (it's in your helmet)
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
return
if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE))
say("ERROR: Central Command has temporarily outlawed monkey sentience helmets in this sector. NEAREST LAWFUL SECTOR: 2.537 million light years away.")
magnification = user //this polls ghosts
visible_message("<span class='warning'>[src] powers up!</span>")
playsound(src, 'sound/machines/ping.ogg', 30, TRUE)
+2
View File
@@ -53,6 +53,8 @@
return FALSE
if(EMERGENCY_ESCAPED_OR_ENDGAMED)
return FALSE
if(ispath(typepath, /datum/round_event/ghost_role) && GHOSTROLE_MIDROUND_EVENT)
return FALSE
return TRUE
/datum/round_event_control/proc/preRunEvent()
+1 -1
View File
@@ -834,7 +834,7 @@
* Only checks if everyone is actually valid to start (still connected and an observer) if there are enough players (basic_setup)
*/
/datum/mafia_controller/proc/try_autostart()
if(phase != MAFIA_PHASE_SETUP)
if(phase != MAFIA_PHASE_SETUP || !(GLOB.ghost_role_flags & GHOSTROLE_MINIGAME))
return
if(GLOB.mafia_signup.len >= MAFIA_MAX_PLAYER_COUNT || custom_setup.len)//enough people to try and make something (or debug mode)
basic_setup()
@@ -48,6 +48,8 @@ GLOBAL_VAR(posibrain_notify_cooldown)
/obj/item/mmi/posibrain/attack_self(mob/user)
if(!brainmob)
brainmob = new(src)
if(!(GLOB.ghost_role_flags & GHOSTROLE_SILICONS))
to_chat(user, "<span class='warning'>Central Command has temporarily outlawed posibrain sentience in this sector...</span>")
if(is_occupied())
to_chat(user, "<span class='warning'>This [name] is already active!</span>")
return
@@ -69,7 +69,7 @@
/mob/living/simple_animal/hostile/poison/giant_spider/Topic(href, href_list)
if(href_list["activate"])
var/mob/dead/observer/ghost = usr
if(istype(ghost) && playable_spider)
if(istype(ghost) && playable_spider && !(GLOB.ghost_role_flags & GHOSTROLE_SPAWNER))
humanize_spider(ghost)
/mob/living/simple_animal/hostile/poison/giant_spider/Login()
@@ -140,7 +140,7 @@
/mob/living/simple_animal/hostile/venus_human_trap/attack_ghost(mob/user)
. = ..()
if(.)
if(. || !(GLOB.ghost_role_flags & GHOSTROLE_SPAWNER))
return
humanize_plant(user)