Ejemplo n.º 1
0
        public static bool CheckForMissedRewards_Prefix(
            CommunityCenter __instance)
        {
            try
            {
                Dictionary <int, List <int> > areaNumbersAndBundleNumbers = Reflection.GetField
                                                                            <Dictionary <int, List <int> > >
                                                                                (__instance, "areaToBundleDictionary")
                                                                            .GetValue();

                __instance.missedRewardsChest.Value.items.Clear();

                bool        hasUnclaimedRewards = false;
                List <Item> rewards             = new();
                foreach (KeyValuePair <int, List <int> > areaAndBundles in areaNumbersAndBundleNumbers)
                {
                    int  areaNumber        = areaAndBundles.Key;
                    bool isRewardUnclaimed = areaAndBundles.Value.Any() &&
                                             areaAndBundles.Value
                                             .All(bundleNumber => __instance.bundleRewards.TryGetValue(bundleNumber, out bool isUnclaimed) && isUnclaimed);
                    if (!isRewardUnclaimed || __instance.areasComplete.Count() <= areaNumber || !__instance.areasComplete[areaNumber])
                    {
                        continue;
                    }

                    hasUnclaimedRewards = true;
                    rewards.Clear();
                    JunimoNoteMenu.GetBundleRewards(areaNumber, rewards);
                    foreach (Item item in rewards)
                    {
                        __instance.missedRewardsChest.Value.addItem(item);
                    }
                }

                if ((hasUnclaimedRewards && !__instance.missedRewardsChestVisible.Value) ||
                    (!hasUnclaimedRewards && __instance.missedRewardsChestVisible.Value))
                {
                    if (!hasUnclaimedRewards)
                    {
                        Vector2 missedRewardsChestTile = Reflection.GetField
                                                         <Vector2>
                                                             (obj: __instance, name: "missedRewardsChestTile")
                                                         .GetValue();

                        Bundles.BroadcastPuffSprites(
                            multiplayer: null,
                            location: __instance,
                            tilePosition: missedRewardsChestTile);
                    }
                }
                __instance.showMissedRewardsChestEvent.Fire(arg: hasUnclaimedRewards);
                __instance.missedRewardsChestVisible.Value = hasUnclaimedRewards;
                return(false);
            }
            catch (Exception e)
            {
                HarmonyPatches.ErrorHandler(e);
            }
            return(true);
        }