StarCraft 2: Работа с РО в промышленных масштабах - Часть I

Содержание:

Часть 1, или Эпоха Великих Географических Открытий.

В этой части нам предстоит самая муторная часть - описательная. Найти, что, где и как лежит, и описать это структурами.

Пошагово

Шаг 1.

Находим нужный нам тип данных. Открываем его. Создаём объект нужного нам типа, а именно:
Алгоритм.Показатели и Алгоритм.Получение опыта.
» Создаём:
  • 3 алгоритма типа "Показатели", по одному на каждый атрибут героя.
  • 1 алгоритм типа "Показатели", любой из 3 атрибутов, но с суффиксом " - Основной".
  • 1 алгоритм типа "Получение опыта". В нём создаём:
    • 1 нулевой уровень с одним вписанным в него атрибутом (показателем) и добавлением этого самого атрибута герою.
    • 1 какой-то ещё уровень с одним вписанным в него атрибутом.
Находим нужные нам поля, и заполняем.

Шаг 2.

Находим сверху кнопочку "Отобразить XML". Ищем в получившемся коде находим все наши алгоритмы и копируем их.
Далее включаем компилятор, создаём проект, создаём струкуру - Алгоритм, или, если хочется, структуру Behavior с наследующими её струкутами Veterancy и Attribute.
Далее заполняем их имеющимися у нас полями. Если вы выбрали первый способ, то советую использовать параметр:
///<summary>
/// Здесь содержится вся информация, не включённая в предыдущие поля.
///</summary>
String[] XmlCode;
Вообще xml-код в MSVS - вещь приятная и полезная. Позволяет вставлять описания функций, параметров и т.п... В общем, в данном случае - идеально, т.к. легко забыть, что определяет то или иное свойтсво.
Ежели вы выбрали второй способ - наследование, то создайте дополнительные подструктуры (Modification и т.п.)
Вот то, что должно было у нас получиться:
» - Для первого способа:
/// <summary>
/// Тип данных "алгоритм". Используется для всего того, что юниты не кастуют сами (пассивки, замедления, ауры итд итп)
/// <summary>
public struct Behavior
{
    /// <summary>
    /// Идентификатор объекта. Не может повторяться.
    /// </summary>
    public string Id;
    /// <summary>
    /// Тип алгоритма. На данный момент используются только "CBehaviorVeterancy" и "CBehaviorAttribute".
    /// </summary>
    public string Type;
    /// <summary>
    /// Ссылка на текстовую константу названия алгоритма.
    /// </summary>
    public string Name;
    /// <summary>
    /// Ссылка на текстовую константу суффикса названия алгоритма.
    /// </summary>
    public string EditorSuffix;
    /// <summary>
    /// Ссылка на текстовую константу описания редактора.
    /// </summary>
    public string EditorDesription;
    /// <summary>
    /// Ссылка на текстовую константу префикса названия алгоритма.
    /// </summary>
    public string EditorPrefix;

    /// <summary>
    /// Иконка. У данных алгоритмов отображается только в редакторе.
    /// </summary>
    public string Icon; // Art
    /// <summary>
    /// Раса. Нужна для удобной типологии.
    /// </summary>
    public string Race;
    /// <summary>
    /// Тип эффекта алгоритма. Хрень полнейшая.
    /// </summary>
    public string AbilityorEffectType;
    /// <summary>
    /// Флаг "Постоянный". Ставим true.
    /// </summary>
    public bool Permanent;
    /// <summary>
    /// Максимальное количество данных показателей. Только для тип Attribute.
    /// </summary>
    public int MaxPoints;

