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); }
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; } } } } }
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); }
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))); }