500

RMS Создание карты

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

В: Почему я не могу сыграть свои собственные сценарии в режиме перестрелки?
A: В режиме перестрелки можно играть только случайные карты.

В: Как мне преобразовать мой сценарий в случайную карту / карту перестрелки?
A: Вы не можете. Сценарий - это карта с фиксированным размером, номером игрока, местностью, зданиями и т. Д.
Случайная карта / карта перестрелки будет генерироваться новой каждый раз, когда она запускается,
и со случайными командами, которые вы научитесь создавать в этом руководстве.

В: Могу ли я играть в свои собственные сценарии онлайн?
A: Еще нет. Вам придется дождаться игрового патча с версией выше 1.02.

В: Могу ли я играть в свои произвольные случайные карты онлайн?

A:Да.
Q: Я присоединился к пользовательской случайной карте онлайн. Могу ли я разместить эту карту сейчас? A: Да. Когда вы присоединяетесь к игре с пользовательской картой онлайн, карта будет автоматически перенесена на ваш компьютер. В меню хостинга игры вы нажимаете кнопку «Пользовательские карты» в правом верхнем углу экрана, и пользовательские карты появляются для выбора. Q: Я играл в произвольную карту онлайн. Где я могу найти файлы карт на моем компьютере? A: Вы найдете пользовательские случайные карты в каталоге вашего профиля Windows. Обычно это "C: \ ... \ Мои документы \ Мои игры \ Age of Empires 3 \ RM \". Каждая карта состоит из 2 файлов (* .xs и * .xml) - больше информации в этом руководстве ниже. Q:

Я новичок в RMS. Сколько времени займет создание моей первой RMS?
A: Долго! Вам понадобится несколько часов, чтобы правильно изменить уже существующую карту, и несколько недель, чтобы создать собственную случайную карту с нуля. Но изменение карт делает НАМНОГО веселым и чрезвычайно поможет вам выучить команды.

В: Почему для AOE3 нет редактора RMS?
A:Прежде всего, Ensemble Studios - разработчики AOE3 - вообще не поддерживают пользовательские карты. Они никогда не делали этого в прошлом с AOE, AOK, и они не будут делать это в будущем. Основная причина: это слишком сложно для обычных игроков. Кроме того, нет смысла создавать меню перетаскивания для сценариев RM, поскольку RM являются динамическими / случайными. Итак, будьте счастливы, что у вас есть этот урок, сделанный фанатом этой игры. И, надеюсь, это тоже немного развлечения для вас;)




1) КАК НАПИСАТЬ


R andom M ap S Шифрованные файлы ( RMS- файлы) будут создаваться и редактироваться только с помощью Блокнота Windows или любых других инструментов текстового редактора. Редактор карт AOE3 не нужен для создания RMS, но он очень поможет при тестировании RMS.



RMS больше похожи на реальный язык программирования, чем скрипты RM из Age of Kings: The Conquerors. Это дает скриптам AOE3 RM большую мощность, но также и потенциально более крутой курс обучения. Однако пользователям, знакомым с программированием, должно быть легче, потому что многие соглашения похожи. Кроме того, код скрипта больше всего похож на язык программирования C ++, но не волнуйтесь - это руководство поможет вам освоить большинство команд для создания вашей первой RMS без каких-либо знаний в области программирования на C ++.
В этом уроке примеры для текста скрипта показаны в шрифте Courier .

Заметки:

1. Изучение сценариев RM НЕ легко. Вам должно быть не менее 12 лет.
2. Если вы хорошо разбираетесь в математике, вы очень выиграете от этого! Но я могу сказать, что изучение этого может сделать еще более увлекательным, чем играть в AOE3!
3. Читая этот урок, вы даже изучите основы программирования на C / C ++!
4. Если вы не знаете, как копировать и вставлять текст, значит, вы посетили не тот сайт!
5. Если вы не знаете, как использовать «Блокнот» или любой другой текстовый редактор, то вы посетили не тот сайт!


2) КАК СОЗДАТЬ КАРТЫ ФАЙЛОВ

Для создания карты нам нужно создать два файла: если вы называете свою карту « MyMap », то нам нужно создавать файлы с этим именем и расширениями «.xs» и «.xml», поэтому мы называем их: MyMap.xs и MyMap.xml . Чтобы создать каждый файл, откройте Блокнот Windows. Вы найдете программу «Блокнот» в Windows в меню «Пуск» -> «Программы» -> «Аксессуары» -> «Блокнот» (или «Редактор» - это то же самое). Откройте «Блокнот» и выберите «Новый» в строке меню «Файл». Что ж, давайте сначала сохраним эти два необходимых файла без какого-либо содержимого:
1. Выберите «Сохранить как ...» из «Файл» строка меню.
2.Вверху нового открытого окна мы выбрали наш каталог, в который мы хотим сохранить наши файлы. Для каталога «Сохранить в» мы выбрали каталог, в который была установлена ​​наша игра AOE3.
Если вы используете версию AOE3, используйте каталог: « C: \ ... \ Programs \ Microsoft Games \ Age of Empires III \ RM \ » (если C: диск, на котором вы его установили!)
3. Внизу из поля вставьте имя файла MyMap.xs
4. Ниже выберите «Все файлы» в качестве типа данных.
5. И в самом низу окна выбрал «ANSI» в качестве типа кода.
6. Теперь вы можете нажать кнопку «Сохранить» в правом нижнем углу.
7.Повторите действия 1. - 6. и выберите имя MyMap.xml в ( 3. ).
Теперь у нас есть все файлы, которые нам нужны для нашей первой RMS. Они по-прежнему пусты и не работают, но теперь мы можем открывать их по одному и редактировать с помощью Блокнота!
Примечание: НЕ используйте имена карт, которые уже существуют: например, «Техас», «Новая Англия» и т. Д.


3) ПЕРЕМЕННЫЕ

Переменные являются наиболее важными элементами в RMS. Они позволяют вам определять числа, строки, операторы (и даже функции, позже). Все переменные должны быть определены перед их использованием, это означает, что вы должны дать своей переменной тип переменной и имя:
для целого числа это выглядит так:
int myCounter =1 ;
Теперь мы определили переменную типа integer в следующем порядке:
<тип переменной> <имя переменной> <равно><предопределенное значение> <выполнить это>
Рекомендуется использовать имя для переменной, что объясняет это немного. Это полезно, если в вашем скрипте много переменных. Конечно, вы также можете назвать его как int c1 = 1; , который короче.
Типичные переменные:
целые числа (числа без десятичных знаков): пример определения:int myCounter = 1; Числа с
плавающей запятой (Числа с десятичными разрядами ): Пример определения: float myFraction = 0.87;
String (Строки содержат буквы, цифры и знаки): Пример определения: string myUnitName = "My Hero";
Boolвыражения (выражение, которое проверяет правильность): пример определения: bool myCheckIfItIsTrue = "true";
Переменная bool особенная. Он может иметь только два значения: «истина» и «ложь». Эта переменная полезна, если вы хотите сравнить два или более значений / переменных.
Как только переменная определена в скрипте, и вы хотите дать вашей переменной новое значение, вам больше не нужно писать тип переменной:
myCounter = 2;
myFraction = 0,53;
myUnitName = "Мой новый герой";
myCheckIfItIsTrue = "false";

Вы также можете добавить эти переменные:
float myNewFloat = myCounter + myFraction;
myNewFloat и присвоил ему значение myCounter + myFraction, равное 2,53. Мы также могли бы выполнять другие математические операции с нашими переменными числами, такие как substract ( - ) или div ( / ).
string myNewName = myUnitName + "" + myCounter;
Здесь мы определили новую строковую переменную myNewName и присвоили ей значение myUnitName + "" + myCounterFraction, которое является "My New Hero 2".
Как видите, мы добавили строку, букву «пробел» и целое число в новую строковую переменную.

Примечание: максимальная сумма « + », Выше мы использовали только 2 знака " + "!
В этом разделе мы также узнали немного больше: использование оператора "=". Когда мы используем « = » в нашем скрипте, мы всегда даем нашей переменной слева от « = » значение, которое стоит справа от « = ». Так что в случаеint myCounter = 1; переменная myCounterимеет значение «1» всякий раз, когда мы вставляем ее в уравнение. Если мы используем нашу переменную myCounter справа от уравнения,изменилось, он просто использует значение, которое мы дали ему раньше.

Переменные AOE3:
Эти переменные предопределены AOE3 при запуске / запуске готового сценария RM. Наиболее важные из них:
cMapSize (integer) = 0, если размер карты выбран нормальным; = 1, если выбран размер карты большой
cNumberNonGaiaPlayers (integer) = количество игроков при запуске / запуске RMS
cNumberPlayers (integer) = количество игроков + игрок gaia при запуске / запуске RMS = cNumberNonGaiaPlayers +1
cNumberTeams (integer) = количество команд при запуске / запуске RMS.
Помните, что вы сначала получаете эти значения при настройке и запуске игры со своей RMS!

Сводка:
1. Переменные будут определены точно в следующем порядке:
<тип переменной> <имя переменной><равно><предопределенное значение> <выполнить это>
2. Существуют 4 типа переменных: Integer , Float , String и Bool ,
3. Как только переменная определена, вам не нужно снова писать тип переменной и использовать ее значение в скрипте.
4.Если наши переменные являются числами, мы можем использовать их как математические выражения.
5. Строковые переменные могут быть добавлены и добавят строку или число в конец.
6. Переменные AOE3 не должны быть определены и не должны быть установлены в значение. Вы получаете эти значения в начале игры.

4) ФУНКЦИИ

Вы все знаете функции из математики, например, y = x + 2 . Как видите, эта функция также является уравнением. Функция в программном коде (например, скрипт случайной карты) также может содержать уравнение. Он может даже содержать несколько уравнений, а также команды. Мы также можем написать математическую функцию y = x + 2 в RMS-коде. Это будет выглядеть так:
int myRMSFunction (int x = 0) {return (x + 2); }
Видите ли, нам нужно немного больше определить, чтобы сообщить программе AOE3, какие переменные мы хотим использовать. Сначала мы дали нашей функции имя (myRMSFunction) и определили ее как целочисленную переменную. В скобках () мы определили входную переменную x. Видите ли, мы также определили x как целое число со значением 0, но мы можем изменить это значение, когда будем вызывать эту функцию позже в нашем скрипте. Для того, чтобы позвонить функцию просто означает , что мы хотим , чтобы выполнить эту функцию , и вы хотите , чтобы получить результат. Теперь давайте вызовем эту функцию: myRMSFunction (3);

