Save/Load Code, Yet Another

Discussion in 'Tutorial Repository' started by AceHart, Jan 21, 2007.

  1. theonlylok1

    theonlylok1 New Member

    Ratings:
    +0 / 0 / -0
    These are all my triggers don't know whats wrong.

    Code:
    SaveLoad Initialization All
        Events
            Map initialization
        Conditions
        Actions
            -------- List of Heroes --------
            Set SaveLoad_Heroes[1] = |cff171717Evil|r
            Set SaveLoad_Heroes[2] = |CFF9999FFIce Lord|r
            Set SaveLoad_Heroes[3] = |cffFFFF00Templar Knight|r
            Set SaveLoad_Heroes[4] = |cff0000FFTime Keeper|r
            Set SaveLoad_Heroes[5] = |cffFF0000Legion|r
            Set SaveLoad_Heroes[6] = |cff00FF00Fallen Angel|r
            Set SaveLoad_Heroes[7] = |cff8000FFAssassin|r
            Set SaveLoad_Heroes[8] = |cffFFFFFFWhitePhoenix|r
            -------- Number of Heroes --------
            Set SaveLoad_Heroes_LastIndex = 8
            -------- List of Items --------
            Set SaveLoad_Items[1] = Claws of Attack +15
            Set SaveLoad_Items[2] = Cheese
            Set SaveLoad_Items[3] = Wand of Lightning Shield
            Set SaveLoad_Items[4] = Magic Key Chain
            -------- Number of Items --------
            Set SaveLoad_Items_LastIndex = 4
            -------- List of Abilities --------
            Set SaveLoad_Abilities[1] = |cff0000FFBackstab|r 
            Set SaveLoad_Abilities[2] = |cff0000FFBacktrack|r
            Set SaveLoad_Abilities[3] = |cff0000FFBlade Beam|r 
            Set SaveLoad_Abilities[4] = |cff0000FFBlade of Everlasting Life|r 
            Set SaveLoad_Abilities[5] = |cff0000FFBlessing of Might|r 
            Set SaveLoad_Abilities[6] = |cff0000FFCoil of Life|r 
            Set SaveLoad_Abilities[7] = |cff0000FFCrusader Strike|r 
            Set SaveLoad_Abilities[8] = |cff0000FFFar Sight|r 
            Set SaveLoad_Abilities[9] = |cff0000FFFear|r  (Archimonde)
            Set SaveLoad_Abilities[10] = |cff0000FFFlash|r 
            Set SaveLoad_Abilities[11] = |cff0000FFFlurry|r 
            Set SaveLoad_Abilities[12] = |cff0000FFMind Blast|r 
            Set SaveLoad_Abilities[13] = |cff0000FFMotivation|r 
            Set SaveLoad_Abilities[14] = |cff0000FFMulti-Shot|r
            Set SaveLoad_Abilities[15] = |cff0000FFNet|r  
            Set SaveLoad_Abilities[16] = |cff0000FFQuarter Strike|r 
            Set SaveLoad_Abilities[17] = |cff0000FFReapers Scyte|r 
            Set SaveLoad_Abilities[18] = |cff0000FFSeal of Vengeance|r 
            Set SaveLoad_Abilities[19] = |cff0000FFShadow Pain|r 
            Set SaveLoad_Abilities[20] = |cff0000FFThunder Teleportation|r 
            Set SaveLoad_Abilities[21] = |cff0000FFTime Stop|r 
            Set SaveLoad_Abilities[22] = |cff0000FFToxic Storm|r 
            Set SaveLoad_Abilities[23] = |cff0000FFWard of Invisibility|r 
            Set SaveLoad_Abilities[24] = |cff00FF00Basic Training|r
            Set SaveLoad_Abilities[25] = |cffFF0000Crusader|r 
            Set SaveLoad_Abilities[26] = |cffFF0000Eviserate|r 
            Set SaveLoad_Abilities[27] = |cffFF0000Illusion Strike|r 
            Set SaveLoad_Abilities[28] = |cffFF0000Magnetic Storm|r 
            Set SaveLoad_Abilities[29] = |cffFF0000Shadowform|r 
            Set SaveLoad_Abilities[30] = |cffFF0000Stealth|r 
            Set SaveLoad_Abilities[31] = |cffFF0000Time Travel|r
            Set SaveLoad_Abilities[32] = |cffFF0000Transdimensional Arrows|r 
            Set SaveLoad_Abilities[33] = |cff0000FFMana Shield|r (Neutral Hostile)
            -------- Number of Abilities --------
            Set SaveLoad_Abilities_LastIndex = 33
            -------- These three lines may be changed if needed --------
            Set SaveLoad_Alphabet = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
            Set SaveLoad_CaseSensitive = False
            Set SaveLoad_UsePlayername = True
            -------- Required: false --------
            Set SaveLoad_Initialized = False
            -------- Leave as is. Used to autocreate variables when copy & pasting to a new map --------
            Set Code = AceHart
            Set Save[1] = 0
            Set SaveCount = 1
            Set Validate = False
            Set SaveLoad_Compress[1] = 0
            Set SaveLoad_Uncompress[1] = 0
    Code:
    SaveLoad Save All
        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)
            -------- Take all Heroes --------
            Set UnitGroup = (Units owned by (Triggering player) matching (((Matching unit) is A Hero) Equal to True))
            Set SaveCount = (SaveCount + 1)
            Set Save[SaveCount] = (Number of units in UnitGroup)
            Unit Group - Pick every unit in UnitGroup 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 )
                    -------- Hero Experience --------
                    Set SaveCount = (SaveCount + 1)
                    Set Save[SaveCount] = (Hero experience of (Picked unit))
                    -------- Heros Stats --------
                    Set SaveCount = (SaveCount + 1)
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            (Triggering player) Equal to Player 1 (Red)
                        Then - Actions
                            Set Save[SaveCount] = (Integer(Stats1))
                        Else - Actions
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    (Triggering player) Equal to Player 2 (Blue)
                                Then - Actions
                                    Set Save[SaveCount] = (Integer(Stats2))
                                Else - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        If - Conditions
                                            (Triggering player) Equal to Player 3 (Teal)
                                        Then - Actions
                                            Set Save[SaveCount] = (Integer(Stats3))
                                        Else - Actions
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    (Triggering player) Equal to Player 4 (Purple)
                                                Then - Actions
                                                    Set Save[SaveCount] = (Integer(Stats4))
                                                Else - Actions
                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                        If - Conditions
                                                            (Triggering player) Equal to Player 5 (Yellow)
                                                        Then - Actions
                                                            Set Save[SaveCount] = (Integer(Stats5))
                                                        Else - Actions
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    (Triggering player) Equal to Player 6 (Orange)
                                                                Then - Actions
                                                                    Set Save[SaveCount] = (Integer(Stats6))
                                                                Else - Actions
                                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                        If - Conditions
                                                                            (Triggering player) Equal to Player 7 (Green)
                                                                        Then - Actions
                                                                            Set Save[SaveCount] = (Integer(Stats7))
                                                                        Else - Actions
                                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                                If - Conditions
                                                                                    (Triggering player) Equal to Player 8 (Pink)
                                                                                Then - Actions
                                                                                    Set Save[SaveCount] = (Integer(Stats8))
                                                                                Else - Actions
                                                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                                        If - Conditions
                                                                                            (Triggering player) Equal to Player 9 (Gray)
                                                                                        Then - Actions
                                                                                            Set Save[SaveCount] = (Integer(Stats9))
                                                                                        Else - Actions
                                                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                                                If - Conditions
                                                                                                    (Triggering player) Equal to Player 10 (Light Blue)
                                                                                                Then - Actions
                                                                                                    Set Save[SaveCount] = (Integer(Stats101))
                                                                                                Else - Actions
                                                                                                    Do nothing
                    -------- Heros Energy --------
                    Set SaveCount = (SaveCount + 1)
                    Set Save[SaveCount] = (Intelligence of (Picked unit) (Exclude bonuses))
                    -------- Heros Agility --------
                    Set SaveCount = (SaveCount + 1)
                    Set Save[SaveCount] = (Agility of (Picked unit) (Exclude bonuses))
                    -------- Heros Strength --------
                    Set SaveCount = (SaveCount + 1)
                    Set Save[SaveCount] = (Strength of (Picked unit) (Exclude bonuses))
                    -------- Hero Position X --------
                    Set SaveCount = (SaveCount + 1)
                    Set Save[SaveCount] = (Integer((X of (Position of (Picked unit)))))
                    -------- Hero Position Y --------
                    Set SaveCount = (SaveCount + 1)
                    Set Save[SaveCount] = (Integer((Y of (Position 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))
                                    Item - Make (Item carried by (Picked unit) in slot (Integer A)) Undroppable
                                    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
            -------- 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
    Code:
    SaveLoad Load All
        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 SaveCount = 1
            -------- Restore Gold --------
            Player - Set (Triggering player) Current gold to Save[SaveCount]
            -------- For "number of Heroes", do --------
            Set SaveCount = (SaveCount + 1)
            For each (Integer B) from 1 to Save[SaveCount], do (Actions)
                Loop - Actions
                    -------- Restore Hero --------
                    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 Experience --------
                    Trigger - Turn off level up <gen>
                    Set SaveCount = (SaveCount + 1)
                    Hero - Set (Last created unit) experience to Save[SaveCount], Hide level-up graphics
                    -------- Heros Stats --------
                    Trigger - Turn on level up <gen>
                    Set SaveCount = (SaveCount + 1)
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            (Triggering player) Equal to Player 1 (Red)
                        Then - Actions
                            Set Stats1 = (Real(Save[SaveCount]))
                        Else - Actions
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    (Triggering player) Equal to Player 2 (Blue)
                                Then - Actions
                                    Set Stats2 = (Real(Save[SaveCount]))
                                Else - Actions
                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        If - Conditions
                                            (Triggering player) Equal to Player 3 (Teal)
                                        Then - Actions
                                            Set Stats3 = (Real(Save[SaveCount]))
                                        Else - Actions
                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                If - Conditions
                                                    (Triggering player) Equal to Player 4 (Purple)
                                                Then - Actions
                                                    Set Stats4 = (Real(Save[SaveCount]))
                                                Else - Actions
                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                        If - Conditions
                                                            (Triggering player) Equal to Player 5 (Yellow)
                                                        Then - Actions
                                                            Set Stats5 = (Real(Save[SaveCount]))
                                                        Else - Actions
                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                If - Conditions
                                                                    (Triggering player) Equal to Player 6 (Orange)
                                                                Then - Actions
                                                                    Set Stats6 = (Real(Save[SaveCount]))
                                                                Else - Actions
                                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                        If - Conditions
                                                                            (Triggering player) Equal to Player 7 (Green)
                                                                        Then - Actions
                                                                            Set Stats7 = (Real(Save[SaveCount]))
                                                                        Else - Actions
                                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                                If - Conditions
                                                                                    (Triggering player) Equal to Player 8 (Pink)
                                                                                Then - Actions
                                                                                    Set Stats8 = (Real(Save[SaveCount]))
                                                                                Else - Actions
                                                                                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                                        If - Conditions
                                                                                            (Triggering player) Equal to Player 9 (Gray)
                                                                                        Then - Actions
                                                                                            Set Stats9 = (Real(Save[SaveCount]))
                                                                                        Else - Actions
                                                                                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                                                                                If - Conditions
                                                                                                    (Triggering player) Equal to Player 10 (Light Blue)
                                                                                                Then - Actions
                                                                                                    Set Stats101 = (Real(Save[SaveCount]))
                                                                                                Else - Actions
                                                                                                    Do nothing
                    -------- Heros Energy --------
                    Set SaveCount = (SaveCount + 1)
                    Hero - Modify Intelligence of (Last created unit): Set to Save[SaveCount]
                    -------- Heros Agility --------
                    Set SaveCount = (SaveCount + 1)
                    Hero - Modify Agility of (Last created unit): Set to Save[SaveCount]
                    -------- Heros Strength --------
                    Set SaveCount = (SaveCount + 1)
                    Hero - Modify Strength of (Last created unit): Set to Save[SaveCount]
                    -------- Move to saved position --------
                    Set SaveCount = (SaveCount + 1)
                    Unit - Move (Last created unit) instantly to (Point((Real(Save[SaveCount])), (Real(Save[(SaveCount + 1)]))))
                    Set SaveCount = (SaveCount + 1)
                    -------- Recreate all items --------
                    Set SaveCount = (SaveCount + 1)
                    For each (Integer A) from 1 to Save[SaveCount], do (Actions)
                        Loop - Actions
                            -------- The actual item --------
                            Set SaveCount = (SaveCount + 1)
                            Custom script:   set udg_TempItemType = SaveLoad_Integer2Item(udg_Save[udg_SaveCount])
                            Item - Make (Item carried by (Picked unit) in slot (Integer A)) Undroppable
                            Hero - Create TempItemType and give it to (Last created unit)
                            -------- Number of charges --------
                            Set SaveCount = (SaveCount + 1)
                            Item - Set charges remaining in (Last created item) to Save[SaveCount]
    
     
  2. theonlylok1

    theonlylok1 New Member

    Ratings:
    +0 / 0 / -0
    Bump

    Bump
     
  3. emjlr3

    emjlr3 Change can be a good thing Staff Member

    Ratings:
    +396 / 0 / -0
    FYI, its rather easy to reach the OP limit with this - I did so with 6 items + 1 ability

    added in some Sleeps to stop it

    don't remember if you mentioned that or not throughout your post
     
  4. AceHart

    AceHart Your Friendly Neighborhood Admin

    Ratings:
    +1,489 / 0 / -0
    It should actually only depend on the number of entries in the Hero and Item arrays.
    My suggestion would be to keep it to the 10 most used ones.

    Hint: it saves ad loads just fine if it does not find anything in those arrays... :p
     
  5. emjlr3

    emjlr3 Change can be a good thing Staff Member

    Ratings:
    +396 / 0 / -0
    i was storing a minimum of 9 and maximum of 23 ^^
     
  6. aaron79

    aaron79 New Member

    Ratings:
    +1 / 0 / -0
    this is very nice and i did everything correctly but when i try it out it says error on > Custom script: set udg_TempUnitType = SaveLoad_Integer2Unit(udg_Save[udg_SaveCount]) on every trigger and it says its expecting a name; is this expecting me to turn it into a string?:banghead:
     
  7. AceHart

    AceHart Your Friendly Neighborhood Admin

    Ratings:
    +1,489 / 0 / -0
    No, you're expected to read the part called "how to import this" in post #1...

    Or many many many other posts in this thread that asked the very same thing.


    The problem is rather simple to solve, import the JASS script from the map header...
     
  8. aaron79

    aaron79 New Member

    Ratings:
    +1 / 0 / -0
    this tutorial is great but i have one question. why des it say "expected a name" when i try to save the trigger when i put in


    set udg_Code = SaveLoad_Encode()
     
  9. TriggerHappy

    TriggerHappy ...

    Ratings:
    +341 / 0 / -0
    aaron , read the post again.
     
  10. CaptDeath

    CaptDeath New Member

    Ratings:
    +103 / 0 / -0
    now this may sound dum but just to chek hero lvl lets say 10000 will be saved yes?
    u said 666 so i could cap without directly saying it so if u wouldnt mind enlighting me ace with the truth about your magnificent system
    *inhales *
     
  11. AceHart

    AceHart Your Friendly Neighborhood Admin

    Ratings:
    +1,489 / 0 / -0
    As long as it fits in an integer. Which is around 2 billions and then some...

    Then again, I've yet to see a map where 10000 Hero levels make sense :p
     
  12. Linear88

    Linear88 New Member

    Ratings:
    +2 / 0 / -0
    I don't understand the parts Encode and Decode.

    When I enable the triggers after copying them, it gives me an error of an expected name.
     
  13. TriggerHappy

    TriggerHappy ...

    Ratings:
    +341 / 0 / -0
    You need to copy the maps custom map script. Learn to read.
     
  14. psychophat

    psychophat New Member

    Ratings:
    +0 / 0 / -0
    Is this okay I've added under "SaveLoad Initialization Abilities":

    Set SaveLoad_Heroes[5] = HeroTest5
    --
    Set SaveLoad_Heroes_LastIndex = 5
    --
    Set SaveLoad_Alphabet = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
    Set SaveLoad_CaseSensitive = True

    I'm using the one with save abilities, do I need to add all the items on the array and will the items be loaded?
     
  15. neetmaster

    neetmaster New Member

    Ratings:
    +0 / 0 / -0
    Can anyone guide me on how to save unused skill points and level of skills in spellbooks?

    Edit:
    well actually nevermind i figured that out.
     
  16. Sgt_Johnson

    Sgt_Johnson Active Member

    Ratings:
    +1 / 0 / -0
    Hey, I recently implemented the System into my RPG map, it worked perfectly fine until recently, I replaced some abilities with new ones and added 2 new items.

    I also removed a bunch of consumable items such as potions and stuff from the Save/Load, since the system would save charges and the potions and such have 20 charges the code would be extremely long if the player had say 2-4 slots of consumables. I used item-classes to determine what kind of item there is (Such as Armor is Permanent, Weapons are Artifacts, Jewelry is Campaign, Potions and such are Purchaseable) this is also used for the triggers that stop players from having 2 of one type of equipment (2 weapons, 2 armors, ect.)

    Ever since I did that the system has gone screwy. When the player loads his hero it loads everything fine except the heroes inventory and skills, it only loads the 1st saved item from the heroes inventory, the rest are lost and no skills are loaded at all.

    Here is each trigger

    Init Trigger
    Code:
    Trigger:
    SaveLoad Initialization All
    Collapse Events
    Map initialization
    Conditions
    Collapse Actions
    -------- List of Heroes --------
    Set SaveLoad_Heroes[1] = Arcanist
    Set SaveLoad_Heroes[2] = Assassain
    Set SaveLoad_Heroes[3] = Cleric
    Set SaveLoad_Heroes[4] = Druid
    Set SaveLoad_Heroes[5] = Druid (Bear)
    Set SaveLoad_Heroes[6] = Fire Mage
    Set SaveLoad_Heroes[7] = Frost Mage
    Set SaveLoad_Heroes[8] = Necromancer
    Set SaveLoad_Heroes[9] = Paladin
    Set SaveLoad_Heroes[10] = Ranger
    Set SaveLoad_Heroes[11] = Warrior
    -------- Number of Heroes --------
    Set SaveLoad_Heroes_LastIndex = 11
    -------- List of Items --------
    Set SaveLoad_Items[1] = Assassain's Blade
    Set SaveLoad_Items[2] = Azurestone Staff
    Set SaveLoad_Items[3] = Bandit's Sabre
    Set SaveLoad_Items[4] = Barbarian's Sword
    Set SaveLoad_Items[5] = Blade of Retribution
    Set SaveLoad_Items[6] = Crusader's Blade
    Set SaveLoad_Items[7] = Crusader's Flamberge
    Set SaveLoad_Items[8] = Crusader's Repeater
    Set SaveLoad_Items[9] = Crusader's Rod
    Set SaveLoad_Items[10] = Crystalline Rod
    Set SaveLoad_Items[11] = Dagger of the Sands
    Set SaveLoad_Items[12] = Deathdealer
    Set SaveLoad_Items[13] = Diamond Edge
    Set SaveLoad_Items[14] = Firestrike Dagger
    Set SaveLoad_Items[15] = Gladius
    Set SaveLoad_Items[16] = Gorehowl
    Set SaveLoad_Items[17] = Hammer of the Grand Crusader
    Set SaveLoad_Items[18] = Hand of Garak
    Set SaveLoad_Items[19] = Hunter's Bow
    Set SaveLoad_Items[20] = Knight's Blade
    Set SaveLoad_Items[21] = Knight's Cane
    Set SaveLoad_Items[22] = Knight's Crossbow
    Set SaveLoad_Items[23] = Knight's Gavel
    Set SaveLoad_Items[24] = Knight's Slicer
    Set SaveLoad_Items[25] = Longbow of Marksmanship
    Set SaveLoad_Items[26] = Night Reaver
    Set SaveLoad_Items[27] = Pyromancer's Staff
    Set SaveLoad_Items[28] = Quarterstaff
    Set SaveLoad_Items[29] = Razortalon
    Set SaveLoad_Items[30] = Recruits Bow
    Set SaveLoad_Items[31] = Recruits Dagger
    Set SaveLoad_Items[32] = Recruits Short Blade
    Set SaveLoad_Items[33] = Recruits Stave
    Set SaveLoad_Items[34] = Recurve of the Giants
    Set SaveLoad_Items[35] = Rod of the Purger
    Set SaveLoad_Items[36] = Rogue's Short Blade
    Set SaveLoad_Items[37] = Short Bow
    Set SaveLoad_Items[38] = Shortsword
    Set SaveLoad_Items[39] = Small Dagger
    Set SaveLoad_Items[40] = Sora'mar Devastator
    Set SaveLoad_Items[41] = Sora'mar Repeater
    Set SaveLoad_Items[42] = Soulstring
    Set SaveLoad_Items[43] = Splintermark
    Set SaveLoad_Items[44] = Staff of the Nightblade
    Set SaveLoad_Items[45] = Stonehewer
    Set SaveLoad_Items[46] = Stormcaller
    Set SaveLoad_Items[47] = The Edge of Death
    Set SaveLoad_Items[48] = Warpcaster
    Set SaveLoad_Items[49] = Watchman's Longbow
    Set SaveLoad_Items[50] = Baron's Chestguard
    Set SaveLoad_Items[51] = Beserkers Hauberk
    Set SaveLoad_Items[52] = Bloodmail Hauberk
    Set SaveLoad_Items[53] = Blue Linen Robe
    Set SaveLoad_Items[54] = Breastplate of Holyness
    Set SaveLoad_Items[55] = Breastplate of Retribution
    Set SaveLoad_Items[56] = Breastplate of Vindication
    Set SaveLoad_Items[57] = Breastplate of the Slayer
    Set SaveLoad_Items[58] = Champion's Chestpiece
    Set SaveLoad_Items[59] = Chestpiece of Earth
    Set SaveLoad_Items[60] = Cloak of the Dark Lord
    Set SaveLoad_Items[61] = Coyote Hide Tunic
    Set SaveLoad_Items[62] = Deathmantle Chestplate
    Set SaveLoad_Items[63] = Guardian Breastplate
    Set SaveLoad_Items[64] = Hardened Leather Armor
    Set SaveLoad_Items[65] = Knight's Armor
    Set SaveLoad_Items[66] = Knight's Shroud
    Set SaveLoad_Items[67] = Knight's Tunic
    Set SaveLoad_Items[68] = Mantle of the Mystics
    Set SaveLoad_Items[69] = Mithril Vest of the Slayer
    Set SaveLoad_Items[70] = Nightshroud Robe
    Set SaveLoad_Items[71] = Recruits Mail Chestguard
    Set SaveLoad_Items[72] = Red Silken Robes
    Set SaveLoad_Items[73] = Robes of Holyness
    Set SaveLoad_Items[74] = Robes of Retribution
    Set SaveLoad_Items[75] = Robes of Vindication
    Set SaveLoad_Items[76] = Robes of the Slayer
    Set SaveLoad_Items[77] = Rusty Mail Armor
    Set SaveLoad_Items[78] = Scorpion Scale Vest
    Set SaveLoad_Items[79] = Shell of the Earth Lord
    Set SaveLoad_Items[80] = Soldiers Armor
    Set SaveLoad_Items[81] = Stormweave Robe
    Set SaveLoad_Items[82] = Stormwyrm Scale Breastplate
    Set SaveLoad_Items[83] = Tunic of Holyness
    Set SaveLoad_Items[84] = Tunic of Retribution
    Set SaveLoad_Items[85] = Tunic of Vindication
    Set SaveLoad_Items[86] = Wanderer's Vest
    Set SaveLoad_Items[87] = Wolf Pelt Chestguard
    Set SaveLoad_Items[88] = Wyrmhide Robe
    Set SaveLoad_Items[89] = Blessing of the Crusader
    Set SaveLoad_Items[90] = Fang of the Den Mother
    -------- Number of Items --------
    Set SaveLoad_Items_LastIndex = 90
    -------- List of Abilities --------
    Set SaveLoad_Abilities[1] = Fury
    Set SaveLoad_Abilities[2] = Arcane Lightning
    Set SaveLoad_Abilities[3] = Arcane Missile
    Set SaveLoad_Abilities[4] = Force
    Set SaveLoad_Abilities[5] = Mental Blast
    Set SaveLoad_Abilities[6] = Armageddon
    Set SaveLoad_Abilities[7] = Assassaination
    Set SaveLoad_Abilities[8] = Blizzara
    Set SaveLoad_Abilities[9] = Bone Prison
    Set SaveLoad_Abilities[10] = Bone Spear
    Set SaveLoad_Abilities[11] = Chain Heal
    Set SaveLoad_Abilities[12] = Chill
    Set SaveLoad_Abilities[13] = Critical Strike
    Set SaveLoad_Abilities[14] = Cyclone Armor
    Set SaveLoad_Abilities[15] = Death Coil
    Set SaveLoad_Abilities[16] = Divine Protection
    Set SaveLoad_Abilities[17] = Enflame
    Set SaveLoad_Abilities[18] = Envenomed Weapons
    Set SaveLoad_Abilities[19] = Explosive Arrow
    Set SaveLoad_Abilities[20] = Fira
    Set SaveLoad_Abilities[21] = Fire Ball
    Set SaveLoad_Abilities[22] = Fire Nova
    Set SaveLoad_Abilities[23] = Fissure
    Set SaveLoad_Abilities[24] = Fist of the Heavens
    Set SaveLoad_Abilities[25] = Frost Bolt
    Set SaveLoad_Abilities[26] = Frost Nova
    Set SaveLoad_Abilities[27] = Heal
    Set SaveLoad_Abilities[28] = Holy Blast
    Set SaveLoad_Abilities[29] = Holy Fire
    Set SaveLoad_Abilities[30] = Holy Light
    Set SaveLoad_Abilities[31] = Holy Might
    Set SaveLoad_Abilities[32] = Lethality
    Set SaveLoad_Abilities[33] = Mangle
    Set SaveLoad_Abilities[34] = Mass Arcane Missiles
    Set SaveLoad_Abilities[35] = Maul
    Set SaveLoad_Abilities[36] = Mutilate
    Set SaveLoad_Abilities[37] = Osmose
    Set SaveLoad_Abilities[38] = Piercing Shot
    Set SaveLoad_Abilities[39] = Plague
    Set SaveLoad_Abilities[40] = Poison-Tipped Arrow
    Set SaveLoad_Abilities[41] = Retribution Aura
    Set SaveLoad_Abilities[42] = Searing Arrow
    Set SaveLoad_Abilities[43] = Shadow Clone
    Set SaveLoad_Abilities[44] = Shiv
    Set SaveLoad_Abilities[45] = Slam
    Set SaveLoad_Abilities[46] = Smite
    Set SaveLoad_Abilities[47] = Soothe
    Set SaveLoad_Abilities[48] = Stealth
    Set SaveLoad_Abilities[49] = Charge
    Set SaveLoad_Abilities[50] = Warmth
    -------- Number of Abilities --------
    Set SaveLoad_Abilities_LastIndex = 50
    -------- These three lines may be changed if needed --------
    Set SaveLoad_Alphabet = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    Set SaveLoad_CaseSensitive = False
    Set SaveLoad_UsePlayername = True
    -------- Required: false --------
    Set SaveLoad_Initialized = False
    -------- Leave as is. Used to autocreate variables when copy & pasting to a new map --------
    Set Code = AceHart
    Set Save[1] = 0
    Set SaveCount = 1
    Set Validate = False
    Set SaveLoad_Compress[1] = 0
    Set SaveLoad_Uncompress[1] = 0
    Save Trigger
    Code:
    Trigger:
    SaveLoad Save All
    Collapse 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
    Player - Player 5 (Yellow) types a chat message containing -save as An exact match
    Conditions
    Collapse 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 --------
    Set UnitGroup = (Units owned by (Triggering player) matching (((Matching unit) is A Hero) Equal to (==) True))
    Set SaveCount = (SaveCount + 1)
    Set Save[SaveCount] = (Number of units in UnitGroup)
    Collapse Unit Group - Pick every unit in UnitGroup and do (Actions)
    Collapse Loop - Actions
    -------- Save the Hero --------
    Set SaveCount = (SaveCount + 1)
    Set TempUnit = (Picked unit)
    Custom script: set udg_Save[udg_SaveCount] = SaveLoad_Unit2Integer( udg_TempUnit )
    -------- Hero Experience --------
    Set SaveCount = (SaveCount + 1)
    Set Save[SaveCount] = (Hero experience of (Picked unit))
    -------- Hero Position X --------
    Set SaveCount = (SaveCount + 1)
    Set Save[SaveCount] = (Integer((X of (Position of Dummy 0145 <gen>))))
    -------- Hero Position Y --------
    Set SaveCount = (SaveCount + 1)
    Set Save[SaveCount] = (Integer((Y of (Position of Dummy 0145 <gen>))))
    -------- How many items does he carry --------
    Set SaveCount = (SaveCount + 1)
    Set Save[SaveCount] = (Number of items carried by (Picked unit))
    Collapse -------- Add all items --------
    Collapse Do Multiple ActionsFor each (Integer A) from 1 to 6, do (Actions)
    Collapse Loop - Actions
    Collapse Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    Collapse If - Conditions
    Collapse Multiple ConditionsAnd - All (Conditions) are true
    Collapse Conditions
    Collapse ((Item carried by (Picked unit) in slot (Integer A)) is owned) Equal to (==) True
    Collapse Multiple ConditionsOr - Any (Conditions) are true
    Collapse Conditions
    (Item-class of (Item carried by (Picked unit) in slot (Integer A))) Equal to (==) Permanent
    (Item-class of (Item carried by (Picked unit) in slot (Integer A))) Equal to (==) Artifact
    (Item-class of (Item carried by (Picked unit) in slot (Integer A))) Equal to (==) Campaign
    Collapse 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
    -------- 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
    Load Trigger
    Code:
    Trigger:
    SaveLoad Load All
    Collapse 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
    Player - Player 5 (Yellow) types a chat message containing -load as A substring
    Collapse Conditions
    (Substring((Entered chat string), 1, 6)) Equal to (==) (Matched chat string)
    (Length of (Entered chat string)) Greater than (>) 6
    Collapse Actions
    -------- Try to decode what was typed --------
    Set Code = (Substring((Entered chat string), 7, (Length of (Entered chat string))))
    Collapse Custom script: set udg_Validate = SaveLoad_Decode( udg_Code )
    Collapse Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    Collapse If - Conditions
    Validate Equal to (==) False
    Collapse 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 --------
    Collapse Unit Group - Pick every unit in (Units owned by (Triggering player) matching ((((Matching unit) is A Hero) Equal to (==) True) or ((Unit-type of (Matching unit)) Equal to (==) Hero Selector))) and do (Actions)
    Collapse Loop - Actions
    Unit - Remove (Picked unit) from the game
    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]
    -------- For "number of Heroes", do --------
    Collapse Set SaveCount = (SaveCount + 1)
    Collapse Do Multiple ActionsFor each (Integer B) from 1 to Save[SaveCount], do (Actions)
    Collapse Loop - Actions
    -------- Restore Hero --------
    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 (270.0) degrees
    -------- Set Experience --------
    Set SaveCount = (SaveCount + 1)
    Hero - Set (Last created unit) experience to Save[SaveCount], Hide level-up graphics
    -------- Move to saved position --------
    Set SaveCount = (SaveCount + 1)
    Unit - Move (Last created unit) instantly to (Point((Real(Save[SaveCount])), (Real(Save[(SaveCount + 1)]))))
    Set SaveCount = (SaveCount + 1)
    -------- Recreate all items --------
    Collapse Set SaveCount = (SaveCount + 1)
    Collapse Do Multiple ActionsFor each (Integer A) from 1 to Save[SaveCount], do (Actions)
    Collapse Loop - Actions
    -------- The actual item --------
    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)
    -------- Number of charges --------
    Set SaveCount = (SaveCount + 1)
    Item - Set charges remaining in (Last created item) to Save[SaveCount]
    Anyone able to tell what I may have messed up the system with? Or see any issue in the system.

    Any help would be greatly appreciated, I was going to release the map last night until this came up.


    Edit: I did however put the consumables (Puchaseable) items back into the code and removed the charges so now they're just permanent with a cooldown.





    ===============================================================================

    EDIT

    I got it working with saving player items! It still isn't saving abilities again but thats not a huge issue since players are able to relearn abilities they chose at any time.

    What I did was change the parts in the Save and Load triggers to goto each individual slot rather than for integers 1-6, for some reason that was bugging out and only was saving and loading slot 1 of the heroes inventory.
     
  17. Reflexar

    Reflexar New Member

    Ratings:
    +12 / 0 / -0
    If i import save/load ALL will it save abilities and their level then ?
     
  18. Chocobo

    Chocobo White-Flower

    Ratings:
    +410 / 0 / -0
    Is it possible to catch the code before it gets colored?
    I tried to catch the string colorless in encoding but it seems to catch the colored text.

    JASS:
    function SaveLoad_EncodeValues takes nothing returns string
        local integer i
        local integer j
        local integer k
        local integer l
        local integer m
        local integer CodeLength = StringLength(udg_SaveLoad_Alphabet)
        local integer array a
        local string buffer = ""
        local string c = ""
        local integer skip = 0
        local integer CONST = 1000000
        local string abc = "0123456789"
    
        set i = 0
        loop
            set i = i + 1
            exitwhen i > udg_SaveCount
            set buffer = buffer + I2S(udg_Save[i]) + "-"
        endloop
        set buffer = buffer + I2S(SaveLoad_EncodeVerify(buffer))
        if udg_Save[1] == 0 then
            set buffer = "-" + buffer
        endif
    
        set i = 0
        loop
            set a[i] = 0
            set i = i + 1
            exitwhen i >= 100
        endloop
    
        set m = 0
        set i = 0
        loop
            set j = 0
            loop
                set a[j] = a[j] * 11
                set j = j + 1
                exitwhen j > m
            endloop
    
            set l = 0
            set c = SubString(buffer,i,i + 1)
            loop
                exitwhen SubString(abc,l,l + 1) == c
                set l = l + 1
                exitwhen l > 9
            endloop
            set a[0] = a[0] + l
    
            set j = 0
            loop
                set k = a[j] / CONST
                set a[j] = a[j] - k * CONST
                set a[j + 1] = a[j + 1] + k
                set j = j + 1
                exitwhen j > m
            endloop
            if k > 0 then
                set m = m + 1
            endif
            set i = i + 1
            exitwhen i >= StringLength(buffer)
        endloop
    
        set buffer = ""
        loop
            exitwhen m < 0
            set j = m
            loop
                exitwhen j <= 0
                set k = a[j] / CodeLength
                set a[j - 1] = a[j - 1] + (a[j] - k * CodeLength) * CONST
                set a[j] = k
                set j = j - 1
            endloop
            set k = a[j] / CodeLength
            set i = a[j] - k * CodeLength
            set buffer = buffer + SubString(udg_SaveLoad_Alphabet,i,i + 1)
            set a[j] = k
            if a[m] == 0 then
                set m = m - 1
            endif
        endloop
    
        set i = StringLength(buffer)
        set skip = 0
        set c = ""
        loop
            set i = i - 1
            set c = c + SubString(buffer,i,i + 1)
            set skip = skip + 1
            if skip == 4 and i > 0 then
                set c = c + "-"
                set skip = 0
            endif
            exitwhen i <= 0
        endloop
        set udg_CodeCheck[udg_TempIntegers[2]] = c
        return c
    endfunction


    (2 last lines)
     
  19. AceHart

    AceHart Your Friendly Neighborhood Admin

    Ratings:
    +1,489 / 0 / -0
    Catch? Hm... yes, of course.
    The coloring happens in a function called SaveLoad_Color.
     
  20. Chocobo

    Chocobo White-Flower

    Ratings:
    +410 / 0 / -0
    the problem is for unknown reasons I'm catching the colored string.

    I'm trying to make a function such as "-checkn <somecode>", where n is the custom alphabet used to save/load and <somecode> checking if the code matches the last code saved by the player. Turned out each time to compare to the colored text, which has the (horrible) |cff...
     

Share This Page