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)); } }
private int GetLevels() { RuleSummonUnit ruleSummonUnit = Rulebook.CurrentContext.LastEvent <RuleSummonUnit>(); if (ruleSummonUnit != null && ruleSummonUnit.Level > 0) { return(ruleSummonUnit.Level); } return(instance.Levels); }
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); } } }
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); }