if (GetLocalPlayer() == whichPlayer) then
|
|
Dreii | Дата: Среда, 05 Января 2011, 17:23:55 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| if (GetLocalPlayer() == whichPlayer) then что с этим делать чтобы небыло десинков?
|
|
|
|
Ajaccio | Дата: Среда, 05 Января 2011, 18:37:03 | Сообщение # 2 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Главное, чем нужно руководствоваться - никогда и ничего локально не создавать/уничтожать. Также нельзя менять любые вещи, которые могут повлиять на ход игры, например перенести юнита, изменить скорость. В общем стараемся затрагивать только визуальные функции. Вот, если нужно создать плавающий текст для одного игрока - создаём для всех и скрываем, а потом локально показываем нужному.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 18:38:48 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Quote (Ajaccio) создаём для всех и скрываем, а потом локально показываем нужному. А если например камера?ДВигаем для всех а потом как?
|
|
|
|
Ajaccio | Дата: Среда, 05 Января 2011, 19:01:47 | Сообщение # 4 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Перемещение камеры, как и выделение юнитов, не создает и не удаляет объекты. Также это никак не может напрямую влиять на игру. Поэтому (вероятно же) можно камеру двигать локально.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 19:03:21 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Ajaccio, ну при использовании вроде бы игроки вылетают все? нет?
|
|
|
|
Ajaccio | Дата: Среда, 05 Января 2011, 19:47:15 | Сообщение # 6 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Мне кажется не будет там ошибок... положение камеры же у всех игроков разное так или иначе. Впрочем это теория, а проверить на практике не так-то и просто. Кстати когда-то давно слышал, что локально можно менять всё то, что потом нельзя получить по ходу игры. Например, нельзя получить текущую прозрачность и окрас юнита => можем установить локально. Всё это конечно домыслы, нужны тесты.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 20:18:33 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| call DisplayTimedTextToPlayer(bj_FORCE_ALL_PLAYERS, 0, 0, 5.00, "ЛяЛяЛа") Такое вот будет работаь нормально?
|
|
|
|
Ajaccio | Дата: Среда, 05 Января 2011, 20:28:43 | Сообщение # 8 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Хм, а зачем это применять локально? Вместо bj_FORCE_ALL_PLAYERS пишем Player(<Номер игрока>) и получаем нужное сообщение у нужного игрока.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 20:32:01 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Ajaccio, нет нужно сообщение всем игрокам
|
|
|
|
FkoFF | Дата: Среда, 05 Января 2011, 21:24:24 | Сообщение # 10 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Dreii, ты прикидываешься? Quote (Dreii) call DisplayTimedTextToPlayer(bj_FORCE_ALL_PLAYERS, 0, 0, 5.00, "ЛяЛяЛа") она итак отправляет всем ) Что кстати до локалплеера - двигать можно эффекты, юнитов нельзя - будет десинк. По этому если тебе нужно отобразить что либо - где либо - создаешь эффект и локально его двигаешь.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 21:27:24 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| FkoFF, мне больше интересует с камерой и выводом текста
|
|
|
|
IlgardIo | Дата: Среда, 05 Января 2011, 21:31:14 | Сообщение # 12 |
3 уровень
Группа: Пользователи
Сообщений: 57
Награды: 0
Репутация: 11
Блокировки:
| Dreii, К Камеру и текст можно двигать\показывать для отдельных играков. Не тупи.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 21:37:34 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| попробую
|
|
|
|
Faion | Дата: Среда, 05 Января 2011, 21:44:48 | Сообщение # 14 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Пользуясь случаем if (GetLocalPlayer() == whichPlayer) then ClearTextMessages() endif Вопрос: 1) Будет ли десинк(поидее не должно) 2) Очистит ли только у нужного плеера?(поидее ж да) 3) И каким макаром то сама функция понимает кому над почистить дисплей, это для меня загадка, ибо функция то ничего не берет... Или там фича с потоками, т.е. этой конструкцией мы перелиствыем потоки игроков, и запускаем функцию для потока игрока, так чтоли?
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
Ajaccio | Дата: Среда, 05 Января 2011, 21:56:10 | Сообщение # 15 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Так, в общем я порылся в коде доты (где десинков не замечено). В результате нашел такие участки кода: Code if E50==0 and GetLocalPlayer()==p then call ClearSelection() call SelectUnit(u,true) call PanCameraToTimed(x,y,0) endif
if GetLocalPlayer()==Player(i) then call SetCameraPosition(IUO+1,O0O+1) endif Это подтверждает - мы можем прикреплять и устанавливать камеру локально. По вопросу Faion нашел там-же такие строчки: Code if GetLocalPlayer()==p then call ClearTextMessages() endif Опять же подтверждает - очищать чат локально можно. Кто хочет увидеть всё сам - открываем и используем блокното-поиск по словам GetLocalPlayer(). Насчет теории - не знаю, врать не буду, хотя ИМХО поток 1, в конце-концов компьютер пользователя выполняет код. А если условие не прошло, то и код не пройдет.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 21:58:20 | Сообщение # 16 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| if (GetLocalPlayer()==GetOwningPlayer(u)) then call PanCameraToTimed(GetUnitX(u),GetUnitY(u),0.60) а так можно?
|
|
|
|
Ajaccio | Дата: Среда, 05 Января 2011, 22:14:26 | Сообщение # 17 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Да, это детали.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Dreii | Дата: Среда, 05 Января 2011, 22:36:19 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Вот еще вопрос Code if (GetLocalPlayer() == whichPlayer) then // Use only local code (no net traffic) within this block to avoid desyncs. call ClearSelection() call SelectUnit(whichUnit, true) Энто можно юзать?Если нет то как ето юзать норм?
Сообщение отредактировал Dreii - Среда, 05 Января 2011, 22:36:34 |
|
|
|
XimikS | Дата: Четверг, 06 Января 2011, 00:00:04 | Сообщение # 19 |
1 уровень
Группа: Пользователи
Сообщений: 19
Награды: 0
Репутация: 28
Блокировки:
| включи редактор, вставь код, запусти карту. //ты случайно не какаша23 ? Добавлено (06-01-2011, 00:00) --------------------------------------------- как сказали выше локально юзайте только визуальные изменения, думаю объяснять что такое не требуется
|
|
|
|
Dreii | Дата: Четверг, 06 Января 2011, 00:06:59 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| НетДобавлено (06-01-2011, 00:06) --------------------------------------------- XimikS, а толк что я запущу?Я же 1 запущу, а нужно с людьми
|
|
|
|
XimikS | Дата: Четверг, 06 Января 2011, 00:15:52 | Сообщение # 21 |
1 уровень
Группа: Пользователи
Сообщений: 19
Награды: 0
Репутация: 28
Блокировки:
| ящитаю протестить это в гарене* не составит труда, там даже (!) попадаются адекватные человеки
|
|
|
|