示例#1
0
        /// <summary>
        /// Creates a delegate that returns the X value of a navigator's transition as an int,
        /// even if the field is an sbyte.
        ///
        /// TODO Vanilla/DLC code
        /// </summary>
        /// <returns>A delegate to properly retrieve NavGrid.Transition.x</returns>
        private static GetTransitionXDelegate GetTransitionX()
        {
            const string           x      = nameof(NavTransition.x);
            var                    xField = typeof(NavTransition).GetFieldSafe(x, false);
            GetTransitionXDelegate ret;

            if (xField.FieldType == typeof(int))
            {
                var getter = PDetours.DetourStructField <int>(typeof(NavTransition), x);
                ret = (transition) => {
                    return(getter.Get(transition));
                };
            }
            else if (xField.FieldType == typeof(sbyte))
            {
                var getter = PDetours.DetourStructField <sbyte>(typeof(NavTransition), x);
                ret = (transition) => {
                    return((int)getter.Get(transition));
                };
            }
            else
            {
                throw new InvalidOperationException("Field type of NavGrid.Transition: " +
                                                    xField.FieldType);
            }
            return(ret);
        }
        public override void OnLoad(Harmony harmony)
        {
            IsMono = PPatchTools.GetTypeSafe("Mono.Runtime") != null;
            base.OnLoad(harmony);
            PUtil.InitLibrary();
#if DEBUG
            SpamObjectsHandler.PrepareSpamHandler(new PLib.PatchManager.PPatchManager(harmony));
#endif
            var inst = ExtendedTagBits.Instance;
            // Force these tags into the efficient lower bits
            foreach (var tag in FORCE_LOWER_BITS)
            {
                inst.ManifestFlagIndex(tag);
            }
            FetchManager.disallowedTagMask = TagBitOps.Not(FetchManager.disallowedTagBits);
            PDetours.DetourField <FetchAreaChore.StatesInstance, TagBits>(
                "s_transientDeliveryMask").Set(null, TagBitOps.Not(new TagBits(new Tag[] {
                GameTags.Garbage, GameTags.Creatures.Deliverable
            })));
            new PVersionCheck().Register(this, new SteamVersionChecker());
        }
示例#3
0
        public static void OnLoad()
        {
#if DEBUG
            PUtil.InitLibrary();
            SpamObjectsHandler.PrepareSpamHandler();
#else
            var assembly = Assembly.GetExecutingAssembly();
            PUtil.LogDebug("Mod {0} initialized, version {1}".F(assembly.GetName()?.Name,
                                                                assembly.GetFileVersion() ?? "Unknown"));
#endif
            var inst = ExtendedTagBits.Instance;
            // Force these tags into the efficient lower bits
            foreach (var tag in FORCE_LOWER_BITS)
            {
                inst.ManifestFlagIndex(tag);
            }
            FetchManager.disallowedTagMask = TagBitOps.Not(FetchManager.disallowedTagBits);
            PDetours.DetourField <FetchAreaChore.StatesInstance, TagBits>(
                "s_transientDeliveryMask").Set(null, TagBitOps.Not(new TagBits(new Tag[] {
                GameTags.Garbage, GameTags.Creatures.Deliverable
            })));
        }