Сообщение от
=Svogris=Kranz
Камрады програмисты! Если вам не трудно уважте: напишите стандартные скриптики для определённых сценарных ситуёвин (и обьяснялки типа "чтобы и дурак понял" к этим скриптикам).
Пока кратко попробую. Нужно помаленьку осваивать основы самого c#, я начинал наоборот с БОБа и постепенно на сайте MS и здесь(задавая простые довольно вопросы, спасибо за терпение отвечавшим ) сам язык(он сравнительно простой, логичный и красивый на самом деле, особенно для скриптов). Я и сейчас помаленьку копаюсь в нем, программку первую осознанную начал лепить. Вот здесь неплохое руководство на английском - http://www.homeandlearn.co.uk/csharp/csharp.html. Написать универсальные скрипты практически невозможно, всегда будут варианты. Проще все-таки понять суть - кирпичики, из которых можно будет собрать нужное решение(из этих кирпичиков можно будет потом составлять логику миссий любой сложности). В твоем случае это:
1. Зарождение группы самолетов по условию.
2. Условие, при котором они зарождаются (уничтожение разведчика, хотя может быть любое другое - вэйпоинт, таймер).
Триггеры я не использовал, т.к. они глючат и работают плохо, хотя их можно также отслеживать в скрипте. В Вики есть уроки на эту тему.
Если нет - скачать удобные, бесплатные и полезные программы. Это обязательно, иначе будут лишние вопросы и мучения - ссылка ниже (Visual Studio 2010 Express-предпочтительней или SharpDevelop 4.1-на крайний случай) и подключить к ним библиотеки игры - http://forum.1cpublishing.eu/showthread.php?t=28997.
Там содержатся все доступные методы/классы.
Для редактирования брифингов и быстрой правки скриптов лучше использовать бесплатный текстовый редактор Notepad++.
Начинаем допустим с этого:
Код:
using System;
using maddox.game;
using maddox.game.world;
public class Mission : AMission
{
public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;
}
}
Сначала создаем в папке missions(там же, гда лежат папки со стандартными миссиями Single и Dogfight) папку TEST, там будут храниться все миссии для опытов. Можно в ней же размещать другие папки(их даже можно создавать из скриптов, как и файлы миссий, текстовые файлы и т.п. для хранения сэйвов, параметров, статистики и т.д.). Допустим загружаем разведчик из подмиссии razvedchik.mis, используем метод OnActorDead для определения живы юниты или нет(здесь используется определение по номеру подмиссии, армии. Можно сохранять рожденные группы в списке и определять по нему, варианты разные могут быть. Здесь вариант именно с подмиссией. При уничтожении юнита - появится сообщение(потом можно добавить код для вызова рождения группы).
Код:
// Указываем нэймспэйсы - namespace, тут есть лишние, не могу без игры определить нужные
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
// далее идет код миссии
public class Mission : AMission
{
public override void OnBattleStarted() //этод метод срабатывает после старта мисссии
{
base.OnBattleStarted();
MissionNumberListener = -1;
GamePlay.gpPostMissionLoad("missions\\TEST\\razvedchik.mis"); //01 подмиссия с разведчиком
}
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages) //этод метод срабатывает после смерти любого юнита
{
base.OnActorDead(missionNumber, shortName, actor, damages);
//сначала фильтруем сообщения о трупиках и проверяем на null, если все условия выполняютс, т.е. актор и есть тот самый разведчик - предпринимаем какие-либо действия
if (actor != null) //проверка на null
{
//AiAircraft STATISTIC
if (actor is AiAircraft) //проверяем самолет ли убитый актор
{
if (missionNumber == 1) //проверяем из какой подмиссии убитый юнит(подмиссия номер 1). С номером ноль - главная миссия, хост-миссия которую мы запускаем.
{
AiAircraft aircraft = (actor as AiAircraft);
if (aircraft != null) //проверяем на null
{
if (aircraft.Army() == 1) //проверяем армию актора, 1 или 2
{
GamePlay.gpHUDLogCenter("Внимание! Разведчик уничтожен!"); //выводим сообщение о сбитом разведчике
GamePlay.gpPostMissionLoad("missions\\TEST\\patrol.mis"); // здесь вызываем рождение группы самолетов, например грузим подмиссию
}
}
}
}
}//null
}
}
После определения армии можно встроить определения типа(бомбер, истребитель, эсминец, танкер и т.д) или имя объекта(кажется совпадает с названием в файле миссии, точно не помню). Типы есть здесь и в архиве от Атаса. Здесь уже без игры не смогу сказать, но это все есть в подключаемых .dll. Условие будет похоже на это:
Код:
if (groundActor.Type() == AiGroundActorType.Tank)
{
GamePlay.gpHUDLogCenter("Внимание! Танк уничтожен!"); //выводим сообщение
}
В случае имени объекта будет кажется так: groundActor.Name()