1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. A slave to two rhythms, the 22nd Terraining Contest is here.
    Dismiss Notice
  3. The heavens smile on the old faithful. The 16th Techtree Contest has begun.
    Dismiss Notice
  4. The die is cast - the 6th Melee Mapping Contest results have been announced. Onward to the Hive Cup!
    Dismiss Notice
  5. The glory of the 20th Icon Contest is yours for the taking!
    Dismiss Notice
  6. Shoot to thrill, play to kill. Sate your hunger with the 33rd Modeling Contest!
    Dismiss Notice
  7. Do you hear boss music? It's the 17th Mini Mapping Contest!
    Dismiss Notice
  8. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

iGen

Submitted by Hanky
This bundle is marked as substandard. It may contain bugs, not perform optimally or otherwise be in violation of the submission rules.
Preview: Hanky
Language: vJass
Requires: JassHelper (JassHelper 0.A.2.B)

Short Description:
This system is made to make the life easier for every map creator who needs save/load codes. In the map should be enough documentation how to use the system. If not ask questions per PM or visitor message.

Code
Code (vJASS):
//                                        ,¦¦
//                                        ¦ ¦¦¦¦                                                                
//                                        ¦    ¦¦¦¦¦                          2010 still moving on...
//                                        ¦         ¦¦            ¦¦¦¦¦¦
//                                        ¦         ¦¦      ¦¦¦¦¦¦     ¦¦¦
//                                        ¦        ¦¦     ¦¦¦            ¦¦
//                                        ¦        ¦     ¦                ¦¦     ¦¦¦¦¦¦¦¦
//                                        ¦       ¦¦¦_   ¦                 ¦¦  ¦¦¦      ¯¦.
//                                        ¦       ¦  ¦¦¦¦¦        ____      ¦¦¦¦          ¯¦
//                                        ¦       ¦     ¦¦¦_     _¦¦¦¦______¦¦        __    ¦
//                                       ¦        ¦       ¦     _¦¦¦¦¦¦¦¦¦¦¦¦¦       _¦¦,   ¯¦
//                                       ¦    ,   ¦_      ¦     ¦¦¦¦¦¦¦¦¦¦¦¦¦       _¦¦¯     ¯¦
//                                       ¦    ¦    ¯     ¦¦     ¦¦¦¦¦¦¦¦¦¦¦¦¦       ¦¦¦¦_     ¦.
//                                      ,¦    ¦          ¦      ¦¦¦¦¦¯¯¯¯¯¦¦¦       ¦¦¦¦¦      ¦
//                                      ¦     ¦          ¦      ¯¦¦¦¦     ¯¦¦_      ¦¦¦¦¦      ¦
//                                     ¦¦     ¦_         ¦         ¯¦.     ¯¦¦      ¯¦¦¦¦      ¦
//                                     ¦       ¦         ¦                  ¦¦       ¯¯¯¯      ¦
//                                    ¦¦       ¦         ¦_        _        ¦¦¦                ¦
//                                   _¦        ¦          ¦        ¦        ¦¦¦¦              _¦
//                                   #----------------------------------------------------------#
//                                   |================!NgO is sappin' ma sentry!================|
//                                   #----------------------------------------------------------#
//                      
//                                * NgO is fucking proud to present the release of the new iGen =) *
//
// ************************************************************************************************************************************
// *                                                       ~ Release ~                                                                *
// *                                                       +++++++++++                                                                *
// *                                                                                                                                  *
// *                                                   Name: iGen x2.1a                                                               *
// *                                                   Type: Code Generater                                                           *
// *                                               Language: vJass                                                                    *
// *                                                Made by: Hanky                                                                    *
// *                                                   Date: 10-04-2010                                                               *
// *                                                                                                                                  *
// *                                            Description: This system is there to make your life easier creating a MMORPG.         *
// *                                                         This system is able to create save/load codes. Also this system          *
// *                                                         is using an unique encryption method which is pretty secure.             *
// *                                                                                                                                  *
// *                                                         I can just say: Enjoy our release =)                                     *
// *                                                                                                                                  *
// ************************************************************************************************************************************
//
// ************************************************************************************************************************************
// *                                                        ~ Notes ~                                                                 *
// *                                                        +++++++++                                                                 *
// *                                                                                                                                  *
// *                                                 If you want to contact me,                                                       *
// *                                                   then just contact me?                                                          *
// *                                                                                                                                  *
// ************************************************************************************************************************************

