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:
MadmanMartian
2018-09-25 09:20:07 +01:00
committed by GitHub
parent a4a2380738
commit 6193bcb2fd
6 changed files with 144 additions and 125 deletions

View File

@@ -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

View File

@@ -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/////////////////////////

View File

@@ -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

View File

@@ -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"])

View File

@@ -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))
@@ -271,5 +277,3 @@ client/proc/one_click_antag()
new_vox.equip_vox_raider()
return new_vox
/datum/admins/proc/makeVampires()

View File

@@ -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()