コード例 #1
0
        private static bool HourlyTickPrefix(CraftingCampaignBehavior __instance)
        {
            if (ModSettings.Settings.CraftingConfig.Enabled)
            {
                var instanceType      = __instance.GetType();
                var craftingRecords   = instanceType.GetField("_heroCraftingRecords", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
                var heroKeyCollection = craftingRecords.GetType().GetProperty("Keys", BindingFlags.Instance | BindingFlags.Public).GetValue(craftingRecords);
                var heroKeyCount      = (int)heroKeyCollection.GetType().GetProperty("Count", BindingFlags.Instance | BindingFlags.Public).GetValue(heroKeyCollection);
                var heroKeyArray      = new Hero[heroKeyCount];
                heroKeyCollection.GetType().GetMethod("CopyTo", BindingFlags.Instance | BindingFlags.Public).Invoke(heroKeyCollection, new object[] { heroKeyArray, 0 });

                foreach (var heroKey in heroKeyArray)
                {
                    var tryGetValueParams = new object[] { heroKey, null };
                    var tryGetValueResult = craftingRecords.GetType().GetMethod("TryGetValue", BindingFlags.Instance | BindingFlags.Public).Invoke(craftingRecords, tryGetValueParams);
                    if ((bool)tryGetValueResult)
                    {
                        var heroCraftingRecord   = tryGetValueParams[1];
                        var craftingStaminaField = heroCraftingRecord.GetType().GetField("CraftingStamina", BindingFlags.Instance | BindingFlags.Public);
                        var craftingStamina      = (int)craftingStaminaField.GetValue(heroCraftingRecord);
                        if (craftingStamina < 100)
                        {
                            int recoveryRate;
                            if (heroKey.PartyBelongedTo?.CurrentSettlement != null)
                            {
                                recoveryRate = ModSettings.Settings.CraftingConfig.HourlySettlementStaminaRecoveryRate;
                            }
                            else
                            {
                                recoveryRate = ModSettings.Settings.CraftingConfig.HourlyMovingStaminaRecoveryRate;
                            }

                            craftingStaminaField.SetValue(heroCraftingRecord, Math.Min(100, craftingStamina + recoveryRate));
                        }
                    }
                }

                return(false);
            }
            else
            {
                return(true);
            }
        }
コード例 #2
0
ファイル: ModTest.cs プロジェクト: WangMingJue/ModTest
        public static string UnlockAllParts(List <string> strings)
        {
            if (Campaign.Current == null)
            {
                return("Campaign was not started.");
            }
            CraftingCampaignBehavior campaignBehavior = Campaign.Current.GetCampaignBehavior <CraftingCampaignBehavior>();
            MethodInfo method = campaignBehavior.GetType().GetMethod("OpenPart", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            if (method == null)
            {
                return("Failed to locate method.");
            }
            for (int i = 0; i < CraftingPiece.All.Count; i++)
            {
                method.Invoke(campaignBehavior, new object[]
                {
                    CraftingPiece.All[i]
                });
            }
            return("Unlocked all crafting pieces.");
        }