Учебник по tModLoader API

Учебник по tModLoader API

Да-да, хоть Warten уже сделал некий “тутор”, я дополню. Ибо я буду делать гайд подробным.

Сначала поговорим об IDE. Это спорный вопрос. Уже многие думают, что за IDE можно брать только “Microsoft Visual Studio”, причём не редко спрашивают: “А если у меня MVS Express?”, “А если у меня MVS *Да какой нибудь*”.
За IDE можно взять обычный Notepad++. И не обязательно скачивать 11 ГБ. Но минус блокнота в том, что у него нету подсказок. Поэтому используют IDE. Из них можно использовать эти:

  • MonoDevelop [Windows, Mac OS X, Linux]
  • Microsoft Visual Studio (Community Edition хватит) [Windows, Mac OS X, Linux]
  • CLion (Работает с C/C++, но можно найти те же плагины) (Платно, но мы пираты…) [Windows, Mac OS X, Linux]
  • Notepad++ (Ну это если с интернетом всё очень плохо…) [Only Windows]

Сразу скажу – я нормально смог настроить только MVS…

Для того, чтобы начать работать с API нужно:

  • tModLoader
  • Microsoft-.NET-Framework-4.52/4.6 ( [1.07 Mb] (cкачиваний: 27), [1.43 Mb] (cкачиваний: 29))
  • Скачайте XNA Framework ( [6.73 Mb] (cкачиваний: 60))
  • Сама IDE (Всё на ваш выбор и вкус)
  • Знание (хоть небольшое) C# или Java (C# очень похож синтаксисом на Java)

Сразу для ленивых жоп:
Вот эта штука называется “класс”, основа всего – class.
Вот эта штука называется “размещение класса” – namespace (Альтернатива “package” из Java).
Вот эта штука называется “комментарий”, то-есть некомпилируемые символы – // : коммент для всей строки. /* … */ : коммент для определённого куска с символами. А вот это:
/**
* …
**/
называется указательный комментарий. В C# он, к сожалению, используется как “/* … */” 🙁
Вот эта штука называется “метод” – void.
У каждого метода и переменной есть свой тип:

  • public – делает * публичным, то-есть доступным в других классах/private – делает * доступным только в классе в котором он находится
  • static – нужен для использования в других методах. Делает * статичным (Не обязателен)
  • final – это уже сами учите, в принципе, не так уж и часто это будет нужно
  • float – это уже сами учите, в принципе, не так уж и часто это будет нужно

Также после класса можно унаследовать другой класс (чтобы не делать свой велосипед). Делают это так:

public class НазваниеКласса : КлассДляНаследования
{

}

В Java это выглядело бы так:
extends … / implements I…

Почему же я сравниваю этот язык с Java?
Java – очень похожа на C# (точнее, наоборот), поэтому для знатоков Java хочу показать сравнение.

Кстати о методах! Если вы унаследуете другой класс, то вы можете “брать” методы из других классов, чтобы не изобретать свой велосипед (а вообще, по-другому даже с велосипедами нельзя). Для этого нужно использовать модификатор “override”. Опять же, такая же штука есть в Java. Только там это аннотация “@Override”, что немного удобнее, но ладно.

Пример:


public override void SetDefaults() 
{
       //Это из класса ModItem (ознакомимся позже). Как раз для этого нужно унаследовать ModItem. К сожалению, всегда можно использовать только 1 класс в качестве "родителя" в C#.
}

if – логический оператор, который проверяет значения.
Пример:


public static boolean isCode;

if(isCode)
{
print("Привет, я код.");
}

else – тоже логический оператор, который проверяет обратное значение
Пример:


public static boolean isCode;

if(isCode)
{
print("Привет, я код.");
}else
{
print("Ну я не код, так что пока детка.");
}

Или:


public static int a = 6;

if(a = 6)
{
print("Я шестёрка :(");
}else
{
print("Я не шестёрка :)");
}

Что ж, начнём моддинг.

Что делать?

А вот что:

  • Скачать IDE. Гугл в помощь.
  • Скачать tModLoader.
  • Скачать XnaFramework (ссылки в начале статьи)

