#============================================================================
# Shop Taxes V1.6 (VXA version)
# By Emerald
#----------------------------------------------------------------------------
# Originally made by Falcon for RMXP
# Edited by Emerald to fit the RMVX and now also RMVX Ace
# You're free to use the script for any game, as long as you give credits
#----------------------------------------------------------------------------
# Version History
# 0.5 -> Script ported to RMVX Ace with minor edits to avoid errors
# 1.0 -> Further edits due to problems with percentage taxes
# Added possibility to easily configure x/y position of tax information
# and a value to configure if it will even be shown at all.
# 1.5 -> Again, further edits due to slight problems. But aside from that,
# you can use <tax key item> again. Also added possibility to create
# items which alter taxes. DRASTICALLY changed Instructions, be sure to
# read it thoroughly.
# 1.6 -> Added Sell taxes and item Sell Tax changes.
#----------------------------------------------------------------------------
# With this script, you can almost fully control prices for VX Ace. You can
# normally set prices and prices unique per shop, and this script adds the
# possibility to make taxes. With these taxes, you can easily change prices of
# all items in a shop, either higher or lower.
#
# Instructions:
#
# Just as always, put this script between ▼ Materials and ▼ Main. If the
# information about the taxes is not shown correctly in shops, you can change
# it below.
#
#
# In order to add taxes, use the call script method within an event. Use
# the following codes codes:
#
# $game_system.tax.percent = x
# Where x > 100 results in a tax with x% the normal price
# Where x < 100 results in a discount with x% the normal price
#
# $game_systeme.tax.direct = y
# Where y > 0 results in a tax which adds y to every price
# Where y < 0 results in a discount which subtracts y to every price
#
# WARNING
# For n = the price of an item,
# If n - y equals 0, the item becomes free
# If n - y < 0, the item becomes free AND you GET money (why doesn't that happen
# in real life)
# If x = a negative value then you'll GET money (x% the normal price)
#
# ALWAYS!!, unless you're SURE the player can't have any items which alter taxes,
# add $game_system.tax.perbon to percentage taxes and $game_system.tax.dirbon to
# direct taxes. Else, the changes of the items ARE NOT APLIED!!
# END WARNING
#
# $game_system.selltax.percent = x
# $game_system.selltax.direct = y
# $game_system.selltax.perbon = x
# $game_system.selltax.dirbon = y
#
# Exact same story as above, only these are hidden and for items being sold.
#
#
# <tax key item>
# Use the above tag if you don't want that the price of that item can be changed
# by taxes. Useful for items which the player may not buy/sell.
#
#
# <tax +/-x>
# Use the above tag to make items which will alter direct taxes. Use + to make
# it higher, - to make it lower. Enter a value for x.
#
# <tax +/-x%>
# Use the above tag to make items whcih will alter percentage taxes. Use + to
# make it higher, - to make it lower. WARNING!! The value you enter for x will
# be ADDED or SUBSTRACTED of the current tax.percent!!
# Examples:
# $game_system.tax.percent = 150 & an item with <tax +20%> will result in a tax
# of 170%.
#
# $game_system.tax.percent = 100 (/no value set) & an item with <tax -42%> will
# result in a tax of 58%.
#
# NOTE that if the player gets any items with these tags, the amount he/she has
# of the item determines how many times the taxes will be altered! Two of the
# same items in Example 1 will result in a tax of 190% instead of 170%.
# Also, if the player gets any items with these tags, the changes to taxes will
# be stored in $game_system.tax.perbon and $game_system.tax.dirbon for
# percentage and direct taxes respectively. Always add these variable to
# $game_system.tax.percent and $game_system.tax.direct respectively if changes
# to these two are made. Don't change perbon and dirbon as they only handle the
# changes made by items.
#
# <selltax +/-x>
# Exact same effect as <tax...> but this one changes the prices of sold items.
#
# <selltax +/-x%>
# Same story as above.
#
# Use $game_system.selltax.perbon and $game_system.selltax.perbon for the above
# two tags.
#----------------------------------------------------------------------------
# Credits to:
# Falcon for the original script
# Blizard for the idea that triggered version 2.0 (Falcon's Credits)
# You, because you ate a cookie in your life =D (I hope... If not, I'll send
# Bennett to make you eat a cookie with his manliness...)
#----------------------------------------------------------------------------
# This script should be compatible with all shop systems. If not, alert me.
#============================================================================
#
# CONFIGURATIONS
#
#============================================================================
class Window_ShopStatus < Window_Base
TAX = "Tax" # Word which stands before percent tax IF the percent tax > 100
DISCOUNT = "价格" # Word which stands before percent tax IF the percent tax < 100
TAX_DIRECT = "Tax (A)" # Word which stands before direct tax IF the direct tax > 0
DISCOUNT_DIRECT = "Discount (A)" # Word which stands before direct tax IF the direct tax < 0
TAX_INFORMATION = true # True = show information about taxes in shops, false = well... the opposite
TAX_X = 4 # x position of the information of the taxes. Usually, text has an x-value of 4
TAX_Y = 216 # y position of the information. Default = 216. Not that text starts on y = 0 and every line has a height of y = 24
end
module EME
module REGEXP
module ITEM
# Only edit things past here if you know what you're doing
KEY_ITEM_TAG = /<tax[\s_]?key[\s_]?item>/i # <tax key item>
ITEM_TAX_PER = /<tax[\s_]?[ ]*([\+\-]\d+)([%%])>/i # <tax +/-x%>
ITEM_TAX_DIR = /<tax[\s_]?[ ]*([\+\-]\d+)>/i # <tax +/-x>
ITEM_SELLTAX_PER = /<selltax[\s_]?[ ]*([\+\-]\d+)([%%])>/i # <selltax +/-x%>
ITEM_SELLTAX_DIR = /<selltax[\s_]?[ ]*([\+\-]\d+)>/i # <selltax +/-x>
end
end
end
#============================================================================
#
# Game_System
# Defines all needed variables for taxes.
#============================================================================
class Game_System::Tax
attr_accessor :percent
attr_accessor :perbon
attr_accessor :direct
attr_accessor :dirbon
def initialize
@percent = 100
@perbon = 0
@direct = 0
@dirbon = 0
end
end
class Game_System::SellTax
attr_accessor :percent
attr_accessor :perbon
attr_accessor :direct
attr_accessor :dirbon
def initialize
@percent = 100
@perbon = 0
@direct = 0
@dirbon = 0
end
end
class Game_System
attr_reader :tax
attr_reader :selltax
alias eme_tax_initialize initialize
def initialize
eme_tax_initialize
@tax = Tax.new
@selltax = SellTax.new
end
end
#============================================================================
#
# Window_ShopBuy
# Handles effects of taxes and <tax key item>.
#============================================================================
class Window_ShopBuy
def price(item)
@price[item]
notetag_check(item)
if @key_item
@new_price = @price[item]
elsif $game_system.tax.percent != 100 or $game_system.tax.direct != 0
@new_price = @price[item] * $game_system.tax.percent / 100 + $game_system.tax.direct
else
@new_price = @price[item]
end
end
def notetag_check(item)
@key_item = false
item.note.split(/[\r\n]+/).each { |line|
case line
when EME::REGEXP::ITEM::KEY_ITEM_TAG
@key_item = true
end
}
end
end
class Scene_Shop
def selling_price
the_selling_price = @item.price / 2
notetag_check(@item)
unless @key_item = true
if $game_system.selltax.percent != 100
the_selling_price *= $game_system.selltax.percent / 100
end
if $game_system.selltax.direct != 0
the_selling_price += $game_system.selltax.direct
end
end
return the_selling_price
end
def notetag_check(item)
@key_item = false
item.note.split(/[\r\n]+/).each { |line|
case line
when EME::REGEXP::ITEM::KEY_ITEM_TAG
@key_item = true
end
}
end
end
#============================================================================
#
# Game_Party
# Handles items which alter taxes.
#============================================================================
class Game_Party
alias eme_tax_gain_item gain_item
def gain_item(item, amount, include_equip = false)
eme_tax_gain_item(item, amount, include_equip = false)
if amount > 0 and item != nil
item.note.split(/[\r\n]+/).each { |line|
case line
when EME::REGEXP::ITEM::ITEM_TAX_PER
$game_system.tax.percent += $1.to_i * amount
$game_system.tax.perbon += $1.to_i * amount
when EME::REGEXP::ITEM::ITEM_TAX_DIR
$game_system.tax.direct += $1.to_i * amount
$game_system.tax.dirbon += $1.to_i * amount
when EME::REGEXP::ITEM::ITEM_SELLTAX_PER
$game_system.selltax.percent += $1.to_i * amount
$game_system.selltax.perbon += $1.to_i * amount
when EME::REGEXP::ITEM::ITEM_SELLTAX_PER
$game_system.selltax.percent += $1.to_i * amount
$game_system.selltax.perbon += $1.to_i * amount
end
}
elsif item != nil
item.note.split(/[\r\n]+/).each { |line|
case line
when EME::REGEXP::ITEM::ITEM_TAX_PER
$game_system.tax.percent -= $1.to_i * amount
$game_system.tax.perbon -= $1.to_i * amount
when EME::REGEXP::ITEM::ITEM_TAX_DIR
$game_system.tax.direct -= $1.to_i * amount
$game_system.tax.dirbon -= $1.to_i * amount
when EME::REGEXP::ITEM::ITEM_SELLTAX_PER
$game_system.selltax.percent -= $1.to_i * amount
$game_system.selltax.perbon -= $1.to_i * amount
when EME::REGEXP::ITEM::ITEM_SELLTAX_PER
$game_system.selltax.percent -= $1.to_i * amount
$game_system.selltax.perbon -= $1.to_i * amount
end
}
end
end
end
#============================================================================
#
# Window_ShopStatus
# Handles information of taxes shown in shops.
#============================================================================
class Window_ShopStatus < Window_Base
alias eme_tax_refresh refresh
def refresh
eme_tax_refresh
if TAX_INFORMATION
draw_taxes(TAX_X, TAX_Y)
end
end
def draw_taxes(x, y)
if $game_system.tax.percent != 100
rect = Rect.new(x, y, contents.width - 4 - x, line_height)
change_color(system_color)
if $game_system.tax.percent > 100
draw_text(rect, TAX + ":")
else
draw_text(rect, DISCOUNT + ":")
end
change_color(normal_color)
draw_text(rect, $game_system.tax.percent.to_s + "%", 2)
end
if $game_system.tax.direct != 0
rect = Rect.new(x, y + 24, contents.width - 4 - x, line_height)
change_color(system_color)
if $game_system.tax.direct > 0
draw_text(rect, TAX_DIRECT + ":")
else
draw_text(rect, DISCOUNT_DIRECT + ":")
end
change_color(normal_color)
draw_text(rect, $game_system.tax.direct.to_s, 2)
end
end
end