#=============================================================================== # # Yanfly Engine RD - Variable Controlled Discounts # Last Date Updated: 2009.06.03 # Level: Normal # # As much as I love price changer scripts and everything, it becomes a tedious # job to manually adjust the price of each individual item (and calculating the # new prices) for just one shop and then having to do it again for another. This # script adjusts the prices of everything sold in the shop by a percentage and # is controlled by a variable so you don't have to script event it each time. # #=============================================================================== # Updates: # ---------------------------------------------------------------------------- # o 2009.06.03 - Increased compatibility with KGC Limit Break. # o 2009.05.09 - Started script and finished. #=============================================================================== # Instructions #=============================================================================== # # By default, the variables are as follows: # # PERCENT_BUY = Variable 67 = Affects the percentage that will affect the price # the player will buy the item for. # PERCENT_SELL = Variable 68 = Affects the percentage that will affect the price # the player will sell the item for. # # Before processing a shop event, input the two variables into the event list # and adjust the percentage rate you wish for the player to buy/sell items at. # For normal shops, the rate should be 100 for buying and 50 for selling. # #=============================================================================== # # Compatibility # - Works With: KGC Limit Break # - Alias: Scene_Shop: update_buy_selection, update_sell_selection # - Overwrites: Scene_Shop: decide_number_input # #=============================================================================== $imported = {} if $imported == nil $imported["VariableControlledDiscounts"] = true module YE module EVENT module VARIABLE # This determines the variables used to set the price percentage rate for # buying and selling items. PERCENT_BUY = 67 PERCENT_SELL = 68 # This is the common divisor for all percentage calculations. PERCENT_DIVISOR = 100 end end end #=============================================================================== # Editting anything past this point may potentially result in causing computer # damage, incontinence, explosion of user's head, coma, death, and/or halitosis. # Therefore, edit at your own risk. #=============================================================================== #=============================================================================== # Scene Shop #=============================================================================== class Scene_Shop < Scene_Base #-------------------------------------------------------------------------- # alias update_buy_selection #-------------------------------------------------------------------------- alias update_buy_selection_vcd update_buy_selection unless $@ def update_buy_selection if Input.trigger?(Input::C) @item = @buy_window.item number = $game_party.item_number(@item) price = @item.price * $game_variables[YE::EVENT::VARIABLE::PERCENT_BUY] price /= YE::EVENT::VARIABLE::PERCENT_DIVISOR if @item == nil or price > $game_party.gold or number == 99 Sound.play_buzzer else Sound.play_decision if $imported["LimitBreak"] max = (price == 0 ? @item.number_limit : $game_party.gold / price) max = [max, @item.number_limit - number].min else max = price == 0 ? 99 : $game_party.gold / price max = [max, 99 - number].min end @buy_window.active = false @buy_window.visible = false @number_window.set(@item, max, price) @number_window.active = true @number_window.visible = true end else update_buy_selection_vcd end end #-------------------------------------------------------------------------- # alias update_sell_selection #-------------------------------------------------------------------------- alias update_sell_selection_vcd update_sell_selection unless $@ def update_sell_selection if Input.trigger?(Input::C) @item = @sell_window.item @status_window.item = @item if @item == nil or @item.price == 0 Sound.play_buzzer else price = @item.price * $game_variables[YE::EVENT::VARIABLE::PERCENT_SELL] price /= YE::EVENT::VARIABLE::PERCENT_DIVISOR Sound.play_decision max = $game_party.item_number(@item) @sell_window.active = false @sell_window.visible = false @number_window.set(@item, max, price) @number_window.active = true @number_window.visible = true @status_window.visible = true end else update_sell_selection_vcd end end #-------------------------------------------------------------------------- # Overwrite decide_number_input #-------------------------------------------------------------------------- def decide_number_input Sound.play_shop @number_window.active = false @number_window.visible = false case @command_window.index when 0 # Buy price = @item.price * $game_variables[YE::EVENT::VARIABLE::PERCENT_BUY] price /= YE::EVENT::VARIABLE::PERCENT_DIVISOR $game_party.lose_gold(@number_window.number * price) $game_party.gain_item(@item, @number_window.number) @gold_window.refresh @buy_window.refresh @status_window.refresh @buy_window.active = true @buy_window.visible = true when 1 # sell price = @item.price * $game_variables[YE::EVENT::VARIABLE::PERCENT_SELL] price /= YE::EVENT::VARIABLE::PERCENT_DIVISOR $game_party.gain_gold(@number_window.number * price) $game_party.lose_item(@item, @number_window.number) @gold_window.refresh @sell_window.refresh @status_window.refresh @sell_window.active = true @sell_window.visible = true @status_window.visible = false end end end #=============================================================================== # Window ShopBuy #=============================================================================== class Window_ShopBuy < Window_Selectable #-------------------------------------------------------------------------- # overwrite draw_item #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] number = $game_party.item_number(item) price = item.price * $game_variables[YE::EVENT::VARIABLE::PERCENT_BUY] price /= YE::EVENT::VARIABLE::PERCENT_DIVISOR if $imported["LimitBreak"] max = (price == 0 ? item.number_limit : $game_party.gold / price) max = [max, item.number_limit - number].min else max = price == 0 ? 99 : $game_party.gold / price max = [max, 99 - number].min end enabled = (price <= $game_party.gold and number < max) enabled = (price <= $game_party.gold and number < max) rect = item_rect(index) self.contents.clear_rect(rect) draw_item_name(item, rect.x, rect.y, enabled) rect.width -= 4 self.contents.draw_text(rect, price, 2) end end #=============================================================================== # # END OF FILE # #===============================================================================