Files
Aurora.3/code/modules/mining/abandonedcrates.dm
2023-02-02 15:01:19 -03:00

199 lines
6.6 KiB
Plaintext

/obj/structure/closet/crate/secure/loot
name = "abandoned crate"
desc = "What could be inside?"
var/list/code = list()
var/list/lastattempt = list()
var/attempts = 15
var/codelen = 4
locked = TRUE
/obj/structure/closet/crate/secure/loot/Initialize()
. = ..()
var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
for(var/i in 1 to codelen)
code += pick(digits)
digits -= code[code.len]
generate_loot()
/obj/structure/closet/crate/secure/loot/proc/generate_loot()
var/loot = rand(1, 100)
switch(loot)
if(1 to 5) // Common things go, 5%
new /obj/item/reagent_containers/food/drinks/bottle/rum(src)
new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src)
new /obj/item/reagent_containers/food/snacks/grown/ambrosiadeus(src)
new /obj/item/flame/lighter/zippo(src)
if(6 to 10)
new /obj/random/custom_ka(src)
new /obj/random/custom_ka(src)
new /obj/random/custom_ka(src)
if(11 to 15)
new /obj/item/reagent_containers/glass/beaker/bluespace(src)
if(16 to 20)
for(var/i = 0, i < 10, i++)
new /obj/item/ore/diamond(src)
if(21 to 25)
for(var/i = 0, i < 3, i++)
new /obj/machinery/portable_atmospherics/hydroponics(src)
if(26 to 30)
for(var/i = 0, i < 3, i++)
new /obj/item/reagent_containers/glass/beaker/noreact(src)
if(31 to 35)
spawn_money(rand(300,800), src)
if(36 to 40)
new /obj/item/melee/baton(src)
if(41 to 45)
new /obj/item/clothing/under/shorts/athletic/red(src)
new /obj/item/clothing/under/shorts/athletic/blue(src)
if(46 to 50)
new /obj/item/clothing/under/chameleon(src)
for(var/i = 0, i < 7, i++)
new /obj/item/clothing/accessory/horrible(src)
if(51 to 52) // Uncommon, 2% each
new /obj/item/melee/classic_baton(src)
if(53 to 54)
var/newitem = pick(typesof(/obj/item/toy/balloon) - /obj/item/toy/balloon)
new newitem(src)
if(55 to 56)
var/newitem = pick(typesof(/obj/item/toy/mech) - /obj/item/toy/mech)
new newitem(src)
if(57 to 58)
new /obj/item/toy/balloon/syndicate(src)
if(59 to 60)
new /obj/item/rig/eva(src)
if(61 to 62)
new /obj/item/clothing/head/collectable/swat(src)
if(63 to 64)
var/t = rand(4,7)
for(var/i = 0, i < t, ++i)
var/newcoin = pick(/obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/iron, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/phoron, /obj/item/coin/uranium, /obj/item/coin/platinum)
new newcoin(src)
if(65 to 66)
new /obj/item/clothing/suit/ianshirt(src)
if(67 to 68)
var/t = rand(4,7)
for(var/i = 0, i < t, ++i)
var/newitem = pick(typesof(/obj/item/stock_parts) - /obj/item/stock_parts - /obj/item/stock_parts/subspace)
new newitem(src)
if(69 to 70)
new /obj/item/pickaxe/silver(src)
if(71 to 72)
new /obj/item/pickaxe/drill(src)
if(73 to 74)
new /obj/item/pickaxe/jackhammer(src)
if(75 to 76)
new /obj/item/pickaxe/diamond(src)
if(77 to 78)
new /obj/item/pickaxe/diamonddrill(src)
if(79 to 80)
new /obj/item/pickaxe/gold(src)
if(81 to 82)
new /obj/item/gun/energy/plasmacutter(src)
if(83) // Rarest things, some are unobtainble otherwise, some are just robust, 1% each
new /obj/random/prebuilt_ka(src)
if(84)
new /obj/item/toy/katana(src)
if(85)
new /obj/item/seeds/random(src)
if(86 to 89)
new /obj/item/gun/projectile/shotgun/pump/rifle(src)
new /obj/item/ammo_magazine/boltaction(src)
new /obj/item/clothing/head/ushanka/grey(src)
if(90)
new /obj/item/organ/internal/heart(src)
if(91)
new /obj/item/poppet(src)
if(92)
new /obj/item/material/sword/katana(src)
if(93)
new /obj/item/dnainjector/xraymut(src) // Probably the least OP
if(94)
new /obj/item/clothing/suit/space/void/zavodskoi(src)
new /obj/item/clothing/head/helmet/space/void/zavodskoi(src)
new /obj/item/flag/zavodskoi/l(src)
if(95)
new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(src)
if(96)
new/obj/item/vampiric(src)
if(97)
new /obj/item/archaeological_find(src)
if(98)
new /obj/item/melee/energy/sword(src)
if(99)
new /obj/item/storage/belt/champion(src)
new /obj/item/clothing/mask/luchador(src)
if(100)
new /obj/item/gun/projectile/tanto(src)
new /obj/item/ammo_magazine/mc10mm(src)
new /obj/item/ammo_magazine/mc10mm(src)
new /obj/item/ammo_magazine/mc10mm/rubber(src)
new /obj/item/clothing/accessory/badge/old(src)
new /obj/item/clothing/head/helmet/formalcaptain(src)
/obj/structure/closet/crate/secure/loot/togglelock(mob/user)
if(!locked)
return
to_chat(user, SPAN_NOTICE("The crate is locked with a Deca-code lock."))
var/input = input(user, "Enter [codelen] digits.", "Deca-Code Lock", "") as text
if(!Adjacent(user))
return
if(!input || length(input) != codelen)
to_chat(user, SPAN_NOTICE("You leave the crate alone."))
else if(check_input(input))
to_chat(user, SPAN_NOTICE("The crate unlocks!"))
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
locked = FALSE
update_icon()
else
visible_message(SPAN_WARNING("A red light on \the [src]'s control panel flashes briefly."))
attempts--
if(!attempts)
to_chat(user, SPAN_DANGER("The crate's anti-tamper system activates!"))
var/turf/T = get_turf(src)
explosion(T, 0, 0, 1, 2)
qdel(src)
/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
if(locked)
to_chat(user, SPAN_NOTICE("The crate unlocks!"))
locked = FALSE
/obj/structure/closet/crate/secure/loot/proc/check_input(var/input)
if(length(input) != codelen)
return FALSE
. = 1
lastattempt.Cut()
for(var/i in 1 to codelen)
var/guesschar = copytext(input, i, i+1)
lastattempt += guesschar
if(guesschar != code[i])
. = 0
/obj/structure/closet/crate/secure/loot/attackby(obj/item/W, mob/user)
if(locked)
if(W.ismultitool()) // Greetings Urist McProfessor, how about a nice game of cows and bulls?
to_chat(user, SPAN_NOTICE("DECA-CODE LOCK ANALYSIS:"))
if(attempts == 1)
to_chat(user, SPAN_WARNING("* Anti-Tamper system will activate on the next failed access attempt."))
else
to_chat(user, SPAN_NOTICE("* Anti-Tamper system will activate after [src.attempts] failed access attempts."))
if(length(lastattempt))
var/bulls = 0
var/cows = 0
var/list/code_contents = code.Copy()
for(var/i in 1 to codelen)
if(lastattempt[i] == code[i])
++bulls
else if(lastattempt[i] in code_contents)
++cows
code_contents -= lastattempt[i]
to_chat(user, SPAN_NOTICE("Last code attempt had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions."))
return
..()