static BlueprintFeature CreateTimeHop()
        {
            // Note: dimension door is 50 feet in game.
            // Since time hop allows 10 ft/level, that'd work out to 1 resource per 5 levels.
            // But the average jump may be shorter, so 1 per 3 seems like a good compromise.
            var dimensionDoor       = library.Get <BlueprintAbility>("5bdc37e4acfa209408334326076a43bc");
            var dimensionDoorCaster = library.Get <BlueprintAbility>("a9b8be9b87865744382f7c64e599aeb2");

            var feat = Helpers.CreateFeature("MysteryTimeHop", "Time Hop",
                                             "As a move action, you can teleport up to 50 feet per 3 oracle levels, as the dimension door spell. This movement does not provoke attacks of opportunity. You must have line of sight to your destination to use this ability. You can bring other willing creatures with you, but you must expend 2 uses of this ability. You must be at least 7th level before selecting this revelation.",
                                             "5ba08ff4d852464a9bee80442deda276", dimensionDoor.Icon, FeatureGroup.None);
            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "239347ee299945fabc0e8e18402104ab", null);

            resource.SetIncreasedByLevelStartPlusDivStep(1, 3, 1, 3, 1, 0, 0, oracleArray);

            var hopMass = DragonMystery.CopyBuffSpellToAbility(dimensionDoor, $"{feat.name}MassAbility", "c92b010781a34abcb33d5b3ed6670af3",
                                                               AbilityType.Supernatural, $"{feat.Description}\n{dimensionDoor.Description}", resource);

            hopMass.GetComponent <AbilityResourceLogic>().Amount = 2;

            var hopCaster = DragonMystery.CopyBuffSpellToAbility(dimensionDoorCaster, $"{feat.name}Ability", "cdadb4b7fb724438ac7f7f52787dad8c",
                                                                 AbilityType.Supernatural, $"{feat.Description}\n{dimensionDoorCaster.Description}", resource);

            feat.SetComponents(oracle.PrerequisiteClassLevel(7),
                               resource.CreateAddAbilityResource(),
                               hopCaster.CreateAddFact(), hopMass.CreateAddFact(),
                               hopCaster.CreateBindToClass(oracle, StatType.Charisma),
                               hopMass.CreateBindToClass(oracle, StatType.Charisma));
            return(feat);
        }
        static BlueprintFeature CreateSpeedOrSlowTime()
        {
            var haste = library.Get <BlueprintAbility>("486eaff58293f6441a5c2759c4872f98");
            var slow  = library.Get <BlueprintAbility>("f492622e473d34747806bdb39356eb89");

            var feat = Helpers.CreateFeature("MysteryTimeSpeedOrSlow", "Speed or Slow Time",
                                             "As a standard action, you can speed up or slow down time, as either the haste or slow spell. You can use this ability once per day, plus one additional time per day at 12th level and 17th level. You must be at least 7th level before selecting this revelation.",
                                             "4df30dbc2ad147a995fce23e765b9726", haste.Icon, FeatureGroup.None);
            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "3388b2b6812246ea801c0f4140192a66", null);

            resource.SetIncreasedByLevelStartPlusDivStep(1, 7, 1, 5, 1, 0, 0, oracleArray);

            var hasteAbility = DragonMystery.CopyBuffSpellToAbility(haste, $"{feat.name}Haste",
                                                                    "e996186da70d4c0b95c5a6609ff92d88", AbilityType.SpellLike, haste.Description, resource);

            var slowAbility = DragonMystery.CopyBuffSpellToAbility(slow, $"{feat.name}Slow",
                                                                   "dec33450a0b9410e90a69049afce691d", AbilityType.SpellLike, slow.Description, resource);

            feat.SetComponents(
                oracle.PrerequisiteClassLevel(7),
                resource.CreateAddAbilityResource(),
                hasteAbility.CreateAddFact(),
                slowAbility.CreateAddFact(),
                hasteAbility.CreateBindToClass(oracle, StatType.Charisma),
                slowAbility.CreateBindToClass(oracle, StatType.Charisma));
            return(feat);
        }
        static BlueprintFeature CreateTimeHop()
        {
            // Note: dimension door is 50 feet in game.
            // Since time hop allows 10 ft/level, that'd work out to 1 resource per 5 levels.
            // But the average jump may be shorter, so 1 per 3 seems like a good compromise.
            var dimensionDoor       = library.Get <BlueprintAbility>("5bdc37e4acfa209408334326076a43bc");
            var dimensionDoorCaster = library.Get <BlueprintAbility>("a9b8be9b87865744382f7c64e599aeb2");

            var feat = Helpers.CreateFeature("MysteryTimeHop", "光阴跃步",
                                             "以一个移动动作,你可以像使用任意门法术一样,传送50尺。每3先知等级可使用一次。这个移动不会引起藉机攻击,你和你的目的地之间必须有效果线存在。你可以让其它自愿的生物随你伴行,不过你得消耗两次使用次数。要选择此启示,你必须达到7级。",
                                             "5ba08ff4d852464a9bee80442deda276", dimensionDoor.Icon, FeatureGroup.None);
            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "239347ee299945fabc0e8e18402104ab", null);

            resource.SetIncreasedByLevelStartPlusDivStep(1, 3, 1, 3, 1, 0, 0, oracleArray);

            var hopMass = DragonMystery.CopyBuffSpellToAbility(dimensionDoor, $"{feat.name}MassAbility", "c92b010781a34abcb33d5b3ed6670af3",
                                                               AbilityType.Supernatural, $"{feat.Description}\n{dimensionDoor.Description}", resource);

            hopMass.GetComponent <AbilityResourceLogic>().Amount = 2;

            var hopCaster = DragonMystery.CopyBuffSpellToAbility(dimensionDoorCaster, $"{feat.name}Ability", "cdadb4b7fb724438ac7f7f52787dad8c",
                                                                 AbilityType.Supernatural, $"{feat.Description}\n{dimensionDoorCaster.Description}", resource);

            feat.SetComponents(oracle.PrerequisiteClassLevel(7),
                               resource.CreateAddAbilityResource(),
                               hopCaster.CreateAddFact(), hopMass.CreateAddFact(),
                               hopCaster.CreateBindToClass(oracle, StatType.Charisma),
                               hopMass.CreateBindToClass(oracle, StatType.Charisma));
            return(feat);
        }
        static BlueprintFeature CreateSpeedOrSlowTime()
        {
            var haste = library.Get <BlueprintAbility>("486eaff58293f6441a5c2759c4872f98");
            var slow  = library.Get <BlueprintAbility>("f492622e473d34747806bdb39356eb89");

            var feat = Helpers.CreateFeature("MysteryTimeSpeedOrSlow", "加减时流",
                                             "以一个标准动作,你可以加速或减缓时间的流动,如同“加速术”和“迟缓术”。你每天可以使用此能力1次,12和17级再加一次。你必须达到7级才能选取此启示。",
                                             "4df30dbc2ad147a995fce23e765b9726", haste.Icon, FeatureGroup.None);
            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "3388b2b6812246ea801c0f4140192a66", null);

            resource.SetIncreasedByLevelStartPlusDivStep(1, 7, 1, 5, 1, 0, 0, oracleArray);

            var hasteAbility = DragonMystery.CopyBuffSpellToAbility(haste, $"{feat.name}加速",
                                                                    "e996186da70d4c0b95c5a6609ff92d88", AbilityType.SpellLike, haste.Description, resource);

            var slowAbility = DragonMystery.CopyBuffSpellToAbility(slow, $"{feat.name}减速",
                                                                   "dec33450a0b9410e90a69049afce691d", AbilityType.SpellLike, slow.Description, resource);

            feat.SetComponents(
                oracle.PrerequisiteClassLevel(7),
                resource.CreateAddAbilityResource(),
                hasteAbility.CreateAddFact(),
                slowAbility.CreateAddFact(),
                hasteAbility.CreateBindToClass(oracle, StatType.Charisma),
                slowAbility.CreateBindToClass(oracle, StatType.Charisma));
            return(feat);
        }
        static BlueprintFeature CreateFinalRevelation()
        {
            var timeStop = TimeStop.spell;
            var name     = "MysteryTimeFinalRevelation";
            var resource = Helpers.CreateAbilityResource($"{name}Resource", "", "", "372c0f8d0b1241a6a3c0ef2c5b8ad459", timeStop.Icon);

            resource.SetFixedResource(1);
            var feat = Helpers.CreateFeature(name, "Final Revelation",
                                             "Upon reaching 20th level, you become a true master of time and stop aging. You cannot be magically aged and no longer take penalties to your ability scores for aging. Age bonuses still accrue, and any aging penalties that you have already accrued remain in place. You cannot die of old age, but you can be killed or die through accident, disease, poison, or other external effects. In addition, you can cast time stop once per day as a spell-like ability.",
                                             "6a3786190da74a5d9e71d83c1c327a15", timeStop.Icon, FeatureGroup.None,
                                             resource.CreateAddAbilityResource(),
                                             DragonMystery.CopyBuffSpellToAbility(timeStop, $"{name}Spell", "c85dfa2de6fb472ebc79c0802df0cefb",
                                                                                  AbilityType.SpellLike, timeStop.Description, resource).CreateAddFact());

            return(feat);
        }
        static BlueprintFeature CreateFinalRevelation()
        {
            var timeStop = TimeStop.spell;
            var name     = "MysteryTimeFinalRevelation";
            var resource = Helpers.CreateAbilityResource($"{name}Resource", "", "", "372c0f8d0b1241a6a3c0ef2c5b8ad459", timeStop.Icon);

            resource.SetFixedResource(1);
            var feat = Helpers.CreateFeature(name, "最终启示",
                                             "20级时,你终于成为时空的统驭者,同时不再衰老。你免疫任何由魔法和自然造成的衰老效果,不过之前的年纪减值仍然存在、加值也予以保留。你将永远不会老死,不过仍然可能因为意外,疾病,毒素或什么其他莫名奇妙的原因死去。此外,你每天还可以用类法术能力施展1次“时间停止”。",
                                             "6a3786190da74a5d9e71d83c1c327a15", timeStop.Icon, FeatureGroup.None,
                                             resource.CreateAddAbilityResource(),
                                             DragonMystery.CopyBuffSpellToAbility(timeStop, $"{name}Spell", "c85dfa2de6fb472ebc79c0802df0cefb",
                                                                                  AbilityType.SpellLike, timeStop.Description, resource).CreateAddFact());

            return(feat);
        }
