Add one-click for event roles. (#27855)

* Add one-click for event roles.

* Apply suggestions from code review

Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Signed-off-by: Charlie Nolan <funnyman3595@gmail.com>

* Review fix.

* Update code/modules/admin/verbs/one_click_antag.dm

Signed-off-by: Charlie Nolan <funnyman3595@gmail.com>

* Update code/modules/admin/verbs/one_click_antag.dm

Signed-off-by: Charlie Nolan <funnyman3595@gmail.com>

* Update code/modules/admin/verbs/one_click_antag.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Signed-off-by: Charlie Nolan <funnyman3595@gmail.com>

---------

Signed-off-by: Charlie Nolan <funnyman3595@gmail.com>
Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
This commit is contained in:
Charlie Nolan
2025-01-21 07:33:07 -08:00
committed by GitHub
parent b89794e427
commit 02a591afa0
2 changed files with 64 additions and 1 deletions
+5 -1
View File
@@ -40,7 +40,7 @@
if(href_list["makeAntag"])
switch(href_list["makeAntag"])
if("1")
log_admin("[key_name(usr)] has spawned a traitor.")
log_admin("[key_name(usr)] has spawned traitors.")
if(!makeTraitors())
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("2")
@@ -71,6 +71,10 @@
log_admin("[key_name(usr)] has spawned mindflayers.")
if(!makeMindflayers())
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
if("9")
log_admin("[key_name(usr)] has spawned event characters.")
if(!makeEventCharacters())
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"] || href_list["dbsearchip"] || href_list["dbsearchcid"] || href_list["dbsearchbantype"])
var/adminckey = href_list["dbsearchadmin"]
@@ -21,6 +21,7 @@
<a href='byond://?src=[UID()];makeAntag=6'>Make Vampires</a><br>
<a href='byond://?src=[UID()];makeAntag=7'>Make Abductor Team (Requires Ghosts)</a><br>
<a href='byond://?src=[UID()];makeAntag=8'>Make Mindflayers</a><br>
<a href='byond://?src=[UID()];makeAntag=9'>Make Event Characters</a><br>
"}
usr << browse(dat, "window=oneclickantag;size=400x400")
return
@@ -311,6 +312,64 @@
qdel(temp)
return TRUE
/datum/admins/proc/makeEventCharacters()
var/list/mob/living/carbon/human/candidates = list()
var/mob/living/carbon/human/H = null
var/antnum = input(owner, "How many event characters you want to create? Enter 0 to cancel","Amount:", 0) as num
if(!antnum || antnum <= 0)
return FALSE
var/datum/game_mode/traitor/temp = new()
var/no_mindshields = input(owner, "Avoid mindshielded characters?") in list("Yes", "No", "Cancel")
if(no_mindshields == "Cancel")
qdel(temp)
return FALSE
else if(no_mindshields == "Yes")
temp.restricted_jobs += temp.protected_jobs
var/respect_traitor = input(owner, "Require traitor willingness?") in list("Yes", "No", "Cancel")
var/role = null
if(respect_traitor == "Cancel")
qdel(temp)
return FALSE
else if(respect_traitor == "Yes")
role = ROLE_TRAITOR
var/give_objective = input(owner, "Give them a shared custom objective?") in list("Yes", "No", "Cancel")
var/objective = null
if(give_objective == "Cancel")
qdel(temp)
return FALSE
else if(give_objective == "Yes")
objective = sanitize(copytext_char(input("Custom objective:", "Objective", "") as text|null, 1, MAX_MESSAGE_LEN))
if(!length(objective))
qdel(temp)
return FALSE
log_admin("[key_name(owner)] tried making [antnum] event characters with One-Click-Antag")
message_admins("[key_name_admin(owner)] tried making [antnum] event characters with One-Click-Antag")
for(var/mob/living/carbon/human/applicant in GLOB.player_list)
if(CandCheck(role, applicant, temp))
candidates += applicant
qdel(temp)
if(length(candidates))
var/num_event_chars = min(length(candidates), antnum)
for(var/i in 1 to num_event_chars)
H = pick(candidates)
if(!isnull(objective))
var/datum/objective/O = new()
O.explanation_text = objective
O.needs_target = FALSE
H.mind.add_mind_objective(O)
H.mind.add_antag_datum(/datum/antagonist/eventmisc)
candidates.Remove(H)
return TRUE
return FALSE
/datum/admins/proc/makeThunderdomeTeams() // Not strictly an antag, but this seemed to be the best place to put it.
var/max_thunderdome_players = 10
var/team_to_assign_to = "Green"