protected InventoryComponent() { Listen(OnDestroyed, () => { OnEquipped.Clear(); OnUnEquipped.Clear(); }); Listen(OnStart, () => { using var cdClient = new CdClientContext(); var component = cdClient.ComponentsRegistryTable.FirstOrDefault(c => c.Id == GameObject.Lot && c.Componenttype == (int)ComponentId.InventoryComponent); var items = cdClient.InventoryComponentTable.Where(i => i.Id == component.Componentid).ToArray(); Items = new Dictionary <EquipLocation, InventoryItem>(); foreach (var item in items) { var cdClientObject = cdClient.ObjectsTable.FirstOrDefault( o => o.Id == item.Itemid ); var itemRegistryEntry = cdClient.ComponentsRegistryTable.FirstOrDefault( r => r.Id == item.Itemid && r.Componenttype == 11 ); if (cdClientObject == default || itemRegistryEntry == default) { Logger.Error($"{item.Itemid} is not a valid item"); continue; } var itemComponent = cdClient.ItemComponentTable.First( i => i.Id == itemRegistryEntry.Componentid ); Debug.Assert(item.Itemid != null, "item.Itemid != null"); Debug.Assert(item.Count != null, "item.Count != null"); Items.TryAdd(itemComponent.EquipLocation, new InventoryItem { InventoryItemId = IdUtilities.GenerateObjectId(), Count = (long)item.Count, LOT = (int)item.Itemid, Slot = -1, InventoryType = -1 }); } }); }