mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 03:55:05 +01:00
Merge pull request #244 from TheDZD/changeling
Traitor Objective Improvement
This commit is contained in:
+36
-25
@@ -177,12 +177,12 @@ datum/mind
|
||||
text += "<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
|
||||
else
|
||||
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
||||
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_REV)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
|
||||
sections["revolution"] = text
|
||||
|
||||
/** CULT ***/
|
||||
@@ -201,13 +201,13 @@ datum/mind
|
||||
*/
|
||||
else
|
||||
text += "<b>EMPLOYEE</b>|<a href='?src=\ref[src];cult=cultist'>cultist</a>"
|
||||
|
||||
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_CULTIST)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
|
||||
sections["cult"] = text
|
||||
|
||||
/** WIZARD ***/
|
||||
@@ -222,12 +222,12 @@ datum/mind
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];wizard=autoobjectives'>Randomize!</a>"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];wizard=wizard'>yes</a>|<b>NO</b>"
|
||||
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_WIZARD)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
|
||||
sections["wizard"] = text
|
||||
|
||||
/** CHANGELING ***/
|
||||
@@ -243,12 +243,12 @@ datum/mind
|
||||
text += "<br><a href='?src=\ref[src];changeling=initialdna'>Transform to initial appearance.</a>"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];changeling=changeling'>yes</a>|<b>NO</b>"
|
||||
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_CHANGELING)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
|
||||
sections["changeling"] = text
|
||||
|
||||
/** NINJA ***/
|
||||
@@ -263,12 +263,12 @@ datum/mind
|
||||
//text += "<br>Objectives are empty! <a href='?src=\ref[src];wizard=autoobjectives'>Randomize!</a>"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];ninja=ninja'>yes</a>|<b>NO</b>"
|
||||
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_NINJA)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
sections["ninja"] = text
|
||||
|
||||
/** VAMPIRE ***/
|
||||
@@ -282,15 +282,15 @@ datum/mind
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];vampire=autoobjectives'>Randomize!</a>"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];vampire=vampire'>yes</a>|<b>NO</b>"
|
||||
|
||||
|
||||
if(src in ticker.mode.enthralled)
|
||||
text += "<b><font color='#FF0000'>YES</font></b>|no"
|
||||
else
|
||||
text += "yes|<font color='#00FF00'>NO</font></b>"
|
||||
|
||||
|
||||
/** Enthralled ***/
|
||||
text += "<br><b>enthralled</b>"
|
||||
|
||||
|
||||
sections["vampire"] = text
|
||||
|
||||
|
||||
@@ -311,12 +311,12 @@ datum/mind
|
||||
text += " Code is [code]. <a href='?src=\ref[src];nuclear=tellcode'>tell the code.</a>"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];nuclear=nuclear'>operative</a>|<b>NANOTRASEN</b>"
|
||||
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_OPERATIVE)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
sections["nuclear"] = text
|
||||
|
||||
/** TRAITOR ***/
|
||||
@@ -333,12 +333,12 @@ datum/mind
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];traitor=autoobjectives'>Randomize</a>!"
|
||||
else
|
||||
text += "<a href='?src=\ref[src];traitor=traitor'>traitor</a>|<b>EMPLOYEE</b>"
|
||||
|
||||
|
||||
if(current && current.client && current.client.prefs.be_special & BE_TRAITOR)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
text += "|Disabled in Prefs"
|
||||
|
||||
sections["traitor"] = text
|
||||
|
||||
/** MONKEY ***/
|
||||
@@ -359,12 +359,12 @@ datum/mind
|
||||
|
||||
else
|
||||
text += "healthy|infected|human|<b>OTHER</b>"
|
||||
|
||||
|
||||
/*if(current && current.client && current.client.prefs.be_special & BE_MONKEY)
|
||||
text += "|Enabled in Prefs"
|
||||
else
|
||||
text += "|Disabled in Prefs"*/
|
||||
|
||||
text += "|Disabled in Prefs"*/
|
||||
|
||||
sections["monkey"] = text
|
||||
|
||||
|
||||
@@ -475,13 +475,13 @@ datum/mind
|
||||
if(!def_value)//If it's a custom objective, it will be an empty string.
|
||||
def_value = "custom"
|
||||
|
||||
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom")
|
||||
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "destroy", "maroon", "custom")
|
||||
if (!new_obj_type) return
|
||||
|
||||
var/datum/objective/new_objective = null
|
||||
|
||||
switch (new_obj_type)
|
||||
if ("assassinate","protect","debrain", "harm", "brig")
|
||||
if ("assassinate","protect","debrain", "harm", "brig", "maroon")
|
||||
//To determine what to name the objective in explanation text.
|
||||
var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter.
|
||||
var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text.
|
||||
@@ -513,6 +513,17 @@ datum/mind
|
||||
//Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
|
||||
new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]."
|
||||
|
||||
if ("destroy")
|
||||
var/list/possible_targets = active_ais(1)
|
||||
if(possible_targets.len)
|
||||
var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets
|
||||
new_objective = new /datum/objective/destroy
|
||||
new_objective.target = new_target.mind
|
||||
new_objective.owner = src
|
||||
new_objective.explanation_text = "Destroy [new_target.name], the experimental AI."
|
||||
else
|
||||
usr << "No active AIs with minds"
|
||||
|
||||
if ("speciesist")
|
||||
new_objective = new /datum/objective/speciesist
|
||||
new_objective.owner = src
|
||||
|
||||
@@ -234,6 +234,31 @@ datum/objective/anti_revolution/demote
|
||||
return 0
|
||||
return 1
|
||||
|
||||
datum/objective/maroon
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Prevent [target.current.real_name], the [target.assigned_role] from escaping alive."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Prevent [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] from escaping alive."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
|
||||
return 1
|
||||
if(target.current.z == 2)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
datum/objective/debrain//I want braaaainssss
|
||||
find_target()
|
||||
..()
|
||||
@@ -422,6 +447,29 @@ datum/objective/escape
|
||||
else
|
||||
return 0
|
||||
|
||||
datum/objective/escape/escape_with_identity
|
||||
var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
|
||||
|
||||
find_target()
|
||||
target = ..()
|
||||
if(target && target.current)
|
||||
target_real_name = target.current.real_name
|
||||
explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role] while wearing their identification card."
|
||||
else
|
||||
explanation_text = "Free Objective."
|
||||
|
||||
check_completion()
|
||||
if(!target_real_name)
|
||||
return 1
|
||||
if(!ishuman(owner.current))
|
||||
return 0
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
if(..())
|
||||
if(H.dna.real_name == target_real_name)
|
||||
if(H.get_id_name()== target_real_name)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
datum/objective/die
|
||||
explanation_text = "Die a glorious death."
|
||||
|
||||
@@ -545,6 +593,8 @@ datum/objective/steal
|
||||
else
|
||||
if(O.flags & 1) // THEFT_FLAG_SPECIAL
|
||||
continue
|
||||
if(O.flags & 2)
|
||||
continue
|
||||
steal_target=O
|
||||
explanation_text = "Steal [O]."
|
||||
return
|
||||
@@ -575,6 +625,28 @@ datum/objective/steal
|
||||
if(!steal_target) return 1 // Free Objective
|
||||
return steal_target.check_completion(owner)
|
||||
|
||||
datum/objective/steal/exchange
|
||||
|
||||
proc/set_faction(var/faction,var/otheragent)
|
||||
target = otheragent
|
||||
var/datum/theft_objective/unique/targetinfo
|
||||
if(faction == "red")
|
||||
targetinfo = new /datum/theft_objective/unique/docs_blue
|
||||
else if(faction == "blue")
|
||||
targetinfo = new /datum/theft_objective/unique/docs_red
|
||||
explanation_text = "Acquire [targetinfo.name] held by [target.current.real_name], the [target.assigned_role] and syndicate agent"
|
||||
steal_target = targetinfo.typepath
|
||||
|
||||
datum/objective/steal/exchange/backstab
|
||||
|
||||
set_faction(var/faction)
|
||||
var/datum/theft_objective/unique/targetinfo
|
||||
if(faction == "red")
|
||||
targetinfo = new /datum/theft_objective/unique/docs_red
|
||||
else if(faction == "blue")
|
||||
targetinfo = new /datum/theft_objective/unique/docs_blue
|
||||
explanation_text = "Do not give up or lose [targetinfo.name]."
|
||||
steal_target = targetinfo.typepath
|
||||
|
||||
datum/objective/download
|
||||
proc/gen_amount_goal()
|
||||
@@ -665,7 +737,23 @@ datum/objective/absorb
|
||||
else
|
||||
return 0
|
||||
|
||||
datum/objective/destroy
|
||||
find_target()
|
||||
var/list/possible_targets = active_ais(1)
|
||||
var/mob/living/silicon/ai/target_ai = pick(possible_targets)
|
||||
target = target_ai.mind
|
||||
if(target && target.current)
|
||||
explanation_text = "Destroy [target.name], the experimental AI."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey)
|
||||
return 1
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/* Isn't suited for global objectives
|
||||
/*---------CULTIST----------*/
|
||||
@@ -743,7 +831,7 @@ datum/objective/minimize_casualties
|
||||
check_completion()
|
||||
if(owner.kills.len>5) return 0
|
||||
return 1
|
||||
|
||||
|
||||
//Vox heist objectives.
|
||||
|
||||
datum/objective/heist
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// Separated into datums so we can prevent roles from getting certain objectives.
|
||||
|
||||
#define THEFT_FLAG_SPECIAL 1
|
||||
#define THEFT_FLAG_UNIQUE 2
|
||||
|
||||
/datum/theft_objective
|
||||
var/name=""
|
||||
@@ -17,13 +18,16 @@
|
||||
return 0
|
||||
var/list/all_items = owner.current.get_contents()
|
||||
for(var/obj/I in all_items) //Check for items
|
||||
if(istype(I, typepath))
|
||||
if(istype(I, typepath) && check_special_completion(I))
|
||||
//Stealing the cheap autoinjector doesn't count
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/hypospray/autoinjector))
|
||||
continue
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/proc/check_special_completion() //for objectives with special checks (is that slime extract unused? does that intellicard have an ai in it? etcetc)
|
||||
return 1
|
||||
|
||||
/datum/theft_objective/antique_laser_gun
|
||||
name = "the captain's antique laser gun"
|
||||
typepath = /obj/item/weapon/gun/energy/laser/captain
|
||||
@@ -52,6 +56,13 @@
|
||||
name = "a functional AI"
|
||||
typepath = /obj/item/device/aicard
|
||||
|
||||
datum/theft_objective/ai/check_special_completion(var/obj/item/device/aicard/C)
|
||||
if(..())
|
||||
for(var/mob/living/silicon/ai/A in C)
|
||||
if(istype(A, /mob/living/silicon/ai) && A.stat != 2) //See if any AI's are alive inside that card.
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/theft_objective/defib
|
||||
name = "a defibrillator"
|
||||
typepath = /obj/item/weapon/defibrillator
|
||||
@@ -73,12 +84,20 @@
|
||||
protected_jobs = list("Research Director")
|
||||
|
||||
/datum/theft_objective/slime_extract
|
||||
name = "a sample of slime extract"
|
||||
name = "a sample of unused slime extract"
|
||||
typepath = /obj/item/slime_extract
|
||||
protected_jobs = list("Research Director","Xenobiologist")
|
||||
|
||||
/datum/theft_objective/slime_extract/check_special_completion(var/obj/item/slime_extract/E)
|
||||
if(..())
|
||||
if(E.Uses > 0)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/theft_objective/corgi
|
||||
name = "a piece of corgi meat"
|
||||
typepath = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||
protected_jobs = list("Head of Personnel")
|
||||
|
||||
/datum/theft_objective/capmedal
|
||||
name = "the medal of captaincy"
|
||||
@@ -95,6 +114,10 @@
|
||||
typepath = /obj/item/clothing/suit/armor/reactive
|
||||
protected_jobs = list("Research Director")
|
||||
|
||||
/datum/theft_objective/steal/documents
|
||||
name = "any set of secret documents of any organization"
|
||||
typepath = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's
|
||||
|
||||
/datum/theft_objective/rd_jumpsuit
|
||||
name = "the research director's jumpsuit"
|
||||
typepath = /obj/item/clothing/under/rank/research_director
|
||||
@@ -133,6 +156,7 @@
|
||||
/datum/theft_objective
|
||||
name = "an ablative armor vest"
|
||||
typepath = /obj/item/clothing/suit/armor/laserproof
|
||||
protected_jobs = list("Head of Security", "Warden")
|
||||
|
||||
/datum/theft_objective/number
|
||||
var/min=0
|
||||
@@ -170,6 +194,7 @@
|
||||
typepath = /obj/item/weapon/tank
|
||||
min=28
|
||||
max=28
|
||||
protected_jobs = list("Chief Engineer", "Engineer", "Scientist", "Research Director", "Life Support Specialist")
|
||||
|
||||
/datum/theft_objective/number/plasma_gas/getAmountStolen(var/obj/item/I)
|
||||
return I:air_contents:toxins
|
||||
@@ -200,8 +225,23 @@
|
||||
/datum/theft_objective/special
|
||||
flags = THEFT_FLAG_SPECIAL
|
||||
|
||||
/datum/theft_objective/unique
|
||||
flags = THEFT_FLAG_UNIQUE
|
||||
|
||||
/datum/theft_objective/unique/docs_red
|
||||
name = "the \"Red\" secret documents"
|
||||
typepath = /obj/item/documents/syndicate/red
|
||||
|
||||
/datum/theft_objective/unique/docs_blue
|
||||
name = "the \"Blue\" secret documents"
|
||||
typepath = /obj/item/documents/syndicate/blue
|
||||
|
||||
/datum/theft_objective/special/pinpointer
|
||||
name = "the captain's pinpointer"
|
||||
typepath = /obj/item/weapon/pinpointer
|
||||
|
||||
/datum/theft_objective/special/nuke_gun
|
||||
name = "nuclear gun"
|
||||
name = "advanced energy gun"
|
||||
typepath = /obj/item/weapon/gun/energy/gun/nuclear
|
||||
|
||||
/datum/theft_objective/special/diamond_drill
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
var/list/datum/mind/implanter = list()
|
||||
var/list/datum/mind/implanted = list()
|
||||
|
||||
var/datum/mind/exchange_red
|
||||
var/datum/mind/exchange_blue
|
||||
|
||||
/datum/game_mode/traitor
|
||||
name = "traitor"
|
||||
config_tag = "traitor"
|
||||
@@ -95,34 +98,49 @@
|
||||
traitor.objectives += block_objective
|
||||
|
||||
else
|
||||
switch(rand(1,100))
|
||||
if(1 to 30)
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
kill_objective.owner = traitor
|
||||
kill_objective.find_target()
|
||||
traitor.objectives += kill_objective
|
||||
if(31 to 40)
|
||||
var/datum/objective/debrain/debrain_objective = new
|
||||
debrain_objective.owner = traitor
|
||||
debrain_objective.find_target()
|
||||
traitor.objectives += debrain_objective
|
||||
if(41 to 50)
|
||||
var/datum/objective/protect/protect_objective = new
|
||||
protect_objective.owner = traitor
|
||||
protect_objective.find_target_with_special_role(null,0)
|
||||
if (!protect_objective.target)
|
||||
protect_objective.find_target() //We could not find any traitors, protect somebody
|
||||
traitor.objectives += protect_objective
|
||||
if(51 to 66)
|
||||
var/datum/objective/harm/harm_objective = new
|
||||
harm_objective.owner = traitor
|
||||
harm_objective.find_target()
|
||||
traitor.objectives += harm_objective
|
||||
if(!exchange_blue && traitors.len >= 5) //Set up an exchange if there are enough traitors
|
||||
if(!exchange_red)
|
||||
exchange_red = traitor
|
||||
else
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
steal_objective.owner = traitor
|
||||
steal_objective.find_target()
|
||||
traitor.objectives += steal_objective
|
||||
exchange_blue = traitor
|
||||
assign_exchange_role(exchange_red)
|
||||
assign_exchange_role(exchange_blue)
|
||||
else
|
||||
var/list/active_ais = active_ais()
|
||||
if(active_ais.len && prob(100/num_players()))
|
||||
var/datum/objective/destroy/destroy_objective = new
|
||||
destroy_objective.owner = traitor
|
||||
destroy_objective.find_target()
|
||||
traitor.objectives += destroy_objective
|
||||
else
|
||||
switch(rand(1,100))
|
||||
if(1 to 30)
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
kill_objective.owner = traitor
|
||||
kill_objective.find_target()
|
||||
traitor.objectives += kill_objective
|
||||
if(31 to 40)
|
||||
var/datum/objective/debrain/debrain_objective = new
|
||||
debrain_objective.owner = traitor
|
||||
debrain_objective.find_target()
|
||||
traitor.objectives += debrain_objective
|
||||
if(41 to 50)
|
||||
var/datum/objective/protect/protect_objective = new
|
||||
protect_objective.owner = traitor
|
||||
protect_objective.find_target_with_special_role(null,0)
|
||||
if (!protect_objective.target)
|
||||
protect_objective.find_target() //We could not find any traitors, protect somebody
|
||||
traitor.objectives += protect_objective
|
||||
if(51 to 61)
|
||||
var/datum/objective/harm/harm_objective = new
|
||||
harm_objective.owner = traitor
|
||||
harm_objective.find_target()
|
||||
traitor.objectives += harm_objective
|
||||
else
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
steal_objective.owner = traitor
|
||||
steal_objective.find_target()
|
||||
traitor.objectives += steal_objective
|
||||
switch(rand(1,100))
|
||||
if(1 to 30) // Die glorious death
|
||||
if (!(locate(/datum/objective/die) in traitor.objectives) && !(locate(/datum/objective/steal) in traitor.objectives))
|
||||
@@ -205,7 +223,6 @@
|
||||
|
||||
traitor_mob << "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe."
|
||||
|
||||
|
||||
/datum/game_mode/proc/add_law_zero(mob/living/silicon/ai/killer)
|
||||
var/law = "Accomplish your objectives at all costs."
|
||||
var/law_borg = "Accomplish your AI's objectives at all costs."
|
||||
@@ -394,3 +411,45 @@
|
||||
update_traitor_icons_removed(traitor_mind)
|
||||
//world << "Removed [traitor_mind.current.name] from traitor shit"
|
||||
traitor_mind.current << "\red <FONT size = 3><B>The fog clouding your mind clears. You remember nothing from the moment you were implanted until now.(You don't remember who implanted you)</B></FONT>"
|
||||
|
||||
/datum/game_mode/proc/assign_exchange_role(var/datum/mind/owner)
|
||||
//set faction
|
||||
var/faction = "red"
|
||||
if(owner == exchange_blue)
|
||||
faction = "blue"
|
||||
|
||||
//Assign objectives
|
||||
var/datum/objective/steal/exchange/exchange_objective = new
|
||||
exchange_objective.set_faction(faction,((faction == "red") ? exchange_blue : exchange_red))
|
||||
exchange_objective.owner = owner
|
||||
owner.objectives += exchange_objective
|
||||
|
||||
if(prob(20))
|
||||
var/datum/objective/steal/exchange/backstab/backstab_objective = new
|
||||
backstab_objective.set_faction(faction)
|
||||
backstab_objective.owner = owner
|
||||
owner.objectives += backstab_objective
|
||||
|
||||
//Spawn and equip documents
|
||||
var/mob/living/carbon/human/mob = owner.current
|
||||
|
||||
var/obj/item/weapon/folder/syndicate/folder
|
||||
if(owner == exchange_red)
|
||||
folder = new/obj/item/weapon/folder/syndicate/red(mob.locs)
|
||||
else
|
||||
folder = new/obj/item/weapon/folder/syndicate/blue(mob.locs)
|
||||
|
||||
var/list/slots = list (
|
||||
"backpack" = slot_in_backpack,
|
||||
"left pocket" = slot_l_store,
|
||||
"right pocket" = slot_r_store,
|
||||
"left hand" = slot_l_hand,
|
||||
"right hand" = slot_r_hand,
|
||||
)
|
||||
|
||||
var/where = "At your feet"
|
||||
var/equipped_slot = mob.equip_in_one_of_slots(folder, slots)
|
||||
if (equipped_slot)
|
||||
where = "In your [equipped_slot]"
|
||||
mob << "<BR><BR><span class='info'>[where] is a folder containing <b>secret documents</b> that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.</span><BR>"
|
||||
mob.update_icons()
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/obj/item/documents
|
||||
name = "secret documents"
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper."
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "docs_generic"
|
||||
item_state = "paper"
|
||||
throwforce = 0
|
||||
w_class = 1.0
|
||||
throw_range = 1
|
||||
throw_speed = 1
|
||||
layer = 4
|
||||
pressure_resistance = 1
|
||||
|
||||
/obj/item/documents/nanotrasen
|
||||
desc = "\"Top Secret\" Nanotrasen documents printed on special copy-protected paper. It is filled with complex diagrams and lists of names, dates and coordinates."
|
||||
icon_state = "docs_verified"
|
||||
|
||||
/obj/item/documents/syndicate
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence."
|
||||
|
||||
/obj/item/documents/syndicate/red
|
||||
name = "'Red' secret documents"
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Red\"."
|
||||
icon_state = "docs_red"
|
||||
|
||||
/obj/item/documents/syndicate/blue
|
||||
name = "'Blue' secret documents"
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Blue\"."
|
||||
icon_state = "docs_blue"
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
|
||||
/obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob)
|
||||
if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle))
|
||||
if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle) || istype(P, /obj/item/documents))
|
||||
user << "<span class='notice'>You put [P] in [src].</span>"
|
||||
user.drop_item()
|
||||
P.loc = src
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/folder/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo) || istype(W, /obj/item/weapon/paper_bundle))
|
||||
if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo) || istype(W, /obj/item/weapon/paper_bundle) || istype(W, /obj/item/documents))
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
user << "<span class='notice'>You put the [W] into \the [src].</span>"
|
||||
@@ -51,6 +51,8 @@
|
||||
dat += "<A href='?src=\ref[src];remove=\ref[Ph]'>Remove</A> - <A href='?src=\ref[src];look=\ref[Ph]'>[Ph.name]</A><BR>"
|
||||
for(var/obj/item/weapon/paper_bundle/Pa in src)
|
||||
dat += "<A href='?src=\ref[src];remove=\ref[Pa]'>Remove</A> - <A href='?src=\ref[src];look=\ref[Pa]'>[Pa.name]</A><BR>"
|
||||
for(var/obj/item/documents/doc in src)
|
||||
dat += "<A href='?src=\ref[src];remove=\ref[doc]'>Remove</A> - <A href='?src=\ref[src];look=\ref[doc]'>[doc.name]</A><BR>"
|
||||
user << browse(dat, "window=folder")
|
||||
onclose(user, "folder")
|
||||
add_fingerprint(usr)
|
||||
@@ -92,3 +94,33 @@
|
||||
attack_self(usr)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/folder/documents
|
||||
name = "folder- 'TOP SECRET'"
|
||||
desc = "A folder stamped \"Top Secret - Property of Nanotrasen Corporation. Unauthorized distribution is punishable by death.\""
|
||||
|
||||
/obj/item/weapon/folder/documents/New()
|
||||
..()
|
||||
new /obj/item/documents/nanotrasen(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/folder/syndicate
|
||||
name = "folder- 'TOP SECRET'"
|
||||
desc = "A folder stamped \"Top Secret - Property of The Syndicate.\""
|
||||
|
||||
/obj/item/weapon/folder/syndicate/red
|
||||
icon_state = "folder_sred"
|
||||
|
||||
/obj/item/weapon/folder/syndicate/red/New()
|
||||
..()
|
||||
new /obj/item/documents/syndicate/red(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/folder/syndicate/blue
|
||||
icon_state = "folder_sblue"
|
||||
|
||||
/obj/item/weapon/folder/syndicate/blue/New()
|
||||
..()
|
||||
new /obj/item/documents/syndicate/blue(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user