Доброго времени суток! Читал посты по теме, но все равно не выходит разобраться.
С помощью preload меняю текст описания способности красному игроку и закидываю строку в кэш.
if GetLocalPlayer() == p then
        set udg_S1 = BlzGetAbilityExtendedTooltip('Adef', 0)
        call StoreStringBJ( udg_S1, "A", "B", udg_DATA )
endif
Затем синхронизирую кэш.
if GetLocalPlayer() == p  then
        call SyncStoredString( udg_DATA, "A", "B"  )
endif

call TriggerSleepAction( 2.00 )
И выгружаю в глобалку строку из кэша.
set udg_S2 = GetStoredStringBJ("A", "B", udg_DATA)
Ожидал того, что переменная S2 отобразится всем игрокам со значением красного игрока, но все игроки видят только свои локальные значения, т.е. синхронизации не произошло.
Или на 1.33 - call SyncStoredString не работает?

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

это делается через BlzTriggerRegisterPlayerSyncEvent и BlzSendSyncData
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
0
6
2 года назад
Отредактирован Real60Hz
0
SyncStoredString вроде как работает, но я сам ни разу не смог его заставить работать на 1.26а. Говорили мне что он даже самые короткие строки очень долго синкает. С этим вопросом лучше к одному пользователю quq_CCCP.
2
14
2 года назад
2
У функции SyncStoredString реализована отправка команды синхронизации, но не её прием.
Более того, все команды, что будут идти сразу за ней в одном буфере действий игрока проигнорируются.
Вызов следующего кода приведет к тому, что юнит визуально будет выделен, но на команды реагировать не будет.
call SyncStoredString(Cache, Key1, Key2)
call SelectUnit(u, True)
1
26
2 года назад
Отредактирован Hate
1
это делается через BlzTriggerRegisterPlayerSyncEvent и BlzSendSyncData
Принятый ответ
0
5
2 года назад
0
IceFog, не очень понял. Т.е. вывести Игроку 1 локальные данные Игрока 2 таким способом не получится?

Hate, только с Lua?
0
8
2 года назад
0
Artem48, при чем тут Lua? API функций одинаковый же
0
27
2 года назад
Отредактирован MpW
0
Artem48, как пример синха посмотри. Не обязательно в луа

основные нативки синха
---@param whichTrigger trigger
---@param whichPlayer player
---@param prefix string
---@param fromServer boolean
---@return event
function BlzTriggerRegisterPlayerSyncEvent(whichTrigger, whichPlayer, prefix, fromServer) end	-- (native)

---@param prefix string
---@param data string
---@return boolean
function BlzSendSyncData(prefix, data) end	-- (native)

---@return string
function BlzGetTriggerSyncPrefix() end	-- (native)

---@return string
function BlzGetTriggerSyncData() end	-- (native)
Есть триггер с событием синха BlzTriggerRegisterPlayerSyncEvent
local syncTrigger = CreateTrigger()
    for int = 0, bj_MAX_PLAYERS - 1 do
        BlzTriggerRegisterPlayerSyncEvent(syncTrigger, Player(int), "CreateUnitByButton", false)
    end
    TriggerAddAction(syncTrigger, function()
        local player = GetTriggerPlayer()
        CreateUnit(player, BlzGetTriggerSyncData() , GetPlayerStartLocationX(player), GetPlayerStartLocationY(player), 0)        
    end)
И есть действие вызова синха
if GetLocalPlayer() == GetTriggerPlayer() then
            BlzSendSyncData("CreateUnitByButton", selectedUnitType)
end
Есть еще prefix - название запуска, и data - то, что хочешь отправить или синхронизировать. BlzGetTriggerSyncPrefix() и BlzGetTriggerSyncData() работают внутри триггера с событием синха, отображая какой префикс и дата
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.