Открываем IDE (В нашем случае MVS. И ДА, МОЖНО ИСПОЛЬЗОВАТЬ ЛЮБЫЕ ВЕРСИИ)
Делаем следующее:

  • Нажмите “File” (Файл)
  • Нажмите “New” (Новый)
  • Нажмите “Project” (Проект)
  • Нажмите “Templates” (Шаблоны. По умолчанию это уже сделано)
  • Нажмите “Other project types” (Другие типы проектов)
  • Нажмите “Visual Studio Solutions” (Решения Visual Studio)
  • Название сделайте таким: “Mod Sources” (Без кавычек) и укажите путь к “C:\Users\Ваш_Юзер\Documents\My Games\Terraria\ModLoader” и нажмите “ОК”
  • Нажмите по Mod Sources (А он справа) -> New Project (Новый проект) -> Windows -> Classic Desktop (Классический рабочий стол) -> Укажите название проекта в качестве названия вашего мода (Только латыница) -> Нажмите “ОК”
  • Нажмите по “References” (А он тоже справа) -> Add reference (Добавить ссылку) -> Overview (Обзор), а дальше:
  • Добавьте ваш “пропатченный” Terraria.exe (то-есть, с установленным tModLoader). Чтобы это сделать, просто нажмите “Overview…” (Обзор…) (тот, что снизу)

P.S. Вот “References”:

P.S.S. Вот низ:

Дальше кликните по вашему проекту -> Нажмите “Add” (Добавить) -> Class (Класс).
Откроется окно. Там в окошке для названия впишите “название проекта.cs” (.cs это и есть сам класс).
P.S. Вот:

В классе впишите это:


using Terraria.ModLoader; //Используем библиотеки tModLoader'а.

namespace ВашПроект
{
    class ВашеНазвание : Mod //Это и есть унаследование
    {
        public override /* Вот пример для override */ void SetModInfo(out string name, ref ModProperties properties)
        {
            name = "НазваниеМода"; //Пишем такое же как и в build.txt
            properties.Autoload = true;
            properties.AutoloadGores = true;
            properties.AutoloadSounds = true;
        }
    }
}

Дальше создаём где-нибудь файл “build.txt”
Пишем в него следующее:


author = Автор
version = Версия
displayName = Имя для экранизации.

