Всем ку. Как синхронизировать Real данные локального игрока между другим игрокам? И приводите пример пожалуйста

function InitSync takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterPlayerSyncEvent(t, "id строка", false)
    call TriggerAddAction(t, function OnSync)
endfunction

function OnSync takes nothing returns nothing
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, " Get sync: " + GetTriggerSyncData())
endfunction

function Send takes string prefix, string data returns nothing
    if (GetLocalPlayer() == Player(0)) then
        call SendSyncData( prefix, data )
    endif
endfunction
Я понимаю как то так должно работать...
Вызов:
call Send( "id строка", R2S( real ) )
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
19
Если чисто возможностями варика, то в моде Nirvana было задействовано такое путём неполной синхронизации как я помню. Примера не будет, т.к. это всё в Blizzard.j, а копаться там лень.
Также, как я слышал, в UjAPI есть что-то связанное с синхронизацией, можешь там глянуть.
6
Ev3nt, я сам в Ujapi сижу, кинули функции и сказали что синхрон не делается пару строками, теперь сидеть и думать, (как пазл собирать) из этих функций, я сам недавно в джазз перещел так что сказать что 100% шарю в джаззе.. нет, учусь на примерах чем на теориях
13
globals
gamecache vSyncCache3
boolean vSync
integer vCountPlayersUser
endglobals

function fInitnData takes nothing returns nothing
set vSyncCache3 = InitGameCache("Sync3")
set vSync = false
set vCountPlayersUser = 3
endfunction

function fSync takes nothing returns nothing
local string vStr
local integer vvi
local real vResult
if (vSync == false) then
    set vStr = I2S(GetPlayerId(GetLocalPlayer()))
    call StoreReal(vSyncCache3,"real_data",vStr, 1.0)
    call SyncStoredReal(vSyncCache3,"real_data",vStr)
    call StoreReal(vSyncCache3,"real_data",vStr, 0.0)
    set vSync = true
else
    set vvi = 0
    loop
        exitwhen vvi >= vCountPlayersUser
        // тут должна быть проверка игрока на лив
        set vResult = GetStoredReal(vSyncCache3,"real_data",vStr)
        if (vResult == 0.0) then
            return
        endif
    endloop
endif
// Ура данные синхронизированы по времени в vResult значение
// fSync - конечно же это функция таймера
endfunction
18
Вот пример для ujapi, с гита.
trigger tString = nil;

    void String( string prefix, string data )
    {
        if ( tString == nil )
        {
            TriggerAPI::RegisterPlayerSyncEvent
            (
                tString = CreateTrigger( ),
                prefix,
                false,
                null,
                function( )
                {
                    print( "[EVENT_PLAYER_SYNC_PREFIX]: " + GetTimeStamp( false, 0 ) + "\n" );
                    print( "Prefix: " + GetTriggerSyncPrefix( ) + "\n" );
                    print( "==========================================================\n" );
                    print( "Data: " + GetTriggerSyncData( ) + "\n" );
                }
            );
        }

        if ( GetLocalPlayer( ) == Player( 0 ) )
        {
            SendSyncData
            ( 
                prefix,
                data
            );
        }
    }
6
Borodach, Спасибо, но чета на UjApi не похоже, или я не понял
18
Panda_95, В ujapi можно писать на AngelScript, на котором пример и написан. Нативки для jass
// Variable Sync API
native GetSyncedVariableType							takes nothing returns variabletype
native GetSyncedVariableName							takes nothing returns string
native GetSyncedInteger									takes nothing returns integer
native GetSyncedReal									takes nothing returns real
native GetSyncedString									takes nothing returns string
native GetSyncedHandle									takes nothing returns handle
native GetSyncedBoolean									takes nothing returns boolean

native SyncInteger             							takes string variableName returns nothing
native SyncReal             							takes string variableName returns nothing
native SyncString             							takes string variableName returns nothing
native SyncHandle             							takes string variableName returns nothing
native SyncBoolean             							takes string variableName returns nothing

native TriggerRegisterPlayerVariableSyncEvent           takes trigger whichTrigger, player whichPlayer, string variableName returns event
//

// Hashtable Sync API
native GetSyncSavedVariableType							takes nothing returns variabletype
native GetSyncSavedHashtable							takes nothing returns hashtable
native GetSyncSavedParentKey							takes nothing returns integer
native GetSyncSavedChildKey								takes nothing returns integer

native SyncSavedInteger             					takes hashtable table, integer parentKey, integer childKey returns nothing
native SyncSavedReal             						takes hashtable table, integer parentKey, integer childKey returns nothing
native SyncSavedString             						takes hashtable table, integer parentKey, integer childKey returns nothing
native SyncSavedHandle             						takes hashtable table, integer parentKey, integer childKey returns nothing
native SyncSavedBoolean             					takes hashtable table, integer parentKey, integer childKey returns nothing

native TriggerRegisterPlayerHashtableDataSyncEvent      takes trigger whichTrigger, player whichPlayer, hashtable whichHashtable returns event
//

// Prefix Sync API
native GetTriggerSyncPrefix                     		takes nothing returns string
native GetTriggerSyncData                       		takes nothing returns string

native SendSyncData                             		takes string prefix, string data returns boolean

native TriggerRegisterPlayerSyncEvent           		takes trigger whichTrigger, player whichPlayer, string prefix, boolean fromServer returns event
6
Borodach, Так?
`globals
trigger tString = null
endglobals
function String_Actions takes nothing returns nothing
call BJDebugMsg("[EVENT_PLAYER_SYNC_PREFIX]: " + I2S(R2I(TimerGetElapsed(CreateTimer()))) )
call BJDebugMsg("Prefix: " + GetTriggerSyncPrefix())
call BJDebugMsg("==========================================================")
call BJDebugMsg("Data: " + GetTriggerSyncData())
endfunction
===========================================================================
function String takes string prefix, string data returns nothing
if (tString == null) then
set tString = CreateTrigger( )
call TriggerRegisterPlayerSyncEvent(tString, Player(0), prefix, false)
call TriggerAddAction(tString, function String_Actions)
endif

if (GetLocalPlayer() == Player(0)) then
call SendSyncData(prefix, data)
endif
endfunction
`
18
Принятый ответ
function InitSync takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterPlayerSyncEvent(t, "id строка", false)
    call TriggerAddAction(t, function OnSync)
endfunction

function OnSync takes nothing returns nothing
    call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, " Get sync: " + GetTriggerSyncData())
endfunction

function Send takes string prefix, string data returns nothing
    if (GetLocalPlayer() == Player(0)) then
        call SendSyncData( prefix, data )
    endif
endfunction
Я понимаю как то так должно работать...
Вызов:
call Send( "id строка", R2S( real ) )
6
Borodach, call TriggerRegisterPlayerSyncEvent(t, "id строка", false) Недостаточно аругментов пишет, пропустил игрока наверное, что туда прописать?
18
Panda_95, ошибся. Нету редактора под рукой
function InitSync takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    loop
         exitwhen i > кол.игроков
              call TriggerRegisterPlayerSyncEvent(t, i , "id строка", false)
              set i = i + 1
    endloop
    call TriggerAddAction(t, function OnSync)
endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.