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); }
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); } } }
public override ICorpse Die() { ICorpse corpse = base.Die(); Room.RemoveMobileObjectFromRoom(this); Room.Items.Insert(0, corpse); return(corpse); }
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); }
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); }
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); }
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); }
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); } } }
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()); }
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); }