Advertisement
Diaghilev

Untitled

Mar 11th, 2021
857
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 16.31 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class Restocker : MonoBehaviour
  6. {
  7.     // Start is called before the first frame update
  8.     void Start()
  9.     {
  10.         print("Press '1' to restock a room. Press '2' to test the treasure roller.");
  11.     }
  12.  
  13.     void BasicRestocker()
  14.     {
  15.         int restockOutcome = Roll(1, 6);
  16.  
  17.         if (restockOutcome == 1) { print("Rolled a 1. Room contains a monster."); }
  18.         else if (restockOutcome == 2) { print("Rolled a 2. Room contains a monster and treasure."); }
  19.         else if (restockOutcome >= 3)
  20.         {
  21.             int unguardedTreasureCheck = Roll(1, 6);
  22.             if (unguardedTreasureCheck <= 5) { print("Rolled a 3+. Room is empty."); }
  23.             else if (unguardedTreasureCheck == 6)
  24.             {
  25.                 int trapPresenceCheck = Roll(1, 6);
  26.                 if (trapPresenceCheck >= 3) { print("Rolled a 3+, then a 6, then a 3+. A trap guards this treasure!"); }
  27.                 else { print ("Rolled a 3+, then a 6. Room is empty, but has unguarded treasure."); }
  28.             }
  29.         }
  30.     }
  31.  
  32.     double TreasureUnitCalculator() //Determine size of treasure unit, then determine base value of the hoard.
  33.     {
  34.         double baseTreasureUnit = Random.Range(800, 999);
  35.         double treasureunit = 0;
  36.  
  37.         int baseValueMultiplier = Roll(1, 100);
  38.         if (InRangeInclusive(baseValueMultiplier, 1, 1)) { treasureunit = baseTreasureUnit * 0.01; }
  39.         else if (InRangeInclusive(baseValueMultiplier, 2, 3)) { treasureunit = baseTreasureUnit * 0.10; }
  40.         else if (InRangeInclusive(baseValueMultiplier, 4, 8)) { treasureunit = baseTreasureUnit * 0.25; }
  41.         else if (InRangeInclusive(baseValueMultiplier, 9, 14)) { treasureunit = baseTreasureUnit * 0.50; }
  42.         else if (InRangeInclusive(baseValueMultiplier, 15, 24)) { treasureunit = baseTreasureUnit * 0.75; }
  43.         else if (InRangeInclusive(baseValueMultiplier, 25, 76)) { treasureunit = baseTreasureUnit * 1.00; }
  44.         else if (InRangeInclusive(baseValueMultiplier, 77, 86)) { treasureunit = baseTreasureUnit * 1.50; }
  45.         else if (InRangeInclusive(baseValueMultiplier, 78, 92)) { treasureunit = baseTreasureUnit * 2.00; }
  46.         else if (InRangeInclusive(baseValueMultiplier, 93, 97)) { treasureunit = baseTreasureUnit * 3.00; }
  47.         else if (InRangeInclusive(baseValueMultiplier, 98, 99)) { treasureunit = baseTreasureUnit * 5.00; }
  48.         else if (InRangeInclusive(baseValueMultiplier, 100, 100)) { treasureunit = baseTreasureUnit * 10.0; }
  49.  
  50.         print("Base Treasure Unit is " + baseTreasureUnit + "; value per TU is " + treasureunit + " GP. (x" + treasureunit / baseTreasureUnit + ")");
  51.  
  52.         return treasureunit;
  53.     }
  54.    
  55.     void TreasureGenerator()
  56.     {
  57.         //Determine the hoard size (number of total Treasure Units).
  58.         string hoardSizeName = null;
  59.         int hoardSize = Roll(1, 20);
  60.         if (InRangeInclusive(hoardSize, 1, 1)) { hoardSize = 1; hoardSizeName = "Individual Treasure"; }
  61.         else if (InRangeInclusive(hoardSize, 2, 3)) { hoardSize = Roll(1, 3); hoardSizeName = "Small (Unguarded) Hoard"; }
  62.         else if (InRangeInclusive(hoardSize, 4, 7)) { hoardSize = Roll(1, 6) + 1; hoardSizeName = "Small Hoard"; }
  63.         else if (InRangeInclusive(hoardSize, 8, 13)) { hoardSize = Roll(1, 4) + 3; hoardSizeName = "Medium Hoard"; }
  64.         else if (InRangeInclusive(hoardSize, 14, 16)) { hoardSize = Roll(1, 4) + 6; hoardSizeName = "Large Hoard"; }
  65.         else if (InRangeInclusive(hoardSize, 17, 18)) { hoardSize = Roll(1, 4) + Roll(1, 4) + 6; hoardSizeName = "Huge Hoard"; }
  66.         else if (InRangeInclusive(hoardSize, 19, 19)) { hoardSize = Roll(1, 4) + Roll(1, 4) + Roll(1, 4) + 6; hoardSizeName = "Massive Hoard"; }
  67.         else if (InRangeInclusive(hoardSize, 20, 20)) { hoardSize = (Roll(1, 4) + 2) * 4; hoardSizeName = "Gargantuan Hoard"; }
  68.         print("Generating " + hoardSizeName + " of " + hoardSize + " Treasure Units. Total value = " + TreasureUnitCalculator() * hoardSize + " GP.");
  69.  
  70.         //Assign type of treasure for each Treasure Unit.
  71.         string treasureList = null;
  72.         for (int i = 0; i < hoardSize; i++)
  73.         {
  74.             int treasureType = Roll(1, 20);
  75.             if (InRangeInclusive(treasureType, 1, 1)) { treasureList += "Art - " + ArtDetails() + "\n"; }
  76.             else if (InRangeInclusive(treasureType, 2, 3)) { treasureList += "Jeweled Items\n"; }
  77.             else if (InRangeInclusive(treasureType, 4, 7)) { treasureList += "Goods\n"; }
  78.             else if (InRangeInclusive(treasureType, 8, 13)) { treasureList += "Coins\n"; }
  79.             else if (InRangeInclusive(treasureType, 14, 17)) { treasureList += "Furnishings and Clothing\n"; }
  80.             else if (InRangeInclusive(treasureType, 18, 19)) { treasureList += "Gems\n"; }
  81.             else if (InRangeInclusive(treasureType, 20, 20)) { treasureList += "Special or Magic Items\n"; }
  82.         }
  83.         print(treasureList);
  84.     }
  85.  
  86.     string ArtDetails()
  87.     {
  88.         int roll;
  89.         string artForm = "";
  90.         string artSubject = "";
  91.         string artArtistRenown = "";
  92.         string artSize = "";
  93.         string artMaterialQuality = "";
  94.         string artWorkQuality = "";
  95.         string artAge = "";
  96.         string artCondition = "";
  97.         int artValue = 0;
  98.  
  99.         //Roll art's form
  100.         roll = Roll(1, 20);
  101.         if (InRangeInclusive(roll, 1, 2)) { artForm = "Paper art (prints, calligraphy, illustrated manuscript)"; }
  102.         else if (InRangeInclusive(roll, 3, 4)) { artForm = "Fabric art (tapestry, embroidery, quilt)"; }
  103.         else if (InRangeInclusive(roll, 5, 6)) { artForm = "Painting (watercolor, oils, acrylics, enamels)"; }
  104.         else if (InRangeInclusive(roll, 7, 8)) { artForm = "Crafts (dollmaking, bookbinding"; }
  105.         else if (InRangeInclusive(roll, 9, 10)) { artForm = "Carving (woodwork, scrimshaw, bone, ivory, scales)"; }
  106.         else if (InRangeInclusive(roll, 11, 12)) { artForm = "Ceramics (pottery, urns, statuary, china)"; }
  107.         else if (InRangeInclusive(roll, 13, 14)) { artForm = "Glasswork (decanters, chandeliers, goblets, pipes, bowls, windows)"; }
  108.         else if (InRangeInclusive(roll, 15, 17)) { artForm = "Stonework (statues, birdbaths, plaques)"; }
  109.         else if (InRangeInclusive(roll, 18, 19)) { artForm = "Metalwork (sculpture, furnishings, decorative)"; }
  110.         else if (InRangeInclusive(roll, 20, 20)) { artForm = "Magical"; }
  111.  
  112.         //Roll art's subject
  113.         roll = Roll(1, 20);
  114.         if (InRangeInclusive(roll, 1, 1)) { artSubject = "Abstract (-2)"; artValue -= 2; }
  115.         else if (InRangeInclusive(roll, 2, 2)) { artSubject = "Monster (-1)"; artValue -= 1; }
  116.         else if (InRangeInclusive(roll, 3, 3)) { artSubject = "Humanoid"; }
  117.         else if (InRangeInclusive(roll, 4, 5)) { artSubject = "Natural"; }
  118.         else if (InRangeInclusive(roll, 6, 6)) { artSubject = "Supernatural"; }
  119.         else if (InRangeInclusive(roll, 7, 9)) { artSubject = "Local"; }
  120.         else if (InRangeInclusive(roll, 10, 12)) { artSubject = "Historical"; }
  121.         else if (InRangeInclusive(roll, 13, 17)) { artSubject = "Religious"; }
  122.         else if (InRangeInclusive(roll, 18, 19)) { artSubject = "Wealthy/Noble (+1)"; artValue += 1; }
  123.         else if (InRangeInclusive(roll, 20, 20)) { artSubject = "Royalty (+2)"; artValue += 2; }
  124.  
  125.         //Start rolling optional sub-details        
  126.  
  127.         //Roll artist renown
  128.         roll = Roll(1, 20);
  129.         if (InRangeInclusive(roll, 1, 3)) { artArtistRenown = "Unknown (-3)"; artValue -= 3; }
  130.         else if (InRangeInclusive(roll, 4, 6)) { artArtistRenown = "Obscure (-2)"; artValue -= 2; }
  131.         else if (InRangeInclusive(roll, 7, 10)) { artArtistRenown = "Locally known (-1)"; artValue -= 1; }
  132.         else if (InRangeInclusive(roll, 11, 14)) { artArtistRenown = "Regionally known"; }
  133.         else if (InRangeInclusive(roll, 15, 18)) { artArtistRenown = "Nationally known (+1)"; artValue += 1; }
  134.         else if (InRangeInclusive(roll, 19, 19)) { artArtistRenown = "Continentally known (+2)"; artValue += 2; }
  135.         else if (InRangeInclusive(roll, 20, 20))
  136.         {
  137.             int subRoll = Roll(1, 20);
  138.             if (InRangeInclusive(subRoll, 1, 16)) { artArtistRenown = "World renowned (+3)"; artValue += 3; }
  139.             else if (InRangeInclusive(subRoll, 17, 20)) { artArtistRenown = "Ubiquitous (+4)"; artValue += 4; }
  140.         }
  141.  
  142.         //Roll art object's size
  143.         roll = Roll(1, 20);
  144.         if (InRangeInclusive(roll, 1, 1)) { artSize = "Tiny (+3)"; artValue -= 3; }
  145.         else if (InRangeInclusive(roll, 2, 2)) { artSize = "Very Small (-2)"; artValue -= 2; }
  146.         else if (InRangeInclusive(roll, 3, 5)) { artSize = "Small (-1)"; artValue -= 1; }
  147.         else if (InRangeInclusive(roll, 6, 13)) { artSize = "Average"; }
  148.         else if (InRangeInclusive(roll, 14, 17)) { artSize = "Large (+1)"; artValue += 1; }
  149.         else if (InRangeInclusive(roll, 18, 18)) { artSize = "Very Large (+2)"; artValue += 2; }
  150.         else if (InRangeInclusive(roll, 19, 19)) { artSize = "Huge (+3)"; artValue += 3; }
  151.         else if (InRangeInclusive(roll, 20, 20))
  152.         {
  153.             int subRoll = Roll(1, 20);
  154.             if (InRangeInclusive(subRoll, 1, 14)) { artSize = "Massive (+4)"; artValue += 4; }
  155.             else if (InRangeInclusive(subRoll, 15, 20)) { artSize = "Gargantuan (+5)"; artValue += 5; }
  156.         }
  157.  
  158.         //Roll material quality
  159.         roll = Roll(1, 20);
  160.         if (InRangeInclusive(roll, 1, 1)) { artMaterialQuality = "Awful (-3)"; artValue -= 3; }
  161.         else if (InRangeInclusive(roll, 2, 2)) { artMaterialQuality = "Poor (-2)"; artValue -= 2; }
  162.         else if (InRangeInclusive(roll, 3, 5)) { artMaterialQuality = "Below Average (-1)"; artValue -= 1; }
  163.         else if (InRangeInclusive(roll, 6, 13)) { artMaterialQuality = "Average"; }
  164.         else if (InRangeInclusive(roll, 14, 17)) { artMaterialQuality = "Above Average (+1)"; artValue += 1; }
  165.         else if (InRangeInclusive(roll, 18, 18)) { artMaterialQuality = "Good (+2)"; artValue += 2; }
  166.         else if (InRangeInclusive(roll, 19, 19)) { artMaterialQuality = "Excellent (+3)"; artValue += 3; }
  167.         else if (InRangeInclusive(roll, 20, 20))
  168.         {
  169.             int subRoll = Roll(1, 20);
  170.             if (InRangeInclusive(subRoll, 1, 14)) { artMaterialQuality = "Finest (+4)"; artValue += 4; }
  171.             else if (InRangeInclusive(subRoll, 15, 20)) { artMaterialQuality = "Unique (+5)"; artValue += 5; }
  172.         }
  173.  
  174.         //Roll quality of the work itself
  175.         roll = Roll(1, 20);
  176.         if (InRangeInclusive(roll, 1, 1)) { artWorkQuality = "Awful (-3)"; artValue -= 3; }
  177.         else if (InRangeInclusive(roll, 2, 2)) { artWorkQuality = "Poor (-2)"; artValue -= 2; }
  178.         else if (InRangeInclusive(roll, 3, 5)) { artWorkQuality = "Below Average (-1)"; artValue -= 1; }
  179.         else if (InRangeInclusive(roll, 6, 13)) { artWorkQuality = "Average"; }
  180.         else if (InRangeInclusive(roll, 14, 17)) { artWorkQuality = "Above Average (+1)"; artValue += 1; }
  181.         else if (InRangeInclusive(roll, 18, 18)) { artWorkQuality = "Good (+2)"; artValue += 2; }
  182.         else if (InRangeInclusive(roll, 19, 19)) { artWorkQuality = "Excellent (+3)"; artValue += 3; }
  183.         else if (InRangeInclusive(roll, 20, 20))
  184.         {
  185.             int subRoll = Roll(1, 20);
  186.             if (InRangeInclusive(subRoll, 1, 14)) { artWorkQuality = "Brilliant (+4)"; artValue += 4; }
  187.             else if (InRangeInclusive(subRoll, 15, 20)) { artWorkQuality = "Masterpiece (+5)"; artValue += 5; }
  188.         }
  189.  
  190.         //Roll art object's age
  191.         roll = Roll(1, 20);
  192.         if (InRangeInclusive(roll, 1, 1)) { artAge = "Avant-garde (-3)"; artValue -= 3; }
  193.         else if (InRangeInclusive(roll, 2, 2)) { artAge = "Current (-2)"; artValue -= 2; }
  194.         else if (InRangeInclusive(roll, 3, 5)) { artAge = "Recent (-1)"; artValue -= 1; }
  195.         else if (InRangeInclusive(roll, 6, 13)) { artAge = "Contemporary"; }
  196.         else if (InRangeInclusive(roll, 14, 17)) { artAge = "Modern (+1)"; artValue += 1; }
  197.         else if (InRangeInclusive(roll, 18, 18)) { artAge = "Old (+2)"; artValue += 2; }
  198.         else if (InRangeInclusive(roll, 19, 19)) { artAge = "Antique (+3)"; artValue += 3; }
  199.         else if (InRangeInclusive(roll, 20, 20))
  200.         {
  201.             int subRoll = Roll(1, 20);
  202.             if (InRangeInclusive(subRoll, 1, 14)) { artAge = "Venerable (+4)"; artValue += 4; }
  203.             else if (InRangeInclusive(subRoll, 15, 19)) { artAge = "Archaic (+5)"; artValue += 5; }
  204.             else if (InRangeInclusive(subRoll, 20, 20))
  205.             {
  206.                 int subSubRoll = Roll(1, 20);
  207.                 if (InRangeInclusive(subSubRoll, 1, 14)) { artAge = "Antediluvian (+6)"; artValue += 6; }
  208.                 else if (InRangeInclusive(subSubRoll, 15, 20)) { artAge = "Primordial (+7)"; artValue += 7; }
  209.             }
  210.         }
  211.  
  212.         //Roll art object's condition
  213.         roll = Roll(1, 20);
  214.         if (InRangeInclusive(roll, 1, 1)) { artCondition = "Badly Damaged (-3)"; artValue -= 3; }
  215.         else if (InRangeInclusive(roll, 2, 2)) { artCondition = "Damaged (-2)"; artValue -= 2; }
  216.         else if (InRangeInclusive(roll, 3, 5)) { artCondition = "Worn (-1)"; artValue -= 1; }
  217.         else if (InRangeInclusive(roll, 6, 13)) { artCondition = "Average"; }
  218.         else if (InRangeInclusive(roll, 14, 17)) { artCondition = "Good (+1)"; artValue += 1; }
  219.         else if (InRangeInclusive(roll, 18, 18)) { artCondition = "Excellent (+2)"; artValue += 2; }
  220.         else if (InRangeInclusive(roll, 19, 19)) { artCondition = "Near Perfect (+3)"; artValue += 3; }
  221.         else if (InRangeInclusive(roll, 20, 20))
  222.         {
  223.             int subRoll = Roll(1, 20);
  224.             if (InRangeInclusive(subRoll, 1, 14)) { artCondition = "Perfect (+4)"; artValue += 4; }
  225.             else if (InRangeInclusive(subRoll, 15, 20)) { artCondition = "Flawless (+5)"; artValue += 5; }
  226.         }
  227.  
  228.         //Use artValue to determine supposed value of art object.
  229.         //This is almost CERTAINLY not the right way to do this...
  230.        
  231.         double AV1 = 0.01; //1 CP
  232.         double AV2 = 0.10; //1 SP
  233.         double AV3 = 0.50; //5 SP
  234.         double AV4 = 1; //1 GP, and so on.
  235.         double AV5 = 10;
  236.         double AV6 = 25;
  237.         double AV7 = 50;
  238.         double AV8 = 75;
  239.         double AV9 = 100;
  240.         double AV10 = 150;
  241.         double AV11 = 200;
  242.         double AV12 = 300;
  243.         double AV13 = 400;
  244.         double AV14 = 500;
  245.         double AV15 = 750;
  246.         double AV16 = 1000;
  247.         double AV17 = 1500;
  248.         double AV18 = 2000;
  249.         double AV19 = 3000;
  250.         double AV20 = 4000;
  251.         double AV21 = 5000;
  252.         double AV22 = 7500;
  253.         double AV23 = 10000;
  254.         double AV24 = 20000;
  255.         double AV25 = 40000;
  256.         double AV26 = 80000;
  257.         double AV27 = 150000;
  258.         double AV28 = 250000;
  259.         double AV29 = 400000;
  260.         double AV30 = 800000;
  261.         double AV31 = 1000000; //technically another category beyond 1,000,000 GP is "Priceless"
  262.  
  263.         //figure out if treasureunit is higher than a given AV## and lower than the next.
  264.        
  265.         string output = "Form: " + artForm + " " + "Subject: " + artSubject +
  266.             " " + "\n\tArtist Renown: " + artArtistRenown + " " + "\n\tSize: " + artSize + " " + "\n\tMaterial quality: " +
  267.             artMaterialQuality + " " + "\n\tWork quality: " + artWorkQuality + " " + "\n\tAge: " +
  268.             artAge + " " + "\n\tCondition: " + artCondition + " " + "\n\tFINAL VALUE: " + artValue;
  269.  
  270.         return (output);
  271.  
  272.     }
  273.  
  274.     //Rolls a SINGLE die with an eye toward 1dx+y tabletop dice notation.
  275.     //TODO: Update this with a loop to handle dice pools of xdy+z.
  276.     int Roll(int number, int sides, int modifier = 0)
  277.     {
  278.         return Random.Range(1, sides + 1);
  279.     }
  280.  
  281.     //Checks if a number--usually a Roll()--is within a certain range. If so, you can produce a given associated chart result.
  282.     static bool InRangeInclusive(int value, int lower, int upper)
  283.     {
  284.         return lower <= value && value <= upper;
  285.     }
  286.  
  287.     // Update is called once per frame
  288.     void Update()
  289.     {
  290.         if (Input.GetKeyDown(KeyCode.Alpha1)) { BasicRestocker(); } // Press 1 to run the basic restocker
  291.         else if (Input.GetKeyDown(KeyCode.Alpha2)) { TreasureGenerator(); } // Press 2 to run the treasure generator
  292.     }
  293. }
  294.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement