• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Codeless Save and Load (Multiplayer) - v3.0.1

Information

If you've ever wanted to transfer progress between multiplayer maps, you probably needed to type in a long code.

That is no longer needed with this system. This will allow you to read save data from your WC3 folder and sync it to all other players in the map.

The demo map features:
  1. Load without typing anything
  2. Save Hero
    • Level/XP
    • Items
    • Abilities
    • Hero Name

  3. 5 Save Slots
* Everything is customizable and you can make the system save & load anything you want.

* This system is intended for GUI users.

Installation

To import the system, all you have to do is copy the trigger folders over to your map and save it.

Screenshots


untitled5-png.241496

untitled3-png.241494

untitled4-png.241495

113935-913340d9135dcfb50a7ac3b3dff3e424.png



Credits

Pipedream (optimal save system)
Previews
Contents

Codeless Save & Load v1.3.9 (Map)

Codeless Save & Load v3.0.1 (Map)

Reviews
Awaiting further review
how do I now properly update the system? just replace everything or only some parts of it?

You can try replacing all the triggers, but make sure in the SaveInit trigger that all of your values are the same as before. You also need to make sure the alphabet is the same for the save system. It's in a vJass trigger called "save system". I haven't tried upgrading myself so there may be more to it.

And to be honest, this version has some nice improvements but you can still use the old version on the latest patches and it will work fine.
 
Level 3
Joined
Jul 2, 2014
Messages
45
Hello, first, I haven't tested it out yet, but I had a few performances questions and before trying to implement it - if that's okay to ask, in order to avoid a possible waste of time - how many integers from range ~[-20000; 20000] can it hold ? So far I've identified that I'd need about 200 integers from this range, and around 400 from range ~[0; 1000], does the string length is enough ? Would it need some tinkering to split the code, would that even be possible to load multiple code one by one ?

I'm sorry I look like a lazy ass, but I'd like to know if that's possible before I commit into adding this save/load and realize I just can't use it for my needs, thanks
 
Hello, first, I haven't tested it out yet, but I had a few performances questions and before trying to implement it - if that's okay to ask, in order to avoid a possible waste of time - how many integers from range ~[-20000; 20000] can it hold ? So far I've identified that I'd need about 200 integers from this range, and around 400 from range ~[0; 1000], does the string length is enough ? Would it need some tinkering to split the code, would that even be possible to load multiple code one by one ?

I'm sorry I look like a lazy ass, but I'd like to know if that's possible before I commit into adding this save/load and realize I just can't use it for my needs, thanks

It should work. The limit is 4099 for concatenated strings and sync speeds are pretty fast on the newest patches. And yes, you can split the code into multiple codes allowing you to bypass that limit.
 
Level 3
Joined
Jul 2, 2014
Messages
45
By the way, if I may, you may have inversed udg_HeroXPConstant = 0 & udg_HeroXPLevelFactor = 100 values in the Save Init trigger (default are LevelFactor = 0 & Constant = 100 from Gameplay Constant, can be confusing) and typo "Synchornizing..-" somewhere, had to delete that part so I couldn't tell where exactly.

Plus, in SaveHelper.LoadSaveSlot there is a call to SaveHelper.IsUserLoading(u) but it is never set to true via SaveHelper.SetUserLoading(u, true), I added it just after the set req = SyncData.create(u) a few lines below, is it because you forgot or am I missing the point ?

Would it be interesting to add the option to not set your slot automatically, I found myself removing this after looking through, for some reason one may want to preserve his older save and not erase it every save.

Last, it is intended that whenever you save in a slot, it also creates the SaveSlot_Manual from the Save GUI ? I deleted the SaveFile.create() from the Save GUI to get rid of the SaveSlot_Manual.

Other than that, this is state of the art, 'gratz and thanks for creating and updating this with the newest patches!
 
Level 1
Joined
Oct 17, 2018
Messages
1
" You need to enable local files to load your character from disk on patches prior to 1.30! "

I am using version 1.30.1. During the save, the message is no longer being tested. How do I know how to activate a local file?
 

Sverkerman

Hosted Project: BoW
Level 17
Joined
Feb 28, 2010
Messages
1,325
@TriggerHappy Hello! Nice system, I am currently configuring it for my new ORPG. Would you be so kind as to tell me if this would work? I wish to save an item and then save the item's charges remaining. I feel that this would be a good way to save it since it makes it easy for me (GUI user) to extract it when loading, does it look correct to you? :)

Code:
For each (Integer SaveTempInt) from 0 to 5, do (Actions)
    Loop - Actions
        Set SaveCount = (SaveCount + 1)
        Set SaveValue[SaveCount] = (Charges remaining in (Item carried by SaveTempUnit in slot (SaveTempInt + 1)))
        Set SaveMaxValue[SaveCount] = SaveItemChargesMax
        Set SaveCount = (SaveCount + 1)
        Custom script:   set udg_SaveValue[udg_SaveCount] = SaveHelper.ConvertItemId(GetItemTypeId(UnitItemInSlot(udg_SaveTempUnit, udg_SaveTempInt)))
        Set SaveMaxValue[SaveCount] = SaveItemTypeMax
 

Sverkerman

Hosted Project: BoW
Level 17
Joined
Feb 28, 2010
Messages
1,325
To anyone who might be interested in using this system there are a few things that I have found out during the process of implementing this into my map that I thought I should share.
Credit goes to @Wareditor @Illidan(Evil)X @Hagge5 who helped me with a lot of testing and figuring out.

The first thing that should be noted about this system is:
<SOLVED!> Please help! "//" not printed to file, Preloader

I will quote @Illidan(Evil)X for a shorter version of this discovery:

I did some testing. As theorized, the Preload native seem to have a hard limit of 259 characters (at least on patch 1.29.2).
JASS:
//! zinc
library PreloadTest {
    function onInit() {
        string chunk = "0123456789ABCDEF";
        string str = "";
        integer i = 0;
        while (i < 64) {
            str += chunk;
            i += 1;
        }
        BJDebugMsg(I2S(StringLength(str))); // 1024
     
        PreloadGenClear();
        PreloadGenStart();
        Preload(str);
        PreloadGenEnd("Tests\\PreloadTest.pld");
    }
}
//! endzinc
Generates->
JASS:
function PreloadFiles takes nothing returns nothing
    call Preload( "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012" ) // 259 chars
    call PreloadEnd( 0.0 )
endfunction
One workaround would be to split the string into multiple chunks using either multiple preload calls or multiple pld files and then merge the strings after loading.

The second discovery was that this system has (some sort of) unit indexer that will interfere with the unit indexer inside your map, causing loads to never initiate/run Load GUI.

One possible workaround to this that I decided to use myself was to add a check for the normal Footman unit, if the unit type that is about to be indexed by your own unit indexing system is of this type (Footman) then it shouldn't go through with the indexing as it interferes with how the system indexes the unit (this is used for syncing integers, nothing that we GUI users need to worry about)

Hopefully if you had issues with this system before these two discoveries has been of help to you. Best of luck :)
 
Hey @TriggerHappy, does the system work on newer patch versions (1.29 and up)?

As of this post, yes.

@TriggerHappy What would be the best way to produce a codewipe from one version to the next?

You could save an integer in the player's save code that represents which version their code is from. So if someone tries to load you can say "Sorry, your code is from version X, you must do Y.". I would just start with 1 and increment with each public patch.

You can also randomize the alphabet which is in the "save system" trigger (charset function).

You may also be able to change all instances of savecode.Save(p, 1) to use another integer in the second paramater. Same for the load method.

I will add an more straight forward way to do this in the next version.
 

Sverkerman

Hosted Project: BoW
Level 17
Joined
Feb 28, 2010
Messages
1,325
@TriggerHappy Thank you for the fast and spot on answer, I appreciate it! I will go with your first suggestion.


Also! Any news/updates/fixes on the *bug* with the preloader native? Atm there is a limit as to how much data you can save in one go.
I've also found another bug which is either assosiated with your system or the Preloader native. I read here some time ago that someone was having an issue with the Autosave function, he stated that after playing his map for X amount of time his save/load code would get overwritten with a blank/empty save/load code upon saving. I stumbled upon this as well, but not with the autosave function. What I did was to save the game the exact same way that you save using the dialog system and upon saving maybe 30 times in the same game it would overwrite the existing and functioning code with a blank/empty code. I believe that the Preloader native is really at fault here, but I might be wrong, this is all way beyong my coding abilities - but it would be extremely helpful to have this issue resolved and interesting to know what is/what was causing it. Thank you.
 
Level 4
Joined
May 12, 2017
Messages
28
@TriggerHappyWhat I did was to save the game the exact same way that you save using the dialog system and upon saving maybe 30 times in the same game it would overwrite the existing and functioning code with a blank/empty code. I believe that the Preloader native is really at fault here, but I might be wrong, this is all way beyong my coding abilities - but it would be extremely helpful to have this issue resolved and interesting to know what is/what was causing it. Thank you.

Could you give a bit more details regarding this and how to potentially replicate this, and if you've been able to actively replicate this over multiple sessions, as that would help a lot in trying to figure out what the actual source is and if it's a problem with the Code or a fundamental problem with the Natives
 

Sverkerman

Hosted Project: BoW
Level 17
Joined
Feb 28, 2010
Messages
1,325
@Kithio I believe that the issue is related to how much code you are saving. Let me explain: My theory is that every time you save the native adds one character onto itself, if you don't save much code it will take many saves for the native to break (reaching over 259 characters) but if you are saving a long savecode and you are already using 250 characters inside the native (for the native itself and your save/load code) it would only require you to save 9 times before the 10th time would overwrite your code with blank code (Native character limit is 259, now you are attempting to run the native with 260 characters causing it to break, saving blank text as your save/load code)

I have successfully been able to replicate this several times.
 
Level 4
Joined
May 12, 2017
Messages
28
@Kithio I believe that the issue is related to how much code you are saving. Let me explain: My theory is that every time you save the native adds one character onto itself, if you don't save much code it will take many saves for the native to break (reaching over 259 characters) but if you are saving a long savecode and you are already using 250 characters inside the native (for the native itself and your save/load code) it would only require you to save 9 times before the 10th time would overwrite your code with blank code (Native character limit is 259, now you are attempting to run the native with 260 characters causing it to break, saving blank text as your save/load code)

I have successfully been able to replicate this several times.

Would you be able to get a small example map with the code in it where this happens? as I never ran into this in my tests, and I did save testing on my project a while back, during the game I think it had saved nearly 200 times in total (played roughly 11 hours in the map, auto-saving every 3 minutes)
 
Level 1
Joined
Apr 20, 2016
Messages
1
@TriggerHappy Awesome system, just a quick question. How reliable is it if I want to use 4 separate MapNames 2 of which will be active ingame (depending if SinglePlayer or Multiplayer)?

I want to save "account" info and character data separately, I have about 20-30 account related integers (up to 1000), not more than 50 items to save and its a 5 Player map.
 

Uncle

Warcraft Moderator
Level 63
Joined
Aug 10, 2018
Messages
6,456
Correct me if i'm wrong but this doesn't work without WEX and that doesn't work with the latest patches.

So i'm assuming the only solution is to downgrade to patch 1.29?

Or am I just doing something wrong? I'm on the latest patch and I simply copy and pasted the triggers but I get errors for just about everything when I try to save.
 
Last edited:
Correct me if i'm wrong but this doesn't work without WEX and that doesn't work with the latest patches.

So i'm assuming the only solution is to downgrade to patch 1.29?

Or am I just doing something wrong? I'm on the latest patch and I simply copy and pasted the triggers but I get errors for just about everything when I try to save.

Last I checked it worked in the standard editor (since patch 1.30). Make sure JassHelper is enabled in the trigger editor.
 
The first screenshot looks like something I may have overlooked. Maybe I forgot to place that 1 GUI variable in a GUI trigger somewhere so it doesn't get copied. You can manually create it in the variable editor and it should compile. However the rest of the screenshots are showing errors from the vanilla syntax checker which should be disabled. You should only see JassHelper/PJASS when saving.
 
Level 3
Joined
Jan 19, 2019
Messages
29
Hey had some questions,
How to import this to my map without deleting previous triggers??? any idea? also not sure how to open multiple world edit tabs.
If anyone could help with either of these things it'd be greatly appreciated.
 

Uncle

Warcraft Moderator
Level 63
Joined
Aug 10, 2018
Messages
6,456
Hey had some questions,
How to import this to my map without deleting previous triggers??? any idea? also not sure how to open multiple world edit tabs.
If anyone could help with either of these things it'd be greatly appreciated.

What do you mean? Why would you need multiple editor tabs and why would you need to delete previous triggers? Just open this map, copy the save & load folder containing the triggers, open your map, and paste the folder in your triggers tab. You don't have to replace/delete anything, and you can copy from one map and paste in another.
 

Uncle

Warcraft Moderator
Level 63
Joined
Aug 10, 2018
Messages
6,456
Can someone help me?
How do I save money and wood?
It'll look something like the actions below. Remember, in your load trigger you need to load everything in the reverse order of how you saved it. Meaning, if you save the player's gold as the very FIRST thing in your save trigger, then you must load it as the very LAST thing in your load trigger.
  • save action
    • Events
    • Conditions
    • Actions
      • Set SaveCount = (SaveCount + 1)
      • Set SaveValue[SaveCount] = (Player 1 (Red) Current gold)
      • Set SaveMaxValue[SaveCount] = 9999

  • load action
    • Events
    • Conditions
    • Actions
      • Set SaveCount = (SaveCount + 1)
      • Set SaveMaxValue[SaveCount] = 9999
      • Custom script: call SaveHelper.GUILoadNext()
      • Player - Set Player 1 (Red) Current gold to SaveValue[SaveCount]
Instead of using Player 1 (if you want this to work for multiple players) then use the variable SaveLoadEvent_Player to reference whoever typed -save/-load.
 
Level 3
Joined
Aug 24, 2014
Messages
30
It'll look something like the actions below. Remember, in your load trigger you need to load everything in the reverse order of how you saved it. Meaning, if you save the player's gold as the very FIRST thing in your save trigger, then you must load it as the very LAST thing in your load trigger.
  • save action
    • Events
    • Conditions
    • Actions
      • Set SaveCount = (SaveCount + 1)
      • Set SaveValue[SaveCount] = (Player 1 (Red) Current gold)
      • Set SaveMaxValue[SaveCount] = 9999

  • load action
    • Events
    • Conditions
    • Actions
      • Set SaveCount = (SaveCount + 1)
      • Set SaveMaxValue[SaveCount] = 9999
      • Custom script: call SaveHelper.GUILoadNext()
      • Player - Set Player 1 (Red) Current gold to SaveValue[SaveCount]
Instead of using Player 1 (if you want this to work for multiple players) then use the variable SaveLoadEvent_Player to reference whoever typed -save/-load.





It worked
Thanks :D +rep
 
Last edited:
I'm trying to make an RPG essentially that has instances for dungeons or large cities if I make the map a campaign would it not work this way?

Your only option at the moment for multiplayer is to make your map large enough to contain all the instances you want to create. Then, you can create a region surrounding the entire area and change the player's camera bounds.
 
Level 4
Joined
Aug 17, 2014
Messages
102
Your only option at the moment for multiplayer is to make your map large enough to contain all the instances you want to create. Then, you can create a region surrounding the entire area and change the player's camera bounds.
I'll be trying that out the only real issue I've begun to realize is the 480x480 space is not enough for me lol, but I might just scale everything down.
 
Level 11
Joined
Jul 4, 2016
Messages
626
Updated, v1.0.5.
  • Added function "HERO_WINDOW_NAME" where you can configure what name is displayed in the equipment window.
  • onEquip/onUnequip are initialized to null to prevent a thread crash when they aren't used.
  • Moved equip/unequip event execution to their respective methods (opposed to on click functions).
  • Moved UnitDex check from DGUI library to the inventory & equipment structs.


Anything that can be represented as an integer, which is anything, can be used with a save/load system.

You can retrieve the items that are equipped like:

JASS:
local Equipment gear = Equipment[GetTriggerUnit()] // any unit

call savecode.save(gear.item[0].id) // or something similar, and for the rest of the gear items
 
Level 4
Joined
Sep 10, 2013
Messages
39
Something doesn't work right with the GUI -save/-load system.

If you save your progress (type: "-save") for the first time, for example a Hero lvl 5, quit the game, restart it and type "-load", the lvl 5 Hero will be loaded. Until here everything is fine. But ...
... if you save him again (for example with lvl 7) and load him again, you will get your past saved game with an Hero of lvl 5.
 

Uncle

Warcraft Moderator
Level 63
Joined
Aug 10, 2018
Messages
6,456
Is there a limitation to how much you can save? I'm having issues with my map, I have a Diablo style item system that needs to store a lot of different variables to an item.

  • Save Items
    • Events
    • Conditions
    • Actions
      • Set SaveTempUnit = Player1StashIndex[1]
      • For each (Integer A) from 1 to 6, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Item carried by SaveTempUnit in slot (Integer A)) Not equal to No item
            • Then - Actions
              • Set TempItem = (Item carried by SaveTempUnit in slot (Integer A))
              • Set TempInteger = (Custom value of TempItem)
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemMod1[TempInteger]
              • Set SaveMaxValue[SaveCount] = 50
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemMod2[TempInteger]
              • Set SaveMaxValue[SaveCount] = 50
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveMaxValue[SaveCount] = 50
              • Set SaveValue[SaveCount] = ItemMod3[TempInteger]
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemRoll1[TempInteger]
              • Set SaveMaxValue[SaveCount] = 100
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemRoll2[TempInteger]
              • Set SaveMaxValue[SaveCount] = 100
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemRoll3[TempInteger]
              • Set SaveMaxValue[SaveCount] = 100
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemTier1[TempInteger]
              • Set SaveMaxValue[SaveCount] = 10
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemTier2[TempInteger]
              • Set SaveMaxValue[SaveCount] = 10
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemTier3[TempInteger]
              • Set SaveMaxValue[SaveCount] = 10
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemBase[TempInteger]
              • Set SaveMaxValue[SaveCount] = 25
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemType[TempInteger]
              • Set SaveMaxValue[SaveCount] = 25
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemRarity[TempInteger]
              • Set SaveMaxValue[SaveCount] = 5
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemLevel[TempInteger]
              • Set SaveMaxValue[SaveCount] = 100
              • -------- - --------
              • Set SaveCount = (SaveCount + 1)
              • Set SaveValue[SaveCount] = ItemGoldValue[TempInteger]
              • Set SaveMaxValue[SaveCount] = 999
            • Else - Actions
  • Load Items
    • Events
    • Conditions
    • Actions
      • Set TurnOffLoop = False
      • For each (Integer A) from 1 to 6, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TurnOffLoop Equal to False
            • Then - Actions
              • Set SaveCount = (SaveCount + 1)
              • Set SaveMaxValue[SaveCount] = 999
              • Custom script: call SaveHelper.GUILoadNext()
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SaveValue[SaveCount] Not equal to 0
                • Then - Actions
                  • Game - Display to (All players) for 5.00 seconds the text: (Load Item + (String((Integer A))))
                  • Item - Create Dummy Item at (Center of (Playable map area))
                  • Set AIndexItemCount = (AIndexItemCount + 1)
                  • Set IndexItem[AIndexItemCount] = (Last created item)
                  • Item - Set the custom value of (Last created item) to AIndexItemCount
                  • Set TempInteger = AIndexItemCount
                  • -------- - --------
                  • Set ItemGoldValue[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 100
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemLevel[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 5
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemRarity[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 25
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemType[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 25
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemBase[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 10
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemTier3[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 10
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemTier2[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 10
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemTier1[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 100
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemRoll3[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 100
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemRoll2[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 100
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemRoll1[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 50
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemMod3[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 50
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemMod2[TempInteger] = SaveValue[SaveCount]
                  • -------- - --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set SaveMaxValue[SaveCount] = 50
                  • Custom script: call SaveHelper.GUILoadNext()
                  • Set ItemMod1[TempInteger] = SaveValue[SaveCount]
                • Else - Actions
                  • Set TurnOffLoop = True
                  • Set SaveCount = (SaveCount - 1)
            • Else - Actions

I can only Save and Load up to 4 items before this stops working. If there is no limit to how much I can save then what am I doing wrong?
 
Last edited:
Top