ФЭНДОМ


ВведениеПравить

Этот туториал будет посвящен принципам добавления более сложных эффектов вашим предметам. Он разбит на две части: во-первых, мы обсудим, как создать собственное зелье, который добавляет несколько баффов сразу, а затем мы покажем шаги, необходимые для создания меча и прибавлению вам здоровья с каждым ударом.

Отметим, что обычным предметам можно добавить только один положительный бафф на время с помощью .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
		);
	
}