I've got an issue with the following script, which I did not script myself
[spoiler=Dynamic Economies Script]#----------------------------------------------------------------------------
# Economic Shop System - by Nick
# Version 2.134 (Hell yeah)
#----------------------------------------------------------------------------
# You may delete all comments except copyright.
# How to use:
# Step 1:
# -Create a shop using $eco.add_shop("name", "trade_type", "description")
# -"name", the store name, to identify shops, cant make 2 shops with same name
# -"trade_type", Standard it is both so you dont have to enter it, use "buy"
# -Or "sell" for buy/sell only shops.
# Step 2:
# -Add items using $eco.add_item(shop, item, type, amount, time_per_unit)
# -Shop can be either shop name or id.
# -Item is just the item id in the database.
# -Type is item(0), weapon(1) or armor(2)
# -Amount is the amount of items automatic in stock and it will restock to.
# -Time_per_unit is the time for 1 item to restock.
# Step 3:
# -Use call script; $scene = Eco_Scene_Shop.new(shopname/id)
# Note:
# -You can also use step 1 and 2 in Game_Economy, def initialize if you prefer.
# -Just replace $eco.shops with just @shops.
# Extra's:
# -If you are going to add items, it might be handier to use ID instead of name
# -For quick acces to ID use @id = $eco.retrieve_id(shopname) to put it in a string
# -Use module ES to adjust quick settings.
# -If you dont like the way i used to set prices, adjust def price in Data_Shopitems
# -And def calprice in Eco_Window_ShopNumber
#----------------------------------------------------------------------------
# Made by: Nick alias "PieNick, "Paashaas", "Generaal Gek", "Ali Anthrax"
# Thanks to: Near_Fantastica for the idea and his great scripts
#----------------------------------------------------------------------------
module ES
RESTOCK = true # Restock items?
CT = true # In the shop menu, let the user choose item type?
SHOPNAME = true # Show shopname in help window when empty?
end
class Data_ShopItems
# All data for items are stored here, and the price calculating
attr_accessor :item
attr_accessor :type
attr_accessor :stock
attr_accessor :default
attr_accessor :time_per_unit
attr_accessor :time_start
#--------------------------------------------------------------------------
def initialize(item, type, default, time_per_unit)
@item = item
@type = type
@stock = default
@default = default
@time_per_unit = time_per_unit
@time_start = Graphics.frame_count
end
#--------------------------------------------------------------------------
def price(sell = false)
case type
when 0
base = $data_items
when 1
base = $data_weapons
when 2
base = $data_armors
end
@baseprice = base[@item].price.to_f
if @default != 0
range = @default.to_f / @stock.to_f
else
if sell
range = 1.30
for i in 0...@stock
range -= 0.05 if range >= 0.80
end
else
range = 2.16
for i in 0...@stock
range -= 0.16 if range >= 0.70
end
end
end
range = 1.25 if range.nan?
if sell
@base = @baseprice / 2
if range == 1
@newprice = @base
elsif range > 1
@newprice = @base * (range * range)
else
@newprice = @base * range
end
@newprice = @baseprice * 3 if @newprice > @baseprice * 3
@newprice = @baseprice / 3 if @newprice < @baseprice / 3
else
@newprice = @baseprice * range
@newprice = @baseprice * 2 if @newprice > @baseprice * 2
@newprice = @baseprice / 2 if @newprice < @baseprice / 2
end
@newprice = @newprice.round
return @newprice
end
end
class Data_Shop
# All data for shops is here
attr_accessor :name
attr_accessor :items
attr_accessor :trade_type
#--------------------------------------------------------------------------
def initialize(name, trade_type)
@name = name
@trade_type = trade_type
@items = []
end
end
class Game_Economy
# Also known as $eco
attr_accessor :shops
#--------------------------------------------------------------------------
def initialize
@shops = []
# After this, you can also create shops and put items in them
end
#--------------------------------------------------------------------------
# Checks every shop and every item if it needs restocking, i think it could
# Cause lag if it needs to search alot of things...
def restock
for shop in 0...@shops.size
for item in 0...@shops[shop].items.size
itemdata = @shops[shop].items[item]
times = (Graphics.frame_count.to_f - itemdata.time_start.to_f) / itemdata.time_per_unit.to_f
if times >= 1.00 and itemdata.time_per_unit != 0
itemdata.time_start = Graphics.frame_count
if itemdata.stock > itemdata.default
itemdata.stock -= times.floor
elsif itemdata.stock < itemdata.default
itemdata.stock += times.floor
end
end
end
end
end
#--------------------------------------------------------------------------
# Add shops using this
def add_shop(name, trade_type = "both")
@shops.push(Data_Shop.new(name, trade_type)) unless $eco.shops.index(name)
end
#--------------------------------------------------------------------------
# Add items to shops using this
def add_item(shop, item, type, default, time_per_unit)
if shop.is_a?(Fixnum)
@id = shop
@name = @shops[@id].name
else
@name = shop
@id = retrieve_id(shop)
end
tpu = time_per_unit * Graphics.frame_rate
@shops[@id].items.push(Data_ShopItems.new(item, type, default, tpu))
end
#--------------------------------------------------------------------------
# Quick ID
def retrieve_id(shop)
for i in 0...@shops.size
if @shops[i].name == shop
return i
end
end
end
#--------------------------------------------------------------------------
# Created to let you use $eco.price to check price
def price(shop, item, group, sell = false)
if shop.is_a?(Fixnum)
@id = shop
@name = @shops[@id].name
else
@name = shop
@id = retrieve_id(shop)
end
for i in 0...@shops[@id].items.size
@i = i
if @shops[@id].items[i].item == item and @shops[@id].items[i].type == group
item_id = i
break
end
end
if item_id
return @shops[@id].items[item_id].price(sell)
else
case group
when 0
item = $data_items[item]
when 1
item = $data_weapons[item]
when 2
item = $data_armors[item]
end
return item.price * 3
end
end
end
# Addition to scene_title to set $eco
class Scene_Title
alias eco_scene_title_cng command_new_game
def command_new_game
eco_scene_title_cng
$eco = Game_Economy.new
end
end
# Addition to scene_map to restock items
class Scene_Map
alias eco_scene_map_update update
def update
if ES::RESTOCK
$eco.restock
end
eco_scene_map_update
end
end
# Addition to scene_load and scene_save to store data
class Scene_Load < Scene_File
alias eco_scene_load_rsd read_save_data
def read_save_data(file)
eco_scene_load_rsd(file)
$eco = Marshal.load(file)
end
end
class Scene_Save < Scene_File
alias eco_scene_save_wsd write_save_data
def write_save_data(file)
eco_scene_save_wsd(file)
Marshal.dump($eco, file)
end
end
# Scene classes.. They're called Eco_*original name* so you can still use
# The default shop without my nifty system :)
class Window_ShopCommand
def draw_item(index, color = normal_color)
self.contents.font.color = color
rect = Rect.new(4 + index * 160, 0, self.contents.width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.draw_text(rect, @commands[index])
end
#--------------------------------------------------------------------------
def disable_item(index)
self.contents.clear
for i in 0...@item_max
if i == index
draw_item(i, disabled_color)
else
draw_item(i)
end
end
end
end
class Eco_Scene_Shop
def initialize(shop)
if shop.is_a?(Fixnum)
@id = shop
@name = $eco.shops[@id].name
else
@name = shop
for i in 0...$eco.shops.size
if $eco.shops[i].name == @name
@id = i
break
end
end
end
if @name != $eco.shops[@id].name
print "Error finding shop: " + shop
end
main
end
#--------------------------------------------------------------------------
def main
@help_window = Window_Help.new
if ES::SHOPNAME
@help_window.set_text($eco.shops[@id].name)
else
@help_window.set_text("")
end
@command_window = Window_ShopCommand.new
if $eco.shops[@id].trade_type == "sell"
@command_window.disable_item(0)
elsif $eco.shops[@id].trade_type == "buy"
@command_window.disable_item(1)
end
@gold_window = Window_Gold.new
@gold_window.x = 480
@gold_window.y = 64
@dummy_window = Window_Base.new(0, 128, 640, 352)
@buy_window = Eco_Window_ShopBuy.new(@id)
@buy_window.active = false
@buy_window.visible = false
@buy_window.help_window = @help_window
@sell_window = Eco_Window_ShopSell.new
@sell_window.active = false
@sell_window.visible = false
@sell_window.help_window = @help_window
@number_window = Eco_Window_ShopNumber.new
@number_window.active = false
@number_window.visible = false
@status_window = Window_ShopStatus.new
@status_window.visible = false
@select_window = Window_Command.new(160, ["All", "Items", "Weapons", "Armor"])
@select_window.x = 240
@select_window.y = 180
@select_window.active = false
@select_window.visible = false
itemstock = false
weaponstock = false
armorstock = false
for i in $eco.shops[@id].items
itemstock = true if i.type == 0
weaponstock = true if i.type == 1
armorstock = true if i.type == 2
end
@select_window.disable_item(1) if !itemstock and !weaponstock and !armorstock
@select_window.disable_item(1) if !itemstock
@select_window.disable_item(2) if !weaponstock
@select_window.disable_item(3) if !armorstock
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@help_window.dispose
@command_window.dispose
@gold_window.dispose
@dummy_window.dispose
@buy_window.dispose
@sell_window.dispose
@number_window.dispose
@status_window.dispose
@select_window.dispose
end
#--------------------------------------------------------------------------
def update
@help_window.update
@command_window.update
@gold_window.update
@dummy_window.update
@buy_window.update
@sell_window.update
@number_window.update
@status_window.update
@select_window.update
if @command_window.active
update_command
return
end
if @sell_window.active == true or @buy_window.active == true
itemstock = false
weaponstock = false
armorstock = false
for i in $eco.shops[@id].items
itemstock = true if i.type == 0
weaponstock = true if i.type == 1
armorstock = true if i.type == 2
end
normal_color = Color.new(255, 255, 255, 255)
if !itemstock and !weaponstock and !armorstock
@select_window.disable_item(0)
else
@select_window.draw_item(0, normal_color)
end
if !itemstock
@select_window.disable_item(1)
else
@select_window.draw_item(1, normal_color)
end
if !weaponstock
@select_window.disable_item(2)
else
@select_window.draw_item(2, normal_color)
end
if !armorstock
@select_window.disable_item(3)
else
@select_window.draw_item(3, normal_color)
end
end
if @buy_window.active
@sell_window.refresh
update_buy
return
end
if @sell_window.active
@buy_window.refresh
update_sell
return
end
if @number_window.active
update_number
return
end
if @select_window.active
update_select
return
end
end
#--------------------------------------------------------------------------
def update_command
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 @command_window.index
when 0
if $eco.shops[@id].trade_type != "sell"
$game_system.se_play($data_system.decision_se)
@command_window.active = false
if ES::CT
@select_window.visible = true
@select_window.active = true
else
$game_system.se_play($data_system.decision_se)
@buy_window.category = 3
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@status_window.visible = true
end
else
$game_system.se_play($data_system.buzzer_se)
end
when 1
if $eco.shops[@id].trade_type != "buy"
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@dummy_window.visible = false
@sell_window.active = true
@sell_window.visible = true
else
$game_system.se_play($data_system.buzzer_se)
end
when 2
$game_system.se_play($data_system.decision_se)
$scene = Scene_Map.new
end
return
end
end
#--------------------------------------------------------------------------
def update_buy
@status_window.item = @buy_window.item
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@dummy_window.visible = true
@buy_window.active = false
@buy_window.visible = false
@status_window.visible = false
@status_window.item = nil
if ES::SHOPNAME
@help_window.set_text($eco.shops[@id].name)
else
@help_window.set_text("")
end
return
end
if Input.trigger?(Input::C)
@item = @buy_window.item
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
group = 0
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
group = 1
when RPG::Armor
number = $game_party.armor_number(@item.id)
group = 2
end
for i in $eco.shops[@id].items
@item_data = i if i.item == @item.id and i.type == group
end
eco_max = @item_data.stock
if @item == nil or $eco.price(@id, @item.id, @item_data.type) > $game_party.gold or 0 >= eco_max
$game_system.se_play($data_system.buzzer_se)
return
end
if number == 99
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
@buy_window.active = false
@buy_window.visible = false
@number_window.set(@id, @item, @item_data.type)
@number_window.active = true
@number_window.visible = true
end
end
#--------------------------------------------------------------------------
def update_sell
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@sell_window.active = false
@sell_window.visible = false
@status_window.item = nil
if ES::SHOPNAME
@help_window.set_text($eco.shops[@id].name)
else
@help_window.set_text("")
end
@command_window.active = true
@dummy_window.visible = true
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
return
end
if Input.trigger?(Input::C)
@item = @sell_window.item
@status_window.item = @item
case @item
when RPG::Item
group = 0
when RPG::Weapon
group = 1
when RPG::Armor
group = 2
end
if @item == nil or $eco.price(@id, @item.id, group, true) == 0
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
@sell_window.active = false
@sell_window.visible = false
@number_window.set(@id, @item, group, sell = true)
@number_window.active = true
@number_window.visible = true
@status_window.visible = true
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
end
end
#--------------------------------------------------------------------------
def update_number
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@number_window.active = false
@number_window.visible = false
case @command_window.index
when 0
@buy_window.active = true
@buy_window.visible = true
when 1
@sell_window.active = true
@sell_window.visible = true
@status_window.visible = false
end
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.shop_se)
@number_window.active = false
@number_window.visible = false
case @command_window.index
when 0
case @item
when RPG::Item
$game_party.gain_item(@item.id, @number_window.number)
group = 0
when RPG::Weapon
$game_party.gain_weapon(@item.id, @number_window.number)
group = 1
when RPG::Armor
$game_party.gain_armor(@item.id, @number_window.number)
group = 2
end
for i in 0...$eco.shops[@id].items.size
@item_id = i if $eco.shops[@id].items[i].item == @item.id and $eco.shops[@id].items[i].type == group
end
for i in 1..@number_window.number
$eco.shops[@id].items[@item_id].stock -= 1
end
if $eco.shops[@id].items[@item_id].stock == 0 and $eco.shops[@id].items[@item_id].default == 0
$eco.shops[@id].items.delete_at(@item_id)
$eco.shops[@id].items.compact
end
$game_party.lose_gold(@number_window.total_price)
@gold_window.refresh
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
@status_window.refresh
@buy_window.active = true
@buy_window.visible = true
when 1
case @item
when RPG::Item
$game_party.lose_item(@item.id, @number_window.number)
group = 0
when RPG::Weapon
$game_party.lose_weapon(@item.id, @number_window.number)
group = 1
when RPG::Armor
$game_party.lose_armor(@item.id, @number_window.number)
group = 2
end
for i in 0...$eco.shops[@id].items.size
@item_id = i if $eco.shops[@id].items[i].item == @item.id and $eco.shops[@id].items[i].type == group
end
for i in 0...@number_window.number
if !@item_id
$eco.add_item(@id, @item.id, group, 0, 0)
for i in 0...$eco.shops[@id].items.size
@item_id = i if $eco.shops[@id].items[i].item == @item.id and $eco.shops[@id].items[i].type == group
end
end
$eco.shops[@id].items[@item_id].stock += 1
end
$game_party.gain_gold(@number_window.total_price)
@gold_window.refresh
@sell_window.refresh
@status_window.refresh
@sell_window.active = true
@sell_window.visible = true
@status_window.visible = false
end
return
end
end
#--------------------------------------------------------------------------
def update_select
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@select_window.visible = false
@select_window.active = false
@command_window.active = true
return
end
if Input.trigger?(Input::C)
itemstock = false
weaponstock = false
armorstock = false
for i in $eco.shops[@id].items
itemstock = true if i.type == 0
weaponstock = true if i.type == 1
armorstock = true if i.type == 2
end
case @select_window.index
when 0
$game_system.se_play($data_system.decision_se)
@buy_window.category = 3
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
@select_window.visible = false
@select_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@status_window.visible = true
when 1
if itemstock
$game_system.se_play($data_system.decision_se)
@buy_window.category = 0
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
@select_window.visible = false
@select_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@status_window.visible = true
else
$game_system.se_play($data_system.buzzer_se)
end
when 2
if weaponstock
$game_system.se_play($data_system.decision_se)
@buy_window.category = 1
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
@select_window.visible = false
@select_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@status_window.visible = true
else
$game_system.se_play($data_system.buzzer_se)
end
when 3
if armorstock
$game_system.se_play($data_system.decision_se)
@buy_window.category = 2
@buy_window.reset
@buy_window.refresh
@buy_window.help_window = @help_window
@select_window.visible = false
@select_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@status_window.visible = true
else
$game_system.se_play($data_system.buzzer_se)
end
end
return
end
end
end
class Eco_Window_ShopBuy < Window_Selectable
attr_accessor :category
#--------------------------------------------------------------------------
def initialize(shop)
@id = shop
@name = $eco.shops[@id].name
@data = []
@data_type = []
@category = 3
super(0, 128, 368, 352)
refresh
self.index = 0
end
#--------------------------------------------------------------------------
def reset
@data = []
@data_type = []
@ecoitem = nil
self.index = 0
return
end
#--------------------------------------------------------------------------
def item
data = @data[self.index]
case @data_type[self.index]
when 0
item = $data_items[data]
when 1
item = $data_weapons[data]
when 2
item = $data_armors[data]
end
return item
end
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@compitable = []
for i in $eco.shops[@id].items
@compitable.push(i.item) if i.type == @category or @category == 3
end
@item_max = @compitable.length
self.contents = Bitmap.new(width - 32, row_max * 32 + 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
for i in 0...$eco.shops[@id].items.size
pie = $eco.shops[@id].items[i]
if pie.type == @category or @category == 3
draw_item(i)
@data.push(pie.item)
@data_type.push(pie.type)
end
end
end
#--------------------------------------------------------------------------
def draw_item(index)
item = $eco.shops[@id].items[index]
number = $game_party.item_number(index)
if item.type == 0
@ecoitem = $data_items[item.item]
elsif item.type == 1
@ecoitem = $data_weapons[item.item]
elsif item.type == 2
@ecoitem = $data_armors[item.item]
end
self.contents.font.size = $fontsize
if $eco.price(@id, item.item, item.type) <= $game_party.gold and number < 99 and item.stock != 0
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4
y = @data.length * 32
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(@ecoitem.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, @ecoitem.name, 0)
self.contents.draw_text(x + 240, y, 88, 32, $eco.price(@id, item.item, item.type).to_s, 2)
ax = contents.text_size(@ecoitem.name).width + 36
self.contents.font.size = 18
self.contents.draw_text(ax, y - 6, 212, 32, "* " + item.stock.to_s, 0)
end
#--------------------------------------------------------------------------
def update_help
if ES::SHOPNAME
@help_window.set_text(self.item == nil ? $eco.shops[@id].name : self.item.description)
else
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
end
class Eco_Window_ShopSell < Window_Selectable
#--------------------------------------------------------------------------
def initialize
super(0, 128, 640, 352)
@column_max = 2
refresh
self.index = 0
end
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
def refresh
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)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
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 item.price > 0
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 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)
self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
end
#--------------------------------------------------------------------------
def update_help
if ES::SHOPNAME
@help_window.set_text(self.item == nil ? $eco.shops[@id].name : self.item.description)
else
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
end
class Window_Command
def enable_item(index)
draw_item(index, normal_color)
end
end
class Eco_Window_ShopNumber < Window_Base
attr_reader :number
attr_reader :total_price
#--------------------------------------------------------------------------
def initialize
super(0, 128, 368, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
@item = nil
@max = 1
@number = 1
end
#--------------------------------------------------------------------------
def set(shop, item, group, sell = false)
@shop = shop
@item = item
@group = group
@sell = sell
@number = 1
@item_id = nil
for i in 0...$eco.shops[@shop].items.size
if $eco.shops[@shop].items[i].item == @item.id and $eco.shops[@shop].items[i].type == @group
@item_id = i
break
end
end
refresh
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_item_name(@item, 4, 96)
self.contents.font.color = normal_color
self.contents.draw_text(272, 96, 32, 32, "×")
self.contents.draw_text(308, 96, 24, 32, @number.to_s, 2)
self.cursor_rect.set(304, 96, 32, 32)
domination = $data_system.words.gold
cx = contents.text_size(domination).width
@total_price = 0
@fake_price = 0
if @item_id
@fake_stock = $eco.shops[@shop].items[@item_id].stock
else
@fake_stock = 0
end
if @sell
case @group
when 0
@stock = $game_party.item_number(@item.id)
when 1
@stock = $game_party.weapon_number(@item.id)
when 2
@stock = $game_party.armor_number(@item.id)
end
for i in 0...@number
@total_price += calprice(true)
@fake_stock += 1
end
else
@stock = $eco.shops[@shop].items[@item_id].stock
for i in 0...@stock
@fake_price += calprice
@fake_stock -= 1
@mstock = $eco.shops[@shop].items[@item_id].stock - @fake_stock
@mprice = @fake_price + calprice
if @mprice >= $game_party.gold or @fake_stock <= 0
@max = @mstock
break
end
end
for i in 0...@number
@fake_stock = $eco.shops[@shop].items[@item_id].stock - i
@total_price += calprice
end
end
self.contents.font.color = normal_color
self.contents.draw_text(4, 160, 328-cx-2, 32, @total_price.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(332-cx, 160, cx, 32, domination, 2)
end
#--------------------------------------------------------------------------
def update
super
if self.active
if @sell
@max = @stock
end
if Input.repeat?(Input::RIGHT) and @number < @max
$game_system.se_play($data_system.cursor_se)
@number += 1
refresh
end
if Input.repeat?(Input::LEFT) and @number > 1
$game_system.se_play($data_system.cursor_se)
@number -= 1
refresh
end
if Input.repeat?(Input::UP) and @number < @max
$game_system.se_play($data_system.cursor_se)
@number = [@number + 10, @max].min
refresh
end
if Input.repeat?(Input::DOWN) and @number > 1
$game_system.se_play($data_system.cursor_se)
@number = [@number - 10, 1].max
refresh
end
end
end
#--------------------------------------------------------------------------
def calprice(sell = false)
@baseprice = @item.price.to_f
if @item_id
if $eco.shops[@shop].items[@item_id].default != 0
range = $eco.shops[@shop].items[@item_id].default.to_f / @fake_stock.to_f
none = false
else
none = true
end
else
none = true
end
if none
if sell
range = 1.30
for i in 0...@fake_stock
range -= 0.05 if range >= 0.80
end
else
range = 2.16
for i in 0...@fake_stock
range -= 0.16 if range >= 0.70
end
end
end
range = 1.25 if range.nan?
if sell == true
@base = @baseprice / 2
if range == 1
@newprice = @base
elsif range > 1
@newprice = @base * (range * range)
else
@newprice = @base * range
end
@newprice = @baseprice * 3 if @newprice > @baseprice * 3
@newprice = @baseprice / 3 if @newprice < @baseprice / 3
else
@newprice = @baseprice * range
@newprice = @baseprice * 2 if @newprice > @baseprice * 2
@newprice = @baseprice / 2 if @newprice < @baseprice / 2
end
@newprice = @newprice.round
return @newprice
end
end
# EoF, Last edit 09/11/2005 21:57 GMT, 1070 lines total.[/spoiler]
alright, it's a big script, but dont be scared by it, the main thing i need help with is just a command i cannot figure out how to do.
here's the instructions that comes with the script:
[spoiler=Instructions]
# How to use:
# Step 1:
# -Create a shop using $eco.add_shop("name", "trade_type", "description")
# -"name", the store name, to identify shops, cant make 2 shops with same name
# -"trade_type", Standard it is both so you dont have to enter it, use "buy"
# -Or "sell" for buy/sell only shops.
# Step 2:
# -Add items using $eco.add_item(shop, item, type, amount, time_per_unit)
# -Shop can be either shop name or id.
# -Item is just the item id in the database.
# -Type is item(0), weapon(1) or armor(2)
# -Amount is the amount of items automatic in stock and it will restock to.
# -Time_per_unit is the time for 1 item to restock.
# Step 3:
# -Use call script; $scene = Eco_Scene_Shop.new(shopname/id)
# Note:
# -You can also use step 1 and 2 in Game_Economy, def initialize if you prefer.
# -Just replace $eco.shops with just @shops.
# Extra's:
# -If you are going to add items, it might be handier to use ID instead of name
# -For quick acces to ID use @id = $eco.retrieve_id(shopname) to put it in a string
# -Use module ES to adjust quick settings.
# -If you dont like the way i used to set prices, adjust def price in Data_Shopitems
# -And def calprice in Eco_Window_ShopNumber
[/spoiler]
what im wanting to be able to do is make it so that when a player does a certain task, more of certain items become in stock. Instead of the shop restocking over time, they will have to do tasks in order to get more items in the shop stock.
just using $eco.add_item(shop, item, type, amount, time_per_unit) adds a whole new slot for the item to the shop, it doesnt add more of the same item. Basically, if i have 3 Potions, and I use $eco.add_item(shop, item, type, amount, time_per_unit) to add 2 more, i wont have 5 potions, i will have a shop slot of 3 potions, and another slot of 2 potions... if possible, could someone please edit the script so that it checks to see if the item being put into the shop is already in the shop, and if it is, adds to the current stock of the item in it?
alright, this topic can be locked/trashed because it's been figured out
Can you add Resolved so people know