Ил-2 Штурмовик: Битва за Британию. Скрипты. Руководство 1: Основные сведения — различия между версиями

Материал из АвиаВики
Перейти к: навигация, поиск
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
 
:[http://www.sukhoi.ru/forum/forumdisplay.php?f=234 Составлено по материалам Sukhoi.ru ]
 
:[http://www.sukhoi.ru/forum/forumdisplay.php?f=234 Составлено по материалам Sukhoi.ru ]
 
:Автор '''Small_Bee'''
 
:Автор '''Small_Bee'''
Скрипт представляет собой обычный (ну или почти) cs файл со всеми полагающимися атрибутами. Скажем скрипт от одной из миссий, исключая реализацию выглядел так:
+
Скрипт представляет собой обычный (ну или почти) '''*.cs''' файл со всеми полагающимися атрибутами. Скажем скрипт от одной из миссий, исключая реализацию выглядел так:
 
+
  
 
  //$reference Campaign.dll
 
  //$reference Campaign.dll
Строка 15: Строка 14:
  
  
Т.е., нам надо создать новый класс (Mission), наследуемый от класса maddox.game.campaign.Mission.
+
Т.е., нам надо создать новый класс (Mission), наследуемый от класса maddox.game.campaign.Mission. Далее, методом переопределения существующих виртуальных методов класса-предка, собственно и пишем всю подноготную для миссии.  
  
Далее, методом переопределения существующих виртуальных методов класса-предка, собственно и пишем всю подноготную для миссии.  
+
Собственно класс maddox.game.campaign.Mission я как то не нашел (уже нашел), но зато обнаружил абстрактный класс AMission (maddox.game.campaign.Mission наследуется от него прямо). Далее выкладываю список всех виртуальных методов этого класса (первая строчка - защищенный конструктор, его ИМХО трогать пока не надо.) - [[Ил-2 Штурмовик: Битва за Британию. Скрипты. Список методов класса Mission|Список методов класса Mission]], а также публичные поля класса. С которыми разобрался, напишу дополнительно, ну и постараюсь походу информацию дополнять, включая информацию по используемым классам (таких как AiActor к примеру и т.д.).
  
Собственно класс maddox.game.campaign.Mission я как то не нашел (уже нашел), но зато обнаружил абстрактный класс AMission (maddox.game.campaign.Mission наследуется от него прямо). Далее выкладываю список всех виртуальных методов этого класса (первая строчка - защищенный конструктор, его ИМХО трогать пока не надо.), а также публичные поля класса. С которыми разобрался, напишу дополнительно, ну и постараюсь походу информацию дополнять, включая информацию по используемым классам (таких как AiActor к примеру и т.д.).
+
Как видно, названия многих методов говорят сами за себя. Далее маленький пример - скажем реакция на триггер. Переопределяем метод OnTrigger:  
 
+
Как видно, названия многих методов говорят сами за себя.
+
Далее маленький пример - скажем реакция на триггер. Переопределяем метод OnTrigger:  
+
  
 
  public override void OnTrigger(int missionNumber, string shortName, bool active)
 
  public override void OnTrigger(int missionNumber, string shortName, bool active)
Строка 45: Строка 41:
 
  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)
+
 
         {
 
         {
 
             if ("trigger".Equals(shortName) && active)
 
             if ("trigger".Equals(shortName) && active)
Строка 57: Строка 52:
 
Конечно, для того что бы что-то писать, надо хотя бы немного знать C#. В целом это весьма несложно. Также информацию можно почерпнуть, просмотрев скрипты к миссиям кампаний (....Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\bob\mission\campaign)
 
Конечно, для того что бы что-то писать, надо хотя бы немного знать C#. В целом это весьма несложно. Также информацию можно почерпнуть, просмотрев скрипты к миссиям кампаний (....Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\bob\mission\campaign)
  
Кстати GamePlay.gpHUDLogCenter() не будет работать, если в миссии нет игроков-людей... Брехня, таки работает.
+
GamePlay.gpHUDLogCenter() работает, если в миссии нет игроков-людей.
 
+
 
Запуск действия (сейчас с игре похоже присутствует только один тип действия - рождение группы).
 
Запуск действия (сейчас с игре похоже присутствует только один тип действия - рождение группы).
  
1. Подготовка.
+
# Подготовка. Создаем группу самолетов как обычно, но в свойствах группы ставим флажок "Старт скриптом". Группа не появится до тех пор, пока мы ее сами не запустим.
Создаем группу самолетов как обычно, но в свойствах группы ставим флажок "Старт скриптом". Группа не появится до тех пор, пока мы ее сами не запустим.
+
# Идем в "Скрипты" на вкладку "Действия". Создаем новое действие, называем его, например "TestAction" (без кавычек), нажимаем "Выбрать группу" и указываем созданную нами в первом шаге группу.
2. Идем в "Скрипты" на вкладку "Действия". Создаем новое действие, называем его, например "TestAction" (без кавычек), жмакаем "Выбрать группу" и указываем созданную нами в первом шаге группу.
+
# Допустим, мы хотим, что-бы группа родилась, когда кого-то отправят к праотцам. Это может быть что угодно, как самолет так и прочее... Переходим на вкладку скрипты и пишем следующее:
 
+
3. Допустим, мы хотим, что-бы группа родилась, когда кого то отправят к праотцам. Это может быть что угодно, как самолет так и прочее... Переходим на вкладку скрипты и пишем следующее:
+
  
 
  using System;
 
  using System;
Строка 71: Строка 63:
 
  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);
{
+
                AiAction action = GamePlay.gpGetAction("TestAction");
base.OnActorDead(missionNumber, shortName, actor, damages);
+
                if (action != null)
AiAction action = GamePlay.gpGetAction("TestAction");
+
                {
if (action != null)
+
                action.Do();
{
+
                }
action.Do();
+
        }
}
+
}
+
 
  }
 
  }
  
  
