Advertisement
roninator2

Random Shop Fix - Fhizban

Dec 10th, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 13.64 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Random Shop Fix                        ║  Version: 1.00     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║ Compatibility for Hime and Fhizban            ║    26 May 2023     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires:                                                          ║
  11. # ║   Script order                                                     ║
  12. # ║     Galv's Random Loot                                             ║
  13. # ║     Hime Shop Manager                                              ║
  14. # ║     Hime Shop Stock                                                ║
  15. # ║     Fhizban Random Shop                                            ║
  16. # ║     This fix                                                       ║
  17. # ║                                                                    ║
  18. # ╚════════════════════════════════════════════════════════════════════╝
  19. # ╔════════════════════════════════════════════════════════════════════╗
  20. # ║ Brief Description:                                                 ║
  21. # ║        Compatibility fix                                           ║
  22. # ╚════════════════════════════════════════════════════════════════════╝
  23. # ╔════════════════════════════════════════════════════════════════════╗
  24. # ║ Instructions:                                                      ║
  25. # ║                                                                    ║
  26. # ║   Set switch number below                                          ║
  27. # ║     Used to control if loading Hime Shop or Fhizban                ║
  28. # ║                                                                    ║
  29. # ║   Set option to show a message when the random shop                ║
  30. # ║     does not produce any items                                     ║
  31. # ║   Set message for empty shop                                       ║
  32. # ║                                                                    ║
  33. # ╚════════════════════════════════════════════════════════════════════╝
  34. # ╔════════════════════════════════════════════════════════════════════╗
  35. # ║ Updates:                                                           ║
  36. # ║ 1.00 - 26 May 2023 - Script finished                               ║
  37. # ║                                                                    ║
  38. # ╚════════════════════════════════════════════════════════════════════╝
  39. # ╔════════════════════════════════════════════════════════════════════╗
  40. # ║ Credits and Thanks:                                                ║
  41. # ║   Roninator2                                                       ║
  42. # ║                                                                    ║
  43. # ╚════════════════════════════════════════════════════════════════════╝
  44. # ╔════════════════════════════════════════════════════════════════════╗
  45. # ║ Terms of use:                                                      ║
  46. # ║  Follow the original Authors terms of use where applicable         ║
  47. # ║    - When not made by me (Roninator2)                              ║
  48. # ║  Free for all uses in RPG Maker except nudity                      ║
  49. # ║  Anyone using this script in their project before these terms      ║
  50. # ║  were changed are allowed to use this script even if it conflicts  ║
  51. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  52. # ║  No part of this code can be used with AI programs or tools        ║
  53. # ║  Credit must be given                                              ║
  54. # ╚════════════════════════════════════════════════════════════════════╝
  55.  
  56. module R2_Fhizban_Hime_Random_Shop_Fix
  57.   # Switch to activate random shop and not shop manager
  58.   Switch = 5
  59.   # show message that the shop is empty
  60.   Show_Message = false
  61.   Shop_Message = "The Shop is Empty"
  62. end
  63.  
  64. #==============================================================================
  65. # ** Game_Interpreter
  66. #==============================================================================
  67. class Game_Interpreter
  68.   def random_shop(type, rarity_min, rarity_max, price=0, amount=0, subtype=0, family=0)
  69.       $game_switches[R2_Fhizban_Hime_Random_Shop_Fix::Switch] = true
  70.    
  71.     @goods = []
  72.     @loot = []
  73.    
  74.     #--- Determine Type
  75.     if type == 0
  76.       @loot = $data_items + $data_armors + $data_weapons
  77.       subtype = 0
  78.     elsif type == 1
  79.       @loot = $data_items
  80.       @itemtype = 0
  81.       subtype = 0
  82.     elsif type == 2
  83.       @loot = $data_armors
  84.       @itemtype = 2
  85.     elsif type == 3
  86.       @loot = $data_weapons
  87.       @itemtype = 1
  88.     else
  89.       @loot = $data_items | $data_armors | $data_weapons
  90.       subtype = 0
  91.     end
  92.  
  93.     #--- Preperations
  94.     @loot.shuffle
  95.     rarity_max = rarity_min if rarity_max < rarity_min
  96.     amount = Random_Shop::DEFAULT_AMOUNT if amount < 1
  97.     subtype = 0 if subtype < 0 || subtype > 99
  98.     subtype = 0 if family < 0 || family > 99
  99.  
  100.     #--- Determine Party Luck Bonus
  101.     mem = 0
  102.     eqs = 0
  103.     luck_bonus = 0
  104.     i = 0
  105.     no_equips = $game_party.members.count * $game_party.members[0].equips.count
  106.     $game_party.members.each do |mem|
  107.       mem.equips.each do |eq|
  108.         next if eq.nil?
  109.         luck_bonus += eq.loot_lucky
  110.       end
  111.     end
  112.        
  113.     #--- Determine Rarity Chance
  114.     checked = 0
  115.     inventory = 0
  116.     itemprice = 0
  117.     duplicates = []
  118.     restart = false
  119.     continue = true
  120.     no_items = @loot.count - 1
  121.     rare_chance = rand(rarity_max - rarity_min) + rarity_min + luck_bonus + 1
  122.     random_item = rand(no_items) + 1
  123.     begin_count = rand(no_items) + 1
  124.  
  125.     #--- Determine Random Item
  126.     no_items.times do |i|
  127.       i = i + random_item
  128.       begin_count += 1 if restart
  129.       if i > no_items
  130.         i = i - i + rand(no_items) + 1
  131.         restart = true
  132.       end
  133.    
  134.       #--- Get Random Item
  135.       if family != 0 && @loot[i].loot_family != family
  136.         continue = false
  137.       end
  138.       if subtype != 0 && type == 2
  139.         if @loot[i].atype_id == subtype
  140.           continue = false
  141.         end
  142.       end
  143.       if subtype != 0 && type == 3
  144.         if @loot[i].wtype_id == subtype
  145.           continue = false
  146.         end
  147.       end
  148.  
  149.       #--- Setup Shop Inventory
  150.       if continue
  151.         next if @loot[i].nil?
  152.         next if @loot[i].loot_noshop
  153.         if @loot[i].loot_level_max >= $game_party.leader.level &&
  154.           @loot[i].loot_level_min <= $game_party.leader.level
  155.           if @loot[i].loot_rarity <= rare_chance
  156.             if checked < no_items && inventory < amount
  157.               if !duplicates.include?(@loot[i].id)
  158.                 #--- Recheck Item Type
  159.                 if @loot[i].is_a?(RPG::Item)
  160.                   @itemtype = 0
  161.                 elsif @loot[i].is_a?(RPG::Weapon)
  162.                   @itemtype = 1
  163.                 elsif @loot[i].is_a?(RPG::Armor)
  164.                   @itemtype = 2
  165.                 end
  166.                
  167.                 #--- Check Item Price
  168.                 if price != 0
  169.                   itemprice = @loot[i].price + (@loot[i].price * (price/100))
  170.                 end
  171.                 if price <= 0
  172.                   @goods.push([@itemtype, @loot[i].id, 0])
  173.                 else
  174.                   @goods.push([@itemtype, @loot[i].id, 1, itemprice])
  175.                 end
  176.                 duplicates.push(@loot[i].id)
  177.                 inventory += 1
  178.               end
  179.             else
  180.               break
  181.             end
  182.           end
  183.         end
  184.       end
  185.       checked += 1
  186.     end
  187.     if @goods.size == 0 && R2_Fhizban_Hime_Random_Shop_Fix::Show_Message == true
  188.       $game_message.add(R2_Fhizban_Hime_Random_Shop_Fix::Shop_Message)
  189.     end
  190.  
  191.     if @goods.size > 0
  192.       @goods.shuffle
  193.       SceneManager.call(Scene_Shop)
  194.       SceneManager.scene.prepare_original(@goods, true)
  195.     end
  196.  
  197.   end
  198. end # Game_Interpreter
  199.  
  200. #==============================================================================
  201. # ** Window_ShopBuy
  202. #==============================================================================
  203.  
  204. class Window_ShopBuy < Window_Selectable
  205.   #--------------------------------------------------------------------------
  206.   # * Display in Enabled State?
  207.   #--------------------------------------------------------------------------
  208.   def enable?(item)
  209.     if $game_switches[R2_Fhizban_Hime_Random_Shop_Fix::Switch] == true
  210.       item && price(item) <= @money && !$game_party.item_max?(item)
  211.     else
  212.       return false unless @goods[item].enable?
  213.       th_shop_manager_enable?(item)
  214.     end
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # * Create Item List
  218.   #--------------------------------------------------------------------------
  219.   def make_item_list
  220.     if $game_switches[R2_Fhizban_Hime_Random_Shop_Fix::Switch] == true
  221.       @data = []
  222.       @price = {}
  223.       @shop_goods.each do |goods|
  224.         case goods[0]
  225.         when 0;  item = $data_items[goods[1]]
  226.         when 1;  item = $data_weapons[goods[1]]
  227.         when 2;  item = $data_armors[goods[1]]
  228.         end
  229.         if item
  230.           @data.push(item)
  231.           @price[item] = goods[2] == 0 ? item.price : goods[3]
  232.         end
  233.       end
  234.     else
  235.       @data = []
  236.       @goods = {}
  237.       @price = {}
  238.       @shop_goods.each do |shopGood|
  239.         next unless include?(shopGood)
  240.         item = shopGood.item
  241.         @data.push(item)
  242.         @goods[item] = shopGood
  243.         @price[item] = shopGood.price
  244.       end
  245.     end
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # * Draw Item
  249.   #--------------------------------------------------------------------------
  250.   def draw_item(index)
  251.     if $game_switches[R2_Fhizban_Hime_Random_Shop_Fix::Switch] == true
  252.       item = @data[index]
  253.       rect = item_rect(index)
  254.       draw_item_name(item, rect.x, rect.y, enable?(item))
  255.       rect.width -= 4
  256.       draw_text(rect, price(item), 2)
  257.     else
  258.       th_shop_stock_draw_item(index)
  259.       rect = item_rect(index)
  260.       item = @data[index]
  261.       shopGood = @goods[item]
  262.       draw_text(rect, shopGood.stock, 1) unless shopGood.unlimited?
  263.     end
  264.   end
  265. end
  266.  
  267. #==============================================================================
  268. # ** Scene_Shop
  269. #==============================================================================
  270.  
  271. class Scene_Shop < Scene_MenuBase
  272.   #--------------------------------------------------------------------------
  273.   # Adjusted. The scene now takes a Game_Shop object
  274.   #--------------------------------------------------------------------------
  275.   def prepare_original(goods, purchase_only)
  276.     @goods = goods
  277.     @purchase_only = purchase_only
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # * Create Command Window
  281.   #--------------------------------------------------------------------------
  282.   alias r2_create_command_compat_fix  create_command_window
  283.   def create_command_window
  284.     r2_create_command_compat_fix
  285.     @command_window.set_handler(:cancel, method(:close_compat))
  286.   end
  287.   def close_compat
  288.     $game_switches[R2_Fhizban_Hime_Random_Shop_Fix::Switch] = false
  289.     return_scene
  290.   end
  291. end
  292.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement