[XP] Tax

Started by Falcon, September 07, 2008, 09:44:11 am

Previous topic - Next topic

Falcon

September 07, 2008, 09:44:11 am Last Edit: February 18, 2013, 01:59:09 pm by KK20
Tax
Authors: Falcon
Version: 2.0
Type: Shop Add-on
Key Term: Custom Shop System



Introduction

This Script allows the user to add a sales tax to items that are sold in a shop.
In addition, the user may use negative taxes, for discount shops.
The user can easily change the tax rate using call script.



Features


  • Change the tax rate to anything you want. (Even negative for discounts!)




Screenshots

Spoiler: ShowHide




Script

Spoiler: ShowHide
#============================================================================
# Tax Script 2.0
#----------------------------------------------------------------------------
# By Falcon
# Thanks to Blizzard for the idea that triggered version 2.0
#----------------------------------------------------------------------------
# This system should be compatible with all shop systems, but the
# Shop Status window will only show the tax/discount rate for the default
#============================================================================

# setup the variable that will hold the tax rate
class Game_System
 attr_accessor :tax
 alias init_tax initialize
 def initialize
   init_tax
   @tax = 0
 end
end

# increase the price of the following items by the tax rate
module RPG
 class Item
   alias price_tax price
   def price() (price_tax + price_tax*($game_system.tax || 0) / 100).to_i end
 end
 
 class Weapon
   alias price_tax price
   def price() (price_tax + price_tax*($game_system.tax || 0) / 100).to_i end
 end
 
 class Armor
   alias price_tax price
   def price() (price_tax + price_tax*($game_system.tax || 0) / 100).to_i end
 end
end

class Window_ShopStatus < Window_Base
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   return if @item == nil
   case @item
   when RPG::Item
     number = $game_party.item_number(@item.id)
   when RPG::Weapon
     number = $game_party.weapon_number(@item.id)
   when RPG::Armor
     number = $game_party.armor_number(@item.id)
   end
   self.contents.font.color = system_color
   self.contents.draw_text(4, 0, 200, 32, "Number in Possession")
   self.contents.font.color = normal_color
   self.contents.draw_text(204, 0, 32, 32, number.to_s, 2)
   self.contents.font.color = system_color
   # If there is tax, then let the player know about it
   tax = $game_system.tax || 0
   if tax > 0 # If there is tax
     self.contents.draw_text(4, 0, 200, 86, "Current Tax Rate")
     self.contents.font.color = normal_color
     self.contents.draw_text(132, 0, 104, 86, tax.to_s + "%", 2)
   elsif tax < 0 # If there is a discount rate
     self.contents.draw_text(4, 0, 200, 86, "Discount Rate")
     self.contents.font.color = normal_color
     self.contents.draw_text(122, 0, 124, 86, tax.to_s + "%", 2)
   end
   return if @item.is_a?(RPG::Item)
   # Equipment adding information
   for i in 0...$game_party.actors.size
     # Get actor
     actor = $game_party.actors[i]
     # If equippable, then set to normal text color. If not, set to
     # invalid text color.
     if actor.equippable?(@item)
       self.contents.font.color = normal_color
     else
       self.contents.font.color = disabled_color
     end
     # Draw actor's name
     self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
     # Get current equipment
     if @item.is_a?(RPG::Weapon)
       item1 = $data_weapons[actor.weapon_id]
     elsif @item.kind == 0
       item1 = $data_armors[actor.armor1_id]
     elsif @item.kind == 1
       item1 = $data_armors[actor.armor2_id]
     elsif @item.kind == 2
       item1 = $data_armors[actor.armor3_id]
     else
       item1 = $data_armors[actor.armor4_id]
     end
     # If equippable
     if actor.equippable?(@item)
       # If weapon
       if @item.is_a?(RPG::Weapon)
         atk1 = item1 != nil ? item1.atk : 0
         atk2 = @item != nil ? @item.atk : 0
         change = atk2 - atk1
       end
       # If armor
       if @item.is_a?(RPG::Armor)
         pdef1 = item1 != nil ? item1.pdef : 0
         mdef1 = item1 != nil ? item1.mdef : 0
         pdef2 = @item != nil ? @item.pdef : 0
         mdef2 = @item != nil ? @item.mdef : 0
         change = pdef2 - pdef1 + mdef2 - mdef1
       end
       # Draw parameter change values
       self.contents.draw_text(124, 64 + 64 * i, 112, 32,
         sprintf("%+d", change), 2)
     end
     # Draw item
     if item1 != nil
       x = 4
       y = 64 + 64 * i + 32
       bitmap = RPG::Cache.icon(item1.icon_name)
       opacity = self.contents.font.color == normal_color ? 255 : 128
       self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
       self.contents.draw_text(x + 28, y, 212, 32, item1.name)
     end
   end
 end
