mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-26 09:12:29 +00:00
From previous PR: - Fixes Quick Equip (Thanks, Matt) - Fixes Loadout Preview, will override uniforms properly now - Turns shirts into uniform items, so you can attach accessories to them This also fixes the issue of people spawning in shirtless if they didn't attach properly to the pants. Additions: - Shifts suspenders, leather chaps, and kneepads to be pants accessories. (This fixes the issue of accessories staying even without pants, e.g. assless chaps) (In future, hip holsters are to be added to this accessory list) Anyway, that's the long and short of it. Have fun. --------- Signed-off-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com> Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
199 lines
6.6 KiB
Plaintext
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/pants/shorts/athletic/red(src)
|
|
new /obj/item/clothing/pants/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/attacking_item, mob/user)
|
|
if(locked)
|
|
if(attacking_item.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
|
|
..()
|