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

Материал из АвиаВики
Перейти к: навигация, поиск
м
Строка 29: Строка 29:
 
::'''Ответ:'''
 
::'''Ответ:'''
 
  Это поле, которое показывает события какой миссии скрипт миссии слушает - при загрузке миссии в это поле ставится её номер - т.е. она "слышит" только свои события. Если выставить номер другой миссии - будет "слушать" только её, чтобы все миссии слышать - поле в меньше нуля выставить надо (то есть "-1").
 
  Это поле, которое показывает события какой миссии скрипт миссии слушает - при загрузке миссии в это поле ставится её номер - т.е. она "слышит" только свои события. Если выставить номер другой миссии - будет "слушать" только её, чтобы все миссии слышать - поле в меньше нуля выставить надо (то есть "-1").
 
+
== 5 ==
 +
::'''Вопрос:''' ''Как убирать с земли самолеты, которые сели на вынужденную, разбились не долетев до посадки?''
 +
::'''Ответ:'''
 +
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
 +
    {
 +
        base.OnAircraftCrashLanded(missionNumber, shortName, aircraft);
 +
        Timeout(5, () =>
 +
        {
 +
            aircraft.Destroy();
 +
        });
 +
    }
  
 
[[Категория:Ил-2 Штурмовик: Битва за Британию. Скрипты]]
 
[[Категория:Ил-2 Штурмовик: Битва за Британию. Скрипты]]

Версия 19:21, 3 октября 2011

Содержание

1

Вопрос: В случае более-менее сложного скрипта, какие инструменты отладки можно использовать?
Ответ:
К сожалению, похоже, что кроме собственной головы - никаких. Если кто найдет обратное, буду очень признателен.
Почти наверняка влияет вот эта строчка - //-$debug, но я с ней пока не экспериментировал.
Я делаю так - запускаю студию, новый проект любой C#. Прилинковал к проекту:
...\Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\core\part.dll
...\Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\core\maddox.dll
...\Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\core\gameWorld.dll
...\Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\core\gamePlay.dll
...\Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\bob\Campaign.dll
Подозреваю, что не все эти сборки необходимы, но особо туда не лез, пусть будут. Последняя же нужна только для миссий из кампании.
Создал класс, в using прописал необходимый минимум
using System;
using maddox.game;
using maddox.game.world;
После код просто копирую в игру. Единственное убираю неймспейс моего проекта. Не самая удобная штука, но писать вполне можно.

2

Вопрос: Как определить, имеется ли самолет какой-либо группы в данный момент или нет? У немцев названия группы содержат знаки (|, ||, |||, |V, V, V|) и так далее. Но, при написании скрипта игра подобные знаки игнорирует. С англичанами проблем нет, у них обозначения цифровые, например 218Sqn. А вот у немцев обозначения типа JG51_| и игра их не видит
Ответ:
Пример из игры -"BoB_LW_JG53_I"
1 - латинская буква "I", 5 -латинская "V".

3

Вопрос: Как отследить статики? Они не являются AiActor (по крайней мере события на них не реагируют - уничтожен, поврежден и т.д.). Ни в Battle, ни в GamePlay методов никаких похожих тоже нет. GamePlay.gpActorByName("StaticName") тоже ничего не дает. Отследить уничтожение статика(ов) удалось только повесив на них триггер.
Ответ:
Да, статики, это не акторы, у них нет "мозга", и они для красоты стоят, событий не вызывают.

4

Вопрос: Что есть поле MissionNumberListener? Пробовал присваивать номер свежезагруженной миссии - вообще всякие события вызывать перестало (в этой миссии).
Ответ:
Это поле, которое показывает события какой миссии скрипт миссии слушает - при загрузке миссии в это поле ставится её номер - т.е. она "слышит" только свои события. Если выставить номер другой миссии - будет "слушать" только её, чтобы все миссии слышать - поле в меньше нуля выставить надо (то есть "-1").

5

Вопрос: Как убирать с земли самолеты, которые сели на вынужденную, разбились не долетев до посадки?
Ответ:
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
   {
       base.OnAircraftCrashLanded(missionNumber, shortName, aircraft);
       Timeout(5, () =>
       {
           aircraft.Destroy();
       });
   }