end




Instructions

Place this above main, below everything else and it should work fine :)
To use the sales tax:
call script:
$game_system.tax = TAXRATE



Compatibility

Should work with all custom shop systems, however the window that displays the tax/discount rate will probably not appear.



Credits and Thanks

Thanks to Mega Flare for requesting this, and thanks to SephirothSpawn for helping me with an error!

Special thanks goes to Blizzard, who motivated me to write version 2.0

Starrodkirby86

Now THIS is a script I've been wanting in RMXP for a while, shop-wise at least. Taxes is another way to have dynamic prices, and I love those. I found some other script in another RM community, but I can't remember where it is and whether it's SDK compliant or not...BUT! This one proves to be very simplistic and optimal, excellent script. >:3

What's osu!? It's a rhythm game. Thought I should have a signature with a working rank. ;P It's now clickable!
Still Aqua's biggest fan (Or am I?).




Falcon

I think someone built it in to their own script at .org, I think this is the only one for the default system though.

Hellfire Dragon

September 08, 2008, 04:58:49 am #3 Last Edit: September 08, 2008, 01:50:43 pm by Hellfire Dragon
Hey now this is great. I've been looking for something like. D

TheHackMan

September 08, 2008, 07:31:19 am #4 Last Edit: September 08, 2008, 07:55:39 am by TheHackMan
Yah, this doesn't work with custom shop scripts but its still awesome! Will switch back to old shop screen just for some nice and friendly taxes on the products >D

Edit: I did a little messing around and whatnot and there might be a way to have this work with custom shop scripts although it will only factor in the tax to the items price in the shop window, not display the current tax percentage as that would most likely be different for each custom shop edit.
In the custom shop edit, find the following lines in
#  Window_Shop_List:
  def draw_item(index)
  item = @data[index]

The right below those two lines insert:
  item.price = Integer(item.price * ( (100 + $game_system.tax) / 100.0))

Blizzard

Hey Falcon, have you tried modifying stuff in the RPG:: classes directly? If you edit the price before you access it, it would work with any shop system.

class RPG::Weapon
 
  def price
    return (@price * $game_system.tax / 100)
  end
 
end


You might another additional condition that checks whether you are buying or selling.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Falcon

@THM
Yeah, you can do that, the problem is the window; custom shops won't display the tax %.


@Blizzard
Holy shit. 2.0 may be coming soon XD

The shop system would still need to be edited for the tax % to appear though.

Blizzard

That's true, but I think you can do it using an extra window. That might even work with custom shop systems.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Falcon

Version 2.0 is out.

This version will increase compatibility; allowing it to work with some custom shop systems.

TheHackMan

October 02, 2008, 10:03:31 pm #9 Last Edit: October 02, 2008, 10:08:53 pm by TheHackMan
Just tried putting in this script and something doesn't add up.
I used the call script command to set the tax rate to 7
Whenever I go into a shop to buy an item the price is at a rate such that the tax would have to be 22.4
Price w/out tax = 500
Tax Rate = 7
Price w/ tax should be = 535
Price w/ tax actually = 612
Then after buying 1 item at the 612 price, the price goes up to 699.
Also, it seems to go up when I have more money and even after I sell an item

Falcon

October 03, 2008, 05:37:40 pm #10 Last Edit: October 03, 2008, 05:40:33 pm by Falcon
I'll look into that.

I think you've screwed this up, it's working for me. Post whatever event commands you're using.

TheHackMan

Hmmm, I think it was something with the custom shop edit I had.
I was messing around with a few of the scripts I had and took out the custom shop script and now everything seems to be back on track and working normally.

Falcon

Post the custom shop script, I'm curious to see what they did to fuck up my tax script.

TheHackMan

Sure, here you go:

Spoiler: ShowHide
#===============================================================================
#  Leon's Shopping System
#-------------------------------------------------------------------------------
#  3/10/2007
#  v. 1.0
#-------------------------------------------------------------------------------
#  Instructions:
# Place above main, and below the other default scripts.
#   (Yes, that is all of the instructions)
#
#  Features:
# Replaces the default shop system.
#
#===============================================================================


#===============================================================================
#  Window_Shop_Info
#===============================================================================
class Window_Shop_Info < Window_Base
  def initialize
