mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 02:16:05 +00:00
the Strike Team rewrite (#14446)
* striketeamrevamp1 * fix * fix global * more fixes * wtf * ok * fixed
This commit is contained in:
4
__DEFINES/striketeam_defines.dm
Normal file
4
__DEFINES/striketeam_defines.dm
Normal file
@@ -0,0 +1,4 @@
|
||||
//Strike Team Defines
|
||||
#define TEAM_DEATHSQUAD "Death Squad"
|
||||
#define TEAM_ERT "Emergency Response Team"
|
||||
#define TEAM_ELITE_SYNDIE "Elite Strike Team"
|
||||
@@ -1289,16 +1289,8 @@
|
||||
return global.voxresearch_shuttle;
|
||||
if("response_team_members")
|
||||
return global.response_team_members;
|
||||
if("send_emergency_team")
|
||||
return global.send_emergency_team;
|
||||
if("ert_base_chance")
|
||||
return global.ert_base_chance;
|
||||
if("can_call_ert")
|
||||
return global.can_call_ert;
|
||||
if("sent_strike_team")
|
||||
return global.sent_strike_team;
|
||||
if("sent_syndicate_strike_team")
|
||||
return global.sent_syndicate_strike_team;
|
||||
if("sent_strike_teams")
|
||||
return global.sent_strike_teams;
|
||||
if("icons_to_ignore_at_floor_init")
|
||||
return global.icons_to_ignore_at_floor_init;
|
||||
if("plating_icons")
|
||||
@@ -3114,16 +3106,8 @@
|
||||
global.voxresearch_shuttle=newval
|
||||
if("response_team_members")
|
||||
global.response_team_members=newval
|
||||
if("send_emergency_team")
|
||||
global.send_emergency_team=newval
|
||||
if("ert_base_chance")
|
||||
global.ert_base_chance=newval
|
||||
if("can_call_ert")
|
||||
global.can_call_ert=newval
|
||||
if("sent_strike_team")
|
||||
global.sent_strike_team=newval
|
||||
if("sent_syndicate_strike_team")
|
||||
global.sent_syndicate_strike_team=newval
|
||||
if("sent_strike_teams")
|
||||
global.sent_strike_teams=newval
|
||||
if("icons_to_ignore_at_floor_init")
|
||||
global.icons_to_ignore_at_floor_init=newval
|
||||
if("plating_icons")
|
||||
|
||||
@@ -1609,6 +1609,9 @@ Game Mode config tags:
|
||||
/proc/stack_trace(message = "Getting a stack trace.")
|
||||
CRASH(message)
|
||||
|
||||
/proc/sentStrikeTeams(var/team)
|
||||
return (team in sent_strike_teams)
|
||||
|
||||
|
||||
/proc/get_exact_dist(atom/A, atom/B) //returns the coordinate distance between the coordinates of the turfs of A and B
|
||||
var/turf/T1 = A
|
||||
|
||||
@@ -180,13 +180,18 @@ var/shuttle_call/shuttle_calls[0]
|
||||
to_chat(usr, "<span class='notice'>\The [src.name] cannot establish a bluespace connection.</span>")
|
||||
return
|
||||
|
||||
if(sent_strike_team)
|
||||
if(sentStrikeTeams(TEAM_DEATHSQUAD))
|
||||
to_chat(usr, "<span class='warning'>PKI AUTH ERROR: SERVER REPORTS BLACKLISTED COMMUNICATION KEY PLEASE CONTACT SERVICE TECHNICIAN</span>")
|
||||
return
|
||||
|
||||
if(world.time < 6000)
|
||||
to_chat(usr, "<span class='notice'>The emergency response team is away on another mission, Please wait another [round((6000-world.time)/600)] minute\s before trying again.</span>")
|
||||
if(sentStrikeTeams(TEAM_ERT))
|
||||
to_chat(usr, "<span class='notice'>Central Command has already dispatched a Response Team to [station_name()]</span>")
|
||||
return
|
||||
|
||||
//if(world.time < 6000)
|
||||
// to_chat(usr, "<span class='notice'>The emergency response team is away on another mission, Please wait another [round((6000-world.time)/600)] minute\s before trying again.</span>")
|
||||
// return
|
||||
|
||||
if(emergency_shuttle.online)
|
||||
to_chat(usr, "The emergency shuttle is already on its way.")
|
||||
return
|
||||
@@ -196,9 +201,6 @@ var/shuttle_call/shuttle_calls[0]
|
||||
if(authenticated != 2 || issilicon(usr))
|
||||
to_chat(usr, "<span class='warning'>\The [src.name]'s screen flashes, \"Access Denied\".</span>")
|
||||
return
|
||||
if(send_emergency_team)
|
||||
to_chat(usr, "<span class='notice'>Central Command has already dispatched a Response Team to [station_name()]</span>")
|
||||
return
|
||||
|
||||
var/response = alert(usr,"Are you sure you want to request a response team?", "ERT Request", "Yes", "No")
|
||||
if(response != "Yes")
|
||||
@@ -209,7 +211,9 @@ var/shuttle_call/shuttle_calls[0]
|
||||
return
|
||||
if(!Adjacent(usr) || usr.incapacitated())
|
||||
return
|
||||
trigger_armed_response_team(1,ert_reason)
|
||||
var/datum/striketeam/ert/response_team = new()
|
||||
response_team.mission = ert_reason
|
||||
response_team.trigger_strike()
|
||||
log_game("[key_name(usr)] has called an ERT with reason: [ert_reason]")
|
||||
message_admins("[key_name_admin(usr)] has called an ERT with reason: [ert_reason]")
|
||||
setMenuState(usr,COMM_SCREEN_MAIN)
|
||||
@@ -393,7 +397,7 @@ var/shuttle_call/shuttle_calls[0]
|
||||
list("id"=SEC_LEVEL_BLUE, "name"="Blue"),
|
||||
//SEC_LEVEL_RED = list("name"="Red"),
|
||||
)
|
||||
data["ert_sent"] = send_emergency_team
|
||||
data["ert_sent"] = sentStrikeTeams(TEAM_ERT)
|
||||
|
||||
var/msg_data[0]
|
||||
for(var/i=1;i<=src.messagetext.len;i++)
|
||||
@@ -488,9 +492,10 @@ var/shuttle_call/shuttle_calls[0]
|
||||
if(!map.linked_to_centcomm)
|
||||
to_chat(usr, "<span class='danger'>Error: No connection can be made to central command .</span>")
|
||||
return
|
||||
if(sent_strike_team == 1)
|
||||
to_chat(user, "Centcom will not allow the shuttle to be called. Consider all contracts terminated.")
|
||||
return
|
||||
|
||||
//if(sent_strike_team == 1)
|
||||
// to_chat(user, "Centcom will not allow the shuttle to be called. Consider all contracts terminated.")
|
||||
// return
|
||||
|
||||
if(world.time < 6000) // Ten minute grace period to let the game get going without lolmetagaming. -- TLE
|
||||
to_chat(user, "The emergency shuttle is refueling. Please wait another [round((6000-world.time)/600)] minute\s before trying again.")
|
||||
@@ -539,9 +544,9 @@ var/shuttle_call/shuttle_calls[0]
|
||||
to_chat(user, "Centcom does not currently have a shuttle available in your sector. Please try again later.")
|
||||
return
|
||||
|
||||
if(sent_strike_team == 1)
|
||||
to_chat(user, "Centcom will not allow the shuttle to be called. Consider all contracts terminated.")
|
||||
return
|
||||
//if(sent_strike_team == 1)
|
||||
// to_chat(user, "Centcom will not allow the shuttle to be called. Consider all contracts terminated.")
|
||||
// return
|
||||
|
||||
if(world.time < 54000) // 30 minute grace period to let the game get going
|
||||
to_chat(user, "The shuttle is refueling. Please wait another [round((54000-world.time)/600)] minutes before trying again.")//may need to change "/600"
|
||||
@@ -631,7 +636,7 @@ var/shuttle_call/shuttle_calls[0]
|
||||
if(!shuttlecaller.stat && shuttlecaller.client && istype(shuttlecaller.loc,/turf))
|
||||
return ..()
|
||||
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || sent_strike_team)
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction")
|
||||
return ..()
|
||||
|
||||
emergency_shuttle.incall(2)
|
||||
@@ -656,7 +661,7 @@ var/shuttle_call/shuttle_calls[0]
|
||||
if(!shuttlecaller.stat && shuttlecaller.client && istype(shuttlecaller.loc,/turf))
|
||||
return ..()
|
||||
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || sent_strike_team)
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction")
|
||||
return ..()
|
||||
|
||||
emergency_shuttle.incall(2)
|
||||
|
||||
@@ -267,10 +267,6 @@ var/specops_shuttle_timeleft = 0
|
||||
to_chat(user, "<span class='warning'>Access Denied.</span>")
|
||||
return
|
||||
|
||||
if (sent_strike_team == 0 && send_emergency_team == 0)
|
||||
to_chat(usr, "<span class='warning'>The strike team has not yet deployed.</span>")
|
||||
return
|
||||
|
||||
if(..())
|
||||
return
|
||||
|
||||
|
||||
@@ -1,211 +1,63 @@
|
||||
//STRIKE TEAMS
|
||||
//Thanks to Kilakk for the admin-button portion of this code.
|
||||
//ERT
|
||||
|
||||
var/list/response_team_members = list()
|
||||
var/global/send_emergency_team = 0 // Used for automagic response teams
|
||||
// 'admin_emergency_team' for admin-spawned response teams
|
||||
var/ert_base_chance = 10 // Default base chance. Will be incremented by increment ERT chance.
|
||||
var/can_call_ert
|
||||
|
||||
/client/proc/response_team()
|
||||
set name = "Dispatch Emergency Response Team"
|
||||
set category = "Special Verbs"
|
||||
set desc = "Send an emergency response team to the station"
|
||||
/datum/striketeam/ert
|
||||
striketeam_name = "Emergency Response Team"
|
||||
faction_name = "Nanotrasen"
|
||||
mission = "Ensure the station's return to working order, or organize its evacuation if judged necessary."
|
||||
team_size = 6
|
||||
min_size_for_leader = 0//set to 0 so there's always a designated team leader or to -1 so there is no leader.
|
||||
spawns_name = "ERT"
|
||||
can_customize = TRUE
|
||||
logo = "ert-logo"
|
||||
|
||||
if(!holder)
|
||||
to_chat(usr, "<span class='warning'>Only administrators may use this command.</span>")
|
||||
return
|
||||
if(!ticker)
|
||||
to_chat(usr, "<span class='warning'>The game hasn't started yet!</span>")
|
||||
return
|
||||
if(ticker.current_state == 1)
|
||||
to_chat(usr, "<span class='warning'>The round hasn't started yet!</span>")
|
||||
return
|
||||
if(send_emergency_team)
|
||||
to_chat(usr, "<span class='warning'>Central Command has already dispatched an emergency response team!</span>")
|
||||
return
|
||||
if(alert("Do you want to dispatch an Emergency Response Team?",,"Yes","No") != "Yes")
|
||||
return
|
||||
if(get_security_level() != "red") // Allow admins to reconsider if the alert level isn't Red
|
||||
switch(alert("The station is not in red alert. Do you still want to dispatch a response team?",,"Yes","No"))
|
||||
if("No")
|
||||
return
|
||||
var/ert_reason = stripped_input(usr, "Please give a reason for calling the ERT.", "ERT Reason")
|
||||
if(send_emergency_team)
|
||||
to_chat(usr, "<span class='warning'>Looks like somebody beat you to it!</span>")
|
||||
return
|
||||
|
||||
message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team. Reason given: [ert_reason]")
|
||||
log_admin("[key_name(usr)] used Dispatch Response Team. Reason given is: [ert_reason]")
|
||||
trigger_armed_response_team(1,ert_reason)
|
||||
|
||||
|
||||
client/verb/JoinResponseTeam()
|
||||
set category = "OOC"
|
||||
|
||||
if(istype(usr,/mob/dead/observer) || istype(usr,/mob/new_player))
|
||||
if(!send_emergency_team)
|
||||
to_chat(usr, "No emergency response team is currently being sent.")
|
||||
return
|
||||
if(jobban_isbanned(usr, "Syndicate") || jobban_isbanned(usr, "Emergency Response Team") || jobban_isbanned(usr, "Security Officer"))
|
||||
to_chat(usr, "<font color=red><b>You are jobbanned from the emergency reponse team!")
|
||||
return
|
||||
|
||||
if(response_team_members.len > 5)
|
||||
to_chat(usr, "The emergency response team is already full!")
|
||||
|
||||
|
||||
for (var/obj/effect/landmark/L in landmarks_list) if (L.name == "ERT")
|
||||
L.name = null//Reserving the place.
|
||||
var/new_name = copytext(sanitize(input(usr, "Pick a name","Name") as null|text), 1, MAX_MESSAGE_LEN)
|
||||
if(!new_name)//Somebody changed his mind, place is available again.
|
||||
L.name = "ERT"
|
||||
return
|
||||
var/leader_selected = isemptylist(response_team_members)
|
||||
var/mob/living/carbon/human/new_commando = create_response_team(L.loc, leader_selected, new_name)
|
||||
qdel(L)
|
||||
L = null
|
||||
message_admins("[key_name(usr)] has joined the Emergency Response Team.")
|
||||
new_commando.mind.key = usr.key
|
||||
new_commando.key = usr.key
|
||||
|
||||
to_chat(new_commando, "<span class='notice'>You are [!leader_selected?"a member":"the <B>LEADER</B>"] of an Emergency Response Team, a type of military division, under CentComm's service. There is a code red alert on [station_name()], you are tasked to go and fix the problem.</span>")
|
||||
to_chat(new_commando, "<b>You should first gear up and discuss a plan with your team. More members may be joining, don't move out before you're ready.")
|
||||
if(!leader_selected)
|
||||
to_chat(new_commando, "<b>As member of the Emergency Response Team, you answer only to your leader and CentComm officials.</b>")
|
||||
else
|
||||
to_chat(new_commando, "<b>As leader of the Emergency Response Team, you answer only to CentComm, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however.")
|
||||
if(ticker.mode.ert_reason)
|
||||
to_chat(new_commando, "<b>The communication from the station indicated that the reason you were called is '[ticker.mode.ert_reason]'.")
|
||||
|
||||
ticker.mode.ert += new_commando.mind
|
||||
return
|
||||
|
||||
else
|
||||
to_chat(usr, "You need to be an observer or new player to use this.")
|
||||
|
||||
// returns a number of dead players in %
|
||||
proc/percentage_dead()
|
||||
var/total = 0
|
||||
var/deadcount = 0
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(H.client) // Monkeys and mice don't have a client, amirite?
|
||||
if(H.stat == 2)
|
||||
deadcount++
|
||||
total++
|
||||
|
||||
if(total == 0)
|
||||
return 0
|
||||
else
|
||||
return round(100 * deadcount / total)
|
||||
|
||||
// counts the number of antagonists in %
|
||||
proc/percentage_antagonists()
|
||||
var/total = 0
|
||||
var/antagonists = 0
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(is_special_character(H) >= 1)
|
||||
antagonists++
|
||||
total++
|
||||
|
||||
if(total == 0)
|
||||
return 0
|
||||
else
|
||||
return round(100 * antagonists / total)
|
||||
|
||||
// Increments the ERT chance automatically, so that the later it is in the round,
|
||||
// the more likely an ERT is to be able to be called.
|
||||
proc/increment_ert_chance()
|
||||
while(send_emergency_team == 0) // There is no ERT at the time.
|
||||
if(get_security_level() == "green")
|
||||
ert_base_chance += 1
|
||||
if(get_security_level() == "blue")
|
||||
ert_base_chance += 2
|
||||
if(get_security_level() == "red")
|
||||
ert_base_chance += 3
|
||||
if(get_security_level() == "delta")
|
||||
ert_base_chance += 10 // Need those big guns
|
||||
sleep(600 * 3) // Minute * Number of Minutes
|
||||
|
||||
|
||||
proc/trigger_armed_response_team(var/force = 0, var/reason)
|
||||
if(!can_call_ert && !force)
|
||||
return
|
||||
if(send_emergency_team)
|
||||
return
|
||||
|
||||
var/send_team_chance = ert_base_chance // Is incremented by increment_ert_chance.
|
||||
send_team_chance += 2*percentage_dead() // the more people are dead, the higher the chance
|
||||
send_team_chance += percentage_antagonists() // the more antagonists, the higher the chance
|
||||
send_team_chance = min(send_team_chance, 100)
|
||||
|
||||
if(force)
|
||||
send_team_chance = 100
|
||||
|
||||
// there's only a certain chance a team will be sent
|
||||
if(!prob(send_team_chance))
|
||||
command_alert(/datum/command_alert/ert_fail)
|
||||
can_call_ert = 0 // Only one call per round, ladies.
|
||||
return
|
||||
/datum/striketeam/ert/failure()
|
||||
command_alert(/datum/command_alert/ert_fail)
|
||||
|
||||
/datum/striketeam/ert/extras()
|
||||
command_alert(/datum/command_alert/ert_success)
|
||||
if(reason)
|
||||
ticker.mode.ert_reason = reason
|
||||
for(var/mob/M in player_list)
|
||||
if(istype(M, /mob/dead/observer))
|
||||
to_chat(M, "<span class='interface big'><span class='bold'>An Emergency Response Team has been called! Consider joining up:</span> \
|
||||
(Verbs -> OOC -> JoinResponseTeam, or <a href='?src=\ref[M];joinresponseteam=1'>click here.</a>)</span>")
|
||||
|
||||
/datum/striketeam/ert/greet_commando(var/mob/living/carbon/human/H)
|
||||
if(H.key == leader_key)
|
||||
to_chat(H, "<span class='notice'>You are [H.real_name], the Commander of the Emergency Response Team, in the service of Nanotrasen.</span>")
|
||||
else
|
||||
to_chat(H, "<span class='notice'>You are [H.real_name], an Emergency Responder, in the service of Nanotrasen.</span>")
|
||||
to_chat(H, "<span class='notice'>Your mission is: <span class='danger'>[mission]</span></span>")
|
||||
|
||||
can_call_ert = 0 // Only one call per round, gentleman.
|
||||
send_emergency_team = 1
|
||||
|
||||
spawn(600 * 5)
|
||||
send_emergency_team = 0 // Can no longer join the ERT.
|
||||
|
||||
var/nuke_code
|
||||
for(var/obj/machinery/nuclearbomb/nuke in machines)
|
||||
nuke_code = nuke.r_code
|
||||
var/obj/item/weapon/paper/P = new
|
||||
P.info = "Your orders, Commander, are to use all means necessary to return the station to a survivable condition.<br>To this end, you have been provided with the best tools we can give in the three areas of Medicine, Engineering, and Security. The nuclear authorization code is: <b>[ nuke_code ? nuke_code : "No Nuke Found, Request Another!"]</b>. Be warned, if you detonate this without good reason, we will hold you to account for damages. Memorise this code, and then burn this message."
|
||||
P.name = "Emergency Nuclear Code, and ERT Orders"
|
||||
for (var/obj/effect/landmark/A in landmarks_list)
|
||||
if (A.name == "nukecode")
|
||||
P.forceMove(A.loc)
|
||||
qdel(A)
|
||||
A = null
|
||||
continue
|
||||
|
||||
/client/proc/create_response_team(obj/spawn_location, leader_selected = 0, commando_name)
|
||||
|
||||
|
||||
// to_chat(usr, "<span class='warning'>ERT has been temporarily disabled. Talk to a coder.</span>")
|
||||
//return
|
||||
|
||||
var/mob/living/carbon/human/M = new(null)
|
||||
/datum/striketeam/ert/create_commando(obj/spawn_location, leader_selected = 0, key = "")
|
||||
var/mob/living/carbon/human/M = new(spawn_location.loc)
|
||||
response_team_members |= M
|
||||
|
||||
//todo: god damn this.
|
||||
//make it a panel, like in character creation
|
||||
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
||||
var/mob/user = null
|
||||
for(var/mob/MO in player_list)
|
||||
if(MO.key == key)
|
||||
user = MO
|
||||
|
||||
to_chat(user, "<span class='notice'>Congratulations, you've been selected to be part of an ERT. You can customize your character, but don't take too long, time is of the essence!</span>")
|
||||
|
||||
var/commando_name = copytext(sanitize(input(user, "Pick a name","Name") as null|text), 1, MAX_MESSAGE_LEN)
|
||||
|
||||
//todo: make it a panel, like in character creation
|
||||
var/new_facial = input(user, "Please select facial hair color.", "Character Generation") as color
|
||||
if(new_facial)
|
||||
M.r_facial = hex2num(copytext(new_facial, 2, 4))
|
||||
M.g_facial = hex2num(copytext(new_facial, 4, 6))
|
||||
M.b_facial = hex2num(copytext(new_facial, 6, 8))
|
||||
|
||||
var/new_hair = input("Please select hair color.", "Character Generation") as color
|
||||
var/new_hair = input(user, "Please select hair color.", "Character Generation") as color
|
||||
if(new_facial)
|
||||
M.r_hair = hex2num(copytext(new_hair, 2, 4))
|
||||
M.g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
M.b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
|
||||
var/new_eyes = input("Please select eye color.", "Character Generation") as color
|
||||
var/new_eyes = input(user, "Please select eye color.", "Character Generation") as color
|
||||
if(new_eyes)
|
||||
M.r_eyes = hex2num(copytext(new_eyes, 2, 4))
|
||||
M.g_eyes = hex2num(copytext(new_eyes, 4, 6))
|
||||
M.b_eyes = hex2num(copytext(new_eyes, 6, 8))
|
||||
|
||||
var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
|
||||
var/new_tone = input(user, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text
|
||||
|
||||
if (!new_tone)
|
||||
new_tone = 35
|
||||
@@ -223,22 +75,23 @@ proc/trigger_armed_response_team(var/force = 0, var/reason)
|
||||
qdel(H) // delete the hair after it's all done
|
||||
H = null
|
||||
|
||||
// var/new_style = input("Please select hair style", "Character Generation") as null|anything in hairs
|
||||
//hair
|
||||
var/new_hstyle = input(usr, "Select a hair style", "Grooming") as null|anything in hair_styles_list
|
||||
//hair
|
||||
var/new_hstyle = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles_list
|
||||
if(new_hstyle)
|
||||
M.h_style = new_hstyle
|
||||
|
||||
// facial hair
|
||||
var/new_fstyle = input(usr, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
|
||||
var/new_fstyle = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
|
||||
if(new_fstyle)
|
||||
M.f_style = new_fstyle
|
||||
var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female")
|
||||
|
||||
var/new_gender = alert(user, "Please select gender.", "Character Generation", "Male", "Female")
|
||||
if (new_gender)
|
||||
if(new_gender == "Male")
|
||||
M.setGender(MALE)
|
||||
else
|
||||
M.setGender(FEMALE)
|
||||
|
||||
//M.rebuild_appearance()
|
||||
M.update_hair()
|
||||
M.update_body()
|
||||
@@ -258,13 +111,11 @@ proc/trigger_armed_response_team(var/force = 0, var/reason)
|
||||
M.mind.special_role = "Response Team"
|
||||
if(!(M.mind in ticker.minds))
|
||||
ticker.minds += M.mind//Adds them to regular mind list.
|
||||
M.forceMove(spawn_location)
|
||||
M.equip_strike_team(leader_selected)
|
||||
M.forceMove(spawn_location.loc)
|
||||
M.equip_response_team(leader_selected)
|
||||
return M
|
||||
|
||||
/mob/living/carbon/human/proc/equip_strike_team(leader_selected = 0)
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/equip_response_team(leader_selected = 0)
|
||||
//Special radio setup
|
||||
equip_to_slot_or_del(new /obj/item/device/radio/headset/ert(src), slot_ears)
|
||||
|
||||
@@ -312,9 +163,3 @@ proc/trigger_armed_response_team(var/force = 0, var/reason)
|
||||
L.part = affected
|
||||
|
||||
return 1
|
||||
|
||||
//debug verb (That is horribly coded, LEAVE THIS OFF UNLESS PRIVATELY TESTING. Seriously.
|
||||
/*client/verb/ResponseTeam()
|
||||
set category = "Admin"
|
||||
if(!send_emergency_team)
|
||||
send_emergency_team = 1*/
|
||||
|
||||
@@ -1,106 +1,18 @@
|
||||
//STRIKE TEAMS
|
||||
//DEATH SQUAD
|
||||
|
||||
var/const/commandos_possible = 6 //if more Commandos are needed in the future
|
||||
var/global/sent_strike_team = 0
|
||||
/datum/striketeam/deathsquad
|
||||
striketeam_name = "Death Squad"
|
||||
faction_name = "Nanotrasen"
|
||||
mission = "Clean up the Station of all enemies of Nanotrasen. Avoid damage to Nanotrasen assets, unless you judge it necessary."
|
||||
team_size = 6
|
||||
min_size_for_leader = 4//set to 0 so there's always a designated team leader or to -1 so there is no leader.
|
||||
spawns_name = "Commando"
|
||||
can_customize = FALSE
|
||||
logo = "death-logo"
|
||||
|
||||
/client/proc/strike_team()
|
||||
if(!ticker)
|
||||
to_chat(usr, "<font color='red'>The game hasn't started yet!</font>")
|
||||
return
|
||||
if(world.time < 6000)
|
||||
to_chat(usr, "<font color='red'>There are [(6000-world.time)/10] seconds remaining before it may be called.</font>")
|
||||
return
|
||||
if(sent_strike_team == 1)
|
||||
to_chat(usr, "<font color='red'>CentCom is already sending a team.</font>")
|
||||
return
|
||||
if(alert("Do you want to send in the CentCom death squad? Once enabled, this is irreversible.",,"Yes","No")!="Yes")
|
||||
return
|
||||
alert("This 'mode' will go on until everyone is dead or the station is destroyed. You may also admin-call the evac shuttle when appropriate. Spawned commandos have internals cameras which are viewable through a monitor inside the Spec. Ops. Office. Assigning the team's detailed task is recommended from there. While you will be able to manually pick the candidates from active ghosts, their assignment in the squad will be random.")
|
||||
|
||||
var/input = null
|
||||
while(!input)
|
||||
input = copytext(sanitize(input(src, "Please specify which mission the death commando squad shall undertake.", "Specify Mission", "")),1,MAX_MESSAGE_LEN)
|
||||
if(!input)
|
||||
if(alert("Error, no mission set. Do you want to exit the setup process?",,"Yes","No")=="Yes")
|
||||
return
|
||||
|
||||
if(sent_strike_team)
|
||||
to_chat(usr, "Looks like someone beat you to it.")
|
||||
return
|
||||
|
||||
sent_strike_team = 1
|
||||
|
||||
if (emergency_shuttle.direction == 1 && emergency_shuttle.online == 1)
|
||||
emergency_shuttle.recall()
|
||||
|
||||
var/commando_number = commandos_possible //for selecting a leader
|
||||
var/leader_selected = 0 //when the leader is chosen. The last person spawned.
|
||||
|
||||
//Code for spawning a nuke auth code.
|
||||
var/nuke_code
|
||||
var/temp_code
|
||||
for(var/obj/machinery/nuclearbomb/N in machines)
|
||||
temp_code = text2num(N.r_code)
|
||||
if(temp_code)//if it's actually a number. It won't convert any non-numericals.
|
||||
nuke_code = N.r_code
|
||||
break
|
||||
|
||||
//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos.
|
||||
var/list/candidates = list() //candidates for being a commando out of all the active ghosts in world.
|
||||
var/list/commandos = list() //actual commando ghosts as picked by the user.
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(!G.client.holder && !G.client.is_afk()) //Whoever called/has the proc won't be added to the list.
|
||||
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
|
||||
candidates += G.key
|
||||
for(var/i=commandos_possible,(i>0&&candidates.len),i--)//Decrease with every commando selected.
|
||||
var/candidate = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates //It will auto-pick a person when there is only one candidate.
|
||||
candidates -= candidate //Subtract from candidates.
|
||||
commandos += candidate//Add their ghost to commandos.
|
||||
|
||||
//Spawns commandos and equips them.
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(commando_number<=0)
|
||||
break
|
||||
if (L.name == "Commando")
|
||||
leader_selected = commando_number == 1?1:0
|
||||
|
||||
var/mob/living/carbon/human/new_commando = create_death_commando(L, leader_selected)
|
||||
|
||||
if(commandos.len)
|
||||
new_commando.key = pick(commandos)
|
||||
commandos -= new_commando.key
|
||||
new_commando.internal = new_commando.s_store
|
||||
new_commando.internals.icon_state = "internal1"
|
||||
|
||||
//So they don't forget their code or mission.
|
||||
if(nuke_code)
|
||||
new_commando.mind.store_memory("<B>Nuke Code:</B> <span class='warning'>[nuke_code].</span>")
|
||||
new_commando.mind.store_memory("<B>Mission:</B> <span class='warning'>[input].</span>")
|
||||
|
||||
to_chat(new_commando, "<span class='notice'>You are a Special Ops. [!leader_selected?"commando":"<B>LEADER</B>"] in the service of Central Command. Check the table ahead for detailed instructions.\nYour current mission is: <span class='danger'>[input]</span></span>")
|
||||
|
||||
commando_number--
|
||||
|
||||
//Spawns the rest of the commando gear.
|
||||
for (var/obj/effect/landmark/L in landmarks_list)
|
||||
if (L.name == "Commando_Manual")
|
||||
//new /obj/item/weapon/gun/energy/pulse_rifle(L.loc)
|
||||
var/obj/item/weapon/paper/P = new(L.loc)
|
||||
P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
|
||||
P.name = "Spec. Ops. Manual"
|
||||
|
||||
for (var/obj/effect/landmark/L in landmarks_list)
|
||||
if (L.name == "Commando-Bomb")
|
||||
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
|
||||
qdel(L)
|
||||
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] has spawned a CentCom strike squad.</span>", 1)
|
||||
log_admin("[key_name(usr)] used Spawn Death Squad.")
|
||||
return 1
|
||||
|
||||
/client/proc/create_death_commando(obj/spawn_location, leader_selected = 0)
|
||||
/datum/striketeam/deathsquad/create_commando(obj/spawn_location, leader_selected = 0)
|
||||
var/mob/living/carbon/human/new_commando = new(spawn_location.loc)
|
||||
var/commando_leader_rank = pick("Lieutenant", "Captain", "Major")
|
||||
var/commando_leader_rank = "Major"
|
||||
var/commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major")
|
||||
var/commando_name = pick(last_names)
|
||||
|
||||
@@ -109,7 +21,7 @@ var/global/sent_strike_team = 0
|
||||
var/datum/preferences/A = new()//Randomize appearance for the commando.
|
||||
A.randomize_appearance_for(new_commando)
|
||||
|
||||
new_commando.real_name = "[!leader_selected ? commando_rank : commando_leader_rank] [commando_name]"
|
||||
new_commando.real_name = "[!leader_selected ? commando_rank : commando_leader_rank] [!leader_selected ? commando_name : "Creed"]"
|
||||
new_commando.age = !leader_selected ? rand(23,35) : rand(35,45)
|
||||
|
||||
new_commando.dna.ready_dna(new_commando)//Creates DNA.
|
||||
@@ -124,37 +36,58 @@ var/global/sent_strike_team = 0
|
||||
ticker.mode.deathsquad += new_commando.mind
|
||||
return new_commando
|
||||
|
||||
/mob/living/carbon/human/proc/equip_death_commando(leader_selected = 0)
|
||||
|
||||
/datum/striketeam/deathsquad/greet_commando(var/mob/living/carbon/human/H)
|
||||
if(H.key == leader_key)
|
||||
to_chat(H, "<span class='notice'>You are [H.real_name], a tactical genius and the leader of the Death Squad, in the service of Nanotrasen.</span>")
|
||||
else
|
||||
to_chat(H, "<span class='notice'>You are [H.real_name], a Death Squad commando, in the service of Nanotrasen.</span>")
|
||||
if (leader_key != "")
|
||||
to_chat(H, "<span class='notice'>Follow directions from your superior, Creed.</span>")
|
||||
to_chat(H, "<span class='notice'>Your mission is: <span class='danger'>[mission]</span></span>")
|
||||
|
||||
/mob/living/carbon/human/proc/equip_death_commando(leader = 0)
|
||||
//Special radio setup
|
||||
equip_to_slot_or_del(new /obj/item/device/radio/headset/deathsquad(src), slot_ears)
|
||||
|
||||
if (leader_selected == 0)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/deathsquad(src), slot_w_uniform)
|
||||
//Adding Camera Network
|
||||
var/obj/machinery/camera/camera = new /obj/machinery/camera(src) //Gives all the commandos internals cameras.
|
||||
camera.network = "CREED"
|
||||
camera.c_tag = real_name
|
||||
|
||||
//Basic Uniform
|
||||
if (leader)
|
||||
var/obj/item/clothing/under/rank/centcom_officer/uni = new /obj/item/clothing/under/rank/centcom_officer(src)
|
||||
uni.attach_accessory(new/obj/item/clothing/accessory/holomap_chip/deathsquad(src))
|
||||
equip_to_slot_or_del(uni, slot_w_uniform)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(src), slot_w_uniform)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/deathsquad(src), slot_w_uniform)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(src), slot_belt)
|
||||
|
||||
//Shoes & gloves
|
||||
equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/deathsquad(src), slot_shoes)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/deathsquad(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(src), slot_gloves)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/deathsquad(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(src), slot_wear_mask)
|
||||
|
||||
//Glasses
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
|
||||
//Mask & Armor
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/deathsquad(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/deathsquad(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double(src), slot_s_store)
|
||||
|
||||
//Backpack
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_storage/box/a357(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/shield/energy(src), slot_in_backpack)
|
||||
if (!leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
else
|
||||
if (leader)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(src), slot_belt)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
|
||||
put_in_hands(new /obj/item/weapon/gun/energy/pulse_rifle(src))
|
||||
|
||||
|
||||
186
code/game/striketeams/striketeam_datums.dm
Normal file
186
code/game/striketeams/striketeam_datums.dm
Normal file
@@ -0,0 +1,186 @@
|
||||
|
||||
var/list/sent_strike_teams = list()
|
||||
|
||||
/datum/striketeam
|
||||
var/striketeam_name = "Spec.Ops."
|
||||
var/faction_name = "Nanotrasen"
|
||||
var/mission = "Clean up the Station of all enemies of Nanotrasen. Avoid damage to Nanotrasen assets, unless you judge it necessary."
|
||||
var/team_size = 6
|
||||
var/min_size_for_leader = 4//set to 0 so there's always a designated team leader or to -1 so there is no leader.
|
||||
var/spawns_name = "Commando"
|
||||
var/can_customize = FALSE
|
||||
var/logo = "nano-logo"
|
||||
|
||||
var/list/applicants = list()
|
||||
var/searching = FALSE
|
||||
|
||||
var/leader_key = ""
|
||||
var/list/team_composition = list()
|
||||
|
||||
|
||||
/datum/striketeam/proc/trigger_strike(var/mob/user)
|
||||
//Is the game started
|
||||
if(!ticker)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>The game hasn't started yet!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//Has someone already sent a strike team of this type
|
||||
if(sentStrikeTeams(striketeam_name))
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>[faction_name] has already sent \a [striketeam_name].</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//Logging
|
||||
message_admins("<span class='notice'>[key_name(user)] is preparing a [striketeam_name].</span>", 1)
|
||||
|
||||
if(user)
|
||||
if(alert("Do you really want [faction_name] to send in the [striketeam_name]?",,"Yes","No")!="Yes")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
mission = input(user, "Please specify which mission the [striketeam_name] shall undertake.", "Specify Mission", "")
|
||||
|
||||
if(!mission)
|
||||
if(alert("Error, no mission set. Do you want to exit the setup process?",,"Yes","No")=="Yes")
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
mission = initial(mission)
|
||||
|
||||
if(sentStrikeTeams(striketeam_name))
|
||||
to_chat(user, "Looks like someone beat you to it.")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
sent_strike_teams[striketeam_name] = src
|
||||
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>[faction_name] has received your request. Commando applications will be open for the next minute.</span>")
|
||||
|
||||
searching = TRUE
|
||||
|
||||
var/icon/team_logo = icon('icons/mob/mob.dmi', logo)
|
||||
for(var/mob/dead/observer/O in dead_mob_list)
|
||||
if(jobban_isbanned(O, "Strike Team") || O.client.is_afk())
|
||||
continue
|
||||
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>[faction_name] needs YOU to become part of its upcoming [striketeam_name]. (<a href='?src=\ref[src];signup=\ref[O]'>Apply now!</a>)</span>[bicon(team_logo)]")
|
||||
|
||||
spawn(1 MINUTES)
|
||||
searching = FALSE
|
||||
|
||||
for(var/mob/dead/observer/O in dead_mob_list)
|
||||
if(jobban_isbanned(O, "Strike Team") || O.client.is_afk())
|
||||
continue
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>Applications for [faction_name]'s [striketeam_name] are now closed.</span>[bicon(team_logo)]")
|
||||
|
||||
if(!applicants || applicants.len <= 0)
|
||||
log_admin("[striketeam_name] received no applications.")
|
||||
message_admins("[striketeam_name] received no applications.")
|
||||
failure()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/list/commando_spawns = list_commando_spawns()
|
||||
var/commando_count = min(applicants.len,team_size)
|
||||
var/leader = FALSE
|
||||
|
||||
if(min_size_for_leader >= 0 && applicants.len >= min_size_for_leader)
|
||||
leader = TRUE
|
||||
|
||||
for (var/i = commando_count, i > 0, i--)
|
||||
if (commando_spawns.len <= 0)
|
||||
commando_spawns = list_commando_spawns()
|
||||
//The point here is to try not having commandos spawn atop each others.
|
||||
|
||||
if(applicants.len <= 0)
|
||||
break
|
||||
|
||||
var/mob/applicant = null
|
||||
for(var/mob/M in player_list)
|
||||
if(M.key == pick(applicants))
|
||||
applicant = M
|
||||
applicants -= applicant.key
|
||||
|
||||
if(!isobserver(applicant))
|
||||
//Making sure we don't recruit people who got back into the game since they applied
|
||||
continue
|
||||
|
||||
var/obj/effect/landmark/L = pick(commando_spawns)
|
||||
commando_spawns -= L
|
||||
|
||||
spawn()//not waiting for players to customize their characters to move on
|
||||
var/mob/living/carbon/human/new_commando = create_commando(L, leader, applicant.key)
|
||||
team_composition |= new_commando
|
||||
new_commando.key = applicant.key
|
||||
|
||||
if (leader)
|
||||
leader_key = new_commando.key
|
||||
leader = FALSE
|
||||
|
||||
new_commando.mind.store_memory("<B>Mission:</B> <span class='warning'>[mission].</span>")
|
||||
|
||||
greet_commando(new_commando)
|
||||
extras()
|
||||
|
||||
/datum/striketeam/proc/create_commando(var/obj/spawn_location,var/leader_selected=0,var/mob_key = "")
|
||||
var/mob/living/carbon/human/new_commando = new(spawn_location.loc)
|
||||
return new_commando
|
||||
|
||||
/datum/striketeam/proc/greet_commando(var/mob/living/carbon/human/H)
|
||||
to_chat(H, "<span class='notice'>You are a [striketeam_name] commando, in the service of [faction_name].</span>")
|
||||
to_chat(H, "<span class='notice'>Your current mission is: <span class='danger'>[mission]</span></span>")
|
||||
|
||||
/datum/striketeam/Topic(var/href, var/list/href_list)
|
||||
if(href_list["signup"])
|
||||
var/mob/dead/observer/O = usr
|
||||
if(!O || !istype(O))
|
||||
return
|
||||
|
||||
volunteer(O)
|
||||
|
||||
/datum/striketeam/proc/failure()
|
||||
|
||||
/datum/striketeam/proc/extras()
|
||||
|
||||
/datum/striketeam/proc/volunteer(var/mob/dead/observer/O)
|
||||
if(!searching || !istype(O))
|
||||
return
|
||||
|
||||
if(jobban_isbanned(O, "Strike Team"))
|
||||
to_chat(O, "<span class='danger'>Banned from Strike Teams.</span>")
|
||||
to_chat(O, "<span class='warning'>Your application to the [striketeam_name] has been discarded due to past conduct..</span>")
|
||||
return
|
||||
|
||||
if(O.key in applicants)
|
||||
to_chat(O, "<span class='notice'>Removed from the [striketeam_name] registration list.</span>")
|
||||
applicants -= O.key
|
||||
return
|
||||
|
||||
else
|
||||
to_chat(O, "<span class='notice'>Added to the [striketeam_name] registration list.</span>")
|
||||
applicants |= O.key
|
||||
return
|
||||
|
||||
|
||||
/datum/striketeam/proc/list_commando_spawns()
|
||||
var/list/commando_spawns = list()
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if (L.name == spawns_name)
|
||||
commando_spawns |= L
|
||||
return commando_spawns
|
||||
|
||||
///////////////////////////////////////CUSTOM STRIKE TEAMS///////////////////////////////////
|
||||
|
||||
/datum/striketeam/custom/trigger_strike(var/mob/user)
|
||||
striketeam_name = input(user, "Name your strike team.", "Custom Strike Team", "")
|
||||
faction_name = input(user, "Name the organization sending this strike team.", "Custom Strike Team", "")
|
||||
team_size = input(user, "Set the maximum amount of commandos in your squad", "Custom Strike Team", "") as num
|
||||
min_size_for_leader = -1
|
||||
spawns_name = input(user, "What are named the landmarks you want your squadies to spawn at?", "Custom Strike Team", "")
|
||||
can_customize = FALSE
|
||||
logo = input(user, "Got a custom logo for your strike team?", "Custom Strike Team", "nano-logo")
|
||||
..()
|
||||
@@ -1,110 +1,22 @@
|
||||
//STRIKE TEAMS
|
||||
//ELITE SYNDICATE STRIKE TEAM
|
||||
|
||||
var/const/syndicate_commandos_possible = 6 //if more Commandos are needed in the future
|
||||
var/global/sent_syndicate_strike_team = 0
|
||||
/client/proc/syndicate_strike_team()
|
||||
set category = "Fun"
|
||||
set name = "Spawn Syndicate Strike Team"
|
||||
set desc = "Spawns a squad of commandos in the Syndicate Mothership if you want to run an admin event."
|
||||
/datum/striketeam/syndicate
|
||||
striketeam_name = "Elite Strike Team"
|
||||
faction_name = "the Syndicate"
|
||||
mission = "Purify the station."
|
||||
team_size = 6
|
||||
min_size_for_leader = -1//set to 0 so there's always a designated team leader or to -1 so there is no leader.
|
||||
spawns_name = "Syndicate-Commando"
|
||||
can_customize = FALSE
|
||||
logo = "synd-logo"
|
||||
|
||||
if(!src.holder)
|
||||
to_chat(src, "Only administrators may use this command.")
|
||||
return
|
||||
if(!ticker)
|
||||
alert("The game hasn't started yet!")
|
||||
return
|
||||
// if(world.time < 6000)
|
||||
// alert("Not so fast, buddy. Wait a few minutes until the game gets going. There are [(6000-world.time)/10] seconds remaining.")
|
||||
// return
|
||||
if(sent_syndicate_strike_team == 1)
|
||||
alert("The Syndicate are already sending a team, Mr. Dumbass.")
|
||||
return
|
||||
if(alert("Do you want to send in the Syndicate Strike Team? Once enabled, this is irreversible.",,"Yes","No")=="No")
|
||||
return
|
||||
alert("This 'mode' will go on until everyone is dead or the station is destroyed. You may also admin-call the evac shuttle when appropriate. Spawned syndicates have internals cameras which are viewable through a monitor inside the Syndicate Mothership Bridge. Assigning the team's detailed task is recommended from there. While you will be able to manually pick the candidates from active ghosts, their assignment in the squad will be random.")
|
||||
|
||||
var/input = null
|
||||
while(!input)
|
||||
input = copytext(sanitize(input(src, "Please specify which mission the syndicate strike team shall undertake.", "Specify Mission", "")),1,MAX_MESSAGE_LEN)
|
||||
if(!input)
|
||||
if(alert("Error, no mission set. Do you want to exit the setup process?",,"Yes","No")=="Yes")
|
||||
return
|
||||
|
||||
if(sent_syndicate_strike_team)
|
||||
to_chat(src, "Looks like someone beat you to it.")
|
||||
return
|
||||
|
||||
sent_syndicate_strike_team = 1
|
||||
|
||||
if (emergency_shuttle.direction == 1 && emergency_shuttle.online == 1)
|
||||
emergency_shuttle.recall()
|
||||
|
||||
var/syndicate_commando_number = syndicate_commandos_possible //for selecting a leader
|
||||
var/syndicate_leader_selected = 0 //when the leader is chosen. The last person spawned.
|
||||
|
||||
//Code for spawning a nuke auth code.
|
||||
var/nuke_code
|
||||
var/temp_code
|
||||
for(var/obj/machinery/nuclearbomb/N in machines)
|
||||
temp_code = text2num(N.r_code)
|
||||
if(temp_code)//if it's actually a number. It won't convert any non-numericals.
|
||||
nuke_code = N.r_code
|
||||
break
|
||||
|
||||
//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos.
|
||||
var/list/candidates = list() //candidates for being a commando out of all the active ghosts in world.
|
||||
var/list/commandos = list() //actual commando ghosts as picked by the user.
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(!G.client.holder && !G.client.is_afk()) //Whoever called/has the proc won't be added to the list.
|
||||
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
|
||||
candidates += G.key
|
||||
for(var/i=commandos_possible,(i>0&&candidates.len),i--)//Decrease with every commando selected.
|
||||
var/candidate = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates //It will auto-pick a person when there is only one candidate.
|
||||
candidates -= candidate //Subtract from candidates.
|
||||
commandos += candidate//Add their ghost to commandos.
|
||||
|
||||
//Spawns commandos and equips them.
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(syndicate_commando_number<=0)
|
||||
break
|
||||
if (L.name == "Syndicate-Commando")
|
||||
syndicate_leader_selected = syndicate_commando_number == 1?1:0
|
||||
|
||||
var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected)
|
||||
|
||||
if(commandos.len)
|
||||
new_syndicate_commando.key = pick(commandos)
|
||||
commandos -= new_syndicate_commando.key
|
||||
new_syndicate_commando.internal = new_syndicate_commando.s_store
|
||||
new_syndicate_commando.internals.icon_state = "internal1"
|
||||
|
||||
//So they don't forget their code or mission.
|
||||
if(nuke_code)
|
||||
new_syndicate_commando.mind.store_memory("<B>Nuke Code:</B> <span class='warning'>[nuke_code].</span>")
|
||||
new_syndicate_commando.mind.store_memory("<B>Mission:</B> <span class='warning'>[input].</span>")
|
||||
|
||||
to_chat(new_syndicate_commando, "<span class='notice'>You are an Elite Syndicate. [!syndicate_leader_selected?"commando":"<B>LEADER</B>"] in the service of the Syndicate. \nYour current mission is: <span class='danger'>[input]</span></span>")
|
||||
|
||||
syndicate_commando_number--
|
||||
|
||||
//Spawns the rest of the commando gear.
|
||||
// for (var/obj/effect/landmark/L)
|
||||
// if (L.name == "Commando_Manual")
|
||||
//new /obj/item/weapon/gun/energy/pulse_rifle(L.loc)
|
||||
// var/obj/item/weapon/paper/P = new(L.loc)
|
||||
// P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
|
||||
// P.name = "Spec. Ops. Manual"
|
||||
|
||||
/datum/striketeam/syndicate/extras()
|
||||
for (var/obj/effect/landmark/L in landmarks_list)
|
||||
if (L.name == "Syndicate-Commando-Bomb")
|
||||
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
|
||||
del(L)
|
||||
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] has spawned a Syndicate strike squad.</span>", 1)
|
||||
log_admin("[key_name(usr)] used Spawn Syndicate Squad.")
|
||||
feedback_add_details("admin_verb","SDTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/create_syndicate_death_commando(obj/spawn_location, syndicate_leader_selected = 0)
|
||||
/datum/striketeam/syndicate/create_commando(obj/spawn_location, syndicate_leader_selected = 0)
|
||||
var/mob/living/carbon/human/new_syndicate_commando = new(spawn_location.loc)
|
||||
var/syndicate_commando_leader_rank = pick("Lieutenant", "Captain", "Major")
|
||||
var/syndicate_commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major")
|
||||
@@ -126,52 +38,59 @@ var/global/sent_syndicate_strike_team = 0
|
||||
new_syndicate_commando.mind.special_role = "Syndicate Commando"
|
||||
ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected)
|
||||
del(spawn_location)
|
||||
return new_syndicate_commando
|
||||
|
||||
/mob/living/carbon/human/proc/equip_syndicate_commando(syndicate_leader_selected = 0)
|
||||
|
||||
/datum/striketeam/syndicate/greet_commando(var/mob/living/carbon/human/H)
|
||||
to_chat(H, "<span class='notice'>You are [H.real_name], an Elite commando, in the service of the Syndicate.</span>")
|
||||
to_chat(H, "<span class='notice'>Your mission is: <span class='danger'>[mission]</span></span>")
|
||||
|
||||
/mob/living/carbon/human/proc/equip_syndicate_commando(leader = 0)
|
||||
//Special radio setup
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(src)
|
||||
R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode.
|
||||
equip_to_slot_or_del(R, slot_ears)
|
||||
|
||||
//Basic Uniform
|
||||
var/obj/item/clothing/under/syndicate/uni = new /obj/item/clothing/under/syndicate(src)
|
||||
uni.attach_accessory(new/obj/item/clothing/accessory/holomap_chip/elite(src))
|
||||
equip_to_slot_or_del(uni, slot_w_uniform)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/empgrenade(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/silenced(src), slot_belt)
|
||||
|
||||
//Shoes & gloves
|
||||
equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(src), slot_shoes)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black(src), slot_wear_suit)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black(src), slot_head)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(src), slot_wear_mask)
|
||||
|
||||
//Glasses)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
|
||||
//Mask & Armor
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(src), slot_wear_mask)
|
||||
if (leader)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red(src), slot_wear_suit)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
|
||||
//Backpack
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/ammo_storage/box/c45(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/osipr_core(src), slot_in_backpack)
|
||||
if (leader)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
else
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/energy_magazine/osipr(src), slot_in_backpack)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/empgrenade(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/silenced(src), slot_belt)
|
||||
|
||||
put_in_hands(new /obj/item/weapon/gun/energy/pulse_rifle(src)) //Will change to something different at a later time -- Superxpdude
|
||||
put_in_hands(new /obj/item/weapon/gun/osipr(src))
|
||||
|
||||
var/obj/item/weapon/card/id/syndicate/W = new(src) //Untrackable by AI
|
||||
W.name = "[real_name]'s ID Card"
|
||||
|
||||
@@ -727,12 +727,13 @@ var/global/floorIsLava = 0
|
||||
dat += {"
|
||||
<A href='?src=\ref[src];secretsfun=spawnselfdummy'>Spawn yourself as a Test Dummy</A><BR>
|
||||
<BR>
|
||||
<BR>
|
||||
"}
|
||||
|
||||
if(check_rights(R_ADMIN,0))
|
||||
dat += {"
|
||||
<B>Admin Secrets</B><BR>
|
||||
<BR><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsadmin=manifest'>Show Crew Manifest</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=showgm'>Show Game Mode</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
|
||||
@@ -750,6 +751,20 @@ var/global/floorIsLava = 0
|
||||
<BR>
|
||||
"}
|
||||
|
||||
|
||||
if(check_rights(R_ADMIN,0))
|
||||
dat += {"
|
||||
<B>Strike Teams</B><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam-deathsquad'>Send in a Death Squad!</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam-ert'>Send in an Emergency Response Team!</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam-syndi'>Send in a Syndicate Elite Strike Team!</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam-custom'>Send in a Custom Strike Team! (Work in Progress!)</A><BR>
|
||||
<BR>
|
||||
<BR>
|
||||
"}
|
||||
|
||||
|
||||
if(check_rights(R_FUN,0))
|
||||
dat += {"
|
||||
<B>'Random' Events</B><BR>
|
||||
@@ -805,7 +820,6 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];secretsfun=fakealerts'>Trigger a fake alert</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=fakebooms'>Adds in some Micheal Bay to the shift without major destruction</A><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam'>Send in a strike team</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=placeturret'>Create a turret</A><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=traitor_all'>Make everyone traitors</A><BR>
|
||||
|
||||
@@ -73,7 +73,6 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/check_customitem_activity,
|
||||
// /client/proc/man_up,
|
||||
// /client/proc/global_man_up,
|
||||
/client/proc/response_team, // Response Teams admin verb
|
||||
/client/proc/toggle_antagHUD_use,
|
||||
/client/proc/toggle_antagHUD_restrictions,
|
||||
/client/proc/allow_character_respawn, /* Allows a ghost to respawn */
|
||||
|
||||
@@ -907,11 +907,11 @@
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=wizard;jobban4=\ref[M]'>[replacetext("Wizard", " ", " ")]</a></td>"
|
||||
|
||||
//ERT
|
||||
if(jobban_isbanned(M, "Emergency Response Team") || isbanned_dept)
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'><font color=red>Emergency Response Team</font></a></td>"
|
||||
//Strike Team
|
||||
if(jobban_isbanned(M, "Strike Team") || isbanned_dept)
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Strike Team;jobban4=\ref[M]'><font color=red>Strike Team</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Emergency Response Team;jobban4=\ref[M]'>Emergency Response Team</a></td>"
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=Strike Team;jobban4=\ref[M]'>Strike Team</a></td>"
|
||||
|
||||
|
||||
//Vox Raider
|
||||
@@ -2559,10 +2559,26 @@
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
spawn(0)
|
||||
H.corgize()
|
||||
if("striketeam")
|
||||
if(usr.client.strike_team())
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","Strike")
|
||||
if("striketeam-deathsquad")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","DeathQuad")
|
||||
var/datum/striketeam/deathsquad/team = new /datum/striketeam/deathsquad()
|
||||
team.trigger_strike(usr)
|
||||
if("striketeam-ert")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","ERT")
|
||||
var/datum/striketeam/ert/team = new /datum/striketeam/ert()
|
||||
team.trigger_strike(usr)
|
||||
if("striketeam-syndi")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","SyndiStrikeTeam")
|
||||
var/datum/striketeam/syndicate/team = new /datum/striketeam/syndicate()
|
||||
team.trigger_strike(usr)
|
||||
if("striketeam-custom")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","CustomStrikeTeam")
|
||||
var/datum/striketeam/custom/team = new /datum/striketeam/custom()
|
||||
team.trigger_strike(usr)
|
||||
if("tripleAI")
|
||||
usr.client.triple_ai()
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
|
||||
@@ -990,7 +990,7 @@ Pressure: [env.return_pressure()]"}
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
if("emergency response team")
|
||||
M.equip_strike_team()
|
||||
M.equip_response_team()
|
||||
|
||||
if("special ops officer")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate/combat(M), slot_w_uniform)
|
||||
|
||||
@@ -23,6 +23,7 @@ var/global/list/special_roles = list(
|
||||
ROLE_VAMPIRE = IS_MODE_COMPILED("vampire"),
|
||||
ROLE_VOXRAIDER = IS_MODE_COMPILED("heist"),
|
||||
ROLE_WIZARD = 1,
|
||||
ROLE_COMMANDO = 1,
|
||||
)
|
||||
|
||||
var/list/antag_roles = list(
|
||||
@@ -37,6 +38,7 @@ var/list/antag_roles = list(
|
||||
ROLE_VAMPIRE = IS_MODE_COMPILED("vampire"),
|
||||
ROLE_VOXRAIDER = IS_MODE_COMPILED("heist"),
|
||||
ROLE_WIZARD = 1,
|
||||
ROLE_COMMANDO = 1,
|
||||
// "infested monkey" = IS_MODE_COMPILED("monkey"),
|
||||
)
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
break
|
||||
callshuttle++
|
||||
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || sent_strike_team)
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction")
|
||||
callshuttle = 0
|
||||
|
||||
if(callshuttle == 3) //if all three conditions are met
|
||||
|
||||
@@ -1294,10 +1294,10 @@ var/list/slot_equipment_priority = list( \
|
||||
var/t1 = text("window=[href_list["mach_close"]]")
|
||||
unset_machine()
|
||||
src << browse(null, t1)
|
||||
if (href_list["joinresponseteam"])
|
||||
if(usr.client)
|
||||
var/client/C = usr.client
|
||||
C.JoinResponseTeam()
|
||||
//if (href_list["joinresponseteam"])
|
||||
// if(usr.client)
|
||||
// var/client/C = usr.client
|
||||
// C.JoinResponseTeam()
|
||||
|
||||
/mob/proc/pull_damage()
|
||||
if(ishuman(src))
|
||||
|
||||
@@ -179,7 +179,9 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
|
||||
revoke_maint_all_access()
|
||||
feedback_inc("alert_keycard_auth_maintRevoke",1)
|
||||
if("Emergency Response Team")
|
||||
trigger_armed_response_team(1,ert_reason)
|
||||
var/datum/striketeam/ert/response_team = new()
|
||||
response_team.mission = ert_reason
|
||||
response_team.trigger_strike()
|
||||
feedback_inc("alert_keycard_auth_ert",1)
|
||||
|
||||
var/global/maint_all_access = 0
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "__DEFINES\research_levels.dm"
|
||||
#include "__DEFINES\security.dm"
|
||||
#include "__DEFINES\setup.dm"
|
||||
#include "__DEFINES\striketeam_defines.dm"
|
||||
#include "__DEFINES\stylesheet.dm"
|
||||
#include "__DEFINES\subsystem.dm"
|
||||
#include "__DEFINES\tick.dm"
|
||||
@@ -937,6 +938,7 @@
|
||||
#include "code\game\shuttles\voxresearch_shuttle.dm"
|
||||
#include "code\game\striketeams\emergency_response_team.dm"
|
||||
#include "code\game\striketeams\nanotrasen_deathsquad.dm"
|
||||
#include "code\game\striketeams\striketeam_datums.dm"
|
||||
#include "code\game\striketeams\syndicate_elite_squad.dm"
|
||||
#include "code\game\turfs\simulated.dm"
|
||||
#include "code\game\turfs\turf.dm"
|
||||
|
||||
Reference in New Issue
Block a user