    ///<summary>
    /// Здесь содержится вся информация, не включённая в предыдущие поля.
    ///</summary>
    public string[] XmlCode;
}
» - И для второго способа...
/// <summary>
/// Модификация боевой единицы.
/// </summary>
public classModifications
{
    /// <summary>
    /// Бонус к макс. запасу здоровья.
    /// </summary>
    public double VitalBonus;
    /// <summary>
    /// Бонус к регенерации здоровья.
    /// </summary>
    public double VitalRegenBonus;
    /// <summary>
    /// Бонус к макс. запасу маны.
    /// </summary>
    public double EnergyBonus;
    /// <summary>
    /// Бонус к регенерации маны.
    /// </summary>
    public double EnergyRegenBonus;
    /// <summary>
    /// Коэффициент скорости атаки.
    /// </summary>
    public double AttackSpeedBonus;
    /// <summary>
    /// Бонус к скорости передвижения.
    /// </summary>
    public double MovementSpeedBonus;
    /// <summary>
    /// Бонус к прочности брони.
    /// </summary>
    public double VitalArmorBonus;
    /// <summary>
    /// Бонус к урону.
    /// </summary>
    public double AttackBonus;

    /// <summary>
    /// Включаемые алгоритмы.
    /// </summary>
    public string[] BehaviorsActivided;
    /// <summary>
    /// Изменяемые алгоритмы.
    /// </summary>
    public string[] BehaviorChanged;
    /// <summary>
    /// Относительные значения изменяемых алгоритмов.
    /// </summary>
    public int[] BehaviorChangedToValue;
}
/// <summary>
/// Тип данных "алгоритм". Используется для всего того, что юниты не кастуют сами (пассивки, замедления, ауры итд итп)
/// <summary>
public class Behavior
{
    /// <summary>
    /// Ижентификатор объекта. Не может повторяться.
    /// </summary>
    public string Id;
    /// <summary>
    /// Тип алгоритма. На данный момент используются только "CBehaviorVeterancy" и "CBehaviorAttribute".
    /// </summary>
    public string Type;
    /// <summary>
    /// Ссылка на текстовую константу названия алгоритма.
    /// </summary>
    public string Name;
    /// <summary>
    /// Само текстовое название алгоритма. Для удобства.
    /// </summary>
    public string NameValue;
    /// <summary>
    /// Ссылка на текстовую константу суффикса названия алгоритма.
    /// </summary>
    public string EditorSuffix;
    /// <summary>
    /// Ссылка на текстовую константу описания редактора.
    /// </summary>
    public string EditorDesription;
    /// <summary>
    /// Ссылка на текстовую константу префикса названия алгоритма.
    /// </summary>
    public string EditorPrefix;

    /// <summary>
    /// Иконка. У данных алгоритмов отображается только в редакторе.
    /// </summary>
    public string Icon; // Art
    /// <summary>
    /// Раса. Нужна для удобной типологии.
    /// </summary>
    public string Race;
    /// <summary>
    /// Тип эффекта алгоритма. Хрень полнейшая.
    /// </summary>
    public string AbilityorEffectType;
    /// <summary>
    /// Флаг "Постоянный". Ставим true.
    /// </summary>
    public bool Permanent;
}
/// <summary>
/// Тип алгоритма "Показатель". Характеризует атрибут героя.
/// </summary>
public class Attribute : Behavior
{
    /// <summary>
    /// Максимальное количество данного параметра.
    /// </summary>
    public int MaxPoints;
    /// <summary>
    /// Показывает, является ли данный параметр основным.
    /// </summary>
    public bool IsMain;

    /// <summary>
    /// Модификация, которой подвергается герой при воздействии одного данного атрибута.
    /// </summary>
    public Modifications Modification;
}
/// <summary>
/// Тип алгоритма "Показатель". Характеризует атрибут героя.
/// </summary>
public class Veterancy : Behavior
{
    /// <summary>
    /// Модификация, которой подвергается герой при получении уровня.
    /// </summary>
    public Modifications[] LevelModification;
    /// <summary>
    /// Миниальное количество опыта для достижения данного уровня.
    /// </summary>
    public ulong[] LevelMinXp;
}
  • Сори за то, что подсветка синтаксиса не работает. Видимо, c# не поддерживается, автоматическое определение даёт xml (спасибо и на том!). Эй, админы, помогите программистам! включите поддержку шарпа!

На этом наши первооткрытия заканчиваются.


Views: 1 811

Hares #1 - 9 years ago 0
Голосов: +0 / -0
Завтра ( = сегодня) выложу вторую часть.
Vampir1991 #2 - 9 years ago -3
Голосов: +0 / -3
Стока возни, работать с редактором старкрафта 2 тяжело и нудно. Сперва разберешься с созданием новых боевых единиц, и что бы создать новую единицу потратишь минут 30.
Спасибо что пишешь, но толку от этого мало и за того что разбираться долго.
Харгард #3 - 9 years ago 1
Голосов: +1 / -0
Vampir1991, можно сделать базового юнита-заготовку с расписанной таблицей опыта, общими абилками и другими благами, и создавать всех кастомных юнитов на основе его.
Тем паче, что есть ряд инструментов, позволяющих синхронизировать поля и значения с дочерними объектами или сбрасывать настройки к родительским.
Hares #4 - 9 years ago (изм. ) 0
Голосов: +0 / -0
Просто бывают случаи, когда необходимо осуществить конверт или получать одни данные путём вычислений. Для этих случаев - сия статья.
***
Добавлена вторая статья