Пример #1
0
        private static void RapierFinesse(PerkBuilder builder)
        {
            builder.Create(PerkCategoryType.RedMage, PerkType.RapierFinesse)
            .Name("Rapier Finesse")
            .Description("You make melee attack rolls with your DEX if it is higher than your STR. Must be equipped with a rapier.")

            .AddPerkLevel()
            .Description("Grants the Rapier Finesse ability.")
            .RequirementSkill(SkillType.RedMagic, 5)
            .RequirementSkill(SkillType.Rapier, 10)
            .Price(4)
            .TriggerEquippedItem((player, item, slot, type, level) =>
            {
                if (GetBaseItemType(item) != BaseItem.Rapier ||
                    slot != InventorySlot.RightHand)
                {
                    return;
                }

                Creature.AddFeat(player, Feat.WeaponFinesse);
            })
            .TriggerUnequippedItem((player, item, type, level) =>
            {
                if (GetBaseItemType(item) != BaseItem.Rapier ||
                    GetItemInSlot(InventorySlot.RightHand, player) != item)
                {
                    return;
                }

                Creature.RemoveFeat(player, Feat.WeaponFinesse);
            });;
        }
Пример #2
0
        private static void MartialFinesse(PerkBuilder builder)
        {
            builder.Create(PerkCategoryType.Monk, PerkType.MartialFinesse)
            .Name("Martial Finesse")
            .Description("You make melee attack rolls with your DEX if it is higher than your STR. Must be equipped with knuckles.")

            .AddPerkLevel()
            .Description("Grants the Martial Finesse ability.")
            .RequirementSkill(SkillType.Knuckles, 10)
            .RequirementSkill(SkillType.Chi, 5)
            .Price(4)
            .TriggerPurchase((player, type, level) =>
            {
                var rightHand  = GetItemInSlot(InventorySlot.RightHand, player);
                var leftHand   = GetItemInSlot(InventorySlot.LeftHand, player);
                var rightValid = GetIsObjectValid(rightHand);
                var leftValid  = GetIsObjectValid(leftHand);

                // No weapons are equipped. Grant the feat.
                if (!rightValid && !leftValid)
                {
                    Creature.AddFeat(player, Feat.WeaponFinesse);
                }
            })
            .TriggerEquippedItem((player, item, slot, type, level) =>
            {
                // There are items in the right or left hands right now. Exit early
                if (GetIsObjectValid(GetItemInSlot(InventorySlot.RightHand, player)) ||
                    GetIsObjectValid(GetItemInSlot(InventorySlot.LeftHand, player)))
                {
                    return;
                }

                // Nothing was equipped, but we're about to put an item in either hand.
                // For this scenario, we need to remove the feat because the player is about to have a weapon equipped.
                if (slot == InventorySlot.RightHand || slot == InventorySlot.LeftHand)
                {
                    Creature.RemoveFeat(player, Feat.WeaponFinesse);
                }
            })
            .TriggerUnequippedItem((player, item, type, level) =>
            {
                var rightHand  = GetItemInSlot(InventorySlot.RightHand, player);
                var leftHand   = GetItemInSlot(InventorySlot.LeftHand, player);
                var rightValid = GetIsObjectValid(rightHand);
                var leftValid  = GetIsObjectValid(leftHand);

                // The item being removed is in either the right or left hand and the OTHER hand is empty.
                // We need to apply the feat now.
                if ((rightHand == item && !leftValid) ||
                    (leftHand == item && !rightValid))
                {
                    Creature.AddFeat(player, Feat.WeaponFinesse);
                }
            });
        }