Ну, ничего не происходит! В самом деле? Нет! Что мы наделали? Мы вставили «3» в скобки, так что это означает, что x теперь имеет значение «3» вместо старого значения «0». Поскольку мы вызвали эту функцию, все в скобках {} будет выполнено. Поскольку x теперь равно «3», мы получаем значение для переменной myRMSFunction, которое равно «5» и, безусловно, имеет тип integer, как мы его определили ранее. Команда " return " просто выполняет уравнение в скобках "return ()". Теперь вы легко можете видеть, что myRMSFunction (3) - это не что иное, как у нашего математического уравнения, при использовании x = 3. Более того, теперь вы сможете использовать эту функцию как обычную целочисленную переменную! не забудьте вставить правильную переменную в скобки, так как x должен быть целым числом. Ну, почему бы нам не использовать float для x и myRMSFunction? Простой ответ: не используйте это, если не нужно, так как вычисление целых чисел работает много быстрее, чем вычисление числа с плавающей точкой.
Теперь мы можем вызывать эту функцию в нашей RMS так часто, как мы хотим, и с разными целочисленными значениями.

В сценарии произвольной карты есть два различных типа функций, предопределенные функции и пользовательские функции:

Предопределенная функция :
Эти функции уже определены программой AOE3. Большинство из них начинаются с букв «рм ...».
Пример: " rmEchoInfo ( " Большая карта " ); ".
Эти функции описаны ниже. Некоторые из этих функций просто выполняют что-то (они называются пустыми функциями ), другие могут возвращать значение или переменную (они называются int , float илистроковые функции ) и некоторые другие функции могут сравнивать значения или переменные (например, if , else , while , case и т. д. Они называются операторными функциями ). Есть также некоторые математические функции, которые работают в RMS (например, sqrt (x) для квадратного корня из x).

Пользовательские функции:
Самая важная пользовательская функция называется « void main (void) {} », и ВСЕГДА должна быть включена один раз в RMS! " Пустота " перед " главным"означает, что эта функция не возвращает никакого значения, она просто выполняет что-то." void "в скобках () означает, что функции" main "не нужны никакие дополнительные переменные, поэтому она просто выполняет все команды и определения, которые добавляются в скобках {} .
Как правило, нет необходимости в дополнительных пользовательских функциях в сценарии произвольной карты. Однако они становятся довольно полезными, если мы хотим повторять команды снова и снова. Если вы хотите использовать Для дальнейших пользовательских функций необходимо соблюдать два правила:
1. Вы должны определить все дополнительныеПользовательские функции ДО того, как вы определите функцию main .
2. Вы даже можете вызывать пользовательскую функцию в определении новой пользовательской функции, но функция, которую вы вызываете, должна быть определена ДО того, как вы ее вызовете .

Использование функций оператора.
Как мы уже видели, операторские функции являются предопределенными функциями. Они нужны для сравнения значений или переменных, используя операторы. Наиболее распространенные операторы:
i == j, означает, что «i» имеет то же значение, что и «j»
i < j , означает, что «i» имеет меньшее значение, чем «j»
i >, означает, что «i» имеет более высокое значение, чем «j»,
i <= j ,означает, что «i» имеет более низкое или такое же значение, что и «j»
i > = j, означает, что «i» имеет более высокое или то же значение, что и «j»
i ! = jозначает, что «i» НЕ имеет того же значения, что и «j»
i || jозначает «i» ИЛИ «j», это логический оператор, «i» ИЛИ «j» должен быть ИСТИННЫМ для продолжения
i && j, означает «i» И «j», это логический оператор » я"

, означает «я» по модулю «J». Простыми словами: «i» И «j» должны быть целыми числами. Разделите «я» на «j» столько, сколько сможете. Если вы можете разделить i (k * j ) раз, ( k также является целым числом), то вычтите это количество и посмотрите на остаток (i% j = i - k * j). Если i <j, то k равно 0.
Пример: 1% 4 = 1, 2% 4 = 2, 3% 4 = 3, 4% 4 = 0, 5% 4 = 1, 6% 4 = 2, 7% 4 = 3, 8% 4 =, 9% 4 = 1, 10% 4 = 2, ...

Теперь давайте посмотрим на операторские функции. Мы вставляем в основную функцию следующее:
int i = 0;
int j = 0;

если (i <4) j = 1;
иначе, если (i <6) j = 2;
иначе j = 3;
}

Первые две строки просто определяют 2 целых числа i и j. Следующая строка начать для- цикл, начиная от I = 1 до я = 10, такон работает10 раз, так как для -loop увеличивает переменную я на 1 после каждого цикла. Если в вашей функции более 1 команды (здесь для функции), вам нужны скобки {} . У нас есть 3 команды в этой скобке. Первая команда « if (i <4) j = 1; » может читаться как «If iменьше 4, тогда установите j равным 1 ". Следующая команда else if начинает работать (и только тогда!), когда вышеуказанная команда if больше не выполняется. Для этого случая j будет установлено в 2. Последняя команда в этом цикле else всегда необходим, если вы ранее использовали команду else if ! Если последний else else, если команда не выполнена, то установите j = 3. Конечно, мы могли бы добавить еще else, если команды между if и else !
Итак, результат «j» для каждого «i» в for -loop:
i = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
j = 1, 1, 1, 2 , 2, 3, 3, 3, 3, 3


5) КОНВЕНЦИИ

