Esempio n. 1
0
        static public BlueprintFeature Create()
        {
            if (library.BlueprintsByAssetId.ContainsKey("b04d23c4d4f14d431d316063db884fe5"))
            {
                return(library.Get <BlueprintFeature>("b04d23c4d4f14d431d316063db884fe5"));
            }
            var variants = new List <BlueprintAbility>();

            buffDict = new Dictionary <Pair <int, int>, BlueprintBuff>();
            flagBuff = Helpers.CreateBuff("ArcanistClassSponMetamagicFlagBuff", "", "",
                                          OtherUtils.GetMd5("ArcanistClassSponMetamagicFlagBuff"), null, null);
            flagBuff.SetBuffFlags(flagBuff.GetBuffFlags() | BuffFlags.HiddenInUi);

            //make metamagics other than heighten
            foreach (var kv in MetaFeats.dict)
            {
                Metamagic        metaId   = (Metamagic)(kv.Key);
                BlueprintFeature metaFeat = library.Get <BlueprintFeature>(kv.Value);
                if (metaId == Metamagic.Heighten)
                {
                    continue;
                }
                RealMetamagicOnNextSpell comp = Helpers.Create <RealMetamagicOnNextSpell>();
                comp.metamagic = metaId;
                var buff_i = Helpers.CreateBuff($"ArcanistClassSponMetamagic{metaId}SubBuff", "", "",
                                                OtherUtils.GetMd5($"ArcanistClassSponMetamagic{metaId}SubBuff"),
                                                metaFeat.Icon, null, comp);
                buff_i.SetName(metaFeat.GetName());
                buff_i.SetDescription(metaFeat.GetDescription());

                var ablEffectComp       = Helpers.Create <AbilityEffectRunAction>();
                var ablEffectCompAction = Helpers.Create <ContextActionApplyBuff>();
                ablEffectCompAction.Buff            = buff_i;
                ablEffectCompAction.Permanent       = false;
                ablEffectCompAction.DurationValue   = PresetDurations.oneRound;
                ablEffectCompAction.IsFromSpell     = false;
                ablEffectCompAction.IsNotDispelable = false;
                ablEffectCompAction.ToCaster        = false;
                ablEffectCompAction.AsChild         = true;
                ablEffectComp.Actions = new ActionList {
                    Actions = new GameAction[] { null, ablEffectCompAction }
                };

                var ablRequirementComp = Helpers.Create <AbilityRequirementFeature>();
                ablRequirementComp.Feat = metaFeat;
                ablRequirementComp.Not  = false;

                var abl_i = Helpers.CreateAbility($"ArcanistClassSponMetamagic{metaId}SubAbl", "", "",
                                                  OtherUtils.GetMd5($"ArcanistClassSponMetamagic{metaId}SubAbl"),
                                                  metaFeat.Icon,
                                                  AbilityType.Special,
                                                  UnitCommand.CommandType.Free,
                                                  AbilityRange.Personal,
                                                  "", "",
                                                  ablEffectComp, ablRequirementComp);
                abl_i.SetName(metaFeat.GetName());
                abl_i.SetDescription(metaFeat.GetDescription());
                abl_i.LocalizedDuration    = Helpers.CreateString("ArcaneTide.OneRound");
                abl_i.LocalizedSavingThrow = Helpers.CreateString("ArcaneTide.WillSave.NoHarm");

                variants.Add(abl_i);
                buffDict[OtherUtils.make_pair <int, int>((int)metaId, 0)] = buff_i;
            }


            var abl = Helpers.CreateAbility("ArcanistClassSponMetamagicAbl", "", "",
                                            "d4abbfad4a4cd0eadde062132945f7bf",//MD5-32[ArcanistClass.SponMetamagic.Abl]
                                            IconSet.metamagic,
                                            AbilityType.Special,
                                            UnitCommand.CommandType.Free,
                                            AbilityRange.Personal,
                                            "", "");

            abl.SetName(Helpers.CreateString("ArcanistClass.SponMetamagic.Abl.Name"));
            abl.SetDescription(Helpers.CreateString("ArcanistClass.SponMetamagic.Abl.Desc"));
            abl.LocalizedDuration    = Helpers.CreateString("ArcaneTide.OneRound");
            abl.LocalizedSavingThrow = Helpers.CreateString("ArcaneTide.WillSave.NoHarm");
            abl.AddComponent(Helpers.CreateAbilityVariants(abl, variants));

            var ablHeighten = CreateHeighten();

            feat = Helpers.CreateFeature("ArcanistClassSponMetamagicFeat", "", "",
                                         "b04d23c4d4f14d431d316063db884fe5",//MD5-32[ArcanistClass.SponMetamagic.Feat]
                                         null,
                                         FeatureGroup.None,
                                         Helpers.Create <AddFacts>(a => a.Facts = new BlueprintUnitFact[] { abl, ablHeighten }));
            feat.HideInUI = true;
            return(feat);
        }
