//�Private�Methods�(1)� private void GetWebResponse(object o) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(UpgradeURL); try { HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse(); using (Stream stream = httpResponse.GetResponseStream()) { using (StreamReader reader = new StreamReader(stream)) { XMLResponse = reader.ReadToEnd(); } } } catch{} XmlDocument UpgradeInfoDoc = new XmlDocument(); try { if (XMLResponse != null) { UpgradeInfoDoc.LoadXml(XMLResponse); WebVersion = new UpgradeInfo(); WebVersion.webVersion = double.Parse(UpgradeInfoDoc.SelectSingleNode("//version").InnerText,System.Globalization.CultureInfo.InvariantCulture.NumberFormat); WebVersion.DownloadURL = UpgradeInfoDoc.SelectSingleNode("//url").InnerText; WebVersion.UpgradeNotes = UpgradeInfoDoc.SelectSingleNode("//notes").InnerText; if (WebVersion.webVersion > currentVersion) { if (UpgradeFound != null) { UpgradeFound(WebVersion); } } else { if (CurrentVersion != null) { CurrentVersion(WebVersion); } } } } catch { } }
public void SetUpgradeInfo(UpgradeInfo tempUpgradeInfo) { this.upgradeInfo = tempUpgradeInfo; text.text = upgradeInfo.preco.ToString(); this.image.sprite = tempUpgradeInfo.spriteEnabled; }
public ItemButton(TabButton tab_parent, int index, string text, Station parent, Rectangle rect, Bitmap image, Rectangle region = default(Rectangle)) : base(index, text, parent, rect, image, region) { TAB_PARENT = tab_parent; PARENT.CONTROLS["item↑"].Click += Description_PageUp_Click; PARENT.CONTROLS["item↓"].Click += Description_PageDown_Click; PARENT.CONTROLS["Purchase"].Click += Purchase_Click; UPGRADE_INFO = UpgradeInfo.Get(text); UNLOCKED = UPGRADE_INFO.UnlockRequire; using (Font font = new Font("微軟正黑體", 1, FontStyle.Bold)) { NAME_IMAGE = UPGRADE_INFO.Name.ToBitmap(PARENT.CONTROLS["ProductName"].Size, font, Color.FromArgb(255, 255, 255), StringAlign.Left, Color.FromArgb(255, 0, 0)); } using (Font font2 = new Font("微軟正黑體", 15, FontStyle.Bold)) { DESCRIPTION_IMAGE = ("$" + UPGRADE_INFO.Price.ToString() + "\r\n" + UPGRADE_INFO.Description).ToBitmap(PARENT.CONTROLS["ProductDescription"].Size.Width, font2, Color.FromArgb(0, 0, 0), StringAlign.Left, Color.FromArgb(128, 128, 255), new Size(225, 200)); } }
/// <summary>执行更新</summary> /// <param name="ur"></param> /// <returns></returns> public Boolean ProcessUpgrade(UpgradeInfo ur) { XTrace.WriteLine("执行更新:{0} {1}", ur.Version, ur.Source); var dest = "."; var url = ur.Source; try { // 需要下载更新包 if (!url.IsNullOrEmpty()) { var fileName = Path.GetFileName(url); if (!fileName.EndsWithIgnoreCase(".zip")) { fileName = Rand.NextString(8) + ".zip"; } fileName = "Update".CombinePath(fileName).EnsureDirectory(true); // 清理 //NewLife.Net.Upgrade.DeleteBuckup(dest); var ug = new Upgrade { Log = XTrace.Log }; ug.DeleteBackup(dest); // 下载 var sw = Stopwatch.StartNew(); var client = new HttpClient(); client.DownloadFileAsync(url, fileName).Wait(); sw.Stop(); XTrace.WriteLine("下载 {0} 到 {1} 完成,耗时 {2} 。", url, fileName, sw.Elapsed); // 解压 var source = fileName.TrimEnd(".zip"); if (Directory.Exists(source)) { Directory.Delete(source, true); } source.EnsureDirectory(false); fileName.AsFile().Extract(source, true); // 更新覆盖之前,再次清理exe/dll/pdb foreach (var item in dest.AsDirectory().GetAllFiles("*.exe;*.dll;*.pdb", true)) { WriteLog("Delete {0}", item); try { item.Delete(); } catch { var del = item.FullName + $".{Rand.Next(100000, 999999)}.del"; item.MoveTo(del); } } // 覆盖 ug.CopyAndReplace(source, dest); if (Directory.Exists(source)) { Directory.Delete(source, true); } } // 升级处理命令,可选 var cmd = ur.Executor?.Trim(); if (!cmd.IsNullOrEmpty()) { XTrace.WriteLine("执行更新命令:{0}", cmd); var si = new ProcessStartInfo { UseShellExecute = true, }; var p = cmd.IndexOf(' '); if (p < 0) { si.FileName = cmd; } else { si.FileName = cmd.Substring(0, p); si.Arguments = cmd.Substring(p + 1); } Process.Start(si); } return(true); } catch (Exception ex) { XTrace.WriteLine("更新失败!"); XTrace.WriteException(ex); return(false); } }
public void OnPointerEnter(PointerEventData eventData) { Icon.material = DarkestDungeonManager.HighlightMaterial; StringBuilder sb = ToolTipManager.TipBody; sb.AppendFormat("<color={0}>", DarkestDungeonManager.Data.HexColors["notable"]); sb.Append(LocalizationManager.GetString("upgrade_tree_name_" + Tree.Id)); sb.Append("</color>"); string toolTip; switch (Tree.Id) { case "sanitarium.cost": sb.AppendFormat("\n<color={0}>", DarkestDungeonManager.Data.HexColors["equipment_tooltip_body"]); sb.AppendFormat(LocalizationManager.GetString( "upgrade_tree_tooltip_description_reduces_positive_quirk_treatment_cost_format"), 10); sb.AppendLine(); sb.AppendFormat(LocalizationManager.GetString( "upgrade_tree_tooltip_description_reduces_negative_quirk_treatment_cost_format"), 10); sb.Append("</color>"); toolTip = sb.ToString(); break; case "blacksmith.weapon": sb.AppendFormat("\n<color={0}>", DarkestDungeonManager.Data.HexColors["equipment_tooltip_body"]); sb.AppendFormat(LocalizationManager.GetString( "upgrade_tree_tooltip_description_allows_weapon_upgrades_of_rank_format"), UpgradeInfo.Code == "a"? 2 : UpgradeInfo.Code == "b"? 3 : UpgradeInfo.Code == "c"? 4 : 5); sb.Append("</color>"); toolTip = sb.ToString(); break; case "blacksmith.armour": sb.AppendFormat("\n<color={0}>", DarkestDungeonManager.Data.HexColors["equipment_tooltip_body"]); sb.AppendFormat(LocalizationManager.GetString( "upgrade_tree_tooltip_description_allows_armour_upgrades_of_rank_format"), UpgradeInfo.Code == "a"? 2 : UpgradeInfo.Code == "b"? 3 : UpgradeInfo.Code == "c"? 4 : 5); sb.Append("</color>"); toolTip = sb.ToString(); break; case "guild.skill_levels": sb.AppendFormat("\n<color={0}>", DarkestDungeonManager.Data.HexColors["equipment_tooltip_body"]); sb.AppendFormat(LocalizationManager.GetString( "upgrade_tree_tooltip_description_allows_combat_skill_upgrades_of_rank_format"), UpgradeInfo.Code == "a" ? 2 : UpgradeInfo.Code == "b" ? 3 : UpgradeInfo.Code == "c" ? 4 : 5); sb.Append("</color>"); toolTip = sb.ToString(); break; default: toolTip = sb.ToString(); for (int i = 0; i < TownUpgrades.Count; i++) { toolTip += "\n" + TownUpgrades[i].ToolTip; } break; } if (DarkestDungeonManager.Campaign.Estate.GetUpgradeStatus(Tree.Id, UpgradeInfo) == UpgradeStatus.Locked) { DarkestSoundManager.PlayOneShot("event:/ui/town/button_mouse_over_2"); ToolTipManager.Instanse.Show(toolTip + "\n" + UpgradeInfo.PrerequisitesTooltip(), rectTransform, ToolTipStyle.FromRight, ToolTipSize.Normal); } else { DarkestSoundManager.PlayOneShot("event:/ui/town/button_mouse_over"); ToolTipManager.Instanse.Show(toolTip, rectTransform, ToolTipStyle.FromRight, ToolTipSize.Normal); } }
public static void AddAllCards() { Reset(); SortedDictionary <string, string> cardNameKeyDict = new SortedDictionary <string, string>(); foreach (int v in Enum.GetValues(typeof(LanguageShorts))) { string strName = Enum.GetName(typeof(LanguageShorts), v); cardNameKeyDict[strName] = "cardName_" + strName; } string text; using (StreamReader sr = new StreamReader(CardsXMLFile)) { text = sr.ReadToEnd(); } XmlDocument doc = new XmlDocument(); doc.LoadXml(text); XmlElement node_AllCards = doc.DocumentElement; for (int i = 0; i < node_AllCards.ChildNodes.Count; i++) { XmlNode node_Card = node_AllCards.ChildNodes.Item(i); int cardID = int.Parse(node_Card.Attributes["id"].Value); CardDict.Add(cardID, new CardInfo_Base()); } for (int i = 0; i < node_AllCards.ChildNodes.Count; i++) { XmlNode node_Card = node_AllCards.ChildNodes.Item(i); int cardID = int.Parse(node_Card.Attributes["id"].Value); BaseInfo baseInfo = new BaseInfo(); UpgradeInfo upgradeInfo = new UpgradeInfo(); LifeInfo lifeInfo = new LifeInfo(); BattleInfo battleInfo = new BattleInfo(); MechInfo mechInfo = new MechInfo(); EquipInfo equipInfo = new EquipInfo(); WeaponInfo weaponInfo = new WeaponInfo(); ShieldInfo shieldInfo = new ShieldInfo(); PackInfo packInfo = new PackInfo(); MAInfo maInfo = new MAInfo(); SideEffectBundle sideEffectBundle = new SideEffectBundle(); SideEffectBundle sideEffectBundle_BattleGroundAura = new SideEffectBundle(); for (int j = 0; j < node_Card.ChildNodes.Count; j++) { XmlNode node_CardInfo = node_Card.ChildNodes[j]; switch (node_CardInfo.Attributes["name"].Value) { case "baseInfo": SortedDictionary <string, string> cardNameDict = new SortedDictionary <string, string>(); foreach (KeyValuePair <string, string> kv in cardNameKeyDict) { string cardName = node_CardInfo.Attributes[kv.Value].Value; cardNameDict[kv.Key] = cardName; } baseInfo = new BaseInfo( pictureID: int.Parse(node_CardInfo.Attributes["pictureID"].Value), cardNames: cardNameDict, isTemp: node_CardInfo.Attributes["isTemp"].Value == "True", isHide: node_CardInfo.Attributes["isHide"].Value == "True", metal: int.Parse(node_CardInfo.Attributes["metal"].Value), energy: int.Parse(node_CardInfo.Attributes["energy"].Value), coin: int.Parse(node_CardInfo.Attributes["coin"].Value), effectFactor: 1, limitNum: int.Parse(node_CardInfo.Attributes["limitNum"].Value), cardRareLevel: int.Parse(node_CardInfo.Attributes["cardRareLevel"].Value), shopPrice: int.Parse(node_CardInfo.Attributes["shopPrice"].Value), cardType: (CardTypes)Enum.Parse(typeof(CardTypes), node_CardInfo.Attributes["cardType"].Value)); break; case "upgradeInfo": int u_id = int.Parse(node_CardInfo.Attributes["upgradeCardID"].Value); int d_id = int.Parse(node_CardInfo.Attributes["degradeCardID"].Value); upgradeInfo = new UpgradeInfo( upgradeCardID: u_id, degradeCardID: d_id, cardLevel: 1, cardLevelMax: 1); break; case "lifeInfo": lifeInfo = new LifeInfo( life: int.Parse(node_CardInfo.Attributes["life"].Value), totalLife: int.Parse(node_CardInfo.Attributes["totalLife"].Value)); break; case "battleInfo": battleInfo = new BattleInfo( basicAttack: int.Parse(node_CardInfo.Attributes["basicAttack"].Value), basicArmor: int.Parse(node_CardInfo.Attributes["basicArmor"].Value), basicShield: int.Parse(node_CardInfo.Attributes["basicShield"].Value)); break; case "mechInfo": mechInfo = new MechInfo( isSoldier: node_CardInfo.Attributes["isSoldier"].Value == "True", isDefense: node_CardInfo.Attributes["isDefense"].Value == "True", isSniper: node_CardInfo.Attributes["isSniper"].Value == "True", isCharger: node_CardInfo.Attributes["isCharger"].Value == "True", isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True", isSentry: node_CardInfo.Attributes["isSentry"].Value == "True", slot1: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot1"].Value), slot2: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot2"].Value), slot3: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot3"].Value), slot4: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot4"].Value)); break; case "weaponInfo": weaponInfo = new WeaponInfo( energy: int.Parse(node_CardInfo.Attributes["energy"].Value), energyMax: int.Parse(node_CardInfo.Attributes["energyMax"].Value), attack: int.Parse(node_CardInfo.Attributes["attack"].Value), weaponType: (WeaponTypes)Enum.Parse(typeof(WeaponTypes), node_CardInfo.Attributes["weaponType"].Value), isSentry: node_CardInfo.Attributes["isSentry"].Value == "True", isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True"); equipInfo = new EquipInfo(SlotTypes.Weapon); break; case "shieldInfo": shieldInfo = new ShieldInfo( armor: int.Parse(node_CardInfo.Attributes["armor"].Value), shield: int.Parse(node_CardInfo.Attributes["shield"].Value), shieldType: (ShieldTypes)Enum.Parse(typeof(ShieldTypes), node_CardInfo.Attributes["shieldType"].Value), isDefense: node_CardInfo.Attributes["isDefense"].Value == "True"); equipInfo = new EquipInfo(SlotTypes.Shield); break; case "packInfo": packInfo = new PackInfo( isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True", isDefense: node_CardInfo.Attributes["isDefense"].Value == "True", isSniper: node_CardInfo.Attributes["isSniper"].Value == "True" ); equipInfo = new EquipInfo(SlotTypes.Pack); break; case "maInfo": maInfo = new MAInfo( isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True", isDefense: node_CardInfo.Attributes["isDefense"].Value == "True", isSniper: node_CardInfo.Attributes["isSniper"].Value == "True" ); equipInfo = new EquipInfo(SlotTypes.MA); break; case "sideEffectsBundle": { ExtractSideEffectBundle(baseInfo.CardType, node_CardInfo, sideEffectBundle); break; } case "sideEffectsBundle_Aura": { ExtractSideEffectBundle(baseInfo.CardType, node_CardInfo, sideEffectBundle_BattleGroundAura); break; } } } switch (baseInfo.CardType) { case CardTypes.Mech: addCard(new CardInfo_Mech( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, lifeInfo: lifeInfo, battleInfo: battleInfo, mechInfo: mechInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; case CardTypes.Equip: addCard(new CardInfo_Equip( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, equipInfo: equipInfo, weaponInfo: weaponInfo, shieldInfo: shieldInfo, packInfo: packInfo, maInfo: maInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; case CardTypes.Spell: addCard(new CardInfo_Spell( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; case CardTypes.Energy: addCard(new CardInfo_Spell( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; } } // Check all upgradeID and degradeID valid in library foreach (KeyValuePair <int, CardInfo_Base> kv in CardDict) { int uid = kv.Value.UpgradeInfo.UpgradeCardID; int did = kv.Value.UpgradeInfo.DegradeCardID; if (uid != -1) { if (!CardDict.ContainsKey(uid)) { kv.Value.UpgradeInfo.UpgradeCardID = -1; NeedReload = true; } } if (did != -1) { if (!CardDict.ContainsKey(did)) { kv.Value.UpgradeInfo.DegradeCardID = -1; NeedReload = true; } } } //TODO Check all id in SE // Make all upgradeID and degradeID linked foreach (KeyValuePair <int, CardInfo_Base> kv in CardDict) { int uid = kv.Value.UpgradeInfo.UpgradeCardID; int did = kv.Value.UpgradeInfo.DegradeCardID; if (uid != -1) { CardInfo_Base uCard = CardDict[uid]; if (uCard.UpgradeInfo.DegradeCardID != kv.Key) { if (uCard.UpgradeInfo.DegradeCardID == -1) { uCard.UpgradeInfo.DegradeCardID = kv.Key; } else { CardInfo_Base uCard_ori_dCard = CardDict[uCard.UpgradeInfo.DegradeCardID]; if (uCard_ori_dCard.UpgradeInfo.UpgradeCardID == uCard.CardID) { kv.Value.UpgradeInfo.UpgradeCardID = -1; } else { uCard.UpgradeInfo.DegradeCardID = kv.Key; } } NeedReload = true; } } if (did != -1) { CardInfo_Base dCard = CardDict[did]; if (dCard.UpgradeInfo.UpgradeCardID != kv.Key) { if (dCard.UpgradeInfo.UpgradeCardID == -1) { dCard.UpgradeInfo.UpgradeCardID = kv.Key; } else { CardInfo_Base dCard_ori_uCard = CardDict[dCard.UpgradeInfo.UpgradeCardID]; if (dCard_ori_uCard.UpgradeInfo.DegradeCardID == dCard.CardID) { kv.Value.UpgradeInfo.DegradeCardID = -1; } else { dCard.UpgradeInfo.UpgradeCardID = kv.Key; } } NeedReload = true; } } } // Check Series valid, no cycle foreach (KeyValuePair <int, CardInfo_Base> kv in CardDict) { List <int> cardSeries = GetCardSeries(kv.Key); int cardLevelMax = cardSeries.Count; kv.Value.UpgradeInfo.CardLevelMax = cardLevelMax; int cardLevel = 0; foreach (int cardID in cardSeries) { cardLevel++; if (cardID == kv.Key) { break; } } kv.Value.UpgradeInfo.CardLevel = cardLevel; } //If any problem, refresh XML and reload if (NeedReload) { NeedReload = false; RefreshAllCardXML(); ReloadCardXML(); } }
public static void DrawSelf(SpriteBatch spriteBatch) { UIRepairWorkbench.DrawPanel(spriteBatch, UIRepairWorkbench._backgroundTexture, new Color(33, 43, 79) * 0.8f); UIRepairWorkbench.DrawPanel(spriteBatch, UIRepairWorkbench._borderTexture, new Color(89, 116, 213) * 0.7f); float oldScale = Main.inventoryScale; Main.inventoryScale = 0.75f; Point value = new Point(Main.mouseX, Main.mouseY); Main.spriteBatch.DrawString(Main.fontMouseText, "Repair Workbench", new Vector2(UIRepairWorkbench.X + 33, UIRepairWorkbench.Y + 10), Color.White, 0f, default(Vector2), Main.inventoryScale, SpriteEffects.None, 0f); Rectangle hitbox = new Rectangle(UIRepairWorkbench.X + 66, UIRepairWorkbench.Y + 180, 50, 18); Main.spriteBatch.DrawString(Main.fontMouseText, "Repair", new Vector2(UIRepairWorkbench.X + 66, UIRepairWorkbench.Y + 180), Color.White, 0f, default(Vector2), Main.inventoryScale, SpriteEffects.None, 0f); if (hitbox.Contains(value) && !PlayerInput.IgnoreMouseInterface && Main.mouseLeft && Main.mouseLeftRelease) { Main.player[Main.myPlayer].mouseInterface = true; if (DushyUpgrade.repairWorkbenchTE.brokenItem.IsAir) { Main.NewText("You need an item to repair"); } else if (DushyUpgrade.repairWorkbenchTE.repairScroll.IsAir) { Main.NewText("You need a repair scroll to repair your " + DushyUpgrade.repairWorkbenchTE.brokenItem.Name); } else { UpgradeInfo info = DushyUpgrade.repairWorkbenchTE.brokenItem.GetGlobalItem <UpgradeInfo>(); info.repairItem(DushyUpgrade.repairWorkbenchTE.brokenItem); DushyUpgrade.repairWorkbenchTE.repairScroll.stack--; ItemText.NewText(Main.player[Main.myPlayer], "Restored !", Color.Gold); } } for (int i = 0; i < 2; i++) { int x = UIRepairWorkbench.X; int y = 42 * i + UIRepairWorkbench.Y + 40; Rectangle r = new Rectangle(x, y, (int)((float)Main.inventoryBackTexture.Width * Main.inventoryScale), (int)((float)Main.inventoryBackTexture.Height * Main.inventoryScale)); Item item = i == 0 ? DushyUpgrade.repairWorkbenchTE.brokenItem : DushyUpgrade.repairWorkbenchTE.repairScroll; if (r.Contains(value) && !PlayerInput.IgnoreMouseInterface) { Main.player[Main.myPlayer].mouseInterface = true; if (UIRepairWorkbench.CanGoInSlot(Main.mouseItem, i)) { ItemSlot.Handle(ref item, 3); } } ItemSlot.Draw(spriteBatch, ref item, 3, new Vector2(x, y)); switch (i) { case 0: DushyUpgrade.repairWorkbenchTE.brokenItem = item; break; case 1: DushyUpgrade.repairWorkbenchTE.repairScroll = item; break; default: break; } Main.spriteBatch.DrawString(Main.fontMouseText, UIRepairWorkbench.labels[i], new Vector2(x + 48, y + 10), Color.White, 0f, default(Vector2), Main.inventoryScale, SpriteEffects.None, 0f); } Main.inventoryScale = oldScale; }
public static void DrawSelf(SpriteBatch spriteBatch) { UIUpgradeWorkbench.DrawPanel(spriteBatch, UIUpgradeWorkbench._backgroundTexture, new Color(33, 43, 79) * 0.8f); UIUpgradeWorkbench.DrawPanel(spriteBatch, UIUpgradeWorkbench._borderTexture, new Color(89, 116, 213) * 0.7f); float oldScale = Main.inventoryScale; Main.inventoryScale = 0.75f; Point value = new Point(Main.mouseX, Main.mouseY); Main.spriteBatch.DrawString(Main.fontMouseText, "Upgrade Workbench", new Vector2(UIUpgradeWorkbench.X + 33, UIUpgradeWorkbench.Y + 10), Color.White, 0f, default(Vector2), Main.inventoryScale, SpriteEffects.None, 0f); Rectangle hitbox = new Rectangle(UIUpgradeWorkbench.X + 66, UIUpgradeWorkbench.Y + 180, 50, 18); Main.spriteBatch.DrawString(Main.fontMouseText, "Upgrade", new Vector2(UIUpgradeWorkbench.X + 66, UIUpgradeWorkbench.Y + 180), Color.White, 0f, default(Vector2), Main.inventoryScale, SpriteEffects.None, 0f); if (hitbox.Contains(value) && !PlayerInput.IgnoreMouseInterface && Main.mouseLeft && Main.mouseLeftRelease) { Main.player[Main.myPlayer].mouseInterface = true; if (DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade.IsAir) //First case empty { Main.NewText("You need an item to upgrade"); } else if (DushyUpgrade.upgradeWorkbenchTE.upgradeMaterial.IsAir) { Main.NewText("You need an upgrade stone or an upgrade scroll to upgrade"); } else { Boolean isProtected = !DushyUpgrade.upgradeWorkbenchTE.protectionScroll.IsAir; if (!DushyUpgrade.IsItemBroken(DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade)) { UpgradeInfo info = DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade.GetGlobalItem <UpgradeInfo>(); int result; if (DushyUpgrade.upgradeScrolls.Contains(DushyUpgrade.upgradeWorkbenchTE.upgradeMaterial.type)) { result = info.upgradeWithScroll(DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade, DushyUpgrade.upgradeWorkbenchTE.upgradeMaterial); } else { result = info.upgrade(DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade, isProtected); } DushyUpgrade.upgradeWorkbenchTE.upgradeMaterial.stack--; if (isProtected) { DushyUpgrade.upgradeWorkbenchTE.protectionScroll.stack--; } if (result == DushyUpgrade.SUCCESS) { ItemText.NewText(Main.player[Main.myPlayer], "Success !", Color.Green); if (DushyUpgrade.IsItemMaxLevel(DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade)) { ItemText.NewText(Main.player[Main.myPlayer], "Level Max !", Color.LightSkyBlue); Player player = Main.player[Main.myPlayer]; Item item = DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade; item.position = player.Center; Item leftoverItem = player.GetItem(player.whoAmI, DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade, false, true); if (leftoverItem.stack > 0) { int num = Item.NewItem((int)player.position.X, (int)player.position.Y, player.width, player.height, leftoverItem.type, leftoverItem.stack, false, (int)leftoverItem.prefix, true, false); Main.item[num] = leftoverItem.Clone(); Main.item[num].newAndShiny = false; if (Main.netMode == 1) { NetMessage.SendData(21, -1, -1, null, num, 1f, 0f, 0f, 0, 0, 0); } } DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade.TurnToAir(); } } else if (result == DushyUpgrade.NO_CHANGE) { ItemText.NewText(Main.player[Main.myPlayer], "No Change !", Color.White); } else if (result == DushyUpgrade.FAILURE) { ItemText.NewText(Main.player[Main.myPlayer], "Failure !", Color.LightGray); } else if (result == DushyUpgrade.RESET) { ItemText.NewText(Main.player[Main.myPlayer], "Reset !", Color.Gray); } else if (result == DushyUpgrade.BREAKING) { ItemText.NewText(Main.player[Main.myPlayer], "Breaking !", Color.Black); } else { ItemText.NewText(Main.player[Main.myPlayer], "Protected !", Color.DarkBlue); } } } } for (int i = 0; i < 3; i++) { int x = UIUpgradeWorkbench.X; int y = 42 * i + UIUpgradeWorkbench.Y + 40; Rectangle r = new Rectangle(x, y, (int)((float)Main.inventoryBackTexture.Width * Main.inventoryScale), (int)((float)Main.inventoryBackTexture.Height * Main.inventoryScale)); Item item = i == 0 ? DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade : (i == 1 ? DushyUpgrade.upgradeWorkbenchTE.upgradeMaterial : DushyUpgrade.upgradeWorkbenchTE.protectionScroll); if (r.Contains(value) && !PlayerInput.IgnoreMouseInterface) { Main.player[Main.myPlayer].mouseInterface = true; if (UIUpgradeWorkbench.CanGoInSlot(Main.mouseItem, i)) { ItemSlot.Handle(ref item, 3); } } ItemSlot.Draw(spriteBatch, ref item, 3, new Vector2(x, y)); switch (i) { case 0: DushyUpgrade.upgradeWorkbenchTE.itemToUpgrade = item; break; case 1: DushyUpgrade.upgradeWorkbenchTE.upgradeMaterial = item; break; case 2: DushyUpgrade.upgradeWorkbenchTE.protectionScroll = item; break; default: break; } Main.spriteBatch.DrawString(Main.fontMouseText, UIUpgradeWorkbench.labels[i], new Vector2(x + 48, y + 10), Color.White, 0f, default(Vector2), Main.inventoryScale, SpriteEffects.None, 0f); } Main.inventoryScale = oldScale; }