Введение[]
Этот туториал будет посвящен принципам добавления более сложных эффектов вашим предметам. Он разбит на две части: во-первых, мы обсудим, как создать собственное зелье, который добавляет несколько баффов сразу, а затем мы покажем шаги, необходимые для создания меча и прибавлению вам здоровья с каждым ударом.
Отметим, что обычным предметам можно добавить только один положительный бафф на время с помощью .ini файлов, таким образом, вы уже можете понять, почему кодирование с C # является более мощным, так как существует меньше ограничений.
Требования[]
Это руководство предполагает, что вы выполнили следующие туториалы и знакомы с компиляцией модов:
Создание предмета[]
Создание .ini файла для зелья[]
Как вы должны быть знакомы с созданием предмета, эти шаги будут весьма краткими. Но, давайте сделаем пользовательские зелье, которое применяет несколько баффов!
Для начала:
- Создайте папку для вашего мода с названием "Custom Weapons". Если у вас уже есть папка для вашего мода, то вы можете использовать её.
- Создайте папку с названием "Item" (если она у вас есть, то не надо)
- Так как это зелье, давайте скопируем .ini файл Лечебного зелья в эту папку, и назовите его "Elixir of Power.ini"
- Найти подходящую картинку и назовите её «Elixir of Power.png". Вы можете использовать изображение лечебного зелья, или даже создать своё собственное! См. Ресурсы для некоторых программ, которые вы можете использовать.
- Дайте ему следующие атрибуты:
[Stats] width=14 height=24 type=-1 useStyle=2 useAnimation=17 useTime=17 maxStack=30 consumable=True useTurn=True scale=1 useSound=3 rare=1 value=2000 [Recipe] Amount=1 needWater=False Items=2 Lesser Healing Potion,1 Glowing Mushroom Tiles=Bottle
Большая разница между этим файлом и лечебным зельем, что нет "Potion=True" атрибута или "healLife=100" атрибута. Мы хотим, чтобы наш предмет давал баффы, но не восстанавливал жизни, поэтому мы убрали их. Если вы хотите, вы всегда можете добавить их обратно. Кроме того, "Potion=True", немного вводит в заблуждение. Это не индикатор того, что это зелье или нет, но оно имеет 60-секундный кулдаун, совместно с другими предметами. Вот почему зельем маны не имеет кулдауна, но есть у грибов.
Предоставление зелью некоторых эффектов[]
Как уже упоминалось во введении, у .ini файла есть ограничения: вы можете указать только один положительный бафф. Что делать, если мы хотим добавить три? Ну, мы должны создать .cs файл, чтобы мы могли приказать игре конкретно делать то, что мы хотим.
- Создайте файл с именем "Elixir of Power.cs"
- Он должен быть вместе с двумя другими файлами, Elixir of Power.ini и Elixir of Power.png
- Поместите следующий код в .cs файл:
public static void UseItem(Player player, int playerID) { player.AddBuff(3, 600, false); player.AddBuff(5, 600, false); player.AddBuff(17, 600, false); }
- Если это ваше первое программирование, ваши глаза, возможно полностью остекленели, так что вот объяснение того, что здесь происходит.
- Самая первая строка называется функцией определения. Функция называется UseItem. Раздел, который называется "public stats" означает, что любой другой код может вызывать (выполнять) эти функции без каких-либо ограничений, и "Void" означает, что функция не возвращает значения (так она принимает вход, но не дает выхода).
- Часть в круглых скобках с содержимым "(Player player, int playerID)" является входной, которая дает функции, или заставляет работать. Мы предполагаем действительного игрок и ID этого игрока.
- Примечание: Если вы используете любую из функций в классах tConfig'а, то вы просто скопировать определение, описанное здесь, как есть, и игра будет знать, что делать. Когда вы продвинитесь и научитесь писать свои собственные функции, вы будете нести ответственность за правильное прохождение информации и из нее.
- Наконец, мясо функции: Все, что находится в фигурных скобках { } это функция. Мы видим три очень похожие команды: player.AddBuff, и кучу вещей в скобках. Это вызовы функций. То, что происходит здесь, связано с объектом-игроком (так называемый игрок), и для этого есть функция "AddBuff", поэтому, когда мы это делаем, это вешает положительный бафф на игроков. Откуда он знает, что положительный эффект надо дать игроку? Из скобок.
- Первый номер - тип баффа, а второй - продолжительность в кадрах. Зная, что есть 60 кадров в секунду, каждый бафф будет длиться по 10 секунд (равный 60 раз 10).
Тестирование[]
- В любом случае, как только вы добавили его к файлам, сохраните их, скомпилируйте мод и проверить его.
- При использовании предмета, вы должны увидеть что-то вроде следующего:
КАРТИНКА ЗДЕСЬ
Создание меча[]
Меч очень похож по своей концепции на зелье: мы должны иметь .ini файл, .png файл и .cs файл.
Выводы[]
Кодирование может показаться сложным на первый раз, но это отличный навык, чтобы узнать, как он дает вам максимальный контроль над моддингом. Если у вас все работает правильно, вы можете прочитать это, так как вы можете добавлять зелью разные баффы или оружие, которое применяется дебафф как естественное продолжение этого учебника.
В качестве бонуса, вот некоторые другие UseItem скрипты, которые можно использовать для замены .cs файла, чтобы дать вам хороший круг идей для опробывания:
Вызов метеора[]
Будьте осторожны с этим, так как метеоры могут привести к повреждению структуры. Кроме того, он не может появляться, если есть избыток метеоритов руды в мире.
public void UseItem(Player player, int playerID) { WorldGen.dropMeteor(); }
Спаун кроликов[]
Создавайте дружеских кроликов, которые будут спауниться над кроликом!
public void UseItem(Player player, int playerID) { NPC.SpawnOnPlayer(playerID, "Bunny"); }
Эффект меча Starfury[]
Создавайте падающие с неба звезды для использования
public void UseItem(Player player, int playerID) { // Установите переменные float x = (float)(Main.mouseX + Main.screenPosition.X); float y = (float)(Main.mouseY + Main.screenPosition.Y); float speedX = (Main.rand.Next(80) - 40) / 10f; float speedY = 14.9f; int type = 12; int damage = (int)(item.damage * player.magicDamage); float knockback = 2.0f; int owner = playerID; // Отрегулируйте положение снаряда x += Main.rand.Next(200) - 100f; y += -500f; // Фактический спаун снаряда int projID = Projectile.NewProjectile( x, y, speedX, speedY, type, damage, knockback, owner ); }