/// <summary> /// Adds/updates the tracking list for creature wielded items /// </summary> public void TrackEquippedObjects(Creature creature) { var addList = new List <WorldObject>(); foreach (var wieldedItem in creature.EquippedObjects.Values) { var selectable = (wieldedItem.ValidLocations.Value & EquipMask.Selectable) != 0; var missileCombat = creature.CombatMode == CombatMode.Missile && (wieldedItem.ValidLocations.Value & EquipMask.MissileAmmo) != 0; if (!selectable && !missileCombat) { continue; } if (creature.Location == null || creature.Placement == null || creature.ParentLocation == null) { creature.SetChild(wieldedItem, (int)wieldedItem.CurrentWieldedLocation, out var placementId, out var parentLocation); } lock (clientObjectList) { var sendUpdate = clientObjectList.ContainsKey(wieldedItem.Guid); if (!sendUpdate) { clientObjectList.Add(wieldedItem.Guid, WorldManager.PortalYearTicks); } else { clientObjectList[wieldedItem.Guid] = WorldManager.PortalYearTicks; } } addList.Add(wieldedItem); } foreach (var item in addList) { //Console.WriteLine($"Telling {Name} about {item.Name} - {item.Guid.Full:X}"); Session.Network.EnqueueSend(new GameMessageCreateObject(item)); } }