Хоть я и написал это кириллицей, но скажу одно: везде где только можно, нужно писать АНГЛИЙСКИМИ буквами. А в .txt файлах можно использовать и символы типа этих:
“@ ‘ ‘ * ^ : ! ) ( – _ = / +” и т. д.

Загружаем Terraria, а дальше делаем это:

  • Компилируем мод

Нажимаем “Build + Reload All”

Видим во вкладке “Mods” следующее:

На “Reload Required” не обращайте внимание, это у меня ошибка есть…

Создание предмета
Создание предмета
Для начала нажмите по проекту -> “Add” (Добавить) -> “Folder” (Папку) и назовите её – “Items”.
Потом нажмите по созданной папке, потом -> Add (Добавить) -> Class (Класс) -> Назовите его так, как хотите назвать предмет (Без пробелов и чисел).
Внутри класса напишите это (Кстати унаследуйте ModItem):
using Terraria.ID; //Используем либы айди террарии.
using Terraria.ModLoader; //Юзаем любы tML
using Terraria; //Юзаем либы террарии

namespace НазваниеПроекта.Items
{
public class НазваниеПредмета : ModItem
{
public override void SetDefaults()
{
//Здесь параметры
}

public override void AddRecipes()
{
//Здесь крафт
}
}
}

Разберём первый метод (SetDefaults):
Главный параметр это “item”. С помощью него мы можем выбирать параметры предмета.
Пример:
item.name = “Name”;

Я буду сокращать и писать только то, что доступно после “item.”:
name = “Name”; //Имя предмета, string
maxStack = 1; //Максимальное кол-во предметов в стаке, int
value = 12345678; //Стоимость предмета у жителей. 12 – платина, 34 – золото, 56 – серебро, 78 – медь.

width = int; //Ширина текстуры
height = int; //Высота текстуры
toolTip = string; //Надпись под предметом
toolTip2 = string; //Второя строчка этой надписи
rare = int; //Рариететность
expert = bool; //true или false. То-есть показывает надпись у предмета “Expert” + радужный цвет
acessory = bool; //Можно ли одеть как аксессуар

useTime = int; //Время использования предмета. Описываем в тиках. В 1 секунде = 20 тиков.
useAnimation = int; //Время показа текстуры.
useStyle = int; //Как это анимировано: 1 – машем как обычный меч, 2 – используем как зелье, 3 – тычем им как кинжал,
4 – поднимаем руками (Предметы призыва, звезда), 5 – просто держим в руках(Книги, огнестрелы и тд)

item.shoot = int; //Чем предмет стреляет, projectileID, либо mod.ProjectileType (Из мода)
item.shootSpeed = float; //Скорость выстрела. Пример: 3F

Теперь рассмотрим второй метод:
ModRecipe recipe = new ModRecipe(mod); //Регистрируем переменную recipe, говорящая о том, что это рецепт
recipe.AddIngredient(int, int); //Первое – айди предмета, второе – кол-во. Можно написать ItemID вместо айди.
recipe.AddIngredient(null, “название_предмета”, int); //Предмет из мода. int – кол-во.
recipe.AddTile(int); //Говорим, что для рецепта нужно использовать блок… Либо айди, либо TileID.
recipe.AddTile(null, “string”); //Используем тайл из мода
recipe.SetResult(this, int); //Кол-во получаемого предмета. int – кол-во.
recipe.AddRecipe();//Конец рецепта

Создание крылышек :3
Чтобы начать делать крылья нужна заготовка для них (Просто параметры для обычного предмета) и несколько методов:
1:

public override bool Autoload(ref string name, ref string texture, IList equips)
{
equips.Add(EquipType.Wings); //Делаем тип слота в котором может лежать предмет: крылья.
return true;
}

public override void UpdateAccessory(Player player)
{
player.wingTimeMax = 180; //То, сколько тиков мы сможем летать. 1 секунда = 20 тиков (Главное правило всех игр)
}

public override void VerticalWingSpeeds(ref float ascentWhenFalling, ref float ascentWhenRising,
ref float maxCanAscendMultiplier, ref float maxAscentMultiplier, ref float constantAscend) //Все измерения происходящие в этом методе будут рассчитываться на вертикальную скорость.
{
ascentWhenFalling = 0.85f; //Подъём когда падаешь (То с какой скоростью мы поднимемся вверх при падении не использовав крылья до этого)
ascentWhenRising = 0.15f; //Подъём при прыжке
maxCanAscendMultiplier = 1f;
maxAscentMultiplier = 3f;
constantAscend = 0.135f;
//Всё остальное = Google Translate.
}

public override void HorizontalWingSpeeds(ref float speed, ref float acceleration)
{
speed = 9f; //С какой скоростью мы будем лететь по горизонтали.
acceleration *= 2.5f; //Ускорение по горизонтали
}

А в setDefaults пишем это:

item.accessory = true;

А вот примеры текстурок найдите в самой террарии 😉 Это сложнее 🙂

Как добавить сумочку с выпадением предмета
Опять же обычный предмет, не требует параметров в setDefaults.
Делаем так:

public override bool CanRightClick()
{
return true; //Можем ли мы делать правый клик на предмет??? В данном случае – дерзайте, ставьте true.
}

public override void RightClick(Player player)
{
player.QuickSpawnItem(ItemID.DirtBlock, 15); //Выпадает земля в кол-ве 15 штук.
player.QuickSpawnItem(ItemID.AnkhShield); //Выпадает 1 щит Анкха.
}

Напомню – это мешочек с дропом. Такие выпадают из боссов обычно. Хотя можно сделать крафт. После использования – сумочка исчезает.

Добавление дропа
Чтобы добавить новый дроп из моба нужен другой класс, обычно его ставят в НазваниеМода.NPCs.
Выглядит код так:

public class ItemDrop : GlobalNPC //Опять же классы можно называть по разному.
{
public override void NPCLoot(NPC npc)
{
if (npc.lifeMax > 5 && npc.value > 0f) //Если у NPC максимальное здоровье больше 5, то выпадает следующий предмет:
{
Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, mod.ItemType(“Название_Предмета”));
}
}
}

Пока думаю… всио.

С уважением, FanKar

TerrariaGo - Всё для Terraria (Террария) скачать бесплатно
Добавить комментарий

  1. а

    “Вот эта штука называется «метод» — void.”, дальше можно не читать

    Ответить