mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 20:15:47 +01:00
[MIRROR] Objective-specific equipment will always be given. (#7862)
* Objective-specific equipment will always be given. * Update datum_traitor.dm Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net> Co-authored-by: Gandalf <jzo123@hotmail.com>
This commit is contained in:
@@ -79,10 +79,11 @@
|
||||
purchase_log = null
|
||||
return ..()
|
||||
|
||||
/datum/component/uplink/proc/update_items()
|
||||
/datum/component/uplink/proc/update_items(user)
|
||||
var/updated_items
|
||||
updated_items = get_uplink_items(uplink_flag, TRUE, allow_restricted)
|
||||
update_sales(updated_items)
|
||||
update_special_equipment(user, updated_items)
|
||||
uplink_items = updated_items
|
||||
|
||||
/datum/component/uplink/proc/update_sales(updated_items)
|
||||
@@ -93,6 +94,23 @@
|
||||
if (uplink_items[category] != null && updated_items[category] != null)
|
||||
updated_items[category] = uplink_items[category]
|
||||
|
||||
/datum/component/uplink/proc/update_special_equipment(mob/user, updated_items)
|
||||
if(!user?.mind?.failed_special_equipment)
|
||||
return
|
||||
for(var/obj/item/equipment_path as anything in user.mind.failed_special_equipment)
|
||||
var/datum/uplink_item/special_equipment/equipment_uplink_item = new
|
||||
if(!updated_items[equipment_uplink_item.category])
|
||||
updated_items[equipment_uplink_item.category] = list()
|
||||
var/list/name_words = splittext(initial(equipment_path.name), " ")
|
||||
var/capitalized_name
|
||||
for(var/i in 1 to name_words.len)
|
||||
name_words[i] = capitalize(name_words[i])
|
||||
capitalized_name = name_words.Join(" ")
|
||||
equipment_uplink_item.item = equipment_path
|
||||
equipment_uplink_item.name = capitalized_name
|
||||
equipment_uplink_item.desc = initial(equipment_path.desc)
|
||||
updated_items[equipment_uplink_item.category][equipment_uplink_item.name] = equipment_uplink_item
|
||||
|
||||
/datum/component/uplink/proc/LoadTC(mob/user, obj/item/stack/telecrystal/TC, silent = FALSE)
|
||||
if(!silent)
|
||||
to_chat(user, span_notice("You slot [TC] into [parent] and charge its internal uplink."))
|
||||
@@ -128,7 +146,7 @@
|
||||
if(locked)
|
||||
return
|
||||
active = TRUE
|
||||
update_items()
|
||||
update_items(user)
|
||||
if(user)
|
||||
INVOKE_ASYNC(src, .proc/ui_interact, user)
|
||||
// an unlocked uplink blocks also opening the PDA or headset menu
|
||||
|
||||
+21
-4
@@ -88,6 +88,8 @@
|
||||
var/list/addiction_points
|
||||
///Assoc list of key active addictions and value amount of cycles that it has been active.
|
||||
var/list/active_addictions
|
||||
///List of objective-specific equipment that couldn't properly be given to the mind
|
||||
var/list/failed_special_equipment
|
||||
|
||||
/datum/mind/New(_key)
|
||||
key = _key
|
||||
@@ -724,13 +726,28 @@
|
||||
to_chat(current, "<B>[objective.objective_name] #[obj_count]</B>: [objective.explanation_text]")
|
||||
obj_count++
|
||||
|
||||
/datum/mind/proc/find_syndicate_uplink()
|
||||
/datum/mind/proc/find_syndicate_uplink(check_unlocked)
|
||||
var/list/L = current.GetAllContents()
|
||||
for (var/i in L)
|
||||
var/atom/movable/I = i
|
||||
. = I.GetComponent(/datum/component/uplink)
|
||||
if(.)
|
||||
break
|
||||
var/datum/component/uplink/found_uplink = I.GetComponent(/datum/component/uplink)
|
||||
if(!found_uplink || (check_unlocked && found_uplink.locked))
|
||||
continue
|
||||
return found_uplink
|
||||
|
||||
/**
|
||||
* Checks to see if the mind has an accessible uplink (their own, if they are a traitor; any unlocked uplink otherwise),
|
||||
* and gives them a fallback spell if no uplink was found
|
||||
*/
|
||||
/datum/mind/proc/try_give_equipment_fallback()
|
||||
var/datum/component/uplink/uplink
|
||||
var/datum/antagonist/traitor/traitor_datum = has_antag_datum(/datum/antagonist/traitor)
|
||||
if(traitor_datum)
|
||||
uplink = traitor_datum.uplink
|
||||
if(!uplink)
|
||||
uplink = find_syndicate_uplink(check_unlocked = TRUE)
|
||||
if(!uplink && !(locate(/obj/effect/proc_holder/spell/self/special_equipment_fallback) in spell_list))
|
||||
AddSpell(new /obj/effect/proc_holder/spell/self/special_equipment_fallback(null, src))
|
||||
|
||||
/datum/mind/proc/take_uplink()
|
||||
qdel(find_syndicate_uplink())
|
||||
|
||||
@@ -159,11 +159,39 @@ GLOBAL_LIST_EMPTY(objectives)
|
||||
var/datum/mind/receiver = pick(get_owners())
|
||||
if(receiver?.current)
|
||||
if(ishuman(receiver.current))
|
||||
var/mob/living/carbon/human/H = receiver.current
|
||||
var/mob/living/carbon/human/receiver_current = receiver.current
|
||||
var/list/slots = list("backpack" = ITEM_SLOT_BACKPACK)
|
||||
for(var/eq_path in special_equipment)
|
||||
var/obj/O = new eq_path
|
||||
H.equip_in_one_of_slots(O, slots)
|
||||
for(var/obj/equipment_path as anything in special_equipment)
|
||||
var/obj/equipment_object = new equipment_path
|
||||
if(!receiver_current.equip_in_one_of_slots(equipment_object, slots))
|
||||
LAZYINITLIST(receiver.failed_special_equipment)
|
||||
receiver.failed_special_equipment += equipment_path
|
||||
receiver.try_give_equipment_fallback()
|
||||
|
||||
/obj/effect/proc_holder/spell/self/special_equipment_fallback
|
||||
name = "Request Objective-specific Equipment"
|
||||
desc = "Call down a supply pod containing the equipment required for specific objectives."
|
||||
action_icon = 'icons/obj/device.dmi'
|
||||
action_icon_state = "beacon"
|
||||
charge_max = 0
|
||||
clothes_req = FALSE
|
||||
nonabstract_req = TRUE
|
||||
phase_allowed = TRUE
|
||||
antimagic_allowed = TRUE
|
||||
invocation_type = "none"
|
||||
|
||||
/obj/effect/proc_holder/spell/self/special_equipment_fallback/cast(list/targets, mob/user)
|
||||
var/datum/mind/mind = user.mind
|
||||
if(!mind)
|
||||
CRASH("[src] has no owner!")
|
||||
if(mind.failed_special_equipment?.len)
|
||||
podspawn(list(
|
||||
"target" = get_turf(user),
|
||||
"style" = STYLE_SYNDICATE,
|
||||
"spawn" = mind.failed_special_equipment
|
||||
))
|
||||
mind.failed_special_equipment = null
|
||||
mind.RemoveSpell(src)
|
||||
|
||||
/datum/objective/assassinate
|
||||
name = "assasinate"
|
||||
|
||||
@@ -481,7 +481,8 @@
|
||||
new /obj/item/reagent_containers/syringe(src)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/nuke
|
||||
name = "box"
|
||||
name = "nuke core extraction kit"
|
||||
desc = "A box containing the equipment and instructions for extracting the plutonium cores of most Nanotrasen nuclear explosives."
|
||||
|
||||
/obj/item/storage/box/syndie_kit/nuke/PopulateContents()
|
||||
new /obj/item/screwdriver/nuke(src)
|
||||
@@ -489,7 +490,8 @@
|
||||
new /obj/item/paper/guides/antag/nuke_instructions(src)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/supermatter
|
||||
name = "box"
|
||||
name = "supermatter sliver extraction kit"
|
||||
desc = "A box containing the equipment and instructions for extracting a sliver of supermatter."
|
||||
|
||||
/obj/item/storage/box/syndie_kit/supermatter/PopulateContents()
|
||||
new /obj/item/scalpel/supermatter(src)
|
||||
|
||||
@@ -50,6 +50,12 @@
|
||||
|
||||
/datum/antagonist/traitor/on_gain()
|
||||
owner.special_role = job_rank
|
||||
|
||||
if(give_uplink)
|
||||
owner.give_uplink(silent = TRUE, antag_datum = src)
|
||||
|
||||
uplink = owner.find_syndicate_uplink()
|
||||
|
||||
if(give_objectives)
|
||||
forge_traitor_objectives()
|
||||
forge_ending_objective()
|
||||
@@ -60,15 +66,6 @@
|
||||
|
||||
traitor_flavor = strings(TRAITOR_FLAVOR_FILE, employer)
|
||||
|
||||
/*
|
||||
SKYRAT EDIT START - AMBITIONS
|
||||
if(give_uplink)
|
||||
owner.give_uplink(silent = TRUE, antag_datum = src)
|
||||
|
||||
uplink = owner.find_syndicate_uplink()
|
||||
SKYRAT EDIT END - AMBITIONS
|
||||
*/
|
||||
|
||||
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -2065,3 +2065,16 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
cost = 1
|
||||
purchasable_from = UPLINK_CLOWN_OPS
|
||||
illegal_tech = FALSE
|
||||
|
||||
// Special equipment (Dynamically fills in uplink component)
|
||||
/datum/uplink_item/special_equipment
|
||||
category = "Objective-Specific Equipment"
|
||||
name = "Objective-Specific Equipment"
|
||||
desc = "Equipment necessary for accomplishing specific objectives. If you are seeing this, something has gone wrong."
|
||||
limited_stock = 1
|
||||
illegal_tech = FALSE
|
||||
|
||||
/datum/uplink_item/special_equipment/purchase(mob/user, datum/component/uplink/U)
|
||||
..()
|
||||
if(user?.mind?.failed_special_equipment)
|
||||
user.mind.failed_special_equipment -= item
|
||||
|
||||
Reference in New Issue
Block a user