Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #===============================================================================
- # Item Storage
- # Author game_guy
- # Version 1.42
- #-------------------------------------------------------------------------------
- # Intro:
- # Okay. Well if you've played the Elder Scrolls Series or Fallout then you'd
- # know that it has an item storage system. What it does is lets you open up
- # closets, chests, ect and store and take items out of it.
- #
- # Features:
- # Store and Take Items Out of Chests, Closets, ect
- # Have Seperate Chests, Closets, ect
- # Easy to Use
- # Stores Chests into Game System Instead of Variables
- # Have Max Amount of Items In Chest
- # Set Default Items in Chest
- # Mark Items as "Key Items" to prevent removal from inventory (e.g. "Quest Items")
- # Take All/Store All Items in Chest (Not built into scene)
- #
- # Instructions:
- # First lets go over the syntaxes.
- #
- # Calling the Item Storage:
- # $scene = Scene_Chest.new(chest_id, max_items)
- # chest_id is the number chest you want open
- # max_items is the max amount of any item the chest can hold
- # you can just use this to
- # $scene = Scene_Chest.new(chest_id)
- # because in the config this ChestMaxItems is the default so if you dont use
- # the long one, it'll use the default.
- #
- # New Syntaxes:
- # You can now take all items from a chest and empty your entire inventory
- # into a chest. While this isn't built into the scene, you'll have to do this
- # through a script call.
- # -Take All
- # chest = $game_system.chests(chest_id)
- # chest.take_all
- # -Empty Inventory
- # chest = $game_system.chests(chest_id)
- # chest.empty_all
- #
- # You can now add/remove items to and from chests.
- # chest = $game_system.chests(chest_id)
- # chest.aaa_bbb(ccc, ddd)
- # aaa = add/take
- # bbb = item/weapon/armor
- # ccc = item/weapon/armor id
- # ddd = amount
- #
- # Okay so thats done with the syntaxes. Now onto the configuration.
- # Go down to Begin Config and do all your configuration there.
- #
- # Credits:
- # game_guy ~ for making it
- # MightyLink ~ requesting the system
- #===============================================================================
- module GameGuy
- #============================================================================
- # KeyItemId = Element ID for non removable items.
- # Items/weapons/armors with marked with this element
- # cannot be removed.
- #============================================================================
- KeyItemId = 17
- #============================================================================
- # ChestMaxItems = The max amount of any item a chest can hold. So example
- # Its 9999 so it can have 9999 of any item.
- #============================================================================
- ChestMaxItems = 9999
- def self.chest_items(id)
- case id
- #==========================================================================
- # Config Chest Items
- # Use this
- # when chest_id then return [[id, amount, type], [id, amount, type]]
- # id = item, weapon, or armor id
- # amount = the amount
- # type = 0, 1, or 2 0 = item, 1 = weapon, 2 = armor
- # Example:
- # when 1 then return [[1, 3, 0], [1, 1, 1]]
- # This has 3 potions, and 1 bronze sword. So when this is called
- # $scene = Scene_Chest.new(1)
- # it will have those items in the chest already.
- #==========================================================================
- when 1 then return [[1, 999, 0], [1, 1, 1]]
- when 2 then return [[1, 10, 0], [1, 1, 2], [1, 2, 1]]
- when 3 then return [[1, 10, 2], [3, 1, 1], [9, 1, 1]]
- when 5 then return [[33, 1, 0]]
- when 6 then return [[1, 50, 2], [3, 1, 1]]
- end
- return []
- end
- end
- #==============================================================================
- # Game_System
- #------------------------------------------------------------------------------
- # Modded it so it makes it store every chest.
- #==============================================================================
- class Game_System
- alias gg_add_item_storage initialize
- def initialize
- @chests = []
- return gg_add_item_storage
- end
- def chests(n)
- if @chests[n] == nil
- @chests[n] = Game_Chest.new(GameGuy::ChestMaxItems)
- items = GameGuy.chest_items(n)
- for i in 0...items.size
- item = items[i][2]
- case item
- when 0
- @chests[n].add_item(items[i][0], items[i][1])
- when 1
- @chests[n].add_weapon(items[i][0], items[i][1])
- when 2
- @chests[n].add_armor(items[i][0], items[i][1])
- else
- @chests[n].add_item(items[i][0], items[i][1])
- end
- end
- end
- return @chests[n]
- end
- end
- #==============================================================================
- # Game_Chest
- #------------------------------------------------------------------------------
- # Holds all the data for a single chest.
- #==============================================================================
- class Game_Chest
- attr_accessor :max
- def initialize(max = GameGuy::ChestMaxItems)
- @max = max
- @items = {}
- @weapons = {}
- @armors = {}
- end
- def item_amount(item_id)
- return @items.include?(item_id) ? @items[item_id] : 0
- end
- def weapon_amount(weapon_id)
- return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0
- end
- def armor_amount(armor_id)
- return @armors.include?(armor_id) ? @armors[armor_id] : 0
- end
- def add_item(item_id, n)
- if item_id > 0
- @items[item_id] = [[item_amount(item_id) + n, 0].max, @max].min
- end
- end
- def add_weapon(weapon_id, n)
- if weapon_id > 0
- @weapons[weapon_id] = [[weapon_amount(weapon_id) + n, 0].max, @max].min
- end
- end
- def add_armor(armor_id, n)
- if armor_id > 0
- @armors[armor_id] = [[armor_amount(armor_id) + n, 0].max, @max].min
- end
- end
- def take_item(item_id, n)
- add_item(item_id, -n)
- end
- def take_weapon(weapon_id, n)
- add_weapon(weapon_id, -n)
- end
- def take_armor(armor_id, n)
- add_armor(armor_id, -n)
- end
- def empty_all
- for i in 1...$data_items.size
- if $game_party.item_number(i) > 0
- add_item(i, $game_party.item_number(i))
- $game_party.lose_item(i, $game_party.item_number(i))
- end
- end
- for i in 1...$data_weapons.size
- if $game_party.weapon_number(i) > 0
- add_weapon(i, $game_party.weapon_number(i))
- $game_party.lose_weapon(i, $game_party.weapon_number(i))
- end
- end
- for i in 1...$data_armors.size
- if $game_party.armor_number(i) > 0
- add_armor(i, $game_party.armor_number(i))
- $game_party.lose_armor(i, $game_party.armor_number(i))
- end
- end
- end
- def take_all
- for i in 1...$data_items.size
- if item_amount(i) > 0
- n = [99, ($game_party.item_number(i) - item_amount(i)).abs].min
- $game_party.gain_item(i, n)
- take_item(i, n)
- end
- end
- for i in 1...$data_weapons.size
- if weapon_amount(i) > 0
- n = [99, ($game_party.weapon_number(i) - weapon_amount(i)).abs].min
- $game_party.gain_weapon(i, n)
- take_weapon(i, n)
- end
- end
- for i in 1...$data_armors.size
- if armor_amount(i) > 0
- n = [99, ($game_party.armor_number(i) - armor_amount(i)).abs].min
- $game_party.gain_armor(i, n)
- take_armor(i, n)
- end
- end
- end
- end
- #==============================================================================
- # Window_Chest_Choices
- #------------------------------------------------------------------------------
- # The choices for the chest when the scene is opened.
- #==============================================================================
- class Window_Chest_Choices < Window_Selectable
- def initialize
- super(0, 0, 640, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item_max = 3
- @column_max = 3
- @commands = ["Zdeponuj", "Pobierz", "WyjdΕΊ"]
- self.z = 200
- refresh
- self.index = 0
- end
- def refresh
- self.contents.clear
- for i in 0...@item_max
- draw_item(i)
- end
- end
- def draw_item(index)
- x = 4 + index * 215
- self.contents.draw_text(x, 0, 128, 32, @commands[index], 1)
- end
- end
- #==============================================================================
- # Window_Chest_Item
- #------------------------------------------------------------------------------
- # Displays all items in the chest.
- #==============================================================================
- class Window_Chest_Item < Window_Selectable
- def initialize(chest)
- super(320, 64, 320, 416)
- @chest = chest
- @column_max = 1
- refresh
- self.index = 0
- if $game_temp.in_battle
- self.y = 64
- self.height = 256
- self.back_opacity = 160
- end
- 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 @chest.item_amount(i) > 0
- @data.push($data_items[i])
- end
- end
- unless $game_temp.in_battle
- for i in 1...$data_weapons.size
- if @chest.weapon_amount(i) > 0
- @data.push($data_weapons[i])
- end
- end
- for i in 1...$data_armors.size
- if @chest.armor_amount(i) > 0
- @data.push($data_armors[i])
- end
- 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]
- self.contents.font.color = normal_color
- if item.is_a?(RPG::Weapon) || item.is_a?(RPG::Item)
- if item.element_set.include?(GameGuy::KeyItemId)
- self.contents.font.color = disabled_color
- end
- else
- if item.guard_element_set.include?(GameGuy::KeyItemId)
- self.contents.font.color = disabled_color
- end
- end
- case item
- when RPG::Item
- number = @chest.item_amount(item.id)
- when RPG::Weapon
- number = @chest.weapon_amount(item.id)
- when RPG::Armor
- number = @chest.armor_amount(item.id)
- end
- x = 4 + index % @column_max * (288 + 32)
- y = index / @column_max * 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 + 216, y, 16, 32, ":", 1)
- self.contents.draw_text(x + 224, y, 48, 32, number.to_s, 2)
- end
- def update_help
- @help_window.set_text(self.item == nil ? "" : self.item.description)
- end
- end
- #==============================================================================
- # Window_Party_Item
- #------------------------------------------------------------------------------
- # Displays all items the party has.
- #==============================================================================
- class Window_Party_Item < Window_Selectable
- def initialize
- super(0, 64, 320, 416)
- @column_max = 1
- refresh
- self.index = 0
- if $game_temp.in_battle
- self.y = 64
- self.height = 256
- self.back_opacity = 160
- end
- 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
- unless $game_temp.in_battle
- 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
- 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]
- self.contents.font.color = normal_color
- if item.is_a?(RPG::Weapon) || item.is_a?(RPG::Item)
- if item.element_set.include?(GameGuy::KeyItemId)
- self.contents.font.color = disabled_color
- end
- else
- if item.guard_element_set.include?(GameGuy::KeyItemId)
- self.contents.font.color = disabled_color
- end
- end
- 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
- x = 4 + index % @column_max * (288 + 32)
- y = index / @column_max * 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 + 216, y, 16, 32, ":", 1)
- self.contents.draw_text(x + 224, y, 48, 32, number.to_s, 2)
- end
- def update_help
- @help_window.set_text(self.item == nil ? "" : self.item.description)
- end
- end
- #==============================================================================
- # Scene_Chest
- #------------------------------------------------------------------------------
- # The scene that controls storing and taking items.
- #==============================================================================
- class Scene_Chest
- def initialize(chest=1, max=GameGuy::ChestMaxItems)
- @chestid = chest
- @chest = $game_system.chests(@chestid)
- end
- def main
- @help_window = Window_Help.new
- @help_window.visible = false
- @command_window = Window_Chest_Choices.new
- @party_window = Window_Party_Item.new
- @party_window.active = false
- @chest_window = Window_Chest_Item.new(@chest)
- @chest_window.active = false
- Graphics.transition
- loop do
- Graphics.update
- Input.update
- update
- if $scene != self
- break
- end
- end
- @help_window.dispose
- @command_window.dispose
- @party_window.dispose
- @chest_window.dispose
- end
- def update
- @help_window.update
- @command_window.update
- @party_window.update
- @chest_window.update
- if @command_window.active
- update_command
- return
- end
- if @party_window.active
- update_party
- return
- end
- if @chest_window.active
- update_chest
- 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
- $game_system.se_play($data_system.decision_se)
- @party_window.active = true
- @party_window.help_window = @help_window
- @command_window.active = false
- @help_window.z = 500
- @help_window.visible = true
- when 1
- $game_system.se_play($data_system.decision_se)
- @chest_window.active = true
- @chest_window.help_window = @help_window
- @command_window.active = false
- @help_window.z = 500
- @help_window.visible = true
- when 2
- $game_system.se_play($data_system.cancel_se)
- $scene = Scene_Map.new
- end
- return
- end
- end
- def update_party
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- @command_window.active = true
- @help_window.visible = false
- @party_window.help_window = nil
- @party_window.active = false
- return
- end
- if Input.repeat?(Input::C)
- @item = @party_window.item
- unless @item.is_a?(RPG::Item) or @item.is_a?(RPG::Weapon) or
- @item.is_a?(RPG::Armor)
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- if @item.element_set.include?(GameGuy::KeyItemId)
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- case @item
- when RPG::Item
- amount = @chest.item_amount(@item.id)
- if amount < @chest.max
- $game_system.se_play($data_system.decision_se)
- @chest.add_item(@item.id, 1)
- $game_party.lose_item(@item.id, 1)
- else
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- when RPG::Weapon
- amount = @chest.weapon_amount(@item.id)
- if amount < @chest.max
- $game_system.se_play($data_system.decision_se)
- @chest.add_weapon(@item.id, 1)
- $game_party.lose_weapon(@item.id, 1)
- else
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- when RPG::Armor
- amount = @chest.armor_amount(@item.id)
- if amount < @chest.max
- $game_system.se_play($data_system.decision_se)
- @chest.add_armor(@item.id, 1)
- $game_party.lose_armor(@item.id, 1)
- else
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- end
- @party_window.refresh
- @chest_window.refresh
- return
- end
- end
- def update_chest
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- @command_window.active = true
- @help_window.visible = false
- @chest_window.help_window = nil
- @chest_window.active = false
- return
- end
- if Input.repeat?(Input::C)
- @item = @chest_window.item
- unless @item.is_a?(RPG::Item) or @item.is_a?(RPG::Weapon) or
- @item.is_a?(RPG::Armor)
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- case @item
- when RPG::Item
- amount = $game_party.item_number(@item.id)
- if amount < 99
- $game_system.se_play($data_system.decision_se)
- @chest.take_item(@item.id, 1)
- $game_party.gain_item(@item.id, 1)
- else
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- when RPG::Weapon
- amount = $game_party.weapon_number(@item.id)
- if amount < 99
- $game_system.se_play($data_system.decision_se)
- @chest.take_weapon(@item.id, 1)
- $game_party.gain_weapon(@item.id, 1)
- else
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- when RPG::Armor
- amount = $game_party.armor_number(@item.id)
- if amount < 99
- $game_system.se_play($data_system.decision_se)
- @chest.take_armor(@item.id, 1)
- $game_party.gain_armor(@item.id, 1)
- else
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- end
- @party_window.refresh
- @chest_window.refresh
- return
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement