Раньше не приходилось юзать эту функцию.
Допустим, я делаю так: ставлю спеллбуку хоткей L, выделяю игроку подконтрольного юнита с ним и пишу:
call ForceUIKey("L")
Десинка при сетевой игре же не будет? В самой функции это предусмотрено?
Никакими GetLocalPlayer эти действия вокруг дополнительно не опоясываются.

Если просто написать ForceUIKey(), то тогда L нажмётся у всех игроков. Смотри ForceUIKeyBJ.
Да и чтобы выделить юнита только конкретному игроку, нужно также написать перед SelectUnit() условие с GetLocalPlayer().
if GetLocalPlayer() == owner then
    call ClearSelection()
    call SelectUnit(u, true)
    call ForceUIKey("L")
endif
А десинк можно проверить с другом по сетке или через эмуляцию.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
Если просто написать ForceUIKey(), то тогда L нажмётся у всех игроков. Смотри ForceUIKeyBJ.
Да и чтобы выделить юнита только конкретному игроку, нужно также написать перед SelectUnit() условие с GetLocalPlayer().
if GetLocalPlayer() == owner then
    call ClearSelection()
    call SelectUnit(u, true)
    call ForceUIKey("L")
endif
А десинк можно проверить с другом по сетке или через эмуляцию.
Принятый ответ
21
PT153, я его выделю только конкретному игроку через call SelectUnitForPlayerSingle
ок, спасибо, нажму через ForceUIKeyBJ
это уж не опасно никак?
короче, ятп, что нет
вот через ForceUIKey без локального игрока - еще могло бы

PS Честно раздражает, и сильно, когда пишут "можно проверить"
Можно проверить все, но зачем тогда вообще другие люди, если все делать самостоятельно
21
Проверить обычно получается быстрее чем дождаться ответа.
28
вот через ForceUIKey без локального игрока - еще могло бы
Почему? Ты же не создаёшь хендл или что-то в этом роде.
через call SelectUnitForPlayerSingle
Дело в том, что чтобы нажать L только у конкретного игрока тоже нужно условие с GetLocalPlayer(), а если использовать эту функцию, то тогда одно и тоже условие вычислится два раза. Зачем? Потому я и написал
if GetLocalPlayer() == owner then
    call ClearSelection()
    call SelectUnit(u, true)
    call ForceUIKey("L")
endif
SelectUnit() ДОБАВЛЯЕТ юнита в выделение игрока, если flag == true, потому написал ещё и ClearSelection(), что очищает выделение у игрока. Но необходимость этой функции зависит от контекста.
Raised:
Проверить обычно быстрее чем дождаться ответа.
Я так на много своих вопросов и ответил.
21
Raised, в этом случае нет
у меня сто лет на том, что когда-то было варкрафтом, не настроен нетплей
так что ни о каких "с другом по сетке" и речи не идет
JNGP с эмуляцией вообще только не так давно в ЛС прислали, спасибо, и вот прям ща устанавливать его и разбираться ни времени, ни желания
и вообще если задается вопрос очевидно что в данном случае проще ответ от других получить
PT153, "одно и тоже условие вычислится два раза" - т. е. тут речь только о производительности? Тогда не сильно важно, это все равно прелоад при загрузке карты всего и вся, если там на долю секунды какую-то он будет дольше - это не критично. Мне важно отсутствие десинка.
Ятп, десинка не будет. Да, даже через ForceUIKey без локального игрока не получается... просто подумалось, что у других игроков могли бы быть выделены юниты с абилами с хоткеем L (хотя у меня такие если и есть, то очень мало), но все равно десинка-то не получается, выделения-то эти не локальные.
Всё, спасибо.
21
////////
У меня вот что крч будет:
//ПРЕЛОАД ВЫДЕЛЕНИЯ ОБЪЕКТОВ И ОТКРЫТИЯ СПЕЛЛБУКОВ

    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 12
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        call SetUnitOwner( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()), true )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call ForceUIKeyBJ(ConvertedPlayer(GetForLoopIndexA()),"L")
        call SetUnitOwner( gg_unit_ogru_0009, Player(PLAYER_NEUTRAL_AGGRESSIVE), true )
        
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )

        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )

        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )
        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )

        call SelectUnitForPlayerSingle( gg_unit_ogru_0009, ConvertedPlayer(GetForLoopIndexA()) )

    call ClearSelectionForPlayer( ConvertedPlayer(GetForLoopIndexA()) )
        
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop

//ПРЕЛОАД ВЫДЕЛЕНИЯ ОБЪЕКТОВ И ОТКРЫТИЯ СПЕЛЛБУКОВ - ЗАКРЫТО.
gg_unit_ogru_0009 - это левый бугай, который гонялся на отдельной карте. Вместо него я ща посмотрю глобалки изначально расположенных 20 объектов и вставлю их (первый вот тот, где еще дополнительно меняется владелец и открывается спеллбук, остальные 19 просто нужно последовательно выделить по отдельности).
28
local Player p
local integer i = 0
loop
    exitwhen i > 11
    set p = Player(i)
    call SetUnitOwner( gg_unit_ogru_0009, p, true )
    if GetLocalPlayer() == p then
        call SelectUnit( gg_unit_ogru_0009, true)
        call ForceUIKey("L")
        // Пиши сколько нужно SelectUnit(whichUnit, true), но не забудь прописать ClearSelection() после выбора 12 юнитов.
    endif
    // Передача юнита нейтралу будет совершена после цикла, всё равно ты его будешь давать разным игрокам.
    set i = i + 1
endloop
call ClearSelection()
call SetUnitOwner( gg_unit_ogru_0009, Player(PLAYER_NEUTRAL_AGGRESSIVE), true )
set p = null //Необязательно.
21
PT153, спасибо, видно, что оптимальнее
но сложнее для копипаста, т. к. требуются локалки, а функция там прелоада очень большая и мне неудобно будет вставлять вниз и вверх
т. к. в моем коде ошибок и десинков нет, а это не для какого-нибудь часто применяемого заклинания, а для одноразового прелоада, все же использую его нврн
но все равно спасибо
просто это тот случай, когда мне удобнее написать 2+2+2+2, чем 2*4
потому что 2+2+2+2 - понятнее.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.