Обратите внимание. Наследоваться надо не от maddox.game.campaign.Mission, а от maddox.game.AMission. Это актуально для сингловых миссий и (возможно) мультиплеерных. Для миссий в кампании надо наследоваться от maddox.game.campaign.Mission. Этот класс предоставляет еще одно свойство Campaign, который позволяет управлять кампанией.
+
Обратите внимание. Наследоваться надо не от '''maddox.game.campaign.Mission''', а от '''maddox.game.AMission'''. Это актуально для одиночных миссий и (возможно) многопользовательских (мультиплеерных). Для миссий в кампании надо наследоваться от maddox.game.campaign.Mission. Этот класс предоставляет еще одно свойство '''Campaign''', который позволяет управлять кампанией.
  
 
Человеческим языком:
 
Человеческим языком:
  
 
  public override void OnActorDead(...)
 
  public override void OnActorDead(...)
Переопределили метод, который вызывается при чьей либо смерти.  
+
-переопределили метод, который вызывается при чьей либо смерти.  
  
 
  base.OnActorDead(missionNumber, shortName, actor, damages);
 
  base.OnActorDead(missionNumber, shortName, actor, damages);
В принципе можно не вызывать, но для порядка пусть будет.
+
принципе можно не вызывать, но для порядка пусть будет.
  
 
  AiAction action = GamePlay.gpGetAction("TestAction");
 
  AiAction action = GamePlay.gpGetAction("TestAction");
Строка 99: Строка 90:
 
  action.Do();
 
  action.Do();
 
  }
 
  }
 +
-в первой строчке получили объект действия по его имени. Как мы помним, это было "TestAction"<br />
 +
Вторая строчка - проверяем, действительно ли у нас есть такое действие (от опечаток никто не застрахован), и, если оно есть (т.е. не равно null), вызываем метод действия Do(). Что значит "Сделать". Вуаля. Наша группа появляется и топает по маршруту.
 +
 +
[[Ил-2 Штурмовик: Битва за Британию. Скрипты|Вернуться на страницу "Скрипты"]]
  
В первой строчке получили объект действия по его имени. Как мы помним, это было "TestAction"
+
[[Категория:Ил-2 Штурмовик: Битва за Британию. Скрипты]]
Вторая строчка - проверяем, действительно ли ц нас есть такое действие (от опечаток никто не застрахован), и, если оно есть (т.е. не равно null), вызываем метод действия Do(). Что значит "Сделать". Вуаля. Наша группа появляется и топает по маршруту.
+

Текущая версия на 18:41, 6 ноября 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 наследуется от него прямо). Далее выкладываю список всех виртуальных методов этого класса (первая строчка - защищенный конструктор, его ИМХО трогать пока не надо.) - Список методов класса 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(). Что значит "Сделать". Вуаля. Наша группа появляется и топает по маршруту.

Вернуться на страницу "Скрипты"