mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
[MIRROR] A "postal workers strike" negative station trait. (can be positive) [MDB IGNORE] (#25874)
* A "postal workers strike" negative station trait. (can be positive) * Update shuttle_loan_datum.dm --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
This commit is contained in:
co-authored by
Ghom
Gandalf
parent
4b1815fd05
commit
75cd7f69f6
@@ -1,2 +1,3 @@
|
||||
#define WALL_DENT_HIT 1
|
||||
#define WALL_DENT_SHOT 2
|
||||
#define MAX_DENT_DECALS 15
|
||||
|
||||
@@ -17,6 +17,30 @@
|
||||
/datum/station_trait/distant_supply_lines/on_round_start()
|
||||
SSeconomy.pack_price_modifier *= 1.2
|
||||
|
||||
///A negative trait that stops mail from arriving (or the inverse if on holiday). It also enables a specific shuttle loan situation.
|
||||
/datum/station_trait/mail_blocked
|
||||
name = "Postal workers strike"
|
||||
trait_type = STATION_TRAIT_NEGATIVE
|
||||
weight = 2
|
||||
show_in_report = TRUE
|
||||
report_message = "Due to an ongoing strike announced by the postal workers union, mail won't be delivered this shift."
|
||||
|
||||
/datum/station_trait/mail_blocked/on_round_start()
|
||||
//This is either a holiday or sunday... well then, let's flip the situation.
|
||||
if(SSeconomy.mail_blocked)
|
||||
name = "Postal system overtime"
|
||||
report_message = "Despite being a day off, the postal system is working overtime today. Mail will be delivered this shift."
|
||||
else
|
||||
var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control
|
||||
our_event.unavailable_situations -= /datum/shuttle_loan_situation/mail_strike
|
||||
SSeconomy.mail_blocked = !SSeconomy.mail_blocked
|
||||
|
||||
/datum/station_trait/mail_blocked/hangover/revert()
|
||||
var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control
|
||||
our_event.unavailable_situations |= /datum/shuttle_loan_situation/mail_strike
|
||||
SSeconomy.mail_blocked = !SSeconomy.mail_blocked
|
||||
return ..()
|
||||
|
||||
///A negative trait that reduces the amount of products available from vending machines throughout the station.
|
||||
/datum/station_trait/vending_shortage
|
||||
name = "Vending products shortage"
|
||||
|
||||
@@ -141,3 +141,59 @@
|
||||
/obj/item/restraints/legcuffs/beartrap/prearmed = 5, //not really a landmine, but still a good threat
|
||||
/obj/effect/mine/shrapnel = 5,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades
|
||||
name = "grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/chem_grenade/metalfoam,
|
||||
/obj/item/grenade/chem_grenade/cleaner,
|
||||
/obj/effect/spawner/random/entertainment/colorful_grenades,
|
||||
/obj/item/grenade/smokebomb,
|
||||
/obj/item/grenade/chem_grenade/antiweed,
|
||||
/obj/item/grenade/spawnergrenade/syndiesoap,
|
||||
/obj/effect/spawner/random/contraband/grenades/dangerous,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades/dangerous
|
||||
name = "dangerous grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/flashbang = 3,
|
||||
/obj/item/grenade/chem_grenade/teargas = 2,
|
||||
/obj/item/grenade/iedcasing/spawned = 2,
|
||||
/obj/item/grenade/empgrenade = 2,
|
||||
/obj/item/grenade/antigravity = 2,
|
||||
/obj/effect/spawner/random/contraband/grenades/cluster = 1,
|
||||
/obj/effect/spawner/random/contraband/grenades/lethal = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades/cluster
|
||||
name = "clusterbusters spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/clusterbuster/smoke = 4,
|
||||
/obj/item/grenade/clusterbuster/metalfoam = 4,
|
||||
/obj/item/grenade/clusterbuster/cleaner = 4,
|
||||
/obj/item/grenade/clusterbuster = 3,
|
||||
/obj/item/grenade/clusterbuster/teargas = 3,
|
||||
/obj/item/grenade/clusterbuster/antiweed = 3,
|
||||
/obj/item/grenade/clusterbuster/soap = 2,
|
||||
/obj/item/grenade/clusterbuster/emp = 1,
|
||||
/obj/item/grenade/clusterbuster/spawner_spesscarp = 1,
|
||||
/obj/item/grenade/clusterbuster/facid = 1,
|
||||
/obj/item/grenade/clusterbuster/inferno = 1,
|
||||
/obj/item/grenade/clusterbuster/clf3 = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades/lethal
|
||||
name = "lethal grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/chem_grenade/incendiary = 3,
|
||||
/obj/item/grenade/chem_grenade/facid = 3,
|
||||
/obj/item/grenade/chem_grenade/ez_clean = 3,
|
||||
/obj/item/grenade/chem_grenade/clf3 = 2,
|
||||
/obj/item/grenade/gluon = 2,
|
||||
/obj/item/grenade/chem_grenade/holy = 2,
|
||||
/obj/item/grenade/spawnergrenade/spesscarp = 1,
|
||||
/obj/item/grenade/spawnergrenade/cat = 1,
|
||||
/obj/item/grenade/frag = 1,
|
||||
/obj/item/grenade/chem_grenade/bioterrorfoam = 1,
|
||||
)
|
||||
|
||||
@@ -281,3 +281,12 @@
|
||||
/obj/item/toy/plush/ratplush = 2,
|
||||
/obj/item/toy/plush/narplush = 2,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/entertainment/colorful_grenades
|
||||
name = "colorful/glitter grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/chem_grenade/glitter/pink,
|
||||
/obj/item/grenade/chem_grenade/glitter/blue,
|
||||
/obj/item/grenade/chem_grenade/glitter/white,
|
||||
/obj/item/grenade/chem_grenade/colorful
|
||||
)
|
||||
|
||||
@@ -323,3 +323,17 @@
|
||||
/obj/item/food/donut/jelly/slimejelly/matcha = 2,
|
||||
/obj/item/food/donut/jelly/slimejelly/trumpet = 2,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/food_or_drink/any_snack_or_beverage
|
||||
name = "any snack or beverage spawner"
|
||||
icon_state = "slime_jelly_donut"
|
||||
loot = list(
|
||||
/obj/effect/spawner/random/food_or_drink/snack = 6,
|
||||
/obj/effect/spawner/random/food_or_drink/refreshing_beverage = 6,
|
||||
/obj/effect/spawner/random/food_or_drink/donuts = 5,
|
||||
/obj/effect/spawner/random/food_or_drink/donkpockets_single = 5,
|
||||
/obj/effect/spawner/random/food_or_drink/booze = 4,
|
||||
/obj/effect/spawner/random/food_or_drink/snack/lizard = 4,
|
||||
/obj/effect/spawner/random/food_or_drink/jelly_donuts = 3,
|
||||
/obj/effect/spawner/random/food_or_drink/slime_jelly_donuts = 1,
|
||||
)
|
||||
|
||||
@@ -154,14 +154,18 @@
|
||||
|
||||
/obj/item/mail/examine_more(mob/user)
|
||||
. = ..()
|
||||
var/list/msg = list(span_notice("<i>You notice the postmarking on the front of the mail...</i>"))
|
||||
if(!postmarked)
|
||||
. += span_info("This mail has no postmarking of any sort...")
|
||||
else
|
||||
. += span_notice("<i>You notice the postmarking on the front of the mail...</i>")
|
||||
var/datum/mind/recipient = recipient_ref.resolve()
|
||||
if(recipient)
|
||||
msg += "\t[span_info("Certified NT mail for [recipient].")]"
|
||||
. += span_info("[postmarked ? "Certified NT" : "Uncertfieid"] mail for [recipient].")
|
||||
else if(postmarked)
|
||||
. += span_info("Certified mail for [GLOB.station_name].")
|
||||
else
|
||||
msg += "\t[span_info("Certified mail for [GLOB.station_name].")]"
|
||||
msg += "\t[span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")]"
|
||||
return msg
|
||||
. += span_info("This is a dead letter mail with no recipient.")
|
||||
. += span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")
|
||||
|
||||
/// Accepts a mind to initialize goodies for a piece of mail.
|
||||
/obj/item/mail/proc/initialize_for_recipient(datum/mind/recipient)
|
||||
@@ -251,6 +255,8 @@
|
||||
lid_x = -26
|
||||
lid_y = 2
|
||||
paint_jobs = null
|
||||
///if it'll show the nt mark on the crate
|
||||
var/postmarked = TRUE
|
||||
|
||||
/obj/structure/closet/crate/mail/update_icon_state()
|
||||
. = ..()
|
||||
@@ -261,6 +267,11 @@
|
||||
else
|
||||
icon_state = "[base_icon_state]sealed"
|
||||
|
||||
/obj/structure/closet/crate/mail/update_overlays()
|
||||
. = ..()
|
||||
if(postmarked)
|
||||
. += "mail_nt"
|
||||
|
||||
/// Fills this mail crate with N pieces of mail, where N is the lower of the amount var passed, and the maximum capacity of this crate. If N is larger than the number of alive human players, the excess will be junkmail.
|
||||
/obj/structure/closet/crate/mail/proc/populate(amount)
|
||||
var/mail_count = min(amount, storage_capacity)
|
||||
@@ -306,6 +317,19 @@
|
||||
. = ..()
|
||||
populate(INFINITY)
|
||||
|
||||
///Used in the mail strike shuttle loan event
|
||||
/obj/structure/closet/crate/mail/full/mail_strike
|
||||
desc = "A post crate from somewhere else. It has no NT logo on it."
|
||||
postmarked = FALSE
|
||||
|
||||
/obj/structure/closet/crate/mail/full/mail_strike/populate(amount)
|
||||
var/strike_mail_to_spawn = rand(1, storage_capacity-1)
|
||||
for(var/i in 1 to strike_mail_to_spawn)
|
||||
if(prob(95))
|
||||
new /obj/item/mail/mail_strike(src)
|
||||
else
|
||||
new /obj/item/mail/traitor/mail_strike(src)
|
||||
return ..(storage_capacity - strike_mail_to_spawn)
|
||||
|
||||
/// Opened mail crate
|
||||
/obj/structure/closet/crate/mail/preopen
|
||||
@@ -383,7 +407,8 @@
|
||||
playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE)
|
||||
for(var/obj/item/stuff as anything in contents) // Mail and envelope actually can have more than 1 item.
|
||||
if(user.put_in_hands(stuff) && armed)
|
||||
log_bomber(user, "opened armed mail made by [made_by_cached_name] ([made_by_cached_ckey]), activating", stuff)
|
||||
var/whomst = made_by_cached_name ? "[made_by_cached_name] ([made_by_cached_ckey])" : "no one in particular"
|
||||
log_bomber(user, "opened armed mail made by [whomst], activating", stuff)
|
||||
INVOKE_ASYNC(stuff, TYPE_PROC_REF(/obj/item, attack_self), user)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
@@ -414,6 +439,55 @@
|
||||
after_unwrap(user)
|
||||
return TRUE
|
||||
|
||||
///Generic mail used in the mail strike shuttle loan event
|
||||
/obj/item/mail/mail_strike
|
||||
name = "dead mail"
|
||||
desc = "An unmarked parcel of unknown origins, effectively undeliverable."
|
||||
postmarked = FALSE
|
||||
generic_goodies = list(
|
||||
/obj/effect/spawner/random/entertainment/money_medium = 2,
|
||||
/obj/effect/spawner/random/contraband = 2,
|
||||
/obj/effect/spawner/random/entertainment/money_large = 1,
|
||||
/obj/effect/spawner/random/entertainment/coin = 1,
|
||||
/obj/effect/spawner/random/food_or_drink/any_snack_or_beverage = 1,
|
||||
/obj/effect/spawner/random/entertainment/drugs = 1,
|
||||
/obj/effect/spawner/random/contraband/grenades = 1,
|
||||
)
|
||||
|
||||
/obj/item/mail/mail_strike/Initialize(mapload)
|
||||
if(prob(35))
|
||||
stamped = FALSE
|
||||
if(prob(35))
|
||||
name = "dead envelope"
|
||||
icon_state = "mail_large"
|
||||
goodie_count = 2
|
||||
stamp_max = 2
|
||||
stamp_offset_y = 5
|
||||
. = ..()
|
||||
color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED)
|
||||
for(var/goodie in 1 to goodie_count)
|
||||
var/target_good = pick_weight(generic_goodies)
|
||||
new target_good(src)
|
||||
|
||||
///Also found in the mail strike shuttle loan. It contains a random grenade that'll be triggered when unwrapped
|
||||
/obj/item/mail/traitor/mail_strike
|
||||
name = "dead mail"
|
||||
desc = "An unmarked parcel of unknown origins, effectively undeliverable."
|
||||
postmarked = FALSE
|
||||
|
||||
/obj/item/mail/traitor/mail_strike/Initialize(mapload)
|
||||
if(prob(35))
|
||||
stamped = FALSE
|
||||
if(prob(35))
|
||||
name = "dead envelope"
|
||||
icon_state = "mail_large"
|
||||
goodie_count = 2
|
||||
stamp_max = 2
|
||||
stamp_offset_y = 5
|
||||
. = ..()
|
||||
color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED)
|
||||
new /obj/effect/spawner/random/contraband/grenades/dangerous(src)
|
||||
|
||||
/obj/item/storage/mail_counterfeit_device
|
||||
name = "GLA-2 mail counterfeit device"
|
||||
desc = "Device that actually able to counterfeit NT's mail. This device also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also it might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs."
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#define MAX_DENT_DECALS 15
|
||||
#define LEANING_OFFSET 11
|
||||
|
||||
/turf/closed/wall
|
||||
@@ -387,5 +386,4 @@
|
||||
. = ..()
|
||||
SEND_SIGNAL(gone, COMSIG_LIVING_WALL_EXITED, src)
|
||||
|
||||
#undef MAX_DENT_DECALS
|
||||
#undef LEANING_OFFSET
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
/// What the shuttle says about it.
|
||||
var/shuttle_transit_text = "Unset transit text"
|
||||
/// Supply points earned for taking the deal.
|
||||
var/bonus_points = 10000
|
||||
var/bonus_points = CARGO_CRATE_VALUE * 50
|
||||
/// Response for taking the deal.
|
||||
var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble."
|
||||
/// Small description of the loan for easier log reading.
|
||||
@@ -21,7 +21,7 @@
|
||||
bonus_points *= 1.15
|
||||
|
||||
/// Spawns paths added to `spawn_list`, and passes empty shuttle turfs so you can spawn more complicated things like dead bodies.
|
||||
/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
CRASH("Unimplemented get_spawned_items() on [src.type].")
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
shuttle_transit_text = "Virus samples incoming."
|
||||
logging_desc = "Virus shuttle"
|
||||
|
||||
/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/obj/effect/mob_spawn/corpse/human/assistant/infected_assistant = pick(list(
|
||||
/obj/effect/mob_spawn/corpse/human/assistant/beesease_infection,
|
||||
/obj/effect/mob_spawn/corpse/human/assistant/brainrot_infection,
|
||||
@@ -58,7 +58,7 @@
|
||||
bonus_points = 0
|
||||
logging_desc = "Resupply packages"
|
||||
|
||||
/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/list/crate_types = list(
|
||||
/datum/supply_pack/emergency/equipment,
|
||||
/datum/supply_pack/security/supplies,
|
||||
@@ -84,7 +84,7 @@
|
||||
shuttle_transit_text = "Syndicate hijack team incoming."
|
||||
logging_desc = "Syndicate boarding party"
|
||||
|
||||
/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -99,10 +99,10 @@
|
||||
sender = "CentCom Janitorial Division"
|
||||
announcement_text = "One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?"
|
||||
shuttle_transit_text = "Biohazard cleanup incoming."
|
||||
bonus_points = 20000 //Toxin bees can be unbeelievably lethal
|
||||
bonus_points = CARGO_CRATE_VALUE * 100 //Toxin bees can be unbeelievably lethal
|
||||
logging_desc = "Shuttle full of bees"
|
||||
|
||||
/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/organic/hydroponics/beekeeping_fullkit]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -135,10 +135,10 @@
|
||||
announcement_text = "We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it."
|
||||
shuttle_transit_text = "Live explosive ordnance incoming. Exercise extreme caution."
|
||||
thanks_msg = "Live explosive ordnance incoming via supply shuttle. Evacuating cargo bay is recommended."
|
||||
bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese
|
||||
bonus_points = CARGO_CRATE_VALUE * 225 //If you mess up, people die and the shuttle gets turned into swiss cheese
|
||||
logging_desc = "Shuttle with a ticking bomb"
|
||||
|
||||
/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
spawn_list.Add(/obj/machinery/syndicatebomb/shuttle_loan)
|
||||
if(prob(95))
|
||||
spawn_list.Add(/obj/item/paper/fluff/cargo/bomb)
|
||||
@@ -153,7 +153,7 @@
|
||||
bonus_points = 0 //Payout is made when the stamped papers are returned
|
||||
logging_desc = "Paperwork shipment"
|
||||
|
||||
/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
spawn_list += subtypesof(/obj/item/paperwork) - typesof(/obj/item/paperwork/photocopy) - typesof(/obj/item/paperwork/ancient)
|
||||
|
||||
/datum/shuttle_loan_situation/pizza_delivery
|
||||
@@ -164,8 +164,8 @@
|
||||
bonus_points = 0
|
||||
logging_desc = "Pizza delivery"
|
||||
|
||||
/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
var/naughtypizza = list(/obj/item/pizzabox/bomb /*/obj/item/pizzabox/margherita/robo*/) // SKYRAT EDIT: oh look another blacklist, for pizza nonetheless! removes borg pizza
|
||||
/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/naughtypizza = list(/obj/item/pizzabox/bomb, /obj/item/pizzabox/margherita/robo) //oh look another blacklist, for pizza nonetheless!
|
||||
var/nicepizza = list(/obj/item/pizzabox/margherita, /obj/item/pizzabox/meat, /obj/item/pizzabox/vegetable, /obj/item/pizzabox/mushroom)
|
||||
for(var/i in 1 to 6)
|
||||
spawn_list.Add(pick(prob(5) ? naughtypizza : nicepizza))
|
||||
@@ -176,7 +176,7 @@
|
||||
shuttle_transit_text = "Partying Russians incoming."
|
||||
logging_desc = "Russian party squad"
|
||||
|
||||
/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/service/party]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
shuttle_transit_text = "Spider Clan gift incoming."
|
||||
logging_desc = "Shuttle full of spiders"
|
||||
|
||||
/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -213,3 +213,82 @@
|
||||
for(var/i in 1 to 5)
|
||||
var/turf/web_turf = pick_n_take(empty_shuttle_turfs)
|
||||
new /obj/structure/spider/stickyweb(web_turf)
|
||||
|
||||
#define DENT_WALL "dent"
|
||||
#define CHANGE_WALL "change"
|
||||
#define DISMANTLE_WALL "dismantle"
|
||||
|
||||
#define BREAK_TILE "break"
|
||||
#define PLATING_TILE "plating"
|
||||
#define RUST_TILE "rust"
|
||||
|
||||
/**
|
||||
* A special shuttle loan situation enabled by the 'mail blocked' station trait.
|
||||
* It sends back a lot of mail to the station, at the cost of wrecking the cargo shuttle a little.
|
||||
*/
|
||||
/datum/shuttle_loan_situation/mail_strike
|
||||
sender = "Spinward Mail Workers Union"
|
||||
announcement_text = "The Mail Workers Union wants to borrow your cargo shuttle to employ \"advanced union strike tactics\" with. Payment is strictly in mails."
|
||||
bonus_points = 0
|
||||
thanks_msg = "The cargo shuttle should return in five minutes."
|
||||
shuttle_transit_text = "Nothing stops the mail."
|
||||
logging_desc = "Shuttle full of shady mail"
|
||||
|
||||
/datum/shuttle_loan_situation/mail_strike/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
for(var/i in 1 to rand(7, 12))
|
||||
var/turf/closed/wall/wall = pick_n_take(blocked_shutte_turfs)
|
||||
if(!istype(wall))
|
||||
continue
|
||||
var/static/list/wall_bad_stuff = list(DENT_WALL = 85, CHANGE_WALL = 13, DISMANTLE_WALL = 2)
|
||||
var/static/list/possible_new_walls = list(
|
||||
/turf/closed/wall/mineral/sandstone,
|
||||
/turf/closed/wall/mineral/wood,
|
||||
/turf/closed/wall/mineral/iron,
|
||||
/turf/closed/wall/metal_foam_base,
|
||||
/turf/closed/wall/r_wall,
|
||||
)
|
||||
var/damage_done = pick_weight(wall_bad_stuff)
|
||||
switch(damage_done)
|
||||
if(DENT_WALL)
|
||||
for(var/dent in 1 to rand(1, MAX_DENT_DECALS))
|
||||
wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT)
|
||||
if(CHANGE_WALL)
|
||||
wall.ChangeTurf(pick(possible_new_walls - wall.type))
|
||||
if(prob(25))
|
||||
for(var/dent in 1 to rand(1, MAX_DENT_DECALS))
|
||||
wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT)
|
||||
if(DISMANTLE_WALL)
|
||||
wall.dismantle_wall()
|
||||
|
||||
for(var/i in 1 to rand(7, 12))
|
||||
var/turf/open/floor/floor = pick_n_take(empty_shuttle_turfs)
|
||||
if(!istype(floor))
|
||||
continue
|
||||
var/static/list/floor_bad_stuff = list(BREAK_TILE = 65, PLATING_TILE = 25, RUST_TILE = 10)
|
||||
var/damage_done = pick_weight(floor_bad_stuff)
|
||||
switch(damage_done)
|
||||
if(BREAK_TILE)
|
||||
if(prob(50))
|
||||
floor.break_tile()
|
||||
else
|
||||
floor.burn_tile()
|
||||
if(PLATING_TILE)
|
||||
if(prob(25))
|
||||
floor.remove_tile()
|
||||
else
|
||||
floor.make_plating()
|
||||
if(RUST_TILE)
|
||||
floor.ChangeTurf(/turf/open/floor/plating/rust)
|
||||
if(prob(25))
|
||||
spawn_list += pick(/obj/effect/gibspawner/robot, /obj/effect/gibspawner/human)
|
||||
|
||||
for(var/i in 1 to rand(4, 7))
|
||||
spawn_list += /obj/structure/closet/crate/mail/full/mail_strike
|
||||
|
||||
#undef BREAK_TILE
|
||||
#undef PLATING_TILE
|
||||
#undef RUST_TILE
|
||||
|
||||
#undef DENT_WALL
|
||||
#undef CHANGE_WALL
|
||||
#undef DISMANTLE_WALL
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
description = "If cargo accepts the offer, fills the shuttle with loot and/or enemies."
|
||||
///The types of loan events already run (and to be excluded if the event triggers).
|
||||
admin_setup = list(/datum/event_admin_setup/listed_options/shuttle_loan)
|
||||
var/list/run_situations = list()
|
||||
///A list of normally unavailable (or already run) situations datums
|
||||
var/list/unavailable_situations = list(/datum/shuttle_loan_situation/mail_strike)
|
||||
|
||||
/datum/round_event_control/shuttle_loan/can_spawn_event(players_amt, allow_magic = FALSE)
|
||||
. = ..()
|
||||
@@ -28,14 +29,14 @@
|
||||
var/datum/round_event_control/shuttle_loan/loan_control = control
|
||||
//by this point if situation is admin picked, it is a type, not an instance.
|
||||
if(!situation)
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.run_situations
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.unavailable_situations
|
||||
if(!valid_situations.len)
|
||||
//If we somehow run out of loans (fking campbell), they all become available again
|
||||
loan_control.run_situations.Cut()
|
||||
loan_control.unavailable_situations.Cut()
|
||||
valid_situations = subtypesof(/datum/shuttle_loan_situation)
|
||||
situation = pick(valid_situations)
|
||||
|
||||
loan_control.run_situations.Add(situation)
|
||||
loan_control.unavailable_situations.Add(situation)
|
||||
situation = new situation()
|
||||
|
||||
/datum/round_event/shuttle_loan/announce(fake)
|
||||
@@ -76,10 +77,12 @@
|
||||
|
||||
//get empty turfs
|
||||
var/list/empty_shuttle_turfs = list()
|
||||
var/list/blocked_shutte_turfs = list()
|
||||
var/list/area/shuttle/shuttle_areas = SSshuttle.supply.shuttle_areas
|
||||
for(var/area/shuttle/shuttle_area as anything in shuttle_areas)
|
||||
for(var/turf/open/floor/shuttle_turf in shuttle_area)
|
||||
if(shuttle_turf.is_blocked_turf())
|
||||
blocked_shutte_turfs += shuttle_turf
|
||||
continue
|
||||
empty_shuttle_turfs += shuttle_turf
|
||||
if(!empty_shuttle_turfs.len)
|
||||
@@ -87,7 +90,7 @@
|
||||
|
||||
//let the situation spawn its items
|
||||
var/list/spawn_list = list()
|
||||
situation.spawn_items(spawn_list, empty_shuttle_turfs)
|
||||
situation.spawn_items(spawn_list, empty_shuttle_turfs, blocked_shutte_turfs)
|
||||
|
||||
var/false_positive = 0
|
||||
while(spawn_list.len && empty_shuttle_turfs.len)
|
||||
@@ -103,7 +106,7 @@
|
||||
|
||||
/datum/event_admin_setup/listed_options/shuttle_loan/get_list()
|
||||
var/datum/round_event_control/shuttle_loan/loan_event = event_control
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.run_situations
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.unavailable_situations
|
||||
return valid_situations
|
||||
|
||||
/datum/event_admin_setup/listed_options/shuttle_loan/apply_to_event(datum/round_event/shuttle_loan/event)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 40 KiB |
Reference in New Issue
Block a user