avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
Quests 'n' GetLocalPlayer()
Объясните, как сделать квест отдельно для каждого игрока. А точнее, как изменять его при выполнении каких-то действий. Если можно, пример такого квеста: Игра запускается, игрокам (у каждого 1 юнит) даётся квест - прийти в область. Юнит заходит в область - квест выполняется и удаляется. |
29.12.2009, 01:04 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SRes
1110101000
offline
Опыт:
9,997Активность: |
Проблема в том, что информация о квесте должна быть у каждого игрока. Не уверен насчет квестов в ф9, возможно их можно без страха десинхронизации использовать. Т.е. каждый квест должен выполняться и у других игроков тоже, иначе будет десинхронизация.
|
29.12.2009, 01:11 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
лучше юзай кастомные квесты, типа простого вывода текста "новое задание: ...", "задание выполнено: ...", чем париться с этой хренотой |
29.12.2009, 01:27 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
ScorpioT1000, а если я всё же решил париться?
» Creating
» Init
» Action
Проблема в условиях для Action.
avatarDr добавил:
SRes, в ф9 квест и будет у всех отображаться, если его не сделать локальным. Насчёт своей проблемы, получается что глобалка ArrivalOn[Игрок] задаётся тоже только для локального игрока?
avatarDr добавил: А ещё я сделал проверочный триг небольшой. "Если квест0 включён, то показать текст" "Если квест1 включён, то показать текст" "Если квест2 включён, то показать текст" ... Для 0 игрока он показывает, что квест0 включён. А для 1 и дальше ничего не показывает, хотя квесты нормально отображаются. В чём подвох? |
29.12.2009, 09:13 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
Работает для локальных игроков. Решение в названии темы уже дал для себя сам (гетЮнитовнер равен игроку квестовыи тип, тогда выполнить действие для локального игрока... |
29.12.2009, 15:26 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
narayan, это конечно гениально, но десинки мне не нужны. Я код выложил, найди лучше ошибочку. |
29.12.2009, 15:29 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
с кпк сижу, но все же напишу нужный код. function SyncQuest takes player p returns nothing quest q if GetLocalPlayer()==p then твои действия endif главное изначально локалки не объявляи, а лишь после внутри иф блока. Тогда не будет десинка. Да и не забудь что после создания таким образом квеста, тебе придется его синхронизировать только с лок игроком, иначе десинк. |
29.12.2009, 15:48 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
Давай ты потом поподробнее объяснишь. А то ЛокалПлеер меня вообще пугает. Как вам мой метод: изменения квеста делаю локально, а параллельно с этим делаю глобалки КвестВключён, УбитоМонстров, по глобалкам всё сверяю, а локально только показываю изменения. |
29.12.2009, 19:36 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
Делаи убито монстров тоже локально. Затем сверяи и делаи деиствие. Если нужно могу пример накатать... |
30.12.2009, 13:41 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
Накатай, если поможет, буду очень благодарен. |
30.12.2009, 14:11 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SRes
1110101000
offline
Опыт:
9,997Активность: |
Цитата:
И получай десинхронизацию, т.к. у остальных игроков переменная будет иметь другое значение. Следовательно проверка пойдет по другому сценарию. Цитата:
Лол, Америка здравствуй ! Для тех кто не понял - в своем посте я сказал что информация о квесте должна быть у всех игроков (иначе проверка через тот-же if будет иметь разный результат у каждого == десинхронизация), а квесты в Ф9 - не знаю, возможно их можно использовать ЛОКАЛЬНО без десинхронизации, но это только возможно. |
||
30.12.2009, 18:29 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YellowStar
poon
offline
Опыт:
15,144Активность: |
SRes - ты видимо не знаешь как варсинхронизируются. Если данное не типа хендл, то после лок операции десинка не будет (а будет запускать для игрока с текущим значением) Как вариант set loc=getplayerid(localplayer) попробуй. |
31.12.2009, 00:38 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SRes
1110101000
offline
Опыт:
9,997Активность: |
narayan, Орли, ага ? А у тебя есть исходник вара ? Поделись, не впадлу. Я основываюсь на своем здравом сознании и на своих знаниях в этой области. Они не идеальны и далеко не огромны, но они есть, а это значит что у меня есть свое мнение.
Вар вообще по сути не синхронизируется, у него просто проверяется правильность данных у клиентов, если у сервера данные не такие как у клиента - сервер посылает клиент нафиг. Да и кто его знает, без точных данных никто тут не прав. Ибо я наблюдал пару раз картину, когда хост лагал, типо "Ожидание игроков", при этом чат работал, у хоста писало "Разрыв соединения" (по словам хоста), хотя это теоретически невозможно, но так было, скорее всего из-за особенности платформы Garena. В Battle.net я такого не наблюдал ни разу. |
31.12.2009, 11:01 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
SRes, сервера в варе нет, есть равный среди равных.
Можно. Щас на пальцах объясню. Квест убить по 1 волку каждому из 10 игроков. Создаём глобально 1 квест - убить волка, массив булинов с номерами игроков - убит ли волк у игрока. Всё. При убийстве волка игроком проверяем массив булей (Он то единый для всех), если не убил, то меняем его элемент массива, а локально делаем квест выполненным. Удалять квест нельзя, десинк, а вот закрыть его и обнулить переменную можно. |
31.12.2009, 20:04 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SRes
1110101000
offline
Опыт:
9,997Активность: |
Лол. Причем здесь сам квест ? Я сказал про _квесты в ф9_.
Цитата:
:D, кто тебе это сказал ? Тебя обманули. В варе client-server. Иначе каким образом ты объяснишь вылет всех игроков, при обрыве коннекта у хоста? |
|
31.12.2009, 20:30 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
А мне кажится удп...
|
31.12.2009, 20:40 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SRes
1110101000
offline
Опыт:
9,997Активность: |
Архитектура и протокол пересылки пакетов - абсолютно разные вещи. Не позорься так.
|
31.12.2009, 20:45 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
avatarDr
Neophyte
offline
Опыт:
6,474Активность: |
SRes, при обрыве коннекта выбирается другой хост. А вылетают все, если некому. Я и говорю про отображение в ф9. Оно зависит от QuestEnabled() у игрока. Отредактировано avatarDr, 01.01.2010 в 01:30. |
01.01.2010, 01:22 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
SRes
1110101000
offline
Опыт:
9,997Активность: |
Цитата:
Oh, really ? Ты в этом посте сказал что в варе client-server. Сам себе противоречишь, товарищ. |
|
01.01.2010, 02:09 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Lord Vampire
В больнице -_-
offline
Опыт:
2,211Активность: |
avatarDr, как моё предложение - почему бы не сделать добавление в конце текста надписи "1 игрок выполнил задани, 2 игрок... и т.д."? Тогда если какой-то игрок убил волка добавляй туда надпись с его цифрой. Помоему этот вариант оптимальней, чем париться с ЛОКАЛЬНЫМИ квестами. Хотя надеюсь у тебя всё получится, т.к. интересно будет посмотреть.
И с наступающим! |
01.01.2010, 02:18 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|