Привет всем. Возник вопрос, а можно ли как-то представить локальные расчеты, сделанные у каждого игрока отдельно, глобально? Собственно, чтобы десинхрона не было?
Принятый ответ
- Синхронизация через игровой кеш - медленно и классически, не чаще чем раз в 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
Или смотрим статью про ГетЛокалПлеер
- Патч 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
Вот нашёл чё-то на хайве
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Берги