Advertisement
roninator2

Hime Random Shop Addon - Random Stock

Dec 15th, 2024
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.67 KB | None | 0 0
  1. # ╔═════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Hime Random Shop + Stock     ║  Version: 1.04.1   ║
  3. # ║ Author: Roninator2                  ║                    ║
  4. # ╠═════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                           ║   Date Created     ║
  6. # ║                                     ╠════════════════════╣
  7. # ║ Random Shop for Hime Shop Manager   ║    11 Jul 2023     ║
  8. # ╚═════════════════════════════════════╩════════════════════╝
  9. # ╔══════════════════════════════════════════════════════════╗
  10. # ║ Instructions:                                            ║
  11. # ║                                                          ║
  12. # ║   Script order                                           ║
  13. # ║     Galv's Random Loot                                   ║
  14. # ║     Hime Shop Manager                                    ║
  15. # ║     Hime Shop Stock                                      ║
  16. # ║     This Script                                          ║
  17. # ║                                                          ║
  18. # ║   Script Call                                            ║
  19. # ║     random_shop(type, # of items, Quantity minimum,      ║
  20. # ║         Quantity maximum, Shop ID, Sell Only,            ║
  21. # ║          Family, Rarity, Rarity min, Rarity Max )        ║
  22. # ║                                                          ║
  23. # ║     type = 0 -> items                                    ║
  24. # ║            1 -> weapons                                  ║
  25. # ║            2 -> armours                                  ║
  26. # ║            3 -> mix of all three                         ║
  27. # ║                                                          ║
  28. # ║     # of items is how many items to have in the shop     ║
  29. # ║                                                          ║
  30. # ║     Quantity is the minimum and maximum number available ║
  31. # ║       for each item in the shop.                         ║
  32. # ║                                                          ║
  33. # ║     Shop ID is the number used to register with the shop ║
  34. # ║       manager script.                                    ║
  35. # ║                                                          ║
  36. # ║     Sell only is to specify is the player can only buy.  ║
  37. # ║                                                          ║
  38. # ║     Family is the group of items that will be included.  ║
  39. # ║                                                          ║
  40. # ║     Rarity is the odds of it being in the shop           ║
  41. # ║       values range from 1-100                            ║
  42. # ║       Follow Galv's Random Loot settings                 ║
  43. # ║                                                          ║
  44. # ║     random_shop(3, 6, 1, 3, 45, true, 1, 5, 10, 70)      ║
  45. # ║                                                          ║
  46. # ║   If the shop number 45 exists then it will pull up that ║
  47. # ║     shop and not create a new one.                       ║
  48. # ║                                                          ║
  49. # ║   Tag items in database with <random shop item>          ║
  50. # ║     then it will be included as an item that can be      ║
  51. # ║     selected for the random shop.                        ║
  52. # ║                                                          ║
  53. # ║                                                          ║
  54. # ║   Reset Shops                                            ║
  55. # ║     If you need to clear out a random shop, then you     ║
  56. # ║     can use this script command                          ║
  57. # ║         reset_shop(id)                                   ║
  58. # ║     The id will be the shop id. Be careful this will     ║
  59. # ║     also remove any shops created.                       ║
  60. # ║   If you use the wrong number, it will remove that shop. ║
  61. # ║                                                          ║
  62. # ╚══════════════════════════════════════════════════════════╝
  63. # ╔══════════════════════════════════════════════════════════╗
  64. # ║ Updates:                                                 ║
  65. # ║ 11 Jul 2023 - Initial Publish                            ║
  66. # ║ 12 Jul 2023 - Added Galv Random Loot support             ║
  67. # ║ 12 Jul 2023 - Added Resetting shops, fixed bug           ║
  68. # ║ 13 Jul 2023 - Added sell shops, fixed bug                ║
  69. # ║ 11 Nov 2023 - ReAdded random min/max                       ║
  70. # ║ 11 Nov 2023 - Altered Random to be independent functions ║
  71. # ╚══════════════════════════════════════════════════════════╝
  72. # ╔══════════════════════════════════════════════════════════╗
  73. # ║ Terms of use:                                            ║
  74. # ║ Free for all uses in RPG Maker - Except Nudity           ║
  75. # ╚══════════════════════════════════════════════════════════╝
  76.  
  77. #===============================================================================
  78.  
  79. module Random_Shop_Item_Tags
  80.   def random_item
  81.     if @random_shop_item.nil?
  82.       if @note =~ /<random shop item>/i
  83.         @random_shop_item = true
  84.       else
  85.         @random_shop_item = false
  86.       end
  87.     end
  88.     @random_shop_item
  89.   end
  90. end
  91.  
  92. #===============================================================================
  93.  
  94. class RPG::Item
  95.   include Random_Shop_Item_Tags
  96. end
  97. class RPG::Weapon
  98.   include Random_Shop_Item_Tags
  99. end
  100. class RPG::Armor
  101.   include Random_Shop_Item_Tags
  102. end
  103.  
  104. #===============================================================================
  105.  
  106. module ShopManager
  107.   def self.reset_shop(shop_id)
  108.     $game_shops[shop_id] = nil
  109.   end
  110. end
  111.  
  112. class Game_Interpreter
  113.   def random_shop(type, num, min, max, shop_id, sell, family=0, rarity=0, rmin=0, rmax=0)
  114.     # initialize local variables
  115.     goods = []
  116.     loot = []
  117.     list = []
  118.     stack = []
  119.     # Check if shop exists
  120.     shop = ShopManager.get_shop(shop_id)
  121.     if shop == nil
  122.       #--- Determine Type
  123.       if type == 0
  124.         loot = $data_items
  125.       elsif type == 1
  126.         loot = $data_weapons
  127.       elsif type == 2
  128.         loot = $data_armors
  129.       elsif type == 3
  130.         loot = $data_items + $data_weapons + $data_armors
  131.       end
  132.       # Get all qualifing items
  133.       loot.each do |itm|
  134.         next if itm.nil?
  135.         if itm.random_item
  136.           list.push(itm)
  137.         end
  138.       end
  139.       # return if list is empty
  140.       return if list.empty?
  141.       # If family selection is used
  142.       if family > 0
  143.         # Select based on family
  144.         list = list.select do |thing|
  145.           thing.loot_family == family
  146.         end
  147.       end
  148.       # return if list is empty
  149.       return if list.empty?
  150.       if rmax < rmin
  151.         rmax = rmin
  152.       end
  153.       if rarity > 0
  154.         list = list.select do |thing|
  155.           (100 - (thing.loot_rarity.to_i * 10)) <= rand(100)
  156.         end
  157.       end
  158.       if (rmin > 0) || (rmax > 0)
  159.         luck_bonus = random_loot_luck_bonus()
  160.         rchance = rand(rmax - rmin) + rmin + luck_bonus + 1
  161.         list = list.select do |thing|
  162.           thing.loot_rarity <= rchance
  163.         end
  164.       end
  165.       # return if list is empty
  166.       return if list.empty?
  167.       # Get list size
  168.       cnt = list.size
  169.       i = 0
  170.       # find whichever is larger, list or number requested
  171.       count = (cnt < num) ? cnt : num
  172.       count.times do
  173.         # iterate through numbers if list is small
  174.         if cnt < num
  175.           n = i
  176.         else
  177.           n = rand(cnt)
  178.         end
  179.         item = list[n]
  180.         while stack.include?(item) do
  181.           n = rand(cnt)
  182.           item = list[n]
  183.         end
  184.         # add item to checking list
  185.         stack.push(item)
  186.         # Get random item count
  187.         q = rand(max) + 1
  188.         @shop_stock[i] = q
  189.         itype = 0 if item.is_a?(RPG::Item)
  190.         itype = 1 if item.is_a?(RPG::Weapon)
  191.         itype = 2 if item.is_a?(RPG::Armor)
  192.         # create item for Hime's script
  193.         good = make_good([itype, item.id, 0, item.price], i)
  194.         goods.push(good)
  195.         i += 1
  196.       end
  197.       # create shop
  198.       shop = ShopManager.setup_shop(shop_id, goods, sell, :Shop)
  199.       setup_shop(shop)
  200.     end
  201.     # Goto shop
  202.     ShopManager.call_scene(shop)
  203.     Fiber.yield
  204.   end
  205.  
  206.   # Make a shop empty for recreating
  207.   def reset_shop(id)
  208.     ShopManager.reset_shop(id)
  209.   end
  210. end
  211.  
  212. #===============================================================================
  213. # END OF SCRIPT
  214. #===============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement