#===============================================================================
#
# 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
#
#===============================================================================