XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Как выбрать юнита для игрока чтобы это не вызвало десинх?
Есть функция "SelectUnitForPlayerSingle", но в жнгп написанно что она вызывает десинхронизацию, есть еще функция "SelectUnit", но там нельзя указать для какого игрока будет выбиратся юнит. Так вот как мне выбрать юнита для конкретного игрока, чтобы ето не вызвало десинка?Как в доте.
Старый 17.06.2009, 17:06
J
expert
offline
Опыт: 48,447
Активность:
GetLocalPlayer + SelectUnit + SyncSelections
это предположение, я вроде не наблюдал чтобы первые 2 вызывали дисинк, хотя неуверен
Старый 17.06.2009, 17:07
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Код:
function Trig_Hero_Is_Sold_Actions takes nothing returns nothing
    local unit u = GetSoldUnit()
    local unit u2 = GetTriggerUnit()
    local integer i = 0
    if  GetOwningPlayer(u) == Player(1) or GetOwningPlayer(u) == Player(2) or GetOwningPlayer(u) == Player(3) or GetOwningPlayer(u) == Player(4)or GetOwningPlayer(u) == Player(5) then
        call SetUnitPosition( u, -6800, -6000)
    endif
    if  GetOwningPlayer(u) == Player(7) or GetOwningPlayer(u) == Player(8) or GetOwningPlayer(u) == Player(9) or GetOwningPlayer(u) == Player(10)or GetOwningPlayer(u) == Player(11) then
        call SetUnitPosition( u, 6800, 6000)
    endif
     // =========>>>><<<<<========
    if GetLocalPlayer() == GetOwningPlayer(u) then
        call SelectUnit (u,true)
        call SyncSelections()
    endif    
    call RemoveUnitFromStock (u2, GetUnitTypeId(u)) // Ybiraet takogo unita iz vubora
    loop
        exitwhen i > 1000
        call SetPlayerTechMaxAllowed(GetOwningPlayer(u), udg_Massiv_allHeroes[(i+1)], 0) //Ybiraet vsex unitov dl9 igroka kotoruy vubral hero
        set i = i + 1
    endloop
    set u = null
    set u2 = null
endfunction


Как думаеш так будет работать? Просто щя нет возможности проверить в мультиплеере.
Старый 17.06.2009, 17:19
SRes
1110101000
offline
Опыт: 9,997
Активность:
Код:
if GetLocalPlayer() == GetOwningPlayer(u) then
        call ClearSelection()
        call SelectUnit (u,true)
    endif

Поидее должно работать.
Старый 17.06.2009, 17:38
Elf_Stratigo

offline
Опыт: 4,699
Активность:
SyncSelections
ого незнал про такую функцию - получается в какойнить рпг если незаметно для каждого игрока приказать выбрать своего героя, и потом эту штуку - то можно узнать хоста?)
Старый 17.06.2009, 18:16
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
А я незнаю что она делает Elf_Stratigo
Старый 17.06.2009, 18:42
ScorpioT1000
Работаем
offline
Опыт: отключен
хоста и так по пингу узнать можно (у кого самый маленький тот и хост)
Старый 17.06.2009, 19:23
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Цитата:
хоста и так по пингу узнать можно (у кого самый маленький тот и хост)

вранье я играл с хостами у которых пинг в 250 раз больше чем у меня ))
В JassHelper написано что
Код:
if GetLocalPlayer() == GetOwningPlayer(u) then
        call ClearSelection()
        call SelectUnit (u,true)
    endif

может вызвать десинк
Старый 17.06.2009, 19:30
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Ну тогда как сделать чтобы небыло десинка?
Старый 17.06.2009, 19:33
Elf_Stratigo

offline
Опыт: 4,699
Активность:
у хоста может быть больше пинг, к томуже в том алгоритме используется кеш - а тут можно обойтись...
if GetLocalPlayer() == GetOwningPlayer(u) then
call ClearSelection()
call SelectUnit (u,true)
endif
проверял в мультиплеере - сё ок, юзай
типо заключаешь свой код в следующей структуре:
if GetLocalPlayer() == <Любая функция, возвращающая 1 игрока> then
локальный код, т.е. код, который должен выполниться для игрока из условия
endif
Старый 17.06.2009, 19:45
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
Ninbous
Проще оперировать с группами игроков
Старый 17.06.2009, 20:10
Ninbous
Jass progress >>>>>35/100
offline
Опыт: 5,674
Активность:
Спасиб Elf_Stratigo
Пока не прикрывайте тему я затестю через некоторое время, если че сам напишу что мона закрыть.
Старый 17.06.2009, 20:23
J
expert
offline
Опыт: 48,447
Активность:
функция SelectUnitForPlayerSingle должна работать нормально, не доверяй всему что написано где хз где
Старый 17.06.2009, 21:35
ScorpioT1000
Работаем
offline
Опыт: отключен
пинг меряется от текущего игрока до хоста)
Старый 17.06.2009, 21:59
DKbru

offline
Опыт: 1,407
Активность:
Как я понимаю, возможен десинк при выборе большого числа юнитов, если ты не выбираешь целые группы или не присваиваешь выбранных юнитов разным игрокам, то десинхронизации быть не должно
Старый 17.06.2009, 23:15
agentex

offline
Опыт: 34,834
Активность:
J прав, SelectUnitForPlayerSingle не вызывает десинка. Нуу возможно в кривых руках и вызывает, однако это уже проблема рук а не джасса
Старый 17.06.2009, 23:22
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 04:45.