Esempio n. 1
0
        public void MobileObject_Die_CorpseDescriptionSet()
        {
            mob.CorpseLookDescription = "corp desc";
            EquipedEquipment(mob).Add(armor.Object);
            mob.Money = 10;

            ICorpse corpse = mob.Die(null);

            Assert.IsFalse(mob.IsAlive);
            Assert.AreEqual("A corpse lies here.", corpse.ShortDescription);
            Assert.AreEqual("corp desc", corpse.LookDescription);
            Assert.AreEqual("corp desc", corpse.ExamineDescription);
            Assert.IsTrue(corpse.KeyWords.Contains("Corpse"));
            Assert.AreEqual("corpse", corpse.SentenceDescription);
            Assert.AreEqual(3, corpse.Items.Count);
            Assert.IsTrue(corpse.Items.Contains(item.Object));
            Assert.IsTrue(corpse.Items.Contains(armor.Object));

            IMoney corpseMoney = null;

            foreach (IItem localItem in corpse.Items)
            {
                corpseMoney = localItem as IMoney;
                if (corpseMoney != null)
                {
                    break;
                }
            }

            Assert.AreEqual(10ul, corpseMoney.Value);
            Assert.AreEqual(0, mob.Items.Count);
            Assert.AreEqual(0, mob.EquipedEquipment.Count());
            Assert.AreEqual(0ul, mob.Money);
            evnt.Verify(e => e.OnDeath(mob), Times.Once);
        }
Esempio n. 2
0
        private void HandleGroupExpAndGold(IMobileObject attacker, ICorpse corpse, INonPlayerCharacter npc, IReadOnlyList <IMobileObject> partyMembers)
        {
            int exp = npc.EXP / partyMembers.Count;

            ulong gold = 0;

            for (int i = corpse.Items.Count - 1; i >= 0; i--)
            {
                if (corpse.Items[i] is IMoney money)
                {
                    gold += money.Value;
                    corpse.Items.RemoveAt(i);
                }
            }
            gold = gold / (ulong)partyMembers.Count;

            string message = $"{attacker.KeyWords[0]} killed {this.KeyWords[0]}.  You receive {exp} exp and {GlobalReference.GlobalValues.MoneyToCoins.FormatedAsCoins(gold)}.";
            ITranslationMessage translationMessage = new TranslationMessage(message);

            foreach (IMobileObject mob in partyMembers)
            {
                if (mob is IPlayerCharacter pc2)
                {
                    pc2.Experience += exp;
                    pc2.Money      += gold;
                    GlobalReference.GlobalValues.Notify.Mob(pc2, translationMessage);
                }
            }
        }
Esempio n. 3
0
        public override ICorpse Die()
        {
            ICorpse corpse = base.Die();

            Room.RemoveMobileObjectFromRoom(this);
            Room.Items.Insert(0, corpse);

            return(corpse);
        }
Esempio n. 4
0
        public void NonPlayerCharacter_Die()
        {
            ICorpse corpse = npc.Die(attacker.Object);

            room.Verify(e => e.RemoveMobileObjectFromRoom(npc));
            room.Verify(e => e.AddItemToRoom(It.Is <IItem>(f => f == corpse), 0));
            evnt.Verify(e => e.OnDeath(npc));
            Assert.AreSame(attacker.Object, corpse.Killer);
        }
Esempio n. 5
0
        public void PlayerCharacter_Die()
        {
            ICorpse corpse = pc.Die(attacker.Object);

            room.Verify(e => e.AddItemToRoom(It.Is <ICorpse>(f => f == corpse), 0));
            Assert.AreEqual(1, pc.Corpses.Count);
            evnt.Verify(e => e.OnDeath(pc), Times.Once);
            evnt.Verify(e => e.EnterRoom(pc), Times.Once);
            Assert.AreSame(attacker.Object, corpse.Killer);
        }
Esempio n. 6
0
        public override ICorpse Die(IMobileObject attacker)
        {
            ICorpse corpse = base.Die(attacker);

            IItem item = GlobalReference.GlobalValues.RandomDropGenerator.GenerateRandomDrop(this);

            if (item != null)
            {
                corpse.Items.Add(item);
            }

            Room.RemoveMobileObjectFromRoom(this);
            Room.AddItemToRoom(corpse, 0);

            return(corpse);
        }