super(160, 0, 480, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
  end
 
  def refresh(selection = 0)
self.contents.clear
if selection == 0
  self.contents.draw_text(0, 0, 448, 32, "Buy, sell, or leave?", 1)
else
  self.contents.draw_text(0, 0, 448, 32, "Press 'Z' for character compatabilitiy.", 1)
end
  end
end
#===============================================================================
#  END Window_Shop_Info
#===============================================================================


#===============================================================================
#  Window_Shop_Option
#===============================================================================
class Window_Shop_Option < Window_Selectable
  def initialize
super(0, 0, 160, 128)
@option = ["Buy", "Sell", "Leave"]
@item_max = @option.size
self.contents = Bitmap.new(width - 32, height - 32)
self.index = 0
self.active = true
refresh
  end
 
  def refresh
self.contents.clear
for i in 0...@option.size
  y = i * 32
  self.contents.draw_text(0, y, 128, 32, @option[i], 1)
end
  end
end
#===============================================================================
#  END Window_Shop_Option
#===============================================================================


#===============================================================================
#  Window_Shop_Gold
#===============================================================================
class Window_Shop_Gold < Window_Base
  def initialize
super(0, 128, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
  end
 
  def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(0, 0, 60, 32, $data_system.words.gold + ":")
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, 128, 32, $game_party.gold.to_s, 2)
  end
end
#===============================================================================
#  END Window_Shop_Gold
#===============================================================================


#===============================================================================
#  Window_Shop_Own
#===============================================================================
class Window_Shop_Own < Window_Base
  def initialize
super(0, 192, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(0, 0, 48, 32, "Own:")
if item == nil
  return
end
self.contents.font.color = normal_color
case item
when RPG::Item
  number = $game_party.item_number(item.id)
when RPG::Weapon
  number = $game_party.weapon_number(item.id)
when RPG::Armor
  number = $game_party.armor_number(item.id)
end
self.contents.draw_text(0, 0, 128, 32, number.to_s, 2)
  end
end
#===============================================================================
#  END Window_Shop_Own
#===============================================================================


#===============================================================================
#  Window_Shop_List
#===============================================================================
class Window_Shop_List < Window_Selectable
  def initialize(shop_goods)
super(160, 64, 480, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.active = false
self.index = 0
self.visible = false
@shop_goods = shop_goods
@sell = false
  end
 
  def item
if @data != nil
  return @data[index]
end
  end
 
  def refresh
@sell = false
@option_index = nil
if self.contents != nil
  self.contents.dispose
  self.contents = nil
end
@data = []
for goods_item in @shop_goods
  case goods_item[0]
  when 0
item = $data_items[goods_item[1]]
  when 1
item = $data_weapons[goods_item[1]]
  when 2
item = $data_armors[goods_item[1]]
  end
  if item != nil
@data.push(item)
  end
end
@item_max = @data.size
if @item_max > 0
  self.contents = Bitmap.new(width - 32, row_max * 32)
  for i in 0...@item_max
draw_item(i)
  end
end
  end
 
  def refresh_sell(option_index)
@sell = true
@option_index = option_index
if self.contents != nil
  self.contents.dispose
  self.contents = nil
end
@data = []
for i in 1...$data_items.size
  if $game_party.item_number(i) > 0
@data.push($data_items[i])
  end
end
for i in 1...$data_weapons.size
  if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
  end
end
for i in 1...$data_armors.size
  if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
  end
end
@item_max = @data.size
if @item_max > 0
  self.contents = Bitmap.new(width - 32, row_max * 32)
  for i in 0...@item_max
draw_item(i)
  end
end
  end

  def draw_item(index)
  item = @data[index]
  item.price = Integer(item.price * ( (100 + $game_system.tax) / 100.0))
case item
when RPG::Item
  number = $game_party.item_number(item.id)
when RPG::Weapon
  number = $game_party.weapon_number(item.id)
when RPG::Armor
  number = $game_party.armor_number(item.id)
end
if @option_index == nil
  if item.price <= $game_party.gold and number < 99
self.contents.font.color = normal_color
  else
self.contents.font.color = disabled_color
  end
else
  self.contents.font.color = normal_color
end
x = 4
y = index * 32
if item.price == 0
  self.contents.font.color = disabled_color
else
  self.contents.font.color = normal_color
end
if @sell == false
  if item.price <= $game_party.gold and number < 99
self.contents.font.color = normal_color
  else
self.contents.font.color = disabled_color
  end
end
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
if @option_index == nil
  self.contents.draw_text(x + 350, y, 88, 32, item.price.to_s, 2)
else
  item_price = (item.price / 2).round
  self.contents.draw_text(x + 350, y, 88, 32, item_price.to_s, 2)
end
  end
end
#===============================================================================
#  END Window_Shop_List
#===============================================================================


#===============================================================================
#  Window_Shop_Description_Item
#===============================================================================
class Window_Shop_Description_Item < Window_Base
  def initialize
super(90, 256, 460, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
if item == nil
  return
end
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(0, 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(28, 0, 120, 32, item.name)
self.contents.draw_text(0, 32, 428, 32, item.description)
self.contents.font.color = system_color
self.contents.draw_text(0, 64, 120, 32, "Range:")
self.contents.draw_text(0, 96, 140, 32, "% HP Recovered:")
self.contents.draw_text(0, 128, 140, 32, "% SP Recovered:")
self.contents.draw_text(230, 96, 120, 32, "HP Recovered:")
self.contents.draw_text(230, 128, 120, 32, "SP Recovered:")
self.contents.font.color = normal_color
self.contents.draw_text(150, 96, 90, 32, item.recover_hp_rate.to_s)
self.contents.draw_text(150, 128, 90, 32, item.recover_sp_rate.to_s)
self.contents.draw_text(360, 96, 90, 32, item.recover_hp.to_s)
self.contents.draw_text(360, 128, 90, 32, item.recover_sp.to_s)
case item.scope
when 0
  self.contents.draw_text(70, 64, 120, 32, "None")
when 1
  self.contents.draw_text(70, 64, 120, 32, "One Enemy")
when 2
  self.contents.draw_text(70, 64, 120, 32, "All Enemies")
when 3
  self.contents.draw_text(70, 64, 120, 32, "One Ally")
when 4
  self.contents.draw_text(70, 64, 120, 32, "All Allies")
when 5
  self.contents.draw_text(70, 64, 120, 32, "One Dead Ally")
when 6
  self.contents.draw_text(70, 64, 120, 32, "All Dead Allies")
when 7
  self.contents.draw_text(70, 64, 120, 32, "User")
end
  end
end
#===============================================================================
#  END Window_Shop_Description_Item
#===============================================================================


#===============================================================================
#  Window_Shop_Description_Equipment
#===============================================================================
class Window_Shop_Description_Equipment < Window_Base
  def initialize
super(0, 256, 640, 224)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
if item == nil
  return
end
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(0, 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(28, 0, 120, 32, item.name)
self.contents.draw_text(0, 32, 460, 32, item.description)
self.contents.font.color = system_color
if item.is_a?(RPG::Weapon)
  self.contents.draw_text(0, 64, 75, 32, "Attack:")
  self.contents.draw_text(0, 96, 120, 32, "Phys. Def:")
  self.contents.draw_text(0, 128, 120, 32, "Mag. Def:")
  self.contents.draw_text(165, 64, 120, 32, "Str:")
  self.contents.draw_text(165, 96, 120, 32, "Dex:")
  self.contents.draw_text(165, 128, 120, 32, "Agi:")
  self.contents.draw_text(165, 160, 120, 32, "Int:")
  self.contents.draw_text(290, 64, 120, 32, "Elements:")
  self.contents.draw_text(470, 64, 120, 32, "Inflicts:")
else
  self.contents.draw_text(0, 64, 120, 32, "Phys. Def:")
  self.contents.draw_text(0, 96, 120, 32, "Mag. Def:")
  self.contents.draw_text(0, 128, 120, 32, "Evade:")
  self.contents.draw_text(0, 160, 120, 32, "Auto:")
  self.contents.draw_text(165, 64, 120, 32, "Str:")
  self.contents.draw_text(165, 96, 120, 32, "Dex:")
  self.contents.draw_text(165, 128, 120, 32, "Agi:")
  self.contents.draw_text(165, 160, 120, 32, "Int:")
  self.contents.draw_text(370, 64, 120, 32, "Guards Against:")
end
self.contents.font.color = normal_color
if item.is_a?(RPG::Weapon)
  self.contents.draw_text(60, 64, 75, 32, item.atk.to_s)
  self.contents.draw_text(90, 96, 75, 32, item.pdef.to_s)
  self.contents.draw_text(90, 128, 75, 32, item.mdef.to_s)
  self.contents.draw_text(195, 64, 50, 32, item.str_plus.to_s, 2)
  self.contents.draw_text(195, 96, 50, 32, item.dex_plus.to_s, 2)
  self.contents.draw_text(195, 128, 50, 32, item.agi_plus.to_s, 2)
  self.contents.draw_text(195, 160, 50, 32, item.int_plus.to_s, 2)
  self.contents.font.size = 14
  for i in 0...item.element_set.size
x = 265 + i % 2 * 75
y = 80 + i / 2 * 14
self.contents.draw_text(x, y, 120, 32, $data_system.elements[item.element_set[i]])
  end
  for i in 0...item.plus_state_set.size
x = 445 + i % 2 * 75
y = 80 + i / 2 * 14
self.contents.draw_text(x, y, 120, 32, $data_states[item.plus_state_set[i]].name)
  end
else
  self.contents.draw_text(90, 64, 75, 32, item.pdef.to_s)
  self.contents.draw_text(90, 96, 75, 32, item.mdef.to_s)
  self.contents.draw_text(60, 128, 75, 32, item.eva.to_s)
  if $data_states[item.auto_state_id] != nil
self.contents.draw_text(55, 160, 75, 32, $data_states[item.auto_state_id].name)
  end
  self.contents.draw_text(195, 64, 50, 32, item.str_plus.to_s, 2)
  self.contents.draw_text(195, 96, 50, 32, item.dex_plus.to_s, 2)
  self.contents.draw_text(195, 128, 50, 32, item.agi_plus.to_s, 2)
  self.contents.draw_text(195, 160, 50, 32, item.int_plus.to_s, 2)
  self.contents.font.size = 14
  @defense = []
  for i in 0...item.guard_element_set.size
@defense.push($data_system.elements[item.guard_element_set[i]])
  end
  for i in 0...item.guard_state_set.size
@defense.push($data_states[item.guard_state_set[i]].name)
  end
  for i in 0...@defense.size
x = 265 + i % 4 * 80
y = 80 + i / 4 * 14
self.contents.draw_text(x + 15, y, 85, 32, @defense[i])
  end
end
self.contents.font.size = 22
  end
end
#===============================================================================
#  END Window_Shop_Description_Equipment
#===============================================================================


#===============================================================================
#  Window_Shop_Actors
#===============================================================================
class Window_Shop_Actors < Window_Base
  def initialize
super(84, 32, 472, 416)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
self.active = false
self.z += 100
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
if item == nil
  return
end
for i in 0...$game_party.actors.size
  x = i%2 * 236
  y = i/2 * 192
  draw_actor_graphic($game_party.actors[i], x + 16, y + 48)
  draw_actor_name($game_party.actors[i], x + 48, y + 8)
  pdef1 = item.pdef
  mdef1 = item.mdef
  str1 = item.str_plus
  dex1 = item.dex_plus
  agi1 = item.agi_plus
  int1 = item.int_plus
  atk2 = 0
  eva2 = 0
  pdef2 = 0
  mdef2 = 0
  str2 = 0
  dex2 = 0
  agi2 = 0
  int2 = 0
  if item.is_a?(RPG::Weapon)
if $data_weapons[$game_party.actors[i].weapon_id] != nil
  atk1 = item.atk
  atk2 = $data_weapons[$game_party.actors[i].weapon_id].atk
  pdef2 = $data_weapons[$game_party.actors[i].weapon_id].pdef
  mdef2 = $data_weapons[$game_party.actors[i].weapon_id].mdef
  str2 = $data_weapons[$game_party.actors[i].weapon_id].str_plus
  dex2 = $data_weapons[$game_party.actors[i].weapon_id].dex_plus
  agi2 = $data_weapons[$game_party.actors[i].weapon_id].agi_plus
  int2 = $data_weapons[$game_party.actors[i].weapon_id].int_plus
end
  else
eva1 = item.eva
case item.kind
when 0
if $data_armors[$game_party.actors[i].armor1_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor1_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor1_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor1_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor1_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor1_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor1_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor1_id].int_plus
end
when 1
if $data_armors[$game_party.actors[i].armor2_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor2_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor2_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor2_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor2_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor2_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor2_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor2_id].int_plus
end
when 2
if $data_armors[$game_party.actors[i].armor3_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor3_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor3_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor3_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor3_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor3_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor3_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor3_id].int_plus
end
when 3
if $data_armors[$game_party.actors[i].armor4_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor4_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor4_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor4_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor4_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor4_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor4_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor4_id].int_plus
end
end
  end
  color1 = Color.new(25, 210, 25, 255)
  color2 = Color.new(210, 25, 25, 255)
  if $game_party.actors[i].equippable?(item)
self.contents.font.color = normal_color
# PDEF
if (pdef1 - pdef2) > 0
  self.contents.font.color = color1
elsif (pdef1 - pdef2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 25, y + 80, 70, 32, (pdef1 - pdef2).to_s, 2)
# MDEF
if (mdef1 - mdef2) > 0
  self.contents.font.color = color1
elsif (mdef1 - mdef2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 25, y + 112, 70, 32, (mdef1 - mdef2).to_s, 2)
# STR
if (str1 - str2) > 0
  self.contents.font.color = color1
elsif (str1 - str2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 48, 70, 32, (str1 - str2).to_s, 2)
# DEX
if (dex1 - dex2) > 0
  self.contents.font.color = color1
elsif (dex1 - dex2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 80, 70, 32, (dex1 - dex2).to_s, 2)
# AGI
if (agi1 - agi2) > 0
  self.contents.font.color = color1
elsif (agi1 - agi2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 112, 70, 32, (agi1 - agi2).to_s, 2)
# INT
if (int1 - int2) > 0
  self.contents.font.color = color1
elsif (int1 - int2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 144, 70, 32, (int1 - int2).to_s, 2)
if item.is_a?(RPG::Weapon)
  self.contents.font.color = system_color
  self.contents.draw_text(x, y + 48, 80, 32, "Atk:")
  self.contents.draw_text(x, y + 80, 80, 32, "Pdef:")
  self.contents.draw_text(x, y + 112, 80, 32, "Mdef:")
  self.contents.draw_text(x + 110, y + 48, 80, 32, "Str:")
  self.contents.draw_text(x + 110, y + 80, 80, 32, "Dex:")
  self.contents.draw_text(x + 110, y + 112, 80, 32, "Agi:")
  self.contents.draw_text(x + 110, y + 144, 80, 32, "Int:")
  self.contents.font.color = normal_color
  #  ATTACK
  if (atk1 - atk2) > 0
self.contents.font.color = color1
  elsif (atk1 - atk2) < 0
self.contents.font.color = color2
  else
self.contents.font.color = normal_color
  end
  self.contents.draw_text(x + 25, y + 48, 70, 32, (atk1 - atk2).to_s, 2)
  #  ELSE if armor...
else
  self.contents.font.color = system_color
  self.contents.draw_text(x, y + 48, 80, 32, "Eva:")
  self.contents.draw_text(x, y + 80, 80, 32, "Pdef:")
  self.contents.draw_text(x, y + 112, 80, 32, "Mdef:")
  self.contents.draw_text(x + 110, y + 48, 80, 32, "Str:")
  self.contents.draw_text(x + 110, y + 80, 80, 32, "Dex:")
  self.contents.draw_text(x + 110, y + 112, 80, 32, "Agi:")
  self.contents.draw_text(x + 110, y + 144, 80, 32, "Int:")
  self.contents.font.color = normal_color
  if (eva1 - eva2) > 0
self.contents.font.color = color1
  elsif (eva1 - eva2) < 0
self.contents.font.color = color2
  else
self.contents.font.color = normal_color
  end
  self.contents.draw_text(x + 25, y + 48, 70, 32, (eva1 - eva2).to_s, 2)
end
  else
self.contents.font.color = disabled_color
self.contents.draw_text(x + 10, y + 80, 120, 32, "Cannot Equip")
self.contents.font.color = normal_color
  end
end
  end
end
#===============================================================================
#  END Window_Shop_Actors
#===============================================================================


#===============================================================================
#  Window_Shop_Amount
#===============================================================================
class Window_Shop_Amount < Window_Selectable
 
  attr_accessor :amount
 
  def initialize
super(80, 208, 480, 96)
@item_max = 1
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
self.z += 100
@amount = 1
item = $data_items[1]
option_index = 0
refresh(item, option_index)
  end
 
  def refresh(item, option_index)
self.contents.clear
if item == nil
  return
end
if option_index == nil
  return
end
if option_index == 0
  self.contents.font.color = system_color
  self.contents.draw_text(0, 0, 200, 32, "How many?")
  self.contents.font.color = normal_color
  if $game_party.gold < (@amount * item.price)
self.contents.font.color = disabled_color
  end
  bitmap = RPG::Cache.icon(item.icon_name)
  opacity = self.contents.font.color == normal_color ? 255 : 128
  self.contents.blt(0, 36, bitmap, Rect.new(0, 0, 24, 24), opacity)
  self.contents.draw_text(28, 32, 120, 32, item.name)
  self.contents.draw_text(335, 32, 10, 32, "x")
  self.contents.draw_text(280, 32, 30, 32, @amount.to_s, 2)
  self.cursor_rect.set(284, 32, 32, 32)
  self.contents.draw_text(370, 32, 70, 32, (@amount * item.price).to_s, 2)
else
  self.contents.font.color = system_color
  self.contents.draw_text(0, 0, 200, 32, "How many?")
  self.contents.font.color = normal_color
  bitmap = RPG::Cache.icon(item.icon_name)
  opacity = self.contents.font.color == normal_color ? 255 : 128
  self.contents.blt(0, 36, bitmap, Rect.new(0, 0, 24, 24), opacity)
  self.contents.draw_text(28, 32, 120, 32, item.name)
  self.contents.draw_text(335, 32, 10, 32, "x")
  self.contents.draw_text(280, 32, 30, 32, @amount.to_s, 2)
  self.cursor_rect.set(284, 32, 32, 32)
  self.contents.draw_text(370, 32, 70, 32, (@amount * (item.price / 2)).to_s, 2)
end
  end
end
#===============================================================================
#  END Window_Shop_Amount
#===============================================================================


#===============================================================================
#  Scene_Shop
#===============================================================================
class Scene_Shop
  def main
@counter = 0
@info_window = Window_Shop_Info.new
@option_window = Window_Shop_Option.new
@gold_window = Window_Shop_Gold.new
@own_window = Window_Shop_Own.new
@list_window = Window_Shop_List.new($game_temp.shop_goods)
@desc_item_window = Window_Shop_Description_Item.new
@desc_equip_window = Window_Shop_Description_Equipment.new
@actor_window = Window_Shop_Actors.new
@amount_window = Window_Shop_Amount.new

Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
break
  end
end
Graphics.freeze

@info_window.dispose
@option_window.dispose
@gold_window.dispose
@own_window.dispose
@list_window.dispose
@desc_item_window.dispose
@desc_equip_window.dispose
@actor_window.dispose
@amount_window.dispose
  end
 
  def update
@info_window.update
@option_window.update
@gold_window.update
@own_window.update
@list_window.update
@desc_item_window.update
@desc_equip_window.update
@actor_window.update
@amount_window.update

if @option_window.active
  update_option
  return
end

if @list_window.active
  update_list
  return
end

if @actor_window.visible
  update_actors
  return
end

if @amount_window.active and @option_window.index == 0
  update_amount
  return
end

if @amount_window.active and @option_window.index == 1
  update_sell
  return
end
  end
 
  def update_option
@info_window.refresh(0)
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  $scene = Scene_Map.new
  return
end
if Input.trigger?(Input::C)
  case @option_window.index
  when 0
$game_system.se_play($data_system.decision_se)
@list_window.refresh
@option_window.active = false
@list_window.visible = true
@list_window.active = true
@list_window.index = 0
  when 1
$game_system.se_play($data_system.decision_se)
@list_window.refresh_sell(@option_window.index)
@option_window.active = false
@list_window.visible = true
@list_window.active = true
@list_window.index = 0
  when 2
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
  end
end
  end
 
  def update_list
@info_window.refresh(1)
@item = @list_window.item
if @counter != 1
  if @item.is_a?(RPG::Item)
@desc_item_window.refresh(@item)
@counter = 1
  else
@desc_equip_window.refresh(@item)
@counter = 1
  end
end
@own_window.refresh(@list_window.item)
if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN) or Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
  @counter = 0
end
if @item.is_a?(RPG::Item)
  if @counter != 1
@desc_item_window.refresh(@item)
@counter = 1
  end
  @desc_item_window.visible = true
  @desc_equip_window.visible = false
else
  if @counter != 1
@desc_equip_window.refresh(@item)
@counter = 1
  end
  @desc_item_window.visible = false
  @desc_equip_window.visible = true
end
if Input.trigger?(Input::B)
  @counter = 0
  $game_system.se_play($data_system.cancel_se)
  @desc_item_window.visible = false
  @desc_equip_window.visible = false
  @desc_item_window.refresh(nil)
  @desc_equip_window.refresh(nil)
  @option_window.active = true
  @list_window.visible = false
  @list_window.active = false
  @own_window.refresh(nil)
  return
end
if Input.trigger?(Input::A)
  unless @item.is_a?(RPG::Item)
$game_system.se_play($data_system.decision_se)
@actor_window.refresh(@item)
@actor_window.visible = true
@list_window.active = false
return
  else
$game_system.se_play($data_system.buzzer_se)
  end
end
if Input.trigger?(Input::C)
  if @item == nil or @item.id == 0 or @item.price == 0
$game_system.se_play($data_system.buzzer_se)
return
  end
  if @option_window.index == 0
case @item
when RPG::Item
  if $game_party.item_number(@item.id) >= 99
$game_system.se_play($data_system.buzzer_se)
return
  end
when RPG::Weapon
if $game_party.weapon_number(@item.id) >= 99
$game_system.se_play($data_system.buzzer_se)
return
  end
when RPG::Armor
  if $game_party.armor_number(@item.id) >= 99
$game_system.se_play($data_system.buzzer_se)
return
  end
end
  end
  $game_system.se_play($data_system.decision_se)
  @amount_window.visible = true
  @amount_window.active = true
  @list_window.active = false
  return
end
  end
 
  def update_actors
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @actor_window.visible = false
  @list_window.active = true
end
  end
 
  def update_amount
@amount_window.refresh(@item, @option_window.index)
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @amount_window.amount = 1
  @amount_window.visible = false
  @amount_window.active = false
  @list_window.active = true
  return
end
if Input.trigger?(Input::C)
  if $game_party.gold >= (@amount_window.amount * @item.price)
$game_system.se_play($data_system.decision_se)
$game_party.lose_gold(@amount_window.amount * @item.price)
case @item
when RPG::Item
  $game_party.gain_item(@item.id, @amount_window.amount)
when RPG::Weapon
  $game_party.gain_weapon(@item.id, @amount_window.amount)
when RPG::Armor
  $game_party.gain_armor(@item.id, @amount_window.amount)
end
@gold_window.refresh
@amount_window.amount = 1
@amount_window.visible = false
@amount_window.active = false
@list_window.active = true
@list_window.refresh
return
  else
$game_system.se_play($data_system.buzzer_se)
  end
end
if Input.trigger?(Input::LEFT)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 1
  if @amount_window.amount == 0
@amount_window.amount = 1
  end
  return
end
if Input.trigger?(Input::RIGHT)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount += 1
  case @item
  when RPG::Item
if ($game_party.item_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.item_number(@item.id))
end
  when RPG::Weapon
if ($game_party.weapon_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.weapon_number(@item.id))
end
  when RPG::Armor
if ($game_party.armor_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.armor_number(@item.id))
end
  end
  return
end
if Input.trigger?(Input::UP)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount += 10
  case @item
  when RPG::Item
if ($game_party.item_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.item_number(@item.id))
end
  when RPG::Weapon
if ($game_party.weapon_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.weapon_number(@item.id))
end
  when RPG::Armor
if ($game_party.armor_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.armor_number(@item.id))
end
  end
  return
end
if Input.trigger?(Input::DOWN)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 10
  if @amount_window.amount < 1
@amount_window.amount = 1
  end
  return
end
  end
 
  def update_sell
@amount_window.refresh(@item, @option_window.index)
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @amount_window.amount = 1
  @amount_window.visible = false
  @amount_window.active = false
  @list_window.active = true
  return
end
if Input.trigger?(Input::C)
  if @item.price == 0
$game_system.se_play($data_system.buzzer_se)
return
  end
  $game_system.se_play($data_system.decision_se)
  case @item
  when RPG::Item
$game_party.gain_gold(@amount_window.amount * (@item.price / 2))
$game_party.lose_item(@item.id, @amount_window.amount)
  when RPG::Weapon
$game_party.gain_gold(@amount_window.amount * (@item.price / 2))
$game_party.lose_weapon(@item.id, @amount_window.amount)
  when RPG::Armor
$game_party.gain_gold(@amount_window.amount * (@item.price / 2))
$game_party.lose_armor(@item.id, @amount_window.amount)
  end
  @gold_window.refresh
  @amount_window.amount = 1
  @amount_window.visible = false
  @amount_window.active = false
  @list_window.active = true
  @list_window.refresh_sell(@option_window.index)
  @desc_equip_window.refresh(nil)
  @desc_item_window.refresh(nil)
end
if Input.trigger?(Input::LEFT)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 1
  if @amount_window.amount < 1
@amount_window.amount = 1
  end
end
if Input.trigger?(Input::RIGHT)
  $game_system.se_play($data_system.cursor_se)
  case @item
  when RPG::Item
@amount_window.amount += 1
if @amount_window.amount > $game_party.item_number(@item.id)
  @amount_window.amount = $game_party.item_number(@item.id)
end
  when RPG::Weapon
@amount_window.amount += 1
if @amount_window.amount > $game_party.weapon_number(@item.id)
  @amount_window.amount = $game_party.weapon_number(@item.id)
end
  when RPG::Armor
@amount_window.amount += 1
if @amount_window.amount > $game_party.armor_number(@item.id)
  @amount_window.amount = $game_party.armor_number(@item.id)
end
  end
end
if Input.trigger?(Input::UP)
  $game_system.se_play($data_system.cursor_se)
  case @item
  when RPG::Item
@amount_window.amount += 10
if @amount_window.amount > $game_party.item_number(@item.id)
  @amount_window.amount = $game_party.item_number(@item.id)
end
  when RPG::Weapon
@amount_window.amount += 10
if @amount_window.amount > $game_party.weapon_number(@item.id)
  @amount_window.amount = $game_party.weapon_number(@item.id)
end
  when RPG::Armor
@amount_window.amount += 10
if @amount_window.amount > $game_party.armor_number(@item.id)
  @amount_window.amount = $game_party.armor_number(@item.id)
end
  end
end
if Input.trigger?(Input::DOWN)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 10
  if @amount_window.amount < 1
@amount_window.amount = 1
  end
end
  end
 
end

Falcon

There's the problem, it looks like this script changes the price based on an amount of items. So it's probably adding that to the tax.

Kiwa

Hey friends.

I was just wondering if anyone still has this script laying around because this link is broken ):

I would like to use this script for my game :)

TYSM! :D


Blizzard

I have edited the first post and inserted the script instead of the link so people have no problem getting the script in the future.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Kiwa

Thanks. You know i love you guys! (Nohomo)
Ill give it a try later when i get home from work.

Kiwa

Thanks fellas..

I put it in and played with it for a bit. works :D
thanks :D