Учебник по 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 (Террария) скачать бесплатно
Добавить комментарий