// ************************************************************************************************************************************
// *                                                  ~ Greetings fly out to ~                                                        *
// *                                                  ++++++++++++++++++++++++                                                        *
// *                                                                                                                                  *
// *                               Darkt3mpl3r, JonNny, WaRadius, xxdingoxx93, De.Facto, Toadcop, Paladon                             *
// *                                                Eccho, -BerzeKer-, Fireeye, Bodo                                                  *
// *                                                                                                                                  *
// *                                                         NgO & HIVE                                                               *
// *                                                                                                                                  *
// ************************************************************************************************************************************

// ************************************************************************************************************************************
// *                           One of the last releases NgO will release for Warcraft 3. But we'll never die.                         *
// *                                       So we will continue making mods for Starcraft 2.                                           *
// *                                                                                                                                  *
// *                          With this release I want advice you to take a look at our latest Project Chernobyl.                     *
// *                          It's a riddle map with much stuff you can explore. A playable version will be out                       *
// *                                                              soon.                                                               *
// *                                                                                                                                  *
// ************************************************************************************************************************************
// *_____________________________________________________nfo_design_by_Hanky__________________________________________________________*
// ************************************************************************************************************************************


library iGen
  globals
    public constant boolean keyEncryption =false        //Enable an extra keyEncryption (Important: The char library of every parameter will change to the key char library.)
    public constant integer mparameterSize=20           //This is the maximal size of parameters you can enter. You can change it to your needs.
    public constant integer delimiterInt  =5            //If you use delimiters you can set the interval here.
    public constant string delimiterSign  ="-"          //Remember that the delimiter sign should be never in a library. Otherwise it can't be recogenized correctly.
   
    public constant string colorcodeNum   ="|c000080FF" //For "0..1..2"
    public constant string colorcodeabc   ="|c00008000" //For "a..b..c"
    public constant string colorcodeABC   ="|c00FFFF00" //For "A..B..C"
    public constant string colorcodeXtr   ="|c00FF0000" //For everything else
   
    public constant string signLibrary1   ="0123456789"                 //Set up the numeric characters
    public constant string signLibrary2   ="abcdefghijklmnopqrstuvwxyz" //Set up the normal characters
    public constant string signLibrary3   ="ABCDEFGHIJKLMNOPQRSTUVWXYZ" //Set up the capital characters
    public constant string signLibrary4   ="@$[_!?&%:}~*+=<>)(/-"       //Set up the extra signs/characters
  endglobals

  public struct parameterLibrary
     //==================================================
     //Vars

     //> Sign Library Vars
     string Library   //< Encryption/Decryption Library
     integer Size     //< The Size Of The Library
     integer maxHex   //< The Size Of The Last HexCode
     integer maxInt   //< The Size Of The Last Integer
     //*******************

     //> Parameter Value Vars
     string Encrypt   //< Encrypted         string
     integer Decrypt  //< Decrypted         integer
     integer Extent   //< Extent            integer
     integer Length   //< Length            integer
     integer CRC      //< Checksum          integer
     boolean Active   //< Active            boolean
     //*******************

     //==================================================
     //onStructEvent Methods
     static method create takes nothing returns thistype
       local thistype iCook=thistype.allocate()

       set iCook.Library=null
       set iCook.Size   =0x00
       
       set iCook.Encrypt=null
       set iCook.Decrypt=0x00
       set iCook.Extent =0x00
       set iCook.Length =0x00
       set iCook.CRC    =0x00
       set iCook.Active =false

       return iCook
     endmethod

     //==================================================
     //Convert Methods

     //> Int2Char
     //  > Convert an integer value to a char
     method Int2Char takes integer i returns string
       if i>=0x00 and i<=.Size then
         return SubString(.Library,i,i+0x01)
       debug else
       debug call BJDebugMsg("Error: Invalid parameter")
       endif
       return null
     endmethod

     //> Char2Int
     //  > Convert a char to an integer value
     method Char2Int takes string s returns integer
      local integer l=StringLength(s)
      local integer i=0x00
   
      if l==0x01 then
        loop
          exitwhen i==.Size
         
          if SubString(.Library,i,i+0x01)==s then
            return i
          endif
         
          set i=i+0x01
        endloop
      debug else
      debug call BJDebugMsg("ERROR: Just enter one char")
      endif
     
      debug call BJDebugMsg("ERROR: Invalid parameter")
      return -0x01
     endmethod

     //> Hex2Int
     //  > Convert the encrypt var to an integer value for the decrypt var
     method Hex2Int takes nothing returns nothing
       local integer l=StringLength(.Encrypt)
       local integer m=0x01
       local integer i=0x00
     
       if maxHex>=l then
         loop
           exitwhen 0x00==l
           set i=m*.Char2Int(SubString(.Encrypt,l-0x01,l))+i
           set m=m*.Size
           set l=l-0x01
         endloop
       debug else
       debug call BJDebugMsg("ERROR: Invalid parameter")
       endif
     
       set .Decrypt=i
     endmethod
     
     //> Hex2IntEx
     //  > Convert the encrypt var to an integer value for the decrypt var
     method Hex2IntEx takes string iEx returns integer
       local integer l=StringLength(iEx)
       local integer m=0x01
       local integer i=0x00
     
       if maxHex>=l then
         loop
           exitwhen 0x00==l
           set i=m*.Char2Int(SubString(iEx,l-0x01,l))+i
           set m=m*.Size
           set l=l-0x01
         endloop
       debug else
       debug call BJDebugMsg("ERROR: Invalid parameter")
       endif
     
       return i
     endmethod

     //> Int2Hex
     //  > Convert the decrypt var to a hex string for the encrypt var
     method Int2Hex takes nothing returns nothing
       //! textmacro 2hex
       loop
         set q=i/.Size
         set s=.Int2Char(i-(q*.Size))+s
         set k=k-0x01
         set i=q
         exitwhen k==0x00
       endloop
       //! endtextmacro
       //========================================
       local integer i=.Decrypt
       local integer q=.Size
       local integer k=0x01
       local string s =null
     
       if 0x7FFFFFFF>=.Decrypt then
         loop
           exitwhen q>=.Decrypt
           set q=q*.Size
           set k=k+0x01
         endloop
         //! runtextmacro 2hex()
       elseif .maxInt>=i then
         //Debug Maximal Int Size
         set k=.maxHex
         //! runtextmacro 2hex()
       debug else
       debug call BJDebugMsg("ERROR: Invalid parameter")
       endif
     
       set .Encrypt=s
     endmethod
     
     //> Int2HexEx
     //  > Convert the decrypt var to a hex string for the encrypt var
     method Int2HexEx takes integer iEx returns string
       local integer i=iEx
       local integer q=.Size
       local integer k=0x01
       local string s =null
     
       if 0x7FFFFFFF>=iEx then
         loop
           exitwhen q>=iEx
           set q=q*.Size
           set k=k+0x01
         endloop
         //! runtextmacro 2hex()
       elseif .maxInt>=i then
         //Debug Maximal Int Size
         set k=.maxHex
         //! runtextmacro 2hex()
       debug else
       debug call BJDebugMsg("ERROR: Invalid parameter")
       endif
     
       return s
     endmethod

     //==================================================
     //String Operators

     //> checkCharLibrary
     //  > Check if a char is in a library.
     static method IsCharInLibrary takes string ch,string lib returns boolean
       local integer l=StringLength(ch)
       local integer z=StringLength(lib)
     
       loop
         exitwhen z<l
         if ch==SubString(lib,z-l,z) then
           return true
         endif
         set z=z-0x01
       endloop
     
       return false
     endmethod
     
    //> Int2CharEx
     //  > Convert an integer value to a char
    method Int2CharEx takes integer i,string lib returns string
      if i>=0x00 and i<=.Size then
        return SubString(lib,i,i+0x01)
      debug else
      debug call BJDebugMsg("Error: Wrong char position")
      endif
      return null
    endmethod

     //> Char2IntEx
     //  > Convert an char to an integer value
    method Char2IntEx takes string s,string lib returns integer
      local integer l=StringLength(s)
      local integer i=0x00
   
      if l==1 then
        loop
          exitwhen i==.Size
         
          if SubString(lib,i,i+0x01)==s then
            return i
          endif
         
          set i=i+0x01
        endloop
      debug else
      debug call BJDebugMsg("ERROR: Just enter one char")
      endif
     
      debug call BJDebugMsg("ERROR: Invalid parameter")
      return -0x01
    endmethod

     //> setupCRC
     //  > Setup the CRC value. Remember to set before a decrypted value.
     method setupCRC takes nothing returns nothing
       local string s =I2S(.Decrypt)
       local integer l=StringLength(s)

       loop
         exitwhen l==0x00
         set .CRC=.CRC+.Char2Int(SubString(s,l-0x01,l))+R2I(Pow(0x02,l))
         set l=l-0x01
       endloop
     endmethod

     //> setupLength
     //  > Setup the length of a encrypted value. Remember to set before a decrypted value.
     method setupLength takes nothing returns nothing
       local integer i=.Extent
       local integer q=.Size
       local integer k=0x01
       local string s =null
     
       if 0x7FFFFFFF>=.Decrypt then
         loop
            exitwhen q>=.Extent
            set q=q*.Size
            set k=k+0x01
         endloop
         //! runtextmacro 2hex()
       elseif .maxInt>=i then
         //Debug Maximal Int Size
         set k=.maxHex
         //! runtextmacro 2hex()
       debug else
       debug call BJDebugMsg("ERROR: Invalid parameter")
       endif

       set .Length=StringLength(s)
     endmethod

     //> setupLibrary
     //  > This will setup the library which you'll need to decrypt/encrypt.
     method setupLibrary takes string s returns nothing
       local integer index=0x01
       local integer ltemp=0x00
       local integer temp =StringLength(s)-0x01

       set .Library=s
       set .Size   =temp

       loop
         //0x7FFFFFFF == 2147483647
         exitwhen temp>0x7FFFFFFF or temp<ltemp

         set ltemp=temp
         set temp =temp*.Size
         set index=index+0x01
       endloop
   
       set .maxHex=index
       set .maxInt=ltemp
     endmethod
  endstruct

  public struct Generator
     parameterLibrary array parameter[mparameterSize]
     parameterLibrary key

     string codeString
     integer parameterSize

     integer inParameterCRC
     integer inKeyCRC
     integer outParameterCRC
     integer outKeyCRC

     //==================================================
     //onStructEvent Methods
     static method create takes nothing returns thistype
       local thistype iCook=thistype.allocate()
       local integer i     =mparameterSize-0x01

       set iCook.codeString     =null
       set iCook.key            =parameterLibrary.create()
       set iCook.inParameterCRC =0x00
       set iCook.outParameterCRC=0x00
       set iCook.parameterSize  =0x00
       loop
         exitwhen i<0x00
         set iCook.parameter[i]=parameterLibrary.create()
         set i=i-0x01
       endloop

       return iCook
     endmethod

     method onDestory takes nothing returns nothing
       local integer i=mparameterSize-0x01

       call .key.destroy()
       loop
         exitwhen i<0x00
         call .parameter[i].destroy()
         set i=i-0x01
       endloop
     endmethod

     //==================================================
     //Standart Methods
     
     //> reset
     //  > This will reset your whole generator struct
     method reset takes nothing returns nothing
       local integer i=mparameterSize-0x01

       call .key.destroy()
       set .key=parameterLibrary.create()
       loop
         exitwhen i<0x00
         call .parameter[i].destroy()
         set .parameter[i]=parameterLibrary.create()
         set i=i-0x01
       endloop
     endmethod
     
     //> addDelemiters
     //  > Add some delimiters to your code (Hint: Just use this function after you have generated a codestring and before you added color to the string.)
     method addDelimiters takes nothing returns nothing
        local integer tl
        local integer ti
        local integer tp
        local string ts
     
        if .codeString!=null then
            set tl=StringLength(.codeString)
            set ti=0x00
            set tp=0x00
            set ts=null
            loop
                exitwhen ti==tl
                if tp==delimiterInt then
                    set ts=ts+delimiterSign
                    set tp=0x01
                else
                    set tp=tp+0x01
                endif
                set ts=ts+SubString(.codeString,ti,ti+0x01)
                set ti=ti+0x01
            endloop
            set .codeString=ts
        endif
     endmethod
     
     //> addDelemiters
     //  > Remove all delimiters from your code (Hint: Just use this function after you have generated a codestring and before you added some delimiters to the string.)
     method removeDelimiters takes nothing returns nothing
        local integer tl
        local integer ti
        local string tc
        local string ts
     
        if .codeString!=null then
            set tl=StringLength(.codeString)
            set ti=0x00
            set ts=null
            loop
                exitwhen ti==tl
                set tc=SubString(.codeString,ti,ti+0x01)
                if tc!=delimiterSign then
                    set ts=ts+tc
                endif
                set ti=ti+0x01
            endloop
            set .codeString=ts
        endif
     endmethod
   
     //> addColor
     //  > Add some color to your code (Hint: Just use this function after you have generated a codestring.)
     method addColor takes nothing returns nothing
        local integer m
        local string t
        local string d
     
        if .codeString!=null then
            set m=StringLength(.codeString)-0x01
            set t=null
           
            loop
              exitwhen m<0x00
       
              set d=SubString(.codeString,m,m+0x01)
              if .key.IsCharInLibrary(d,signLibrary1) then
                set d=colorcodeNum+d+"|r"
              elseif .key.IsCharInLibrary(d,signLibrary2) then
                set d=colorcodeabc+d+"|r"
              elseif .key.IsCharInLibrary(d,signLibrary3) then
                set d=colorcodeABC+d+"|r"
              elseif .key.IsCharInLibrary(d,signLibrary4) then
                set d=colorcodeXtr+d+"|r"
              endif
              set t=d+t
       
              set m=m-0x01
            endloop
       
            set .codeString=t
        endif
     endmethod

     //==================================================
     //Set Methods
     
     //> setParameter
     //  > Set the value of a parameter
     method setParameter takes integer i,integer max,string lib returns nothing
       if .parameterSize<mparameterSize then
         set .parameter[.parameterSize].Active =true
         set .parameter[.parameterSize].Decrypt=i
         set .parameter[.parameterSize].Extent =max
         call .parameter[.parameterSize].setupLibrary(lib)
         call .parameter[.parameterSize].setupLength()
         call .parameter[.parameterSize].setupCRC()
         set .parameterSize=.parameterSize+0x01
       debug else
       debug call BJDebugMsg("Error: Wrong size")
       endif
     endmethod
     
     //> setLoadParameter
     //  > Before you load a code you have to set the load parameter
     method setLoadParameter takes integer max,string lib returns nothing
        if .parameterSize<mparameterSize then
         set .parameter[.parameterSize].Active =true
         set .parameter[.parameterSize].Extent =max
         call .parameter[.parameterSize].setupLibrary(lib)
         call .parameter[.parameterSize].setupLength()
         set .parameterSize=.parameterSize+0x01
       debug else
       debug call BJDebugMsg("Error: Wrong size")
       endif
     endmethod

     //> setKey
     //  > Nearly for every function it's very important to have a key setted
     method setKey takes string s,string lib returns nothing
       local integer l=StringLength(s)
       local integer q=0x00
       local integer x

       call .key.setupLibrary(lib)

       loop
         exitwhen l==0
         set x=.key.Char2Int(SubString(s,l-0x01,l))
         if x!=-0x01 then
           set q=q+x
         endif
         set l=l-0x01
       endloop

       set .key.Decrypt=q
       call .key.setupCRC()
       set .outKeyCRC=.key.CRC
     endmethod
     
     //> setLoadCode
     //  > If you want to load a code you have to set the codeString first
     method setLoadCode takes string s returns nothing
        set .codeString=s
     endmethod

     //==================================================
     //Reset Methods
     
     //> resetLastParameter
     //  > If you want to reset you last setted parameter just use this function
     method resetLastParameter takes nothing returns nothing
       if .parameterSize>0x00 then
         set .parameter[.parameterSize].Encrypt=null
         set .parameter[.parameterSize].Library=null
         set .parameter[.parameterSize].Decrypt=0x00
         set .parameter[.parameterSize].Extent =0x00
         set .parameter[.parameterSize].CRC    =0x00
         set .parameterSize=.parameterSize-0x01
       debug else
       debug call BJDebugMsg("Error: Wrong Size")
       endif
     endmethod

     //==================================================
     //Get Methods
     
     //> getParameter
     //  > This function is there to get a decrypted parameter
     method getParameter takes integer pos returns integer
       return .parameter[pos].Decrypt
     endmethod
     
     //> getCode
     //  > After you have generated a code you can get with this function the code
     method getCode takes nothing returns string
        return .codeString
     endmethod

     //==================================================
     //Check Methods
     
     //> checkParameter
     //  > After you have decrypted a code you can check with this function if the checksum of the parameters is correct
     method checkParameter takes nothing returns boolean
       return .inParameterCRC==.outParameterCRC
     endmethod

     //> checkKey
     //  > After you have decrypted a code you can check with this function if the checksum of the key is correct
     method checkKey takes nothing returns boolean
       return .inKeyCRC==.outKeyCRC
     endmethod

     //==================================================
     //Generating Methods

     //> encrypt
     //  > After you have done all settings you can generate your own code
     method encrypt takes nothing returns nothing
        local integer index=.parameterSize-0x01
        local integer ti
        local integer te
        local integer tl
        local string pex
        local string tsg
        local string csg
       
        loop
            exitwhen index<0x00
            if .parameter[index].Active then
                set tsg=null
                call SetRandomSeed(index*.key.CRC)
                set .inParameterCRC=.inParameterCRC+(.parameter[index].CRC*(index+0x01))
                set .parameter[index].Decrypt=ModuloInteger(.parameter[index].Decrypt+GetRandomInt(index,R2I(Pow(index,.key.CRC))),.parameter[index].Extent)
                call .parameter[index].Int2Hex()
                set tl=StringLength(.parameter[index].Encrypt)
                if tl<.parameter[index].Length then
                    set tl =.parameter[index].Length-tl
                    set ti =0x00
                    loop
                        exitwhen ti==tl
                        call SetRandomSeed(R2I(Pow(ti,.key.CRC)))
                        set tsg=tsg+.parameter[index].Int2Char(ModuloInteger(GetRandomInt(0x00,.parameter[index].Size)-((ti+0x01)*index*(ti+0x01)),.parameter[index].Size))
                        set ti =ti+0x01
                    endloop
                else
                    set ti=0x00
                endif
                set csg=null
                set te =0x00
                loop
                    exitwhen ti==.parameter[index].Length
                    call SetRandomSeed(R2I(Pow(ti,.key.CRC)))
                    set csg=csg+.parameter[index].Int2Char(ModuloInteger(.parameter[index].Char2Int(SubString(.parameter[index].Encrypt,te,te+0x01))+GetRandomInt(0x00,.parameter[index].Size)-((ti+0x01)*index*(ti+0x01)),.parameter[index].Size))
                    set ti=ti+0x01
                    set te=te+0x01
                endloop
                set .parameter[index].Encrypt=tsg+csg
            endif
            set index=index-0x01
        endloop
        set pex  =.key.Int2HexEx(.inParameterCRC)
        set index=.parameterSize-0x01
        loop
            exitwhen index<0x00
            set .codeString=.parameter[index].Encrypt+.codeString
            set index=index-0x01
        endloop
        call .key.Int2Hex()
       
        set .codeString=.key.Encrypt+.codeString+pex
        static if keyEncryption then
            set index=StringLength(.codeString)
            set csg  =null
            loop
                exitwhen index==0x00
                call SetRandomSeed(.key.CRC*(index+0x01))
                set csg=.key.Int2Char(ModuloInteger(.key.Char2Int(SubString(.codeString,index-0x01,index))-GetRandomInt(0x00,.key.Size),.key.Size))+csg
                set index=index-0x01
            endloop
            set .codeString=csg
        endif
     endmethod

     //> decrypt
     //  > After you have done all settings you can decrypt an entered code
     method decrypt takes nothing returns nothing
        local parameterLibrary tk=parameterLibrary.create()
        local boolean filter
        local integer index
        local integer pos
        local integer te
        local integer tl
        local integer ti
        local string ts
        local string bs
       
        static if keyEncryption then
            set index=StringLength(.codeString)
            set ts   =null
            loop
                exitwhen index==0x00
                call SetRandomSeed(.key.CRC*(index+0x01))
                set ts=.key.Int2Char(ModuloInteger(.key.Char2Int(SubString(.codeString,index-0x01,index))+GetRandomInt(0x00,.key.Size),.key.Size))+ts
                set index=index-0x01
            endloop
            set .codeString=ts
        endif
       
        call .key.Int2Hex()
        call tk.setupLibrary(.key.Library)
        set tl=StringLength(.key.Encrypt)
        set tk.Encrypt=SubString(.codeString,0x00,tl)
        call tk.Hex2Int()
        call tk.setupCRC()
        set .inKeyCRC=tk.CRC
        set ts=SubString(.codeString,tl,StringLength(.codeString))
       
        if .checkKey() then
            set index=0x00
            set pos  =0x00
            loop
                exitwhen index==.parameterSize
                if .parameter[index].Active then
                    set .parameter[index].Encrypt=SubString(ts,pos,pos+.parameter[index].Length)
                    set filter=false
                    set bs=null
                    set ti=0x00
                    set te=StringLength(.parameter[index].Encrypt)
                    loop
                        exitwhen ti==te
                        call SetRandomSeed(R2I(Pow(ti,tk.CRC)))
                        set tl=ModuloInteger(.parameter[index].Char2Int(SubString(.parameter[index].Encrypt,ti,ti+0x01))-GetRandomInt(0x00,.parameter[index].Size)+((ti+0x01)*index*(ti+0x01)),.parameter[index].Size)
                        if filter or tl!=0x00 then
                            set bs    =bs+.parameter[index].Int2Char(tl)
                            set filter=true
                        endif
                        set ti=ti+0x01
                    endloop
                    if bs==null then
                        set bs=.parameter[index].Int2Char(0x00)
                    endif
                    set .parameter[index].Encrypt=bs
                    call .parameter[index].Hex2Int()
                    call SetRandomSeed(index*.key.CRC)
                    set .parameter[index].Decrypt=ModuloInteger(.parameter[index].Decrypt-GetRandomInt(index,R2I(Pow(index,.key.CRC))),.parameter[index].Extent)
                    call .parameter[index].setupCRC()
                    set .inParameterCRC=.inParameterCRC+(.parameter[index].CRC*(index+0x01))                
                    set pos=pos+.parameter[index].Length
                endif
                set index=index+0x01
            endloop
            set .outParameterCRC=tk.Hex2IntEx(SubString(ts,pos,StringLength(ts)))
        endif
       
   
        call tk.destroy()
     endmethod
  endstruct
