|
4 | 4 | using Intersect.Client.Framework.Gwen.Control; |
5 | 5 | using Intersect.Client.General; |
6 | 6 | using Intersect.Client.Localization; |
| 7 | +using Intersect.Core; |
7 | 8 | using Intersect.GameObjects; |
| 9 | +using Microsoft.Extensions.Logging; |
8 | 10 |
|
9 | 11 | namespace Intersect.Client.Interface.Game.Inventory; |
10 | 12 |
|
@@ -108,7 +110,7 @@ public void OpenContextMenu(int slot) |
108 | 110 | { |
109 | 111 | mUseItemContextItem.SetText(Strings.ItemContextMenu.Equip.ToString(item.Name)); |
110 | 112 | } |
111 | | - |
| 113 | + |
112 | 114 | break; |
113 | 115 | } |
114 | 116 |
|
@@ -207,35 +209,70 @@ public void Update() |
207 | 209 |
|
208 | 210 | mInventoryWindow.IsClosable = Globals.CanCloseInventory; |
209 | 211 |
|
210 | | - for (var i = 0; i < Options.Instance.Player.MaxInventory; i++) |
| 212 | + if (Globals.Me?.Inventory is not { } inventory) |
| 213 | + { |
| 214 | + return; |
| 215 | + } |
| 216 | + |
| 217 | + var slotCount = Math.Min(Options.Instance.Player.MaxInventory, Items.Count); |
| 218 | + for (var slotIndex = 0; slotIndex < slotCount; slotIndex++) |
211 | 219 | { |
212 | | - var item = ItemBase.Get(Globals.Me.Inventory[i].ItemId); |
213 | | - if (item != null) |
| 220 | + var slotComponent = Items[slotIndex]; |
| 221 | + var slotLabel = mValues[slotIndex]; |
| 222 | + |
| 223 | + var inventorySlot = inventory[slotIndex]; |
| 224 | + if (!ItemBase.TryGet(inventorySlot.ItemId, out var itemDescriptor)) |
214 | 225 | { |
215 | | - Items[i].Pnl.IsHidden = false; |
216 | | - if (item.IsStackable) |
| 226 | + if (inventorySlot.ItemId != default) |
217 | 227 | { |
218 | | - mValues[i].IsHidden = Globals.Me.Inventory[i].Quantity <= 1; |
219 | | - mValues[i].Text = Strings.FormatQuantityAbbreviated(Globals.Me.Inventory[i].Quantity); |
| 228 | + ApplicationContext.CurrentContext.Logger.LogWarning( |
| 229 | + "Inventory slot {SlotIndex} refers to missing Item descriptor {DescriptorId}", |
| 230 | + slotIndex, |
| 231 | + inventorySlot.ItemId |
| 232 | + ); |
220 | 233 | } |
221 | | - else |
| 234 | + |
| 235 | + if (slotComponent.Pnl.IsVisible) |
222 | 236 | { |
223 | | - mValues[i].IsHidden = true; |
| 237 | + slotComponent.Pnl.IsHidden = true; |
224 | 238 | } |
225 | 239 |
|
226 | | - if (Items[i].IsDragging) |
| 240 | + if (slotLabel.IsVisible) |
227 | 241 | { |
228 | | - Items[i].Pnl.IsHidden = true; |
229 | | - mValues[i].IsHidden = true; |
| 242 | + slotLabel.IsHidden = true; |
230 | 243 | } |
| 244 | + continue; |
| 245 | + } |
| 246 | + |
| 247 | + if (slotComponent.Pnl.IsHidden) |
| 248 | + { |
| 249 | + slotComponent.Pnl.IsVisible = true; |
| 250 | + } |
231 | 251 |
|
232 | | - Items[i].Update(); |
| 252 | + var shouldHideLabel = !itemDescriptor.IsStackable || inventorySlot.Quantity <= 1; |
| 253 | + if (shouldHideLabel) |
| 254 | + { |
| 255 | + if (slotLabel.IsVisible) |
| 256 | + { |
| 257 | + slotLabel.IsVisible = false; |
| 258 | + } |
233 | 259 | } |
234 | 260 | else |
235 | 261 | { |
236 | | - Items[i].Pnl.IsHidden = true; |
237 | | - mValues[i].IsHidden = true; |
| 262 | + if (slotLabel.IsHidden) |
| 263 | + { |
| 264 | + slotLabel.IsVisible = true; |
| 265 | + } |
| 266 | + slotLabel.Text = Strings.FormatQuantityAbbreviated(inventorySlot.Quantity); |
238 | 267 | } |
| 268 | + |
| 269 | + if (slotComponent.IsDragging) |
| 270 | + { |
| 271 | + slotComponent.Pnl.IsHidden = true; |
| 272 | + slotLabel.IsHidden = true; |
| 273 | + } |
| 274 | + |
| 275 | + slotComponent.Update(); |
239 | 276 | } |
240 | 277 | } |
241 | 278 |
|
|
0 commit comments