Esempio n. 2
0
        static public BlueprintAbility CreateHeighten()
        {
            var              variants     = new List <BlueprintAbility>();
            Metamagic        heighten     = Metamagic.Heighten;
            BlueprintFeature heightenFeat = library.Get <BlueprintFeature>(MetaFeats.dict[(int)heighten]);

            for (int i = 1; i <= 9; i++)
            {
                string buffname = $"ArcanistClassSponHeighten{i}SubBuff";
                var    buff_i   = Helpers.CreateBuff(buffname, "", "",
                                                     OtherUtils.GetMd5(buffname), heightenFeat.Icon, null);
                buff_i.SetName(Helpers.CreateString($"ArcanistClass.SponMetamagic.Heighten{i}.Name"));
                buff_i.SetDescription(heightenFeat.GetDescription());

                var ablEffectComp       = Helpers.Create <AbilityEffectRunAction>();
                var ablEffectCompAction = Helpers.Create <ContextActionApplyBuff>();
                ablEffectCompAction.Buff            = buff_i;
                ablEffectCompAction.Permanent       = false;
                ablEffectCompAction.DurationValue   = PresetDurations.oneRound;
                ablEffectCompAction.IsFromSpell     = false;
                ablEffectCompAction.IsNotDispelable = false;
                ablEffectCompAction.ToCaster        = false;
                ablEffectCompAction.AsChild         = true;
                ablEffectComp.Actions = new ActionList {
                    Actions = new GameAction[] { null, ablEffectCompAction }
                };

                var ablRequirementComp = Helpers.Create <AbilityRequirementFeature>();
                ablRequirementComp.Feat = heightenFeat;
                ablRequirementComp.Not  = false;

                var ablRequirementComp2 = Helpers.Create <AbilityRequirementClassSpellLevel>();
                ablRequirementComp2.characterClass     = ArcanistClass.arcanist;
                ablRequirementComp2.RequiredSpellLevel = i;

                var abl_i_name = $"ArcanistClassSponHeighten{i}SubAbl";
                var abl_i      = Helpers.CreateAbility(abl_i_name, "", "",
                                                       OtherUtils.GetMd5(abl_i_name),
                                                       heightenFeat.Icon,
                                                       AbilityType.Special,
                                                       UnitCommand.CommandType.Free,
                                                       AbilityRange.Personal,
                                                       "", "",
                                                       ablEffectComp, ablRequirementComp, ablRequirementComp2);
                abl_i.SetName(buff_i.GetName());
                abl_i.SetDescription(buff_i.GetDescription());
                abl_i.LocalizedDuration    = Helpers.CreateString("ArcaneTide.OneRound");
                abl_i.LocalizedSavingThrow = Helpers.CreateString("ArcaneTide.WillSave.NoHarm");

                variants.Add(abl_i);
                buffDict[OtherUtils.make_pair <int, int>((int)heighten, i)] = buff_i;
            }
            BlueprintAbility abl = Helpers.CreateAbility("ArcanistClassSponHeightenAbl", "", "",
                                                         OtherUtils.GetMd5("ArcanistClassSponHeightenAbl"),
                                                         heightenFeat.Icon,
                                                         AbilityType.Special,
                                                         UnitCommand.CommandType.Free,
                                                         AbilityRange.Personal,
                                                         "", "");

            abl.SetName(heightenFeat.GetName());
            abl.SetDescription(heightenFeat.GetDescription());
            abl.LocalizedDuration    = Helpers.CreateString("ArcaneTide.OneRound");
            abl.LocalizedSavingThrow = Helpers.CreateString("ArcaneTide.WillSave.NoHarm");
            abl.AddComponent(abl.CreateAbilityVariants(variants));
            return(abl);
        }