Easily Memorize, Remove, and Replace Player's Items, Great for Jail sequences |
|
|
|
|
Aug 28 2008, 10:58 PM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
Game_Party Addition for Item Memorization Game_Party Addition for Item Memorization IntroductionThis 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. UsagePlace the script in the materials section. 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.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. 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.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.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 id refers to the id of the actor that you wish to perform these actions on. ScriptRemember, just place it in the Materials section above "Main". 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
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
|
|
Aug 29 2008, 02:10 AM
|

Level 7

Group: Revolutionary
Posts: 100
Type: Event Designer
RM Skill: Intermediate

|
Amazing, just what I need! Thanks!
__________________________
"Oh c'mon Church. They say you're not completely dead as long as someone still remembers you." "Yeah, but look who's left to remember me. It sure feels like being dead. Like all the way dead. Like being encased in cement and fired at the sun dead."Red vs Blue - Recreation Homunculus - "It would be awesome to kill everyone by throwing the moon at earth. NO ONE WOULD EXPECT IT. AND EVEN IF THEY DID. WHAT CAN THEY DO? IT'S THE FUCKING MOON. " [Link]Adriantepes313 - Agreed. But damn, the moon? Brilliant. But I have a better idea. if we have superpowers, why not throw the fucking sun? [Link]Bow down to your new lords and masters. -- Webbo
|
|
|
|
|
|
|
|
|
Aug 29 2008, 10:52 AM
|
Level 1

Group: Member
Posts: 11
Type: Event Designer
RM Skill: Advanced

|
great script, thank you very much! I really want a similar operation on gold
|
|
|
|
|
|
|
|
|
Aug 29 2008, 11:00 AM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
OK, I'll update it with a gold function tonight. I will also change it a bit so that it only appends the saved items to the player's inventory instead of completely replacing it. This is would be good if you removed the player's items, but then they gained an item before having their full inventory restored.
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
|
|
Aug 29 2008, 11:28 AM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
...
Read the previous post. I am fixing that problem when I get home tonight. It is a quick fix, but I can't test it at work.
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
|
|
Aug 29 2008, 04:30 PM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
*Only bumping because the script has been updated*
Currently held items are no longer blown away when the back up items are restored. The two items sets are merged instead.
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
|
|
Aug 29 2008, 05:05 PM
|

Level 20

Group: Revolutionary
Posts: 407
Type: Musician
RM Skill: Advanced

|
QUOTE (BigEd781 @ Aug 29 2008, 04:52 PM)  *Only bumping because the script has been updated*
Currently held items are no longer blown away when the back up items are restored. The two items sets are merged instead. Excellent! This will go perfectly with my game now, thanks!
__________________________
|
|
|
|
|
|
|
|
|
Aug 29 2008, 05:38 PM
|

Level 19

Group: Revolutionary
Posts: 371
Type: Event Designer
RM Skill: Beginner

