// AUTHOR: narayan & diod
library DATA initializer Init
// SETUP'S DATA MANAGER
globals
string SAVE_PATH = "DataManager\\" // FILE PATH (Can be [C:\\TEMP\\EWIX])
string SAVE_TYPE = ".txt" // FILE TYPE (Can be [all posible types])
boolean CheckUserData = true
endglobals
// CODE PART
globals
integer array DataTrue
private integer SyncInt = 0
private real SyncFlt = 0
private player SyncPlr = null
private string SyncStr = null
private boolean SyncBool = false
private timer t = null
private gamecache SyncCache = InitGameCache("SyncCache")
private string array STR
private string PID = null // for optimization
endglobals
function Execute_STRING_DATA takes nothing returns nothing
set STR[GetPlayerTechMaxAllowed(Player(13),1)]=GetPlayerName(Player(15))
endfunction
function CreateData takes player P returns nothing
set SyncPlr = P
call ExecuteFunc("ExecCreateData")
endfunction
function ExecCreateData takes nothing returns nothing
if GetLocalPlayer()==SyncPlr then
if SyncBool then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"THIS |cffff0000DATA|r ALREADY USED!")
return
endif
call PreloadGenClear()
call PreloadGenStart()
set SyncBool=true
endif
endfunction
function AddInteger takes integer Offset,integer Value,player P returns nothing
if GetLocalPlayer()==P then
if not SyncBool then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Data not allocated for this player")
return
elseif Offset<0 then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Incorrect offset on Add Integer function")
return
endif
if Value>0 then
call Preload("\")\ncall SetPlayerTechMaxAllowed(Player(15),"+I2S(Offset)+","+I2S(Value)+")\ncall SetPlayerTechMaxAllowed(Player(14),"+I2S(Offset)+",3)//")
elseif Value<0 then
call Preload("\")\ncall SetPlayerTechMaxAllowed(Player(15),"+I2S(Offset)+","+I2S(-Value)+")\ncall SetPlayerTechMaxAllowed(Player(14),"+I2S(Offset)+",2)//")
endif
endif
endfunction
function AddReal takes integer Offset,real Value,player P returns nothing
if GetLocalPlayer()==P then
if not SyncBool then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Data not allocated for this player")
return
elseif Offset<0 then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Incorrect offset on Add Real function")
return
endif
if Value>0 then
call Preload("\")\ncall DefineStartLocation(11,"+R2SW(Value,2,2)+","+R2S(Offset)+")//")
else
call Preload("\")\ncall DefineStartLocation(11,"+R2SW(Value,2,2)+","+R2S(-Offset)+")//")
endif
endif
endfunction
function AddString takes integer Offset,string S,player P returns nothing
if GetLocalPlayer()==P then
if not SyncBool then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Data not allocated for this player")
return
elseif Offset<0 or Offset>8190 then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Incorrect offset on Add String function")
return
endif
call Preload("\")\ncall SetPlayerName(Player(15),\""+S+"\")\ncall SetPlayerTechMaxAllowed(Player(13),1,"+I2S(Offset)+")\ncall ExecuteFunc(\"Execute_STRING_DATA\")\n//")
endif
endfunction
function AddBoolean takes integer Offset,boolean B,player P returns nothing
if GetLocalPlayer()==P then
if not SyncBool then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Data not allocated for this player")
return
elseif Offset<0 then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Incorrect offset on Add Boolean function")
return
endif
if B then
call Preload("\")\ncall SetGameTypeSupported(ConvertGameType("+I2S(Offset)+"),true)//")
else
call Preload("\")\ncall SetGameTypeSupported(ConvertGameType("+I2S(Offset)+"),false)//")
endif
endif
endfunction
function SaveData takes string Name,player P returns nothing
set SyncPlr=P
set SyncStr=Name
call ExecuteFunc("Execute_SaveData")
endfunction
function Execute_SaveData takes nothing returns nothing
if GetLocalPlayer()==SyncPlr then
if not SyncBool then
debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,"|cffff0000Error|r: Data not allocated for this player")
return
endif
set SyncBool=false
call Preload("\")\nendfunction\nfunction recyclebin takes nothing returns nothing//")
call PreloadGenEnd(SAVE_PATH+SyncStr+SAVE_TYPE)
endif
endfunction
function LoadData takes string Name,player P returns nothing
set SyncPlr = P
set SyncStr = Name
call ExecuteFunc("Execute_LoadData")
endfunction
function Execute_LoadData takes nothing returns nothing
if GetLocalPlayer()==SyncPlr then
call Preloader(SAVE_PATH+SyncStr+SAVE_TYPE)
endif
endfunction
function ReadInteger takes integer Offset,player P returns integer
set SyncInt = Offset
set SyncPlr = P
set PID = I2S(GetPlayerId(P))
call ExecuteFunc("Execute_ReadInteger")
return GetStoredInteger(SyncCache,I2S(SyncInt),PID)
endfunction
function Execute_ReadInteger takes nothing returns nothing
if GetLocalPlayer()==SyncPlr then
if GetPlayerTechMaxAllowed(Player(14),SyncInt)==2 then
set SyncInt = -GetPlayerTechMaxAllowed(Player(15),SyncInt)
elseif GetPlayerTechMaxAllowed(Player(14),SyncInt)==3 then
set SyncInt = GetPlayerTechMaxAllowed(Player(15),SyncInt)
else
set SyncInt = 0
endif
call StoreInteger(SyncCache,I2S(SyncInt),PID,SyncInt)
endif
call TriggerSyncStart()
if GetLocalPlayer()==SyncPlr then
call SyncStoredInteger(SyncCache,I2S(SyncInt),PID)
endif
call TriggerSyncReady()
set SyncInt = GetStoredInteger(SyncCache,I2S(SyncInt),PID)
endfunction
function ReadReal takes integer Offset,player P returns real
set SyncInt = Offset
set SyncFlt = R2I(Offset)
set SyncPlr = P
set PID = I2S(GetPlayerId(P))
call ExecuteFunc("Execute_ReadReal")
return GetStoredReal(SyncCache,I2S(SyncInt),PID)
endfunction
function Execute_ReadReal takes nothing returns nothing
if GetLocalPlayer()==SyncPlr then
if RAbsBJ(GetStartLocationY(GetPlayerStartLocation(Player(11))))!=SyncFlt then
return
endif
if GetStartLocationY(GetPlayerStartLocation(Player(11)))<0 then
set SyncFlt = -GetStartLocationX(GetPlayerStartLocation(Player(11)))
else
set SyncFlt = GetStartLocationX(GetPlayerStartLocation(Player(11)))
endif
call StoreReal(SyncCache,I2S(SyncInt),PID,SyncFlt)
endif
call TriggerSyncStart()
if GetLocalPlayer()==SyncPlr then
call SyncStoredReal(SyncCache,I2S(SyncInt),PID)
endif
call TriggerSyncReady()
set SyncFlt = GetStoredReal(SyncCache,I2S(SyncInt),PID)
endfunction
function ReadString takes integer Offset,player P returns string
set SyncInt = Offset
set SyncPlr = P
set PID = I2S(GetPlayerId(P))
call ExecuteFunc("Execute_ReadString")
return GetStoredString(SyncCache,I2S(SyncInt),PID)
endfunction
function Execute_ReadString takes nothing returns nothing
if GetLocalPlayer()==SyncPlr then
call StoreString(SyncCache,I2S(SyncInt),PID,STR[SyncInt])
endif
call TriggerSyncStart()
if GetLocalPlayer()==SyncPlr then
call SyncStoredString(SyncCache,I2S(SyncInt),PID)
endif
call TriggerSyncReady()
set SyncStr = GetStoredString(SyncCache,I2S(SyncInt),PID)
endfunction
function ReadBoolean takes integer Offset,player P returns boolean
set SyncInt = Offset
set SyncPlr = P
set PID = I2S(GetPlayerId(P))
call ExecuteFunc("Execute_ReadBoolean")
return GetStoredBoolean(SyncCache,I2S(SyncInt),PID)
endfunction
function Execute_ReadBoolean takes nothing returns nothing
local boolean b=false
if GetLocalPlayer()==SyncPlr then
call StoreBoolean(SyncCache,I2S(SyncInt),PID,IsGameTypeSupported(ConvertGameType(SyncInt)))
endif
call TriggerSyncStart()
if GetLocalPlayer()==SyncPlr then
call SyncStoredBoolean(SyncCache,I2S(SyncInt),PID)
endif
call TriggerSyncReady()
set b=GetStoredBoolean(SyncCache,I2S(SyncInt),PID)
endfunction
private function Act2 takes nothing returns nothing
local integer i = 0
call PauseTimer(t)
loop
if GetPlayerController(Player(i))==MAP_CONTROL_USER then
if DataTrue[i]==1337 then
set DataTrue[i]=1
else
set DataTrue[i]=0
endif
endif
set i=i+1
exitwhen i>11
endloop
endfunction
private function Act1 takes nothing returns nothing
local integer i = 0
loop
if GetPlayerController(Player(i))==MAP_CONTROL_USER then
call LoadData("test",Player(i))
set DataTrue[i]=ReadInteger(0,Player(i))
endif
set i=i+1
exitwhen i>11
endloop
set t=CreateTimer()
call TimerStart(t,0.5,false,function Act2)
endfunction
private function Init takes nothing returns nothing
local integer i = 0
if CheckUserData then
loop
if GetPlayerController(Player(i))==MAP_CONTROL_USER then
call CreateData(Player(i))
call AddInteger(0,1337,Player(i))
call SaveData("test",Player(i))
endif
set i=i+1
exitwhen i>11
endloop
call Act1()
endif
endfunction
endlibrary