mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-15 04:01:41 +00:00
* tgui Preferences Menu + total rewrite of the preferences backend * nah, we dont need to ping those people * trying to remove the funny stuff * unmodularizing this * prefs reset * this may need to be reverted, who knows * okay, this part * perhaps * EEEEEEEEE * unsanitary * E * Stage 1 + loadout system * more fixes * E * I mean, it launches? * More fixes and reorganisation * E * customisation code is spaget. * disable ERP prefs * Update erp_preferences.dm * Update erp_preferences.dm * E * Slowly getting there * It may be time for help :) * tri...colors... help * preferences now pass preferences * Update dna.dm * Fuck this man * missing savefile return, set_species works, removed dumb stuff from updateappearance * https://github.com/Skyrat-SS13/Skyrat-tg/pull/8199 * https://github.com/Skyrat-SS13/Skyrat-tg/pull/8224 * https://github.com/tgstation/tgstation/pull/61519 * https://github.com/Skyrat-SS13/Skyrat-tg/pull/8278 * e * le butonAZARAK HELLO * hhh * Proper recognition where it's due, MrMelbert! * EEEE * examine block * Better gen hit sounds from whitedream * final loadout touches, more bug fixes im sure to come * i said there would be bugfixes * Update LoadoutManager.js * Missing preferences in the html menu * LIVE TESTING PHASE BABY * Update LoadoutManager.js * EEE * LAUNCH TEST FIRE * Update job.dm * Update new_player.dm * 50gb DAY ONE PATCH * EEE * Update preferences.dm * buggle fixes * Update examine.dm * >LOOC starts on Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com> Co-authored-by: Gandalf <jzo123@hotmail.com> Co-authored-by: Azarak <azarak10@gmail.com>
235 lines
10 KiB
Plaintext
235 lines
10 KiB
Plaintext
/// If we spawn an ERT with the "choose experienced leader" option, select the leader from the top X playtimes
|
|
#define ERT_EXPERIENCED_LEADER_CHOOSE_TOP 3
|
|
|
|
// CENTCOM RESPONSE TEAM
|
|
|
|
/datum/admins/proc/makeERTTemplateModified(list/settings)
|
|
. = settings
|
|
var/datum/ert/newtemplate = settings["mainsettings"]["template"]["value"]
|
|
if (isnull(newtemplate))
|
|
return
|
|
if (!ispath(newtemplate))
|
|
newtemplate = text2path(newtemplate)
|
|
newtemplate = new newtemplate
|
|
.["mainsettings"]["teamsize"]["value"] = newtemplate.teamsize
|
|
.["mainsettings"]["mission"]["value"] = newtemplate.mission
|
|
.["mainsettings"]["polldesc"]["value"] = newtemplate.polldesc
|
|
.["mainsettings"]["open_armory"]["value"] = newtemplate.opendoors ? "Yes" : "No"
|
|
.["mainsettings"]["leader_experience"]["value"] = newtemplate.leader_experience ? "Yes" : "No"
|
|
.["mainsettings"]["random_names"]["value"] = newtemplate.random_names ? "Yes" : "No"
|
|
.["mainsettings"]["spawn_admin"]["value"] = newtemplate.spawn_admin ? "Yes" : "No"
|
|
|
|
|
|
/datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag)
|
|
for(var/I in mannequin.get_equipped_items(TRUE))
|
|
qdel(I)
|
|
if (ispath(antag, /datum/antagonist/ert))
|
|
var/datum/antagonist/ert/ert = antag
|
|
mannequin.equipOutfit(initial(ert.outfit), TRUE)
|
|
|
|
/datum/admins/proc/makeERTPreviewIcon(list/settings)
|
|
// Set up the dummy for its photoshoot
|
|
var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_ADMIN)
|
|
|
|
var/prefs = settings["mainsettings"]
|
|
var/datum/ert/template = prefs["template"]["value"]
|
|
if (isnull(template))
|
|
return null
|
|
if (!ispath(template))
|
|
template = text2path(prefs["template"]["value"]) // new text2path ... doesn't compile in 511
|
|
|
|
template = new template
|
|
var/datum/antagonist/ert/ert = template.leader_role
|
|
|
|
equipAntagOnDummy(mannequin, ert)
|
|
|
|
COMPILE_OVERLAYS(mannequin)
|
|
CHECK_TICK
|
|
var/icon/preview_icon = icon('icons/effects/effects.dmi', "nothing")
|
|
preview_icon.Scale(48+32, 16+32)
|
|
CHECK_TICK
|
|
mannequin.setDir(NORTH)
|
|
var/icon/stamp = getFlatIcon(mannequin)
|
|
CHECK_TICK
|
|
preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17)
|
|
CHECK_TICK
|
|
mannequin.setDir(WEST)
|
|
stamp = getFlatIcon(mannequin)
|
|
CHECK_TICK
|
|
preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9)
|
|
CHECK_TICK
|
|
mannequin.setDir(SOUTH)
|
|
stamp = getFlatIcon(mannequin)
|
|
CHECK_TICK
|
|
preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1)
|
|
CHECK_TICK
|
|
preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
|
|
CHECK_TICK
|
|
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_ADMIN)
|
|
return preview_icon
|
|
|
|
/datum/admins/proc/makeEmergencyresponseteam(datum/ert/ertemplate = null)
|
|
if (ertemplate)
|
|
ertemplate = new ertemplate
|
|
else
|
|
ertemplate = new /datum/ert/centcom_official
|
|
|
|
var/list/settings = list(
|
|
"preview_callback" = CALLBACK(src, .proc/makeERTPreviewIcon),
|
|
"mainsettings" = list(
|
|
"template" = list("desc" = "Template", "callback" = CALLBACK(src, .proc/makeERTTemplateModified), "type" = "datum", "path" = "/datum/ert", "subtypesonly" = TRUE, "value" = ertemplate.type),
|
|
"teamsize" = list("desc" = "Team Size", "type" = "number", "value" = ertemplate.teamsize),
|
|
"mission" = list("desc" = "Mission", "type" = "string", "value" = ertemplate.mission),
|
|
"polldesc" = list("desc" = "Ghost poll description", "type" = "string", "value" = ertemplate.polldesc),
|
|
"enforce_human" = list("desc" = "Enforce human authority", "type" = "boolean", "value" = "[(CONFIG_GET(flag/enforce_human_authority) ? "Yes" : "No")]"),
|
|
"open_armory" = list("desc" = "Open armory doors", "type" = "boolean", "value" = "[(ertemplate.opendoors ? "Yes" : "No")]"),
|
|
"leader_experience" = list("desc" = "Pick an experienced leader", "type" = "boolean", "value" = "[(ertemplate.leader_experience ? "Yes" : "No")]"),
|
|
"random_names" = list("desc" = "Randomize names", "type" = "boolean", "value" = "[(ertemplate.random_names ? "Yes" : "No")]"),
|
|
"spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]"),
|
|
"notify_players" = list("desc" = "Notify players that you have sent an ERT", "type" = "boolean", "value" = "[(ertemplate.notify_players ? "Yes" : "No")]") //SKYRAT EDIT ADDITION
|
|
)
|
|
)
|
|
|
|
var/list/prefreturn = presentpreflikepicker(usr,"Customize ERT", "Customize ERT", Button1="Ok", width = 600, StealFocus = 1,Timeout = 0, settings=settings)
|
|
|
|
if (isnull(prefreturn))
|
|
return FALSE
|
|
|
|
if (prefreturn["button"] == 1)
|
|
var/list/prefs = settings["mainsettings"]
|
|
|
|
var/templtype = prefs["template"]["value"]
|
|
if (!ispath(prefs["template"]["value"]))
|
|
templtype = text2path(prefs["template"]["value"]) // new text2path ... doesn't compile in 511
|
|
|
|
if (ertemplate.type != templtype)
|
|
ertemplate = new templtype
|
|
|
|
ertemplate.teamsize = prefs["teamsize"]["value"]
|
|
ertemplate.mission = prefs["mission"]["value"]
|
|
ertemplate.polldesc = prefs["polldesc"]["value"]
|
|
ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" // these next 5 are effectively toggles
|
|
ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes"
|
|
ertemplate.leader_experience = prefs["leader_experience"]["value"] == "Yes"
|
|
ertemplate.random_names = prefs["random_names"]["value"] == "Yes"
|
|
ertemplate.spawn_admin = prefs["spawn_admin"]["value"] == "Yes"
|
|
ertemplate.notify_players = prefs["notify_players"]["value"] == "Yes" //SKYRAT EDIT ADDITION
|
|
|
|
var/list/spawnpoints = GLOB.emergencyresponseteamspawn
|
|
var/index = 0
|
|
|
|
if(ertemplate.spawn_admin)
|
|
if(isobserver(usr))
|
|
var/mob/living/carbon/human/admin_officer = new (spawnpoints[1])
|
|
var/chosen_outfit = usr.client?.prefs?.read_preference(/datum/preference/choiced/brief_outfit)
|
|
usr.client.prefs.safe_transfer_prefs_to(admin_officer, is_antag = TRUE)
|
|
admin_officer.equipOutfit(chosen_outfit)
|
|
admin_officer.key = usr.key
|
|
else
|
|
to_chat(usr, "<span class='warning'>Could not spawn you in as briefing officer as you are not a ghost!</spawn>")
|
|
|
|
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad")
|
|
var/teamSpawned = FALSE
|
|
|
|
if(candidates.len == 0)
|
|
return FALSE
|
|
|
|
//Pick the (un)lucky players
|
|
var/numagents = min(ertemplate.teamsize,candidates.len)
|
|
|
|
//Create team
|
|
var/datum/team/ert/ert_team = new ertemplate.team ()
|
|
if(ertemplate.rename_team)
|
|
ert_team.name = ertemplate.rename_team
|
|
|
|
//Assign team objective
|
|
var/datum/objective/missionobj = new ()
|
|
missionobj.team = ert_team
|
|
missionobj.explanation_text = ertemplate.mission
|
|
missionobj.completed = TRUE
|
|
ert_team.objectives += missionobj
|
|
ert_team.mission = missionobj
|
|
|
|
var/mob/dead/observer/earmarked_leader
|
|
var/leader_spawned = FALSE // just in case the earmarked leader disconnects or becomes unavailable, we can try giving leader to the last guy to get chosen
|
|
|
|
if(ertemplate.leader_experience)
|
|
var/list/candidate_living_exps = list()
|
|
for(var/i in candidates)
|
|
var/mob/dead/observer/potential_leader = i
|
|
candidate_living_exps[potential_leader] = potential_leader.client?.get_exp_living(TRUE)
|
|
|
|
candidate_living_exps = sortList(candidate_living_exps, cmp=/proc/cmp_numeric_dsc)
|
|
if(candidate_living_exps.len > ERT_EXPERIENCED_LEADER_CHOOSE_TOP)
|
|
candidate_living_exps = candidate_living_exps.Cut(ERT_EXPERIENCED_LEADER_CHOOSE_TOP+1) // pick from the top ERT_EXPERIENCED_LEADER_CHOOSE_TOP contenders in playtime
|
|
earmarked_leader = pick(candidate_living_exps)
|
|
else
|
|
earmarked_leader = pick(candidates)
|
|
|
|
while(numagents && candidates.len)
|
|
var/spawnloc = spawnpoints[index+1]
|
|
//loop through spawnpoints one at a time
|
|
index = (index + 1) % spawnpoints.len
|
|
var/mob/dead/observer/chosen_candidate = earmarked_leader || pick(candidates) // this way we make sure that our leader gets chosen
|
|
candidates -= chosen_candidate
|
|
if(!chosen_candidate?.key)
|
|
continue
|
|
|
|
//Spawn the body
|
|
var/mob/living/carbon/human/ert_operative = new ertemplate.mobtype(spawnloc)
|
|
chosen_candidate.client.prefs.safe_transfer_prefs_to(ert_operative, is_antag = TRUE)
|
|
ert_operative.key = chosen_candidate.key
|
|
|
|
if(ertemplate.enforce_human || !(ert_operative.dna.species.changesource_flags & ERT_SPAWN)) // Don't want any exploding plasmemes
|
|
ert_operative.set_species(/datum/species/human)
|
|
|
|
//Give antag datum
|
|
var/datum/antagonist/ert/ert_antag
|
|
|
|
if((chosen_candidate == earmarked_leader) || (numagents == 1 && !leader_spawned))
|
|
ert_antag = new ertemplate.leader_role ()
|
|
earmarked_leader = null
|
|
leader_spawned = TRUE
|
|
else
|
|
ert_antag = ertemplate.roles[WRAP(numagents,1,length(ertemplate.roles) + 1)]
|
|
ert_antag = new ert_antag ()
|
|
ert_antag.random_names = ertemplate.random_names
|
|
|
|
ert_operative.mind.add_antag_datum(ert_antag,ert_team)
|
|
ert_operative.mind.set_assigned_role(SSjob.GetJobType(ert_antag.ert_job_path))
|
|
|
|
//Logging and cleanup
|
|
log_game("[key_name(ert_operative)] has been selected as an [ert_antag.name]")
|
|
numagents--
|
|
teamSpawned++
|
|
|
|
if (teamSpawned)
|
|
message_admins("[ertemplate.polldesc] has spawned with the mission: [ertemplate.mission]")
|
|
//SKYRAT EDIT ADDITION BEGIN
|
|
if(ertemplate.notify_players)
|
|
priority_announce("Central command has responded to your request for a CODE [uppertext(ertemplate.code)] Emergency Response Team and have confirmed one to be enroute.", "ERT Request", ANNOUNCER_ERTYES)
|
|
//SKYRAT EDIT END
|
|
//Open the Armory doors
|
|
if(ertemplate.opendoors)
|
|
for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
|
|
door.open()
|
|
CHECK_TICK
|
|
return TRUE
|
|
|
|
return
|
|
|
|
/client/proc/summon_ert()
|
|
set category = "Admin.Fun"
|
|
set name = "Summon ERT"
|
|
set desc = "Summons an emergency response team"
|
|
|
|
message_admins("[key_name(usr)] is creating a CentCom response team...")
|
|
if(holder?.makeEmergencyresponseteam())
|
|
message_admins("[key_name(usr)] created a CentCom response team.")
|
|
log_admin("[key_name(usr)] created a CentCom response team.")
|
|
else
|
|
message_admins("[key_name_admin(usr)] tried to create a CentCom response team. Unfortunately, there were not enough candidates available.")
|
|
log_admin("[key_name(usr)] failed to create a CentCom response team.")
|
|
|
|
#undef ERT_EXPERIENCED_LEADER_CHOOSE_TOP
|