public void DisplayDamage(Player player, Player target, Room room, Item.Item weapon, int damage) { CultureInfo cc = CultureInfo.CurrentCulture; var damText = _damage.DamageText(damage); var attackType = ""; if (weapon == null) { attackType = player.ConnectionId.Equals("mob", StringComparison.CurrentCultureIgnoreCase) ? player.DefaultAttack?.ToLower(cc): "punch"; } else { attackType = Enum.GetName(typeof(Item.Item.AttackTypes), weapon.AttackType)?.ToLower(cc); } _writer.WriteLine($"<p class='combat'>Your {attackType} {damText.Value} {target.Name.ToLower(cc)}. <span class='damage'>[{damage}]</span></p>", player.ConnectionId); _writer.WriteLine($"<p class='combat'>{target.Name} {_formulas.TargetHealth(player, target)}</p>", player.ConnectionId); _writer.WriteLine($"<p>{player.Name}'s {attackType} {damText.Value} you. <span class='damage'>[{damage}]</span></p></p>", target.ConnectionId); foreach (var pc in room.Players) { if (pc.Name == player.Name || pc.Name == target.Name) { continue; } _writer.WriteLine($"<p>{player.Name}'s {attackType} {damText.Value} {target.Name.ToLower(cc)}.</p>", pc.ConnectionId); } }
public void LookObject(string target, Room room, Player player) { if (player.Status == CharacterStatus.Status.Sleeping) { _writeToClient.WriteLine("You can't do that while asleep.", player.ConnectionId); return; } var isDark = RoomIsDark(room, player); var nthTarget = Helpers.findNth(target); var item = Helpers.findRoomObject(nthTarget, room) ?? Helpers.findObjectInInventory(nthTarget, player); var character = Helpers.FindMob(nthTarget, room) ?? Helpers.FindPlayer(nthTarget, room); RoomObject roomObjects = null; if (room.RoomObjects.Count >= 1 && room.RoomObjects[0].Name != null) { roomObjects = room.RoomObjects.FirstOrDefault(x => x.Name.Contains(target, StringComparison.CurrentCultureIgnoreCase)); } if (target.Equals("self", StringComparison.CurrentCultureIgnoreCase)) { character = player; } if (item == null && character == null && roomObjects == null) { _writeToClient.WriteLine("<p>You don't see that here.", player.ConnectionId); return; } if (item != null && character == null) { _writeToClient.WriteLine($"<p class='{(isDark ? "room-dark" : "")}'>{item.Description.Look}", player.ConnectionId); // display item stats via lore var hasLore = Helpers.FindSkill("lore", player); if (hasLore != null) { var success = LoreSuccess(hasLore.Proficiency ?? 0); if (success) { DoLore(item, player); } else { _gain.GainSkillExperience(player, hasLore.Level * 100, hasLore, _dice.Roll(1, 1, 5)); } } if (item.Container != null && !item.Container.CanOpen && item.Container.Items.Any()) { _writeToClient.WriteLine($"<p class='{(isDark ? "room-dark" : "")}'>{item.Name} contains:", player.ConnectionId); var listOfContainerItems = new StringBuilder(); foreach (var containerItem in item.Container.Items.List()) { listOfContainerItems.Append($"<p class='{(isDark ? "room-dark" : "")}'>{containerItem.Name.Replace(" lies here.", "")}</p>"); } _writeToClient.WriteLine(listOfContainerItems.ToString(), player.ConnectionId); } foreach (var pc in room.Players) { if (pc.Name == player.Name) { continue; } _writeToClient.WriteLine($"<p>{player.Name} looks at {item.Name.ToLower()}.</p>", pc.ConnectionId); } return; } //for player? if (roomObjects != null && character == null) { _writeToClient.WriteLine($"<p class='{(isDark ? "room-dark" : "")}'>{roomObjects.Look}", player.ConnectionId); foreach (var pc in room.Players) { if (pc.Name == player.Name) { continue; } _writeToClient.WriteLine($"<p>{player.Name} looks at {roomObjects.Name.ToLower()}.</p>", pc.ConnectionId); } return; } if (character == null) { _writeToClient.WriteLine("<p>You don't see them here.", player.ConnectionId); return; } var sb = new StringBuilder(); if (character.ConnectionId != "mob") { sb.Append( $"<table class='char-look'><tr><td><span class='cell-title'>Eyes:</span> {character.Eyes}</td><td><span class='cell-title'>Hair:</span> {character.HairColour}</td></tr>"); sb.Append( $"<tr><td><span class='cell-title'>Skin:</span> {character.Skin}</td><td><span class='cell-title'>Hair Length:</span> {character.HairLength}</td></tr>"); sb.Append( $"<tr><td><span class='cell-title'>Build:</span> {character.Build}</td><td><span class='cell-title'>Hair Texture:</span> {character.HairTexture}</td></tr>"); sb.Append( $"<tr><td><span class='cell-title'>Face:</span> {character.Face}</td><td><span class='cell-title'>Hair Facial:</span> {character.FacialHair}</td></tr><table>"); } var status = Enum.GetName(typeof(CharacterStatus.Status), player.Status); var statusText = String.Empty; if (status.Equals("fighting", StringComparison.CurrentCultureIgnoreCase)) { statusText = $"fighting {(character.Target.Equals(player.Name) ? "YOU!" : character.Target)}."; } else { statusText = $"{Enum.GetName(typeof(CharacterStatus.Status), player.Status)}."; statusText = statusText.ToLower(); } var displayEquipment = new StringBuilder(); displayEquipment.Append("<p>They are using:</p>") .Append("<table>"); if (character.Equipped.Light != null) { displayEquipment.Append("<tr><td style='width:175px;' class=\"cell-title\" title='Worn as light'>").Append("<used as light>").Append("</td>").Append("<td>").Append(character.Equipped.Light?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Finger != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on finger'>").Append(" <worn on finger>").Append("</td>").Append("<td>").Append(character.Equipped.Finger?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Finger2 != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on finger'>").Append(" <worn on finger>").Append("</td>").Append("<td>").Append(character.Equipped.Finger2?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Neck != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn around neck'>").Append(" <worn around neck>").Append("</td>").Append("<td>").Append(character.Equipped.Neck?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Neck2 != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn around neck'>").Append(" <worn around neck>").Append("</td>").Append("<td>").Append(character.Equipped.Neck2?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Face != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on face'>").Append(" <worn on face>").Append("</td>").Append("<td>").Append(character.Equipped.Face?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Head != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on head'>").Append(" <worn on head>").Append("</td>").Append("<td>").Append(character.Equipped.Head?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Torso != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on torso'>").Append(" <worn on torso>").Append("</td>").Append("<td>").Append(character.Equipped.Torso?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Legs != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on legs'>").Append(" <worn on legs>").Append("</td>").Append("<td>").Append(character.Equipped.Legs?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Feet != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on feet'>").Append(" <worn on feet>").Append("</td>").Append("<td>").Append(character.Equipped.Feet?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Hands != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on hands'>").Append(" <worn on hands>").Append("</td>").Append("<td>").Append(character.Equipped.Hands?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Arms != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on arms'>").Append(" <worn on arms>").Append("</td>").Append("<td>").Append(character.Equipped.Arms?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.AboutBody != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn about body'>").Append(" <worn about body>").Append("</td>").Append("<td>").Append(character.Equipped.AboutBody?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Waist != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on waist'>").Append(" <worn about waist>").Append("</td>").Append("<td>").Append(character.Equipped.Waist?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Wrist != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on wrist'>").Append(" <worn around wrist>").Append("</td>").Append("<td>").Append(character.Equipped.Wrist?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Wrist2 != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn on wrist'>").Append(" <worn around wrist>").Append("</td>").Append("<td>").Append(character.Equipped.Wrist2?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Wielded != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='worn as weapon'>").Append(" <wielded>").Append("</td>").Append("<td>") .Append(character.Equipped.Wielded?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Secondary != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='worn as weapon'>").Append(" <secondary>").Append("</td>").Append("<td>") .Append(character.Equipped.Secondary?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Shield != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Worn as shield'>").Append(" <worn as shield>").Append("</td>").Append("<td>").Append(character.Equipped.Shield?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Held != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Held'>").Append(" <Held>").Append("</td>").Append("<td>").Append(character.Equipped.Held?.Name ?? "(nothing)").Append("</td></tr>"); } if (character.Equipped.Floating != null) { displayEquipment.Append("<tr><td class=\"cell-title\" title='Floating Nearby'>").Append(" <Floating nearby>").Append("</td>").Append("<td>").Append(character.Equipped.Floating?.Name ?? "(nothing)").Append("</td></tr>").Append("</table"); } if (character.Equipped.Light == null && character.Equipped.Finger == null && character.Equipped.Finger2 == null && character.Equipped.Neck == null && character.Equipped.Neck2 == null && character.Equipped.Face == null && character.Equipped.Head == null && character.Equipped.Torso == null && character.Equipped.Legs == null && character.Equipped.Feet == null && character.Equipped.Hands == null && character.Equipped.Arms == null && character.Equipped.AboutBody == null && character.Equipped.Waist == null && character.Equipped.Wrist == null && character.Equipped.Wrist2 == null && character.Equipped.Wielded == null && character.Equipped.Secondary == null && character.Equipped.Shield == null && character.Equipped.Held == null && character.Equipped.Held == null && character.Equipped.Floating == null) { displayEquipment.Append("</table").Append("<p>Nothing.</p>"); } _writeToClient.WriteLine($"{sb}<p class='{(isDark ? "room-dark" : "")}'>{character.Description} <br/>{character.Name} {_formulas.TargetHealth(player, character)} and is {statusText}<br/> {displayEquipment}", player.ConnectionId); foreach (var pc in room.Players) { if (pc.Name == player.Name) { continue; } _writeToClient.WriteLine($"<p>{player.Name} looks at {character.Name.ToLower()}.</p>", pc.ConnectionId); } //if (item.ItemType == Item.Item.ItemTypes.Container) //{ // LookInContainer(target, room, player); //} }