• 🏆 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!

Looking for someone familiar with AceHarts Save/Load

Status
Not open for further replies.
Level 11
Joined
Jul 25, 2005
Messages
573
I've used AceHart's save/load once before in my Dark Sun RPG map, I'm using it again in a new RPG I'm working on and I need it to also save hero skill levels. I've been messing with it trying to get it to work properly but for some reason it won't load the skill levels on the hero when I load the code.

Anyone know if that part of the code in AceHart's system is bugged?

Update

Ok it works in AceHarts map however in mine something is wrong and I can't seem to pinpoint it. Suggestions? I'll post the triggers.

Here is the Save trigger. Which as far as I know works for everything other than the skill saving.

  • SaveLoad Save Mine
    • Events
      • Player - Player 1 (Red) types a chat message containing -save as An exact match
      • Player - Player 2 (Blue) types a chat message containing -save as An exact match
      • Player - Player 3 (Teal) types a chat message containing -save as An exact match
      • Player - Player 4 (Purple) types a chat message containing -save as An exact match
    • Conditions
    • Actions
      • -------- Prepare the save array with this player's Hero --------
      • Set SaveCount = 0
      • -------- Player's Gold --------
      • Set SaveCount = (SaveCount + 1)
      • Set Save[SaveCount] = ((Triggering player) Current gold)
      • -------- Player's Lumber --------
      • Set SaveCount = (SaveCount + 1)
      • Set Save[SaveCount] = ((Triggering player) Current lumber)
      • -------- Take all Heroes (assumes there is only one) --------
      • Unit Group - Pick every unit in (Units owned by (Triggering player) matching (((Matching unit) is A Hero) Equal to True)) and do (Actions)
        • Loop - Actions
          • -------- Save the Hero --------
          • Set SaveCount = (SaveCount + 1)
          • Set TempUnit = (Picked unit)
          • Custom script: set udg_Save[udg_SaveCount] = SaveLoad_Unit2Integer( udg_TempUnit )
          • -------- Skill Points --------
          • Set SaveCount = (SaveCount + 1)
          • Set Save[SaveCount] = (Unspent skill points of (Picked unit))
          • -------- Hero level --------
          • Set SaveCount = (SaveCount + 1)
          • Set Save[SaveCount] = (Hero level of (Picked unit))
          • -------- How many items does he carry --------
          • Set SaveCount = (SaveCount + 1)
          • Set Save[SaveCount] = (Number of items carried by (Picked unit))
          • -------- Add all items --------
          • 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 (Picked unit) in slot (Integer A)) is owned) Equal to True
                • Then - Actions
                  • -------- The actual item --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set TempItem = (Item carried by (Picked unit) in slot (Integer A))
                  • Custom script: set udg_Save[udg_SaveCount] = SaveLoad_Item2Integer( udg_TempItem )
                  • -------- The number of charges it has --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set Save[SaveCount] = (Charges remaining in (Item carried by (Picked unit) in slot (Integer A)))
                • Else - Actions
          • -------- Add all abilities --------
          • For each (Integer A) from 1 to SaveLoad_Abilities_LastIndex, do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Level of SaveLoad_Abilities[(Integer A)] for (Picked unit)) Greater than 0
                • Then - Actions
                  • -------- The actual ability --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set Save[SaveCount] = (Integer A)
                  • -------- Its level --------
                  • Set SaveCount = (SaveCount + 1)
                  • Set Save[SaveCount] = (Level of SaveLoad_Abilities[(Integer A)] for (Picked unit))
                • Else - Actions
      • -------- Turn values into code --------
      • Custom script: set udg_Code = SaveLoad_Encode()
      • -------- Show code to player --------
      • Quest - Display to (Player group((Triggering player))) the Secret message: Your code:
      • Game - Display to (Player group((Triggering player))) for 60.00 seconds the text: Code

It uses a mix of his triggers to save/load Gold, Lumber, Hero, Hero level, Remaining Skill points, hero exp, skills, skill levels, and I believe thats all I'm trying to get it to save atm, it works with everything BUT the skills, it will not increase their levels.

  • SaveLoad Load Mine
    • Events
      • Player - Player 1 (Red) types a chat message containing -load as A substring
      • Player - Player 2 (Blue) types a chat message containing -load as A substring
      • Player - Player 3 (Teal) types a chat message containing -load as A substring
      • Player - Player 4 (Purple) types a chat message containing -load as A substring
    • Conditions
      • (Substring((Entered chat string), 1, 6)) Equal to (Matched chat string)
      • (Length of (Entered chat string)) Greater than 6
    • Actions
      • -------- Try to decode what was typed --------
      • Set Code = (Substring((Entered chat string), 7, (Length of (Entered chat string))))
      • Custom script: set udg_Validate = SaveLoad_Decode( udg_Code )
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Validate Equal to False
        • Then - Actions
          • -------- Invalid code --------
          • Game - Display to (Player group((Triggering player))) the text: There's some error ...
          • Skip remaining actions
        • Else - Actions
      • -------- It worked, let's do something with it --------
      • Unit Group - Pick every unit in (Units owned by (Triggering player) matching (((Matching unit) is A Hero) Equal to True)) and do (Actions)
        • Loop - Actions
          • Unit - Remove (Picked unit) from the game
      • Set TempInteger = SaveCount
      • Set SaveCount = 1
      • -------- Restore Gold --------
      • Player - Set (Triggering player) Current gold to Save[SaveCount]
      • Set SaveCount = (SaveCount + 1)
      • -------- Restore Lumber --------
      • Player - Set (Triggering player) Current lumber to Save[SaveCount]
      • Set SaveCount = (SaveCount + 1)
      • Custom script: set udg_TempUnitType = SaveLoad_Integer2Unit(udg_Save[udg_SaveCount])
      • Unit - Create 1 TempUnitType for (Triggering player) at ((Triggering player) start location) facing Default building facing degrees
      • Set SaveCount = (SaveCount + 1)
      • Hero - Modify unspent skill points of (Last created unit): Set to Save[SaveCount] points
      • Set SaveCount = (SaveCount + 1)
      • Hero - Set (Last created unit) Hero-level to Save[SaveCount], Hide level-up graphics
      • Set SaveCount = (SaveCount + 1)
      • For each (Integer A) from 1 to Save[SaveCount], do (Actions)
        • Loop - Actions
          • Set SaveCount = (SaveCount + 1)
          • Custom script: set udg_TempItemType = SaveLoad_Integer2Item(udg_Save[udg_SaveCount])
          • Hero - Create TempItemType and give it to (Last created unit)
          • Set SaveCount = (SaveCount + 1)
          • Item - Set charges remaining in (Last created item) to Save[SaveCount]
      • For each (Integer SaveCount) from Save[SaveCount] to TempInteger, do (Actions)
        • Loop - Actions
          • For each (Integer A) from 1 to Save[(SaveCount + 1)], do (Actions)
            • Loop - Actions
              • Custom script: call SelectHeroSkill( GetLastCreatedUnit(), udg_SaveLoad_Abilities[ udg_Save[ udg_SaveCount ] ] )
          • Set SaveCount = (SaveCount + 1)
The Part that is more than likely out of place or bugged is more than likely:

  • For each (Integer SaveCount) from Save[SaveCount] to TempInteger, do (Actions)
    • Loop - Actions
      • For each (Integer A) from 1 to Save[(SaveCount + 1)], do (Actions)
        • Loop - Actions
          • Custom script: call SelectHeroSkill( GetLastCreatedUnit(), udg_SaveLoad_Abilities[ udg_Save[ udg_SaveCount ] ] )
      • Set SaveCount = (SaveCount + 1)
Thats the loading section that deals with loading the skills/levels =/
 
Last edited:
Level 9
Joined
May 30, 2008
Messages
430
Can't help you. I never try to look how save/load systems work actualy but maybe some day i will chek them. I think some where inside your triggers have to be all abilitys saved as variables chek this it may be some where
 
Level 2
Joined
Jul 17, 2009
Messages
27
Use some debug messages to check that you're loading everything correctly. Before you try and apply the loaded skills, print out to the game each skill and skill level you're attempting to load.

That way, you can see if the problem is with saving/loading or with assigning skill points.
 
Level 11
Joined
Jul 25, 2005
Messages
573
Use some debug messages to check that you're loading everything correctly. Before you try and apply the loaded skills, print out to the game each skill and skill level you're attempting to load.

That way, you can see if the problem is with saving/loading or with assigning skill points.

The skills aren't actually hero skills, their unit skills with multiple levels. Could that be the cause?
 
Level 7
Joined
Dec 19, 2008
Messages
276
Try write in jass code.

And don't use SaveCount, it's a crap.

You can just use Save[0], Save[1], Save[2], Save[3]
Not Save[SaveCount],SaveCount=SaveCount+1,Save[SaveCount]

Directly use numbers. AceHart was done savecount for Items saving, but i recommend saving each slot (ALSO SLOTS WITHOUT ITEMS)

It's hard to explain,,,
 
Level 11
Joined
Jul 25, 2005
Messages
573
in the Load trigger, you are using Triggering Unit, but there is no unit to activate the trigger

I can't seem to find the section of code your talking about..

Try write in jass code.

And don't use SaveCount, it's a crap.

You can just use Save[0], Save[1], Save[2], Save[3]
Not Save[SaveCount],SaveCount=SaveCount+1,Save[SaveCount]

Directly use numbers. AceHart was done savecount for Items saving, but i recommend saving each slot (ALSO SLOTS WITHOUT ITEMS)

It's hard to explain,,,

My JASS knowledge is EXTRRRRRREEEEEEMELY limited so that is pretty much out of the question as to what I can do, as for all the stuff with the SaveCount, I personally don't know how the system itself works code wise, I just know I got it to work before in a previous map but I have no clue how to mess with the code to make it work differently without screwing something up =/
 
Status
Not open for further replies.
Top