Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
//+-----------------------------------------------------------------------------
//| Prepares the char table. Call this function once on map initialization.
//| Make sure you have a global string array variable named "CharTable"
//| ("udg_CharTable"), otherwise this function will not compile. The size of
//| the array should be 70, but that is not important since arrays are dynamic.
//+-----------------------------------------------------------------------------
function SetupCharTable takes nothing returns nothing
//Sets the digits
set udg_CharTable[0] = "0"
set udg_CharTable[1] = "1"
set udg_CharTable[2] = "2"
set udg_CharTable[3] = "3"
set udg_CharTable[4] = "4"
set udg_CharTable[5] = "5"
set udg_CharTable[6] = "6"
set udg_CharTable[7] = "7"
set udg_CharTable[8] = "8"
set udg_CharTable[9] = "9"
//Sets the capital letters
set udg_CharTable[10] = "A"
set udg_CharTable[11] = "B"
set udg_CharTable[12] = "C"
set udg_CharTable[13] = "D"
set udg_CharTable[14] = "E"
set udg_CharTable[15] = "F"
set udg_CharTable[16] = "G"
set udg_CharTable[17] = "H"
set udg_CharTable[18] = "I"
set udg_CharTable[19] = "J"
set udg_CharTable[20] = "K"
set udg_CharTable[21] = "L"
set udg_CharTable[22] = "M"
set udg_CharTable[23] = "N"
set udg_CharTable[24] = "O"
set udg_CharTable[25] = "P"
set udg_CharTable[26] = "Q"
set udg_CharTable[27] = "R"
set udg_CharTable[28] = "S"
set udg_CharTable[29] = "T"
set udg_CharTable[30] = "U"
set udg_CharTable[31] = "V"
set udg_CharTable[32] = "W"
set udg_CharTable[33] = "X"
set udg_CharTable[34] = "Y"
set udg_CharTable[35] = "Z"
//Sets the small letters
set udg_CharTable[36] = "a"
set udg_CharTable[37] = "b"
set udg_CharTable[38] = "c"
set udg_CharTable[39] = "d"
set udg_CharTable[40] = "e"
set udg_CharTable[41] = "f"
set udg_CharTable[42] = "g"
set udg_CharTable[43] = "h"
set udg_CharTable[44] = "i"
set udg_CharTable[45] = "j"
set udg_CharTable[46] = "k"
set udg_CharTable[47] = "l"
set udg_CharTable[48] = "m"
set udg_CharTable[49] = "n"
set udg_CharTable[50] = "o"
set udg_CharTable[51] = "p"
set udg_CharTable[52] = "q"
set udg_CharTable[53] = "r"
set udg_CharTable[54] = "s"
set udg_CharTable[55] = "t"
set udg_CharTable[56] = "u"
set udg_CharTable[57] = "v"
set udg_CharTable[58] = "w"
set udg_CharTable[59] = "x"
set udg_CharTable[60] = "y"
set udg_CharTable[61] = "z"
//Sets the special characters
set udg_CharTable[62] = "("
set udg_CharTable[63] = ")"
//Sets the special characters
//(These will NOT be encrypted)
set udg_CharTable[64] = "."
set udg_CharTable[65] = "-"
set udg_CharTable[66] = "_"
set udg_CharTable[67] = "["
set udg_CharTable[68] = "]"
set udg_CharTable[69] = " "
endfunction
//+-----------------------------------------------------------------------------
//| Converts an integer value (ASCII) to a character base on Character Table
//| eg, 61 -->"z",
//+-----------------------------------------------------------------------------
function ConvertIntToChar takes integer Value returns string
return udg_CharTable[Value]
endfunction
//+-----------------------------------------------------------------------------
//| Converts Decimal to any Base.
//+-----------------------------------------------------------------------------
function ConvertToBase takes integer num, integer base returns string
local integer m
local string result = ""
if(base<2)
return result;
endif
if(nbase > 36)
return result;
endif
loop
set m = ModuloInteger(num, base)
set result = ConvertIntToChar[m] + result;
set num = num/base
exitwhen num >= base
endloop
return result
endfunction
//+-----------------------------------------------------------------------------
//| Converts a character to an integer value (ASCII)
//+-----------------------------------------------------------------------------
function ConvertCharToInt takes string Character returns integer
local integer Index = 0
//Traverses the ASCII table until the character is found.
loop
exitwhen udg_CharTable[Index] == Character
set Index = Index + 1
//If the character is not found, return 0
if Index >= 70 then
set Index = 0
exitwhen true
endif
endloop
return Index
endfunction
//+-----------------------------------------------------------------------------
//| Does a bitwise XOR on two integer values
//+-----------------------------------------------------------------------------
function BitwiseXOR takes integer Value1, integer Value2 returns integer
local integer Index
local integer ResultValue
local integer array Byte1
local integer array Byte2
local integer array ResultByte
//Convert Value1 to a Byte
set Index = 8
loop
set Index = Index - 1
set Byte1[Index] = ModuloInteger(Value1, 2)
set Value1 = Value1 / 2
exitwhen Index <= 0
endloop
//Convert Value2 to a Byte
set Index = 8
loop
set Index = Index - 1
set Byte2[Index] = ModuloInteger(Value2, 2)
set Value2 = Value2 / 2
exitwhen Index <= 0
endloop
//Makes a bitwise XOR on the Bytes
set Index = 0
loop
if (Byte1[Index] == Byte2[Index]) then
set ResultByte[Index] = 0
else
set ResultByte[Index] = 1
endif
set Index = Index + 1
exitwhen Index >= 8
endloop
//Convert the resulting Byte back to an integer
set Index = 0
set ResultValue = 0
loop
set ResultValue = ResultValue * 2
set ResultValue = ResultValue + ResultByte[Index]
set Index = Index + 1
exitwhen Index >= 8
endloop
return ResultValue
endfunction
//+-----------------------------------------------------------------------------
//| Takes a string and uses the key (usually a player's name) to encrypt it.
//| To get the original string back, call the function with that string and
//| the same key used in the encryption.
//+-----------------------------------------------------------------------------
function GeneratePassword takes string Code, string Key returns string
local integer Index = 0
local integer KeyIndex = 0
local integer KeyLength = 0
local integer CurrentValue = 0
local integer CurrentKeyValue = 0
local string CurrentCharacter = ""
local string CurrentKeyCharacter = ""
local string ResultCode = ""
//Calculates the length of the Key
loop
exitwhen SubStringBJ(Key, KeyLength + 1, KeyLength + 1) == ""
set KeyLength = KeyLength + 1
endloop
//Abort if the key length is 0 (to avoid crashes)
if KeyLength <= 0 then
return ""
endif
//Loop through every character in the string and encrypt it
loop
//Get a character from the code
set CurrentCharacter = SubStringBJ(Code, Index + 1, Index + 1)
//Exit when the end of the code string is reached
exitwhen CurrentCharacter == ""
//Converts a character to a value
//Traverses the character table until the character is found
set CurrentValue = 0
loop
exitwhen udg_CharTable[CurrentValue] == CurrentCharacter
set CurrentValue = CurrentValue + 1
//If the character is not found, set it to 0
if CurrentValue >= 70 then
set CurrentValue = 0
exitwhen true
endif
endloop
//Get a proper key index
set KeyIndex = ModuloInteger(Index, KeyLength)
//Get a character from the key
set CurrentKeyCharacter = SubStringBJ(Key, KeyIndex + 1, KeyIndex + 1)
//Converts a character to a value
//Traverses the character table until the character is found
set CurrentKeyValue = 0
loop
exitwhen udg_CharTable[CurrentKeyValue] == CurrentKeyCharacter
set CurrentKeyValue = CurrentKeyValue + 1
//If the character is not found, set it to 0
if CurrentKeyValue >= 70 then
set CurrentKeyValue = 0
exitwhen true
endif
endloop
//Make sure only a valid character is encrypted
if ((CurrentKeyValue < 0) or (CurrentKeyValue >= 64)) then
set CurrentKeyValue = 0
endif
//Encrypt the character using XOR
set CurrentValue = BitwiseXOR(CurrentValue, CurrentKeyValue)
//Convert the value to a character
set CurrentCharacter = udg_CharTable[CurrentValue]
//Add the character to the resulting code string
set ResultCode = ResultCode + CurrentCharacter
set Index = Index + 1
endloop
return ResultCode
endfunction
here is simple save/load system:
1, copy code below, paste into top of the map (in GUI).
those code are basic function for convert/encrypt.
Code://+----------------------------------------------------------------------------- //| Prepares the char table. Call this function once on map initialization. //| Make sure you have a global string array variable named "CharTable" //| ("udg_CharTable"), otherwise this function will not compile. The size of //| the array should be 70, but that is not important since arrays are dynamic. //+----------------------------------------------------------------------------- function SetupCharTable takes nothing returns nothing //Sets the digits set udg_CharTable[0] = "0" set udg_CharTable[1] = "1" set udg_CharTable[2] = "2" set udg_CharTable[3] = "3" set udg_CharTable[4] = "4" set udg_CharTable[5] = "5" set udg_CharTable[6] = "6" set udg_CharTable[7] = "7" set udg_CharTable[8] = "8" set udg_CharTable[9] = "9" //Sets the capital letters set udg_CharTable[10] = "A" set udg_CharTable[11] = "B" set udg_CharTable[12] = "C" set udg_CharTable[13] = "D" set udg_CharTable[14] = "E" set udg_CharTable[15] = "F" set udg_CharTable[16] = "G" set udg_CharTable[17] = "H" set udg_CharTable[18] = "I" set udg_CharTable[19] = "J" set udg_CharTable[20] = "K" set udg_CharTable[21] = "L" set udg_CharTable[22] = "M" set udg_CharTable[23] = "N" set udg_CharTable[24] = "O" set udg_CharTable[25] = "P" set udg_CharTable[26] = "Q" set udg_CharTable[27] = "R" set udg_CharTable[28] = "S" set udg_CharTable[29] = "T" set udg_CharTable[30] = "U" set udg_CharTable[31] = "V" set udg_CharTable[32] = "W" set udg_CharTable[33] = "X" set udg_CharTable[34] = "Y" set udg_CharTable[35] = "Z" //Sets the small letters set udg_CharTable[36] = "a" set udg_CharTable[37] = "b" set udg_CharTable[38] = "c" set udg_CharTable[39] = "d" set udg_CharTable[40] = "e" set udg_CharTable[41] = "f" set udg_CharTable[42] = "g" set udg_CharTable[43] = "h" set udg_CharTable[44] = "i" set udg_CharTable[45] = "j" set udg_CharTable[46] = "k" set udg_CharTable[47] = "l" set udg_CharTable[48] = "m" set udg_CharTable[49] = "n" set udg_CharTable[50] = "o" set udg_CharTable[51] = "p" set udg_CharTable[52] = "q" set udg_CharTable[53] = "r" set udg_CharTable[54] = "s" set udg_CharTable[55] = "t" set udg_CharTable[56] = "u" set udg_CharTable[57] = "v" set udg_CharTable[58] = "w" set udg_CharTable[59] = "x" set udg_CharTable[60] = "y" set udg_CharTable[61] = "z" //Sets the special characters set udg_CharTable[62] = "(" set udg_CharTable[63] = ")" //Sets the special characters //(These will NOT be encrypted) set udg_CharTable[64] = "." set udg_CharTable[65] = "-" set udg_CharTable[66] = "_" set udg_CharTable[67] = "[" set udg_CharTable[68] = "]" set udg_CharTable[69] = " " endfunction //+----------------------------------------------------------------------------- //| Converts an integer value (ASCII) to a character base on Character Table //| eg, 61 -->"z", //+----------------------------------------------------------------------------- function ConvertIntToChar takes integer Value returns string return udg_CharTable[Value] endfunction //+----------------------------------------------------------------------------- //| Converts Decimal to any Base. //+----------------------------------------------------------------------------- function ConvertToBase takes integer num, integer base returns string local integer m local string result = "" if(base<2) return result; endif if(nbase > 36) return result; endif loop set m = ModuloInteger(num, base) set result = ConvertIntToChar[m] + result; set num = num/base exitwhen num >= base endloop return result endfunction //+----------------------------------------------------------------------------- //| Converts a character to an integer value (ASCII) //+----------------------------------------------------------------------------- function ConvertCharToInt takes string Character returns integer local integer Index = 0 //Traverses the ASCII table until the character is found. loop exitwhen udg_CharTable[Index] == Character set Index = Index + 1 //If the character is not found, return 0 if Index >= 70 then set Index = 0 exitwhen true endif endloop return Index endfunction //+----------------------------------------------------------------------------- //| Does a bitwise XOR on two integer values //+----------------------------------------------------------------------------- function BitwiseXOR takes integer Value1, integer Value2 returns integer local integer Index local integer ResultValue local integer array Byte1 local integer array Byte2 local integer array ResultByte //Convert Value1 to a Byte set Index = 8 loop set Index = Index - 1 set Byte1[Index] = ModuloInteger(Value1, 2) set Value1 = Value1 / 2 exitwhen Index <= 0 endloop //Convert Value2 to a Byte set Index = 8 loop set Index = Index - 1 set Byte2[Index] = ModuloInteger(Value2, 2) set Value2 = Value2 / 2 exitwhen Index <= 0 endloop //Makes a bitwise XOR on the Bytes set Index = 0 loop if (Byte1[Index] == Byte2[Index]) then set ResultByte[Index] = 0 else set ResultByte[Index] = 1 endif set Index = Index + 1 exitwhen Index >= 8 endloop //Convert the resulting Byte back to an integer set Index = 0 set ResultValue = 0 loop set ResultValue = ResultValue * 2 set ResultValue = ResultValue + ResultByte[Index] set Index = Index + 1 exitwhen Index >= 8 endloop return ResultValue endfunction //+----------------------------------------------------------------------------- //| Takes a string and uses the key (usually a player's name) to encrypt it. //| To get the original string back, call the function with that string and //| the same key used in the encryption. //+----------------------------------------------------------------------------- function GeneratePassword takes string Code, string Key returns string local integer Index = 0 local integer KeyIndex = 0 local integer KeyLength = 0 local integer CurrentValue = 0 local integer CurrentKeyValue = 0 local string CurrentCharacter = "" local string CurrentKeyCharacter = "" local string ResultCode = "" //Calculates the length of the Key loop exitwhen SubStringBJ(Key, KeyLength + 1, KeyLength + 1) == "" set KeyLength = KeyLength + 1 endloop //Abort if the key length is 0 (to avoid crashes) if KeyLength <= 0 then return "" endif //Loop through every character in the string and encrypt it loop //Get a character from the code set CurrentCharacter = SubStringBJ(Code, Index + 1, Index + 1) //Exit when the end of the code string is reached exitwhen CurrentCharacter == "" //Converts a character to a value //Traverses the character table until the character is found set CurrentValue = 0 loop exitwhen udg_CharTable[CurrentValue] == CurrentCharacter set CurrentValue = CurrentValue + 1 //If the character is not found, set it to 0 if CurrentValue >= 70 then set CurrentValue = 0 exitwhen true endif endloop //Get a proper key index set KeyIndex = ModuloInteger(Index, KeyLength) //Get a character from the key set CurrentKeyCharacter = SubStringBJ(Key, KeyIndex + 1, KeyIndex + 1) //Converts a character to a value //Traverses the character table until the character is found set CurrentKeyValue = 0 loop exitwhen udg_CharTable[CurrentKeyValue] == CurrentKeyCharacter set CurrentKeyValue = CurrentKeyValue + 1 //If the character is not found, set it to 0 if CurrentKeyValue >= 70 then set CurrentKeyValue = 0 exitwhen true endif endloop //Make sure only a valid character is encrypted if ((CurrentKeyValue < 0) or (CurrentKeyValue >= 64)) then set CurrentKeyValue = 0 endif //Encrypt the character using XOR set CurrentValue = BitwiseXOR(CurrentValue, CurrentKeyValue) //Convert the value to a character set CurrentCharacter = udg_CharTable[CurrentValue] //Add the character to the resulting code string set ResultCode = ResultCode + CurrentCharacter set Index = Index + 1 endloop return ResultCode endfunction
2, create variable :
CharTable : string array
set Hero_kill_string
set Hero_Death_string
set creep_kill_string
set creep_deaths_string
set Ranks_string
final_code_string
secured_final_code
also, call follow script to set up character table
custom script "call function SetupCharTable"
3, How to generate saving code :
then try :
set Hero_kill_string = ConvertToBase(Hero_kill_number, 36)
set Hero_Death_string = ConvertToBase(Hero_Death_number, 36)
set creep_kill_string = ConvertToBase(creep_kill_number, 36)
set creep_deaths_string = ConvertToBase(creep_deaths_number, 36)
set Ranks_string = ConvertToBase(Ranks_number, 36)
assume your range is :
Hero kill: 0-1295 ? (2 digit)
Hero Death: 0-11295 ? (2 digit)
creep kills: 0-46655? (3 digit)
creep deaths: 0-46655? (3 digit)
Ranks : 0-1295? (2 digit)
// make sure Hero_kill_string is 2 digit, if it is 1 digit, then add "0" to front. do same for other value
set final_code_string = Hero_kill_string + Hero_Death_string + creep_kill_string + creep_deaths_string + Ranks_string
set secured_final_code = GeneratePassword ( final_code_string, player_name)
4, How to Loading code:
player_enter_code // this code enter by player
set final_code_string = GeneratePassword (player_enter_code, player_name)
if(final_code_string != 12 digit)
then invalid code
Hero_kill_string = first 2 digit of (final_code_string)
Hero_Death_string = next 2 digit
......
Ranks_string = last 2 digit
Hero_kill_number = ConvertCharToInt(Hero_kill_string)
Hero_Death_number = ConvertCharToInt(Hero_Death_string)
......
Ranks = ConvertCharToInt(Ranks_string)
DONE !!!
(you can write more code verify invalid value on kill/death/rank etc
if you need higher than 46655, then you can use 4 digit (1 digit Base36 can hold 36 decimal, 4 digit base36 number can hold up to 1,679,615 decimal )
is there a demo map?
