Beispiel #1
0
 private void InternalEnqueueMessage(string message)
 {
     if (PossingMob == null)
     {
         _messageQueue.Enqueue(message);
     }
     else
     {
         _messageQueue.Enqueue(message);     //allow the possessed mob to see what they are doing
         PossingMob.EnqueueMessage(message);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Causes the mobile to die and returns the corpse
        /// </summary>
        /// <returns></returns>
        public virtual ICorpse Die(IMobileObject attacker)
        {
            GlobalReference.GlobalValues.Engine.Event.OnDeath(this);
            IsAlive = false;

            if (PossingMob != null)
            {
                PossingMob.PossedMob = null;
                PossingMob.EnqueueCommand("Look");
                PossingMob = null;
            }

            foreach (IEnchantment enchantment in Enchantments)
            {
                enchantment.EnchantmentEndingDateTime = new DateTime();  //set the end date to the past so its not fired and will be cleaned up
            }

            Corpse corpse = new Corpse();

            corpse.OriginalMob        = this;
            corpse.Killer             = attacker;
            corpse.TimeOfDeath        = DateTime.UtcNow;
            corpse.ShortDescription   = "A corpse lies here.";
            corpse.LookDescription    = CorpseLookDescription ?? "This corpse once was living but no life exists here now.";
            corpse.ExamineDescription = CorpseLookDescription ?? "This corpse once was living but no life exists here now.";
            corpse.KeyWords.Add("Corpse");
            corpse.SentenceDescription = "corpse";

            corpse.Items.AddRange(EquipedEquipment);
            corpse.Items.AddRange(Items);
            _equipment.Clear();
            Items.Clear();
            corpse.Items.Add(new Money(Money));
            Money = 0;

            return(corpse);
        }