Ejemplo n.º 7
0
        static BlueprintFeature CreateFinalRevelation()
        {
            var timeStop = TimeStop.spell;
            var name     = "MysteryTimeFinalRevelation";
            var resource = Helpers.CreateAbilityResource($"{name}Resource", "", "", "372c0f8d0b1241a6a3c0ef2c5b8ad459", timeStop.Icon);

            resource.SetFixedResource(1);
            var feat = Helpers.CreateFeature(name, RES.FinalRevelationFeatureName_info,
                                             RES.MysteryTimeFinalRevelationDescription_info,
                                             "6a3786190da74a5d9e71d83c1c327a15", timeStop.Icon, FeatureGroup.None,
                                             resource.CreateAddAbilityResource(),
                                             DragonMystery.CopyBuffSpellToAbility(timeStop, $"{name}Spell", "c85dfa2de6fb472ebc79c0802df0cefb",
                                                                                  AbilityType.SpellLike, timeStop.Description, resource).CreateAddFact());

            return(feat);
        }
        static BlueprintFeature CreateFormOfFlame()
        {
            var feat = Helpers.CreateFeature("MysteryFlameForm", RES.MysteryFlameFormName_info,
                                             RES.MysteryFlameFormDescription_info,
                                             "1c18972911284249a0bc38f6f4ec4304",
                                             Helpers.GetIcon("bb6bb6d6d4b27514dae8ec694433dcd3"), // elemental body fire 1
                                             FeatureGroup.None);

            var resource = Helpers.CreateAbilityResource($"{feat.name}Resource", "", "", "e86f5231a48548f2a4d76a9e664acfab", null);

            resource.SetFixedResource(1);

            var formIds = new string[] {
                "bb6bb6d6d4b27514dae8ec694433dcd3",
                "9a87d2fb0e288664c8dff299ff030a38",
                "2c40b391368f05e4b91aa8a8a51109ef",
                "c281eeecc554b72449fef43924e522ce"
            };

            var components = new List <BlueprintComponent> {
                Helpers.PrerequisiteClassLevel(oracle, 7),
                resource.CreateAddAbilityResource()
            };
            var abilities = new List <BlueprintAbility>();

            for (int i = 0; i < formIds.Length; i++)
            {
                var spellId = formIds[i];
                var spell   = library.Get <BlueprintAbility>(spellId);
                var ability = DragonMystery.CopyBuffSpellToAbility(spell, $"{feat.name}{i + 1}",
                                                                   Helpers.MergeIds("7bcf2c58cd3f4b64862c7d3b33daa305", spellId),
                                                                   AbilityType.Supernatural,
                                                                   feat.Description,
                                                                   resource, DurationRate.Hours);
                abilities.Add(ability);

                var isLast   = i == formIds.Length - 1;
                var minLevel = 7 + i * 2;
                var maxLevel = isLast ? 20 : 8 + i * 2;
                components.Add(ability.CreateAddFactOnLevelRange(oracle, minLevel, maxLevel));
            }
            components.Add(OracleClass.CreateBindToOracle(abilities.ToArray()));
            feat.SetComponents(components);
            return(feat);
        }