cynic716

Untitled

Oct 5th, 2019
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.16 KB | None | 0 0
  1. //Originally coded by ISaidNo, later modified by Kelenius. Ported from Baystation12.
  2.  
  3. /obj/structure/closet/crate/secure/loot
  4.     name = "abandoned crate"
  5.     desc = "What could be inside?"
  6.     icon_state = "securecrate"
  7.     integrity_failure = 0 //no breaking open the crate
  8.     var/code = null
  9.     var/lastattempt = null
  10.     var/attempts = 10
  11.     var/codelen = 4
  12.     var/qdel_on_open
  13.     tamperproof = 90
  14.  
  15. /obj/structure/closet/crate/secure/loot/Initialize()
  16.     . = ..()
  17.     var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
  18.     code = ""
  19.     for(var/i = 0, i < codelen, i++)
  20.         var/dig = pick(digits)
  21.         code += dig
  22.         digits -= dig  //there are never matching digits in the answer
  23.  
  24.     var/loot = rand(1,100) //100 different crates with varying chances of spawning
  25.     switch(loot)
  26.         if(1 to 5) //5% chance
  27.             new /obj/item/reagent_containers/food/drinks/bottle/rum(src)
  28.             new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src)
  29.             new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src)
  30.             new /obj/item/lighter(src)
  31.             new /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium(src)
  32.             new /obj/item/clothing/mask/cigarette/rollie(src)
  33.             new /obj/item/clothing/mask/cigarette/rollie(src)
  34.             new /obj/item/clothing/mask/cigarette/rollie(src)
  35.         if(6 to 10)
  36.             new /obj/item/melee/skateboard/pro(src)
  37.         if(11 to 15)
  38.             new /mob/living/simple_animal/bot/honkbot(src)
  39.         if(16 to 20)
  40.             new /obj/item/stack/ore/diamond(src, 10)
  41.         if(21 to 25)
  42.             for(var/i in 1 to 5)
  43.                 new /obj/item/poster/random_contraband(src)
  44.         if(26 to 30)
  45.             new /obj/item/vending_refill/sovietsoda(src)
  46.             new /obj/item/circuitboard/machine/vending(src)
  47.         if(31 to 35)
  48.             new /obj/item/seeds/firelemon(src)
  49.         if(36 to 40)
  50.             new /obj/item/toy/snappop/phoenix(src)
  51.             new /obj/item/toy/snappop/phoenix(src)
  52.             new /obj/item/toy/snappop/phoenix(src)
  53.             new /obj/item/toy/snappop/phoenix(src)
  54.             new /obj/item/toy/snappop/phoenix(src)
  55.         if(41 to 45)
  56.             new /obj/item/reagent_containers/food/snacks/burger/roburger(src)
  57.         if(46 to 50)
  58.             new /obj/item/storage/box/syndie_kit/chameleon/broken
  59.         if(51 to 52) // 2% chance
  60.             new /obj/item/melee/classic_baton(src)
  61.         if(53 to 54)
  62.             new /obj/item/toy/balloon/corgi(src)
  63.         if(55 to 56)
  64.             var/newitem = pick(subtypesof(/obj/item/toy/prize))
  65.             new newitem(src)
  66.         if(57 to 58)
  67.             new /obj/item/toy/balloon/syndicate(src)
  68.         if(59 to 60)
  69.             new /obj/item/borg/upgrade/modkit/aoe/mobs(src)
  70.             new /obj/item/clothing/suit/space(src)
  71.             new /obj/item/clothing/head/helmet/space(src)
  72.         if(61 to 62)
  73.             for(var/i in 1 to 5)
  74.                 new /obj/item/clothing/head/kitty(src)
  75.                 new /obj/item/clothing/neck/petcollar(src)
  76.         if(63 to 64)
  77.             new /obj/item/clothing/shoes/kindleKicks(src)
  78.         if(65 to 66)
  79.             new /obj/item/clothing/suit/ianshirt(src)
  80.             new /obj/item/clothing/suit/hooded/ian_costume(src)
  81.         if(67 to 68)
  82.             new /obj/item/toy/plush/awakenedplushie(src)
  83.         if(69 to 70)
  84.             new /obj/item/stack/ore/bluespace_crystal(src, 5)
  85.         if(71 to 72)
  86.             new /obj/item/toy/plush/snakeplushie(src)
  87.         if(73 to 74)
  88.             new /mob/living/simple_animal/pet/gondola(src)
  89.         if(75 to 76)
  90.             new /obj/item/bikehorn/airhorn(src)
  91.         if(77 to 78)
  92.             new /obj/item/toy/plush/lizardplushie(src)
  93.         if(79 to 80)
  94.             new /obj/item/stack/sheet/mineral/bananium(src, 10)
  95.         if(81 to 82)
  96.             new /obj/item/bikehorn/airhorn(src)
  97.         if(83 to 84)
  98.             new /obj/item/toy/plush/beeplushie(src)
  99.         if(85 to 86)
  100.             new /obj/item/defibrillator/compact(src)
  101.         if(87) //1% chance
  102.             new /obj/item/weed_extract(src)
  103.         if(88)
  104.             new /obj/item/reagent_containers/food/drinks/bottle/lizardwine(src)
  105.         if(89)
  106.             new /obj/item/melee/transforming/energy/sword/bananium(src)
  107.         if(90)
  108.             new /obj/item/dnainjector/wackymut(src)
  109.         if(91)
  110.             for(var/i in 1 to 30)
  111.              new /mob/living/simple_animal/cockroach(src)
  112.         if(92)
  113.             new /obj/item/katana(src)
  114.         if(93)
  115.             new /obj/item/dnainjector/xraymut(src)
  116.         if(94)
  117.             new /mob/living/simple_animal/hostile/mimic/crate(src)
  118.             set qdel_on_open = true(src)
  119.         if(95)
  120.             new /obj/item/toy/plush/nukeplushie(src)
  121.         if(96)
  122.             new /obj/item/banhammer(src)
  123.             new /obj/effect/mine/sound/bwoink(src)
  124.             new /obj/effect/mine/sound/bwoink(src)
  125.             new /obj/effect/mine/sound/bwoink(src)
  126.         if(97)
  127.             new /obj/item/clothing/mask/balaclava(src)
  128.             new /obj/item/clothing/mask/balaclava(src)
  129.             new /obj/item/clothing/mask/balaclava(src)
  130.             new /obj/item/clothing/mask/balaclava(src)
  131.             new /obj/item/gun/ballistic/shotgun/toy(src)
  132.             new /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted(src)
  133.             new /obj/item/gun/ballistic/automatic/toy/unrestricted(src)
  134.             new /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted(src)
  135.             new /obj/item/ammo_box/foambox(src)
  136.         if(98)
  137.             for(var/i in 1 to 3)
  138.              new /mob/living/simple_animal/hostile/poison/bees/toxin(src)
  139.         if(99)
  140.             new /obj/item/implanter/sad_trombone(src)
  141.         if(100)
  142.             new /obj/item/melee/skateboard/hoverboard(src)
  143.  
  144. //ATTACK HAND IGNORING PARENT RETURN VALUE
  145. /obj/structure/closet/crate/secure/loot/attack_hand(mob/user)
  146.     if(locked)
  147.         to_chat(user, "<span class='notice'>The crate is locked with a Deca-code lock.</span>")
  148.         var/input = input(usr, "Enter [codelen] digits. All digits must be unique.", "Deca-Code Lock", "") as text|null
  149.         if(user.canUseTopic(src, BE_CLOSE))
  150.             var/list/sanitised = list()
  151.             var/sanitycheck = 1
  152.             for(var/i=1,i<=length(input),i++) //put the guess into a list
  153.                 sanitised += text2num(copytext(input,i,i+1))
  154.             for(var/i=1,i<=(length(input)-1),i++) //compare each digit in the guess to all those following it
  155.                 for(var/j=(i+1),j<=length(input),j++)
  156.                     if(sanitised[i] == sanitised[j])
  157.                         sanitycheck = null //if a digit is repeated, reject the input
  158.             if (input == code)
  159.                 to_chat(user, "<span class='notice'>The crate unlocks!</span>")
  160.                 locked = FALSE
  161.                 cut_overlays()
  162.                 add_overlay("securecrateg")
  163.                 tamperproof = 0 // set explosion chance to zero, so we dont accidently hit it with a multitool and instantly die
  164.             else if (input == null || sanitycheck == null || length(input) != codelen)
  165.                 to_chat(user, "<span class='notice'>You leave the crate alone.</span>")
  166.             else
  167.                 to_chat(user, "<span class='warning'>A red light flashes.</span>")
  168.                 lastattempt = input
  169.                 attempts--
  170.                 if(attempts == 0)
  171.                     boom(user)
  172.     else
  173.         return ..()
  174.  
  175. /obj/structure/closet/crate/secure/loot/AltClick(mob/living/user)
  176.     if(!user.canUseTopic(src, BE_CLOSE))
  177.         return
  178.     return attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom.
  179.  
  180. /obj/structure/closet/crate/secure/loot/attackby(obj/item/W, mob/user)
  181.     if(locked)
  182.         if(W.tool_behaviour == TOOL_MULTITOOL)
  183.             to_chat(user, "<span class='notice'>DECA-CODE LOCK REPORT:</span>")
  184.             if(attempts == 1)
  185.                 to_chat(user, "<span class='warning'>* Anti-Tamper Bomb will activate on next failed access attempt.</span>")
  186.             else
  187.                 to_chat(user, "<span class='notice'>* Anti-Tamper Bomb will activate after [attempts] failed access attempts.</span>")
  188.             if(lastattempt != null)
  189.                 var/list/guess = list()
  190.                 var/list/answer = list()
  191.                 var/bulls = 0
  192.                 var/cows = 0
  193.                 for(var/i=1,i<=length(lastattempt),i++)
  194.                     guess += text2num(copytext(lastattempt,i,i+1))
  195.                 for(var/i=1,i<=length(lastattempt),i++)
  196.                     answer += text2num(copytext(code,i,i+1))
  197.                 for(var/i = 1, i < codelen + 1, i++) // Go through list and count matches
  198.                     if( answer.Find(guess[i],1,codelen+1))
  199.                         ++cows
  200.                     if( answer[i] == guess[i])
  201.                         ++bulls
  202.                         --cows
  203.  
  204.                 to_chat(user, "<span class='notice'>Last code attempt, [lastattempt], had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.</span>")
  205.             return
  206.     return ..()
  207.  
  208. /obj/structure/closet/secure/loot/dive_into(mob/living/user)
  209.     if(!locked)
  210.         return ..()
  211.     to_chat(user, "<span class='notice'>That seems like a stupid idea.</span>")
  212.     return FALSE
  213.  
  214. /obj/structure/closet/crate/secure/loot/emag_act(mob/user)
  215.     if(locked)
  216.         boom(user)
  217.  
  218. /obj/structure/closet/crate/secure/loot/togglelock(mob/user)
  219.     if(locked)
  220.         boom(user)
  221.     else
  222.         if (qdel_on_open)
  223.             qdel(src)
  224.         ..()
  225.  
  226. /obj/structure/closet/crate/secure/loot/deconstruct(disassembled = TRUE)
  227.     boom()
Advertisement
Add Comment
Please, Sign In to add comment