|
|
|
|
function YDWE_PreloadSL_GetMask takes player p returns integer
|
|
|
|
|
local integer value
|
|
|
|
|
local integer beg = YDWE_PRELOADSL_CODE_INDEX_BEG(p)
|
|
|
|
|
local integer hi = CodeHI[beg]
|
|
|
|
|
local integer lo = CodeLO[beg]
|
|
|
|
|
if hi < $8000 then
|
|
|
|
|
set value = lo+hi*$10000
|
|
|
|
|
else
|
|
|
|
|
set hi = hi-$8000
|
|
|
|
|
set value = -(lo+hi*$10000)
|
|
|
|
|
endif
|
|
|
|
|
set Code[beg] = value
|
|
|
|
|
return value - YDWE_PRELOADSL_HEAD_MASK
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
///
|
|
|
|
|
/// ע<EFBFBD><EFBFBD>Ч<EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
|
|
|
|
/// <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
///
|
|
|
|
|
function YDWE_PreloadSL_Unmove takes integer beg, integer n, integer key returns nothing
|
|
|
|
|
local integer value
|
|
|
|
|
local integer keys = n*key
|
|
|
|
|
local integer index = beg + n
|
|
|
|
|
local integer hi
|
|
|
|
|
local integer lo
|
|
|
|
|
|
|
|
|
|
set beg = beg + 1
|
|
|
|
|
loop
|
|
|
|
|
exitwhen index < beg
|
|
|
|
|
|
|
|
|
|
set value = keys + (index - beg)
|
|
|
|
|
set value = beg + value - value/n*n
|
|
|
|
|
if value < beg then
|
|
|
|
|
set value = value + n
|
|
|
|
|
endif
|
|
|
|
|
set hi = CodeHI[value]
|
|
|
|
|
set CodeHI[value] = CodeHI[index]
|
|
|
|
|
set CodeHI[index] = hi
|
|
|
|
|
|
|
|
|
|
set value = keys - (index - beg)
|
|
|
|
|
set value = beg + value - value/n*n
|
|
|
|
|
if value < beg then
|
|
|
|
|
set value = value + n
|
|
|
|
|
endif
|
|
|
|
|
set lo = CodeLO[value]
|
|
|
|
|
set CodeLO[value] = CodeLO[index]
|
|
|
|
|
set CodeLO[index] = lo
|
|
|
|
|
|
|
|
|
|
set keys = keys - key
|
|
|
|
|
|
|
|
|
|
set index = index - 1
|
|
|
|
|
endloop
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_GetCode takes integer beg, integer n, integer key, integer mask returns boolean
|
|
|
|
|
local integer hi
|
|
|
|
|
local integer lo
|
|
|
|
|
local integer value
|
|
|
|
|
local integer masks = 0
|
|
|
|
|
local integer keys = 0
|
|
|
|
|
local integer index = beg + 1
|
|
|
|
|
local integer end = beg + n
|
|
|
|
|
|
|
|
|
|
loop
|
|
|
|
|
exitwhen index > end
|
|
|
|
|
set hi = CodeHI[index]
|
|
|
|
|
set lo = CodeLO[index]
|
|
|
|
|
|
|
|
|
|
// SubKey
|
|
|
|
|
set keys = keys + key
|
|
|
|
|
set hi = hi - keys
|
|
|
|
|
set lo = lo + keys
|
|
|
|
|
|
|
|
|
|
// SubMask
|
|
|
|
|
set masks = masks + mask
|
|
|
|
|
set value = masks/$10000
|
|
|
|
|
set hi = hi - (value - value/$100*$100)*$100
|
|
|
|
|
set lo = lo - (masks - masks/$100*$100)*$10000
|
|
|
|
|
|
|
|
|
|
// CheckMask
|
|
|
|
|
if ((hi/$10000) != 0) then
|
|
|
|
|
return false
|
|
|
|
|
endif
|
|
|
|
|
if ((lo/$10000) != 0) then
|
|
|
|
|
return false
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
// GetCode
|
|
|
|
|
if hi < $8000 then
|
|
|
|
|
set value = lo+hi*$10000
|
|
|
|
|
else
|
|
|
|
|
set hi = hi-$8000
|
|
|
|
|
set value = -(lo+hi*$10000)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
set Code[index] = value
|
|
|
|
|
set index = index + 1
|
|
|
|
|
endloop
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_Decode takes player p, integer n returns boolean
|
|
|
|
|
local integer key = YDWE_PRELOADSL_GET_KEY(p)
|
|
|
|
|
local integer beg = YDWE_PRELOADSL_CODE_INDEX_BEG(p)
|
|
|
|
|
local integer mask = YDWE_PreloadSL_GetMask(p)
|
|
|
|
|
call YDWE_PreloadSL_Unmove(beg, n, key)
|
|
|
|
|
return YDWE_PreloadSL_GetCode(beg, n, key, mask)
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_SetMask takes player p, integer mask returns nothing
|
|
|
|
|
local integer hi
|
|
|
|
|
local integer lo
|
|
|
|
|
local integer beg = YDWE_PRELOADSL_CODE_INDEX_BEG(p)
|
|
|
|
|
local integer value = YDWE_PRELOADSL_HEAD_MASK + mask
|
|
|
|
|
if value >= 0 then
|
|
|
|
|
set hi = value/$10000
|
|
|
|
|
set lo = value-hi*$10000
|
|
|
|
|
else
|
|
|
|
|
set value = -value
|
|
|
|
|
set hi = value/$10000
|
|
|
|
|
set lo = value-hi*$10000
|
|
|
|
|
set hi = hi+$8000
|
|
|
|
|
endif
|
|
|
|
|
set CodeHI[beg] = hi
|
|
|
|
|
set CodeLO[beg] = lo
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_SetCode takes integer beg, integer n, integer key, integer mask returns nothing
|
|
|
|
|
local integer hi
|
|
|
|
|
local integer lo
|
|
|
|
|
local integer value
|
|
|
|
|
local integer masks = 0
|
|
|
|
|
local integer keys = 0
|
|
|
|
|
local integer index = beg + 1
|
|
|
|
|
local integer end = beg + n
|
|
|
|
|
|
|
|
|
|
loop
|
|
|
|
|
exitwhen index > end
|
|
|
|
|
set value = Code[index]
|
|
|
|
|
|
|
|
|
|
// SetCode
|
|
|
|
|
if value >= 0 then
|
|
|
|
|
set hi = value/$10000
|
|
|
|
|
set lo = value-hi*$10000
|
|
|
|
|
else
|
|
|
|
|
set value = -value
|
|
|
|
|
set hi = value/$10000
|
|
|
|
|
set lo = value-hi*$10000
|
|
|
|
|
set hi = hi+$8000
|
|
|
|
|
endif
|
|
|
|
|
// AddKey
|
|
|
|
|
set keys = keys + key
|
|
|
|
|
set hi = hi + keys
|
|
|
|
|
set lo = lo - keys
|
|
|
|
|
|
|
|
|
|
// AddMask
|
|
|
|
|
set masks = masks + mask
|
|
|
|
|
set value = masks/$10000
|
|
|
|
|
set hi = hi + (value - value/$100*$100)*$100
|
|
|
|
|
set lo = lo + (masks - masks/$100*$100)*$10000
|
|
|
|
|
|
|
|
|
|
set CodeHI[index] = hi
|
|
|
|
|
set CodeLO[index] = lo
|
|
|
|
|
set index = index + 1
|
|
|
|
|
endloop
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
///
|
|
|
|
|
/// ע<EFBFBD><EFBFBD>Ч<EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
|
|
|
|
/// <EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>Ҫ...
|
|
|
|
|
///
|
|
|
|
|
function YDWE_PreloadSL_Move takes integer beg, integer n, integer key returns nothing
|
|
|
|
|
local integer value
|
|
|
|
|
local integer keys = 0
|
|
|
|
|
local integer index = beg + 1
|
|
|
|
|
local integer end = beg + n
|
|
|
|
|
local integer hi
|
|
|
|
|
local integer lo
|
|
|
|
|
|
|
|
|
|
set beg = beg + 1
|
|
|
|
|
loop
|
|
|
|
|
exitwhen index > end
|
|
|
|
|
|
|
|
|
|
set keys = keys + key
|
|
|
|
|
|
|
|
|
|
set value = keys + (index - beg)
|
|
|
|
|
set value = beg + value - value/n*n
|
|
|
|
|
if value < beg then
|
|
|
|
|
set value = value + n
|
|
|
|
|
endif
|
|
|
|
|
set hi = CodeHI[value]
|
|
|
|
|
set CodeHI[value] = CodeHI[index]
|
|
|
|
|
set CodeHI[index] = hi
|
|
|
|
|
|
|
|
|
|
set value = keys - (index - beg)
|
|
|
|
|
set value = beg + value - value/n*n
|
|
|
|
|
if value < beg then
|
|
|
|
|
set value = value + n
|
|
|
|
|
endif
|
|
|
|
|
set lo = CodeLO[value]
|
|
|
|
|
set CodeLO[value] = CodeLO[index]
|
|
|
|
|
set CodeLO[index] = lo
|
|
|
|
|
|
|
|
|
|
set index = index + 1
|
|
|
|
|
endloop
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_Encode takes player p, integer n, integer mask returns nothing
|
|
|
|
|
local integer key = YDWE_PRELOADSL_GET_KEY(p)
|
|
|
|
|
local integer beg = YDWE_PRELOADSL_CODE_INDEX_BEG(p)
|
|
|
|
|
call YDWE_PreloadSL_SetMask(p, mask)
|
|
|
|
|
call YDWE_PreloadSL_SetCode(beg, n, key, mask)
|
|
|
|
|
call YDWE_PreloadSL_Move(beg, n, key)
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
///
|
|
|
|
|
/// ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/// ͬһʱ<EFBFBD>䲻Ҫͬ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
///
|
|
|
|
|
function YDWE_PreloadSL_Sync takes player p, integer n returns nothing
|
|
|
|
|
local integer index
|
|
|
|
|
local integer beg = YDWE_PRELOADSL_CODE_INDEX_BEG(p)
|
|
|
|
|
local integer end = beg + n
|
|
|
|
|
|
|
|
|
|
if GetLocalPlayer() == p then
|
|
|
|
|
set index = beg
|
|
|
|
|
loop
|
|
|
|
|
exitwhen index > end
|
|
|
|
|
call YDWESync_Set("H", I2S(index), CodeHI[index])
|
|
|
|
|
call YDWESync_Set("L", I2S(index), CodeLO[index])
|
|
|
|
|
set index = index + 1
|
|
|
|
|
endloop
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
call YDWESync_Start()
|
|
|
|
|
if GetLocalPlayer() == p then
|
|
|
|
|
set index = beg
|
|
|
|
|
loop
|
|
|
|
|
exitwhen index > end
|
|
|
|
|
call YDWESync_Send("H", I2S(index))
|
|
|
|
|
call YDWESync_Send("L", I2S(index))
|
|
|
|
|
set index = index + 1
|
|
|
|
|
endloop
|
|
|
|
|
endif
|
|
|
|
|
call YDWESync_Ready()
|
|
|
|
|
//call TriggerSleepAction(0.2)
|
|
|
|
|
call YDWESync_Join(p)
|
|
|
|
|
set index = beg
|
|
|
|
|
loop
|
|
|
|
|
exitwhen index > end
|
|
|
|
|
set CodeHI[index] = YDWESync_Get("H", I2S(index))
|
|
|
|
|
set CodeLO[index] = YDWESync_Get("L", I2S(index))
|
|
|
|
|
set index = index + 1
|
|
|
|
|
endloop
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_Load takes player p, string dir, string file, integer n returns boolean
|
|
|
|
|
call YDWESync_Lock()
|
|
|
|
|
set n = n + 1
|
|
|
|
|
|
|
|
|
|
if GetLocalPlayer() == p then
|
|
|
|
|
call YDWE_PreloadSL_LoadPreFile(p, n, YDWE_PRELOADSL_DATA_FILE(dir, file))
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
call YDWE_PreloadSL_Sync(p, n)
|
|
|
|
|
set bj_lastLoadPreloadSLResult = YDWE_PreloadSL_Decode(p, n)
|
|
|
|
|
call YDWESync_Unlock()
|
|
|
|
|
|
|
|
|
|
return bj_lastLoadPreloadSLResult
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_Save takes player p, string dir, string file, integer n returns nothing
|
|
|
|
|
local integer mask = YDWE_PRELOADSL_GET_RND_MASK()
|
|
|
|
|
set n = n + 1
|
|
|
|
|
if GetLocalPlayer() == p then
|
|
|
|
|
call YDWE_PreloadSL_Encode(p, n, mask)
|
|
|
|
|
call YDWE_PreloadSL_SavePreFile(p, n, YDWE_PRELOADSL_DATA_FILE(dir, file))
|
|
|
|
|
endif
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_Set takes player p, string s, integer n, integer value returns nothing
|
|
|
|
|
set Code[n+YDWE_PRELOADSL_CODE_INDEX_BEG(p)] = value
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
function YDWE_PreloadSL_Get takes player p, string s, integer n returns integer
|
|
|
|
|
return Code[n+YDWE_PRELOADSL_CODE_INDEX_BEG(p)]
|
|
|
|
|
endfunction
|
|
|
|
|
|