public bool IsResearchedPrefix(Item item)
        {
            String iTag = ResearchFrom14.ItemToTag(item) + ":p";

            if (research.ContainsKey(iTag))
            {
                if (research[iTag] is int || research[iTag] is byte)
                {
                    if ((byte)(research[iTag]) == item.prefix)
                    {
                        return(true);
                    }
                }
                else
                {
                    byte[] ba = research.GetByteArray(ResearchFrom14.ItemToTag(item) + ":p");
                    foreach (byte b in ba)
                    {
                        if (b == item.prefix)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(item.prefix == 0);
        }
        public override void Load(TagCompound tag)
        {
            research = tag;
            if (research == null)
            {
                research = new TagCompound();
            }
            if (research.ContainsKey("0.research"))
            {
                destroyingItem = ItemIO.Load(research.GetCompound("0.research"));
                research.Remove("0.research");
            }
            if (research.ContainsKey("0.prefix"))
            {
                ((ResearchFrom14)ModLoader.GetMod("ResearchFrom14")).preUI.itemSlot.item     = ItemIO.Load(research.GetCompound("0.prefix"));
                ((ResearchFrom14)ModLoader.GetMod("ResearchFrom14")).preUI.itemSlot.realItem = ((ResearchFrom14)ModLoader.GetMod("ResearchFrom14")).preUI.itemSlot.item;
                research.Remove("0.prefix");
            }

            if (!research.ContainsKey(ResearchFrom14.ItemIDToTag(ModContent.ItemType <ResearchSharingBook>())) ||
                !research.ContainsKey(ResearchFrom14.ItemIDToTag(ModContent.ItemType <ResearchErasingBook>())))
            {
                research[ResearchFrom14.ItemIDToTag(ModContent.ItemType <ResearchSharingBook>())] = Int32.MaxValue - 1000;
                research[ResearchFrom14.ItemIDToTag(ModContent.ItemType <ResearchErasingBook>())] = Int32.MaxValue - 1000;
            }
            researchedCache     = new List <int>();
            researchedTileCache = new List <int>();
            researchedTileAdj   = new bool[TileLoader.TileCount];
            mod.Logger.Info("Player " + player.name + " knows " + research.Count + " Items");
            populateCache = Task.Run(actualRebuildCache);
        }
Exemple #3
0
 public override void Click(UIMouseEvent evt)
 {
     if (IsMouseHovering)
     {
         if (ItemSlot.ShiftInUse && item != null && !item.IsAir)
         {
             if (ResearchFrom14.PlaceInInventory(Main.player[Main.myPlayer], item))
             {
                 realItem = new Item();
                 Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>().destroyingItem = realItem;
             }
         }
         else if ((Main.mouseItem == null || Main.mouseItem.IsAir) && item != null)
         {
             Main.mouseItem = item;
             realItem       = new Item();
             Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>().destroyingItem = realItem;
         }
         else if (Main.mouseItem != null)
         {
             if (item == null || item.IsAir)
             {
                 realItem = Main.mouseItem;
                 Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>().destroyingItem = Main.mouseItem;
                 Main.mouseItem = item;
             }
             else if (item.type == Main.mouseItem.type)
             {
                 if (item.stack + Main.mouseItem.stack <= item.maxStack)
                 {
                     item.stack += Main.mouseItem.stack;
                     Main.mouseItem.TurnToAir();
                 }
                 else
                 {
                     Main.mouseItem.stack -= (item.maxStack - item.stack);
                     item.stack            = item.maxStack;
                 }
             }
             else
             {
                 Item tmp = Main.mouseItem;
                 Main.mouseItem = realItem;
                 realItem       = tmp;
                 Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>().destroyingItem = tmp;
                 item = tmp;
             }
         }
     }
 }
        public void Research()
        {
            if (destroyingItem == null || destroyingItem.IsAir)
            {
                return;
            }
            int type  = destroyingItem.type;
            int stack = destroyingItem.stack;

            if (!IsResearched(destroyingItem))
            {
                bool needsCacheRebuilt = true;
                destroyingItem.stack = AddResearchedAmount(destroyingItem);
                AddResearchPrefix(destroyingItem);

                if (destroyingItem.stack == stack)
                {
                    destroyingItem.stack--;
                    needsCacheRebuilt = false;
                }
                if (destroyingItem.stack != stack)
                {
                    if (destroyingItem.stack <= 0)
                    {
                        destroyingItem.TurnToAir();
                    }
                    else if (ResearchFrom14.PlaceInInventory(player, destroyingItem))
                    {
                        destroyingItem = new Item();
                    }

                    if (GetResearchedAmount(type) < ResearchTable.GetTotalResearch(type))
                    {
                        Main.PlaySound(SoundID.Grab);
                    }
                    else
                    {
                        Main.PlaySound(SoundID.Item4);
                        if (needsCacheRebuilt)
                        {
                            rebuildingCache = true;
                            researchedCache.Add(type);
                            CheckRecipesForItem(type);
                            rebuildingCache = false;
                        }
                    }
                }
            }
        }
Exemple #5
0
 public override void ModifyTooltips(Item item, List <TooltipLine> tooltips)
 {
     if (ModContent.GetInstance <Config>().showResearch)
     {
         ResearchPlayer rp = Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>();
         if (rp.IsResearched(item))
         {
             if (ModContent.GetInstance <Config>().showResearched)
             {
                 tooltips.Add(new TooltipLine(this.mod, "Research", "Researched!")
                 {
                     overrideColor = Color.Lerp(Color.HotPink, Color.White, 0.1f)
                 });
             }
         }
         else
         {
             if (ResearchTable.GetTotalResearch(item) <= 0)
             {
                 tooltips.Add(new TooltipLine(this.mod, "Research", "Unresearchable!")
                 {
                     overrideColor = Color.Lerp(Color.HotPink, Color.White, 0.1f)
                 });
             }
             else
             {
                 if (!rp.IsResearched(item.type))
                 {
                     tooltips.Add(new TooltipLine(this.mod, "Research", "Research " + (ResearchTable.GetTotalResearch(item) - rp.GetResearchedAmount(item)) + " more to unlock.")
                     {
                         overrideColor = Color.Lerp(Color.HotPink, Color.White, 0.1f)
                     });
                 }
                 else
                 {
                     tooltips.Add(new TooltipLine(this.mod, "Research", "Base item Researched, but not this Prefix for this item.")
                     {
                         overrideColor = Color.Lerp(Color.HotPink, Color.White, 0.1f)
                     });
                 }
             }
         }
     }
     if (ModContent.GetInstance <Config>().showTag)
     {
         tooltips.Add(new TooltipLine(this.mod, "tagID", "<" + ResearchFrom14.ItemToTag(item) + ">"));
     }
 }
        public void AddResearchPrefix(int itm, byte prefix)
        {
            if (prefix == 0)
            {
                return;
            }
            List <byte> prefixes = new List <byte>();
            String      iTag     = ResearchFrom14.ItemIDToTag(itm) + ":p";

            if (research.ContainsKey(iTag))
            {
                if ((research[iTag] as byte?) != null)
                {
                    prefixes.Add((research[iTag] as byte?).Value);
                }
                else if ((research[iTag] as byte[]) != null)
                {
                    prefixes.AddRange(research.GetByteArray(iTag));
                }
            }
            if (!prefixes.Contains(prefix))
            {
                prefixes.Add(prefix);
                prefixes.Sort();
                research[iTag] = prefixes.ToArray();

                /*
                 * CheckForTeammates();
                 * foreach (int plr in sharingWithWho)
                 * {
                 *  ModPacket pk = mod.GetPacket();
                 *  pk.Write((byte)12);
                 *  pk.Write((byte)plr);
                 *  pk.Write(1);
                 *  pk.Write((byte)(prefix));
                 *  if (Main.netMode == NetmodeID.Server)
                 *  {
                 *      pk.Send(plr);
                 *  }
                 *  else
                 *  {
                 *      pk.Send();
                 *  }
                 * }*/
            }
            return;
        }
        public int AddResearchedAmount(Item realItem)
        {
            int retval = AddResearchedAmount(ResearchFrom14.ItemToTag(realItem), realItem.stack);

            CheckForTeammates();
            foreach (int plr in sharingWithWho)
            {
                ModPacket pk = mod.GetPacket();
                pk.Write((byte)11);
                pk.Write((byte)(plr));
                pk.Write((byte)(Main.myPlayer));
                pk.Write(realItem.type);
                pk.Write(realItem.stack - retval);
                pk.Send(plr);
            }
            return(retval);
        }
Exemple #8
0
        public virtual bool isItemNotTrasheable(Item item)
        {
            if (item.type == ModContent.ItemType <ResearchSharingBook>())
            {
                return(true);
            }
            if (item.type >= ItemID.CopperCoin && item.type <= ItemID.PlatinumCoin)
            {
                return(true);
            }
            if (item.type == ItemID.DD2EnergyCrystal) //etherian mana
            {
                return(true);
            }

            foreach (string k in ModContent.GetInstance <TrashConfig>().exceptionList)
            {
                if (item.type == ResearchFrom14.getTypeFromTag(k))
                {
                    return(true);
                }
            }
            return(false);
        }
 public int AddResearchedAmount(int type, int amount)
 {
     return(AddResearchedAmount(ResearchFrom14.ItemIDToTag(type), amount));
 }
 public int GetResearchedAmount(int type)
 {
     return(GetResearchedAmount(ResearchFrom14.ItemIDToTag(type)));
 }
 public int GetResearchedAmount(Item realItem)
 {
     return(GetResearchedAmount(ResearchFrom14.ItemToTag(realItem)));
 }
 public byte[] GetResearchedPrefixes(Item item)
 {
     return(GetResearchedPrefixes(ResearchFrom14.ItemToTag(item)));
 }