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

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

Закрытая тема
 
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
dodge555, он бред сказал =) Эта функция не может быть причиной десинка
Старый 25.05.2009, 15:10
DKbru

offline
Опыт: 1,407
Активность:
Hellfim по-моему, любая операция, при определённых обстоятельствах, с GetLocalPlayer() может вызвать де синхронизацию. dodge555, советую удалить на время функции с GetLocalPlayer() (это и некоторые действия с камерой и выделение юнита), особенно уделить внимания квестам, и проверить все действия с вылетающими игроками, а также, какие действия ты не делал только для них.
Старый 25.05.2009, 17:11
dodge555

offline
Опыт: 1,232
Активность:
А квесты то что? Там задания не создаются, просто обычный текст. GetLocalPlayer() используется только в -ar, но там нормально сделано, и в действиях с камерой. Попробую отключить и проверить.
Старый 25.05.2009, 20:14
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
DKbru, разумеется любая, но не эта дефолтная функция. Она десинк не вызывает.
Вообще десинк вызывается когда контрольные суммы не компе хоста и игрока не совпадают, ну например:
Если создать юнита для одного игрока, а для остальных нет, то изменится контрольная сумма.
Старый 25.05.2009, 20:22
DKbru

offline
Опыт: 1,407
Активность:
Не знаю, при аккуратном использовании, когда каждую функцию проверил, тогда проблем не должно возникать. А когда навалял кучу кода, проверенной только для Single Player, тогда приходится долго и муторно разбираться, что вызывает десинк. Вообще условия с GetLocalPlayer() крайне нежелательны, особенно, когда много игроков. Сама функция и вызывает десинк ИМХО, так как, она вообще исключает возможность существования ведущего компьютера и ведомых... Даже в комментах в функции написано про это...

DKbru добавил:
Цитата:
Код:
if (GetLocalPlayer() == whichPlayer) then
        // Use only local code (no net traffic) within this block to avoid desyncs.
Старый 25.05.2009, 20:39
agentex

offline
Опыт: 34,834
Активность:
Hellfim для особо умных в ней даже написали
"Use only local code (no net traffic) within this block to avoid desyncs."
а близы просто так ничего не делают. надо смотреть че за код вокруг этой ф-ии

agentex добавил:
Цитата:
но не эта дефолтная функция. Она десинк не вызывает.

ахахах эпик фэлс, как говорится. ты еще скажи что SmartPanCameraBJ не вызывает десинка (она самая что ни на есть дефолтная)
Старый 25.05.2009, 21:36
dodge555

offline
Опыт: 1,232
Активность:
А если функция которая выделяет юнита для игрока и есть причина десинка, то на какую ее можно заменить? При ресанье чара желательно выделять его)

dodge555 добавил:
Кстати. В функции PanCameraToTimedLocForPlayer написано
// Use only local code (no net traffic) within this block to avoid desyncs.
Ее тоже нужно отключать? Там GetLocalPlayer() используется
Старый 25.05.2009, 21:52
DKbru

offline
Опыт: 1,407
Активность:
dodge555 сам проверь в своей карте является или нет Возможно, можно убрать какой то багнутный фрагмент коды, взаимодействующий с выделенными юнитами и десинка удастся избежать. У меня возможности что-то исправить в мультиплеере нет, так что не могу ничем конкретно помочь

DKbru добавил:
Цитата:
dodge555, советую удалить на время функции с GetLocalPlayer() (это и некоторые действия с камерой и выделение юнита)

Ещё раз повторюсь... Удалить == закомментировать. Но не отключать триггеры!
Старый 25.05.2009, 22:19
dodge555

offline
Опыт: 1,232
Активность:
Да я уже закоиментил их все, но pan camera пока не трогал, но там тоже в ней поидее использвуется GetLocalPlayer(), их все тож коментить (камеры)?
Старый 25.05.2009, 22:35
DKbru

offline
Опыт: 1,407
Активность:
Понятно то что именно функция выбора юнитов при нормальных обстоятельствах никакого десинка вызвать не может. А если, допустим, на коде, где куча проверок и выделяется юниты разных игроков с событиями вроде Pan Camera + ещё этот -ar мод, тогда вполне может при выборе юнита быть десинк, ибо такое может быть даже не конкретном действии, а просто при игровом процессе. Код-то может и не выполняться, но обрабатывается он в любом случае.
Старый 26.05.2009, 00:11
dodge555

offline
Опыт: 1,232
Активность:
только что пробовал отключил все действия камеры и выбора юнитов, десинк был...
Старый 26.05.2009, 00:12
DKbru

offline
Опыт: 1,407
Активность:
У тех же игроков? Или игроки всегда разные? Время десинка всегда одно и тоже (до секунды)? Какие действия следуют до и какие после?
Старый 26.05.2009, 00:18
dodge555

offline
Опыт: 1,232
Активность:
вообще непонятно какие действия, может это изза сборки предметов ?? игроки теперь разные.. раньше одинаковые были, при том что я ниче не добавлял в мапу, вообще, токо описание и кд у скилов менял)) время десинка чуток разное 7-10 мин. наверху часы как в доте, так что я слежу)
Старый 26.05.2009, 00:30
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
Потенциально дисконнектить выделение войск может. У меня кикало игрока, для которого выделяло, при последовательности действий (примерно):
Код:
Запомнить выделение
Хайд юнита
Анхайд
Выделить запомненное
Старый 26.05.2009, 00:36
dodge555

offline
Опыт: 1,232
Активность:
у меня ни хайда ни запоминалки выделения нету, щас опять еще тестил, с отключенной пан камерой и селек юнит, десинк, 3 вылетело на 10 минуте.

Из-за собирания вещей мб еще происходит это? мож че не так там? вот скрин

Отредактировано dodge555, 26.05.2009 в 01:01.
Старый 26.05.2009, 00:55
Preveder
StarCraft II® Inside
offline
Опыт: 1,927
Активность:
Есть приравнивание какой-либо глобальной переменной типа отряд == текущие выделенные юниты такого-то игрока? Очень злой вариант, когда начинает глючить очень много всего (например, самопроизвольно сбрасывается выделение, перестают отдаваться приказы) + велика вероятность десинка.
Старый 26.05.2009, 21:27
dodge555

offline
Опыт: 1,232
Активность:
не нету, есть токо set hero[1] = GetTriggerUnit и тд)

dodge555 добавил:
Кому не лень можете плз посмотреть war3map.j, может чтонить еще найдете там, что может вызывать десинк?
Старый 26.05.2009, 22:09
dodge555

offline
Опыт: 1,232
Активность:
пробовал отключить квесты, играл 4х4, все ровно десинк, ваще на второй минуте, трое вылетело...
Старый 28.05.2009, 00:31
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
dodge555, вставь в _каждый_ триггер по действию: Игра - Display Message <название триггера>, потом выложи код триггера сюда =) Возможно, что десинк не из-за последнего выведенного триггера, а из-за предпоследнего или чуть раньше.
Старый 28.05.2009, 00:50
dodge555

offline
Опыт: 1,232
Активность:
ух, там полно таких (5 или больше) что делается при каждом ударе моба, это пассивные скиллы в основном. Например - юнит атакован - у атакующего есть скилл мангуст - рандом от 1 до 100, если рандом 1 - 10 то увеличить скорость атаки на 100% (10% при каждом ударе увеличить скорость атаки), и таких много разных, во флуда будет при кождом ударе моба по несколько триггеров))
Старый 28.05.2009, 01:02
Закрытая тема

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

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

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

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



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