////////////////

        public void CheckSettings(Player player)
        {
            if (this.IsCopying)
            {
                var set = new HashSet <int> {
                    ModContent.ItemType <CopyCartridgeItem>()
                };
                var copyCartItem = PlayerItemFinderHelpers.FindFirstOfPossessedItemFor(player, set, false);

                if (copyCartItem == null)
                {
                    Main.NewText("Copy Cartridges needed.", Color.Red);
                    this.IsCopying = false;
                }
            }

            if (this.CurrentPaintItemInventoryIndex >= 0)
            {
                Item item = this.GetCurrentPaintItem();
                if (item == null)
                {
                    this.CurrentPaintItemInventoryIndex = -1;
                }
            }
        }
        private static bool ScribeBlankContractIf(Player player, Item item)
        {
            int  blankContractType = ModContent.ItemType <BlankContractItem>();
            Item contractItem      = PlayerItemFinderHelpers.FindFirstOfPossessedItemFor(
                player,
                new HashSet <int> {
                blankContractType
            },
                false
                );

            var myContractItem = contractItem.modItem as BlankContractItem;

            if (contractItem == null || myContractItem == null)
            {
                Main.NewText("No blank contract item in player's possession.", Color.Yellow);
                return(false);
            }

            if (item?.active != true)
            {
                if (IntrinsicsConfig.Instance.DebugModeInfo)
                {
                    Main.NewText("BlankContractItem reports it cannot swap selected item");
                }
                return(false);
            }

            if (!myContractItem.CanAddItem(item))
            {
                Main.NewText("This item cannot be scribed.", Color.Yellow);
                return(false);
            }

            bool hasMadeContract = myContractItem.CreateImpartmentContract(player, item);

            if (IntrinsicsConfig.Instance.DebugModeInfo)
            {
                Main.NewText("Impartment contract created? " + hasMadeContract);
            }

            if (!hasMadeContract)
            {
                return(false);
            }

            PlayerItemHelpers.RemoveInventoryItemQuantity(player, item.type, 1);
            PlayerItemHelpers.RemoveInventoryItemQuantity(player, blankContractType, 1);
            Main.mouseItem = new Item();

            return(hasMadeContract);
        }
Exemplo n.º 3
0
        ////////////////

        private Item AccountForPurchase(Player player, long spent, Item lastBuyItem)
        {
            NPC talkNpc = Main.npc[player.talkNPC];

            if (talkNpc == null || !talkNpc.active)
            {
                LogHelpers.Log("AccountForPurchase - No shop npc.");
                return(null);
            }

            var        mymod             = CapitalismMod.Instance;
            ISet <int> possiblePurchases = ItemFinderHelpers.FindPossiblePurchaseTypes(player.inventory, spent);
            Item       item  = null;
            int        stack = 1;

            if (possiblePurchases.Count > 0)
            {
                var changesAt = PlayerItemFinderHelpers.FindInventoryChanges(player, this.PrevMouseInfo, this.PrevInventoryInfos);
                changesAt = ItemFinderHelpers.FilterByTypes(changesAt, possiblePurchases);

                if (changesAt.Count == 1)
                {
                    foreach (var entry in changesAt)
                    {
                        if (entry.Key == -1)
                        {
                            item = Main.mouseItem;
                        }
                        else
                        {
                            item = player.inventory[entry.Key];
                        }

                        if (item != null)
                        {
                            // Must be a false positive?
                            if (lastBuyItem != null && lastBuyItem.type != item.type)
                            {
                                item = null;
                            }
                            else
                            {
                                //stack = entry.Value.Value;
                                break;
                            }
                        }
                    }
                }
            }
            if (item == null)
            {
                if (lastBuyItem != null)
                {
                    var vendor = this.GetOrCreateVendor(WorldHelpers.GetUniqueIdForCurrentWorld(true), talkNpc.type);
                    int value  = (int)vendor.GetPriceOf(lastBuyItem.type);

                    if ((spent % value) == 0)
                    {
                        item  = lastBuyItem;
                        stack = (int)(spent / value);
                    }
                }
            }

            if (item != null)
            {
                this.BoughtFrom(player, talkNpc, item, stack);
            }
            return(item);
        }
 public static Item GetFuelItemFromInventory(Player player)
 {
     return(PlayerItemFinderHelpers.FindFirstOfPossessedItemFor(player, new HashSet <int> {
         ItemID.DD2ElderCrystal
     }, false));
 }
        ////////////////

        private string onGiveMaskButtonClick()
        {
            var mymod   = (TheLunaticMod)this.mod;
            var myworld = ModContent.GetInstance <TheLunaticWorld>();

            if (myworld.MaskLogic == null)
            {
                throw new ModHelpersException("Mask logic not initialized.");
            }

            Player player         = Main.player[Main.myPlayer];
            var    remainingMasks = myworld.MaskLogic.GetRemainingVanillaMasks();

            if (remainingMasks.Count == 0)
            {
                return("I need no more masks.");
            }

            bool isCustom = false;
            bool isGiven  = false;

            Item mask = PlayerItemFinderHelpers.FindFirstOfPossessedItemFor(player, remainingMasks, false);

            if (mask == null)
            {
                mask = PlayerItemFinderHelpers.FindFirstOfPossessedItemFor(player, new HashSet <int> {
                    ModContent.ItemType <CustomBossMaskItem>()
                }, false);
                isCustom = mask != null;
                isGiven  = isCustom && myworld.MaskLogic.DoesLoonyHaveThisMask(mask);
            }

            if (mask == null || isGiven)
            {
                if (mask == null)
                {
                    mask = PlayerItemFinderHelpers.FindFirstOfPossessedItemFor(player, MaskLogic.AllVanillaMasks, false);
                }
                string msg, hint = this.GetHint();

                if (mask == null)
                {
                    msg = "Ehehe, good one! But seriously, you DO have a mask... don't you? ...please?\n" + hint;
                }
                else
                {
                    msg = "Very nice, but I've already got a " + MaskLogic.GetMaskDisplayName(mask) + ".\n" + hint;
                }

                if (!myworld.GameLogic.HasGameEnded && mymod.Config.LoonyIndicatesDaysRemaining)
                {
                    int daysLeft = mymod.Config.DaysUntil - (myworld.GameLogic.HalfDaysElapsed / 2);
                    msg += "\n \nDays remaining: " + daysLeft;
                }
                return(msg);
            }

            if (myworld.MaskLogic.IsValidMask(mask))
            {
                int    remaining = remainingMasks.Count() - (isCustom?0:1);
                string status, msg;

                if (mymod.Config.MoonLordMaskWins)
                {
                    if (mask.type == ItemID.BossMaskMoonlord)
                    {
                        status = "At last! Seems this world gets to live a little bit longer. I won't need this anymore. Enjoy!";
                        UmbralCowlItem.Give(player);
                    }
                    else
                    {
                        status = "I require more masks!";
                    }
                }
                else
                {
                    if (remaining >= 2)
                    {
                        status = "I require " + remaining + " more masks.";
                    }
                    else if (remaining == 1)
                    {
                        status = "I require one final mask.";
                    }
                    else
                    {
                        if (mymod.Config.LoonyGivesCompletionReward)
                        {
                            status = "At last! Seems this world gets to live a little bit longer. I won't need this anymore. Enjoy!";
                            UmbralCowlItem.Give(player);
                        }
                        else
                        {
                            status = "At last! Seems this world gets to live a little bit longer. Be sure to celebrate by buying some of my delicious treats!";
                        }
                    }
                }

                msg = this.GiveMaskReply(mask);

                myworld.MaskLogic.GiveMaskToLoony(player, mask);

                return(msg + "\n\n" + status);
            }
            else
            {
                // 1: Display info, 2: Fast time, 4: Reset, 8: Reset win, 16: Skip to signs, 32: Display net info
                if (mymod.Config.DebugModeInfo)
                {
                    LogHelpers.Log("DEBUG cheater detected. " + mask.Name);
                }

                if (mymod.Config.LoonyShunsCheaters)
                {
                    player.GetModPlayer <TheLunaticPlayer>().SetCheater();
                    return("You... you aren't supposed to even have this. Bye.");
                }
                else
                {
                    return("I don't know how you got this, but I'm not ready for it yet.");
                }
            }
        }