private void UpdateRepairTimes(bool commit) { if (windowMode != WindowModes.Repair || DaggerfallUnity.Settings.InstantRepairs) { return; } Debug.Log("UpdateRepairTimes called"); int totalRepairTime = 0, longestRepairTime = 0; DaggerfallUnityItem itemLongestTime = null; foreach (DaggerfallUnityItem item in remoteItemsFiltered) { int repairTime = FormulaHelper.CalculateItemRepairTime(item.currentCondition, item.maxCondition); if (commit && !item.RepairData.IsBeingRepaired()) { item.RepairData.LeaveForRepair(repairTime); string note = string.Format(TextManager.Instance.GetText(textDatabase, "repairNote"), item.LongName, buildingDiscoveryData.displayName); GameManager.Instance.PlayerEntity.Notebook.AddNote(note); } totalRepairTime += repairTime; if (repairTime > longestRepairTime) { longestRepairTime = repairTime; itemLongestTime = item; } if (commit) { item.RepairData.RepairTime = repairTime; } else { item.RepairData.EstimatedRepairTime = repairTime; } } if (itemLongestTime != null) { int modifiedLongestTime = longestRepairTime + ((totalRepairTime - longestRepairTime) / 2); if (commit) { itemLongestTime.RepairData.RepairTime = modifiedLongestTime; } else { itemLongestTime.RepairData.EstimatedRepairTime = modifiedLongestTime; } } }
private void UpdateRepairTimes(bool commit) { if (windowMode != WindowModes.Repair || DaggerfallUnity.Settings.InstantRepairs) { return; } Debug.Log("UpdateRepairTimes called"); int totalRepairTime = 0, longestRepairTime = 0; DaggerfallUnityItem itemLongestTime = null; Dictionary <DaggerfallUnityItem, int> previousRepairTimes = new Dictionary <DaggerfallUnityItem, int>(); foreach (DaggerfallUnityItem item in remoteItemsFiltered) { bool repairDone = item.RepairData.IsBeingRepaired() ? item.RepairData.IsRepairFinished() : item.currentCondition == item.maxCondition; if (repairDone) { continue; } if (item.RepairData.IsBeingRepaired()) { previousRepairTimes.Add(item, item.RepairData.RepairTime); } int repairTime = FormulaHelper.CalculateItemRepairTime(item.currentCondition, item.maxCondition); if (commit && !item.RepairData.IsBeingRepaired()) { item.RepairData.LeaveForRepair(repairTime); string note = string.Format(TextManager.Instance.GetText(textDatabase, "repairNote"), item.LongName, buildingDiscoveryData.displayName); GameManager.Instance.PlayerEntity.Notebook.AddNote(note); } totalRepairTime += repairTime; if (repairTime > longestRepairTime) { longestRepairTime = repairTime; itemLongestTime = item; } if (commit) { item.RepairData.RepairTime = repairTime; } else { item.RepairData.EstimatedRepairTime = repairTime; } } if (itemLongestTime != null) { int modifiedLongestTime = longestRepairTime + ((totalRepairTime - longestRepairTime) / 2); if (commit) { itemLongestTime.RepairData.RepairTime = modifiedLongestTime; } else { itemLongestTime.RepairData.EstimatedRepairTime = modifiedLongestTime; } } // Don't allow repair times to decrease (when removing other now repaired items) // https://forums.dfworkshop.net/viewtopic.php?f=24&t=2053 foreach (KeyValuePair <DaggerfallUnityItem, int> entry in previousRepairTimes) { if (commit) { entry.Key.RepairData.RepairTime = Mathf.Max(entry.Key.RepairData.RepairTime, entry.Value); } else { entry.Key.RepairData.EstimatedRepairTime = Mathf.Max(entry.Key.RepairData.EstimatedRepairTime, entry.Value); } } }
private void ConfirmTrade_OnButtonClick(DaggerfallMessageBox sender, DaggerfallMessageBox.MessageBoxButtons messageBoxButton) { if (messageBoxButton == DaggerfallMessageBox.MessageBoxButtons.Yes) { // Proceed with trade. int tradePrice = GetTradePrice(); switch (windowMode) { case WindowModes.Sell: case WindowModes.SellMagic: float goldWeight = tradePrice * DaggerfallBankManager.goldUnitWeightInKg; if (PlayerEntity.CarriedWeight + goldWeight <= PlayerEntity.MaxEncumbrance) { PlayerEntity.GoldPieces += tradePrice; } else { DaggerfallUnityItem loc = ItemBuilder.CreateItem(ItemGroups.MiscItems, (int)MiscItems.Letter_of_credit); loc.value = tradePrice; GameManager.Instance.PlayerEntity.Items.AddItem(loc, Items.ItemCollection.AddPosition.Front); } RaiseOnTradeHandler(remoteItems.GetNumItems(), tradePrice); remoteItems.Clear(); break; case WindowModes.Buy: PlayerEntity.DeductGoldAmount(tradePrice); RaiseOnTradeHandler(basketItems.GetNumItems(), tradePrice); PlayerEntity.Items.TransferAll(basketItems); break; case WindowModes.Repair: PlayerEntity.DeductGoldAmount(tradePrice); if (DaggerfallUnity.Settings.InstantRepairs) { foreach (DaggerfallUnityItem item in remoteItemsFiltered) { item.currentCondition = item.maxCondition; } } else { int totalRepairTime = 0, longestRepairTime = 0; DaggerfallUnityItem itemLongestTime = null; foreach (DaggerfallUnityItem item in remoteItemsFiltered) { int repairTime = FormulaHelper.CalculateItemRepairTime(item.currentCondition, item.maxCondition); if (!item.RepairData.IsBeingRepaired()) { item.RepairData.LeaveForRepair(repairTime); string note = string.Format(TextManager.Instance.GetText(textDatabase, "repairNote"), item.LongName, buildingDiscoveryData.displayName); GameManager.Instance.PlayerEntity.Notebook.AddNote(note); } totalRepairTime += repairTime; if (repairTime > longestRepairTime) { longestRepairTime = repairTime; itemLongestTime = item; } item.RepairData.RepairTime = repairTime; } if (itemLongestTime != null) { itemLongestTime.RepairData.RepairTime = longestRepairTime + ((totalRepairTime - longestRepairTime) / 2); } } RaiseOnTradeHandler(remoteItems.GetNumItems(), tradePrice); break; case WindowModes.Identify: PlayerEntity.DeductGoldAmount(GetTradePrice()); for (int i = 0; i < remoteItems.Count; i++) { DaggerfallUnityItem item = remoteItems.GetItem(i); item.IdentifyItem(); } RaiseOnTradeHandler(remoteItems.GetNumItems(), tradePrice); break; } DaggerfallUI.Instance.PlayOneShot(SoundClips.GoldPieces); PlayerEntity.TallySkill(DFCareer.Skills.Mercantile, 1); Refresh(); } CloseWindow(); }