示例#1
0
        /// <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));
            }
        }