示例#1
0
            static public void Postfix(RuleSummonUnit __instance)
            {
                var context = __instance.Context;

                context = ShadowSpells.extractMainContext(context, context?.MaybeCaster);
                if (context == null)
                {
                    return;
                }

                var spell_reality = ShadowSpells.getSpellReality(context);
                var rounds        = __instance.Duration + __instance.BonusDuration;

                if (spell_reality == 20)
                {
                    __instance.SummonedUnit.Descriptor.AddBuff(ShadowSpells.shadow20_buff, __instance.Context, new TimeSpan?(rounds.Seconds));
                }
                else if (spell_reality == 60)
                {
                    __instance.SummonedUnit.Descriptor.AddBuff(ShadowSpells.shadow60_buff, __instance.Context, new TimeSpan?(rounds.Seconds));
                }
                else if (spell_reality == 80)
                {
                    __instance.SummonedUnit.Descriptor.AddBuff(ShadowSpells.shadow80_buff, __instance.Context, new TimeSpan?(rounds.Seconds));
                }
            }
示例#2
0
        private int GetLevels()
        {
            RuleSummonUnit ruleSummonUnit = Rulebook.CurrentContext.LastEvent <RuleSummonUnit>();

            if (ruleSummonUnit != null && ruleSummonUnit.Level > 0)
            {
                return(ruleSummonUnit.Level);
            }
            return(instance.Levels);
        }
示例#3
0
            static public void Postfix(RuleSummonUnit __instance)
            {
                var context = __instance.Context;

                if (context == null)
                {
                    return;
                }
                var rounds = __instance.Duration + __instance.BonusDuration;

                if ((context.SpellDescriptor & (SpellDescriptor)AdditionalSpellDescriptors.ExtraSpellDescriptor.Shadow) == (SpellDescriptor)AdditionalSpellDescriptors.ExtraSpellDescriptor.Shadow20)
                {
                    __instance.SummonedUnit.Descriptor.AddBuff(ShadowSpells.shadow20_buff, __instance.Context, new TimeSpan?(rounds.Seconds));
                }
                else if ((context.SpellDescriptor & (SpellDescriptor)AdditionalSpellDescriptors.ExtraSpellDescriptor.Shadow) == (SpellDescriptor)AdditionalSpellDescriptors.ExtraSpellDescriptor.Shadow60)
                {
                    __instance.SummonedUnit.Descriptor.AddBuff(ShadowSpells.shadow60_buff, __instance.Context, new TimeSpan?(rounds.Seconds));
                }
                else if ((context.SpellDescriptor & (SpellDescriptor)AdditionalSpellDescriptors.ExtraSpellDescriptor.Shadow) == (SpellDescriptor)AdditionalSpellDescriptors.ExtraSpellDescriptor.Shadow80)
                {
                    __instance.SummonedUnit.Descriptor.AddBuff(ShadowSpells.shadow80_buff, __instance.Context, new TimeSpan?(rounds.Seconds));
                }
            }
            static void Postfix(RuleSummonUnit __instance)
            {
                if (IsEnabled() && __instance.SummonedUnit is UnitEntityData summonedUnit)
                {
                    // don't change RangedLegerdemainUnit
                    if (summonedUnit.Blueprint.AssetGuid == "661093277286dd5459cd825e0205f908")
                    {
                        return;
                    }

                    // remove the freezing time when it's not summoned by a full round spell or it's summoned by a trap
                    if (!(__instance.Context?.SourceAbilityContext?.Ability.RequireFullRoundAction ?? false) ||
                        __instance.Initiator.Faction?.AssetGuid == "d75c5993785785d468211d9a1a3c87a6")
                    {
                        summonedUnit.Descriptor.RemoveFact(BlueprintRoot.Instance.SystemMechanics.SummonedUnitAppearBuff);
                    }
                    // add a round of duration and freezing time to the units that summoned using a full-round spell
                    else
                    {
                        summonedUnit.AddBuffDuration(BlueprintRoot.Instance.SystemMechanics.SummonedUnitBuff, 6f);
                        summonedUnit.SetBuffDuration(BlueprintRoot.Instance.SystemMechanics.SummonedUnitAppearBuff, 6f);
                    }
                }
            }
示例#5
0
            public static void Prefix(UnitEntityData initiator, BlueprintUnit blueprint, Vector3 position, ref Rounds duration, ref int level, RuleSummonUnit __instance)
            {
                Mod.Debug($"old duration: {duration} level: {level} \n mult: {settings.summonDurationMultiplier1} levelInc: {settings.summonLevelModifier1}\n initiatior: {initiator} tweakTarget: {settings.summonTweakTarget1} shouldTweak: {UnitEntityDataUtils.CheckUnitEntityData(initiator, settings.summonTweakTarget1)}");
                if (UnitEntityDataUtils.CheckUnitEntityData(initiator, settings.summonTweakTarget1))
                {
                    if (settings.summonDurationMultiplier1 != 1)
                    {
                        duration = new Rounds(Convert.ToInt32(duration.Value * settings.summonDurationMultiplier1));
                    }
                    if (settings.summonLevelModifier1 != 0)
                    {
                        level = Math.Max(0, Math.Min(level + (int)settings.summonLevelModifier1, 20));
                    }
                }
                else if (UnitEntityDataUtils.CheckUnitEntityData(initiator, settings.summonTweakTarget2))
                {
                    if (settings.summonDurationMultiplier2 != 1)
                    {
                        duration = new Rounds(Convert.ToInt32(duration.Value * settings.summonDurationMultiplier2));
                    }
                    if (settings.summonLevelModifier2 >= 0)
                    {
                        level = Math.Max(0, Math.Min(level + (int)settings.summonLevelModifier1, 20));
                    }
                }
                Mod.Debug($"new duration: {duration} level: {level}");

                if (settings.toggleMakeSummmonsControllable)
                {
                    SummonedByPlayerFaction = initiator.IsPlayerFaction;
                }
                Mod.Debug("Initiator: " + initiator.CharacterName + $"(PlayerFaction : {initiator.IsPlayerFaction})" + "\nBlueprint: " + blueprint.CharacterName + "\nDuration: " + duration.Value);
            }