mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
153 lines
5.3 KiB
Plaintext
153 lines
5.3 KiB
Plaintext
//STRIKE TEAMS
|
|
//Thanks to Kilakk for the admin-button portion of this code.
|
|
|
|
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"
|
|
|
|
if(!holder)
|
|
usr << "\red Only administrators may use this command."
|
|
return
|
|
if(!ticker)
|
|
usr << "\red The game hasn't started yet!"
|
|
return
|
|
if(ticker.current_state == 1)
|
|
usr << "\red The round hasn't started yet!"
|
|
return
|
|
if(send_emergency_team)
|
|
usr << "\red Central Command has already dispatched an emergency response team!"
|
|
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
|
|
if(send_emergency_team)
|
|
usr << "\red Looks like somebody beat you to it!"
|
|
return
|
|
|
|
message_admins("[key_name_admin(usr)] is dispatching an Emergency Response Team.", 1)
|
|
log_admin("[key_name(usr)] used Dispatch Response Team.")
|
|
trigger_armed_response_team(1)
|
|
|
|
|
|
client/verb/JoinResponseTeam()
|
|
set category = "IC"
|
|
|
|
if(istype(usr,/mob/dead/observer) || istype(usr,/mob/new_player))
|
|
if(!send_emergency_team)
|
|
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"))
|
|
usr << "<font color=red><b>You are jobbanned from the emergency reponse team!"
|
|
return
|
|
|
|
if(ert.current_antagonists.len > 5) usr << "The emergency response team is already full!"
|
|
|
|
for (var/obj/effect/landmark/L in landmarks_list) if (L.name == "Commando")
|
|
L.name = null//Reserving the place.
|
|
var/new_name = sanitizeSafe(input(usr, "Pick a name","Name") as null|text, MAX_NAME_LEN)
|
|
if(!new_name)//Somebody changed his mind, place is available again.
|
|
L.name = "Commando"
|
|
return
|
|
create_response_team(L.loc, new_name)
|
|
qdel(L)
|
|
|
|
else
|
|
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)
|
|
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_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "Central Command")
|
|
can_call_ert = 0 // Only one call per round, ladies.
|
|
return
|
|
|
|
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "Central Command")
|
|
|
|
can_call_ert = 0 // Only one call per round, gentleman.
|
|
send_emergency_team = 1
|
|
|
|
sleep(600 * 5)
|
|
send_emergency_team = 0 // Can no longer join the ERT.
|
|
|
|
/client/proc/create_response_team(obj/spawn_location, commando_name)
|
|
|
|
var/mob/living/carbon/human/M = new(null)
|
|
|
|
|
|
M.real_name = commando_name
|
|
M.name = commando_name
|
|
M.age = rand(25,45)
|
|
|
|
M.check_dna(M)
|
|
M.dna.ready_dna(M)//Creates DNA.
|
|
|
|
M.mind = new
|
|
M.mind.current = M
|
|
M.mind.original = M
|
|
if(!(M.mind in ticker.minds))
|
|
ticker.minds += M.mind//Adds them to regular mind list.
|
|
M.loc = spawn_location
|
|
ert.add_antagonist(M.mind)
|
|
|
|
return M
|