Сейчас 00:13:04 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Причина десинхронизации... (помимо GetLocalPlayer())
[Вопрос] Причина десинхронизации...
FatalBladeДата: Среда, 28 Марта 2012, 18:49:45 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
У меня в карте почему то при её запуске по инету, у всех кроме Хоста вылетает. Насколько я понимаю это Десинхронизация. Я тщательно проверил свой код, и убедился что нету ничего что создаётся локально через GetLocalPlayer(). Но что ещё может вызывать десинк? Какие действия. Возможно ли это изза того что в РО есть юнит у которого есть около 70 абилок, который создаётся и сразу удаляется (это для прелода) ? Или же это изза функции call ShowUnit(...)? Или причина совсем другая?

 

Ty3uKДата: Среда, 28 Марта 2012, 18:53:07 | Сообщение # 2
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Проверь свои догадки. Локальный показ юнита работает ок, это проверенно (ну по крайней мере у меня)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Среда, 28 Марта 2012, 18:55:39 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FatalBlade)
call ShowUnit(...)
Локально? Насколько я знаю, локально скрывать можно только юнитов, имеющих "Москиты".
Quote (Ty3uK)
Ну их я и скрывал :)
Когда я писал, я не видел твоего поста.




Сообщение отредактировал SirNikolas - Среда, 28 Марта 2012, 18:58:02
 

Ty3uKДата: Среда, 28 Марта 2012, 18:56:48 | Сообщение # 4
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ну их я и скрывал :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Среда, 28 Марта 2012, 19:37:46 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (FatalBlade)
Возможно ли это изза того что в РО есть юнит у которого есть около 70 абилок, который создаётся и сразу удаляется (это для прелода) ?


 

Ty3uKДата: Среда, 28 Марта 2012, 19:44:31 | Сообщение # 6
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ты сразу 70 абилок добавляешь? Это страшно. Проще написать функцию, которая на каждый спелл будет создавать дамми, кастовать и удалять его

Добавлено (28 Март 2012, 19:44:31)
---------------------------------------------
Десинх вряд ли из-за этого. Скрываешь обычных юнитов или москитов?


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Среда, 28 Марта 2012, 20:02:50 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Ty3uK)
Скрываешь обычных юнитов или москитов?

Обычных юнитов, а точнее здания. Продавцов. У меня в одном и том же месте стоит продавец для каждого игрока. Игрок видит только своего продавца. Другие для него скрыты. Но это ведь не должно приводить к десинку. Ведь Тексттаги, Таймер-Диалоги, когда скрываются подобным образом, не приводят к десинку.

Quote (Ty3uK)
Ты сразу 70 абилок добавляешь?

Ты не понял. У меня УЖЕ ЕСТЬ юнит с этими 70 абилками. Эти абилки у него добавлено ещё в РО. В начале игры этот юнит всего лишь создаётся и удаляется, тем самым "прелодя" все его 70 абилок. Может ли юнит с 70 абилками с РО, десинхронить карту?

Добавлено (28 Март 2012, 20:02:50)
---------------------------------------------
А ещё вот это может делать десинк?

Code
        if GetLocalPlayer() == Player(i) then
             call ShowUnit( udg_Socketer[ i + 1 ], true )
             call ShowUnit( udg_Socketer[ i + 11 ], true )
             call ShowUnit( udg_Armor[ i + 1 ], true )
             call ShowUnit( udg_Armor[ i + 11 ], true )
             call ShowUnit( udg_Weapon[ i + 1 ], true )
             call ShowUnit( udg_Weapon[ i + 11 ], true )
             call ShowUnit( udg_Monument[ i + 1 ], true )
             call ShowUnit( udg_Tavern[ i + 1 ], true )
             call ClearSelection()
             call SelectUnit( udg_Tavern[ i + 1 ], true )
         endif
         set i = i + 1


 

ImpregnableДата: Среда, 28 Марта 2012, 20:08:44 | Сообщение # 8
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
У меня есть незавершенный тест по десинху. И вот что по ShowUnit -
Нельзя: выделять скрываемого(если уже выделен, тогда можно). Давать приказы на скрываемого юнита, давать скрываемому приказы типа цель, где цель не свой юнит. Убивать декорации. (убивать или триггерно наносить урон скрываемому можно)

Функции подобные GroupEnumUnitsInRange добавлять скрываемого в группу не будут (у кого скрыт) и другие функции на видимость юнита будут выполняться по разному или возвращать разные результаты.

Также десинх от обзора этого юнита. Например: есть катапульта, у одного игрока она видит врага, а у другого нет. Она дает приказ на атаку и тут десинх.

Поищи такое у себя или покажи сам код.


Если долго мучиться, то может,
все равно нихуя не получится.
 

FatalBladeДата: Среда, 28 Марта 2012, 20:17:16 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Impregnable)
Нельзя: выделять скрываемого

Если для игрока 1 юнит скрыт, а для игрока 2 юнит показан, то игрок 2 может выделять его. Тут будет десинк?

Quote (Impregnable)
давать скрываемому приказы типа цель, где цель не свой юнит

Такого быть у меня не может, так как скрытые юниты - магазины, НПЦ. У них приказы не требуют цели. Другое дело - способность "выбрать героя", как у любого магазина. Возможно в этом вся проблема?

Quote (Impregnable)
Поищи такое у себя или покажи сам код.

Я выявил триггер в котором существует причина для десинка. Вот код:





Сообщение отредактировал FatalBlade - Среда, 28 Марта 2012, 20:29:31
 

ImpregnableДата: Среда, 28 Марта 2012, 20:34:32 | Сообщение # 10
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Quote
Если для игрока 1 юнит скрыт, а для игрока 2 юнит показан, то игрок 2 может выделять его. Тут будет десинк?
Да


Если долго мучиться, то может,
все равно нихуя не получится.


Сообщение отредактировал Impregnable - Среда, 28 Марта 2012, 20:35:19
 

FatalBladeДата: Среда, 28 Марта 2012, 20:37:47 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Impregnable)
Да

Но тогда какой смысл в скрывание/показывание юнитов?
Тем более что многие именно так и делают мультпродавцов.
Создаётся в одном и том же месте продавец для каждого игрока. Все эти продавцы скрываются с помощью call ShowUnit( u, false )
Затем через цикл каждому игроку через GetLocalPlayer() открывается только его продавец. Разве такая система должна делать десинк? Почему же все её так рекомендуют?




Сообщение отредактировал FatalBlade - Среда, 28 Марта 2012, 20:46:41
 

ImpregnableДата: Среда, 28 Марта 2012, 20:50:50 | Сообщение # 12
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Code
     set i = 0  
      loop  
          exitwhen i > 9  
          set udg_AbilityCounter[i] = 0  
          set pid = GetHandleId(Player(i))
          call SaveBoolean(udg_Hash, pid, 11, false)  
          call SaveBoolean(udg_Hash, pid, 22, false)  
          call SaveBoolean(udg_Hash, pid, 35, false)  
          call SaveBoolean(udg_Hash, pid, 50, false)  
          call SaveBoolean(udg_Hash, pid, 66, false)  
          call SaveBoolean(udg_Hash, pid, 85, false)  
          call SaveBoolean(udg_Hash, pid, 113, false)  
          call SaveBoolean(udg_Hash, pid, 507, false)  
          call SaveBoolean(udg_Hash, pid, 508, false)  
          call SaveBoolean(udg_Hash, pid, 509, false)  
          call SaveBoolean(udg_Hash, pid, 2929, false)  
          call SaveBoolean(udg_Hash, pid, 366, false)  
          call SaveReal(udg_Hash, pid, 932, 1.0)  
          set udg_Hell[ i + 1 ] = 1.0  
          set udg_Lan[ i + 1 ] = 0  

          if GetLocalPlayer() == Player(i) then  
              call ShowUnit( udg_Socketer[ i + 1 ], true )  
              call ShowUnit( udg_Socketer[ i + 11 ], true )  
              call ShowUnit( udg_Armor[ i + 1 ], true )  
              call ShowUnit( udg_Armor[ i + 11 ], true )  
              call ShowUnit( udg_Weapon[ i + 1 ], true )  
              call ShowUnit( udg_Weapon[ i + 11 ], true )  
              call ShowUnit( udg_Monument[ i + 1 ], true )  
              call ShowUnit( udg_Tavern[ i + 1 ], true )  
              call ClearSelection()  
              call SelectUnit( udg_Tavern[ i + 1 ], true )  
          endif  
          set i = i + 1  
      endloop


set pid = GetHandleId(Player(i)) - если не ошибаюсь, то GetHandleId(Player(i)) = i
call ShowUnit( udg_Socketer[ i + 1 ], true )
call ShowUnit( udg_Socketer[ i + 11 ], true )
+11 я примерно понимаю, но вот +1...

call SelectUnit( udg_Tavern[ i + 1 ], true ) - вот оно. Если честно очень тяжело понять зачем локально делаешь, но причина десинха в этой строке.

Добавлено (28 Март 2012, 20:47:43)
---------------------------------------------

Quote (FatalBlade)
Но тогда какой смысл в скрывание/показывание юнитов?
Как зачем. Если сильно захотеть и поизвращаться, то можно сделать интересную способность или юнит дух, который видим 1 игроку, да мало ли чего еще можно.

Добавлено (28 Март 2012, 20:50:50)
---------------------------------------------

Quote (FatalBlade)
Разве такая система должна делать десинк?
Я мог тестировать только на v1.24b, поэтому может быть, что на версиях >1.24b уже немного иначе.


Если долго мучиться, то может,
все равно нихуя не получится.
 

FatalBladeДата: Среда, 28 Марта 2012, 20:52:07 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Impregnable)
set pid = GetHandleId(Player(i)) - если не ошибаюсь, то GetHandleId(Player(i)) = i

Ты путаешь GetHandleId с GetPlayerId :)

Quote (Impregnable)

+11 я примерно понимаю, но вот +1...

Игроков 10. Базы 2. Значит продавцов 20. Для каждого игрока есть продавец на его базе, и такой же на чужой базе.

Quote (Impregnable)
call SelectUnit( udg_Tavern[ i + 1 ], true ) - вот оно. Если честно очень тяжело понять зачем локально делаешь, но причина десинха в этой строке.

Это изза того что выбирается скрытый юнит?
А если я уберу эту строку, и игрокам придётся вручную выбирать Таверну, то как только какой то игрок кликнет по таверне, тоже всех выкинет?




Сообщение отредактировал FatalBlade - Среда, 28 Марта 2012, 20:53:25
 

ImpregnableДата: Среда, 28 Марта 2012, 21:00:43 | Сообщение # 14
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Quote (FatalBlade)
Ты путаешь GetHandleId с GetPlayerId :)
Я и не путаю.
Quote (FatalBlade)
Это изза того что выбирается скрытый юнит?
А если я уберу эту строку, и игрокам придётся вручную выбирать Таверну, то как только какой то игрок кликнет по таверне, тоже всех выкинет?
По идее да. Лучше убери эту строчку и проверь, а то я и сам уже начал сомневаться.


Если долго мучиться, то может,
все равно нихуя не получится.
 

FatalBladeДата: Среда, 28 Марта 2012, 21:13:33 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Impregnable)
По идее да.

Если да, то то же самое со всеми НПЦ...


 

SirNikolasДата: Четверг, 29 Марта 2012, 07:02:01 | Сообщение # 16
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Impregnable)
GetHandleId(Player(i)) = i
Нет.

Для мультипродавцов можно вместо скрытия поставить установку размера на .0 или прозрачности на 255.


 

ImpregnableДата: Четверг, 29 Марта 2012, 10:00:21 | Сообщение # 17
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Quote (SirNikolas)
Для мультипродавцов можно вместо скрытия поставить установку размера на .0 или прозрачности на 255.
Это не сделает их некликабельными, а вот SetUnitFlyHeight должно помочь (тень можно сделать даммиком).


Если долго мучиться, то может,
все равно нихуя не получится.
 

FatalBladeДата: Четверг, 29 Марта 2012, 14:32:50 | Сообщение # 18
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Я сделал через SetUnitVertexColor + Deselect + SelectUnit ( LoadUnitHandle(...), true ). То есть если игрок выбирает не своего продавца, то триггерно ему в выбор даётся продавец который пренадлежит ему.

Quote (Impregnable)
Это не сделает их некликабельными, а вот SetUnitFlyHeight должно помочь (тень можно сделать даммиком).

Это зачем? Разве можно локально выставить юниту высоту? И даже если можно, то зачем?


 

ImpregnableДата: Четверг, 29 Марта 2012, 14:36:54 | Сообщение # 19
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Quote
Это зачем? Разве можно локально выставить юниту высоту? И даже если можно, то зачем?
Еще как можно.
Затем чтобы не писать таких корявых систем:
Quote
Я сделал через SetUnitVertexColor + Deselect + SelectUnit ( LoadUnitHandle(...), true ). То есть если игрок выбирает не своего продавца, то триггерно ему в выбор даётся продавец который пренадлежит ему.
Причем не очень приятно будет когда я вижу продавца, могу навести курсор, а выбрать не получается.


Если долго мучиться, то может,
все равно нихуя не получится.
 

SirNikolasДата: Четверг, 29 Марта 2012, 14:38:37 | Сообщение # 20
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (FatalBlade)
И даже если можно, то зачем?
Поднять на высоту в десять тысяч метров, чтобы игрок не допрыгнул до магазина своим курсором.


 

FatalBladeДата: Четверг, 29 Марта 2012, 14:47:19 | Сообщение # 21
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Так так так....
Я выставляю высоту всем продавцам на астрономическое число, а затем локально каждому продавцу выставляю высоту 0?
Кстати а вместо 99999999 или тому подобного, я ведь могу выставить например -200. То есть уйдёт под землю. Я ведь тоже не смогу его кликать?

Добавлено (29 Март 2012, 14:47:19)
---------------------------------------------

Quote (Impregnable)
Причем не очень приятно будет когда я вижу продавца, могу навести курсор, а выбрать не получается.

Почему не получается? Получается. Просто выберется не тот юнит на которого ты нажал, а тот который пренадлежит тебе.


 

SirNikolasДата: Четверг, 29 Марта 2012, 14:47:20 | Сообщение # 22
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
По-моему, под землю его нельзя загнать.

 

FatalBladeДата: Четверг, 29 Марта 2012, 14:51:55 | Сообщение # 23
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
А им всем надо выдавать и удалять способность Crow Form, как даммикам?

 

SirNikolasДата: Четверг, 29 Марта 2012, 14:57:34 | Сообщение # 24
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Похоже, что да.

 

ImpregnableДата: Четверг, 29 Марта 2012, 15:04:07 | Сообщение # 25
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Сразу делай летающими...

Если долго мучиться, то может,
все равно нихуя не получится.
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Причина десинхронизации... (помимо GetLocalPlayer())
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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