Союз | Union

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Союз | Union » Картостроение и скриптовка » "Школа картоделов"


"Школа картоделов"

Сообщений 1 страница 30 из 1210

1

В связи с острой нехваткой новых карт, и скриптов к ним, я решил открыть новую тему. Цель этой темы  - научить всех желающих форумчан (а я надеюсь сдесь таковые найдутся) рисовать качественные карты  и писать соответствующие (НЕ КРИВЫЕ и НЕ ГЛЮЧНЫЕ!!!) скрипты к ним. Пока я еще не определился с порядком изложения информации и разъяснений к ней. Их я выложу чуть позже. Сама же идея создать эту тему возникла благодаря Simeo, так как он, ОДИН!!!!!!!! из немногих, вызвался помочь рисовать карты к ГЗМ (которые сейчас нужны как воздух). Надеюсь, что еще кто нибудь откликнется, и изъявит желание научиться этой непростой профессии - "картодел".
Так же очень надеюсь на помощь других форумчан-картоделов.

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

http://rapidshare.com/files/154158176/B … p.rar.html

В архиве следующие файлы:
1)Blitzkrieg SciTe Editor - удобная программа для написания скриптов. Хотя может у тебя какая то другая. Без разницы.
2) Basic Lua Lessons - идеальное пособие для новичков картоделов (а иногда и для старичков  :D ). Правда на английском, так что прийдется попереводить. Зато с примерами. Тебе надо обязательно начать именно с этого курса обучения, так как в нем довольно доступно выложены основы основ. Думаю, что он не вызовет особых трудностей, и ты с ним легко справишься.
3) 18_Lua - справочник по скриптовым командам языка Луа, который используется при скриптовании миссий блицкрига.
4) Blitzmaster 1.4 - так же очень полезное справочное руководство по маппингу и сборке миссий.

Думаю, пока этого достаточно. Что бы продолжить обучение, тебе нужно освоить Basic Lua Lessons. Пока отложи свою миссию в сторону (что бы не отвлекаться) и тщательно изучи это руководство. Если будут по нему вопросы, сразу пиши. Если нет, отпишись, как только освоишь Basic Lua Lessons.

П.С.: Не советую копировать и переделывать под себя чужие скрипты. Лучше научишься самостоятельно писать свои (с ноля). Это не так долго, как кажется. Зато в своих скриптах ты всегда сможешь разобраться, определить и устранить ошибку (если таковая будет), а вот в чужих, иногда "подводные камни" даже найти сложно, не то что исправить.

П.П.С.: Надеюсь ты хоть немного знаком хоть с каким либо языком программирования. Это очень важно, так как при написании скриптов необходимо СТРОГО соблюдать синтаксис (поставишь всего одну!!! точку с запятой не туда куда надо, и ВЕСЬ!!! твой скрипт будет АБСОЛЮТНО НЕ РАБОЧИМ!!!!!!!)  :D

Цитата, приведенная выше - сообщение из темы "Делаем карту (с грехом пополам) ". Она по сути и стала толчком к идее создать подобную "школу".
В ближайшие пару дней постараюсь написать небольшое руководство по редактору карт. Далее по скриптам, и т.д.

П.С.: Всех тех, кто совсем ноль в программировании, прошу не пугаться. Если надо, все доступно объясню. Не так страшен черт, как его малюют...  :D
Пишите сюда по любым вопросам, касающимся создания карт и написания скриптов. Я постараюсь на них ответить.
Кто хочет научиться с ноля, маякните плз.

Отредактировано Reks (2008-10-15 12:50:49)

+3

2

Reks написал(а):

В связи с острой нехваткой новых карт, и скриптов к ним, я решил открыть новую тему....
...В ближайшие пару дней постараюсь написать небольшое руководство по редактору карт. Далее по скриптам, и т.д.

Очень нужное дело! Молодец! Полностью поддерживаю это начинание.

0

3

Дело очень нужное, особенно мне :-)
Тока у меня терпения и времени нет :-)
Поэтому лучше осваивать в процессе по вопросам и живым примерам
О себе скажу, что опыта программирования нет, есть только опыт вёрстки сайтов (но абсолютно самостоятельный  и может быть неправильный), что в принципе похоже, правда там всё наглядно, особенно в программе Дримвьювер
Думаю, что нечто подобное и там, примерно как обязательные теги всякое такое

Так что считай меня полным нулем, о чем я и маячу :-)

Так что всё лучше делать параллельно, кстати о чём в справочнике и написано- можно копировать скрипты из других миссий, изменяя номера групп на свои

Для начала очень бы хотелось разбор какой-нибудь задачи миссии с объяснением по строчкам и символам- что есть что и для чего служит, каким задачам
А также что-то про подобное обязательным тегам (ну типа заголовка в странице сайта, там обычно куча невидимых строк начала)

И еще, буду подгонять под свои потребности :-), есть такой пример- нужна атака войск противника на мои позиции в самом начале миссии с простеньким примером и разбором посимвольно
:-)

0

4

Если че, я умею делать карты. Скрипты с нуля пока писать не умею, но могу копировать куски с других карт (гланое - работает).

0

5

Вот и еще такой вопрос (для меня очень важный)
Карта практически готова, выставлены войска, есть примерный сценарий, где расписаны действия сторон

А дальше?
С чего начинать?

0

6

Ну что ж. С ноля, так с ноля.

Поехали.

Разберем на пальцах скрипты приведенные в Basic Lua Sessions.

Урок первый. "Написание функций и их запуск".

Пример:
На карте имеется автомобиль которому мы присвоили скриптовый номер 100 (как присваивать надеюсь не надо объяснять). Наша задача - заставить его перемещаться в определенную точку в определенное время. Простейший скрипт данного перемещения (да и вообще просто простейший скрипт):

function Init()
RunScript("MoveCar", 3000);
end;

function MoveCar()
Cmd(0, 100, 916, 1516);
Suicide();
end;

Начнем по порядку. Функция - это небольшой блок/подпрограмма выполняющая определенное действие. В данном скрипте изображено две функции: Init и MoveCar. Функция всегда начинается с ее объявления словом function, и заканчивается оператором End. Все что между ними - является телом функции. Правописание как вы уже догадались следующее:
function <имя ф-ции>() - после function обязательный пробел, перед () пробела нет, после () точка с запятой не ставится. Точка с запятой ставится после End, при чем обязательно.
Точка с запятой обычно обозначает окончание чего то, будь то функция, или оператор, или команда. Так же для удобства (хотя это не обязательно) функции еще отделяют друг от друга пустой строкой, что бы при проверке было легче читать и текст не слипался в бесконечный непрерывный поток строк.

Рассмотрим теперь обе функции поочередно. Функция Init - это функция запуска. Она неотемлемая часть любого скрипта, так как все остальные функции скрипта необходимо вызывать. Для этого и служит Init. Она запускается автоматически в самом начале, и приводит в действие (вызывает) остальные функции скрипта. Без Инита скрипт работать не будет. Ф-ция Init срабатывает только один раз. Она как стартер в автомобиле.
Как мы видим, тело функции содержит только одну команду/оператор (в данном примере): 

RunScript("MoveCar", 3000); 

Операторы, в отличии от функций заканчиваются точкой с запятой, без End-а; функция может содержать в себе любое кол-во операторов.
В ворд-файле 18_Lua есть подробное описание всех команд/операторов, используемых при написании скриптов к блицу. Как видим:

RunScript (“Name”, iPeriodicity , [iNumberOfRepetitions])
Запускает сценарную функцию с именем Name каждые iPeriodicity миллисекунд. Необязательным параметром iNumberOfRepetitions можно указать число повторений вызовов.

То есть, применительно к нашему случаю оператор RunScript должен запускать функцию MoveCar каждые 3 секунды. Однако сдесь есть нюанс. Оператор будет срабатывать каждые 3 секунды только в том случае, если функция (в которой он находится) будет постоянно активна (включена). А так как функция Init срабатывает только один раз (только в первый цикл) и сразу отключается, то следовательно оператор RunScript сработает только один раз (через 3 секунды после запуска ф-ции Init).
Сразу оговорюсь, что один цикл - это полное прочтение программой (игрой) содержания скрипта от верха до низа (программа читает скрипт построчно). Игра повторяет цикл постоянно в течении всей миссии. В зависимости от "длинны скрипта" время цикла может немного колебаться, однако это все равно будут миллисекунды.

Что то я немного ушел в сторону (хотя информация тоже нужная). Итак, мы видим, что при запуске миссии ф-ция Init по средству оператора RunScript запустила ф-цию MoveCar с задержкой 3 секунды. Все. Ф-ция Init выполнила свое предназначение, и пока ее можно больше не вспоминать.

Перейдем ко второй функции - MoveCar:

function MoveCar()
Cmd(0, 100, 916, 1516);
Suicide();
end;

Как видим, она содержит два оператора. Каждый из операторов обязательно заканчивается точкой с запятой и начинается с новой строки! Операторы выполняются в порядке очередности один за другим. Синтаксис операторов можно посмотреть в ворд-файле 18_Lua.

Оператор Cmd:

GiveCommand (iAction, iScriptID [, params ...])
Дает команду iAction юниту со сценарной группой iScriptID. Необходимые параметры params должны быть перечислены через запятую. Cmd — синоним GiveCommand. Команда отдается юниту сразу же. См. значения команд в разделе «Команды юнитов» (в ворд файле 18_Lua). Все координаты выдаются в сценарных (SCRIPT) точках.

То есть в момент срабатывания ф-ции MoveCar, а следовательно и оператора Cmd, будет дана команда 0-перемещаться юниту (или юнитам) со скриптовым номером 100 в точку с координатами х=916, у=1516.

Далее идет оператор Suicide();  Если Suicide вызывается в теле функции, вызванной через RunScript, то после её выполнения функция больше не вызовется. То есть после срабатывания этого оператора в последующих циклах функция будет уже отключена. Она останется отключенной либо до окончания миссии, либо до момента, когда эта функция вновь будет вызвана с помощью любой другой активной функции по средству оператора RunScript.
В основном Suicide нужна для того, что бы юнит получил команду только один раз, а не получал ее с каждым новым циклом. То есть что бы ф-ция сработала, и сразу же отключилась.

Ну вот собственно и все. Теперь, когда мы все надеюсь поняли, опишем вышесказанное в трех строчках:
1) При запуске миссии срабатывает Init, который запускает ф-цию MoveCar через 3 сек.
2) По истечению 3 секунд запускается ф-ция MoveCar которая отдает команду машинке "100" двигаться в точку 916-1516.
3) Машинка отправилась в путь, а функция завершила свою работу и более не активна.

Пока все. Можете самостоятельно попробовать разобраться в нескольких следующих уроках. Если не разберетесь, завтра их разжуем вместе.

А дальше?
С чего начинать?

Нужен алгоритм. По принципу: Выдали первое задание; Если выполнили 1е выдали второе + срабатывает контратака к примеру; выполнили второе и отбили контратаку - получили 3е задание и т. д. до самого конца подробно, так как тебе это скоро прийдется перенести в скрипт.

Отредактировано Reks (2008-10-15 20:42:19)

+6

7

в скриптах нечего сложного нет , мой совет либо знай все команды либо постоянно пользуйся справочником.
И как уже сказано алгоритм "мать порядка". самое главное знать чего ты хотишь от юнитов.
А юнитов объединяй в скриптовые группы) так легче. + на карте при расстановке используй стартовые команды , такие как окапывание или биноколь.

0

8

