Game_Party Addition for Item Memorization
Game_Party Addition for Item Memorization
Introduction
This is an addition to Game_Party that will allow you to easily memorize, remove, and restore the player's items, gold, and equipment.
This script should be fully compatible with other scripts that are well written (i.e., they alias the initialize method instead of overwriting it), but for one case that I can think of.
This script will be incompatible with the KGC large party script when memorizing equipped items. I will get around to fixing this soon enough.
Usage
Place the script in the materials section.
[Show/Hide] Memorizing and Restoring Items
When you want to take away the player's items, use a "Script" event command and this code:
CODE
$game_party.backup_items
$game_party.clear_items
$game_party.clear_items
$game_party.backup_items - Makes a copy of all currently held items and saves it to be restored later.
$game_party.clear_items - Removes all items from the player's inventory. Don't worry, you made a copy first, right?
Next, when you want to give the items back to the player, use another "Script" event command (inside a treasure chest or something) and use this single line:
CODE
$game_party.restore_items
That will replace all of the items that were saved when you last used the backup_items method and add them to the inventory.
[Show/Hide] Memorizing and Restoring Gold
This is very similar to the last operation. We have two commands to use when taking away the player's gold:
CODE
$game_party.backup_gold
$game_party.clear_gold
$game_party.clear_gold
$game_party.backup_gold - Makes a copy of the current gold total.
$game_party.clear_gold - Removes all of the player's gold. Be sure to make the backup first!
When you wish to give the player's gold back to the party, use this in a "Script" event command:
CODE
$game_party.restore_gold
This will add the saved gold to the current total.
[Show/Hide] Memorizing and Restoring Player's Equipment
Again this process is familiar. Two command to clear and save the entire party's currently equipped items.
CODE
$game_party.backup_all_equips
$game_party.unequip_all
$game_party.unequip_all
$game_party.backup_all_equips - Makes a copy of the current equipment for every member of the party.
$game_party.unequip_all - Removes all equipment from every party member. The equipment is not saved! It will be lost if you do not perform a backup first.
When you wish to give the party's equipment back, use the following line in a "Script" event command:
CODE
$game_party.restore_all_equips
This will unequip whatever the players are currently equipped with and place the saved equipment where it was previously. Nothing will be lost by performing this operation.
There is one more feature to mention involving equipment. You do not have to use only these three functions to change the equipment of the entire party.
You can save, clear, and restore the equipment of individual actors by calling similar methods of the Game_Actor class, like so:
CODE
$game_actors[id].backup_equips
$game_actors[id].clear_equips
$game_actors[id].restore_equips
$game_actors[id].clear_equips
$game_actors[id].restore_equips
id refers to the id of the actor that you wish to perform these actions on.
Script
Remember, just place it in the Materials section above "Main".
[Show/Hide] Script
CODE
#==============================================================================
# ** Game_Party implementation
#------------------------------------------------------------------------------
# aliased methods : initialize
#==============================================================================
class Game_Party
alias :biged_old_init :initialize
def initialize
biged_old_init
@temp_items = {} # temp items hash
@temp_weapons = {} # temp weapons hash
@temp_armors = {} # temp armors hash
@temp_gold = nil # temp gold variable
end
#--------------------------------------------------------------------------
# * if the player has picked up some items since their's were wiped
# and backed up, we need to combine the totals of any common items
#--------------------------------------------------------------------------
def merge_like_key_values(dest, src)
return if dest == {}
for key in dest.keys
src[key] += dest[key] if src.has_key?(key)
end
end
#--------------------------------------------------------------------------
# * Make a copy of the current inventory
#--------------------------------------------------------------------------
def backup_items
@temp_items = Marshal::load(Marshal::dump(@items))
@temp_weapons = Marshal::load(Marshal::dump(@weapons))
@temp_armors = Marshal::load(Marshal::dump(@armors))
end
#--------------------------------------------------------------------------
# * Clear the current inventory
#--------------------------------------------------------------------------
def clear_items
@items.clear
@weapons.clear
@armors.clear
end
#--------------------------------------------------------------------------
# * Restore the backed up inventory if a backup exists
#--------------------------------------------------------------------------
def restore_items
unless @temp_items == {}
merge_like_key_values(@items, @temp_items)
@items = @items.merge(@temp_items)
end
unless @temp_weapons == {}
merge_like_key_values(@weapons, @temp_weapons)
@weapons = @weapons.merge(@temp_weapons)
end
unless @temp_armors == {}
merge_like_key_values(@armors, @temp_armors)
@armors = @armors.merge(@temp_armors)
end
@temp_items = @temp_weapons = @temp_armors = {}
end
#--------------------------------------------------------------------------
# * Backup All mparty member's equipment
#--------------------------------------------------------------------------
def backup_all_equips
for i in @actors
$game_actors[i].backup_equips
end
end
#--------------------------------------------------------------------------
# * unequip all party member
# THE EQUIPMENT WILL BE LOST FOREVER
# IF YOU DO NOT FIRST MAKE A BACKUP!
#--------------------------------------------------------------------------
def unequip_all
for i in @actors
$game_actors[i].clear_equips
end
end
#--------------------------------------------------------------------------
# * Backup All mparty member's equipment
#--------------------------------------------------------------------------
def restore_all_equips
for i in @actors
$game_actors[i].restore_equips
end
end
#--------------------------------------------------------------------------
# * Make a copy of the current gold total
#--------------------------------------------------------------------------
def backup_gold
@temp_gold = @gold
end
#--------------------------------------------------------------------------
# * Clear the current gold total
#--------------------------------------------------------------------------
def clear_gold
@gold = 0
end
#--------------------------------------------------------------------------
# * Restore the saved gold total if one exists
#--------------------------------------------------------------------------
def restore_gold
unless @temp_gold == nil
@gold += @temp_gold
@temp_gold = nil
end
end
end
#==============================================================================
# ** Game_Actor implementation
#------------------------------------------------------------------------------
# aliased methods : initialize
#==============================================================================
class Game_Actor < Game_Battler
alias :biged_old_init :initialize
def initialize(actor_id)
biged_old_init(actor_id)
@temp_weapons = [] #temporary store for weapons
@temp_armors = [] #temporary store for armor
end
#--------------------------------------------------------------------------
# * Make a copy of the currently equiped items
#--------------------------------------------------------------------------
def backup_equips
@temp_weapons = weapons
@temp_armors = armors
end
#--------------------------------------------------------------------------
# * Restore back up equipment if it exists
#--------------------------------------------------------------------------
def restore_equips
#un-equip the current equipment and place it in the inventory
unless @temp_weapons == [] && @temp_armors == [] #no backup made
for i in 0...5 do
change_equip(i, nil)
end
end
#-------------------------------------------------------------#
#we check each one individually here because if any slot #
#is set to nil, a default value is used (not nil). This #
#default value does actually correspond to an item, and we #
#don't want that, so we check. #
#-------------------------------------------------------------#
#the incrementor is there because the armor array size will be#
#different depending on whether the player is using 2 swords #
#-------------------------------------------------------------#
@weapon_id = @temp_weapons[0].id if @temp_weapons[0] != nil
if two_swords_style
@armor1_id = @temp_weapons[1].id if @temp_weapons[1] != nil
i = 0
else
@armor1_id = @temp_armors[0].id if @temp_armors[0] != nil
i = 1
end
@armor2_id = @temp_armors[i].id if @temp_armors[i] != nil
@armor3_id = @temp_armors[i+1].id if @temp_armors[i+1] != nil
@armor4_id = @temp_armors[i+2].id if @temp_armors[i+2] != nil
@temp_weapons = @temp_armors = []
end
#--------------------------------------------------------------------------
# * Clear the currently equipped item set.
# THIS DOES NOT PLACE THE ITEMS IN INVENTORY!
# THEY WILL BE GONE FOREVER UNLESS YOU MAKE A BACKUP FIRST!
#--------------------------------------------------------------------------
def clear_equips
@weapon_id = 0
@armor1_id = 0
@armor2_id = 0
@armor3_id = 0
@armor4_id = 0
end
end
# ** Game_Party implementation
#------------------------------------------------------------------------------
# aliased methods : initialize
#==============================================================================
class Game_Party
alias :biged_old_init :initialize
def initialize
biged_old_init
@temp_items = {} # temp items hash
@temp_weapons = {} # temp weapons hash
@temp_armors = {} # temp armors hash
@temp_gold = nil # temp gold variable
end
#--------------------------------------------------------------------------
# * if the player has picked up some items since their's were wiped
# and backed up, we need to combine the totals of any common items
#--------------------------------------------------------------------------
def merge_like_key_values(dest, src)
return if dest == {}
for key in dest.keys
src[key] += dest[key] if src.has_key?(key)
end
end
#--------------------------------------------------------------------------
# * Make a copy of the current inventory
#--------------------------------------------------------------------------
def backup_items
@temp_items = Marshal::load(Marshal::dump(@items))
@temp_weapons = Marshal::load(Marshal::dump(@weapons))
@temp_armors = Marshal::load(Marshal::dump(@armors))
end
#--------------------------------------------------------------------------
# * Clear the current inventory
#--------------------------------------------------------------------------
def clear_items
@items.clear
@weapons.clear
@armors.clear
end
#--------------------------------------------------------------------------
# * Restore the backed up inventory if a backup exists
#--------------------------------------------------------------------------
def restore_items
unless @temp_items == {}
merge_like_key_values(@items, @temp_items)
@items = @items.merge(@temp_items)
end
unless @temp_weapons == {}
merge_like_key_values(@weapons, @temp_weapons)
@weapons = @weapons.merge(@temp_weapons)
end
unless @temp_armors == {}
merge_like_key_values(@armors, @temp_armors)
@armors = @armors.merge(@temp_armors)
end
@temp_items = @temp_weapons = @temp_armors = {}
end
#--------------------------------------------------------------------------
# * Backup All mparty member's equipment
#--------------------------------------------------------------------------
def backup_all_equips
for i in @actors
$game_actors[i].backup_equips
end
end
#--------------------------------------------------------------------------
# * unequip all party member
# THE EQUIPMENT WILL BE LOST FOREVER
# IF YOU DO NOT FIRST MAKE A BACKUP!
#--------------------------------------------------------------------------
def unequip_all
for i in @actors
$game_actors[i].clear_equips
end
end
#--------------------------------------------------------------------------
# * Backup All mparty member's equipment
#--------------------------------------------------------------------------
def restore_all_equips
for i in @actors
$game_actors[i].restore_equips
end
end
#--------------------------------------------------------------------------
# * Make a copy of the current gold total
#--------------------------------------------------------------------------
def backup_gold
@temp_gold = @gold
end
#--------------------------------------------------------------------------
# * Clear the current gold total
#--------------------------------------------------------------------------
def clear_gold
@gold = 0
end
#--------------------------------------------------------------------------
# * Restore the saved gold total if one exists
#--------------------------------------------------------------------------
def restore_gold
unless @temp_gold == nil
@gold += @temp_gold
@temp_gold = nil
end
end
end
#==============================================================================
# ** Game_Actor implementation
#------------------------------------------------------------------------------
# aliased methods : initialize
#==============================================================================
class Game_Actor < Game_Battler
alias :biged_old_init :initialize
def initialize(actor_id)
biged_old_init(actor_id)
@temp_weapons = [] #temporary store for weapons
@temp_armors = [] #temporary store for armor
end
#--------------------------------------------------------------------------
# * Make a copy of the currently equiped items
#--------------------------------------------------------------------------
def backup_equips
@temp_weapons = weapons
@temp_armors = armors
end
#--------------------------------------------------------------------------
# * Restore back up equipment if it exists
#--------------------------------------------------------------------------
def restore_equips
#un-equip the current equipment and place it in the inventory
unless @temp_weapons == [] && @temp_armors == [] #no backup made
for i in 0...5 do
change_equip(i, nil)
end
end
#-------------------------------------------------------------#
#we check each one individually here because if any slot #
#is set to nil, a default value is used (not nil). This #
#default value does actually correspond to an item, and we #
#don't want that, so we check. #
#-------------------------------------------------------------#
#the incrementor is there because the armor array size will be#
#different depending on whether the player is using 2 swords #
#-------------------------------------------------------------#
@weapon_id = @temp_weapons[0].id if @temp_weapons[0] != nil
if two_swords_style
@armor1_id = @temp_weapons[1].id if @temp_weapons[1] != nil
i = 0
else
@armor1_id = @temp_armors[0].id if @temp_armors[0] != nil
i = 1
end
@armor2_id = @temp_armors[i].id if @temp_armors[i] != nil
@armor3_id = @temp_armors[i+1].id if @temp_armors[i+1] != nil
@armor4_id = @temp_armors[i+2].id if @temp_armors[i+2] != nil
@temp_weapons = @temp_armors = []
end
#--------------------------------------------------------------------------
# * Clear the currently equipped item set.
# THIS DOES NOT PLACE THE ITEMS IN INVENTORY!
# THEY WILL BE GONE FOREVER UNLESS YOU MAKE A BACKUP FIRST!
#--------------------------------------------------------------------------
def clear_equips
@weapon_id = 0
@armor1_id = 0
@armor2_id = 0
@armor3_id = 0
@armor4_id = 0
end
end
