public void TargetKilled(Player player, Player target, Room room) { player.Target = String.Empty; player.Status = CharacterStatus.Status.Standing; target.Status = CharacterStatus.Status.Ghost; target.Target = string.Empty; DeathCry(room, target); _gain.GainExperiencePoints(player, target); _quest.IsQuestMob(player, target.Name); if (target.ConnectionId != "mob") { Helpers.PostToDiscord($"{target.Name} got killed by {player.Name}!", "event", _cache.GetConfig()); if (player.ConnectionId != "mob") { target.PlayerDeaths += 1; player.PlayerKills += 1; } else { target.MobDeaths += 1; } } _writer.WriteLine("<p class='dead'>You are dead. R.I.P.</p>", target.ConnectionId); var targetName = target.Name.ToLower(CultureInfo.CurrentCulture); var corpse = new Item.Item() { Name = $"The corpse of {targetName}", Description = new Description() { Room = $"The corpse of {targetName} is laying here.", Exam = target.Description, Look = target.Description, }, Slot = Equipment.EqSlot.Held, Level = 1, Stuck = true, Container = new Container() { Items = new ItemList(), CanLock = false, IsOpen = true, CanOpen = false, }, ItemType = Item.Item.ItemTypes.Container, Decay = target.ConnectionId.Equals("mob", StringComparison.OrdinalIgnoreCase) ? 10 : 20, DecayTimer = 300 // 5 minutes, }; foreach (var item in target.Inventory) { item.Equipped = false; corpse.Container.Items.Add(item); } if (target.ConnectionId.Equals("mob", StringComparison.CurrentCultureIgnoreCase)) { player.MobKills += 1; var randomItem = _randomItem.WeaponDrop(player); if (randomItem != null) { corpse.Container.Items.Add(randomItem); } } // clear list target.Inventory = new ItemList(); // clear equipped target.Equipped = new Equipment(); var mount = target.Pets.FirstOrDefault(x => x.Name.Equals(target.Mounted.Name)); if (mount != null) { target.Pets.Remove(mount); target.Mounted.Name = string.Empty; } // add corpse to room room.Items.Add(corpse); _clientUi.UpdateInventory(target); _clientUi.UpdateEquipment(target); _clientUi.UpdateScore(target); _clientUi.UpdateScore(player); room.Clean = false; _cache.RemoveCharFromCombat(target.Id.ToString()); _cache.RemoveCharFromCombat(player.Id.ToString()); if (target.ConnectionId.Equals("mob", StringComparison.CurrentCultureIgnoreCase)) { room.Mobs.Remove(target); var getTodayMobStats = _pdb.GetList <MobStats>(PlayerDataBase.Collections.MobStats).FirstOrDefault(x => x.Date.Date.Equals(DateTime.Today)); if (getTodayMobStats != null) { getTodayMobStats.MobKills += 1; } else { getTodayMobStats = new MobStats() { MobKills = 1, PlayerDeaths = 0, Date = DateTime.Now, }; } _pdb.Save <MobStats>(getTodayMobStats, PlayerDataBase.Collections.MobStats); } else { room.Players.Remove(target); var getTodayMobStats = _pdb.GetList <MobStats>(PlayerDataBase.Collections.MobStats).FirstOrDefault(x => x.Date.Date.Equals(DateTime.Today)); if (getTodayMobStats != null) { getTodayMobStats.PlayerDeaths += 1; } else { getTodayMobStats = new MobStats() { MobKills = 0, PlayerDeaths = 1, Date = DateTime.Now, }; } _pdb.Save <MobStats>(getTodayMobStats, PlayerDataBase.Collections.MobStats); } // take player to Temple / recall area if (target.ConnectionId != "mob") { target.Status = CharacterStatus.Status.Resting; var newRoom = _cache.GetRoom(target.RecallId); target.Buffer = new Queue <string>(); target.RoomId = Helpers.ReturnRoomId(newRoom); newRoom.Players.Add(target); target.Buffer.Enqueue("look"); } }