Раньше никогда не занимался мультиплеерными картами и таких проблем как-то не возникало.
Есть 8 начальных точек. С помощью какого костыля можно случайным образом расположить в них игроков?
Пробовал так:
Игрок 1 занимает случайную точку из 8. Логическая переменна с ее номером выключается.
Когда игрок 2 пытается занять точку, проверяется эта логическая переменная. Если она выключена, запускаю триггер снова до тех пор, пока игрок 2 не встанет в свободную точку. И так для остальных. Но почему-то в игре происходит рассихрон для всех, кроме красного игрока.
Вот код
После Run trigger пытался поставить функцию skip remaning actions, но разницы нет.
Рассихрон не случается по другим причинам, это тестировалось.
Сделать спавн по не фикс. исходным позициям игроков - не предлагать, ибо точки появления игроков динамически меняются от их количества, а поэтому это не сработает.
Как починить или какие еще есть варианты сделать такую вещь?

Принятый ответ

Можно заносить все актуальные точки в массив, брать рандом в пределах этого массива, а потом заменять выпавший элемент массива последним и укорачивать массив на 1. В условиях варкрафта это будет чуть иначе чем в нормальных языках, но суть та же. Ну и игроков перебирать циклом, а не каждому свой if выдавать.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
6 лет назад
0
Похожие вопросы:

ответ
Ну просто найди исходную позицию игрока, GetPlayerStartLocalion() - зная игрока ты находишь место его спауна, все же просто?

7
24
6 лет назад
7
Можно заносить все актуальные точки в массив, брать рандом в пределах этого массива, а потом заменять выпавший элемент массива последним и укорачивать массив на 1. В условиях варкрафта это будет чуть иначе чем в нормальных языках, но суть та же. Ну и игроков перебирать циклом, а не каждому свой if выдавать.
Принятый ответ
0
32
6 лет назад
0
Для начала считаем кол-во играющих игроков не ботов, создаем массив точек в которых будут спаунится юниты игроков, помещаем всех игроков в группу игроков, и с помощью цыкла ForForce (в гуях он находится в разделе группа игроков) задаем случайную переменную и записываем её в массив для каждого игрока, и тут же проверяем было ли уже такое число, если было геннерируем новое, иначе создаем юнитов и все.
1
24
6 лет назад
1
quq_CCCP, зачем плодить непредсказуемые рекурсивные потенциально бесконечные циклы с проверкой угадали ли мы рандомом в свободный слот, если можно получить тот-же результат за линейное время выполнения?
2
23
6 лет назад
2
prog, спасибо! Все оказалось намного проще, чем я думал.
Оставляю скриншот для потомков
Загруженные файлы
2
24
6 лет назад
2
Obelick, проверку на то играет ли игрок не забудь, а то в таком виде у тебя проблемы начнутся если играют, например, 1, 2, 4 и 5 игроки, а 3 вышел до срабатывания триггера.
0
32
6 лет назад
0
prog, для каждого игрока потому что. Там 1 раз за игру, можно не возится с супер оптимизацией....
Ну и нам нужно чтобы не попасть дважны на одну позицию...
2
24
6 лет назад
Отредактирован prog
2
quq_CCCP, возможность того, что поиск свободного слота вслепую уйдет в бесконечный цикл и сорвет поток она вроде как и чисто теоретическая, но на практике в неё вполне реально вляпаться, особенно когда игроков много и нужно попасть, допустим, в один оставшийся свободный слот из десяти. И в результате возникает практически не воспроизводимая ошибка, срабатывающая в полнолуние при северном ветре, когда какой-то из игроков так и не получает свой спавн, а разработчик месяцами рвет волосы в попытках хотябы понять что происходит, не говоря уже об исправлении. Поэтому всегда лучше использовать предсказуемые алгоритмы, когда есть такая возможность.

Obelick, И еще одно уточнение. Это очевидно, но на всякий случай напоминаю, что при необходимости повторного использования того-же массива точек его нужно либо заполнять заново, либо менять местами элементы вместо простого присвоения либо использовать массив индексов и редактировать его вместо массива точек.
0
23
6 лет назад
0
И еще одно уточнение. Это очевидно, но на всякий случай напоминаю, что при необходимости повторного использования того-же массива точек его нужно либо заполнять заново, либо менять местами элементы вместо простого присвоения либо использовать массив индексов и редактировать его вместо массива точек.
Не до конца понял. Желательно обновлять весь список точек в каждом этапе цикла? Чем чревато то, что сейчас? Все вроде работает четко, рассихрона и спавна сразу 2+ игроков в 1 точке нет. Есть есть какие-то учетки - хрен с ними, это срабатывает 1 раз в начале игры)
0
24
6 лет назад
0
Obelick, если работает один раз - все в порядке. Речь о повторном использовании тех-же точек для каких-то целей уже после спавна - в массиве после выбора стартовых позиций останется лежать бесполезный хлам и, соответственно, его нужно либо инициализировать заново либо изменить алгоритм так чтобы он не повреждал данные.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.