Создаём кастомный предмет
Класс CustomItem
Чтобы сделать кастомный предмет, создайте класс наследующий от CustomItem
:
public class MyCustomItem : CustomItem
{
/* ... */
}
Вам надо реализовать только один метод - SetupDetails
:
public class MyCustomItem : CustomItem
{
public override void SetupDetails()
{
Item.itemType = ItemTypes.Tool;
Item.itemValue = 200;
Item.initCount = 1;
Item.rewardCount = 1;
Item.stackable = true;
Item.hasCharges = true;
}
}
Этот метод вызывается только один раз, ког да предмет создаётся или спавнится. Смотрите подробнее далее на этой странице.
Добавляйте категории через атрибут ItemCategories
вместо добавления их в SetupDetails
:
[ItemCategories(RogueCategories.Usable, RogueCategories.Weird, "MyCustomCategory")]
public class MyCustomItem : CustomItem
{
/* ... */
}
Используйте статические классы со строковыми константами, такие как RogueCategories
и ItemTypes
. Таким образом вы не допустите опечаток. Опечатки иногда могут быть критичными, ведь ни игра, ни RogueLibs не следят за всеми существующими в игре категориями (однако, это довольно интересная идея, может я сделаю что-то подобное).
Инициализация
Просто вызовите метод CreateCustomItem
с типом своего предмета в качестве параметра:
public class MyCustomItem : CustomItem
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomItem<MyCustomItem>();
}
}
Смотрите подробнее об атрибуте RLSetup
здесь.
Вы можете выставить название и описание своего предмета с помощью методов WithName
и WithDescription
:
public class MyCustomItem : CustomItem
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomItem<MyCustomItem>();
.WithName(new CustomNameInfo("My Custom Item"))
.WithDescription(new CustomNameInfo("My Custom Item is very cool and does a lot of great stuff"));
}
}
То же самое можно сделать и со спрайтами и разблокировками:
public class MyCustomItem : CustomItem
{
[RLSetup]
public static void Setup()
{
RogueLibs.CreateCustomItem<MyCustomItem>();
.WithName(new CustomNameInfo("My Custom Item"))
.WithDescription(new CustomNameInfo("My Custom Item is very cool and does a lot of great stuff"));
.WithSprite(Properties.Resources.MyCustomItem)
.WithUnlock(new ItemUnlock { UnlockCost = 10, CharacterCreationCost = 5, LoadoutCost = 4, });
}
}
Смотрите Кастомные имена, Кастомные спрайты.
Свойства разблокировок
Вы можете использовать следующие свойства при инициализации ItemUnlock
:
Свойство | По умолчанию | Описание |
---|---|---|
UnlockCost | 0 | Стоимость разблокировки предмета, в наггетсах. Если выставлено на 0, разблокируется автоматически, как только все требования открыты. |
CharacterCreationCost | 1 | Стоимость предмета в Редакторе персонажей, в очках. |
LoadoutCost | 1 | Стоимость предмета в Обвесе, в наггетсах. |
IsAvailable | true | Определяет, доступен ли предмет в Меню наград. |
IsAvailableInCC | true | Определяет, доступен ли предмет в Редакторе персонажей. |
IsAvailableInItemTeleporter | true | Определяет, доступен ли предмет в меню Вещевого телепорта. |
Prerequisites | Определяет какие разблокировки должны быть разблокированы, чтобы открыть этот предмет. | |
Recommendations | Просто показывает эти разблокировки в отдельном разделе Рекомендации в меню. |
Другие свойства не должны использоваться во время инициализации.
Реализация SetupDetails
Итак, пока генератор кода ещё в процессе написания, используйте следующие таблицы:
Название поля | Описание |
---|---|
itemType | Определяет как предмет будет вести себя в игре и всякое такое. |
initCount | Определяет начальное количество предмета. |
rewardCount | (необязательно) Определяет количество предмета, получаемое с квестов. По умолчанию, равен initCount |
itemValue | Определяет стоимость одной единицы предмета. Стоимость оружия высчитывается немного по-другому - стоимость оружия с 100 прочности, или стоимость оружия с полным боезапасом (maxAmmo ). |
stackable | Определяет, стакается ли предмет или есть ли у него заряды или что-то типа этого. Если не выставлено, количество предмета не отображается. |
noCountText | (необязательно) Определяет, не отображать ли количество предмета, даже поле выше выставлено на true . |
- Еда/Употребляемое
- Инструмент
- Одеваемое
- Оружие
- Квестовый предмет
Название поля | Описание |
---|---|
healthChange | Определяет сколько здоровья предмет восстанавливает. |
statusEffect | Определяет статусный эффект предмета. Также означает, что предмет может быть использован на Вентиляции. |
contents | Как statusEffect , но в виде списка. |
stackableContents | ??? |
goesInToolbar | Определяет может ли предмет быть назначен на слот быстрого доступа и использован на 1-5 кнопки. |
Название поля | Описание |
---|---|
goesInToolbar | Определяет может ли предмет быть назначен на слот быстрого доступа и использован на 1-5 кнопки. |
hasCharges | Определяет есть ли у предмета заряды. Означает, что предмет не может быть разделён в мультиплеере. |
canBeUsedOn_____ | Определяет может ли предмет быть использован на этих объектах. |
Название поля | Описание |
---|---|
armorDepletionType | Определяет как прочность предмета будет уменьшаться. "MeleeAttack" (атакуя что-либо, а не будучи атакованным), "Bullet" , "Everything" или "FireAndEverything" . |
chanceToWear | Определяет шанс брони появиться у НПС, в процентах. По умолчанию, 100. |
canFix | Определяет может ли броня быть починена. Она не будет уничтожена если её прочность достигнет 0. |
_____Mod | Определяет насколько какие характеристики носителя будут изменяться. Работает только с положительными значениями. |
contents | Определяет список эффектов, которые носитель будет получать при ношении. |
stackableContents | ??? |
- Броня
- Головной убор
Название поля | Описание |
---|---|
isArmor | Если предмет - броня, выставьте это на true . |
Название поля | Описание |
---|---|
isArmorHead | Если предмет - головной убор, выставьте это на true . |
behindHair | Ставит головной убор за волосы. |
cantShowHair | Обрезает верхнюю половину волос носителя. |
cantShowHairAtAll | Не отображает волосы вообще. |
permanentHeadpiece | ??? |
Название поля | Описание |
---|---|
isWeapon | Если предмет - оружие, выставьте это на true . |
weaponCode | Выставьте это на код вашего типа оружия. |
weaponToBeLoaded | Определяет не заряжен ли предмет с самого начала и должен ли он быть заряжен (как Водяной пистолет). |
- Ближнего боя
- Кидательное
- Дальнего боя
Название поля | Описание |
---|---|
meleeDamage | Выставьте это на урон вашего оружия в ближнем бою. |
nonLethal | Если предмет не наносит урон, как Липкая перчатка или Хлороформ, выставьте это на true . |
meleeNoHit | Выставьте это на true , если оружие не бьёт НПС, а то есть не отталкивает их. |
hitSoundType | Звук при ударе оружием обо что-то. "Normal" или "Cut" . |
specialMeleeTexture | Определяет использовать ли специальные спрайты при держании в руках(?). |
Название поля | Описание |
---|---|
throwDistance | Максимальное расстояние, на которое можно кинуть предмет. |
throwExtraDist | Определяет должен ли предмет кидаться немного дальше, чем персонаж прицелился. Выставьте на true , если предмет - обычное кидательное оружие. Выставьте на false , если это ловушка, чтобы она вставала именно туда, куда игрок прицелился. |
- Кидательное
- Ловушка
Название поля | Описание |
---|---|
throwDamage | Выставьте это на кидательный урон вашего оружия. |
Название поля | Описание |
---|---|
touchDamage | Выставьте это, если ловушка активируется при касании. |
incendiaryDamage | Выставьте это, если ловушка активируется взрывами. |
otherDamage | Выставьте это, если ловушка наносит какой-то невзрывной урон. |
reactOnTouch | Выставьте это, если ловушка активируется при касании или ударе обо что-то. |
dontFlash | Выставьте на true , если не хотите, чтобы ловушка мигала красным цветом после установки. |
Название поля | Описание |
---|---|
maxAmmo | Определяет максимальный боезапас оружия. По умолчанию, равно initCount . |
initCountAI | Определяет сколько патронов от этого оружия получают НПС. По умолчанию, 1. |
doesNoDamage | Если оружие не наносит урон, как Исследовательская пушка или Воздуходувка, выставьте на true . |
gunKnockback | Определяет отдачу при стрельбе. Автомат (15), Револьвер (30), Ракетница/Дробовик (60). |
rapidFire | Определяет можно ли удерживать левую кнопку мыши для стрельбы из оружия. |
longerRapidFire | Определяет должны ли НПС стрелять 1-2 секунды вместо просто нескольких снарядов. |
shortRangeProjectile | Определяет должны ли НПС подходить ближе к цели чтобы использовать оружие. |
noRefills | Выставьте на true , если вы не хотите, чтобы оружие было пополняемым в Раздатчике боеприпасов. |
Название поля | Описание |
---|---|
questItem | Выставьте на true если это квестовый предмет. |
questItemCanBuy | Выставьте на true если он может быть куплен. |
- Ограничения
- Графика
- Другое
- ИИ и автоматизация
Название поля | Описание |
---|---|
canRepeatInShop | Определяет может ли этот предмет повторяться в магазине. |
nonStackableInShop | Определяет должно ли, в магазинах быть по 1 этого предмета в каждом слоту. |
cantBeCloned | Определяет неклонируем ли предмет в Репликаторе. |
cantStoreInATMMachine | Определяет не могут ли игроки сохранять этот предмет в Банкомате. |
notInLoadoutMachine | Определяет не должен ли этот предмет появляться в Раздатчике, если он был выбран в качестве стартового предмета. |
destroyAtLevelEnd | Определяет должен ли предмет быть уничтожен при переходе на следующий уровень. |
cantDrop | Определяет не должен ли предмет падать с персонажей. |
doSpill | Определяет может ли предмет падать с персонажей. По умолчанию, true . |
cantDropNPC | Противоположность doSpill . Наверное их надо выставлять одновременно. По умолчанию, false . |
cantDropSpecificCharacter | Выставьте это на название персонажа, если предмет не должен падать с него и кастомных персонажей, у которых этот предмет выбран как стартовый. |
characterExclusive | Выставьте это на true , если этот предмет эксклюзивен для какого-то персонажа и кастомных персонажей. |
characterExclusiveSpecificCharacter | Выставьте это на название персонажа, если этот предмет эксклюзивен для него и кастомных персонажей. |
Название поля | Описание |
---|---|
noCountText | Определяет не отображать ли количество предмета в инвентаре. |
noShadow | Определяет не должен ли предмет иметь тень. |
shadowOffset | Определяет положение тени. Тут довольно сложно, так что я сделаю превью для этого в генераторе кода. |
lowCountThreshold | Определяет ниже какого количества текст должен быть красным. По умолчанию, 0 - не становится красным. |
Название поля | Описание |
---|---|
colliderSize | Определяет размер коллайдера. null по умолчанию, или "Big" для коллайдера побольше. |
canCatchFire | Определяет может ли предмет подхватить огонь. В игре используется только на Мясе в фабриках. |
Название поля | Описание |
---|---|
dontAutomaticallySelect | Определяет не должно ли оружие или броня быть экипированны автоматически. |
dontSelectNPC | То же самое, но для НПС. |
canHaveStartingOwner | Определяет может ли предмет иметь стартового владельца. По умолчанию, true . |
thiefCantSteal | Определяет не могут ли Воры украсть этот предмет. Обычно выставляется, если вы не хотите чтобы Воры использовали предмет против игрока. |