Привет всем. Возник вопрос, а можно ли как-то представить локальные расчеты, сделанные у каждого игрока отдельно, глобально? Собственно, чтобы десинхрона не было?

Принятый ответ

  1. Синхронизация через игровой кеш - медленно и классически, не чаще чем раз в 2 секунды
раскрыть
gamecache cache = InitGameCache("cache")
function SyncReal takes player p, real val returns real
if (GetLocalPlayer() == p) then
 StoreReal(cache, "", "", val)
endif
TriggerSyncStart()
if (GetLocalPlayer() == p) then
SyncStoredReal(cache, "", "")
endif
TriggerSleepAction(2)// меньшнее значение вызывает десинх
TriggerSyncReady()
return GetStoredReal(cache, "", "")
endfunction
//==================================================
function Trig_CameraSynh_Actions takes nothing returns nothing
player p = Player(0)
real x=0
real y=0
real syncx=0
real syncy=0
string xs,ys
if GetLocalPlayer()==p
xs=R2S(GetMouseTerrainX())
ys=R2S(GetMouseTerrainY())
x=S2R(xs)// перезапись через строковый тип
y=S2R(ys)// иначе нули
endif
syncx = SyncReal(p, x)
syncy = SyncReal(p, y)
CreateUnit(p, 'e009', syncx, syncy, 0)
endfunction

//===========================================================================
function InitTrig_CameraSynh takes nothing returns nothing
    set gg_trg_CameraSynh = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_CameraSynh, 2.10 )
    call TriggerAddAction( gg_trg_CameraSynh, function Trig_CameraSynh_Actions )
endfunction
Или смотрим статью про ГетЛокалПлеер
  1. Патч 131+ дал нам набор новых функций по фаст синку
---@param whichTrigger trigger
---@param whichPlayer player
---@param prefix string
---@param fromServer boolean
---@return event
function BlzTriggerRegisterPlayerSyncEvent(whichTrigger, whichPlayer, prefix, fromServer) end    -- (native)
Я этим не пользовался и статей не видел, но вроде как делали и частота синха 0,1

Вот нашёл чё-то на хайве
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
24
4 года назад
0
Версия игры? Jass/Lua/GUI?
0
7
4 года назад
0
prog:
Версия игры? Jass/Lua/GUI?
Reforged, неважно как
1
32
4 года назад
Отредактирован Берги
1
  1. Синхронизация через игровой кеш - медленно и классически, не чаще чем раз в 2 секунды
раскрыть
gamecache cache = InitGameCache("cache")
function SyncReal takes player p, real val returns real
if (GetLocalPlayer() == p) then
 StoreReal(cache, "", "", val)
endif
TriggerSyncStart()
if (GetLocalPlayer() == p) then
SyncStoredReal(cache, "", "")
endif
TriggerSleepAction(2)// меньшнее значение вызывает десинх
TriggerSyncReady()
return GetStoredReal(cache, "", "")
endfunction
//==================================================
function Trig_CameraSynh_Actions takes nothing returns nothing
player p = Player(0)
real x=0
real y=0
real syncx=0
real syncy=0
string xs,ys
if GetLocalPlayer()==p
xs=R2S(GetMouseTerrainX())
ys=R2S(GetMouseTerrainY())
x=S2R(xs)// перезапись через строковый тип
y=S2R(ys)// иначе нули
endif
syncx = SyncReal(p, x)
syncy = SyncReal(p, y)
CreateUnit(p, 'e009', syncx, syncy, 0)
endfunction

//===========================================================================
function InitTrig_CameraSynh takes nothing returns nothing
    set gg_trg_CameraSynh = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_CameraSynh, 2.10 )
    call TriggerAddAction( gg_trg_CameraSynh, function Trig_CameraSynh_Actions )
endfunction
Или смотрим статью про ГетЛокалПлеер
  1. Патч 131+ дал нам набор новых функций по фаст синку
---@param whichTrigger trigger
---@param whichPlayer player
---@param prefix string
---@param fromServer boolean
---@return event
function BlzTriggerRegisterPlayerSyncEvent(whichTrigger, whichPlayer, prefix, fromServer) end    -- (native)
Я этим не пользовался и статей не видел, но вроде как делали и частота синха 0,1

Вот нашёл чё-то на хайве
Принятый ответ
0
7
4 года назад
0
Bergi_Bear, спасибо за помощь, буду разбираться)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.