function SaveLoad_InitialSetup takes nothing returns nothing
local integer i = 0
local integer j = 0
loop
set udg_SaveLoad_Compress[i + 48] = j
set udg_SaveLoad_Uncompress[i] = i + 48
set j = j + 1
set i = i + 1
exitwhen i >= 10
endloop
set i = 0
loop
set udg_SaveLoad_Compress[i + 97] = j
set udg_SaveLoad_Compress[i + 65] = j + 26
set udg_SaveLoad_Uncompress[i + 10] = i + 97
set udg_SaveLoad_Uncompress[i + 26 + 10] = i + 65
set j = j + 1
set i = i + 1
exitwhen i >= 26
endloop
endfunction
function SaveLoad_Id2CId takes integer n returns integer
local integer i = n / (256 * 256 * 256)
local integer r
set n = n - i * (256 * 256 * 256)
set r = udg_SaveLoad_Compress[i]
set i = n / (256 * 256)
set n = n - i * (256 * 256)
set r = r * 64 + udg_SaveLoad_Compress[i]
set i = n / 256
set r = r * 64 + udg_SaveLoad_Compress[i]
return r * 64 + udg_SaveLoad_Compress[n - i * 256]
endfunction
function SaveLoad_CId2Id takes integer n returns integer
local integer i = n / (64 * 64 * 64)
local integer r
set n = n - i * (64 * 64 * 64)
set r = udg_SaveLoad_Uncompress[i]
set i = n / (64 * 64)
set n = n - i * (64 * 64)
set r = r * 256 + udg_SaveLoad_Uncompress[i]
set i = n / 64
set r = r * 256 + udg_SaveLoad_Uncompress[i]
return r * 256 + udg_SaveLoad_Uncompress[n - i * 64]
endfunction
function SaveLoad_Unit2Integer takes unit u returns integer
local integer i = 0
local integer n = GetUnitTypeId(u)
if udg_SaveLoad_Initialized == false then
set udg_SaveLoad_Initialized = true
call SaveLoad_InitialSetup()
endif
loop
set i = i + 1
exitwhen i > udg_SaveLoad_Heroes_LastIndex
if udg_SaveLoad_Heroes[i] == n then
return i
endif
endloop
return SaveLoad_Id2CId(n)
endfunction
function SaveLoad_Integer2Unit takes integer i returns integer
if udg_SaveLoad_Initialized == false then
set udg_SaveLoad_Initialized = true
call SaveLoad_InitialSetup()
endif
if i <= udg_SaveLoad_Heroes_LastIndex then
return udg_SaveLoad_Heroes[i]
endif
return SaveLoad_CId2Id(i)
endfunction
function SaveLoad_Item2Integer takes item t returns integer
local integer i = 0
local integer n = GetItemTypeId(t)
if udg_SaveLoad_Initialized == false then
set udg_SaveLoad_Initialized = true
call SaveLoad_InitialSetup()
endif
loop
set i = i + 1
exitwhen i > udg_SaveLoad_Items_LastIndex
if udg_SaveLoad_Items[i] == n then
return i
endif
endloop
return SaveLoad_Id2CId(n)
endfunction
function SaveLoad_Integer2Item takes integer i returns integer
if udg_SaveLoad_Initialized == false then
set udg_SaveLoad_Initialized = true
call SaveLoad_InitialSetup()
endif
if i <= udg_SaveLoad_Items_LastIndex then
return udg_SaveLoad_Items[i]
endif
return SaveLoad_CId2Id(i)
endfunction
function SaveLoad_Ability2Integer takes integer a returns integer
local integer i = 0
if udg_SaveLoad_Initialized == false then
set udg_SaveLoad_Initialized = true
call SaveLoad_InitialSetup()
endif
loop
set i = i + 1
exitwhen i > udg_SaveLoad_Abilities_LastIndex
if udg_SaveLoad_Abilities[i] == a then
return i
endif
endloop
return SaveLoad_Id2CId(a)
endfunction
function SaveLoad_Integer2Ability takes integer i returns integer
if udg_SaveLoad_Initialized == false then
set udg_SaveLoad_Initialized = true
call SaveLoad_InitialSetup()
endif
if i <= udg_SaveLoad_Abilities_LastIndex then
return udg_SaveLoad_Abilities[i]
endif
return SaveLoad_CId2Id(i)
endfunction
function SaveLoad_EncodeChar takes string n returns integer
local integer i = 0
local string s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
local string s2 = "abcdefghijklmnopqrstuvwxyz"
local string s3 = "0123456789"
loop
if SubString(s1,i,i + 1) == n then
return i
endif
if SubString(s2,i,i + 1) == n then
return i
endif
set i = i + 1
exitwhen i >= 26
endloop
set i = 0
loop
if SubString(s3,i,i + 1) == n then
return i
endif
set i = i + 1
exitwhen i >= 10
endloop
return 0
endfunction
function SaveLoad_EncodeVerify takes string buffer returns integer
local integer i = 0
local integer j = 0
local string name = GetPlayerName(GetTriggerPlayer())
if udg_SaveLoad_UsePlayername == true then
loop
set j = j + SaveLoad_EncodeChar(SubString(name,i,i + 1))
set i = i + 1
exitwhen i >= StringLength(name)
endloop
endif
set i = 0
loop
set j = j + SaveLoad_EncodeChar(SubString(buffer,i,i + 1))
set i = i + 1
exitwhen i >= StringLength(buffer)
endloop
return j
endfunction
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
return c
endfunction
function SaveLoad_DecodeValues takes string s returns boolean
local integer i
local integer j
local integer k
local integer l
local integer SaveCode = 0
local integer m
local integer array a
local string buffer = ""
local integer CodeLength = StringLength(udg_SaveLoad_Alphabet)
local integer skip = -1
local integer CONST = 1000000
local string abc = "0123456789-"
local string c
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] * CodeLength
set j = j + 1
exitwhen j > m
endloop
set skip = skip + 1
if skip == 4 then
set skip = 0
set i = i + 1
endif
set l = CodeLength
set c = SubString(s,i,i + 1)
loop
set l = l - 1
exitwhen l < 1
exitwhen SubString(udg_SaveLoad_Alphabet,l,l + 1) == c
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(s)
endloop
loop
exitwhen m < 0
set j = m
loop
exitwhen j <= 0
set k = a[j] / 11
set a[j - 1] = a[j - 1] + (a[j] - k * 11) * CONST
set a[j] = k
set j = j - 1
endloop
set k = a[j] / 11
set i = a[j] - k * 11
set buffer = SubString(abc,i,i + 1) + buffer
set a[j] = k
if a[m] == 0 then
set m = m - 1
endif
endloop
set i = 0
set j = 0
loop
loop
exitwhen i >= StringLength(buffer)
exitwhen i > 0 and SubString(buffer,i,i + 1) == "-" and SubString(buffer,i - 1,i) != "-"
set i = i + 1
endloop
if i < StringLength(buffer) then
set k = i
endif
set SaveCode = SaveCode + 1
set udg_Save[SaveCode] = S2I(SubString(buffer,j,i))
set j = i + 1
set i = i + 1
exitwhen i >= StringLength(buffer)
endloop
set j = SaveLoad_EncodeVerify(SubString(buffer,0,k))
set udg_SaveCount = SaveCode - 1
if j == udg_Save[SaveCode]then
return true
endif
return false
endfunction
function SaveLoad_Encode takes nothing returns string
if udg_SaveLoad_CaseSensitive == false then
set udg_SaveLoad_Alphabet = StringCase(udg_SaveLoad_Alphabet,true)
endif
return SaveLoad_EncodeValues()
endfunction
function SaveLoad_Decode takes string s returns boolean
if udg_SaveLoad_CaseSensitive == false then
set udg_SaveLoad_Alphabet = StringCase(udg_SaveLoad_Alphabet,true)
set s = StringCase(s,true)
endif
if SaveLoad_DecodeValues(s) then
call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"Decoding sucessful")
return true
endif
call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"Decoding failed")
return false
endfunction
function CreateTextFile takes string Code returns nothing
local integer i = 1
loop
exitwhen i > udg_NumHeroesToSave
set udg_SaveText[i] ="
"+udg_HeroToSaveName[i]+"
" + udg_SaveText[i]+"
"
set i = i + 1
endloop
call PreloadGenClear()
call PreloadGenStart()
// The line below creates the log
set i = 1
loop
exitwhen i>udg_NumHeroesToSave
call Preload(udg_SaveText[i])
set i=i+1
endloop
// The line below creates the file at the specified location
call PreloadGenEnd(udg_TextFileName + ".txt")
endfunction
Name | Type | is_array | initial_value |
AGZonesAllowed | boolean | No | |
AP1_Player | player | No | Player00 |
APG1_Player | force | No | Force00 |
BlizzardFolder | string | No | |
BonusSkillPointsGiven | integer | No | |
Cairne | unit | No | |
CairneInParty | boolean | No | |
Chen | unit | No | |
ChenInParty | boolean | No | |
Code | string | No | |
CommonSpawnTimerLength | real | No | |
CreateDefaultSpot | location | No | |
currentHerotoLoad | integer | No | |
currentHerotoSave | integer | No | |
DebugSpawning | boolean | No | |
DifficultyInt | integer | No | |
DropCommonChance | real | No | |
DropCommonItem | itemcode | No | |
DropPoint | location | No | |
DropRareChance | real | No | |
DropRareItem | itemcode | No | |
DropRoll | real | No | |
DropTableCommonGW | group | No | |
DropTableCommonTW | group | No | |
DropTableNone | group | No | |
EntranceLeft0Right1 | integer | No | |
ExpDisabledForCairne | boolean | No | |
ExpDisabledForChen | boolean | No | |
ExpDisabledForRexxar | boolean | No | |
ExpDisabledForRokhan | boolean | No | |
GameOver | boolean | No | false |
GraveyardTimer | timer | No | |
GraveyardUnits | group | No | |
HeroFirstAbility | abilcode | Yes | |
HeroFourthAbility | abilcode | Yes | |
HeroSecondAbility | abilcode | Yes | |
HeroThirdAbility | abilcode | Yes | |
HeroToLoad | unit | Yes | |
HeroToSave | unit | Yes | |
HeroToSaveName | string | Yes | |
HiddenUnits | group | No | |
InCinematic | boolean | No | |
InitTrigger | trigger | No | |
IntroSkipped | boolean | No | |
LBQuillboarLeaderboard | leaderboard | No | |
LBQuillboarRemainingINT | integer | No | 50 |
LeaveToArea | string | No | |
LeaveToAreaCurrent | string | No | |
LeaveToAreaShort | string | No | |
Nazgrel | unit | No | |
NULLString | string | No | |
NumHeroAquiringTome | integer | No | |
NumHeroesToLoad | integer | No | |
NumHeroesToSave | integer | No | |
P1 | player | No | |
P2 | player | No | Player01 |
P3_Thrall | player | No | Player02 |
P4_Quillboar | player | No | Player03 |
Pack01 | group | No | |
Pack02 | group | No | |
Pack03A | group | No | |
Pack03B | group | No | |
Pack04 | group | No | |
Pack05 | group | No | |
QuestDestroyHumans | quest | No | |
QuestDestroyHumansProgress | integer | No | |
QuestDestroyHumansReq1 | questitem | No | |
QuestDestroyHumansReq2 | questitem | No | |
QuestDestroyHumansReq3 | questitem | No | |
QuestDestroyHumansReq4 | questitem | No | |
QuestDyingWish | quest | No | |
QuestDyingWishProgress | integer | No | |
QuestDyingWishReq1 | questitem | No | |
QuestEarnKeep | quest | No | |
QuestEarnKeepProgress | integer | No | |
QuestEarnKeepProgress1 | boolean | No | |
QuestEarnKeepProgress2 | boolean | No | |
QuestEarnKeepProgress3 | boolean | No | |
QuestEarnKeepReq1 | questitem | No | |
QuestEarnKeepReq2 | questitem | No | |
QuestEarnKeepReq3 | questitem | No | |
QuestEarnKeepReq4 | questitem | No | |
QuestHarpyThreat | quest | No | |
QuestHarpyThreatProgress | integer | No | |
QuestHarpyThreatReq1 | questitem | No | |
QuestHarpyThreatReq2 | questitem | No | |
QuestHarpyThreatReq3 | questitem | No | |
QuestLizardEggs | quest | No | |
QuestLizardEggsProgress | integer | No | |
QuestLizardEggsReq1 | questitem | No | |
QuestQuillboars | quest | No | |
QuestQuillboarsProgress | integer | No | |
QuestQuillboarsReq1 | questitem | No | |
QuestQuillboarsReq2 | questitem | No | |
QuestSealTunnel | quest | No | |
QuestSealTunnelProgress | integer | No | |
QuestSealTunnelReq1 | questitem | No | |
QuestSealTunnelReq2 | questitem | No | |
QuestSealTunnelReq3 | questitem | No | |
QuestSealTunnelReq4 | questitem | No | |
QuestSecureWells | quest | No | |
QuestSecureWellsProgress | integer | No | |
QuestSecureWellsReq1 | questitem | No | |
QuestSecureWellsReq2 | questitem | No | |
QuestSignalPyres | quest | No | |
QuestSignalPyresProgress | integer | No | |
QuestSignalPyresReq1 | questitem | No | |
QuestSignalPyresReq2 | questitem | No | |
QuestSinkFleet | quest | No | |
QuestSinkFleetProgress | integer | No | |
QuestSinkFleetReq1 | questitem | No | |
QuestSinkFleetReq2 | questitem | No | |
QuestStrangeBrew | quest | No | |
QuestStrangeBrewProgress | integer | No | |
QuestStrangeBrewProgress1 | boolean | No | |
QuestStrangeBrewProgress2 | boolean | No | |
QuestStrangeBrewProgress3 | boolean | No | |
QuestStrangeBrewReq1 | questitem | No | |
QuestStrangeBrewReq2 | questitem | No | |
QuestStrangeBrewReq3 | questitem | No | |
QuestStrangeBrewReq4 | questitem | No | |
QuestSummit | quest | No | |
QuestSummitProgress | integer | No | |
QuestSummitReq1 | questitem | No | |
QuestSummitReq2 | questitem | No | |
QuestSummitReq3 | questitem | No | |
QuestSurvey | quest | No | |
QuestSurveyProgress | integer | No | |
QuestSurveyReq1 | questitem | No | |
QuestSurveyReq2 | questitem | No | |
QuestSurveyReq3 | questitem | No | |
QuestSurveyReq4 | questitem | No | |
QuestThunderHerb | quest | No | |
QuestThunderHerbProgress | integer | No | |
QuestThunderHerbReq1 | questitem | No | |
QuestThunderHerbReq2 | questitem | No | |
QuestThunderLizards | quest | No | |
QuestThunderLizardsProgress | integer | No | |
QuestThunderLizardsReq1 | questitem | No | |
QuestThunderLizardsReq2 | questitem | No | |
QuestThunderLizardsReq3 | questitem | No | |
QuestWarlockCoven | quest | No | |
QuestWarlockCovenProgress | integer | No | |
QuestWarlockCovenReq1 | questitem | No | |
QuestWarlockCovenReq2 | questitem | No | |
QuestWarlockCovenReq3 | questitem | No | |
QuestWarnTrolls | quest | No | |
QuestWarnTrollsProgress | integer | No | |
QuestWarnTrollsReq1 | questitem | No | |
QuestWarnTrollsReq2 | questitem | No | |
Quillboars | group | No | |
RareSpawnTimerLength | real | No | |
ResurrectionChangeEffectLocal | effect | No | |
ResurrectionSpot | location | No | |
ResurrectionSpotLocal | location | No | |
ResurrectionStone | unit | No | |
ResurrectionStonePicked | integer | No | |
ResurrectionStoneSpot | location | No | |
ResurrectionVM | fogmodifier | No | |
ResurrectionVMExists | boolean | No | |
RevivalAltar | unit | No | |
RevivalHero | unit | No | |
RevivalReturnSpot | location | No | |
RevivalSpot | location | No | |
Rexxar | unit | No | UnitNull |
RexxarInParty | boolean | No | true |
Rokhan | unit | No | |
RokhanInParty | boolean | No | |
Save | integer | Yes | |
SaveCount | integer | No | |
SaveExt | string | No | |
SaveFolder | string | No | |
SaveLoad_Abilities | abilcode | Yes | |
SaveLoad_Abilities_LastIndex | integer | No | |
SaveLoad_Alphabet | string | No | |
SaveLoad_CaseSensitive | boolean | No | |
SaveLoad_Compress | integer | Yes | |
SaveLoad_Heroes | unitcode | Yes | |
SaveLoad_Heroes_LastIndex | integer | No | |
SaveLoad_Initialized | boolean | No | |
SaveLoad_Items | itemcode | Yes | |
SaveLoad_Items_LastIndex | integer | No | |
SaveLoad_Uncompress | integer | Yes | |
SaveLoad_UsePlayername | boolean | No | |
SaveText | string | Yes | |
SoundBonusHeroPoint | sound | No | |
SpawnPackDropTable | group | No | |
SpawnPackRegion | rect | No | |
SpawnPackRoamChance | real | No | |
SpawnPackSpawnChance | real | No | |
SpawnPackUnitGroup | group | No | |
SpawnPackUnitMax | integer | No | |
SpawnPackUnitType | unitcode | No | |
SpawnTimerCommon01 | timer | No | |
SpawnTimerCommon02 | timer | No | |
SpawnTimerCommon03 | timer | No | |
SpawnTimerCommon04 | timer | No | |
SpawnTimerCommon05 | timer | No | |
SpawnTimerRare01 | timer | No | |
SpawnTimerRare02 | timer | No | |
Stash | unit | No | |
TempInteger | integer | No | |
TempItem | item | No | |
TempItemType | itemcode | No | |
TempPathA | string | No | |
TempPathB | string | No | |
TempPoint | location | No | |
TempUnit | unit | No | |
TempUnitType | unitcode | No | |
TextFileName | string | No | |
TomeAgility | integer | Yes | |
TomeHealth | integer | Yes | |
TomeIntelligence | integer | Yes | |
TomeStrength | integer | Yes | |
TransitionHero | unit | No | |
TransitionHeroInParty | boolean | No | |
TransitionHeroLife | real | No | |
TransitionHeroMana | real | No | |
TransitionHeroName | string | No | |
TransitionKey | string | No | OrcX01Transitions |
TransitionSource | integer | No | |
TransitionSpawnA | location | No | |
TransitionSpawnB | location | No | |
TransitionSpawnC | location | No | |
TransitionSpot | location | No | |
TransitionTarget | integer | No | |
TransitionTargetArea | integer | No | |
UnitGroup | group | No | |
UnitsHidden | boolean | No | |
Validate | boolean | No | |
Zone | integer | No | |
ZoneCount | integer | No | |
ZoneFolder | string | No | |
ZoneMapExt | string | No | |
ZoneMapPath | string | No | |
ZoneMaps | string | Yes | |
ZoneSaves | string | Yes |
function Trig_LeaveAreaText_Actions takes nothing returns nothing
call QuestMessageBJ( GetPlayersAll(), bj_QUESTMESSAGE_ALWAYSHINT, ( "|c00FF7F00Path to " + udg_LeaveToArea + "|r\n\n" + "If you are |c001CE6B9going|r to |c006969FF" + udg_LeaveToArea + "|r: Save the game as |c0096FF96A1" + udg_LeaveToAreaCurrent + "|r.\nLoad the game |c006969FFA1" + udg_LeaveToAreaShort + "|r. \nYou may now quit the game. Alternatively type |c00FF0000-cancel|r to return to your current session.\n\n" +"If you are |c001CE6B9coming|r from |c006969FF" + udg_LeaveToArea + "|r: \nType |c00FFFF00-loadstart|r to start loading the codes provided at the end of the last level you played. \nType |c00FF0000-cancel|r to cancel loading") )
endfunction
//===========================================================================
function InitTrig_AGLeaveAreaTextNotHome takes nothing returns nothing
set gg_trg_AGLeaveAreaTextNotHome = CreateTrigger( )
call TriggerAddAction( gg_trg_AGLeaveAreaTextNotHome, function Trig_LeaveAreaText_Actions )
endfunction