|
QUOTE (BigEd781 @ Aug 29 2008, 07:52 PM)  *Only bumping because the script has been updated*
Currently held items are no longer blown away when the back up items are restored. The two items sets are merged instead. Oooh, I found an error n_n. Okay, this is my setup; a very small trial/dungeon. You enter this "area". It's one-spaced so you're forced to step on the tile which "takes away" your equipment. I had Item A, so that's gone. I continue and get item B and then proceed to leave the small dungeon, again a forced tile spot which gives you back the items. It worked, I had items A and B. However, if I repeat the same procedure (from the starting point to the ending, not going backwards first), I end up with Item A x1 and Item Bx1; and not Item Ax1 and Item Bx2.
EDIT: The entrance is one-spaced, and that calls the script command, same as the ending.
Understand? (There was another error where walking over it repeatedly ended up in losing all the items, but am still testing that one)
__________________________
Fall to the power of the Emo! We have cookies!Notice!! Check out my topic (http://www.rpgrevolution.com/forums/index.php?showtopic=45736&st=0#entry454175) if you're interested in helping me make a script that limits the number of characters & items you use in battle AND also an item durability feature! Thanks for any help in advance!
|
|
|
|
|
|
|
|
|
Aug 29 2008, 05:44 PM
|

Level 11

Group: Revolutionary
Posts: 181
Type: Developer
RM Skill: Beginner

|
Well I just tested out your script VERY COOL!  So you just need to fix remove of equipped items as well. Since I still had equipped items, when I called the script.
__________________________
There are two Mandalorians are out in the woods. One of them collapses. He doesn't seem to be breathing and his eyes are glazed. The other Mandalorian takes out his communicator and contacts his commander. He gasps: "My partner has collapsed! I don't know what to do!" After a moment, the commander responds: "Calm down. I can help. First let's make sure your partner is dead." There is a silence then a blaster shot is heard. Back on the communicator, the Mandalorian says: "Okay, now what?"
|
|
|
|
|
|
|
|
|
Aug 29 2008, 08:27 PM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
QUOTE (Twilight27 @ Aug 29 2008, 06:00 PM)  QUOTE (BigEd781 @ Aug 29 2008, 07:52 PM)  *Only bumping because the script has been updated*
Currently held items are no longer blown away when the back up items are restored. The two items sets are merged instead. Oooh, I found an error n_n. Okay, this is my setup; a very small trial/dungeon. You enter this "area". It's one-spaced so you're forced to step on the tile which "takes away" your equipment. I had Item A, so that's gone. I continue and get item B and then proceed to leave the small dungeon, again a forced tile spot which gives you back the items. It worked, I had items A and B. However, if I repeat the same procedure (from the starting point to the ending, not going backwards first), I end up with Item A x1 and Item Bx1; and not Item Ax1 and Item Bx2.
EDIT: The entrance is one-spaced, and that calls the script command, same as the ending.
Understand? (There was another error where walking over it repeatedly ended up in losing all the items, but am still testing that one)I will look into it. If that is true, that is a good bug find, thanks! It is happening because I am simply merging the two hashes, but that will not combine equal key values. I can fix it, but probably not until tomorrow. @Luke: I forgot about those  I'll fix that.
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
|
|
Aug 29 2008, 09:11 PM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
It will be.
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
|
|
Aug 30 2008, 01:32 AM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
*UPDATE*
FEATURE - Now possible to perform saving, clearing, and restoring operations on gold. FEATURE - Now possible to perform saving, clearing, and restoring operations on currently equipped items. You may perform this on the entire party as a whole, or individual actors. BUG_FIX - Fixed the bug pointed out by Twilight which caused restored items to not merge properly when it shared items in common with the current inventory. Nice catch Twilight, thanks again.
I noted above that this will almost assuredly fail to save all of the currently equipped items if you are using the KGC large party script. This is because I have not taken the time to look at it as to get information on how it keeps track of equipped items. I will fix that eventually.
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
|
|
Aug 30 2008, 07:39 AM
|

Level 19

Group: Revolutionary
Posts: 371
Type: Event Designer
RM Skill: Beginner

|
**BUG**
Heh, I found more errors (though you can work around it). Here, I'll upload this project for testing
(Removed)
You can check the game to see if I did anything wrong; as you can see, you have to go through the 'fence dungeon' where the "call script" commands activate at the start and end. In the middle you can talk to the crystal to get one item (for more testing).
Okay, simply start the game, talk to the left-most character at the top, who'll give you some items. Go straight down (right path) and after the "script call" space event, go back up (out of the dungeon) and back down (back into it). Proceed to exit the dungeon and you'll have no items.
My guess is, the game recorded the fact that you had no items on the second walk-by, so that is what you get back in the end.
(It works perfectly anyway, and I can still use this. Just prevent the character from going backwards and then back in; which I planned to do somehow anyway...)
__________________________
Fall to the power of the Emo! We have cookies!Notice!! Check out my topic (http://www.rpgrevolution.com/forums/index.php?showtopic=45736&st=0#entry454175) if you're interested in helping me make a script that limits the number of characters & items you use in battle AND also an item durability feature! Thanks for any help in advance!
|
|
|
|
|
|
|
|
|
Aug 30 2008, 08:56 AM
|
Level 1

Group: Member
Posts: 11
Type: Event Designer
RM Skill: Advanced

|
Thank you very much!
|
|
|
|
|
|
|
|
|
Aug 30 2008, 11:11 AM
|

No method: 'stupid_title' found for `nil:NilClass'

Group: Revolutionary
Posts: 1,829
Type: Scripter
RM Skill: Undisclosed

|
QUOTE (Twilight27 @ Aug 30 2008, 08:01 AM)  **BUG**Heh, I found more errors (though you can work around it). Here, I'll upload this project for testinghttp://www.mediafire.com/?ccmyqrs82tlYou can check the game to see if I did anything wrong; as you can see, you have to go through the 'fence dungeon' where the "call script" commands activate at the start and end. In the middle you can talk to the crystal to get one item (for more testing).
Okay, simply start the game, talk to the left-most character at the top, who'll give you some items. Go straight down (right path) and after the "script call" space event, go back up (out of the dungeon) and back down (back into it). Proceed to exit the dungeon and you'll have no items.
My guess is, the game recorded the fact that you had no items on the second walk-by, so that is what you get back in the end.
(It works perfectly anyway, and I can still use this. Just prevent the character from going backwards and then back in; which I planned to do somehow anyway...) So are are right in thinking that the game recorded the fact that you have no items, but that is really by design. I do not see a reason to disallow making a backup when the player has no items. It is working as it should. You wlso should remember that this is not a likely scenario. When you want to take away a player's items, it will rarely (if ever) be done more than once before the player's items are returned. Also, the player will most likely not have control over when these things take place, as they do in the example. So there is nothing I could really change here. Having no items is still a valid case. Keep up the testing though! PS, as long as you are not using the equipped item functions you should have no problems with this and the large party scripts.
__________________________
` Give me teh codez!!! I am the master debator! 
|
|
|
|
|
|
|
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:
RPG RPG Revolution is an Privacy
Policy and Legal
|
|