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

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

 
BarMentaLisk

offline
Опыт: 397
Активность:
Рандомное расположение компа среди людей
Суть в следующем. Хотел сделать УМС в стиле 8 человек против одного компа из стандартной карты "зэ хантерз". Потом, узнав, что 9-12 плееры не полноценны, понял, что придется делать 7 человек против компа.
Окей, так тоже сойдет подумал я. Засунул компа в форс 2, а людей оставил в форс 1. Но при таком раскладе не получается сделать рандомное расположение компа, ведь рандом производится среди игроков одного форса, и комп стартует всегда на одном и том же месте.
Тогда решил засунуть компа в первый форс вместе с игроками, а уже при старте заальясить людей и дать вижен им, а компу - 8-му плееру - ни вижена ни альяса. Ну локации, на которых будут работать триггеры, легко растусовываются при старте к соответствующим базам игроков. Проблема в другом. Оказывается, рандомизируется не расположение игроков, а их номера. То есть тот же комп, который по моим предположениям должен быть 8-ым плеером, при птичке "рэндомайз старт лоукэйшн" становится хоть первым, хоть вторым, хоть каким угодно, восьмым тоже иногда выпадает xD. Но мне-то надо чтобы он был четко восьмым. Иначе не получится прописать компу всякие привелегии. Вспомнил сразу УМС "фантом", где рандомно один из челов становится мегамощным, а все остальные воюют против него... может там автор искал нечто вроде того, что ищу я, но не нашел?
В общем, теоретически можно было бы прописать всем игрокам тригеры, но действующие по включенному определенному свичу, а свич включать только для комповского игрока. Но мало того, что это получится семь пачек лишних тригеров, так еще и непонятно как определить в начале игры, кто комп из 8-ми игроков.
Самый здоровый вариант - это оставить компа в другом форсе, но если у компа будет всегда одно и то же расположение, то мапа получится чрезмерно скучной.
Какие у кого будут предложения по данной ситуации?
BarMentaLisk добавил:
Придумал даже такой алгоритм:
Комп во втором форсе и появляется соответственно на одном и том же месте, но в начале игры, на основе рандомных свичей предполагается восемь вариантов обмена местами компа и одного из людей, точнее 7 вариантов обмена и один, когда комп остается на месте.
Но тут начинаются глюки, если кто-то из обмениваемых оказывается зергом (на крип не хочет переноситься, да и личинки при переносе отвязываются от базы. Да и кроме всего незаметно обмен не сделаешь - все равно видно как моргнула появившаяся база, как появился разведанный туман и т.п.
Старый 20.01.2010, 18:30
Worm
Просто Червь
offline
Опыт: 3,221
Активность:
Да, есть такая заморочка со Старкрафтовским рандомом. Бороться, конечно, можно и рандомизируя игроков триггерно, но, как ты написал, проблем не оберёшся (личинки, вижн и всякая такая дребедень). Поэтому лучше приспособить стандартный рандом. Итак, ты засовываешь всех игроков и компа в один форс. Учти, кстати, что в таком случае (когда среди них есть комп) игроки в вестибюле не смогут менять свои позиции, однако не велика беда так как всёравно стартовые локации случайны.
Кстати, говорить, что случайны стартовые локации не совсем верно, потому что на самом деле рандомизируются не сами локации, а распределение игроков в вестибюле между игроками на карте. Каждый игрок с определённым номером всегда будет стартовать в одной и той же позиции (!!!), случайно лишь то, как позиции в вестибюле сопоставятся номерам игроков. То есть, если ты, например, сделаешь локацию L вокруг стартовой позиции игрока P1 и триггер T для всех игроков T(All players)={(Player 1 brings at least 1 building to L) => (Display text message for current player "Hello!")}, то каждый раз, когда в игре присутствуют все без исключения игроки они неизменно получат сообщение о приветствии (другими словами, не может оказаться так, что на место игрока P1 встанет игрок с другим номером, однако непонятно кто же из игроков в вестибюле станет этим первым игроком). Но это так, для общего развития, потому что оно нам не поможет. =)
Что же тогда? Идея в том, что бы найти такие вещи, которые действуют по-разному на компьютеров и людей, и поймать разницу в эффекте. Я знаю по крайней мере два (три) способа.
  1. Используя разницу в эффекте Run AI script: для людей (к сожалению) никакие скрипты не запускаются.
1.1. Пожалуй, самый приемлемый. Скрипты Insane дают компьютеру 4000 минералов, что легко определить.
1.2. Пожалуй, самый экстравагантный - привожу для полноты картины. Скрипт Junk Yard Dog заставляет юниты компьютера на локации бегать туда-обратно, что тоже можно "поймать".
  1. Используя то, что эффекты флагов Allied, Enable Allied Victory и Share Vision применяются только между игроками-людьми. Так, если ты поставишь флаг Allied, то вначале игры все люди будут объявлены союзниками между собой, однако компьютер так и останется для них врагом, а все люди, в свою очередь, - врагами для компьютера. Если в игре не менее двух человек (не считая компьютера), то этот эффект тоже можно поймать: T(All players)={(Allies bring at least 1 any unit to anywhere) => (Текущий игрок - человек)}. Только учти, что Allies в условии Bring на самом деле ссылается на Allied Victory Players, а не на просто союзников, как можно было бы подумать, поэтому дополнительно к флагу Allied в форсах надо поставить Allied Victory.
Вот - а больше способов отличить компьютера от людей (по карйней мере не используя EUD) в голову не приходит.
Не за что.
  • Wormer

Отредактировано Worm, 27.01.2010 в 23:02.
Старый 27.01.2010, 22:53
OutCast1138

offline
Опыт: 375
Активность:
нажимаешь на кнопку дипломатии над миникартой, там будут ники и цвета всех игроков, у компа будет ник типа Jormungard Brood, Antiga, Velari Tribe
Venatir Tribe.
короче если есть в нике компа слово brood - это зерг, tribe - протосс, если ни того ни другого, то это терран
Старый 19.04.2010, 06:51
Worm
Просто Червь
offline
Опыт: 3,221
Активность:
OutCast1138:
нажимаешь на кнопку дипломатии над миникартой, там будут ники и цвета всех игроков, у компа будет ник типа Jormungard Brood, Antiga, Velari Tribe
Venatir Tribe.
короче если есть в нике компа слово brood - это зерг, tribe - протосс, если ни того ни другого, то это терран
Ты не понял, нужно триггерно определить текущий игрок комп или человек.
Старый 20.04.2010, 18:11

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

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

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

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



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