static public void Postfix(ContextActionHealTarget __instance)
        {
            var tr      = Harmony12.Traverse.Create(__instance);
            var context = tr.Property("Context").GetValue <MechanicsContext>();
            var target  = tr.Property("Target").GetValue <TargetWrapper>().Unit;

            if (target == null || context.MaybeCaster == null)
            {
                return;
            }

            if (target.Descriptor.Buffs.HasFact(NewRagePowers.lesser_celestial_totem_buff) && context.SourceAbility != null)
            {
                int bonus = context.Params.CasterLevel;
                context.TriggerRule <RuleHealDamage>(new RuleHealDamage(target, target, DiceFormula.Zero, bonus));
            }
        }
Exemple #2
0
 static bool Prefix(ContextActionHealTarget __instance)
 {
     currentHealDice = __instance.Value;
     return(true);
 }
        static public bool Prefix(ContextActionHealTarget __instance)
        {
            var tr      = Harmony12.Traverse.Create(__instance);
            var context = tr.Property("Context").GetValue <MechanicsContext>();
            var target  = tr.Property("Target").GetValue <TargetWrapper>().Unit;

            if (target == null)
            {
                UberDebug.LogError(__instance, (object)"Invalid target for effect '{0}'", __instance.GetType().Name);
            }
            else if (context.MaybeCaster == null)
            {
                UberDebug.LogError(__instance, (object)"Caster is missing", (object[])Array.Empty <object>());
            }
            else
            {
                int bonus         = __instance.Value.Calculate(context);
                var bonus_to_dice = __instance.Value.BonusValue.Calculate(context);

                var hp_bonus_to_caster_level = context.MaybeCaster.Get <UnitPartExtendHpBonusToCasterLevel>();

                if (hp_bonus_to_caster_level != null && hp_bonus_to_caster_level.active(context.SourceAbility) && context.Params != null)
                {
                    var additional_hp = context.Params.CasterLevel - bonus_to_dice;
                    //Main.logger.Log("Additional Hp: " + additional_hp.ToString());
                    if (additional_hp < 0)
                    {
                        additional_hp = 0;
                    }

                    if (context.HasMetamagic(Metamagic.Empower))
                    {
                        additional_hp += additional_hp / 2;
                    }

                    bonus_to_dice += additional_hp;
                    bonus         += additional_hp;
                }

                if (!context.HasMetamagic(Metamagic.Maximize) && context.MaybeCaster.Ensure <UnitPartHealingMetamagic>().hasMaximize(context.SourceAbility, context.MaybeCaster, target))
                {
                    bonus = (int)__instance.Value.DiceType * __instance.Value.DiceCountValue.Calculate(context) + bonus_to_dice;

                    if (context.HasMetamagic(Metamagic.Empower))
                    {
                        bonus = (int)(bonus * 1.5f);
                    }
                }

                if (!context.HasMetamagic(Metamagic.Empower) && context.MaybeCaster.Ensure <UnitPartHealingMetamagic>().hasEmpower(context.SourceAbility, context.MaybeCaster, target))
                {
                    bonus = (int)(bonus * 1.5f);
                }

                int dice_count = __instance.Value.DiceCountValue.Calculate(context);
                bonus += target.Descriptor.Ensure <UnitPartReceiveBonusHpPerDie>().getAmount(context.SourceAbility) * dice_count;

                if (target.Descriptor.Ensure <UnitPartReceiveBonusCasterLevelHealing>().active() && context.SourceAbility != null && __instance.Value != null)
                {
                    var dice = __instance.Value.DiceType;
                    if (dice_count != 0 && dice != DiceType.Zero && context.Params != null)
                    {
                        bonus += context.Params.CasterLevel;
                    }
                }

                if (bonus > 0)
                {
                    context.TriggerRule <RuleHealDamage>(new RuleHealDamage(context.MaybeCaster, target, DiceFormula.Zero, bonus));
                }
            }

            return(false);
        }