Beispiel #1
0
        public void CreateWithUmbrellaInterface()
        {
            var ex  = new Exception();
            var rec = RecordException.Create <IItem>("Message", FormKey.Null, "SomeEdid");

            rec.RecordType.Should().Be(typeof(IItem));
        }
        public static void RunPatch(IPatcherState <ISkyrimMod, ISkyrimModGetter> state)
        {
            // Ez flag

            foreach (var ez in state.LoadOrder.PriorityOrder.EncounterZone().WinningOverrides())
            {
                try
                {
                    if (ez.Location is null)
                    {
                        continue;
                    }
                    if (!ez.Flags.HasFlag(EncounterZone.Flag.DisableCombatBoundary))
                    {
                        var newEz = state.PatchMod.EncounterZones.GetOrAddAsOverride(ez);
                        newEz.Flags |= EncounterZone.Flag.DisableCombatBoundary;
                    }
                }
                catch (Exception e)
                {
                    throw RecordException.Create("Error processing encounter zone record", ez, e);
                }
            }

            /* Swim Patcher
             * 1. Check if race disables water combat
             * 2. If so, check if race has keywords in the allowed.
             * 3. If it does and has now keywords in the disallowed set, patch it.*/
            if (!Settings.EnableWaterCombatTracking())
            {
                return;
            }


            HashSet <FormLink <Keyword> > allowed    = Settings.GetAllowedWaterCombatKeys();
            HashSet <FormLink <Keyword> > disallowed = Settings.GetNoWaterCombatKeys();

            foreach (var race in state.LoadOrder.PriorityOrder.Race().WinningOverrides())
            {
                try
                {
                    if (exclusions.Contains(race))
                    {
                        continue;
                    }
                    if (race.Keywords is null)
                    {
                        continue;
                    }
                    if (!race.Flags.HasFlag(Race.Flag.NoCombatInWater))
                    {
                        continue;
                    }

                    bool patchIt = false;
                    foreach (var kw in race.Keywords)
                    {
                        if (allowed.Contains(kw))
                        {
                            patchIt = true;
                        }
                        else if (disallowed.Contains(kw))
                        {
                            patchIt = false;
                            break;
                        }
                    }

                    if (!patchIt)
                    {
                        continue;
                    }

                    var newRace = state.PatchMod.Races.GetOrAddAsOverride(race);
                    newRace.Flags &= ~Race.Flag.NoCombatInWater;
                }
                catch (Exception e)
                {
                    throw RecordException.Create("Error processing race record", race, e);
                }
            }
        }