Ил-2 Штурмовик: Битва за Британию. Скрипты. Руководство 1: Основные сведения — различия между версиями
Podvoxx (обсуждение | вклад) |
Podvoxx (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
:Автор '''Small_Bee''' | :Автор '''Small_Bee''' | ||
Скрипт представляет собой обычный (ну или почти) cs файл со всеми полагающимися атрибутами. Скажем скрипт от одной из миссий, исключая реализацию выглядел так: | Скрипт представляет собой обычный (ну или почти) cs файл со всеми полагающимися атрибутами. Скажем скрипт от одной из миссий, исключая реализацию выглядел так: | ||
+ | |||
//$reference Campaign.dll | //$reference Campaign.dll | ||
Строка 10: | Строка 11: | ||
public class Mission : maddox.game.campaign.Mission | public class Mission : maddox.game.campaign.Mission | ||
{ | { | ||
− | + | // здесь реализация.... | |
} | } | ||
+ | |||
Т.е., нам надо создать новый класс (Mission), наследуемый от класса maddox.game.campaign.Mission. | Т.е., нам надо создать новый класс (Mission), наследуемый от класса maddox.game.campaign.Mission. | ||
Строка 20: | Строка 22: | ||
Как видно, названия многих методов говорят сами за себя. | Как видно, названия многих методов говорят сами за себя. | ||
− | Далее маленький пример | + | Далее маленький пример - скажем реакция на триггер. Переопределяем метод OnTrigger: |
− | + | ||
− | Переопределяем метод OnTrigger | + | |
public override void OnTrigger(int missionNumber, string shortName, bool active) | public override void OnTrigger(int missionNumber, string shortName, bool active) | ||
Строка 36: | Строка 36: | ||
} | } | ||
− | Человеческий перевод | + | Человеческий перевод: если имя триггера равно trigger и он активен (т.е. условия триггера выполнены) пишем надпись по центру экрана "Сработал триггер trigger". |
В итоге у нас получится что-то вроде этого: | В итоге у нас получится что-то вроде этого: | ||
Строка 45: | Строка 45: | ||
using maddox.game; | using maddox.game; | ||
using maddox.game.world; | using maddox.game.world; | ||
− | |||
public class Mission : maddox.game.campaign.Mission { | public class Mission : maddox.game.campaign.Mission { | ||
− | |||
public override void OnTrigger(int missionNumber, string shortName, bool active) | public override void OnTrigger(int missionNumber, string shortName, bool active) | ||
{ | { | ||
Строка 54: | Строка 52: | ||
GamePlay.gpHUDLogCenter("Сработал триггер trigger"); | GamePlay.gpHUDLogCenter("Сработал триггер trigger"); | ||
} | } | ||
− | } | + | } |
− | + | ||
} | } | ||
Строка 62: | Строка 59: | ||
Кстати GamePlay.gpHUDLogCenter() не будет работать, если в миссии нет игроков-людей... Брехня, таки работает. | Кстати GamePlay.gpHUDLogCenter() не будет работать, если в миссии нет игроков-людей... Брехня, таки работает. | ||
− | Запуск действия | + | Запуск действия (сейчас с игре похоже присутствует только один тип действия - рождение группы). |
− | ( | + | |
1. Подготовка. | 1. Подготовка. | ||
Строка 71: | Строка 67: | ||
3. Допустим, мы хотим, что-бы группа родилась, когда кого то отправят к праотцам. Это может быть что угодно, как самолет так и прочее... Переходим на вкладку скрипты и пишем следующее: | 3. Допустим, мы хотим, что-бы группа родилась, когда кого то отправят к праотцам. Это может быть что угодно, как самолет так и прочее... Переходим на вкладку скрипты и пишем следующее: | ||
− | using System; | + | using System; |
− | using maddox.game; | + | using maddox.game; |
− | using maddox.game.world; | + | using maddox.game.world; |
− | + | class Mission : maddox.game.AMission | |
− | + | { | |
− | class Mission : maddox.game.AMission | + | public override void OnActorDead(int missionNumber, string shortName, AiActor actor, System.Collections.Generic.List<DamagerScore> damages) |
− | { | + | |
− | public override void OnActorDead(int missionNumber, string shortName, AiActor actor, System.Collections.Generic.List<DamagerScore> damages) | + | |
{ | { | ||
base.OnActorDead(missionNumber, shortName, actor, damages); | base.OnActorDead(missionNumber, shortName, actor, damages); | ||
Строка 87: | Строка 81: | ||
} | } | ||
} | } | ||
− | } | + | } |
Строка 105: | Строка 99: | ||
action.Do(); | action.Do(); | ||
} | } | ||
+ | |||
В первой строчке получили объект действия по его имени. Как мы помним, это было "TestAction" | В первой строчке получили объект действия по его имени. Как мы помним, это было "TestAction" | ||
Вторая строчка - проверяем, действительно ли ц нас есть такое действие (от опечаток никто не застрахован), и, если оно есть (т.е. не равно null), вызываем метод действия Do(). Что значит "Сделать". Вуаля. Наша группа появляется и топает по маршруту. | Вторая строчка - проверяем, действительно ли ц нас есть такое действие (от опечаток никто не застрахован), и, если оно есть (т.е. не равно null), вызываем метод действия Do(). Что значит "Сделать". Вуаля. Наша группа появляется и топает по маршруту. |
Версия 12:15, 3 октября 2011
- Составлено по материалам Sukhoi.ru
- Автор Small_Bee
Скрипт представляет собой обычный (ну или почти) cs файл со всеми полагающимися атрибутами. Скажем скрипт от одной из миссий, исключая реализацию выглядел так:
//$reference Campaign.dll //-$debug using System; using maddox.game; using maddox.game.world; public class Mission : maddox.game.campaign.Mission { // здесь реализация.... }
Т.е., нам надо создать новый класс (Mission), наследуемый от класса maddox.game.campaign.Mission.
Далее, методом переопределения существующих виртуальных методов класса-предка, собственно и пишем всю подноготную для миссии.
Собственно класс maddox.game.campaign.Mission я как то не нашел (уже нашел), но зато обнаружил абстрактный класс AMission (maddox.game.campaign.Mission наследуется от него прямо). Далее выкладываю список всех виртуальных методов этого класса (первая строчка - защищенный конструктор, его ИМХО трогать пока не надо.), а также публичные поля класса. С которыми разобрался, напишу дополнительно, ну и постараюсь походу информацию дополнять, включая информацию по используемым классам (таких как AiActor к примеру и т.д.).
Как видно, названия многих методов говорят сами за себя. Далее маленький пример - скажем реакция на триггер. Переопределяем метод OnTrigger:
public override void OnTrigger(int missionNumber, string shortName, bool active) { // здесь реализация... }
Собственно реализация..
if ("trigger".Equals(shortName) && active) { GamePlay.gpHUDLogCenter("Сработал триггер trigger"); }
Человеческий перевод: если имя триггера равно trigger и он активен (т.е. условия триггера выполнены) пишем надпись по центру экрана "Сработал триггер trigger".
В итоге у нас получится что-то вроде этого:
//$reference Campaign.dll //-$debug using System; using maddox.game; using maddox.game.world; public class Mission : maddox.game.campaign.Mission {
public override void OnTrigger(int missionNumber, string shortName, bool active)
{ if ("trigger".Equals(shortName) && active) { GamePlay.gpHUDLogCenter("Сработал триггер trigger"); } } }
Конечно, для того что бы что-то писать, надо хотя бы немного знать C#. В целом это весьма несложно. Также информацию можно почерпнуть, просмотрев скрипты к миссиям кампаний (....Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\bob\mission\campaign)
Кстати GamePlay.gpHUDLogCenter() не будет работать, если в миссии нет игроков-людей... Брехня, таки работает.
Запуск действия (сейчас с игре похоже присутствует только один тип действия - рождение группы).
1. Подготовка. Создаем группу самолетов как обычно, но в свойствах группы ставим флажок "Старт скриптом". Группа не появится до тех пор, пока мы ее сами не запустим. 2. Идем в "Скрипты" на вкладку "Действия". Создаем новое действие, называем его, например "TestAction" (без кавычек), жмакаем "Выбрать группу" и указываем созданную нами в первом шаге группу.
3. Допустим, мы хотим, что-бы группа родилась, когда кого то отправят к праотцам. Это может быть что угодно, как самолет так и прочее... Переходим на вкладку скрипты и пишем следующее:
using System; using maddox.game; using maddox.game.world; class Mission : maddox.game.AMission {
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, System.Collections.Generic.List<DamagerScore> damages) { base.OnActorDead(missionNumber, shortName, actor, damages); AiAction action = GamePlay.gpGetAction("TestAction"); if (action != null) { action.Do(); } }
}
Обратите внимание. Наследоваться надо не от maddox.game.campaign.Mission, а от maddox.game.AMission. Это актуально для сингловых миссий и (возможно) мультиплеерных. Для миссий в кампании надо наследоваться от maddox.game.campaign.Mission. Этот класс предоставляет еще одно свойство Campaign, который позволяет управлять кампанией.
Человеческим языком:
public override void OnActorDead(...) Переопределили метод, который вызывается при чьей либо смерти.
base.OnActorDead(missionNumber, shortName, actor, damages); В принципе можно не вызывать, но для порядка пусть будет.
AiAction action = GamePlay.gpGetAction("TestAction"); if (action != null) { action.Do(); }
В первой строчке получили объект действия по его имени. Как мы помним, это было "TestAction" Вторая строчка - проверяем, действительно ли ц нас есть такое действие (от опечаток никто не застрахован), и, если оно есть (т.е. не равно null), вызываем метод действия Do(). Что значит "Сделать". Вуаля. Наша группа появляется и топает по маршруту.