Example #1
0
 public static string FormatConditions(ConditionsChecker conditions)
 {
     return(FormatConditions(conditions.Conditions));
 }
Example #2
0
 public static string FormatConditions(ConditionsChecker conditions) => FormatConditions(conditions.Conditions);
Example #3
0
        public static BlueprintCheck CreateCheck(string name, int num, StatType type, int dc, BlueprintCueBase success, BlueprintCueBase fail, bool hidden = false, DCModifier[] dCModifier = null, ConditionsChecker condition = null, params BlueprintComponent[] components)
        {
            BlueprintCheck o = Helpers.Create <BlueprintCheck>();

            o.Success     = success;
            o.Fail        = fail;
            o.Hidden      = hidden;
            o.DC          = dc;
            o.DCModifiers = dCModifier == null?Array.Empty <DCModifier>() : dCModifier;

            o.Type       = type;
            o.Conditions = condition == null ? new ConditionsChecker() : condition;
            o.name       = "Check_" + name + num;
            o.SetComponents(components);
            library.AddAsset(o, Guid(o.name));
            return(o);
        }
Example #4
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 #5
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;
                }
            }
        }