Можно ли вызвать функцию DialogSetMessage для локального игрока, не побоявшись при этом рассинхрона?
Просто если я сделаю так:
function DialogSetMessageForPlayer takes dialog whichDialog, player whichPlayer, string message, string defaulMessage returns nothing
    local string s = defaulMessage
    if GetLocalPlayer() == whichPlayer then
        set s = message
    endif
    call DialogSetMessage(whichDialog, s)
endfunction
То у других игроков текст в диалоговом окне будет затираться на defaultMessage, а в идеале хотелось бы чтобы для остальных игроков текст не менялся. То есть примерно так:
function DialogSetMessageForPlayer takes dialog whichDialog, player whichPlayer, string message returns nothing
    if GetLocalPlayer() == whichPlayer then
        call DialogSetMessage(whichDialog, message)
    endif
endfunction

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

Вообще по идее диалоговое окно как бы фрейм, и он не должно дэсинхронизироваться от такого
Но всё можно ожидать от патча 1.26, но десинк возможен, если я токмо не ошибаюсь.
if GetLocalPlayer() == whichPlayer then
call DialogSetMessage(whichDialog, message)
endif
Если использовать локальную строку, то лучше создавать массив хранящий в себе строки, который должны показываться у игрока.
if GetLocalPlayer() == whichPlayer then
        set s = message
else
		set s = strData[ GetPlayerId( GetLocalPlayer() ) ] 
endif
А если оставить тот метод со строкой, то есть шанс, что у другого пропадёт просто надпись-сообщение:
Если этот использовать.
if GetLocalPlayer() == whichPlayer then
        set s = message
    endif
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
26
5 лет назад
Отредактирован 8gabriel8
0
По идее рассинхрон на стринги не действует.
Ерунду сообщил. Тут нужен человек, который собаку съел на использовании локального игрока, и может указать опущенные в статье нюансы десинхронизации.
1
29
5 лет назад
1
Вообще по идее диалоговое окно как бы фрейм, и он не должно дэсинхронизироваться от такого
Но всё можно ожидать от патча 1.26, но десинк возможен, если я токмо не ошибаюсь.
if GetLocalPlayer() == whichPlayer then
call DialogSetMessage(whichDialog, message)
endif
Если использовать локальную строку, то лучше создавать массив хранящий в себе строки, который должны показываться у игрока.
if GetLocalPlayer() == whichPlayer then
        set s = message
else
		set s = strData[ GetPlayerId( GetLocalPlayer() ) ] 
endif
А если оставить тот метод со строкой, то есть шанс, что у другого пропадёт просто надпись-сообщение:
Если этот использовать.
if GetLocalPlayer() == whichPlayer then
        set s = message
    endif
Принятый ответ
1
28
5 лет назад
1
То есть примерно так:
Так и делай.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.