mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 16:18:01 +01:00
About The Pull Request
kép
This PR does the following:
Force event menu uses tgUI.
Arranged events into categories, and added a little description to each. The descriptions appear as tooltips when you hover over the Trigger button.
Rewrote how "Announce to crew?" works. It no longer pops up a panel after the event has been already announced. Instead, the admins select it via a checkbox, and the result is passed through an optional argument.
announceChance's comment is tweaked a bit to reflect how it actually works at the moment.
Moved rpgtitles to wizard events, where it belongs.
Fake Virus and Electric Storms show up to observers, as I believe they are not as common as Space Dust or Camera Failure, and should be cancelable.
Potential issues:
This only solves half of #68408, I don't think admin triggering having a timer and a cancel button is a big issue, as it allows other admins to overrule you if needed, but if i is, I will try to fix it within this PR.
Fixes #68408. Events now spawn immediately, and the the announceChance is overwritten before it begins.
My choices for categories and descriptions might not be the best, feedback would be appreciated.
Why It's Good For The Game
The old spawn menu was completely unorganized, and you could only search using the browser search tool. I believe a built in search bar helps with this issue a bit. I also believe that organizing the events into categories, and adding descriptions will help with newer admins who might not be familiar with all events.
Changelog
cl
refactor: The Force Event UI has been refactored
refactor: Events now have categories and descriptions
refactor: Admin triggered events happen immediately
balance: Fake Virus and Electric Storms are shown to admins, making them cancelable
/cl
105 lines
4.0 KiB
Plaintext
105 lines
4.0 KiB
Plaintext
/datum/round_event_control/wizard/greentext //Gotta have it!
|
|
name = "Greentext"
|
|
weight = 4
|
|
typepath = /datum/round_event/wizard/greentext
|
|
max_occurrences = 1
|
|
earliest_start = 0 MINUTES
|
|
description = "The Green Text appears on the station, tempting people to try and pick it up."
|
|
|
|
/datum/round_event/wizard/greentext/start()
|
|
|
|
var/list/holder_canadates = GLOB.player_list.Copy()
|
|
for(var/mob/M in holder_canadates)
|
|
if(!ishuman(M))
|
|
holder_canadates -= M
|
|
if(!holder_canadates) //Very unlikely, but just in case
|
|
return FALSE
|
|
|
|
var/mob/living/carbon/human/H = pick(holder_canadates)
|
|
new /obj/item/greentext(H.loc)
|
|
to_chat(H, "<font color='green'>The mythical greentext appear at your feet! Pick it up if you dare...</font>")
|
|
|
|
|
|
/obj/item/greentext
|
|
name = "greentext"
|
|
desc = "No one knows what this massive tome does, but it feels <i><font color='green'>desirable</font></i> all the same..."
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
icon = 'icons/obj/wizard.dmi'
|
|
icon_state = "greentext"
|
|
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE
|
|
///The last person to touch the greentext, used for failures.
|
|
var/mob/living/last_holder
|
|
///The current holder of the greentext.
|
|
var/mob/living/new_holder
|
|
///Every person who has touched the greentext, having their colors changed by it.
|
|
var/list/color_altered_mobs = list()
|
|
///The callback at the end of a round to check if the greentext has been completed.
|
|
var/datum/callback/roundend_callback
|
|
///Boolean on whether to announce the greentext's destruction to all mobs.
|
|
var/quiet = FALSE
|
|
|
|
/obj/item/greentext/quiet
|
|
quiet = TRUE
|
|
|
|
/obj/item/greentext/Initialize(mapload)
|
|
. = ..()
|
|
SSpoints_of_interest.make_point_of_interest(src)
|
|
roundend_callback = CALLBACK(src, .proc/check_winner)
|
|
SSticker.OnRoundend(roundend_callback)
|
|
|
|
/obj/item/greentext/equipped(mob/user, slot, initial = FALSE)
|
|
. = ..()
|
|
to_chat(user, span_green("So long as you leave this place with greentext in hand you know will be happy..."))
|
|
var/list/other_objectives = user.mind.get_all_objectives()
|
|
if(user.mind && other_objectives.len > 0)
|
|
to_chat(user, span_warning("... so long as you still perform your other objectives that is!"))
|
|
new_holder = user
|
|
if(!last_holder)
|
|
last_holder = user
|
|
if(!(user in color_altered_mobs))
|
|
color_altered_mobs |= user
|
|
user.add_atom_colour("#00FF00", ADMIN_COLOUR_PRIORITY)
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/greentext/dropped(mob/user, silent = FALSE)
|
|
if(user in color_altered_mobs)
|
|
to_chat(user, span_warning("A sudden wave of failure washes over you..."))
|
|
user.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY) //ya blew it
|
|
STOP_PROCESSING(SSobj, src)
|
|
last_holder = null
|
|
new_holder = null
|
|
return ..()
|
|
|
|
/obj/item/greentext/process()
|
|
if(last_holder && last_holder != new_holder) //Somehow it was swiped without ever getting dropped
|
|
to_chat(last_holder, span_warning("A sudden wave of failure washes over you..."))
|
|
last_holder.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
|
|
last_holder = new_holder //long live the king
|
|
|
|
/obj/item/greentext/Destroy(force)
|
|
LAZYREMOVE(SSticker.round_end_events, roundend_callback)
|
|
QDEL_NULL(roundend_callback) //This ought to free the callback datum, and prevent us from harddeling
|
|
for(var/mob/all_player_mobs as anything in GLOB.player_list)
|
|
var/message = "<span class='warning'>A dark temptation has passed from this world"
|
|
if(all_player_mobs in color_altered_mobs)
|
|
message += " and you're finally able to forgive yourself"
|
|
if(all_player_mobs.color == "#FF0000" || all_player_mobs.color == "#00FF00")
|
|
all_player_mobs.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
|
|
message += "...</span>"
|
|
if(!quiet)
|
|
to_chat(all_player_mobs, message)
|
|
return ..()
|
|
|
|
/obj/item/greentext/proc/check_winner()
|
|
if(!new_holder)
|
|
return
|
|
if(!is_centcom_level(new_holder.z)) //you're winner!
|
|
return
|
|
|
|
to_chat(new_holder, "<font color='green'>At last it feels like victory is assured!</font>")
|
|
new_holder.mind.add_antag_datum(/datum/antagonist/greentext)
|
|
new_holder.log_message("won with greentext!!!", LOG_ATTACK, color = "green")
|
|
color_altered_mobs -= new_holder
|
|
resistance_flags |= ON_FIRE
|
|
qdel(src)
|