Бинокль из окопов почемуто не работает, а через скрипт работает. Мистика просто! И такой мистики в блицевском редакторе просто жуть как много. Иногда все прописано со стопроцентной уверенностью, что будет работать именно так, а работает вообще непонятно по какому принципу. Это иногда так бесит!!! >:-(

0

9

Reks написал(а):

Урок первый. "Написание функций и их запуск".

Очень доходчиво и что самое главное "разжеванно" ! +
Времени пока нет скриптованием заниматься, буду твои уроки сохранять, на будущее. Просьба и дальше также подробно.

0

10

И еще такой вопрос
Можно ли часть скрипта как-то проверить...ну например 1 задание...или начало миссии и 3 задание, чтобы знать, правильно ли сработает и так как планировалось, или нужны коррективы

0

11

И еще такой вопрос
Можно ли часть скрипта как-то проверить...ну например 1 задание...или начало миссии и 3 задание, чтобы знать, правильно ли сработает и так как планировалось, или нужны коррективы

Можно, но надо уметь включать и выключать отдельные части скрипта. К тому же сам скрипт должен быть написан таким образом, что бы была возможность это сделать.

П.С.: Я не могу объяснить тебе как это делается, если ты не знаешь основных принципов скриптования. Ты просто 90% моего объяснения не поймешь, и время будет потрачено зря.
Если наберешься немного терпения, то за недельку (выходные не в счет, меня не будет) научишься писать простые, но качественные скрипты. Плюс к этому, научишься читать и понимать чужие скрипты! Вот тогда уже можна будет приниматься за твой скрипт, и как ты говоришь "по ходу" задавать вопросы по непонятным моментам.

Отредактировано Reks (2008-10-16 11:03:18)

0

12

simeo написал(а):

Можно ли часть скрипта как-то проверить...ну например 1 задание...или начало миссии и 3 задание, чтобы знать, правильно ли сработает и так как планировалось, или нужны коррективы

выводи сообщение на экран после отработки скрипта по условию выполнен или нет

0

13

Reks
Я как раз к выходным полностью закончу карту и поизучаю этот lua
Чтоб быть свободным

Ruslan32
В том то и трудность, ибо не знаю как

Отредактировано simeo (2008-10-16 20:43:24)

0

14

Детальный разбор редактора карт (начало).

2. Панель управления.

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

2.1. Меню File.

Меню File – очень схожа для многих программ. Она содержит следующие пункты:

New – выберите этот пункт, что бы создать новую карту. Откроется окно настроек новой карты. В этом окне необходимо задать:

Размер карты (от 1 до 32 патчей; 1 патч = 16×16 тайлов сетки). По умолчанию создается квадратная карта, для которой требуется указать только один размер в выпадающем списке Size X (Размер по X). Если вы снимете флажок Square Map (Квадратная карта), станет доступным поле Y (По Y) и у вас появится возможность задать задавать длину и ширину карты независимо.

Имя карты в поле Name (Имя). Если не задан полный путь, карта будет по умолчанию храниться в подкаталоге ..\data\maps\ каталога игры. Вы можете явно задать расширение имени файла (BZM или XML), тем самым определяя формат файла для хранения карты. Если расширение имени файла не задано (или задано отличное от BZM и XML), по умолчанию карта будет храниться в формате BZM и соответствующее расширение имени файла будет добавлено к заданному вами имени.

Тип ландшафта («время года») в выпадающем списке Season (Время года). Доступны следующие значения: Africa (Африка), Spring (Весна), Summer (Лето), Winter (Зима).

Используемую модификацию (MOD) игры в выпадающем списке MOD (Модификация). Значению <no MOD> (без модификации) соответствует отказ от использования любой модификации, значению <current MOD> (текущая модификация) отвечает использование загруженной в данный момент модификации.

Выполнив настройку создаваемой карты, нажмите кнопку OK. В области карты появится пустая карта с выбранным типом ландшафта.

Open, save, save as – стандартные функции загрузки/сохранения;
Для того, что бы открыть существующую карту необходимо выбрать пункт open. Появится окно открытия существующей карты. В этом окне необходимо задать:

Путь и имя карты в поле Name (Имя). Можно воспользоваться кнопкой Browse... (Обзор...), чтобы открыть стандартное окно выбора файла.

Используемую модификацию (MOD) игры в списке MOD (Модификация).
Значению <no MOD> (без модификации) соответствует отказ от использования любой модификации; значению <current MOD> (текущая модификация) отвечает использование загруженной модификации; значению <map MOD> (модификация карты) соответствует использование модификации, ассоциированной с открываемой картой.
Заполнив поля, нажмите кнопку OK. В области карты появится выбранная карта.
К тому же, из редактора можно открыть любую карту, которая уже есть в базе данных игры. Дя этого нажмите на стрелку в правой части поля Name. Из появившегося списка выберите интересующую вас карту.

Create Random Map – не изученная мной функция, так как случайными картами я не занимаюсь;

Save in XML/Save in BZM – сохранить в формате XML/BZM. Обычно все карты сохраняются и хранятся в папке/паке Дата в формате BZM. Для блицкрига это стандартный формат файла карты. Однако иногда необходимо произвести редактирование неких параметров, которые нельзя изменить с помощью инструментов редактора. Для этого введена возможность сохранить карту в XML формате. Редактирование этих «хитрых» параметров производится уже непосредственно в XML-редакторе.
Пример: Присвоить мосту скриптовый номер можно только через XML-редактор.

Recent Blitzkrieg Maps – последние, недавно загруженные карты;

Exit – выход из программы.

2.2 Меню Мар.

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

Меню Мар содержит следующие вкладки и пункты:

Fill Entire Map – функция, позволяющая залить всю карту определенным типом земли. Для этого необходимо выбрать нужный тайл на вкладке Tiles (Тайлы) свитка Terrain (Ландшафт) панели Workspace (Рабочая панель в левой части экрана), и нажать на Fill Entire Map. Весь ландшафт карты окрасится выбранным типом земли.

Player Camera – эта клавиша позволяет установить стартовую позицию камеры, которая будет отображаться в самом начале миссии. Наведите рабочее окно редактора на то место на карте, которое должно отображаться при запуске миссии, и так же выберите игрока, для которого устанавливаете камеру. Игрока можно выбрать в свитке Objects, Fences, Brifges рабочей панели, либо вверху экрана на вспомогательной панели справа от иконки камеры. Выбрав игрока, нажмите на клавишу Player Camera. Появится зеленый значок камеры ровно по центру окна. Теперь при запуске миссии камера игрока будет наведена на это место.
По умолчанию камера всегда наведена на левый нижний угол карты.

Diplomacy – вкладка, позволяющая настраивать стороны игроков (но не их национальности!). При нажатии на нее, появляется окно Diplomacy. В этом окне можно настроить количество игроков, и принадлежность их к сторонам (Side). Сторон в игре всего три: 0 – игрок  (и его союзники), 1 – компьютерный противник, 2 – нейтральная сторона. К нейтральному игроку пассивно относятся как юниты игрока, так и юниты противника. На роль нейтралов хорошо подходит гражданское население и мелкая живность.
Стороны игроков можно изменять. Для этого нужно выделить в списке интересующего игрока (строка станет синей), при этом станут активными метки в правой части окна Side0 и Side1, при помощи которых и изменяется сторона игрока. Принадлежность нейтрального игрока изменять нельзя. Вне зависимости от количества игроков в списке, нейтральный игрок всегда будет последним в списке (последним по номеру).

http://s60.radikal.ru/i168/0810/60/5320ffbf1765.jpg

Рис.1.

Количество игроков, их номера и принадлежность их к сторонам отображено в окне. Однако не путайте столбцы. В столбце Player обозначены скриптовые номера игроков, а в столбце Side – сторона, к которой игрок принадлежит.
Иногда требуется создать юниты союзные стороне игрока (0), которые будут действовать самостоятельно, однако не будут находиться под контролем игрока. Другими словами нужно создать независимого союзника. Для этого нужно нажать на клавишу Add (добавить). В списке появится новый игрок под номером «3». Однако сдесь есть один нюанс. Вы создали игрока не под номером «3», а игрока под номером «2», так как нейтрал всегда последний и он просто «сместился» в конец. Теперь нужно выбрать созданного ирока под номером 2, и присвоить ему сторону игрока, то есть – Side0 (рис.1).
Примечание. Из-за непонятного принципа действия редактора, юниты игрока 2 (то есть союзника, если вы его создали) не будут отображаться в игре! Что бы обойти эту проблему, необходимо создавать союзные юниты как нейтральные, то есть принадлежащие игроку 3. И далее, уже с помощью скрипта передавать их игроку 2. В отличие от юнитов, авиация игрока 2 подобных манипуляций не требует и работает корректно.

Две нижние выпадающие вкладки Game Type и Attacking Side предназначены для изменения типа карты:

Single Player – одиночная карта;
Flag Control – сетевая карта по захвату флагов;
Assault – обычная сетевая карта типа наступление/оборона. В этом типе карты можно настраивать атакующую сторону в самой нижней вкладке Attacking Side.

Unit Creation Info – вкладка, при помощи которой можно настроить авиацию на карте для каждого из игроков, кроме нейтрала (у него нет авиации). Сдесь же, можно присвоить каждому игроку свою национальность. Данная закладка открывает окно Map Unit Creation Info (рис.2), размеры которого можно изменить, для удобства.

http://s51.radikal.ru/i132/0810/ef/ba050255d971.jpg

Рис.2.

Как мы видим, для каждого из игроков, в окне имеется отдельное дерево. На рис.2 изображено раскрытое дерево для игрока (0). Рассмотрим его поподробнее. Дерево имеет две главные ветки: Aviation и Party name.

Ветка Aviation, позволяет полностью настроить авиацию. Рассмотрим поочередно все ее пункты/подветки:
Aircrafts – подветка, содержащая в себе все настраиваемые данные по всем типам самолетов. Их всего пять:

Scouts – самолеты разведчики;
Fighters – истребители;
Paradropers – десантные самолеты;
Bombers – бомбардировщики;
Attack planes – штурмовики;

Все эти пять веток имеют одинаковую структуру. Для примера на рис.2 открыта ветка Bombers.
Первый пункт Name содержит название самолета, который используется в данном типе авиации. Что бы его изменить, дважды щелкните по нему. Появится выпадающее окошко с полным списком самолетов, которые доступны в игре. Выберите требующийся самолет кликнув на него в списке. Однако здесь требуется некоторое знание типов и моделей самолетов. Если, к примеру, в ветку бомбардировщиков вы поставите истребитель, то соответственно этот тип авиации будет работать не правильно и не сможет выполнить своих задач. Вы можете сами поэкспериментировать, подставляя «неправильные» типы авиации в редакторе, и увидеть, что из этого выйдет. 
Второй пункт Formation Size - показывает количество самолетов данного типа, которое одновременно будет вылетать на карту за один заход (размер звена). Цифру в окне можно изменить, дважды кликнув по ней, и затем ввести новое значение (подобным образом вводятся практически все величины в редакторе).
Третий пункт Count – показывает общее количество самолетов данного типа, имеющихся на «виртуальном» аэродроме за пределами карты.

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

После ветки Aircrafts идут следующие пункты:

Paratroop squad name  - пехота/десантники которые будут десантироваться с транспортных самолетов (если таковые на карте предусмотрены).

Paratroop squad count – количество десантных отрядов, которые выпадут из одного самолета! Если у вас в звене 4 транспортных самолета, и Paratroop squad count = 4, то в итоге на карту высадится 16 отрядов (по 4 с каждого самолета!).

Relax time – время, которое пройдет с момента последнего вызова авиации до момента, когда авиация вновь будет доступна. Это время измеряется в секундах. Внимание, таймер Relax time  активизируется в момент, когда самолет только вылетает на карту, а не когда он ее покидает! Если указать слишком маленькое время, например 10 -15 секунд, то тогда возможен многократный вызов авиации на карту за короткий промежуток времени. При этом самолеты разных типов будут одновременно находиться на карте. Если нужно, что бы на карте мог присутствовать только какой либо один тип авиации, тогда желательно выставить значение Relax time не менее 300 секунд (5 минут).

Appear points – это точки вылета авиации. Что бы авиация была доступна на карте, необходимо, что бы была хотя бы одна точка вылета. При чем, у каждого игрока свои отдельные точки вылета! То есть, авиация игрока (1) не может появиться через точку вылета игрока (0)!
Что бы назначить точку вылета, необходимо дважды кликнуть на надпись No appear points. Появится окно Appear points.  Изначально оно пустое. Что бы добавить новую точку вылета, нажмите Add. В окне появится точка с индексом (0), и координатами х=0 у=0. Это координаты нижнего левого угла карты, и они присваиваются каждой новой точке автоматически. Что бы их изменить, необходимо выделить нужную строку (точку) в окне и нажать Properties. Появится еще одно небольшое окно, в котором можно будет ввести новые координаты.
В редакторе карт используется две системы координат: VIS и Script. VIS-координаты используются при назначении точек вылета авиации, а так же, частично для указания маркеров заданий на миникарте, уже непосредственно в игре. Script-координаты используются в основном в скриптах. И те и другие координаты можно увидеть под рабочим окном редактора. Поводите курсором по рабочему окну, и вы увидите как соответственно изменяются цифры в строке координат.
Вводя новые координаты, старайтесь руководствоваться следующими принципами:
- Самолеты мгновенно появляются в точке вылета, а не пролетают сквозь нее. Поэтому размещайте точку вылета как можно ближе к краю карты, что бы самолеты как будто прилетали из-за края, а не телепортировались на карту;
- Не путайте стороны игроков. Иногда, из-за подобных ошибок, может возникнуть ситуация, при которой самолеты будут прилетать со стороны территории противника. Это будет выглядеть по меньшей мере странно и непонятно;
- Можно задать несколько точек вылета. Игра будет задействовать их поочередно, однако первую точку (при первом вылете) выберет не по порядку, а случайно.

По окончанию всех вышеуказанных манипуляций по введению точек вылета, строка No appear points должна измениться на N appear points, где N – количество заданных точек вылета.

Ниже ветки  Aircrafts есть еще один пункт – Party name. Через него задается национальность каждому из игроков. Национальность влияет на отображение в статистике, и на некоторые мелкие нюансы. Один из них – артиллеристы. Если вы поставите на карту немецкую пушку, но в национальности будет стоять СССР, то и артиллеристы в этой пушке будут советскими.

Script – позволяет привязать к карте файл скрипта. Для того что бы скрипт работал, необходимо, что бы файл скрипта лежал в одной и той же папке, что и файл карты. А именно в папке Blitzkrieg/Data/maps.

Check map – эта функция позволяет проверить карту на различные ошибки.
Карта будет проверена на:

- правильность связей между объектами (солдатами в окопах или зданиях, грузовиками и орудиями при них, паровозами и прицепленными к ним вагонами);

- отсутствие индентичных объектов в одной точке карты (это может произойти случайно при расстановке объектов);

- отсутствие «ничьих» (то есть не принадлежащих каком-либо игроку) объектов (такие объекты могут появиться при удалении игроков).

После проверки карты выводится диагностическое сообщение. Результаты проверки также записываются в файл: ..\data\ checkmap_log.txt.
Проверка карты выполняется автоматически при каждой операции сохранения карты, но без вывода диагностических сообщений.

Update map – эта функция позволяет «подогнать» объекты к неровностям ландшафта (холмы/впадины). Чтобы привести расположение объектов на карте в соответствие изменениям ландшафта, выберите пункт Update Map (Обновить карту) меню Map (Карта) либо нажмите кнопку Update terrain and AI accordig to all modifications (Привести ландшафт и AI в соответствие изменениям) на панели инструментов Map (Карта).

Примечание.  Эта операция занимает заметное время, но ее рекомендуется производить время от времени, особенно если вы сталкиваетесь с проблемами при редактировании дорог и рек.

Instante Update map mode – если данная функция активна, то при изменении высоты  рельефа любого участка карты, объекты и юниты будут двигаться вместе с рельефом. Они будут как бы привязаны к точке рельефа, которую мы опускаем или поднимаем. Чтобы включить или отключить режим немедленной подстройки объектов на карте, выберите пункт Instant Update Map Mode (Режим немедленного обновления карты) меню Map (Карта) либо нажмите кнопку Toggle (ON or OFF) instant terrain and AI update (Немедленное обновление ландшафта и AI (Вкл./Выкл.)) на панели инструментов Map (Карта).

Fit objects to grid – привязывает объекты к сетке.

Примечание. Отобразить или спрятать сетку тайлов вы можете с помощью команды Grid (Сетка) меню Layers (Слои).

(Продолжение следует)

П.С.: Если что то не понятно, или вы обнаружили ошибки - пишите.
Буду выкладывать такие куски по скриптам и по редактору по мере их написания.

+6

15

Я из выше перечисленного не знал как создавать союзника, за это спасибо.

0

16

Всё отично написано!
Помогите выбрать авиацию для миссии

для англичан- разведчики, истребитель и штурмовик

Для итало-немцев- разведчик, истребители бомбардировщики и штурмовики

0

17

Разбор полетов Basic Lua Sessions.

Урок-2. Добавление второй функции с последовательным набором команд.

Как и в первом уроке, у нас есть авто со скриптовым номером 100. Но теперь на карту добавлен грузовик под номером 101. Авто действует по тому же принципу, что и в уроке-1. Грузовик немного иначе. Ниже приведен скрипт второго урока:

function Init()
RunScript("MoveCar", 3000);
RunScript("MoveTruck", 7000);
end;

function MoveCar()
Cmd(0, 100, 916, 1516);
Suicide();
end;

function MoveTruck()
Cmd(0, 101, 1583, 223);
QCmd(0, 101, 1890, 1570);
QCmd(0, 101, 1100, 1890);
Suicide();
end;

Как видим, это тот же скрипт, что был рассмотрен в первом уроке, но в него добавлена новая функция – MoveTruck. Эта функция, как и ф-ция MoveCar, запускается через Init. С момента старта миссии ф-ция MoveCar запускается через 3 секунды, а MoveTruck – через 7 секунд. Как видим, обе функции запускаются не зависимо друг от друга (только с разной временной задержкой), и поэтому будут работать параллельно.
Рассмотрим новую ф-цию MoveTruck. Она очень похожа на ф-цию MoveCar, но имеет больше операторов.   С оператором Cmd мы уже знакомы, а вот QCmd – необходимо рассмотреть.
Из справочника 18_Lua:

GiveQCommand (iAction, iScriptID ,[ params ...])
Добавляет команду iAction в список команд юниту со сценарной группой iScriptID. Необходимые параметры params должны быть перечислены через запятую. QCmd — синоним GiveQCommand. Функция GiveQCommand может вызываться «пачкой», например, для составления промежуточных точек пути, по которому будет перемещаться юнит. В начале такой пачки должна быть функция GiveCommand, чтобы команда отдалась юниту сразу же. См. значения команд в разделе «Команды юнитов». Все координаты выдаются в сценарных (SCRIPT) точках. С помощью GiveQCommand (QCmd) можно добавлять команды в пул стартовых команд юнитов.

Говоря другими словами, с помощью оператора QCmd, юниту можно добавить любое число (любых доступных этому юниту) последовательных команд, но только после того, как был использован оператор  Cmd. Эти команды будут выполняться подобно тому, как если бы вы отдавали приказы в игре, зажав клавишу Шифт. То есть – последующая команда начнет выполняться только после того, как будет полностью выполнена предыдущая.
Сдесь я сразу же оговорюсь о некоторых тонкостях выполнения последовательных команд:
1) Если предыдущая команда невыполнима в принципе, то юнит переходит к выполнению следующей команды, не нарушая таким образом правильной работы скрипта.
Например:
Cmd(7, 200); - пехоте с номером 200 выдана команда «7»-покинуть здание
QCmd(0, 200, 1890, 1570);  - пехоте добавлена команда «0»-перемещаться в точку (1890, 1570).
Может возникнуть ситуация, когда здание будет разрушено раньше времени, но пехота успеет выскочить из него и выжить. В таком случае, когда сработает соответствующая ф-ция с выше указанным набором команд, возникнет ситуация, при которой пехоте 200 уже неоткуда будет выходить (пехота уже на «улице»). В подобных случаях игра просто переходит к следующей команде в списке.

