Перейти к основному содержимому
The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.

Создаём кастомную способность

Класс CustomAbility

Специальные способности на самом деле очень похожи на предметы. У них есть SetupDetails, Count и они существуют в инвентаре своего владельца, так же как и предметы. Чтобы создать кастомную способность, вам надо просто создать класс наследующий от CustomAbility (который наследует от CustomItem):

MyCustomAbility.cs
public class MyCustomAbility : CustomAbility
{
/* ... */
}

Вам надо реализовать 2 метода: OnAdded вызывается когда персонаж получает эту способность, и OnPressed вызывается когда игрок использует способность. Тут нету OnRemoved на данный момент, так как это не реализовано в СоРе.

MyCustomAbility.cs
public class MyCustomAbility : CustomAbility
{
public override void OnAdded() { /* ... */ }
public override void OnPressed() { /* ... */ }
}

SetupDetails

SetupDetails перегружен CustomAbility и вот его реализация:

    public override void SetupDetails()
{
Item.stackable = true;
Item.initCount = 0;
Item.lowCountThreshold = 100;
}

Этот метод должен работать для большинства способностей, но если вам надо что-то более сложное, то перегрузите его сами.

Инициализация

Просто вызовите метод CreateCustomAbility с типом вашей способности в качестве параметра:

MyCustomAbility.cs
public class MyCustomAbility : CustomAbility
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomAbility<MyCustomAbility>();
}
}
примечание

Смотрите подробнее об атрибуте RLSetup здесь.

Вы можете выставить название и описание своей способности с помощью методов WithName и WithDescription:

MyCustomAbility.cs
public class MyCustomAbility : CustomAbility
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomAbility<MyCustomAbility>();
.WithName(new CustomNameInfo("My Custom Ability"))
.WithDescription(new CustomNameInfo("My Custom Ability is very cool and does a lot of great stuff"));
}
}

То же самое можно сделать и со спрайтами и разблокировками:

MyCustomAbility.cs
public class MyCustomAbility : CustomAbility
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomAbility<MyCustomAbility>();
.WithName(new CustomNameInfo("My Custom Ability"))
.WithDescription(new CustomNameInfo("My Custom Ability is very cool and does a lot of great stuff"));
.WithSprite(Properties.Resources.MyCustomAbility)
.WithUnlock(new AbilityUnlock { UnlockCost = 10, CharacterCreationCost = 5 });
}
}

Свойства разблокировок

Вы можете использовать следующие свойства при инициализации AbilityUnlock:

СвойствоПо умолчаниюОписание
UnlockCost0Стоимость разблокировки способности, в наггетсах. Если выставлено на 0, разблокируется автоматически, как только все требования открыты.
CharacterCreationCost1Стоимость способности в Редакторе персонажей, в очках.
IsAvailabletrueОпределяет, доступна способность в ... Ну, в игре нету меню для кастомных способностей на данный момент, но если бы было, то это свойство определяло бы, доступна ли способность там или нет.
IsAvailableInCCtrueОпределяет, доступна ли способность в Редакторе персонажей.
PrerequisitesОпределяет какие разблокировки должны быть разблокированы, чтобы открыть эту способность.
RecommendationsПросто показывает эти разблокировки в отдельном разделе Рекомендации в меню.

Другие свойства не должны использоваться во время инициализации.

Примеры


The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.