Как создать мод с помощью Microsoft Visual Studio (MVS) [tModLoader 0.4.1]

Как создать мод с помощью Microsoft Visual Studio (MVS) [tModLoader 0.5]

Переведено и дополнено Warten’ом. Ссылка на оригинал. (На английском)
Внимание! спрашивать тупые вопросы типа: А пачему руски язик не работает? Будет вгонять автора в дикий рэйдж.

Начало
Запомните: если ваша религия запрещает читать FAQ, гуглить и пользоваться переводчиком, помощи здесь можете не ждать. Вообще.

  • Установите tModLoader
  • Убедитесь, что у вас установлен последний .NET Framework – Microsoft-.NET-Framework-4.52.exe [1.07 Mb] (cкачиваний: 7), Microsoft-.NET-Framework-4.6.exe [1.43 Mb] (cкачиваний: 12).
  • Убедитесь, что у вас есть XNA Framework .dll файлы (Или скачайте XNA_Framework.zip [404.02 Kb] (cкачиваний: 13)).
  • Скачайте и установите Microsoft Visual Studio, Community Edition – vs_community.exe [2.96 Mb] (cкачиваний: 24). (Установите с C# workspace. Внимание!: установите с английским языком) Он только на 30 дней! Позже нужно зарегистрировать учетку на офф. сайте и войти в программе, это бесплатно.
  • Ну и конечно начальные знания С#. Это несложно, почитайте учебники, гайды и сделайте любую обычную программу, прежде чем вы начнете моддинг.

Есть некоторые вещи которые вы должны знать, прежде чем начать моддинг:

  • Прежде всего, это руководство для tModLoader и оно может (Или не может) изменятся по мере обновлений.
  • Убедитесь, что у вас последняя .NET Framework Microsoft (4.5 или выше), чтобы предотвратить какие-либо проблемы.
  • Terraria использует XNA Framework библиотеки, поэтому вам понадобятся DLL-файлы в вашем моде. Они нужны для предотвращения ошибок при написании кода. Вы можете скачать мои или найти их самостоятельно, если у вас есть XNA Framework (Желательно).
  • И, конечно, не забудьте сам Microsoft Visual Studio.

Введение
MVS поможет вам авто-завершением кода, показывая ошибки, и вообще… Это сделает процесс написания кода куда быстрее и легче.
Microsoft Visual Studio представляет собой приложение для создания многих видов программ. Вы, наверное, слышали о нем раньше, и, возможно, кто-то даже использовал его 😀
Если вы используете MVS в первый раз, я рекомендую просмотреть/читать гайды/учебники по C# в первую очередь. В интернете их достаточно много.

Как создать ваш мод (Далее – проект) в MVS
Пользоваться MVS лучше с установленным англ. языком! После установки и запуска у вас откроется начальная страница, закройте ее. Потом сделайте все как в списке.

  1. Нажмите File -> New -> Project (Templates -> Other project types -> Visual Studio Solutions) назовите его “Mod Sources” (Без кавычек)
  2. Установите расположение: documents\My Games\Terraria\ModLoader
  3. Нажмите OK
  4. Нажмите Add -> New Project -> Windows -> Classic Desktop -> Empty Project
  5. Впишите название мода (На англ языке, без спец. символов и пробелов)
  6. Нажмите OK
  7. Правым кликом по новому проекту (Справа) -> Add -> Class (назовите его так же, как назвали мод)
  8. Потом напишите код как здесь: (MODNAME – это название вашего мода)
    using Terraria.ModLoader; namespace MODNAME { public class MODNAME : Mod { public override void SetModInfo(out string name, ref ModProperties properties) { name = "MODNAME"; properties.Autoload = true; } } }
  9. Теперь создайте простой .txt фаил. Впишите туда эти строки:
    author = Это ваш ник, имя, да что угодно, пишите что хотите;
    version = версия, любые цифры;
    displayName = это название мода которое будет показано в меню, здесь уже можно писать пробелы, спец символы, но нельзя кириллицу! (Русские буквы)
    Примерно так:author = NAME version = 0 displayName = MOD NAME
  10. Получившийся build.txt скиньте в ваш проект (Просто перетащите)
  11. Потом правым кликом на ваш проект -> references -> Add reference (Добавьте библиотеки (.dll) которые скачали, и модифицированный Terraria.exe (С установленным модлоадером, тобишь))
  12. Вот и все, теперь вы можете запустить террарию и собрать мод во вкладке mod sources, что-бы проверить все ли правильно вы сделали. Если нет то repeat.

Советы
Некоторые советы:

  • Старайтесь, чтобы внутренние имена, такие как пространства имен и классов, были чисты. То есть постарайтесь, избежать специальных символов, пробелов, тире и т.д. и т.п.
  • Если вы не понимаете что-либо, спросите себя: Есть ли у вас какие-либо знания C# в этом случае? Если нет, то прочитайте учебники/гайды по С#, а затем возвращайтесь.

Мои советы:

  • Посмотрите исходный код ExampleMod тщательно, он содержит почти все, что может сделать tModLoader в это время.
  • Примечание для MVS, он создает папку .vs, которая будет отображаться на вкладке mod sources. Сейчас просто игнорируйте ее.
  • Прежде чем вы начнете моддинг вы должны по крайней мере знать самые основы C#.
    Вы в основном можете узнать эти основы, создавая консольные приложения.
    Не бойтесь попробовать сделать что-то самостоятельно!
    Опыт работы с программированием других приложений будет огромным плюсом в будущем.

Туториалы по C# (На английском. На русском ищите сами.)

Дополнительные ссылки.

  • Документация (Англ)
  • Пост tModLoader’a на оф. форуме. (Тоже англ. Просьба от автора, не бегите туда спрашивать что либо на русском языке, в большинстве случаев вас там просто проигнорируют)
  • ID предметов, тайлов и тд

Создание файлов вашего проекта
Создание предмета:
Совет: Название предмета и текстуры должны быть одинаковыми.
Совет: Вот эта штука “//” называется комментарий, программа игнорирует все что после него написано. И да, сюда можно писать кириллицу.

Показать / Скрыть текст
Сначала создайте папку Items. Просто нажмите правым кликом на ваш проект -> Add -> Create folder. Вообще у папки может быть любое имя, но лучше не будем отходить от канона.
Теперь создайте фаил вашего предмета: правый клик по папке -> Add -> Class. (Shift + Alt + C)
В вашем файле появятся бесполезные директивы using, удалите их. Вместо них добавьте другие, более нужные нам:
using Terraria; //собсно террария
using Terraria.ID; //ID предметов, частиц, нпс и тд
using Terraria.ModLoader; //то с помощью чего мы делаем мод
Далее мы видим имя класса (Вашего предмета, не забудьте переименовать ItemName), добавьте ” : ModItem” после него
{
class ItemName : ModItem //Мы говорим программе что эта штука – предмет
Потом добавьте SetDefaults
{
public override void SetDefaults() //свойства предмета
{
//пишем свойства сюда
}
}}
Вот и все! Теперь вы можете редактировать свойства предмета.
Вот перечень свойств. (Здесь не всё.)

//int = 1, float = 0.01f, double = 1.00, bool = true или false,
item.name = “Item name”; //имя предмета, которое будет показано в игре.
item.maxStack = 99; //макс. количество, int
item.value = 01020304; //где 01Plat 02Gold 03Silver 04Copper, то есть 1 платина, 2 золота, 3 серебра и 4 копейки, int.

item.consumable = true; //предмет исчезает после использования, bool
item.healLife = 20; //лечит хп, int
item.healMana = 20; //восстанавливает ману, int

item.damage = 20; //урон, int
item.melee = true; //тип урона, вместо него можно написать item.magic, item.ranged, item.summon, item.thrown. bool
item.crit = 20; //шанс крита, int
item.knockBack = 2; //то как далеко летит моб после удара, int
item.mana = 20; // сколько использует маны, int

item.width = 40; // ширина предмета, int
item.height = 40; // высота предмета, int
item.toolTip = “”; // любой текст
item.toolTip2 = “”; // текст
item.rare = 2; //раритетность, int
item.expert = false; // радужный цвет как у экспертных предметов и надпись expert, bool

item.accessory = true; //одевается как акссесуар, bool
item.defense = 20; //сколько дает защиты, int
item.lifeRegen = 5; //регенерация, int
item.manaIncrease = 20; //добавляет макс. маны, int

item.axe = 5;// предмет работает как топор, int * 5
item.hammer = 25; // как молот, int
item.pick = 25; //как кирка, int

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

item.shoot = ; //чем предмет стреляет, int ID
item.shootSpeed = 10f; //скорость, float
Добавление рецепта:
Для начала нам нужно добавить AddRecipes
{
public override void SetDefaults() //свойства предмета
{
//пишем свойства сюда
}
public override void AddRecipes()
{
//рецепт пишем сюда
}
}}
Потом добавляем остальное:

ModRecipe recipe = new ModRecipe(mod); //мы говорим что это рецепт
recipe.AddIngredient(ItemID.DirtBlock, 2); //мы добавляем в рецепт блок земли. Можно написать ID
recipe.AddIngredient(ItemID.DirtWall, 8); //стена земли
recipe.AddTile(TileID.WorkBenches); //для крафта нужен верстак
recipe.SetResult(this, 99); //В итоге получаем 99 предметов
recipe.AddRecipe();// конец рецепта
Делаем из предмета аксессуар
Добавляем UpdateAccessory()
{
public override void SetDefaults() //свойства предмета
{
//пишем свойства сюда
}
public override void UpdateAccessory(Player player)
{
//свойства аксессуара
}
public override void AddRecipes()
{
//рецепт пишем сюда
}
}}
Свойства аксессуара:

// += добавляет, -= вычитает, *= умножает, /= делит
player.meleeDamage += 10f; //melee урон, float
player.thrownDamage += 10f;//thrown урон, float
player.rangedDamage += 10f;//ranged урон, float
player.magicDamage += 10f; //magic урон, float
player.minionDamage += 10f;//minion урон, float

player.statDefense += 100; // защита, int
player.moveSpeed += 100; // скорость, int
player.maxMinions += 10; // макс. миньены, int

player.lifeRegen += 10; //реген хп, int
player.manaRegen += 10; //реген маны, int

player.waterWalk = true; //ходьба по воде, bool
player.noFallDmg = true; //урон от высоты, bool
player.jumpBoost = true; //выше прыжок, bool
player.lavaImmune = true;//иммун к лаве, bool
player.lifeForce = true; // +20% хп?, bool
player.lifeMagnet = true; // притягивает сердца
player.lifeSteal = 5; //лайфстил, int
player.jumpSpeedBoost = 10; // скорость прыжка, int
player.manaCost -= 10; //цена маны, int
player.nightVision = true; //ночное зрение, bool

player.magicCrit += 10; //int
player.rangedCrit += 10;//int
player.meleeCrit += 10; //int
player.thrownCrit += 10;//int
player. //миньоны не наносят криты

player.dash = 1; //рывок, int
player.dashDelay = 10; //время между рывками, int
player.AddBuff(BuffID.Shine, 5, false); //добавляет бафф, int ID, int TIC, bool

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