IceDragon200

IEX - Scene Shop Exchange Rates

Nov 20th, 2011
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 20.72 KB | None | 0 0
  1. #==============================================================================#
  2. # // IEX - Scene Shop Exchange Rates
  3. #==============================================================================#
  4. # // Created By    : IceDragon
  5. # // Date Created  : 11/20/2011
  6. # // Date Modified : 11/20/2011
  7. # // Version       : 1.1
  8. #==============================================================================#
  9. # // You can change the buy rates at anytime in the game with
  10. # // these script calls. NOTE: The Default buyrate is 100
  11. # //
  12. # //   set_item_buyrate( item_id, buyrate )
  13. # //   set_weapon_buyrate( weapon_id, buyrate )
  14. # //   set_armor_buyrate( armor_id, buyrate )
  15. # //
  16. # // You can retrive them with:
  17. # //   get_item_buyrate()
  18. # //   get_weapon_buyrate()
  19. # //   get_armor_buyrate()
  20. # //
  21. # // You can change the sell rates at anytime in the game with
  22. # // these script calls. NOTE: The Default sellrate is SELL_RATE
  23. # //
  24. # //   set_item_sellrate( item_id, sellrate )
  25. # //   set_weapon_sellrate( weapon_id, sellrate )
  26. # //   set_armor_sellrate( armor_id, sellrate )
  27. # //
  28. # // You can retrive them with:
  29. # //   get_item_sellrate()
  30. # //   get_weapon_sellrate()
  31. # //   get_armor_sellrate()
  32. # //
  33. #==============================================================================#
  34. # // Notetags
  35. #==============================================================================#
  36. # // Item / Weapon / Armor
  37. #==============================================================================#
  38. # // <buyrate: n>
  39. # //   n Sets the buy rate for that particular item, default is 100
  40. # //
  41. # // <sellrate: n>
  42. # //   n Sets the sell rate for that particular item, default is SELL_RATE
  43. # //
  44. #==============================================================================#
  45. ($imported ||= [])["IEX-SceneShop_SellRates"] = true
  46. #==============================================================================#
  47. # ** IEX::SCENE_SHOP
  48. #==============================================================================#
  49. module IEX ; end
  50. module IEX::SCENE_SHOP
  51.  
  52.   # // Rate modifiers
  53.   # // 100       - No Mod
  54.   # // Below 100 - Decreased Exchange Rate
  55.   # // Above 100 - Increased Exchange Rate
  56.   BUY_MOD_VARIABLE  = 180
  57.   SELL_MOD_VARIABLE = 181
  58.  
  59.   # // You can create a custom buy rates for items here.
  60.   def self.buy_rate( item )
  61.     objrate = 100
  62.     case item
  63.     when RPG::Item # << I changed this, usable item affects both skills, and items XD
  64.       objrate = $game_system.item_buy_rates[item.id] || 100   # // If nil default to 50
  65.     when RPG::Weapon
  66.       objrate = $game_system.weapon_buy_rates[item.id] || 100 # // If nil default to 50
  67.     when RPG::Armor        
  68.       objrate = $game_system.armor_buy_rates[item.id] || 100  # // If nil default to 50
  69.     when RPG::Skill # Currently does nothing  
  70.     end  
  71.     return Integer( objrate )
  72.   end
  73.  
  74.   # // You can create a custom resale rate for items here.
  75.   def self.sell_rate( item )
  76.     objrate = SELL_RATE
  77.     case item
  78.     when RPG::Item # << I changed this, usable item affects both skills, and items XD
  79.       objrate = $game_system.item_sell_rates[item.id] || SELL_RATE   # // If nil default to SELL_RATE
  80.     when RPG::Weapon
  81.       objrate = $game_system.weapon_sell_rates[item.id] || SELL_RATE # // If nil default to SELL_RATE
  82.     when RPG::Armor        
  83.       objrate = $game_system.armor_sell_rates[item.id] || SELL_RATE  # // If nil default to SELL_RATE
  84.     when RPG::Skill # Currently does nothing  
  85.     end  
  86.     return Integer( objrate )
  87.   end
  88.  
  89.   def self.calc_buy_price( item )
  90.     return Integer( item.price * ( buy_rate( item ) * $game_variables[BUY_MOD_VARIABLE] / 100.0 ) / 100.0 )
  91.   end
  92.  
  93.   def self.calc_sell_price( item )
  94.     return Integer( item.price * ( sell_rate( item ) * $game_variables[SELL_MOD_VARIABLE] / 100.0 ) / 100.0 )
  95.   end
  96.  
  97. end
  98.  
  99. #==============================================================================#
  100. # ** RPG::BaseItem
  101. #==============================================================================#
  102. class RPG::BaseItem
  103.  
  104.   #--------------------------------------------------------------------------#
  105.   # * Public Instance Variable(s)
  106.   #--------------------------------------------------------------------------#
  107.   attr_writer :buyrate
  108.   attr_writer :sellrate
  109.  
  110.   #--------------------------------------------------------------------------#
  111.   # * new-method :buyrate
  112.   #--------------------------------------------------------------------------#  
  113.   def buyrate()
  114.     @buyrate ||= self.note =~ /<(?:BUY_RATE|BUY RATE|BUYRATE):[ ](\d+)>/i ? $1.to_i : 100
  115.     return @buyrate
  116.   end
  117.  
  118.   #--------------------------------------------------------------------------#
  119.   # * new-method :sellrate
  120.   #--------------------------------------------------------------------------#  
  121.   def sellrate()
  122.     @sellrate ||= self.note =~ /<(?:SELL_RATE|SELL RATE|SELLRATE):[ ](\d+)>/i ? $1.to_i : IEX::SCENE_SHOP::SELL_RATE
  123.     return @sellrate
  124.   end
  125.  
  126. end
  127.  
  128. #==============================================================================#
  129. # ** Game_System
  130. #==============================================================================#
  131. class Game_System
  132.  
  133.   #--------------------------------------------------------------------------#
  134.   # * alias-method :initialize
  135.   #--------------------------------------------------------------------------#  
  136.   alias :iex_sellrate_gmsys_initialize :initialize unless $@
  137.   def initialize( *args, &block )
  138.     iex_sellrate_gmsys_initialize( *args, &block )
  139.     self.item_buy_rates()
  140.     self.weapon_buy_rates()
  141.     self.armor_buy_rates()
  142.     self.item_sell_rates()
  143.     self.weapon_sell_rates()
  144.     self.armor_sell_rates()
  145.   end
  146.  
  147.   #--------------------------------------------------------------------------#
  148.   # * new-method :item_buy_rates
  149.   #--------------------------------------------------------------------------#  
  150.   def item_buy_rates()
  151.     if @item_buy_rates.nil?()
  152.       @item_buy_rates = {}
  153.       $data_items.each { |w|
  154.         next if w.nil?() ; @item_buy_rates[w.id] = w.buyrate();
  155.       }  
  156.     end  
  157.     return @item_buy_rates
  158.   end
  159.  
  160.   #--------------------------------------------------------------------------#
  161.   # * new-method :weapon_buy_rates
  162.   #--------------------------------------------------------------------------#  
  163.   def weapon_buy_rates()
  164.     if @weapon_buy_rates.nil?()
  165.       @weapon_buy_rates = {}
  166.       $data_weapons.each { |w|
  167.         next if w.nil?() ; @weapon_buy_rates[w.id] = w.buyrate();
  168.       }  
  169.     end  
  170.     return @weapon_buy_rates
  171.   end
  172.  
  173.   #--------------------------------------------------------------------------#
  174.   # * new-method :armor_buy_rates
  175.   #--------------------------------------------------------------------------#  
  176.   def armor_buy_rates()
  177.     if @armor_buy_rates.nil?()
  178.       @armor_buy_rates = {}
  179.       $data_armors.each { |w|
  180.         next if w.nil?() ; @armor_buy_rates[w.id] = w.buyrate();
  181.       }  
  182.     end  
  183.     return @armor_buy_rates
  184.   end
  185.  
  186.   #--------------------------------------------------------------------------#
  187.   # * new-method :item_sell_rates
  188.   #--------------------------------------------------------------------------#  
  189.   def item_sell_rates()
  190.     if @item_sell_rates.nil?()
  191.       @item_sell_rates = {}
  192.       $data_items.each { |w|
  193.         next if w.nil?() ; @item_sell_rates[w.id] = w.sellrate();
  194.       }  
  195.     end  
  196.     return @item_sell_rates
  197.   end
  198.  
  199.   #--------------------------------------------------------------------------#
  200.   # * new-method :weapon_sell_rates
  201.   #--------------------------------------------------------------------------#  
  202.   def weapon_sell_rates()
  203.     if @weapon_sell_rates.nil?()
  204.       @weapon_sell_rates = {}
  205.       $data_weapons.each { |w|
  206.         next if w.nil?() ; @weapon_sell_rates[w.id] = w.sellrate();
  207.       }  
  208.     end  
  209.     return @weapon_sell_rates
  210.   end
  211.  
  212.   #--------------------------------------------------------------------------#
  213.   # * new-method :armor_sell_rates
  214.   #--------------------------------------------------------------------------#  
  215.   def armor_sell_rates()
  216.     if @armor_sell_rates.nil?()
  217.       @armor_sell_rates = {}
  218.       $data_armors.each { |w|
  219.         next if w.nil?() ; @armor_sell_rates[w.id] = w.sellrate();
  220.       }  
  221.     end  
  222.     return @armor_sell_rates
  223.   end
  224.  
  225. end
  226.  
  227. #==============================================================================#
  228. # ** Game_Interpreter
  229. #==============================================================================#
  230. class Game_Interpreter
  231.  
  232.   #--------------------------------------------------------------------------#
  233.   # * new-method :set_item_buyrate
  234.   #--------------------------------------------------------------------------#  
  235.   def set_item_buyrate( item_id, buyrate )
  236.     $game_system.item_buy_rates[item_id] = buyrate
  237.   end
  238.  
  239.   #--------------------------------------------------------------------------#
  240.   # * new-method :set_weapon_buyrate
  241.   #--------------------------------------------------------------------------#  
  242.   def set_weapon_buyrate( weapon_id, buyrate )
  243.     $game_system.weapon_buy_rates[weapon_id] = buyrate
  244.   end
  245.  
  246.   #--------------------------------------------------------------------------#
  247.   # * new-method :set_armor_buyrate
  248.   #--------------------------------------------------------------------------#  
  249.   def set_armor_buyrate( armor_id, buyrate )
  250.     $game_system.armor_buy_rates[armor_id] = buyrate
  251.   end
  252.  
  253.   #--------------------------------------------------------------------------#
  254.   # * new-method :get_item_buyrate
  255.   #--------------------------------------------------------------------------#  
  256.   def get_item_buyrate( item_id )
  257.     return $game_system.item_buy_rates[item_id]
  258.   end
  259.  
  260.   #--------------------------------------------------------------------------#
  261.   # * new-method :get_weapon_buyrate
  262.   #--------------------------------------------------------------------------#  
  263.   def get_weapon_buyrate( weapon_id )
  264.     return $game_system.weapon_buy_rates[weapon_id]
  265.   end
  266.  
  267.   #--------------------------------------------------------------------------#
  268.   # * new-method :get_armor_buyrate
  269.   #--------------------------------------------------------------------------#  
  270.   def get_armor_buyrate( armor_id )
  271.     return $game_system.armor_buy_rates[armor_id]
  272.   end
  273.  
  274.   #--------------------------------------------------------------------------#
  275.   # * new-method :set_item_sellrate
  276.   #--------------------------------------------------------------------------#  
  277.   def set_item_sellrate( item_id, sellrate )
  278.     $game_system.item_sell_rates[item_id] = sellrate
  279.   end
  280.  
  281.   #--------------------------------------------------------------------------#
  282.   # * new-method :set_weapon_sellrate
  283.   #--------------------------------------------------------------------------#  
  284.   def set_weapon_sellrate( weapon_id, sellrate )
  285.     $game_system.weapon_sell_rates[weapon_id] = sellrate
  286.   end
  287.  
  288.   #--------------------------------------------------------------------------#
  289.   # * new-method :set_armor_sellrate
  290.   #--------------------------------------------------------------------------#  
  291.   def set_armor_sellrate( armor_id, sellrate )
  292.     $game_system.armor_sell_rates[armor_id] = sellrate
  293.   end
  294.  
  295.   #--------------------------------------------------------------------------#
  296.   # * new-method :get_item_sellrate
  297.   #--------------------------------------------------------------------------#  
  298.   def get_item_sellrate( item_id )
  299.     return $game_system.item_sell_rates[item_id]
  300.   end
  301.  
  302.   #--------------------------------------------------------------------------#
  303.   # * new-method :get_weapon_sellrate
  304.   #--------------------------------------------------------------------------#  
  305.   def get_weapon_sellrate( weapon_id )
  306.     return $game_system.weapon_sell_rates[weapon_id]
  307.   end
  308.  
  309.   #--------------------------------------------------------------------------#
  310.   # * new-method :get_armor_sellrate
  311.   #--------------------------------------------------------------------------#  
  312.   def get_armor_sellrate( armor_id )
  313.     return $game_system.armor_sell_rates[armor_id]
  314.   end
  315.  
  316. end
  317.  
  318. #==============================================================================#
  319. # ** IEX_ShopWindow_Item
  320. #==============================================================================#
  321. class IEX_ShopWindow_Item
  322.  
  323.   #--------------------------------------------------------------------------#
  324.   # * overwrite-method :draw_item
  325.   #--------------------------------------------------------------------------#  
  326.   def draw_item( index )
  327.     item = @data[index]
  328.     number = $game_party.item_number( item )
  329.     #enabled = (item.price <= $game_party.gold and number < IEX::SCENE_SHOP::MAX_BUY_ITEMS)
  330.     rect = item_rect( index )
  331.     self.contents.clear_rect( rect )
  332.     draw_item_name( item, rect.x, rect.y )#, enabled)
  333.     rect.width -= 4
  334.     def_size = self.contents.font.size
  335.     self.contents.font.size = IEX::SCENE_SHOP::CURRENCY_FONT_SIZE
  336.     case IEX::SCENE_SHOP::SHOP_WINDOW_MODE
  337.     when 0
  338.     when 1
  339.       draw_icon(IEX::SCENE_SHOP::SHOP_ICONS[:have_icon], rect.x + (rect.width - 24),rect.y)
  340.       self.contents.draw_text(rect.x - 24, rect.y, rect.width, rect.height, number, 2)
  341.       rect.width -= 128
  342.     end  
  343.     price = IEX::SCENE_SHOP.calc_sell_price( item )
  344.     if price <= 0
  345.       self.contents.draw_text(rect.x - 24, rect.y, rect.width, rect.height, IEX::SCENE_SHOP::PRICE_0_TEXT , 2)
  346.     else
  347.       draw_currency_value( price, rect.x - 24, rect.y, rect.width )
  348.       #self.contents.draw_text(rect.x - 24, rect.y, rect.width, rect.height, item.price, 2)
  349.     end  
  350.     self.contents.font.size = def_size
  351.     draw_icon(IEX::SCENE_SHOP::SHOP_ICONS[:gold_icon], rect.x + (rect.width - 24),rect.y)
  352.   end
  353.  
  354. end  
  355.  
  356. #==============================================================================#
  357. # ** IEX_Window_CurrentItems
  358. #==============================================================================#
  359. class IEX_Window_CurrentItems
  360.  
  361.   #--------------------------------------------------------------------------#
  362.   # * overwrite-method :enable?
  363.   #--------------------------------------------------------------------------#  
  364.   def enable?(item)
  365.     return (IEX::SCENE_SHOP.calc_sell_price( item ) > 0)
  366.   end
  367.  
  368. end
  369.  
  370. #==============================================================================#
  371. # ** IEX_Window_ShopBuy
  372. #==============================================================================#
  373. class IEX_Window_ShopBuy
  374.  
  375.   #--------------------------------------------------------------------------#
  376.   # * overwrite-method :draw_item
  377.   #--------------------------------------------------------------------------#  
  378.   def draw_item( index )
  379.     item = @data[index]
  380.     number = $game_party.item_number( item )
  381.     prc = IEX::SCENE_SHOP.calc_buy_price( item )
  382.     enabled = (prc <= $game_party.gold and number < IEX::SCENE_SHOP::MAX_BUY_ITEMS)
  383.     rect = item_rect( index )
  384.     self.contents.clear_rect( rect )
  385.     draw_item_name( item, rect.x, rect.y, enabled )
  386.     rect.width -= 4
  387.     def_size = self.contents.font.size
  388.     self.contents.font.size = IEX::SCENE_SHOP::CURRENCY_FONT_SIZE
  389.     case IEX::SCENE_SHOP::SHOP_WINDOW_MODE
  390.     when 0
  391.     when 1
  392.       draw_icon(IEX::SCENE_SHOP::SHOP_ICONS[:have_icon], rect.x + (rect.width - 24),rect.y)
  393.       self.contents.draw_text(rect.x - 24, rect.y, rect.width, rect.height, number, 2)
  394.       rect.width -= 128
  395.     end  
  396.     if prc <= 0
  397.       self.contents.draw_text(rect.x - 24, rect.y, rect.width, rect.height, IEX::SCENE_SHOP::PRICE_0_TEXT , 2)
  398.     else  
  399.       draw_currency_value(prc, rect.x - 24, rect.y, rect.width)
  400.       #self.contents.draw_text(rect.x - 24, rect.y, rect.width, rect.height, item.price, 2)
  401.     end  
  402.     self.contents.font.size = def_size
  403.     draw_icon(IEX::SCENE_SHOP::SHOP_ICONS[:gold_icon], rect.x + (rect.width - 24),rect.y)
  404.   end  
  405.  
  406. end  
  407.  
  408. #==============================================================================#
  409. # ** Scene_Title
  410. #==============================================================================#
  411. class Scene_Title
  412.  
  413.   #--------------------------------------------------------------------------#
  414.   # * alias-method :create_game_objects
  415.   #--------------------------------------------------------------------------#  
  416.   alias :iex_sellrate_scntitle_cgo :create_game_objects unless $@
  417.   def create_game_objects( *args, &block )
  418.     iex_sellrate_scntitle_cgo( *args, &block )
  419.     $game_variables[IEX::SCENE_SHOP::BUY_MOD_VARIABLE] = 100
  420.     $game_variables[IEX::SCENE_SHOP::SELL_MOD_VARIABLE] = 100
  421.   end
  422.  
  423. end
  424.  
  425. #==============================================================================#
  426. # ** Scene_Shop
  427. #==============================================================================#
  428. class Scene_Shop
  429.  
  430.   #--------------------------------------------------------------------------#
  431.   # * overwrite-method :update_buy_selection
  432.   #--------------------------------------------------------------------------#  
  433.   def update_buy_selection()
  434.     @status_window.item = @buy_window.item
  435.     if Input.trigger?(Input::B)
  436.       Sound.play_cancel
  437.       @command_window.active = true
  438.       @buy_dummy_window.visible = true if @buy_dummy_window != nil
  439.       @buy_window.active = false
  440.       @buy_window.close
  441.       @status_window.close
  442.       close_icon_strip
  443.       series_update
  444.       @buy_window.visible = false
  445.       @status_window.visible = false
  446.       @status_window.item = nil
  447.       @help_window.set_text("")
  448.       return
  449.     end
  450.     if Input.trigger?(Input::C)
  451.       @item = @buy_window.item
  452.       number = $game_party.item_number(@item)
  453.       item_lim = IEX::SCENE_SHOP::MAX_BUY_ITEMS
  454.       if @item == nil or IEX::SCENE_SHOP.calc_buy_price( @item ) > $game_party.gold or number == item_lim
  455.         Sound.play_buzzer
  456.       else
  457.         Sound.play_decision
  458.         prc = IEX::SCENE_SHOP.calc_buy_price( @item )
  459.         max = prc == 0 ? item_lim : $game_party.gold / prc
  460.         max = [max, item_lim - number].min
  461.         @buy_window.active = false
  462.         @buy_window.close
  463.         @buy_window.visible = false
  464.         @number_window.set(@item, max, @item.price)
  465.         @number_window.active = true
  466.         @number_window.visible = true
  467.       end
  468.     end
  469.   end
  470.  
  471.   #--------------------------------------------------------------------------#
  472.   # * overwrite-method :update_sell_selection
  473.   #--------------------------------------------------------------------------#  
  474.   def update_sell_selection()
  475.     if Input.trigger?(Input::B)
  476.       Sound.play_cancel
  477.       @command_window.active = true
  478.       @buy_dummy_window.visible = true if @buy_dummy_window != nil
  479.       @sell_window.active = false
  480.       @sell_window.close #visible = false
  481.       @status_window.item = nil
  482.       @help_window.set_text("")
  483.     elsif Input.trigger?(Input::C)
  484.       @item = @sell_window.item
  485.       @status_window.item = @item
  486.       if @item == nil or @item.price == 0
  487.         Sound.play_buzzer
  488.       else
  489.         Sound.play_decision
  490.         max = $game_party.item_number(@item)
  491.         @sell_window.active = false
  492.         @sell_window.close #visible = false
  493.         open_icon_strip()
  494.         prc = IEX::SCENE_SHOP.calc_sell_price( @item )
  495.         @number_window.set(@item, max, prc)
  496.         @number_window.active = true
  497.         @number_window.visible = true
  498.         @status_window.visible = true
  499.         @status_window.openness = 0
  500.         @status_window.open
  501.       end
  502.     end
  503.   end
  504.  
  505.   #--------------------------------------------------------------------------#
  506.   # * overwrite-method :decide_number_input
  507.   #--------------------------------------------------------------------------#  
  508.   def decide_number_input()
  509.     Sound.play_shop()
  510.     @number_window.active = false
  511.     @number_window.visible = false
  512.     case @command_window.index
  513.     when 0  # Buy
  514.       prc = IEX::SCENE_SHOP.calc_buy_price( @item )
  515.       $game_party.lose_gold(@number_window.number * prc)
  516.       $game_party.gain_item(@item, @number_window.number)
  517.       @gold_window.refresh
  518.       @buy_window.refresh
  519.       @status_window.refresh
  520.       @buy_window.active = true
  521.       @buy_window.visible = true
  522.       @buy_window.open
  523.     when 1  # sell
  524.       prc = IEX::SCENE_SHOP.calc_sell_price( @item )
  525.       $game_party.gain_gold(@number_window.number * prc)
  526.       $game_party.lose_item(@item, @number_window.number)
  527.       @gold_window.refresh
  528.       @sell_window.refresh
  529.       @status_window.refresh
  530.       @sell_window.active = true
  531.       @sell_window.visible = true
  532.       @status_window.visible = false
  533.       @sell_window.open
  534.     end
  535.     for win in @buy_windows.values
  536.       next if win == nil
  537.       win.refresh
  538.     end
  539.   end
  540.  
  541. end
  542.  
  543. #=*==========================================================================*=#
  544. # ** END OF FILE
  545. #=*==========================================================================*=#
  546.  
Advertisement
Add Comment
Please, Sign In to add comment