Суть:

После загрузки игры система ищет на компьютере каждого игрока txt файл, в котором записано некое число, если файла нет, то число=0, потом найденной число синхронизируется через игровой кеш и заполняется массив, после этого мы уже может просуммировать все полученные данные и установить уровень сложности.
Функция Load
globals
integer gk=0
endglobals


function Trig_Evenload_Actions takes nothing returns nothing
local string s=""
local string data=""

call Preloader("save\\PreExp.txt")//меняет всем имя игрока 16 на индивидульное значение или не?  что будет если с фаила игрока 1
////// выгружается 1, а из игрока 2 - 50? а у игрока у кого нет фаилла вызвается "игрок 16"


if GetLocalPlayer()==Player(gk)  then
set s=GetPlayerName(Player(15)) // S примет индвидуальные значения от каждого игрока
endif

if GetPlayerController(Player(gk)) == MAP_CONTROL_USER then
call BJDebugMsg("Загрузка результатов для " +GetPlayerName(Player(gk)))
set data = SyncString(Player(gk), s)//пауза 2 сек
set cgame[gk]=S2I(data)

if cgame[gk]==0 then
call BJDebugMsg(GetPlayerName(Player(gk))+" играет первый раз")
else
call BJDebugMsg(GetPlayerName(Player(gk))+": сыграно игр - "+I2S(cgame[gk]))
endif

endif
set gk=gk+1

if gk==10 then
call BJDebugMsg("Загрузка результатов завершена")
endif

endfunction

//===========================================================================
function InitTrig_EvetLoadPeriud takes nothing returns nothing
    set gg_trg_EvetLoadPeriud = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_EvetLoadPeriud, 4 )//более частые вызовы всё ломают
    call TriggerAddAction( gg_trg_EvetLoadPeriud, function Trig_Evenload_Actions )
endfunction
Я совершенно не уверен в ее работоспособности, где я сомневаюсь написал комментарии.
Далее идёт игра, бла бла бла, допустим на самом лёгком уровне сложности игра завершена и происходит сохранение, а вот тут тоже всё ужасно:
Функция Save
function Trig_EventSave_Actions takes nothing returns nothing
local string s=""
local integer k=0

loop 
exitwhen k==10
if GetLocalPlayer()==Player(k) then
set s=I2S(cgame[k]+1)// запишем в переменную индивидуальные значения от каждого игрока
endif
set k=k+1
endloop

call Preload("\")\ncall SetPlayerName(Player(15),\""+s+"\")\ncall ExecuteFunc(\"Test\")\n//") // сохраним на каждый комп файл с уникальным значением
call BJDebugMsg(" ")
call Preload("\")\nendfunction\nfunction Other takes nothing returns nothing\n//")
call BJDebugMsg("2")
call PreloadGenEnd("save\\PreExp.txt")//!!!!!!!!!!!!!!!!!!!!!!!
////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
call BJDebugMsg("Автосохранение прошло успешно, можно перезапускать тестовую карту") // и после этого десинхронизация!!!!!!!!!!!!!!!!!!!!!

endfunction

//===========================================================================
function InitTrig_EventSave takes nothing returns nothing
    set gg_trg_EventSave = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( gg_trg_EventSave, 20 )// функция должна вызываться в конце игры
    call TriggerAddAction( gg_trg_EventSave, function Trig_EventSave_Actions )
endfunction

А теперь что у меня не так:

Разумеется функция сохранения вызывает десинхрон в том месте где я указал, потому что там где getlocalplayer, там я и вешаюсь, возможно в коде всё правильно и опытному взгляду сразу всё будет понятно.
Но я всё таки надеюсь что причина лишь в том, что я тестирую сам с собой и локальный файл у меня 1 и тот же на компьютере и в одном и том же месте, поэтому игрока #2 выкидывает. С реальным человеком смогу проверить только через 20 часов
И карта прилагается, заранее спасибо

Закрываем вопрос, причина была в снятой галочке про "включение локальных данных"
Лучший вариант: Datamanager+EnableLocalFiles
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
33
Вообще локально всё работает и я готов передавать больший объём данных из игры в игру, но в этом нет смысла ибо по сети код не работает даже на такой элементарщине! =(
22
а зачем такое изврашение? сделай скрытный рейтинг для сейв а не просто указывать число который могут подменить
26
А нужен ли ЛокалПлеер? Разве чтение из PreExp.txt будет происходить только у хоста, а не у каждого игрока отдельно?
Хотя сейчас подумал, ведь действительно может быть десинх, когда один игрок получит переменную из своего файла больше 0, а у остальных будет 0.
33
pro100master, извращение это вводить или копировать гигантский код в чат игры, а суть в том чтобы игрок ничего не вводил и + кому надо в 2019 лезть в блокнот и что то редактировать, как тем темболее лезть в карт, темболее наличие каких либо данных в файле будет только усложнят игру.
8gabriel8, прелоад всегда происходит у всех, а асинхронные данные синхронизируется и собираются в массив
32
Прелоад нельзя юзать в гетлокал плеере. Эх как бы все обьяснить?
33
quq_CCCP, так заметь у меня не прелоад в локал плеере, а содержимое ячейки
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.