Код
globals
gamecache udg_Cache
boolean array udg_FExists
integer udg_Integer
endglobals
function FileDoesExist takes nothing returns nothing
call StoreBoolean(udg_Cache, "", I2S(udg_Integer), true)
endfunction
function test takes nothing returns nothing
local integer i = 0
local string s = ""//Добавляем в таблицу строк пустую строку.
call FlushGameCache(InitGameCache("FileExists.w3v"))//Убираем последствия предыдущих игр
set udg_Cache = InitGameCache("FileExists.w3v")
set udg_Integer = 0
loop
//Код функции FileDoesExist может вызвать десинхронизацию таблицы строк, так что перестрахуемся и добавим строки "0", "1", ..., "11" в таблицы всех игроков.
set s = I2S(udg_Integer)
if GetLocalPlayer() == Player(udg_Integer) then
call Preloader("file.txt")
endif
exitwhen udg_Integer == 11
set udg_Integer = udg_Integer + 1
endloop
call TriggerSyncStart()
loop
if GetLocalPlayer() == Player(i) then
call SyncStoredBoolean(udg_Cache, "", I2S(i))
endif
exitwhen i == 11
set i = i + 1
endloop
call TriggerSleepAction(8.)
call TriggerSyncReady()
set i = 0
loop
set udg_FExists[i] = GetStoredBoolean(udg_Cache, "", I2S(i))
exitwhen i == 11
set i = i + 1
endloop
call FlushGameCache(udg_Cache)
set udg_Cache = null//Переменная больше использоваться не будет. Обнулим ее.
endfunction
Как-то так. Можно попробовать wait заменить таймером.
Примечание. Если будет использоваться какой-нибудь оптимизатор (Векса, например), проследить, чтобы он не стер манипуляции с переменной s.
Я не уверен, но вместо второго цикла можно попытаться написать вот так:Код
call SyncStoredBoolean(udg_Cache, "", I2S(GetPlayerId(GetLocalPlayer())))