Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add one-click for event roles. #27855

Merged
merged 7 commits into from
Jan 21, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion code/modules/admin/topic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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"]
Expand Down
63 changes: 63 additions & 0 deletions code/modules/admin/verbs/one_click_antag.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -311,6 +312,68 @@
qdel(temp)
return TRUE

/datum/admins/proc/makeEventCharacters()
var/datum/game_mode/traitor/temp = new()
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved

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
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved
if(!antnum || antnum <= 0)
qdel(temp)
return FALSE

var/no_mindshields = input(owner, "Avoid mindshielded characters?") in list("Yes", "No", "Cancel")
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved
if(no_mindshields == "Cancel")
qdel(temp)
return FALSE
else if(no_mindshields == "Yes")
temp.restricted_jobs += temp.protected_jobs

var/respect_traitor = input(owner, "Reqire traitor willingness?") in list("Yes", "No", "Cancel")
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved
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(isnull(objective) || objective == "")
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved
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

if(length(candidates))
var/numEventChars = min(length(candidates), antnum)
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved

for(var/i = 0, i<numEventChars, i++)
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved
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)

FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved
qdel(temp)
return TRUE
qdel(temp)
FunnyMan3595 marked this conversation as resolved.
Show resolved Hide resolved
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"
Expand Down
Loading