Взял из классической, проверенной статьи функцию синхронизации
code
library TestLib initializer Iinit_TestLib
globals
gamecache cache = InitGameCache("cache")
endglobals
function SyncReal takes player p, real val returns real
if (GetLocalPlayer() == p) then
call StoreReal(cache, "", "", val)
endif
call TriggerSyncStart()
if (GetLocalPlayer() == p) then
call SyncStoredReal(cache, "", "")
endif
call TriggerSleepAction(2.)
call TriggerSyncReady()
return GetStoredReal(cache, "", "")
endfunction
function Test1 takes nothing returns nothing
local real loc_r
local real loc_r1
if(Player(0) == GetLocalPlayer())then
set loc_r = 5
endif
if(Player(1) == GetLocalPlayer())then
set loc_r = 10
endif
call BJDebugMsg("loc_r: " + R2S(loc_r))
set loc_r1 = SyncReal(Player(0),loc_r)
call BJDebugMsg("loc_r1: " + R2S(loc_r1))
endfunction
function Iinit_TestLib takes nothing returns nothing
call TimerStart(CreateTimer(), 1, false, function Test1)
endfunction
endlibrary
и не_работает, пишу в 1.31. Знаю, что какие-то есть новые нативные функции для этого, но не нашел новых решений проблемы.
Принятый ответ
Doc:
в другую систему счисления
Так понимаю, что на jass так должно быть лучше, хотя я большой разницы не заметил =(
library LibSENDSTR
code
library LibSENDSTR initializer Init_LibSENDSTR
globals
private string BOOK = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
private integer BOOK_cout
endglobals
private function Char2Int takes string char returns integer
local integer i = 0
loop
exitwhen(char == SubString(BOOK,i,i+1))
set i = i + 1
endloop
return i
endfunction
function SEND_STR2Unsigint takes string SEND_STR returns integer
local integer INT = 0
local integer g = 1
local integer Length = StringLength(SEND_STR)
//
loop
set INT = INT + Char2Int(SubString(SEND_STR,Length-1,Length))*g
set g = g*BOOK_cout
set Length = Length - 1
exitwhen(Length == 0)
endloop
return INT
endfunction
function Unsigint2SEND_STR takes integer INT returns string
local integer quot
local integer residue
local string SEND_STR = ""
loop
set quot = INT/BOOK_cout
set residue = INT - quot*BOOK_cout
set SEND_STR = SubString(BOOK,residue,residue+1) + SEND_STR
exitwhen(quot == 0)
set INT = quot
endloop
return SEND_STR
endfunction
function Int2SEND_STR takes integer INT returns string
if(INT < 0)then
return "-" + Unsigint2SEND_STR(-INT)
else
return Unsigint2SEND_STR(INT)
endif
endfunction
function SEND_STR2Int takes string SEND_STR returns integer
if(SubString(SEND_STR,0,1) == "-")then
return -SEND_STR2Unsigint(SubString(SEND_STR,1,StringLength(SEND_STR)))
else
return SEND_STR2Unsigint(SEND_STR)
endif
endfunction
private function Test takes nothing returns nothing
local integer INT = -3675967
local string SEND_STR
local integer OUTINT
//
//
call BJDebugMsg("ORI: " + I2S(INT))
//
set SEND_STR = Int2SEND_STR(INT)
call BJDebugMsg("SEND: " + SEND_STR)
//
set OUTINT = SEND_STR2Int(SEND_STR)
call BJDebugMsg("GET: " + I2S(OUTINT))
endfunction
private function Init_LibSENDSTR takes nothing returns nothing
set BOOK_cout = StringLength(BOOK)
//call TimerStart(CreateTimer(), 1, false, function Test)
endfunction
endlibrary
TestLib
code
library TestLib initializer Iinit_TestLib uses LibSENDSTR
function SyncActionTrg takes nothing returns nothing
local string SyncData = BlzGetTriggerSyncData()
local real SyncReal = SEND_STR2Int(SyncData)*0.0001
//
call BJDebugMsg("GetSTR: " + SyncData)
call BJDebugMsg("GetReal: " + R2S(SyncReal))
endfunction
function Test1 takes nothing returns nothing
local real loc_r
local real loc_r1
if(Player(0) == GetLocalPlayer())then
set loc_r = 5.873
endif
if(Player(1) == GetLocalPlayer())then
set loc_r = 10.56
endif
call BJDebugMsg("Send: " + R2S(loc_r))
if(Player(0) == GetLocalPlayer())then
call BlzSendSyncData("mission",Int2SEND_STR(R2I(loc_r*10000)))
endif
endfunction
function Iinit_TestLib takes nothing returns nothing
local trigger loc_trg = CreateTrigger()
call BlzTriggerRegisterPlayerSyncEvent(loc_trg,Player(0),"mission",false)
call BlzTriggerRegisterPlayerSyncEvent(loc_trg,Player(1),"mission",false)
call TriggerAddAction(loc_trg,function SyncActionTrg)
//
call TimerStart(CreateTimer(), 1, false, function Test1)
endfunction
endlibrary
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Берги
я ещё не проверял, но в 131 есть лучше
время синхронизации снижено с 2 секунд, до... 0,1?
Отредактирован Koladik
Отредактирован Doc
Doc: