[RMVX ACE] ADDING A STORE ALL FUNCTION TO GALV'S ITEM/BANK STORAGE
Posts
Pages:
1
Hi all Kumori here!
So let's cut to the chase. In my game, there are certain points were I'd like the player's inventory to be completely empty.
I would like to do this without removing all of the items. My game uses Galv's Item/Bank Storage V.1.9
I'd like a simple script call or function to move your entire current inventory to the
bank including you're items, weapons, key items and armor.
I really do need this script for the game I'm working on I'll give you full credit in the credits if
you can add this function thanks! :D
So let's cut to the chase. In my game, there are certain points were I'd like the player's inventory to be completely empty.
I would like to do this without removing all of the items. My game uses Galv's Item/Bank Storage V.1.9
I'd like a simple script call or function to move your entire current inventory to the
bank including you're items, weapons, key items and armor.
I really do need this script for the game I'm working on I'll give you full credit in the credits if
you can add this function thanks! :D
#------------------------------------------------------------------------------#
# Galv's Item/Bank Storage
#------------------------------------------------------------------------------#
# For: RPGMAKER VX ACE
# Version 1.9
#------------------------------------------------------------------------------#
# 2016-06-09 - Version 1.9 - Bug with removing an entire stack fixed
# 2015-11-12 - Version 1.8 - Bug with stored item stacks and counting.
# 2012-10-24 - Version 1.7 - Added multiple storages controlled with variable.
# - Changed name to Item/Bank Storage
# - changed alias naming for compatibility
# 2012-10-19 - Version 1.6 - Bug fixes
# 2012-10-19 - Version 1.5 - Fixed a max gold and withdrawing issue.
# - Added deposit all and withdraw all gold buttons.
# - party gold and item limits can now be set or use
# - the limit from a limit breaking script. (in theory)
# 2012-10-18 - Version 1.4 - Other small fixes
# 2012-10-18 - Version 1.3 - Added banking SE
# 2012-10-18 - Version 1.2 - Added gold storage and more script calls
# 2012-10-17 - Version 1.1 - Added script calls to control stored items.
# 2012-10-16 - Version 1.0 - Released
#------------------------------------------------------------------------------#
# An item storage script. Allows the player to store as many items as he/she
# requires in bank-like storage that can be accessed from anywhere.
#
# This script differs to my "Multiple Storage containers" script in that you
# can have "banks" that store items and gold and can be accessed from anywhere.
# It was designed to be used for one bank, but now has option to have more if
# required.
#
# My "Multiple Storage Containers" script stores only items within certain
# events that can only be accessed by activating the particular event. This was
# designed for location specific containers like chests, barrels, etc.
#
# Here are some script calls that might be useful:
#------------------------------------------------------------------------------#
#
# open_storage # Opens the item storage scene
#
# store_add(type, id, amount) # creates an item in storage
# store_rem(type, id, amount) # destroys an item in storage
# store_count(type, id) # returns amount of an item in storage
#
# bank_add(amount) # adds amount of gold to bank
# bank_rem(amount) # removes amount of gold from bank
# bank_count # returns amount of gold in bank
#
#------------------------------------------------------------------------------#
# EXPLAINATION:
# type this can be "weapon", "armor" or "item"
# id the ID of the item/armor/weapon
# amount the number of the item/armor/weapon/gold you want to remove
#
# EXAMPLE OF USE:
# store_add("weapon", 5, 20)
# store_rem("item", 18, 99)
# store_count("armor", 1)
# bank_add(100)
#------------------------------------------------------------------------------#
# More setup options further down.
#------------------------------------------------------------------------------#
$imported = {} if $imported.nil?
$imported["Item_Storage"] = true
module Storage
#------------------------------------------------------------------------------#
# SCRIPT SETUP OPTIONS
#------------------------------------------------------------------------------#
# BOX VARIABLE
BOX_VAR = 0 # This is the variable ID to use to determine which box you are
# adding/removing items from. Set the variable to a box number
# right before any add/remove or opening storage script calls
# to tell them which box they will affect.
# Set to 0 if you only want 1 box storage in your game. You
# then don't have to change a variable before each script call.
# COMMAND LIST VOCAB
STORE = "Store"
REMOVE = "Take"
CANCEL = "Exit"
# OTHER VOCAB
IN_STORAGE = "Storage"
IN_INVENTORY = "In Bag"
GOLD_INVENTORY = "Party:"
GOLD_BANKED = "Banked:"
BANK_HELP = "Hold DOWN to deposit. Hold UP to withdraw." + "\n" +
"Press R to deposit all. Press L to withdraw all."
# OTHER OPTIONS
SE = ["Open", 90, 100] # Sound effect when storing/removing an item
SE_BANK = ["Shop", 50, 150] # Repeating sound effect when banking gold
# ["SE Name", volume, pitch]
STORE_PRICELESS = true # Items worth 0 can be stored? true or false
STORE_KEY = true # Key items can be stored? true or false
# PARTY LIMITS
# NOTE: These limits set to 0 will use the default limits. In theory this will
# be compatible with a limit breaker script by leaving them at 0. Or you can
# set the party limits below to whatever you like.
MAX_GOLD = 0 # Max gold your PARTY can carry.
# This will overwrite the default limit.
# 0 means do not use this.
MAX_ITEMS = 0 # Max items your PARTY can carry.
# This will overwrite the default limit.
# 0 means do not use this.
#------------------------------------------------------------------------------#
# SCRIPT SETUP OPTIONS
#------------------------------------------------------------------------------#
end
class Scene_ItemBank < Scene_MenuBase
def start
super
check_storage_exists
create_help_window
create_command_window
create_dummy_window
create_bank_window
create_number_window
create_status_window
create_category_window
create_take_window
create_give_window
end
def check_storage_exists
if $game_party.multi_storage.nil?
$game_party.create_storage_contents
end
end
#--------------------------------------------------------------------------
# Create Windows
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_BankCommand.new(Graphics.width)
@command_window.viewport = @viewport
@command_window.y = @help_window.height
@command_window.set_handler(:give, method(:command_give))
@command_window.set_handler(:take, method(:command_take))
@command_window.set_handler(:cancel, method(:return_scene))
end
def create_dummy_window
wy = @command_window.y + @command_window.height
wh = Graphics.height - wy
@dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
@dummy_window.viewport = @viewport
end
def create_bank_window
@bank_window = Window_Bank.new
@bank_window.viewport = @viewport
@bank_window.x = 0
@bank_window.y = @help_window.height + @command_window.height
@bank_window.hide
@bank_window.set_handler(:ok, method(:on_bank_cancel))
@bank_window.set_handler(:cancel, method(:on_bank_cancel))
end
def create_number_window
wy = @dummy_window.y
wh = @dummy_window.height
@number_window = Window_BankNumber.new(0, wy, wh)
@number_window.viewport = @viewport
@number_window.hide
@number_window.set_handler(:ok, method(:on_number_ok))
@number_window.set_handler(:cancel, method(:on_number_cancel))
end
def create_status_window
wx = @number_window.width
wy = @dummy_window.y
ww = Graphics.width - wx
wh = @dummy_window.height
@status_window = Window_BankItems.new(wx, wy, ww, wh)
@status_window.viewport = @viewport
@status_window.hide
end
def create_category_window
@category_window = Window_ItemCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.y = @dummy_window.y
@category_window.hide.deactivate
@category_window.set_handler(:ok, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:on_category_cancel))
end
def create_give_window
wy = @category_window.y + @category_window.height
wh = Graphics.height - wy
@give_window = Window_BankGive.new(0, wy, Graphics.width, wh)
@give_window.viewport = @viewport
@give_window.help_window = @help_window
@give_window.hide
@give_window.set_handler(:ok, method(:on_give_ok))
@give_window.set_handler(:cancel, method(:on_give_cancel))
@category_window.item_window = @give_window
end
def create_take_window
wy = @command_window.y + @command_window.height
wh = Graphics.height - wy
@take_window = Window_BankTake.new(0, wy, Graphics.width, wh)
@take_window.viewport = @viewport
@take_window.help_window = @help_window
@take_window.hide
@take_window.set_handler(:ok, method(:on_take_ok))
@take_window.set_handler(:cancel, method(:on_take_cancel))
@category_window.item_window = @take_window
end
#--------------------------------------------------------------------------
# * Activate Windows
#--------------------------------------------------------------------------
def activate_give_window
@category_window.show
@give_window.refresh
@give_window.show.activate
@status_window.hide
end
def activate_take_window
@take_window.select(0)
@take_window.refresh
@take_window.show.activate
@status_window.hide
end
def activate_bank_window
@bank_window.refresh
@bank_window.show.activate
@help_window.set_text(Storage::BANK_HELP)
end
#--------------------------------------------------------------------------
# HANDLER METHODS
#--------------------------------------------------------------------------
def on_category_ok
activate_give_window
@give_window.select(0)
end
def on_category_cancel
@command_window.activate
@dummy_window.show
@category_window.hide
@give_window.hide
end
def command_give
@dummy_window.hide
@category_window.show.activate
@give_window.show
@give_window.unselect
@give_window.refresh
end
def on_give_ok
@item = @give_window.item
if @item.nil?
RPG::SE.stop
Sound.play_buzzer
@give_window.activate
@give_window.refresh
return
else
@status_window.item = @item
@category_window.hide
@give_window.hide
@number_window.set(@item, max_give)
@number_window.show.activate
@status_window.show
end
end
def on_give_cancel
@give_window.unselect
@category_window.activate
@status_window.item = nil
@help_window.clear
end
def command_take
@dummy_window.hide
activate_take_window
@take_window.show
@take_window.refresh
end
def command_bank
#@dummy_window.hide
activate_bank_window
@bank_window.show
@bank_window.refresh
end
def on_bank_cancel
@command_window.activate
@dummy_window.show
@category_window.hide
@bank_window.hide
@help_window.clear
end
def on_take_ok
@item = @take_window.item
if @item.nil? || $game_party.multi_storage.empty? || $game_party.item_number(@item) == $game_party.max_item_number(@item)
RPG::SE.stop
Sound.play_buzzer
@take_window.activate
@take_window.refresh
return
elsif
@item = @take_window.item
@status_window.item = @item
@take_window.hide
@number_window.set(@item, max_take)
@number_window.show.activate
@status_window.show
end
end
def on_take_cancel
@take_window.unselect
@command_window.activate
@dummy_window.show
@take_window.hide
@status_window.item = nil
@help_window.clear
end
def on_number_ok
RPG::SE.new(Storage::SE[0], Storage::SE[1], Storage::SE[2]).play
case @command_window.current_symbol
when :take
do_take(@number_window.number)
when :give
do_give(@number_window.number)
end
end_number_input
@status_window.refresh
end
def on_number_cancel
Sound.play_cancel
end_number_input
end
def end_number_input
@number_window.hide
case @command_window.current_symbol
when :take
activate_take_window
when :give
activate_give_window
end
end
#--------------------------------------------------------------------------
# * Giving and taking methods
#--------------------------------------------------------------------------
def max_take
if $game_party.multi_storage(@item) > $game_party.max_item_number(@item) - $game_party.item_number(@item)
$game_party.max_item_number(@item) - $game_party.item_number(@item)
else
$game_party.multi_storage(@item)
end
end
def max_give
$game_party.item_number(@item)
end
def do_give(number)
$game_party.lose_item(@item, number)
if $game_party.multi_storage(@item).nil? || $game_party.multi_storage(@item) <= 0
$game_party.multi_storage_set(@item,number)
else
$game_party.multi_storage_change(@item,number)
end
end
def do_take(number)
return if @item.nil?
$game_party.gain_item(@item, number)
$game_party.multi_storage_change(@item,-number)
#$game_party.multi_storage.delete(@item) if $game_party.multi_storage(@item) <= 0
if $game_party.multi_storage.empty?
@take_window.activate
end
end
end # Scene_ItemBank < Scene_MenuBase
#------------------------------------------------------------------------------#
# Window Stored Items
#------------------------------------------------------------------------------#
class Window_StoreList_Bank < Window_Selectable
def initialize(x, y, width, height)
super
@category = :none
@data = []
end
def category=(category)
return if @category == category
@category = category
refresh
self.oy = 0
end
def col_max
return 2
end
def item_max
@data ? @data.size : 1
end
def item
@data && index >= 0 ? @data[index] : nil
end
def current_item_enabled?
enable?(@data[index])
end
def include?(item)
case @category
when :item
item.is_a?(RPG::Item) && !item.key_item?
when :weapon
item.is_a?(RPG::Weapon)
when :armor
item.is_a?(RPG::Armor)
when :key_item
item.is_a?(RPG::Item) && item.key_item?
else
false
end
end
def enable?(item)
$game_party.multi_storage.has_key?(item)
end
def make_item_list
@data = $game_party.multi_storage_all.keys {|item| include?(item) }
@data.push(nil) if include?(nil)
end
def select_last
select(@data.index($game_party.last_item.object) || 0)
end
def draw_item(index)
item = @data[index]
if item
rect = item_rect(index)
rect.width -= 4
draw_item_name(item, rect.x, rect.y, enable?(item))
draw_item_number(rect, item)
end
end
def draw_item_number(rect, item)
draw_text(rect, sprintf(":%2d", $game_party.multi_storage(item)), 2)
end
def update_help
@help_window.set_item(item)
end
def refresh
make_item_list
create_contents
draw_all_items
end
end # Window_StoreList_Bank < Window_Selectable
#------------------------------------------------------------------------------#
# Window Stored Item amount
#------------------------------------------------------------------------------#
class Window_BankNumber < Window_Selectable
attr_reader :number
def initialize(x, y, height)
super(x, y, window_width, height)
@item = nil
@max = 1
@number = 1
end
def window_width
return 304
end
def set(item, max)
@item = item
@max = max
@number = 1
refresh
end
def refresh
contents.clear
draw_item_name(@item, 0, item_y)
draw_number
end
def draw_number
change_color(normal_color)
draw_text(cursor_x - 28, item_y, 22, line_height, "×")
draw_text(cursor_x, item_y, cursor_width - 4, line_height, @number, 2)
end
def item_y
contents_height / 2 - line_height * 3 / 2
end
def cursor_width
figures * 10 + 12
end
def cursor_x
contents_width - cursor_width - 4
end
def figures
return 2
end
def update
super
if active
last_number = @number
update_number
if @number != last_number
Sound.play_cursor
refresh
end
end
end
def update_number
change_number(1) if Input.repeat?(:RIGHT)
change_number(-1) if Input.repeat?(:LEFT)
change_number(10) if Input.repeat?(:UP)
change_number(-10) if Input.repeat?(:DOWN)
end
def change_number(amount)
@number = [[@number + amount, @max].min, 1].max
end
def update_cursor
cursor_rect.set(cursor_x, item_y, cursor_width, line_height)
end
end # Window_BankNumber < Window_Selectable
#------------------------------------------------------------------------------#
# Window Store Item Status
#------------------------------------------------------------------------------#
class Window_BankItems < Window_Base
def initialize(x, y, width, height)
super(x, y, width, height)
@item = nil
@page_index = 0
refresh
end
def refresh
contents.clear
draw_possession(4, 0)
draw_stored(4, line_height)
draw_equip_info(4, line_height * 2) if @item.is_a?(RPG::EquipItem)
end
def item=(item)
@item = item
refresh
end
def draw_possession(x, y)
rect = Rect.new(x, y, contents.width - 4 - x, line_height)
change_color(system_color)
draw_text(rect, Storage::IN_INVENTORY)
change_color(normal_color)
draw_text(rect, $game_party.item_number(@item), 2)
end
def draw_stored(x, y)
rect = Rect.new(x, y, contents.width - 4 - x, line_height)
change_color(system_color)
draw_text(rect, Storage::IN_STORAGE)
change_color(normal_color)
stored_amount = $game_party.multi_storage(@item)
stored_amount = 0 if stored_amount.nil?
draw_text(rect, stored_amount, 2)
end
def draw_equip_info(x, y)
status_members.each_with_index do |actor, i|
draw_actor_equip_info(x, y + line_height * (i * 2.4), actor)
end
end
def status_members
$game_party.members[@page_index * page_size, page_size]
end
def page_size
return 4
end
def page_max
($game_party.members.size + page_size - 1) / page_size
end
def draw_actor_equip_info(x, y, actor)
enabled = actor.equippable?(@item)
change_color(normal_color, enabled)
draw_text(x, y, 112, line_height, actor.name)
item1 = current_equipped_item(actor, @item.etype_id)
draw_actor_param_change(x, y, actor, item1) if enabled
draw_item_name(item1, x, y + line_height, enabled)
end
def draw_actor_param_change(x, y, actor, item1)
rect = Rect.new(x, y, contents.width - 4 - x, line_height)
change = @item.params[param_id] - (item1 ? item1.params[param_id] : 0)
change_color(param_change_color(change))
draw_text(rect, sprintf("%+d", change), 2)
end
def param_id
@item.is_a?(RPG::Weapon) ? 2 : 3
end
def current_equipped_item(actor, etype_id)
list = []
actor.equip_slots.each_with_index do |slot_etype_id, i|
list.push(actor.equips[i]) if slot_etype_id == etype_id
end
list.min_by {|item| item ? item.params[param_id] : 0 }
end
def update
super
update_page
end
def update_page
if visible && Input.trigger?(:A) && page_max > 1
@page_index = (@page_index + 1) % page_max
refresh
end
end
end # Window_BankItems < Window_Base
#------------------------------------------------------------------------------#
# Window Give Item
#------------------------------------------------------------------------------#
class Window_BankGive < Window_ItemList
def initialize(x, y, width, height)
super(x, y, width, height)
end
def current_item_enabled?
enable?(@data[index])
end
def enable?(item)
if item.is_a?(RPG::Item)
return false if item.key_item? && !Storage::STORE_KEY
end
if Storage::STORE_PRICELESS
true
else
item && item.price > 0
end
end
end
#------------------------------------------------------------------------------#
# Window Take Item
#------------------------------------------------------------------------------#
class Window_BankTake < Window_StoreList_Bank
def initialize(x, y, width, height)
super(x, y, width, height)
end
def current_item_enabled?
enable?(@data[index])
end
def enable?(item)
$game_party.multi_storage[item] != 0 && $game_party.item_number(item) < $game_party.max_item_number(@item)
end
end
#------------------------------------------------------------------------------#
# Window Command
#------------------------------------------------------------------------------#
class Window_BankCommand < Window_HorzCommand
def initialize(window_width)
@window_width = window_width
super(0, 0)
end
def window_width
@window_width
end
def col_max
return 4
end
def make_command_list
add_command(Storage::STORE, :give)
add_command(Storage::REMOVE, :take)
add_command(Storage::CANCEL, :cancel)
end
end
#------------------------------------------------------------------------------#
# Window Bank
#------------------------------------------------------------------------------#
class Window_Bank < Window_Selectable
def initialize
super(0, 0, window_width, fitting_height(2))
refresh
@deposit_rate = 1
@withdraw_rate = 1
end
def window_width
return Graphics.width / 2
end
alias galv_bank_update update
def update
galv_bank_update
gold_transfer if self.active
end
def gold_transfer
if Input.repeat?(:DOWN) && $game_party.gold > 0 || Input.repeat?(:UP) && $game_party.gold_stored > 0 && $game_party.gold < $game_party.max_gold
RPG::SE.new(Storage::SE_BANK[0], Storage::SE_BANK[1], Storage::SE_BANK[2]).play
end
if Input.press?(:DOWN)
before = $game_party.gold
$game_party.lose_gold(@deposit_rate)
after = $game_party.gold
$game_party.gold_stored += before - after
@deposit_rate += 1
refresh
end
if Input.trigger?(:R) && !Input.press?(:DOWN) && !Input.press?(:UP)
return if $game_party.gold == 0
before = $game_party.gold
$game_party.lose_gold($game_party.gold)
after = $game_party.gold
$game_party.gold_stored += before - after
refresh
RPG::SE.new(Storage::SE_BANK[0], Storage::SE_BANK[1], Storage::SE_BANK[2]).play
end
if !Input.press?(:DOWN)
@deposit_rate = 1
end
if Input.press?(:UP)
return if $game_party.gold == $game_party.max_gold
@withdraw_rate = $game_party.gold_stored if @withdraw_rate >= $game_party.gold_stored
if @withdraw_rate + $game_party.gold > $game_party.max_gold
@withdraw_rate = $game_party.max_gold - $game_party.gold
end
before = $game_party.gold_stored
$game_party.gold_stored -= @withdraw_rate
after = $game_party.gold_stored
$game_party.gain_gold(before - after)
if $game_party.gold_stored == 0
return refresh
end
@withdraw_rate += 1
refresh
end
if Input.trigger?(:L) && !Input.press?(:DOWN) && !Input.press?(:UP)
take_all_gold = $game_party.gold_stored
return if $game_party.gold == $game_party.max_gold || $game_party.gold_stored == 0
if take_all_gold + $game_party.gold > $game_party.max_gold
take_all_gold = $game_party.max_gold - $game_party.gold
end
before = $game_party.gold_stored
$game_party.gold_stored -= take_all_gold
after = $game_party.gold_stored
$game_party.gain_gold(before - after)
refresh
RPG::SE.new(Storage::SE_BANK[0], Storage::SE_BANK[1], Storage::SE_BANK[2]).play
end
if !Input.press?(:UP)
@withdraw_rate = 1
end
end
def refresh
contents.clear
draw_gold_location(Storage::GOLD_INVENTORY, 0, 0, 250)
draw_currency_value(value, currency_unit, 4, 0, contents.width - 8)
draw_gold_location(Storage::GOLD_BANKED, 0, line_height * 1, 250)
draw_currency_value(value_stored, currency_unit, 4, line_height * 1, contents.width - 8)
end
def draw_gold_location(vocab, x, y, width)
change_color(system_color)
draw_text(x, y, width, line_height, vocab)
end
def value
$game_party.gold
end
def value_stored
$game_party.gold_stored
end
def currency_unit
Vocab::currency_unit
end
def open
refresh
super
end
end
#------------------------------------------------------------------------------#
# Game Party Additions
#------------------------------------------------------------------------------#
class Game_Party < Game_Unit
attr_accessor :multi_storage
attr_accessor :gold_stored
alias galv_bank_init_all_items init_all_items
def init_all_items
galv_bank_init_all_items
@storage = {}
@gold_stored = 0
end
def multi_storage(item = nil)
# Test for storage, create if not there.
@storage[$game_variables[Storage::BOX_VAR]] ||= {:w => {},:a => {}, :i => {}}
if !item
return @storage[$game_variables[Storage::BOX_VAR]]
else
type = mstore_type(item)
@storage[$game_variables[Storage::BOX_VAR]][type][item.id] ||= 0
return @storage[$game_variables[Storage::BOX_VAR]][type][item.id]
end
end
def multi_storage_all
all = {}
@storage[$game_variables[Storage::BOX_VAR]][:i].each { |id|
all[$data_items[id[0]]] = id[1] if id[1] > 0
}
@storage[$game_variables[Storage::BOX_VAR]][:w].each { |id|
all[$data_weapons[id[0]]] = id[1] if id[1] > 0
}
@storage[$game_variables[Storage::BOX_VAR]][:a].each { |id|
all[$data_armors[id[0]]] = id[1] if id[1] > 0
}
return all
end
def mstore_type(item)
if item.is_a?(RPG::Weapon)
return :w
elsif item.is_a?(RPG::Armor)
return :a
else
return :i
end
end
def multi_storage_change(item,amount)
type = mstore_type(item)
@storage[$game_variables[Storage::BOX_VAR]][type][item.id] ||= 0
@storage[$game_variables[Storage::BOX_VAR]][type][item.id] += amount
if @storage[$game_variables[Storage::BOX_VAR]][type][item.id] <= 0
@storage[$game_variables[Storage::BOX_VAR]][type].delete_if { |key,value|
value <= 0
}
end
end
def multi_storage_set(item, amount)
type = mstore_type(item)
@storage[$game_variables[Storage::BOX_VAR]][type][item.id] ||= 0
@storage[$game_variables[Storage::BOX_VAR]][type][item.id] = amount
if @storage[$game_variables[Storage::BOX_VAR]][type][item.id] <= 0
@storage[$game_variables[Storage::BOX_VAR]][type].delete_if { |key,value|
key >= 0
}
end
end
def gold_stored
@gold_stored
end
alias galv_bank_max_gold max_gold
def max_gold
return Storage::MAX_GOLD if Storage::MAX_GOLD > 0
galv_bank_max_gold
end
alias galv_bank_max_item_number max_item_number
def max_item_number(item)
return Storage::MAX_ITEMS if Storage::MAX_ITEMS > 0
return 99 if item.nil?
galv_bank_max_item_number(item)
end
end # Game_Party < Game_Unit
class Game_Interpreter
def store_add(type, id, amount)
if $game_party.multi_storage.nil?
$game_party.create_storage_contents
end
case type
when "weapon"
@item = $data_weapons[id]
when "item"
@item = $data_items[id]
when "armor"
@item = $data_armors[id]
end
if $game_party.multi_storage(@item).nil?
$game_party.multi_storage_set(@item,amount)
else
$game_party.multi_storage_change(@item,amount)
end
end
def store_rem(type, id, amount)
if $game_party.multi_storage.nil?
$game_party.create_storage_contents
end
case type
when "weapon"
@item = $data_weapons[id]
when "item"
@item = $data_items[id]
when "armor"
@item = $data_armors[id]
end
return if $game_party.multi_storage(@item).nil?
if $game_party.multi_storage(@item) <= amount
#$game_party.multi_storage.delete(@item)
$game_party.multi_storage_set(@item,-amount)
else
$game_party.multi_storage_change(@item,-amount)
end
end
def store_count(type, id)
if $game_party.multi_storage.nil?
$game_party.create_storage_contents
end
case type
when "weapon"
@item = $data_weapons[id]
when "item"
@item = $data_items[id]
when "armor"
@item = $data_armors[id]
end
# Issue here with item instance being different when game saves - therefore
# the count is incorrect.
# This issue is also persistant when adding things to storage
# needs fixing
p "Store item referring issue"
return 0 if $game_party.multi_storage(@item).nil?
$game_party.multi_storage(@item)
end
def bank_add(amount)
$game_party.gold_stored += amount
end
def bank_rem(amount)
$game_party.gold_stored -= amount
$game_party.gold_stored = 0 if $game_party.gold_stored < 0
end
def bank_count
$game_party.gold_stored
end
def open_storage
SceneManager.call(Scene_ItemBank)
end
end
I wasn't able to make this plugin work, but I came up with a couple of commands that should theoretically allow you to move a player's inventory yourself without using the windows. It will still have to be done manually instead of all items at once.
Try adding these lines to the Game_Interpreter class at the bottom of the script and calling them the same way you would other script calls:
Try adding these lines to the Game_Interpreter class at the bottom of the script and calling them the same way you would other script calls:
def force_give(type, id, amount)
if $game_party.multi_storage.nil?
$game_party.create_storage_contents
end
case type
when "weapon"
@item = $data_weapons[id]
when "item"
@item = $data_items[id]
when "armor"
@item = $data_armors[id]
end
if $game_party.multi_storage(@item).nil?
$game_party.multi_storage_set(@item,amount)
else
$game_party.multi_storage_change(@item,amount)
end
end
def force_take(number)
return if @item.nil?
$game_party.gain_item(@item, number)
$game_party.multi_storage_change(@item,-number)
#$game_party.multi_storage.delete(@item) if $game_party.multi_storage(@item) <= 0
if $game_party.multi_storage.empty?
@take_window.activate
end
end
Not 100% sure about storing key items, but...
...this seems to function.
*Edit: Code updated because I was only testing one type of item at a time, and generally failing at logic/math. Can confirm that this stores key items.
*Edit2: You don't have to put this function definition into the Game_Interpreter class. It can be placed into it's own code-section, or with random miscellaneoushacks scripts you might be using. As far as I'm aware, it can be used as as-is, as a regular function-call, and, can be called in classes/methods outside of Game_Interpreter.
def store_all while $game_party.items.size > 0 item = $game_party.items[0] store_add("item", item.id, $game_party.item_number(item)) $game_party.gain_item(item, $game_party.item_number(item) * -1) end while $game_party.weapons.size > 0 item = $game_party.weapons[0] store_add("weapon", item.id, $game_party.item_number(item)) $game_party.gain_item(item, $game_party.item_number(item) * -1) end while $game_party.armors.size > 0 item = $game_party.armors[0] store_add("armor", item.id, $game_party.item_number(item)) $game_party.gain_item(item, $game_party.item_number(item) * -1) end end
...this seems to function.
*Edit: Code updated because I was only testing one type of item at a time, and generally failing at logic/math. Can confirm that this stores key items.
*Edit2: You don't have to put this function definition into the Game_Interpreter class. It can be placed into it's own code-section, or with random miscellaneous
author=MarrendOh man you're seriously a life saver I was pulling my hair out trying to figure out how to add a function like this it was really necessary for my game! Thanks for you're help Marrend!
Not 100% sure about storing key items, but...def store_all while $game_party.items.size > 0 item = $game_party.items[0] store_add("item", item.id, $game_party.item_number(item)) $game_party.gain_item(item, $game_party.item_number(item) * -1) end while $game_party.weapons.size > 0 item = $game_party.weapons[0] store_add("weapon", item.id, $game_party.item_number(item)) $game_party.gain_item(item, $game_party.item_number(item) * -1) end while $game_party.armors.size > 0 item = $game_party.armors[0] store_add("armor", item.id, $game_party.item_number(item)) $game_party.gain_item(item, $game_party.item_number(item) * -1) end end
...this seems to function.
*Edit: Code updated because I was only testing one type of item at a time, and generally failing at logic/math. Can confirm that this stores key items.
*Edit2: You don't have to put this function definition into the Game_Interpreter class. It can be placed into it's own code-section, or with random miscellaneoushacksscripts you might be using. As far as I'm aware, it can be used as as-is, as a regular function-call, and, can be called in classes/methods outside of Game_Interpreter.
Edit: This works like a charm I was expecting some kind of pause in the game when it stored all of the items, but it works as smooth as butter! Thanks :D
Pages:
1















