Существует пример NPC, включенный в примере-моде. Этот учебник был обновлен, чтобы использовать этот пример.Спрайт для использования сделал Omnir.
Это руководство покажет вам, как создать город NPC\
Пользовательский городской NPC может иметь пользовательский диалог, магазин предметов, требования для спауна и имя.
Создание вашей мод папки[]
Во-первых, вы должны создать ModPack папку. Все NPC и связанные с ними файлы должны быть в папке"NPC". Вы также можете скачать примеры мода и использовать его в качестве точки отсчета.
Создание .ini файла[]
Меняем имя NPC - в данном примере, это называется "Hero of Lumelia» - как и все остальное, имя ini-файла должно быть имя NPC, так что "Hero of Lumelia.ini"
Содержание нашего файла:
[Stats] frameCount=16 animationType=28 aiStyle=7 height=40 width=20 damage=0 defense=22 lifeMax=450 scale=1 soundHit=1 soundKilled=1 type=-1 knockBackResist=.3 townNPC=True friendly=False
Некоторые замечания:
- frameCount - количество кадров, которые находятся в вашем .png спрайт изображения.
- aiStyle - как NPC будет вести себя
- animationType определяет внутренний код, используемый для обработки анимации. Очень часто вы хотите сделать спрайт, который базируется на уже существующем, и использовать тот же код анимации, который уже встроен в игру, а не через процесс создания нового кода анимации.
- townNPC должен быть установлен True для игры, чтобы можно было с ним общаться, как с обычным NPC
- friendly определяет, будет ли NPC бить игрока. В этом случае, я установил friendly False, и повреждения нулю, так что это не больно игроку, и я могу убить NPC легко - для целей тестирования, конечно. Это, как кролики работают, я верю.
- type должен быть установлен в 1, если вы хотите использовать собственное изображение. Он влияет на многие другие вещи, которые обрабатываются в коде
- ПРИМЕЧАНИЕ :::
При изменении названия все файлы должны так же названы.
Пример:
Villager1.ini
Villager1.png
Villager1.cs
- КОНЕЦ ПРИМЕЧАНИЯ :::
Обязательные изображения[]
Вы должны иметь спрайт для NPC (так называемый "Hero of Lumelia.png"), а также спрайт головы NPC (под названием "Hero of Lumelia Head.png"). Глава изображение, необходимое для жилья интерфейс, и выглядит следующим образом:
- Примечание - вы на самом деле не имеете к кадру спрайта никакого дела, просто оставьте его как знамя вы видите выше.
Создание методов для чат, магазин товаров, и более[]
Этот код идет в файл с именем: Hero of Lumelia.cs
TownSpawn()[]
Первое, что нужно добавить - метод, который будет определять, какие условия необходимы для NPC в жилье. Даже если у вас нет требований, этот метод необходим для того, чтобы спауниться. Вот что мы имеем в нашем примере:
public static bool TownSpawn() { if(Main.hardMode) return true; return false; }
Этот NPC спаунится, если мир находится в хардмоде. Если метод return true, NPC будет появляться.
SetName()[]
Затем, мы добавим SetName () метод. Настоятельно рекомендуется определить это, если вы хотите, чтобы ваш NPC назывался как "Hero of Lumelia the Hero of Lumelia"
public static string SetName() { if(Main.rand.Next(1)==0) return "Arthur"; return "Lancelot"; }
Просто верните строку имя NPC. Идея состоит в том, что когда ваш NPC умирает, при появлении, он имеет новое название. Поэтому мы используем немного случайности и выбираем из множества имен.
Chat()[]
Теперь мы будем смотреть на чат метод.
public static string Chat() { if(Main.rand.Next(1)==0) return "I eat Corruptors for breakfast."; return "The pixies around here have a serious temper."; }
Этот метод просто возвращает строку диалоговый текст, отображаемый, когда игрок нажимает на NPC. Вы можете проверить различные условия, чтобы NPC говорил вещи в определенное время дня или высмеивать, как только игрок имеет 6 сердца ... Есть много вещей, которые вы могли бы сделать. Простейший пример включает в себя только случайный выбор между несколькими строками текста.
SetupShop()[]
Наконец, это код нашего примера для установки магазина предметов:
public static void SetupShop(Chest chest) { int index=0; chest.item[index].SetDefaults("Flame Beam"); index++; chest.item[index].SetDefaults("Muramasa"); index++; chest.item[index].SetDefaults("Red Hero's Shirt"); index++; chest.item[index].SetDefaults("Red Hero's Pants"); index++; chest.item[index].SetDefaults("Red Hero's Hat"); index++; }
Она занимает сундук в качестве параметра, и все, что вам нужно сделать, это добавить элементы к сундуку .SetDefaults () метод устанавливает пункт, что вы хотите его видеть. Вы можете также изменять цены на эти предметы, хотя это не будет сделано в этом примере.
Заключение[]
Это руководство лишь поверхностно, что здесь возможно. Я надеюсь, что кто-то может занять время, чтобы добавить некоторые дополнительные понятия для данного учебного курса в определенный момент.