2) Предыдущая команда невыполнима физически, но выполнима в принципе. Такая ситуация приводит к «подвисанию» юнита (не скрипта) и прерыванию всей последовательности команд. Сейчас поясню, что это значит.
Например:
Cmd(0,200,1000,2000);
QCmd(0, 200, 3000, 4000); 
    В этом кусочке скрипта юниту 200 дана стартовая команда двигаться в точку (1000,2000). При этом юнит, к примеру, обязательно пересечет реку через деревянный мост. Но мост, оказался взорванным раньше времени. Юнит, не находя пути к заданной точке следования, практически неизбежно застопорится где-нибудь на карте. И даже если мост в дальнейшем будет починен, юнит уже не будет продолжать выполнять поставленную последовательность команд. Я думаю у всех случалось подобное в игре, когда юнит (например вследствии пробки на мосту) уезжал куда то в сторону вдоль реки (пытаясь найти обходной путь), а потом просто замирал у какого то края карты. И разшевелить его можно было, только выдав новую команду. Так же и сдесь.

3) Если в процессе выполнения последовательности команд, юниту из какой либо другой ф-ции будет выдана новая команда по средству оператора Cmd, то эта старая последовательность прервется и немедленно начнется выполнение новой команды. Другими словами оператор Cmd более приоритетный чем оператор QCmd.

4) Не забывайте «отключать» ф-цию с помощью оператора Suicide по окончанию ее работы, так как это может привести к ее зацикливанию. Применительно к ф-ции MoveTruck – можно сказать, что если бы у нее в конце не стоял оператор Suicide, то эта ф-ция запускалась бы каждые 7 секунд (см. Init), и каждые 7 секунд юнит 101 получал бы одну и ту же команду: Cmd(0, 101, 1583, 223);

Итак, разобравшись с принципом работы операторов Cmd и QCmd мы теперь видим, что при запуске ф-ции MoveTruck, грузовик 101 получает последовательную команду – двигаться по трем точкам.

Теперь давайте рассмотрим немного другой вариант скрипта урока-2, в котором ф-ции MoveCar и MoveTruck остаются практически теми же, но запускаются не параллельно, а последовательно. Текст скрипта приведен ниже:

function Init()
RunScript("MoveCar", 3000);
end;

function MoveCar()
Cmd(0, 100, 916, 1516);
RunScript("MoveTruck", 4000);
Suicide();
end;

function MoveTruck()
Cmd(0, 101, 1583, 223);
QCmd(0, 101, 1890, 1570);
QCmd(0, 101, 1100, 1890);
Suicide();
end;

Как видим сдесь Init запускает только одну ф-цию – MoveCar. Ф-ция MoveTruck запускается из тела ф-ции MoveCar. То есть, пока полностью! не сработает ф-ция MoveCar (так как оператор RunScript стоит в конце), ф-ция MoveTruck не будет запущена. Как видим,  MoveTruck в итоге так же запускается через 3+4=7 секунд (в действительности на пару миллисекунд позже).
Данный порядок вызова функций более удобный при составлении скриптов, так как позволяет точно согласовывать по времени запуск очередных функций с происходящим на карте. А так же знание данного порядка вызова будет необходимо при изучении следующего (и самого незаменимого!) оператора if then else, проверяющего выполнение некоего заданного условия. Но уже в следующем уроке.

+3

18

Разбор полетов Basic Lua Sessions.

Урок-3. Проверка выполнения заданного условия.

Откройте в редакторе карт учебную карту Lesson3.bzm, которая хранится в папке Basic Lua Sessions. В принципе, для полного понимания каждого из учебных скриптов, вы должны открывать в редакторе карту, соответствующую уроку. Если вы не делали этого на прошлых уроках, то советую вам это сделать.

На карте Lesson3.bzm (как и на предыдущей Lesson2) размещены - легковое авто с номером 100, грузовик с номером 101, дом (ему присвоен номер 10), и несколько мелких объектов. Как видим, на карте появилось два новых юнита – пехота с номером 103, и пехота с номеом 104. Оба этих взвода объединены в скриптовое подкрепление номер 103. Список подкреплений можно увидеть в свитке Reinforcement Group (на рабочей панели слева) в окошке Groups. Если выделить интересующее подкрепление, то в окошке Group Propertie появится список всех скриптовых групп, входящих в скриптовое подкрепление. При составлении скриптов не путайте скриптовые номера групп юнитов со скриптовыми номерами подкреплений! Так же на карте появилась скриптовая зона - Farm, обозначенная зеленой рамкой. Список скриптовых зон можно увидеть в свитке Map Tools.

Ниже мы рассмотрим скрипт урока-3. Он выполняет следующие действия:
1) Авто 100, и грузовик 101 двигаются к дому (урок 1-2);
2) Как только авто и грузовик оба окажутся возле дома, при чем внутри скриптовой зоны Farm, на карту высаживается подкрепление 103;
3) Пехота движется к дому. Один взвод размещается возле дома, а второй заходит в дом.

Текст скрипта:

function Init()
RunScript("MoveCar", 3000);
RunScript("FarmCheck", 2000);
end;

function MoveCar()
Cmd(0, 100, 916, 1516);
RunScript("MoveTruck", 4000);
Suicide();
end;

function MoveTruck()
Cmd(0, 101, 1583, 223);
QCmd(0, 101, 1890, 1570);
QCmd(0, 101, 1100, 1890);
Suicide();
end;

function FarmCheck()
if GetNUnitsInArea(0, "Farm") == 2 then
RunScript("SquadArrive", 1000);
Suicide();
end;
end;

function SquadArrive()
LandReinforcement(103);
RunScript("SquadMove", 2000);
Suicide();
end;

function SquadMove()
Cmd(0, 103, 1530, 1320);
Cmd(6, 104, 10);
Suicide();
end;

Как видим часть скрипта идентична уроку-2. Рассмотрим новые функции. Начнем по порядку. В Init у нас запускается ф-ция FarmCheck через 2 секунды. Эта функция содержит новый (и очень полезный оператор if). Для дальнейшей работы со скриптами его обязательно необходимо изучить.

Оператор IF THEN ELSE – оператор проверяющий выполнение заранее заданного условия. Он действует по следующему принципу:

IF (если выполняется) «УСЛОВИЕ»
THEN (тогда делай) «ДЕЙСТВИЕ-1»
ELSE (в противном случае делай) «ДЕЙСТВИЕ-2»

Если в операторе отсутствует часть ELSE, тогда в случае невыполнения условия, оператор IF бездействует до тех пор, пока условие не выполнится. Рассмотрим его на примере ф-ции FarmCheck.

function FarmCheck()
if GetNUnitsInArea(0, "Farm") == 2 then
RunScript("SquadArrive", 1000);
Suicide();
end;
end;

Следует читать оператор так: if (если) GetNUnitsInArea(0, "Farm") == 2 (количество юнитов игрока «0» в зоне "Farm" = 2) then (тогда) RunScript("SquadArrive", 1000) (запустить ф-цию "SquadArrive" через 1 сек.). Suicide – отвечает за то, что ф-ция FarmCheck отключится сразу же после срабатывания строки RunScript("SquadArrive", 1000);
Оператор IF THEN ELSE по сути является небольшой вспомогательной функцией внутри основной функции, поэтому его окончание, так же необходимо обозначать словом end; В ф-ции FarmCheck первый end обозначает окончание оператора IF, а второй end – окончание самой ф-ции FarmCheck.
Внимание! Если вы забудете закрыть оператор IF эндом, весь ваш скрипт будет нерабочим!
Синтаксис оператора IF THEN ELSE чем то похож на синтаксис ф-ций, за исключением отсутствия названия и наличия условия:
if (пробел) («условие», если большое то в скобках) (пробел) then (далее с новой строки)
(«действие» - набор операторов или команд, составляющие тело вспомогательной функции if) (далее с новой строки)
end; - окончание вспомогательной функции (оператора) if.

Синтаксис знаков, позволяющих задать условие:
А==B (А равно B, пишется двойной знак равенства!);
А>B, A<B, A>=B, A<=B – стандартные знаки неравенства
A~=B (A не равен В, перед равно стоит знак «тильда»)

Итак, разобравшись с оператором if, мы так же разобрались и с ф-цией  FarmCheck. Мы видим, что как только в зоне Farm, количество юнитов игрока «0» будет равно 2, оператор RunScript запустит ф-цию SquadArrive. Ну а эти «два» юнита, как не сложно увидеть из скрипта, - легковой автомобиль и грузовик.

Ф-ция SquadArrive:

function SquadArrive()
LandReinforcement(103);
RunScript("SquadMove", 2000);
Suicide();
end;

Как видим она предельно проста, и содержит два оператора. Первый LandReinforcement(103) – мгновенно высаживает на карту скриптовое подкрепление под номером 103.
(Внимание! Как только вы назначите в редакторе карт скриптовое подкрепление и придатите ему определенное количество скриптовых групп, то все эти скриптовые группы будут отсутствовать на игровой карте до тех пор, пока вы не вызовите их с помощью оператора LandReinforcement в составе назначенного скриптового подкрепления!  В тоже время в окне редактора карт они будут отображаться!).
Второй оператор RunScript("SquadMove", 2000) запускает ф-цию SquadMove через 2 секунды. Что делает ф-ция SquadMove, вы уже должны уметь разобраться сами.
Остановлюсь только на небольшом нюансе. Если вызываемое подкрепление достаточно велико, к примеру 50-100 юнитов, то игра может не успеть их высадить за несколько секунд. По этому, в случае, если вам необходимо сразу же после высадки выдать команды юнитам этого подкрепления,  рекомендую запускать ф-цию с набором команд для  этих юнитов не через 1-2 секунды, а не менее чем через 5-10 секунд. У вас просто может возникнуть ситуация, когда подкрепление еще будет «высаживаться», а ф-ция с командами уже сработает. В этом случае команду получит только та часть подкрепления, которая успела высадиться, остальная же будет бездействовать.

Добавление служебной функции для облегчения контроля за работой миссии (используется только на стадии тестирования).

function DebugView()
Password("Panzerklein");
DisplayTrace("Amazing! This really works");
ShowActiveScripts();
--God(0, 2);
Suicide();
end;

ф-ция DebugView содержит набор следующих служебных команд:
Password("Panzerklein") – активирует режим паролей;
DisplayTrace("Amazing! This really works") – стандартный оператор вывода текста на экран. В данном случае он нужен для того, что бы понять, работает скрипт или нет. Если в тексте скрипта нет синтаксических и/или орфографических ошибок, то при запуске миссии на экране появится строка Amazing! This really works. В противном случае – скрипт не работает, и требует тщательной проверки на ошибки (самая нудная часть работы картодела!!!!!!!!!!!)
ShowActiveScripts() – выводит через диалоговое окно список работающих на данный момент ф-ций скрипта. Диалоговое окно (или как оно там называется?) открывается клавишей «тильда» во время игры.
--God(0, 2); - режим «бога». Значение параметров в скобках смотрите в справочнике.
Два тире подряд в начале строки обозначают, что вся эта строка – всего лишь комментарий к программе  (режим бога не включится). Комментарии никуда не выводится, и нужны только для пояснений или подписей внутри самого скрипта. Подобным образом, поставив в начале строки два тире, вы можете написать любую информацию, используя при этом любые символы. Программа автоматически пропускает (не читает) все строки, которые начинаются с двух тире. Если потребуется включить режим «бога», то для того что бы вышеуказанная строка --God(0, 2) стала активной, уберите оба тире.
При необходимости, можно ввести в ф-цию DebugView еще одну строку:
ChangeWarFog(N); - показывает зону видимости и юниты игрока N.
Соответственно, что бы вся ф-ция DebugView заработала, ее нужно запустить, к примеру через Init, добавив в него строку:
RunScript(“DebugView”,1000);
Примечание. В принципе, ф-цию DebugView можно и не вводить в состав скрипта при проверке. Но тогда все необходимые пароли вам прийдется вводить непосредственно в игре при каждом запуске вашей миссии.

+3

19

+ идет процесс "переваривания" :writing:

Reks написал(а):

Так же на карте появилась скриптовая зона - Farm, обозначенная зеленой рамкой. Список скриптовых зон можно увидеть в свитке Map Tools.

Вопрос: а как эти зоны устанавливаются на карте ?

0

20

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

Чтобы задать сценарную область:

откройте свиток Map Tools (Инструменты карты) на панели Workspace (Режим);
щелкните по радиокнопке Script Area Tool (Инструмент сценарной области);
выберите форму создаваемой сценарной области с помощью радиокнопок Rectangle (Прямоугольник) и Circle (Круг);
растяните области на карте, перемещая мышь при нажатой левой кнопке;
задайте имя сценарной области в появившемся окне.
Имя новой сценарной области появится в списке на панели Workspace (Режим).

Для удаления сценарной области выделите ее имя в списке на панели Workspace (Режим) и нажмите кнопку Delete (Удалить) над списком.

+1

21

Такой вот вопрос: откуда брать названия функций?

К примеру- мне надо вызвать штурмовики
Или же переместить группу юнитов (технику) при выполнения определенного условия в определенное место

0

22

Вопрос не понятен. Ты имешь ввиду названия в скрипте? Придумываешь сам. Можеш назвать GitlersSturmovik, наример   :D
Только функци заданий должны называться Objective0, Objective1,...Objective10 и тд. Эти менять не стоит.

+1

23

Можно ли скопировать определенную область с одной карты на другую? Если да, то как?