endlibrary


And as always greeting my clan NgO and some certain people:
- Darkt3mpl3r (pure win)
- JonNny
- Paladon
- Eccho
- Toadcop
- Berzeker
- WaRadius (miss ya mate)
- xxdingo93xx

Any improvement ideas will be helpful.

Keywords:
codegen, thecakeisaspy, savenload, save, load, code, ngo, hanky, darkt3mpl3r, igen
Contents

iGen x2.1 (Map)

Reviews
Moderator
8 Sep 2011 Bribe: Deprecated in favor of: http://www.hiveworkshop.com/forums/spells-569/save-load-snippets-v1-0-0-7-a-202714/ 20:54, 22nd Aug 2009 hvo-busterkomo: The coding looks good and could definitely be useful. Approved.
  1. NoobMapmaker

    NoobMapmaker

    Joined:
    Oct 17, 2007
    Messages:
    550
    Resources:
    0
    Resources:
    0
    Can you make it possible to save Unit abilities that are added to the Hero during game play also?
     
  2. Hanky

    Hanky

    Joined:
    Jan 15, 2007
    Messages:
    353
    Resources:
    4
    Maps:
    1
    Spells:
    3
    Resources:
    4
    Sure you can already make it, it's just up to you. Since you have to set the setting. Well whatever, I'll try till sunday to update this version. Im not sure if I can add all examples till then but I try my best.
     
  3. NoobMapmaker

    NoobMapmaker

    Joined:
    Oct 17, 2007
    Messages:
    550
    Resources:
    0
    Resources:
    0
    Thanks, i'm clueless at JASS so probably it'll help me out a lot to point out which part I can edit to make the system save additional stuff. Thanks
     
  4. RaiN.

    RaiN.

    Joined:
    Nov 20, 2008
    Messages:
    437
    Resources:
    0
    Resources:
    0
    Everything you need to change to save more stuff is already documented with comments. You just need to wait for the next version to actually fix some bugs preventing you from doing so.
     
  5. NoobMapmaker

    NoobMapmaker

    Joined:
    Oct 17, 2007
    Messages:
    550
    Resources:
    0
    Resources:
    0
    Im clueless to what teh JASS code said so even if there were no bugs I would not attempt at trying to mod the system since it will end up not working.
     
  6. xFiReFoXx

    xFiReFoXx

    Joined:
    Sep 25, 2009
    Messages:
    49
    Resources:
    0
    Resources:
    0
    I downloaded and ran the JNPG pack World editor one... (Version 5d) and when i saved the map, it came up with 100 compile errors...


    EDIT: Never mind it seems there was a problem with the WE on my end, i re-downloaded the pack and saved the map again and i got no more PJass errors. Anyways thanks for your help, ill test it and get back to you :)
     
    Last edited: Oct 15, 2009
  7. krvc

    krvc

    Joined:
    Oct 13, 2009
    Messages:
    1
    Resources:
    0
    Resources:
    0
    not work correctly in mplayer, how configuration this?
     
  8. xFiReFoXx

    xFiReFoXx

    Joined:
    Sep 25, 2009
    Messages:
    49
    Resources:
    0
    Resources:
    0
    Yeah.... it seems the -save doesn't create the code for me....
     
  9. Crazed_seal2

    Crazed_seal2

    Joined:
    Jan 5, 2009
    Messages:
    825
    Resources:
    2
    Tutorials:
    2
    Resources:
    2
    The demo map worked great so i cant wait till i put it into meh RPG!!!
    YOU SIR ARE GETTING CREDITS AND +REP! :thumbs_up:
     
  10. cHeRoL

    cHeRoL

    Joined:
    Mar 30, 2008
    Messages:
    655
    Resources:
    2
    Spells:
    2
    Resources:
    2
    It gives me an error
    • set udg_CG_HeroType=Hero.getIntPos(GetUnitTypeId(udg_test_hero))
     
  11. NoobMapmaker

    NoobMapmaker

    Joined:
    Oct 17, 2007
    Messages:
    550
    Resources:
    0
    Resources:
    0
    How is it going on adding the function that saves unit abilities added onto a hero?
     
  12. gamestargamer

    gamestargamer

    Joined:
    May 22, 2009
    Messages:
    58
    Resources:
    1
    Maps:
    1
    Resources:
    1
    what are you w8ing 4 ? we need an update. :p
     
  13. Hanky

    Hanky

    Joined:
    Jan 15, 2007
    Messages:
    353
    Resources:
    4
    Maps:
    1
    Spells:
    3
    Resources:
    4
    Yes I know, but I was pretty busy so I had no time to finish the system yet. I'll try to focus my work on this system to finally finish it...
     
  14. NoobMapmaker

    NoobMapmaker

    Joined:
    Oct 17, 2007
    Messages:
    550
    Resources:
    0
    Resources:
    0
    Can you also add this feature if you haven't consider it yet. If a hero picks up a permanent HP increase item and and got its life increase by a certain amount, can you make sure the system saves it too?
     
  15. Does

    Does

    Joined:
    Nov 16, 2009
    Messages:
    40
    Resources:
    0
    Resources:
    0
  16. Just_Spectating

    Just_Spectating

    Joined:
    May 16, 2007
    Messages:
    7,022
    Resources:
    46
    Models:
    11
    Icons:
    9
    Skins:
    26
    Resources:
    46
    subscription bug fixing.
     
  17. RaiN.

    RaiN.

    Joined:
    Nov 20, 2008
    Messages:
    437
    Resources:
    0
    Resources:
    0
    Still waitin...
     
  18. NoobMapmaker

    NoobMapmaker

    Joined:
    Oct 17, 2007
    Messages:
    550
    Resources:
    0
    Resources:
    0
    Any ideas on when this the next version will be coming out?
     
  19. Eccho

    Eccho

    Joined:
    Nov 29, 2006
    Messages:
    2,297
    Resources:
    2
    Spells:
    2
    Resources:
    2
    Hanky has been away lately. All you can do is to wait patently, I'm afraid.
     
  20. Darkt3mpl3r

    Darkt3mpl3r

    Joined:
    Jan 6, 2006
    Messages:
    201
    Resources:
    1
    Spells:
    1
    Resources:
    1
    He's working on it.