Esempio n. 7
0
        public override ICorpse Die()
        {
            ICorpse corpse = base.Die();

            Corpses.Add(corpse.Clone());  //because if someone picks something up out of the corpse it will be reflected here

            Room.RemoveMobileObjectFromRoom(this);
            Room.Items.Insert(0, corpse);
            Room = GlobalReference.GlobalValues.World.Zones[RespawnPoint.Zone].Rooms[RespawnPoint.Id];
            Room.AddMobileObjectToRoom(this);
            Health  = 1;
            Mana    = 1;
            Stamina = 1;
            EnqueueCommand("Look");
            GlobalReference.GlobalValues.Engine.Event.EnterRoom(this);

            return(corpse);
        }
Esempio n. 8
0
        private void KillMobAndRewardXP(IMobileObject attacker)
        {
            ICorpse             corpse = Die(attacker);
            INonPlayerCharacter npc    = this as INonPlayerCharacter;
            IPlayerCharacter    pc     = attacker as IPlayerCharacter;

            if (npc != null && attacker != null)
            {
                IReadOnlyList <IMobileObject> partyMembers = GlobalReference.GlobalValues.Engine.Party.CurrentPartyMembers(attacker);

                if (partyMembers == null)
                {
                    pc.Experience += npc.EXP;
                }
                else
                {
                    HandleGroupExpAndGold(attacker, corpse, npc, partyMembers);
                }
            }
        }
Esempio n. 9
0
        public void MobileObject_Die()
        {
            EquipedEquipment(mob).Add(armor.Object);
            mob.Money = 10;
            mob.Enchantments.Add(enchantment.Object);

            ICorpse corpse = mob.Die(attacker.Object);

            Assert.IsFalse(mob.IsAlive);
            Assert.AreEqual("A corpse lies here.", corpse.ShortDescription);
            Assert.AreEqual("This corpse once was living but no life exists here now.", corpse.LookDescription);
            Assert.AreEqual("This corpse once was living but no life exists here now.", corpse.ExamineDescription);
            Assert.IsTrue(corpse.KeyWords.Contains("Corpse"));
            Assert.AreEqual("corpse", corpse.SentenceDescription);
            Assert.AreEqual(3, corpse.Items.Count);
            Assert.IsTrue(corpse.Items.Contains(item.Object));
            Assert.IsTrue(corpse.Items.Contains(armor.Object));
            Assert.AreSame(attacker.Object, corpse.Killer);

            IMoney corpseMoney = null;

            foreach (IItem localItem in corpse.Items)
            {
                IMoney money = (localItem as IMoney);
                if (money != null)
                {
                    corpseMoney = money;
                    break;
                }
            }

            Assert.AreEqual(10ul, corpseMoney.Value);
            Assert.AreEqual(0, mob.Items.Count);
            Assert.AreEqual(0, mob.EquipedEquipment.Count());
            Assert.AreEqual(0ul, mob.Money);
            Assert.IsTrue(corpse.Items.Contains(item.Object));
            evnt.Verify(e => e.OnDeath(mob), Times.Once);
            enchantment.VerifySet(e => e.EnchantmentEndingDateTime = new DateTime());
        }
Esempio n. 10
0
        public override ICorpse Die(IMobileObject attacker)
        {
            AddTitle("{performer} the resurrected.");

            ICorpse corpse = base.Die(attacker);

            corpse.LookDescription = $"The corpse of {SentenceDescription} lies here.";
            Corpses.Add(corpse.Clone());  //because if someone picks something up out of the corpse it will be reflected here

            Room.RemoveMobileObjectFromRoom(this);
            Room.AddItemToRoom(corpse, 0);
            Room = GlobalReference.GlobalValues.World.Zones[RespawnPoint.Zone].Rooms[RespawnPoint.Id];
            Room.AddMobileObjectToRoom(this);
            Health  = 1;
            Mana    = 1;
            Stamina = 1;
            EnqueueCommand("Look");
            GlobalReference.GlobalValues.Engine.Event.EnterRoom(this);
            IsAlive = true; //the player is alive again

            return(corpse);
        }