mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Role datums one click antag (#19696)
* fixes one click antag - Need to test vox squad and such * tibltibltibltibl * Removes hitlers * turns out it do * Vox raiders is getting reworked, and syndie deathsquad already has a button elsewhere
This commit is contained in:
@@ -124,3 +124,7 @@
|
||||
#define BE_TRAITOR "Be_Traitor"
|
||||
#define BE_PAI "Be_PAI"
|
||||
#define BE_NINJA "Be_Ninja"
|
||||
|
||||
|
||||
#define FROM_GHOSTS 1
|
||||
#define FROM_PLAYERS 2
|
||||
@@ -306,6 +306,10 @@ var/list/factions_with_hud_icons = list()
|
||||
/datum/faction/proc/get_statpanel_addition()
|
||||
return null
|
||||
|
||||
/datum/faction/proc/get_member_by_mind(var/datum/mind/M)
|
||||
for(var/datum/role/R in members)
|
||||
if(R.antag == M)
|
||||
return R
|
||||
|
||||
/////////////////////////////THESE FACTIONS SHOULD GET MOVED TO THEIR OWN FILES ONCE THEY'RE GETTING ELABORATED/////////////////////////
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/drop_emp,
|
||||
/client/proc/cinematic,
|
||||
//client/proc/one_click_antag,
|
||||
/client/proc/one_click_antag,
|
||||
//client/proc/antag_madness,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
// FUUUUCKED /client/proc/zombie_event, // ZOMBB-B-BIES
|
||||
|
||||
@@ -8,51 +8,57 @@
|
||||
|
||||
var/client/CLIENT = usr.client
|
||||
if(href_list["makeAntag"])
|
||||
if(!ticker.mode)
|
||||
to_chat(usr, "The round has not started yet,")
|
||||
return
|
||||
var/count = input("How many antags would you like to create?","Create Antagonists") as num|null
|
||||
if(!count)
|
||||
return
|
||||
switch(href_list["makeAntag"])
|
||||
if("1")
|
||||
log_admin("[key_name(usr)] has spawned a traitor.")
|
||||
if(!src.makeTraitors())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
log_admin("[key_name(usr)] has attempted to spawn [count] traitors.")
|
||||
var/success = makeAntag(/datum/role/traitor, null, count, FROM_PLAYERS)
|
||||
log_admin("[success] number of traitors made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of traitors made.</span>")
|
||||
if("2")
|
||||
log_admin("[key_name(usr)] has spawned a changeling.")
|
||||
if(!src.makeChanglings())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
log_admin("[key_name(usr)] has attempted to spawn [count] changelings.")
|
||||
var/success = makeAntag(/datum/role/changeling, null, count, FROM_PLAYERS)
|
||||
log_admin("[success] number of changelings made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of changelings made.</span>")
|
||||
if("3")
|
||||
log_admin("[key_name(usr)] has spawned revolutionaries.")
|
||||
if(!src.makeRevs())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
log_admin("[key_name(usr)] has attempted to spawn [count] revolutionaries.")
|
||||
var/success = makeAntag(null, /datum/faction/revolution, count, FROM_PLAYERS)
|
||||
log_admin("[success] number of revolutionaries made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of revolutionaries made.</span>")
|
||||
if("4")
|
||||
log_admin("[key_name(usr)] has spawned a cultists.")
|
||||
if(!src.makeCult())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
log_admin("[key_name(usr)] has attempted to spawn [count] cultists.")
|
||||
var/success = makeAntag(null, /datum/faction/cult, count , FROM_PLAYERS)
|
||||
log_admin("[success] number of cultists made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of cultists made..</span>")
|
||||
if("5")
|
||||
log_admin("[key_name(usr)] has spawned a malf AI.")
|
||||
if(!src.makeMalfAImode())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
log_admin("[key_name(usr)] has attempted to spawn [count] malfunctioning AI.")
|
||||
var/success = makeAntag(null, /datum/faction/malf, count, FROM_PLAYERS)
|
||||
log_admin("[success] number of angry computer screens made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of malf AIs made.</span>")
|
||||
if("6")
|
||||
log_admin("[key_name(usr)] has spawned a wizard.")
|
||||
if(!src.makeWizard())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
log_admin("[key_name(usr)] has attempted to spawn [count] wizards.")
|
||||
var/success = makeAntag(null, /datum/faction/wizard, count, FROM_GHOSTS)
|
||||
log_admin("[success] number of wizards made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of wizards made.</span>")
|
||||
if("7")
|
||||
log_admin("[key_name(usr)] has spawned a nuke team.")
|
||||
if(!src.makeNukeTeam())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
var/success = makeAntag(null, /datum/faction/syndicate/nuke_op, count, FROM_GHOSTS)
|
||||
log_admin("[success] number of nuclear operatives made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of nuclear operatives made.</span>")
|
||||
if("8")
|
||||
log_admin("[key_name(usr)] has spawned a count of vampires.")
|
||||
if(!src.makeVampires())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately there weren't enough candidates available.</span>")
|
||||
log_admin("[key_name(usr)] has attempted to spawn [count] vampires.")
|
||||
var/success = makeAntag(/datum/role/vampire, null, count, FROM_PLAYERS)
|
||||
log_admin("[success] number of vampires made.")
|
||||
to_chat(usr, "<span class='notice'>[success] number of vampires made.</span>")
|
||||
if("9")
|
||||
log_admin("[key_name(usr)] has spawned aliens.")
|
||||
if(!src.makeAliens())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately, there were no candidates available.</span>")
|
||||
if("10")
|
||||
log_admin("[key_name(usr)] has spawned a death squad.")
|
||||
if(!makeDeathsquad())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately, there were no candidates available.</span>")
|
||||
if("11")
|
||||
log_admin("[key_name(usr)] has spawned vox raiders.")
|
||||
if(!src.makeVoxRaiders())
|
||||
to_chat(usr, "<span class='warning'>Unfortunately, there weren't enough candidates available.</span>")
|
||||
|
||||
if("announce_laws" in href_list)
|
||||
var/mob/living/silicon/S = locate(href_list["mob"])
|
||||
|
||||
@@ -16,12 +16,10 @@ client/proc/one_click_antag()
|
||||
<a href='?src=\ref[src];makeAntag=3'>Make Revs</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=4'>Make Cult</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=5'>Make Malf AI</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=8'>Make Vampires</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=6'>Make Wizard (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=11'>Make Vox Raiders (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=7'>Make Nuke Team (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=8'>Make Vampires</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=9'>Make Aliens (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[src];makeAntag=10'>Make Deathsquad (Syndicate) (Requires Ghosts)</a><br>
|
||||
"}
|
||||
|
||||
usr << browse(dat, "window=oneclickantag;size=400x400")
|
||||
@@ -50,91 +48,100 @@ client/proc/one_click_antag()
|
||||
|
||||
return malf_made
|
||||
|
||||
/datum/admins/proc/makeAntag(var/datum/role/R, var/datum/faction/F, var/count = 1, var/recruitment_source = FROM_PLAYERS)
|
||||
var/role_req
|
||||
var/role_name
|
||||
if(F)
|
||||
role_req = initial(F.required_pref)
|
||||
role_name = initial(F.name)
|
||||
else if(R)
|
||||
role_req = initial(R.required_pref)
|
||||
role_name = initial(R.name)
|
||||
var/list/candidates = get_candidates(role_req, recruitment_source, role_name)
|
||||
var/recruit_count = 0
|
||||
if(!candidates.len)
|
||||
to_chat(usr, "No candidates")
|
||||
return 0
|
||||
|
||||
/datum/admins/proc/makeTraitors()
|
||||
candidates = shuffle(candidates)
|
||||
|
||||
if(F)
|
||||
var/datum/faction/FF = find_active_faction_by_type(F)
|
||||
if(!FF)
|
||||
FF = ticker.mode.CreateFaction(F, 0, 1)
|
||||
if(!FF)
|
||||
return 0
|
||||
var/mob/H = pick(candidates)
|
||||
candidates.Remove(H)
|
||||
if(isobserver(H))
|
||||
H = makeBody(H)
|
||||
var/datum/mind/M = H.mind
|
||||
if(FF.HandleNewMind(M))
|
||||
var/datum/role/RR = FF.get_member_by_mind(M)
|
||||
RR.ForgeObjectives()
|
||||
log_admin("[key_name(H)] has been recruited as leader of [F.name] via create antagonist verb.")
|
||||
recruit_count++
|
||||
count--
|
||||
|
||||
while(count > 0 && candidates.len)
|
||||
count--
|
||||
var/mob/living/carbon/human/H = pick(candidates)
|
||||
candidates.Remove(H)
|
||||
if(isobserver(H))
|
||||
H = makeBody(H)
|
||||
var/datum/mind/M = H.mind
|
||||
if(FF.HandleRecruitedMind(M))
|
||||
var/datum/role/RR = FF.get_member_by_mind(M)
|
||||
RR.ForgeObjectives()
|
||||
log_admin("[key_name(H)] has been recruited as recruit of [F.name] via create antagonist verb.")
|
||||
recruit_count++
|
||||
|
||||
FF.OnPostSetup()
|
||||
|
||||
return recruit_count
|
||||
|
||||
else if(R)
|
||||
while(count > 0 && candidates.len)
|
||||
count--
|
||||
var/mob/H = pick(candidates)
|
||||
candidates.Remove(H)
|
||||
if(isobserver(H))
|
||||
H = makeBody(H)
|
||||
var/datum/mind/M = H.mind
|
||||
|
||||
var/datum/role/newRole = new R
|
||||
|
||||
if(!newRole)
|
||||
continue
|
||||
|
||||
if(!newRole.AssignToRole(M))
|
||||
newRole.Drop()
|
||||
continue
|
||||
newRole.OnPostSetup()
|
||||
newRole.ForgeObjectives()
|
||||
log_admin("[key_name(H)] has been made into a [newRole.name] via create antagonist verb.")
|
||||
recruit_count++
|
||||
|
||||
return recruit_count
|
||||
|
||||
|
||||
/datum/admins/proc/makeChanglings()
|
||||
|
||||
|
||||
/datum/admins/proc/makeRevs()
|
||||
|
||||
|
||||
/datum/admins/proc/makeWizard()
|
||||
|
||||
|
||||
/datum/admins/proc/makeCult()
|
||||
|
||||
|
||||
/datum/admins/proc/makeNukeTeam()
|
||||
|
||||
|
||||
var/list/mob/dead/observer/candidates = list()
|
||||
var/mob/dead/observer/theghost = null
|
||||
var/list/mob/dead/observer/picked = list()
|
||||
|
||||
for(var/mob/dead/observer/G in get_active_candidates(ROLE_OPERATIVE,poll="Do you wish to be considered for a nuke team being sent in?"))
|
||||
if(!jobban_isbanned(G, "operative") && !jobban_isbanned(G, "Syndicate"))
|
||||
candidates += G
|
||||
|
||||
if(candidates.len)
|
||||
var/numagents = 5
|
||||
var/agentcount = 0
|
||||
|
||||
for(var/i = 0, i<numagents,i++)
|
||||
shuffle(candidates) //More shuffles means more randoms
|
||||
for(var/mob/j in candidates)
|
||||
if(!j || !j.client)
|
||||
candidates.Remove(j)
|
||||
/datum/admins/proc/get_candidates(var/role, var/source, var/role_name)
|
||||
var/list/candidates = list()
|
||||
switch(source)
|
||||
if(FROM_GHOSTS)
|
||||
for(var/mob/dead/observer/G in get_active_candidates(role, poll="Do you wish to be considered for [role_name]?"))
|
||||
candidates.Add(G)
|
||||
if(FROM_PLAYERS)
|
||||
for(var/mob/living/carbon/human/H in player_list)
|
||||
if(!H.client || !H.mind)
|
||||
continue
|
||||
|
||||
theghost = j
|
||||
candidates.Remove(theghost)
|
||||
/* Seeing if we have enough agents before we make the nuke team
|
||||
var/mob/living/carbon/human/new_character=makeBody(theghost)
|
||||
new_character.mind.make_Nuke()
|
||||
*/
|
||||
picked += theghost
|
||||
agentcount++
|
||||
break
|
||||
//This is so we don't get a nuke team with only 1 or 2 people
|
||||
if(agentcount < 3)
|
||||
return 0
|
||||
else
|
||||
for(var/mob/j in picked)
|
||||
theghost = j
|
||||
var/mob/living/carbon/human/new_character=makeBody(theghost)
|
||||
new_character.mind.make_Nuke()
|
||||
|
||||
var/obj/effect/landmark/nuke_spawn = locate("landmark*Nuclear-Bomb")
|
||||
var/obj/effect/landmark/closet_spawn = locate("landmark*Syndicate-Uplink")
|
||||
|
||||
var/nuke_code = "[rand(10000, 99999)]"
|
||||
|
||||
if(nuke_spawn)
|
||||
var/obj/item/weapon/paper/P = new
|
||||
P.info = "Sadly, the Syndicate could not get you a nuclear bomb. We have, however, acquired the arming code for the station's onboard nuke. The nuclear authorization code is: <b>[nuke_code]</b>"
|
||||
P.name = "nuclear bomb code and instructions"
|
||||
P.forceMove(nuke_spawn.loc)
|
||||
|
||||
if(closet_spawn)
|
||||
new /obj/structure/closet/syndicate/nuclear(closet_spawn.loc)
|
||||
|
||||
for (var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve
|
||||
if (A.name == "Syndicate-Gear-Closet")
|
||||
new /obj/structure/closet/syndicate/personal(A.loc)
|
||||
del(A)
|
||||
continue
|
||||
|
||||
if (A.name == "Syndicate-Bomb")
|
||||
new /obj/effect/spawner/newbomb/timer/syndicate(A.loc)
|
||||
del(A)
|
||||
continue
|
||||
|
||||
for (var/obj/machinery/nuclearbomb/bomb in machines)
|
||||
bomb.r_code = nuke_code // All the nukes are set to this code.
|
||||
return 1
|
||||
|
||||
candidates.Add(H)
|
||||
for(var/mob/M in candidates)
|
||||
if(jobban_isbanned(M, "Syndicate"))
|
||||
candidates.Remove(M)
|
||||
if(!M.client.desires_role(role) || jobban_isbanned(M, role))
|
||||
candidates.Remove(M)
|
||||
return candidates
|
||||
|
||||
|
||||
/datum/admins/proc/makeAliens()
|
||||
@@ -247,9 +254,8 @@ client/proc/one_click_antag()
|
||||
/datum/admins/proc/makeVoxRaiders()
|
||||
|
||||
|
||||
|
||||
/datum/admins/proc/create_vox_raider(obj/spawn_location, leader_chosen = 0)
|
||||
|
||||
|
||||
var/mob/living/carbon/human/new_vox = new(spawn_location.loc)
|
||||
|
||||
new_vox.setGender(pick(MALE, FEMALE))
|
||||
@@ -270,6 +276,4 @@ client/proc/one_click_antag()
|
||||
|
||||
new_vox.equip_vox_raider()
|
||||
|
||||
return new_vox
|
||||
|
||||
/datum/admins/proc/makeVampires()
|
||||
return new_vox
|
||||
@@ -442,10 +442,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
for(var/datum/faction/F in ticker.mode.factions)
|
||||
var/f_stat = F.get_statpanel_addition()
|
||||
if(f_stat && f_stat != null)
|
||||
stat(null, f_stat)
|
||||
if(ticker.mode)
|
||||
for(var/datum/faction/F in ticker.mode.factions)
|
||||
var/f_stat = F.get_statpanel_addition()
|
||||
if(f_stat)
|
||||
stat(null, f_stat)
|
||||
if(emergency_shuttle)
|
||||
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||
var/timeleft = emergency_shuttle.timeleft()
|
||||
|
||||
Reference in New Issue
Block a user