Следует помнить некоторые соглашения:
1. В сценарии учитывается регистр. Пример: int, Int и inT - это 3 разные вещи!
2. Все переменные (такие как целые числа и числа с плавающей запятой) должны быть определены при первом использовании. Если они переопределены после этого, вы должны опустить «int» в «float».
Оригинал: int numCows = 0;
Последующее: numCows = 2;
3. Переменные не должны быть именованы или определены зарезервированными именами или командами, такими как «int», «float», «string», а также всеми другими командами «rm ***». Пример: избегайте " int int = 4; " или " string float =" A Name ";
Точка с запятой: точка с запятой ; всегда заканчивает командную строку. Здесь AOE3 узнает, что определение или команда перед точкой с запятой должны быть выполнены далее. Всегда используйте точку с запятой после КАЖДОГО определения или команды. Существует множество сочетаний клавиш для создания сценариев, и некоторые из них показаны в конце этого файла. Условные операторы могут использовать «если», «еще» и «если еще». Циклы Do могут проходить по списку команд несколько раз, и это особенно полезно для дублирования областей или объектов для каждого игрока.
5. Комментарии можно указывать, вставляя // в начале строки или заключая текст в / * и * /, Комментарии могут напоминать вам (и всем, кто читает вашу карту), что пытается делать каждый раздел, а комментирование разделов скрипта карты может помочь в устранении проблем.

6) ПОРЯДОК ПИСАНИЯ

Порядок сценариев важен. Вы должны построить землю, прежде чем вы сможете разместить на ней предметы. Объекты будут учитывать только ограничения областей и объектов, которые уже размещены. Вы не можете использовать переменную, которую вы не определили.

7) СЕТКА КАРТЫ

Карты ориентированы по сетке X, Z. Y высота. Начало координат сетки (0,0) расположено внизу экрана. При использовании дробей (0.5, 0.5) - середина карты, (1, 0) - правый угол карты в 3 часа, (0, 1) - левый угол карты в 9 часов. часы, и (1, 1) это вершина карты в 12 часов.



Сетка использует квадратные плитки размером 2х2 метра. Вы можете увидеть эти плитки также в редакторе сценариев. Выберите «View» в редакторе и выберите «Grid». Каждый маленький и белый прямоугольник составляет 1 плитку. Каждый большой и синий прямоугольник размером 5x5 (= 10x10 метров).



Карта для 4 игроков, вероятно, около 400 м вдоль одной стороны. Небольшие здания занимают 1 плитку (= 2x2 метра), а небольшие блоки (например, небольшие камни или пучок травы) занимают четверть плитки (= 1x1 метр) пространства.

8) ИМЯ ОБЪЕКТА

1. Названия подразделений:
Все имена объектов относятся к имени protounit . В чем разница между юнитом и протоунитом? Названия юнитов в игре являются более дружественной версией названия protounit. Например, имя protounit для «Сельчанин» - «Поселенец». Название protounit для «Town Center» - «TownCenter». Таким образом, большинство имен устройств имеют одинаковое или одинаковое имя protounit. Вы найдете все имена protounit в вашем каталоге установки AOE3:
"\ Age of Empires III \ data \ proto.xml ".

2. Наименования технологий:
К таким технологиям относятся, например, «атака», «щит», «броня», «точки попадания» и т. Д. Все технологические названия относятся к имени технологического дерева . Вы найдете все имена techtree в вашем каталоге установки AOE3:
"\ Age of Empires III \ data \ techtree.xml ".

Оба файла являются очень длинными XML (текстовыми) файлами. Я рекомендую использовать программу «Просмотр XML», чтобы найти нужный вам protounit. Очень хорошая бесплатная программа - «Mindfusion XML Viewer». Вы можете скачать его здесь .



3. Имена триггеров:
Триггеры не нужны для обычной случайной карты, но мы кратко хотим объяснить это здесь для полноты. Вы можете включить все триггерные эффекты и условия из редактора сценариев в сценарий произвольной карты. Для триггеров нам нужны триггерный эффект и имена условий, имена его параметров (если они есть) и соответствующие пользовательские переменные. Вы найдете все имена, связанные с триггерами, в вашем каталоге установки AOE3:
"\ Age of Empires III \ trigger \ typetest.xml ".
Теперь мы открываем этот файл в средстве просмотра XML (см. Выше) и получаем что-то вроде этого:



В сценарий RM он будет вставлен следующим образом:
rmCreateTrigger ("FoodForAllPlayers");
rmSwitchToTrigger (rmTriggerID ( "FoodForAllPlayers"));
for (i = 1; <= cNumberNonGaiaPlayers) {
rmAddTriggerEffect (" Предоставить ресурсы ");
rmSetTriggerEffectParamInt (" PlayerID ", i);
rmSetTriggerEffectParam (" ResName ", "Food");
rmSetTriggerEffectParamInt (" Количество ", 1000);
}
rmSetTriggerPriority (4);
rmSetTriggerActive (истина);
rmSetTriggerRunImmediately (истина);
rmSetTriggerLoop (ложь);


4. Названия местности:
Это немного отличается от юнитов и технологий. Местности относятся к окрашенной текстуре. Эти файлы текстур можно найти в сжатом архиве графических файлов. Файлы имеют сжатый бар (аналог zip) и имеют расширение «bar». Вы найдете все файлы текстур для ландшафта и другие изображения и значки в вашем каталоге установки AOE3:
"\ Age of Empires III \ art \ art1.bar ".
"\ Age of Empires III \ art \ art2.bar ".
"\ Age of Empires III \ art \ art3.bar ".

