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

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

Ответ
 
Evil_Illidan

offline
Опыт: 126
Активность:
Help me
Люди хорошо разбирающиеся в jass......у меня проблема с картой.....дело в том что когда играешь в мою карту по сети почему то выкидывает игроков....где после старта карты минут через пять начинает выкидывать. Всех кроме хоста. Я несколько раз просматривал код карты но ничего с этим связанное с картой не нашел. Если кто то может помочь или подсказать посоветуйте что делать в чем может быть проблема. Заранее благодарю.
Старый 03.12.2011, 17:30
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Поиском по коду со словом GetLocalPlayer() пройдись
Старый 03.12.2011, 17:35
AiDSeller
За здоровый образ жизни
offline
Опыт: 6,094
Активность:
Скорее всего, происходит десинхронизация (Вроде так, в Jass'e не разбираюсь). Десинхронизация может происходить, например, когда создаёшь юнита через GetLocalPlayer (Тогда юнит создаётся только у одного игрока, когда как у других - нет). Вообще - поиск в помощь.
Старый 03.12.2011, 17:35
Hares
полупротосс
offline
Опыт: 6,966
Активность:
Если найдёшь GetLocalPlayer, то учти: при создании любых хендлов без их моментального удаления появляется десинхронизация. Это связано с тем, что все хендлы являются глобальным массивом, и переменные, отвечающие за них, являются integer-объектами (откуда и вылезает return bug). Это моё сугубо личное мнение, но оно имеет обоснованность и всё объясняет. Так при создании любого хендла (даже локации =) ) мы увеличиваем размерность и последний индекс массива. Т.о., если локально (в данном случае с использованием ф-ии GetLocalPlayer) создать хендл, то при передаче данных произойдёт сбой.
Пример (достаточно глупый, но наглядный):
  1. используем улсовие GetLocalPlayer() == Player(0)
  2. находим позицию юнита с помощью ф-ии GetUnitPositionLoc()
  3. Делаем синхронизацию и передаём туда координаты этой локации через x и y.
  4. Создаём в этих координатах юнита.
  5. Игрок 1 даёт приказ бежать в (12.34, 987.65)
Итого что мы получаем:
  1. локация на компе игрока 1 имеет индекс 31415926
  2. на его компе создаваемый юнит будет иметь индекс 31415927
  3. но на компах 2-12 этот юнит будет № 31415926.
  4. Вар передаёт приказ двигать юнита №31415927 в координаты (12.34, 987.65)
  5. Такого юнита вообще на компах 2-12 не существует и ф-ия прекращается дебаггером вара.
  6. В итоге, игрок 1 передвигает юнита, а игроки 2-12 - нет. Юнит получает различные координаты. Возникает десинхронизация.
Я понятно объяснил?
Старый 31.12.2011, 22:19
Doc

offline
Опыт: 63,163
Активность:
xgm.ru/p/wc3/getlocalplayer
Старый 31.12.2011, 23:25
Kirya92

offline
Опыт: 107
Активность:
Запомни последние действия локальных игроков перед фаталом (исп. заклинаний и т.д.). В них и ищи проблему!
Старый 26.01.2012, 19:49
Ответ

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

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

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

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



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