0

24

vlad_82
Кажется такое невозможно
Можно попробовать изменить карту под свой вкус

0

25

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

Народ, сейчас по уши занят картами, потому ничего не пишу тут. Просто некогда из-за спешки в связи с приближением выхода ГЗМ! Но когда ГЗМ-7 закончим, я обязательно продолжу тему. Тем более что у меня уже есть много о чем рассказать и показать  :rolleyes:

Например, мое последнее изобретение - универсальный скрипт на 40 строк, который позволяет быстро организовать самостоятельную атаку компа. Атака производится восемью парами.  Пара - это связка танк + взвод пехоты, которые действуют сообща. То есть пехота движется вслед за своим! танком, а танк в свою очередь если отрывается от пехоты ждет ее подхода, после чего они вновь двигаются сообща. Восемь пар двигаются в боевом положении по восьми последовательным точкам. Эти точки (или маршрут) можно задавать как угодно! Насколько фантазии или смекалки хватит! Команды юнитам раздаются не на уровне группы а на уровне отдельных юнитов, в следствии чего степень тупизма компа значительно упала.
Скрипт очень удобен в обращении и корректировке, вследствии чего его можно И НУЖНО повторно использовать где это требуется!!! Я его для этого и разрабатывал, что бы каждый раз себе голову не ломать!!! А просто натыкать танки и пехоту (или чего там другого надо) скопировать скрипт, подставить нужные цифры и сразу получить гарантированный результат!
Количество пар (и не обязательно пар, можно, например тройки или четверки), и количество последовательных точек на маршруте так же очень быстро перенастраивается, фактически изменением двух цифр в скрипте.

Вообщем данным изобретением я фактически в 2 раза ускорил свой процесс написания скриптов!!!

+3

26

Здравствуйте, товарищи!

1. Имеется карта (мультиплеерная) на 4 персоны.

Задаю стороны игрокам
Сторона - 0: 0-нем, 1-нем,
Сторона - 1: 2-сша, 3-анг. 
ну и 4 нейтрал.
Создаю скрипты с подкреплениями.
Игра начинается для всех (пробовал пока только поотдельности) кроме игрока 3.

В ходе тестов установлено. Если игроки 2 и 3 будут одной нации - усе работает.

Вопрос: Хочу 3 нации на мультикарте (что бы официально с выбором перед игрой). Возможно ль?

2.  Имеея в

function Init()
RunScript( "Begin", 500);
RunScript( "fresh", 500);
RunScript("Reinf",1000);
RunScript("Reinf",20000);
end;

Скрипты (функции) с одинаковым именем и больше одной  - зацикливаются. Не взирая есть ли "Suicide();" в конце оной или нет. В единственном экземпляре работает. Но утомляет копировать одни  и те же функции лишь с разными названиями.

Вопрос: Как с этим бороться?

3. Приведенный выше фрагмент, обсчитывается на старте игры. И выполняется согласно прописанным задержкам.

Вопрос: Как поступить, если я хочу начать обсчет в процессе игры(посчитать игроков, которые не вылетели еще и распределить подкрепления).

0

27

vlad_82 написал(а):

2.  Имеея в

function Init()
RunScript( "Begin", 500);
RunScript( "fresh", 500);
RunScript("Reinf",1000);
RunScript("Reinf",20000);
end;

Скрипты (функции) с одинаковым именем и больше одной  - зацикливаются. Не взирая есть ли "Suicide();" в конце оной или нет. В единственном экземпляре работает. Но утомляет копировать одни  и те же функции лишь с разными названиями.

Вопрос: Как с этим бороться?

RunScript (“Name”, iPeriodicity [, iNumberOfRepetitions])
Запускает сценарную функцию с именем Name каждые iPeriodicity миллисекунд. Необязательным параметром iNumberOfRepetitions можно указать число повторений вызовов.
Пример: RunScript ("Objective12", 3000, 3);

vlad_82 написал(а):

Вопрос: Как поступить, если я хочу начать обсчет в процессе игры(посчитать игроков, которые не вылетели еще и распределить подкрепления).

В любом случае нужно что то (какую то ф-цию) запускать принудительно через инит (или еще как то), что потом будет работать автоматически и проверять то что ты пропишешь.

0

28

Reks
Спасибо за консультацию .

Насчет второго пункта. А если мне, все же, приспичит в разные промежутки времени скрипт повторять. Как мне быть?

0

29

vlad_82 написал(а):

Насчет второго пункта. А если мне, все же, приспичит в разные промежутки времени скрипт повторять. Как мне быть?

Тут, к сожалению, придется в каждый из этих моментов эту функцию вызывать принудительно. Все зависит от того, что ты хочешь сделать. Можно скрипт просто определенным образом самого на себе же зациклить (но с умом!).

Могу привести пример похожего случая. У меня на нескольких из моих карт стоит скрипт "патруля по боевой тревоге". То есть есть небольшая группа, скажем 5-6 танков и 5-6 пехотных взводов. Они базируются в деревне. Вокруг деревни размещены скриптовые зоны тревоги. По скрипту, как только в одну из зон заезжает определенное количество противников, группа срывается и движется в зону где поднята тревога с целью всех там порвать на тряпки. Если группа выживает, то далее по этому же скрипту она возвращается в исходную позицию, и в самом конце скрипт вновь вызывает сам себя. То есть группа вновь хищно поджидает новых противников, которые будут иметь неосторожность заехать в зоны тревоги :-) Если группа умирает, цикл прекращается (за ненадобностью).
Однако внимание! Под скриптом я подразумеваю не одну, а несколько функций (блок функций). И вот в этом блоке последняя функция, если выполнены необходимые условия, вызывает первую. И так до тех пор пока выполняется условие. По сути вышел некий оператор цикла, только переложенный на игру.

Вот как то так.

Если у тебя другая задача, то расскажи подробно, может что то и придумаю. Так мне сложно понять чего ты хочешь.

0

30

Reks
Понятно. И правда, про "зациклить" я не думал. Рекурсия кажись такое дело называется. Обдумаю... Пока пишу это обдумываю)) ... А по времени, потом, остановить ее(функцию) как-нить возможно (отсчитать 2 часа и прекратить перезапускаться)? И не будет ли это забивать все время память... Я пока на сетевых картах опыта набираюсь.

Кстати, кажется твоя карта была про вторжение в Польшу. Сингл. Интересная. Жаль только, что поляки слабо (малочисленными группами) сопротивлялись... Ну оно , видимо, так и было.

0


Вы здесь » Союз | Union » Картостроение и скриптовка » "Школа картоделов"