Для просмотра этих файлов нам нужен «Bar Explorer» . Есть несколько бесплатных программ, но я очень рекомендуюПрограмма изготовлена ​​компанией Ykkrosh. Она позволяет просматривать и распаковывать файлы. Ссылка для скачивания здесь .



Однако нам просто нужны имена. Хорошо, давайте выберем ландшафт из редактора сценариев. Мы выбрали "ground2_tex". В AoE3Ed Archive Viewer мы находим путь «Art \ terrain \ texas \ ground2_tex .ddt», как показано выше. Нам нужно только имя, показанное синим жирным шрифтом. В строку RMS она будет вставлена, как
показано ниже : rmTerrainInitialize ("texas \ ground2_tex", 4);

5. Другие названия объектов:
Названия воды, скал, лесов и т. Д. В основном такие же, как показано в редакторе сценариев. Изучите оригинальные сценарии AOE3, если вам нужно специальное имя для объекта, который вы видели на этих картах. Горячая клавиша "ALT + F" - это ваш друг, который ее нашел!

Примечание: Возможно, уже есть несколько списков имен на следующем. Но помните: каждый игровой патч может менять имена, а тем более атрибуты и параметры. Таким образом, с помощью методов, описанных выше, вы всегда в безопасности, находя правильные имена.

9) XML-файлы

Скрипты карты используют расширение файла xs, но они являются текстовыми файлами и могут быть отредактированы любым текстовым редактором. Однако, чтобы играть на новой карте, вы также должны создать файл xml с тем же именем, что и ваш файл xs . xml - это язык разметки, похожий на HTML, используемый веб-страницами. Большинство веб-браузеров могут просматривать файлы XML , но вам может потребоваться открыть файл в другом приложении, например в редакторе XML или даже в текстовом редакторе. Единственное, что вам нужно в вашем XML- файле, показано ниже синим полужирным шрифтом: название и описание карты, а также значок скриншота, если хотите. XMLфайлы для случайных карт выглядят следующим образом:

<? xml version = "1.0" encoding = "UTF-8"?>
<mapinfo detailsText = "My Map Description." imagepath = "ui \ random_map \ all_maps" displayName = "Моя карта" notReplace = ""
loadDetails = "" loadBackground = "ui \ random_map \ all_maps">
<loadss> ui \ random_map \ new_england \ new_england_ss_01 </ loadss>
<loadss> ui \ random_map \ new_england \ new_england_ss_02 </ loadss>
<loadss> ui \ random_map \ new_england \ new_england_ss_03 </ loadss>
</ mapinfo>




10) простая случайная карта

Каждая пользовательская случайная карта состоит из двух файлов. Если ваша карта называется « MyMap », то вам нужно создать два файла с именами « MyMap.xs » и « MyMap.xml ».

Пример:
ПРИМЕЧАНИЕ. Текст серого цвета не обязателен, он только для вашей помощи. Поскольку он помечен как нечитаемый для разработчика RMS, вы можете включить его в свой настоящий файл!


MyMap.xs содержит:

/ * ПРОСТАЯ СЛУЧАЙНАЯ КАРТА - Автором - Версия 1.0 * /
включает "mercenaries.xs"; / * Это загружает наемников, необходимых для обычного игрового процесса RMS! * /
void main (void) { /* Это основная точка входа для вашей RMS! * /
rmSetStatusText ("", 0,01); / * Это значение для индикатора выполнения генерации карты при запуске игры * /
/ * (значение 0,00 - 1,00) * /
int myTiles= 8000; / * Это типичная переменная для размера карты * /
if (cMapSize == 1) { / * Это если функция проверяет, была ли карта выбрана нормальной или большой . cMapSize (1 = большой, 0 = нормальный) * /
myTiles = 12000; / * Это типичная переменная для размера карты, когда карта выбрана большой! * /
rmEchoInfo («Большая карта»); / * Это выходная информация только для отладчика RMS! * /
}
int mySize = 2.0 * sqrt (cNumberNonGaiaPlayers * myTiles );
/ * Выше размер карты будет переопределен. * /
/ * Поскольку размер карты теперь пропорционален квадратному корню из числа игроков, * /
/ * область карты будет пропорциональна числу игроков ! * /
rmEchoInfo("Размер карты =" + mySize + "mx" + mySize+ "м"); / * Другая выходная информация только для отладчика RMS! * /
rmSetMapSize ( mySize , mySize ); / * Эта команда создаст размер карты * /
rmSetSeaLevel (0); / * Эта команда установит уровень моря в метрах высотой * /
rmSetSeaType ("Река Амазонка"); / * Эта команда установит текстуру моря, если есть вода * /
rmTerrainInitialize ("texas \ ground2_tex", 4); / * Эта команда установит карту как карту воды или земли * /
/ * Если вы хотите воды, замените "texas \ ground2_tex","water", 0 и определенная текстура SetSeaType будут использованы! * /
rmSetStatusText ("", 0,20); / * Это следующее значение для индикатора выполнения генерации карты, полоса увеличивается * /
/ * Здесь можно добавить области: * /
rmSetStatusText ("", 0.40); / * Это следующее значение для индикатора выполнения генерации карты, полоса увеличивается * /
/ * Здесь добавляются игроки: * /
/ * Следующая команда выровняет место для областей игрока случайным образом по кругу: * /
rmPlacePlayersCircular ( 0,3, 0,3, rmDegreesToRadians (0,0));
/ * Теперь мы запускаем цикл для каждого игрока: * /
for (i = 1; <= cNumberNonGaiaPlayers) {
/ * Мы определяем область для каждого игрока: * /
int id = rmCreateArea ("Player" + i);
/ * Мы определяем высоту каждой области игрока: * /
rmSetAreaBaseHeight (id, 4.0);
/ * Мы определяем согласованность каждой области игрока (1.0 = гладкая окружность, 0.0 = грубая окружность): * /
rmSetAreaCoherence (id, 1.0);
/ * Мы определяем
высотное смешение каждой области игрока: * / rmSetAreaHeightBlend (id, 2);
/ * Определяем центр области игрока: * /
rmSetAreaLocPlayer (ID, я);
/ * Определяем размер области игрока: * /
rmSetAreaSize (id, 0.001,0.001);
/ * Определяем площадь области игрока: * /
rmSetPlayerArea (i, id);
/ * Определяем ландшафт области игрока: * /
rmSetAreaTerrainType (id, "texas \ ground3_tex");
/ * Мы определили все необходимые переменные для области игрока, теперь мы можем ее построить: * /
rmBuildArea (id);
/ * Мы 1. определяем новый объект, 2. добавляем в него начальный TownCenter , 3. помещаем / строим его на карте: * /
int towncenterID = rmCreateObjectDef («Начальный центр города» + i);
rmAddObjectDefItem ( towncenterID , "TownCenter", 1,0.0);
rmPlaceObjectDefAtLoc ( towncenterID , i, rmPlayerLocXFraction (i), rmPlayerLocZFraction (i), 1);

}
rmSetStatusText ("", 0.60);
/ * Это следующее значение для индикатора выполнения генерации карты, индикатор увеличивается * /
/ * Здесь можно добавлять объекты * / rmSetStatusText ("", 0.80); / * Это следующее значение для индикатора выполнения генерации карты, полоса увеличивается * / / * Здесь можно добавить триггеры * /

rmSetStatusText ( "", 1.00);/ * Это следующее значение для индикатора выполнения генерации карты, панель заполнена! * /
}
/ * Это конец нашего xs-файла! * / MyMap.xml содержит: <? Xml version = "1.0" encoding = "UTF-8"?> <Mapinfo detailsText = "Описание моей карты". ImagePath = "щ \ random_map \ all_maps" DisplayName = "My Map" cannotReplace = "" loadDetails = "" loadBackground = "щ \ random_map \ all_maps"> <нагрузки> щ \ random_map \ new_england \ new_england_ss_01 </ нагрузки> <нагрузки> ui \ random_map \ new_england \ new_england_ss_02 </ loadss<loadss>

Пояснения к командам XML вы можете найти выше .

Результатом этой карты является карта с плоским ландшафтом и текстурой ландшафта "texas \ ground2_tex". Добавлен объект для каждого игрока: начальный объект городского центра . Центры города расположены симметрично по кругу. Содержимое в XML- файле между <loadss> и </ loadss> не должно изменяться, если вы не знаете пути к изображениям (см. Terrains ).
Теперь вы можете скопировать и вставить текст выше в ваши файлы и попробовать!






11) КАК ТЕСТИРОВАТЬ КАРТУ

Прежде всего: это отличается от игры Age of Mythology.

1. ДЛЯ ТЕСТИРОВАНИЯ сценария карты:
Для тестирования сценария карты необходимо включить отладчик. Отладчик - это встроенная программа AOE3, которая позволяет вам находить ошибки в вашем скрипте XS. Отладчик по умолчанию отключен - даже если вы видите кнопку «Отладчик» в редакторе сценариев.
1.a. Как включить отладчик:
Самый простой способ - создать новый значок ссылки для AOE3 на рабочем столе. Выберите значок «Age of Empires III» на рабочем столе, затем щелкните по нему правой кнопкой мыши и выберите « Создать ссылку ». Вы получите новую иконку на рабочем столе: «Age of Empires III (2)». Сейчас, щелкните правой кнопкой мыши на новом значке «Age of Empires III (2)», затем щелкните правой кнопкой мыши на нем и выберите « Properties ». Во всплывающем меню вы видите целевую строку, похожую на эту:
«C: \ ... \ Age of Empires III \ Age3.exe»
Добавьте зеленый текст внизу и нажмите «ОК». Это оно!
«C: \ ... \ Age of Empires III \ Age3.exe» + debugRandomMaps
(для отладки сценариев AI это + debugAI, но здесь не нужен)
Примечание: НЕ используйте файл user.cfg для включения отладчика , Это может вызвать проблемы с будущими патчами игры.
1.b. Как отладить вашу случайную карту:
Теперь запустите AOE3, щелкнув новый значок отладчика AOE3, затем выберите новую карту в редакторе сценариев, выбрав «Файл -> Создать -> Тип =« Ваша карта »и включите кнопку отладчика!». Тогда сгенерируйте это. Следующий экран появится, если и только если в вашем скрипте есть какие-то необычные или неправильные команды:



2. Для PLAYTESTING сценария карты с игроками компьютера в автономном режиме:
вы ДОЛЖНЫ переместить файлы карты (MyMap.xs и MyMap.xml) из установочного каталога AOE3
« C: \ ... \ Programs \ Microsoft Games \ Age of Empires III» \ RM \ "
в каталог профиля Windows, обычно
" C: \ ... \ Мои документы \ Мои игры \ Age of Empires III \ RM \ "
Если вы ПРОСТО КОПИРУЕТЕ свои файлы, у вас возникнут проблемы позже!
Для повторного редактирования файлов пользовательской карты переместите файлы обратно в предыдущий каталог!
Примечания:
1. НЕ публиковать и не играть в карты онлайн, которые НЕ прошли отладчик без ошибок!
2. НИКОГДА не используйте имена карт для вашей новой карты, которая уже существует, ни в автономном режиме (SP), ни в сети (MP: LAN или ESO2)!
3. Не стесняйтесь изменять и переименовывать оригинальные сценарии случайных карт AOE3 - вы заплатили за это!
4. НЕ изменяйте и не используйте части пользовательских сценариев случайных карт без разрешения авторов.
Большинство сценариев RM оставляют свое имя и адрес в заголовке сценария. Итак, свяжитесь с ними, прежде чем вы опубликуете их модифицированный сценарий!


12) СЕЙЧАС ДАВАЙТЕ НАМ НЕСКОЛЬКО ВЕСЕЛЬЕ

Мы изменили оригинальную карту AOE3 "Texas" с летней кожи на зимнюю . Прочитав эту небольшую главу, вы сможете создать и воспроизвести следующую карту:



Особенности игры:
- Карта, которую вы создадите здесь, имеет ТОЧНО такой же игровой процесс, что и оригинальная карта "Техас"!
- В него можно играть в режиме одиночной игры, многопользовательском режиме и даже на ESO2 (он уже был опубликован, поэтому избегайте последнего шага - ОПУБЛИКОВАНИЯ. Если вы хотите сделать эту карту уникальной, прочтите полное руководство здесь.)

Шаг «0»:
Если у вас есть какие-либо вопросы, прокрутите вверх до верхней части этого сайта и выберите пункт в меню слева.

Шаг 1.
Сначала мы копируем исходные файлы карты в другой каталог:
исходные файлы карты называются « texas.xs » и « texas.xml » и обычно находятся в каталоге:
"C: \ ... \ Программы \ Microsoft Games \ Age of Empires III \ RM \".
Скопируйте их в любой другой каталог, например, "C: \".

Шаг 2.
Теперь переименуйте эти файлы следующим образом:
« texas.xs » -> « texas winter YourName.xs » - (просто замените YourName на свой псевдоним, во всех шагах)
и
« texas.xml » -> « texas winter YourName. XML ".
Затем щелкните правой кнопкой мыши по каждому файлу - один за другим - и выберите «Свойства». Во всплывающем меню свойств отключить«защита от записи» для каждого файла. Теперь вы можете редактировать эти файлы без каких-либо предупреждений.

Шаг 3.

Теперь переместите оба переименованных файла обратно в каталог, из которого вы их скопировали, обычно:
«C: \ ... \ Programs \ Microsoft Games \ Age of Empires III \ RM \».

Шаг 4.
Теперь откройте «Блокнот» и откройте новый файл « texas winter YourName.xml ».
Примечание. Лучше использовать текстовый редактор, который показывает строку, над которой вы сейчас работаете. Как и WinEdt 5.4 или любой другой. Кстати, этот текстовый редактор рулит, и я им регулярно пользуюсь - особенно для RMS. «Текстуризатор 1.7» или выше тоже отлично. Но теперь вернемся к основам ...
Содержание файла:

<? xml version = "1.0" encoding = "UTF-8"?>
<mapinfo details = "25997" imagepath = "ui \ random_map \ texas" displayNameID = " 25996 " neverReplace = ""
loadDetails = "35876" loadBackground = " ui \ random_map \ texas \ texas_map ">
<loadss> ui \ random_map \ texas \ texas_ss_01 </ loadss>
<loadss> ui \ random_map \ texas \ texas_ss_02 </ loadss>
<loadss> ui \ random_map \ texas \ texas_ss_03 </ loadss >
</ mapinfo>


Измените его на (только черный жирный текст ... и избегайте разрывов строк!):

<? xml version = "1.0"encoding = "UTF-8"?>
<mapinfo details = "25997" imagepath = "ui \ random_map \ texas"DisplayName = " Texas Winter ВашеИмя " cannotReplace = ""
loadDetails = "35876" loadBackground = "щ \ random_map \ техасский \ texas_map">

<нагрузки> Ui \ random_map\ Yukon \ yukon_ss_01 </ нагрузки>
<нагрузки> Ui \ random_map \ Yukon \ yukon_ss_02 </ loadss>
<loadss> ui \ random_map \ yukon \ yukon_ss_03 </ loadss>
</ mapinfo>

Шаг 5:
"file (изменения отображаются цветными ):
ПРИМЕЧАНИЯ:
1. НЕ делайте разрывы строк при вводе текста!
2. ТОЛЬКО текст в шрифте Courier должен быть изменен в соответствующей строке скрипта!
3. Выделенный серый текст: / * старым ... * / можно пренебречь, если хотите. Это только для вашей помощи.

/ * Строка 001: * /
// TEXAS WINTER - сделана YourName - с помощью учебника по RMS M0nTy_PyTh0n / * old was "TEXAS" * /
/ * Строка 002: * /
//CurrentMonth Year - Учебное пособие можно найти здесь: http://hyenastudios.mugamo.com/aoe3rmstutorial.htm / * old was "October 2003" * /
/ * Строка 061: * /
rmSetLightingSet ("Yukon"); / * старое освещение было "Техас" * /
/ * Строка 065: * /
rmSetBaseTerrainMix ("снег Юкон"); / * старым миксом ландшафта было "texas_grass" * /
/ * строка 066: * /
rmTerrainInitialize ( "yukon \ ground1_yuk" , 5.0); / * старый ландшафт был "texas \ ground1_tex" * /
/ * строка 067: * /
rmSetMapType ("yukon"); / * старый тип карты был "техас"

/ * старый тип карты был "трава" * / / * строка 184: * / rmAddObjectDefItem (randomTreeID, "TreeYukon" , 1, 0.0); / * старый объект был "TreeTexasDirt" * / / * строка 192: * / rmAddObjectDefItem (StartAreaTreeID, "TreeYukon" , 1, 0.0); / * старый объект был "TreeTexasDirt" * / / * строка 246: * / rmSetAreaTerrainType (westDesertID, "yukon \ ground4_yuk" ); / * старый ландшафт был "texas \ ground4_tex" * / / * строка 247: * /

rmAddAreaTerrainLayer (westDesertID, "yukon \ ground1_yuk" , 0, 4);"texas \ ground1_tex" * /
/ * Строка 248: * /
rmAddAreaTerrainLayer (westDesertID, "yukon \ ground2_yuk" , 4, 10); / * старый ландшафт был "texas \ ground2_tex" * /
/ * строка 249: * /
rmAddAreaTerrainLayer (westDesertID, "yukon \ ground8_yuk" , 10, 16); / * старый ландшафт был "texas \ ground3_tex" * /
/ * строка 251: * /
rmSetAreaMix (westDesertID, "yukon snow" ); / * старым миксом ландшафта было "texas_dirt" * /
/ * строка 270: * /
rmSetAreaTerrainType (id, "yukon \ ground2" ); / * старый тип местности был "
/ * Строка 704: * /
rmSetAreaCliffType (cliffEastID, "Rocky Mountain2" ); / * старый тип скалы был "Texas Grass" * / / * Строка 710: * / rmAddAreaTerrainLayer (cliffEastID, "yukon \ ground2_yuk" , 0, 2); / * старый ландшафт был "texas \ ground2_tex" * / / * строка 745: * / rmSetAreaCliffType (cliffWestID, "Rocky Mountain2" ); / * старый тип утеса был "Техас" * / / * строка 751: * / rmAddAreaTerrainLayer (cliffWestID, "yukon \ ground2_yuk" , 0, 2); / * старый ландшафт был "техас \ ground2_tex"

rmSetAreaForestType (westForest, "юконский лес" ); / * старый тип леса был "техасская лесная грязь" * /
/ * строка 845: * /
rmSetAreaForestType (eastForest, "юконский снежный лес" ); / * старый тип леса был "техасский лес" * /

Готово Редактирование! Поздравляем !!!

Шаг 6:
Теперь сохраните оба отредактированных файла и переместите ( MOVE! NOT COPY! ) Оба файла в каталог произвольной карты , обычно это:
" C: \ ... \ Мои документы \ Мои игры \ Age of Empires III \ RM \ " ,

Step7:
Сыграй на своей новой карте! Выберите свою карту в меню запуска Skirmish, нажав кнопку «Пользовательские карты».
Наслаждайтесь!

ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ:
1. Вы также можете вносить изменения построчно и генерировать карту в редакторе сценариев, чтобы увидеть эффекты. Иногда вам нужно загрузить карту несколько раз (или с другим номером игрока), чтобы увидеть ее.
2. Если вам не удалось, перейдите к этой главе выше!
3. Если вам лень модифицировать эту карту самостоятельно, то позор вам;) , но скачайте ее здесь !
4. НЕ публикуйте эту карту онлайн. Я уже сделал это! Но теперь у вас есть новые возможности для создания новых карт, верно ?!







13) КАК ПОЛУЧИТЬ ПОМОЩЬ

Некоторые способы получить помощь:
1. Посмотрите официальные сценарии RM Ensemble Studios, чтобы узнать соглашения и ярлыки. Много строк в их сценариях RM имеют комментарии для вашего лучшего понимания.
2. Используйте отладчик XS (см. Выше).
3. Используя консоль, вы можете получить справку для любой команды, набрав: help («команда») ».
4. Посмотри онлайн. Фан-сайты часто являются отличным источником информации о сценариях случайных карт.
5. Сохраняйте это простым. Если что-то в вашем скрипте кажется сломанным, попробуйте изолировать пробл.
Пожайлуста, оцените материал. Ваша оценка нам очень важна! Спасибо!
↓ ↓ ↓
Дата: , 16:43 | Просмотров: 4857 | Добавил: tupi857 | Автор:
Теги: статьи по Age of Empires III (AoE 3)
Смотрите также
Комментарии (1)
tupi857 15/05/2019 16:44 (Материал) 0 Спам
В форуме это невозможно поместить поэтому, я сделал как бы статью.

Пятёрка форумщиков

В сети всего: 1
Гостей: 1
Пользователей: 0


Сегодня посетили нас: