Example #1
0
            public static void Postfix(ref IEnumerable <TargetWrapper> __result, AbilityTargetsAround __instance, ConditionsChecker ___m_Condition, AbilityExecutionContext context, TargetWrapper anchor)
            {
                if (settings.toggleNoFriendlyFireForAOE)
                {
                    UnitEntityData caster = context.MaybeCaster;
                    IEnumerable <UnitEntityData> targets = GameHelper.GetTargetsAround(anchor.Point, __instance.AoERadius);
                    if (caster == null)
                    {
                        __result = Enumerable.Empty <TargetWrapper>();
                        return;
                    }
                    switch (__instance.TargetType)
                    {
                    case TargetType.Enemy:
                        targets = targets.Where(caster.IsEnemy);
                        break;

                    case TargetType.Ally:
                        targets = targets.Where(caster.IsAlly);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();

                    case TargetType.Any:
                        break;
                    }
                    if (___m_Condition.HasConditions)
                    {
                        targets = targets.Where(u => { using (context.GetDataScope(u)) { return(___m_Condition.Check()); } }).ToList();
                    }
                    if (caster.IsPlayerFaction && ((context.AbilityBlueprint.EffectOnAlly == AbilityEffectOnUnit.Harmful) || (context.AbilityBlueprint.EffectOnEnemy == AbilityEffectOnUnit.Harmful)))
                    {
                        if (context.AbilityBlueprint.HasLogic <AbilityUseOnRest>())
                        {
                            AbilityUseOnRestType componentType = context.AbilityBlueprint.GetComponent <AbilityUseOnRest>().Type;
                            //bool healDamage = componentType == AbilityUseOnRestType.HealDamage || componentType == AbilityUseOnRestType.HealDamage;
                            bool healDamage = componentType == AbilityUseOnRestType.HealDamage;
                            targets = targets.Where(target => {
                                if (target.IsPlayerFaction && !healDamage)
                                {
                                    bool forUndead = componentType == AbilityUseOnRestType.HealMassUndead || componentType == AbilityUseOnRestType.HealSelfUndead || componentType == AbilityUseOnRestType.HealUndead;
                                    return(forUndead == target.Descriptor.IsUndead);
                                }
                                return(true);
                            });
                        }
                        else
                        {
                            targets = targets.Where(target => !target.IsPlayerFaction);
                        }
                    }
                    __result = targets.Select(target => new TargetWrapper(target));
                }
            }
Example #2
0
        public void mod_Tick()
        {
            if (!KingmakerPatchSettings.Cheats.Abracadabra)
            {
                this.source_Tick();
                return;
            }

            GlobalMapState globalMap = Kingmaker.Game.Instance.Player.GlobalMap;

            Dictionary <BlueprintLocation, LocationData> .ValueCollection locations = globalMap.Locations.Values;

            // don't run foreach on tick if we don't have to
            // this will return true until all locations, except hidden locations and waypoints, are revealed
            bool canRevealLocations = locations.Any(l => !l.IsRevealed && !IsHiddenOrWaypoint(l));

            if (!canRevealLocations)
            {
                return;
            }

            // removed distance checks
            foreach (LocationData locationData in locations)
            {
                if (locationData.IsRevealed)
                {
                    continue;
                }

                GlobalMapLocation locationObject = GlobalMapRules.Instance.GetLocationObject(locationData.Blueprint);

                if (!locationObject)
                {
                    continue;
                }

                ConditionsChecker possibleToRevealCondition = locationData.Blueprint.PossibleToRevealCondition;

                LocationType type = locationData.Blueprint.Type;

                switch (type)
                {
                case LocationType.Location:
                case LocationType.Landmark:
                    if (!possibleToRevealCondition.HasConditions || possibleToRevealCondition.Check())
                    {
                        GlobalMapRules.Instance.RevealLocation(locationObject);
                    }

                    break;

                default:
                    if (type != LocationType.HiddenLocation)
                    {
                        continue;
                    }

                    if (possibleToRevealCondition.HasConditions && !possibleToRevealCondition.Check())
                    {
                        continue;
                    }

                    GlobalMapRules.Instance.RevealLocation(locationObject);
                    break;
                }
            }
        }