Перейти к основному содержимому
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.