PDA

Просмотр полной версии : Проблемы при создании карты 200 маринеров стенка на стенку


gait
13.02.2013, 14:21
Здравствуйте, уважаемые форумчане! Специально зарегистрировался на этом форуме только для того, чтобы задать этот вопрос (заранее извинияюсь за много букв)

В картостроении для старкрафта я новичек и попробовал сегодня сделать простую вещь: написать простой сценарий для битвы стенка на стенку двух сотен маринеров.

Итак, что я сделал:
1. Красный игрок - Terran Human (Force 1), синий игрок - Terran Computer (Force 2)
2. Добавил Start Locations для красного и синего игрока.
3. Создал Location 0 (для маринеров красного) и Location 1 (для маринеров синего)
4. Поместил туда по две сотни маринеров.
5. Удалил все предустановленные триггеры.
6. Добавил триггер для первого игрока:
Trigger("Player 1"){
Conditions:
Always();

Actions:
Order("Current Player", "Any unit", "Location 0", "Location 1", attack);
}7. Добавил триггер для второго игрока:
Trigger("Player 2"){
Conditions:
Always();

Actions:
Order("Player 2", "Any unit", "Location 1", "Location 0", attack);
}Итог: триггеры работают, замес происходит, маринеры бегут друг на друга, но есть проблема. Комп сильно тупит. Его маринеры пробегают сквозь моих и лишь изредка отстреливаются, поэтму очень быстро сливаются. Я пробовал поменять "Attack" на "Patrol". Еще пробовал "RUN AI SCRIPT" -> "Execute AI script 'Send All Units on Random Suicide Missions'.", но это тоже не помогло, хотя стало немного лучше, потери со стороны игрока увеличились, но всё равно было видно тупление компа, игрок всегда побеждает со значительным преимуществом. И вот я не могу понять, почему так происходит?! Как с этим бороться? Почему комп тупит?? Это главная проблема.

Еще есть несколько второстепенных не столь важных вопросов, чтобы не плодить тем, я задам их здесь:
Второстепенный вопрос 1: Если я ставлю двух компьютерных противников в разные Force, почему они не атакуют друг друга, когда стоят рядом?
Второстепенный вопрос 2: Если я делаю генерацию юнитов триггером (например, создать 200 юнитов в определенной локации), то в эту локацию ставится значительно меньше (в моем случае ставилось всего менее сотни) и пишется, что юниты не могут быть размещены, хотя размеры локации позволяют разместить там целую тысячу юнитов). Почему? Заранее спасибо.

PS. У меня пиратка 1.16.1. Карта сделана в стандартном редакторе.

Wormer
21.02.2013, 18:31
Почему комп тупит сказать сложно. Вполне возможно, что лучшего поведения от него не добиться.

По поводу других вопросов.
Если я ставлю двух компьютерных противников в разные Force, почему они не атакуют друг друга, когда стоят рядом?
Все компьютерные игроки (в не зависимости от их расположения по командам Force) изначально находятся в союзе друг с другом. Галочки Allies и Allied Victory, которые можно устанавливать в редакторе для команд, относятся только к игрокам Human.

Если хочешь, чтоб компы воевали, надо исполнить действие Set Alliance Status, которое поставит указанный в нём статус (Enemy, Ally, Allied Victory) игроку от имени которого запускается триггер против указанного в действии игрока. Понятно, что отношения союза между игроками не обязательно взаимно, поэтому если хочешь, чтоб отношения были взаимными, то и другому игроку надо поменять статус союза против первого.

Дополнительно замечу, что игрок не может иметь одновременно нескольких игроков со статусом Ally, а других со статусом Allied Victory. Все игроки для данного игрока всегда либо Allies, либо Allied Victory Players. Если у игрока уже есть несколько других игроков с которыми он имеет статус Ally, то попытка поставить статус Allied Victory другому игроку при помощи действия Set Alliance Status приведёт к автоматическому изменению статуса всех игроков Allies в игроков со статусом Allied Victory Players; и обратно.

Если я делаю генерацию юнитов триггером (например, создать 200 юнитов в определенной локации), то в эту локацию ставится значительно меньше (в моем случае ставилось всего менее сотни) и пишется, что юниты не могут быть размещены, хотя размеры локации позволяют разместить там целую тысячу юнитов). Почему?
От размера локации это не зависит. Юниты всегда создаются в точке, которая есть центр локации. Есть некоторая область, в которой проверяется доступное для создания юнита место - если места нет, то юнит не создаётся и выводится пресловутое сообщение "Unable to create unit". Чтоб всё работало, надо постоянно отводить юнитов с локации на которой они создаются, а чтоб не было сообщений о невозможности создать юнит, надо создавать их в отдельной области (назовём её L) на карте по нескольку штук за раз, потом переносить при помощи Move Unit в нужное место спауна, а в конце удалять с области L всех юнитов, которые не перенеслись в следствии переполнения спауна, и повторять процесс сколько надо.