Сейчас 12:21:45 Четверг, 2 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » if (GetLocalPlayer() == whichPlayer) then
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
Блокировки:
Мне кажется не будет там ошибок... положение камеры же у всех игроков разное так или иначе.
Впрочем это теория, а проверить на практике не так-то и просто. unsure

Кстати когда-то давно слышал, что локально можно менять всё то, что потом нельзя получить по ходу игры.
Например, нельзя получить текущую прозрачность и окрас юнита => можем установить локально.
Всё это конечно домыслы, нужны тесты.


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
Блокировки:
Quote (IlgardIo)
Не тупи

попробую


 

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
Блокировки:
Quote (XimikS)
какаша23 ?

Нет

Добавлено (06-01-2011, 00:06)
---------------------------------------------
XimikS, а толк что я запущу?Я же 1 запущу, а нужно с людьми


 

XimikSДата: Четверг, 06 Января 2011, 00:15:52 | Сообщение # 21
1 уровень
Группа: Пользователи
Сообщений: 19
Награды: 0
Репутация: 28
Блокировки:
ящитаю протестить это в гарене* не составит труда, там даже (!) попадаются адекватные человеки
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » if (GetLocalPlayer() == whichPlayer) then
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz