public static void LearnFromMistake(Player player, Skill skill, int xpGain) { if (skill.Proficiency < 95) { var xp = new Experience(); player.Experience += xpGain; xp.GainLevel(player); var gain = Helpers.Rand(1, 5); skill.Proficiency += gain; HubContext.Instance.SendToClient($"<span style='color:yellow'>Your {skill.Name} skill increases by {gain}%.</span>", player.HubGuid); HubContext.Instance.SendToClient($"<span style='color:yellow'>You learn from your mistakes and gain {xpGain} experience points</span>", player.HubGuid); } }
public static async Task CraftItem(PlayerSetup.Player player, Room.Room room, Craft craftItem) { //add skill check here var getSkill = player.Skills.FirstOrDefault(x => x.Alias.Equals(craftItem.CraftCommand.ToString())); if (getSkill == null) { HubContext.Instance.SendToClient("You don't know how to do that", player.HubGuid); return; } if (player.MovePoints < craftItem.MoveCost) { if (craftItem.CraftCommand == CraftType.Chop || craftItem.CraftCommand == CraftType.Brew) { HubContext.Instance.SendToClient("You are too tired to make " + Helpers.ReturnName(null, null, craftItem.CreatesItem.name).ToLower() + ".", player.HubGuid); return; } HubContext.Instance.SendToClient("You are too tired to make " + Helpers.ReturnName(null, null, craftItem.Name).ToLower() + ".", player.HubGuid); return; } player.MovePoints -= craftItem.MoveCost; var successChance = ShowSkills.CraftSuccess(getSkill.Points); if (getSkill.Points >= successChance) { //success if (player.ActiveSkill != null) { HubContext.Instance.SendToClient("wait till you have finished " + player.ActiveSkill.Name, player.HubGuid); return; } player.ActiveSkill = getSkill; var oldRoom = room; HubContext.Instance.SendToClient(craftItem.StartMessage, player.HubGuid); await Task.Delay(1500); foreach (var emote in craftItem.CraftingEmotes) { HubContext.Instance.SendToClient(emote, player.HubGuid); await Task.Delay(2000); } HubContext.Instance.SendToClient(craftItem.SuccessMessage, player.HubGuid); if (craftItem.Materials != null) { foreach (var materials in craftItem.Materials) { for (var i = 0; i < materials.Count; i++) { var item = player.Inventory.FirstOrDefault(x => x.name.ToLower() .Contains(materials.Name.ToLower())); player.Inventory.Remove(item); } } } if (craftItem.CraftAppearsInRoom) { room.items.Add(craftItem.CreatesItem); } if (!craftItem.CraftAppearsInRoom) { PlayerSetup.Player.AddItem(player, craftItem.CreatesItem); } Score.UpdateUiInventory(player); Cache.updateRoom(room, oldRoom); player.ActiveSkill = null; } else { var failMessage = craftItem.FailureMessages[Helpers.Rand(1, craftItem.FailureMessages.Count)]; HubContext.Instance.SendToClient(failMessage.Message, player.HubGuid); if (failMessage.BreakMaterial) { var item = player.Inventory.FirstOrDefault(x => x.name.ToLower().Contains(craftItem .Materials[Helpers.Rand(1, craftItem.Materials.Count)].Name.ToLower())); player.Inventory.Remove(item); } var xp = new Experience(); if (getSkill != null) { if (player.ChosenCraft == craftItem.CraftCommand.ToString()) { getSkill.Points += Helpers.Rand(1, 10); HubContext.Instance.SendToClient("<p class='roomExit'>You learn from your mistakes and gain 100 experience points.</p>", player.HubGuid); player.Experience += 100; } else { if (string.IsNullOrEmpty(player.ChosenCraft) && getSkill.Points <= 99) { HubContext.Instance.SendToClient("<p class='roomExit'>You learn from your mistakes and gain 100 experience points.</p>", player.HubGuid); player.Experience += 100; getSkill.Points += Helpers.Rand(1, 10); if (getSkill.Points > 99) { var rankWarning = ShowSkills.checkRank(getSkill.Points, player); HubContext.Instance.SendToClient(rankWarning, player.HubGuid); getSkill.Points = 99; } } else if (getSkill.Points <= 99) { HubContext.Instance.SendToClient("<p class='roomExit'>You learn from your mistakes and gain 100 experience points.</p>", player.HubGuid); player.Experience += 100; getSkill.Points += Helpers.Rand(1, 10); if (getSkill.Points > 99) { getSkill.Points = 99; } } } } Score.ReturnScoreUI(player); xp.GainLevel(player); } }
public static void IsDead(Player attacker, Player defender, Room room) { if (defender.HitPoints <= 0) { HubContext.SendToAllExcept(defender.Name + " dies ", room.fighting, room.players); HubContext.SendToClient("You die", defender.HubGuid); HubContext.SendToClient(defender.Name + " dies", attacker.HubGuid); defender.Target = null; //Turn corpse into room item var defenderCorpse = new Item { name = "The corpse of " + defender.Name, container = true, containerItems = new List <Item>(), description = new Description { look = "The slain corpse of " + defender.Name + " is here.", room = "The slain corpse of " + defender.Name } }; foreach (var invItem in defender.Inventory) { invItem.location = Item.ItemLocation.Room; defenderCorpse.containerItems.Add(invItem); } var oldRoom = room; room.items.Add(defenderCorpse); room.corpses.Add(defender); if (defender.Type == Player.PlayerTypes.Mob || string.IsNullOrEmpty(defender.HubGuid)) { room.mobs.Remove(defender); } else { //room.players.Remove(defender); //Add slain player to recall } defender.Target = null; attacker.Target = null; attacker.Status = PlayerSetup.Player.PlayerStatus.Standing; defender.Status = defender.Type == Player.PlayerTypes.Player ? PlayerSetup.Player.PlayerStatus.Ghost : PlayerSetup.Player.PlayerStatus.Dead; Cache.updateRoom(room, oldRoom); var xp = new Experience(); int xpGain = xp.GainXp(attacker, defender); attacker.Experience += xpGain; attacker.TotalExperience += xpGain; HubContext.SendToClient(xpGain + "XP", attacker.HubGuid); xp.GainLevel(attacker); //calc xp //create corpse foreach (var player in room.players) { var roomdata = LoadRoom.DisplayRoom(room, player.Name); Score.UpdateUiRoom(player, roomdata); } } }
private async Task DoForaging(Player player, Room room) { player.Status = Player.PlayerStatus.Busy; await Task.Delay(500); HubContext.Instance.SendToClient("You continue searching the area.", player.HubGuid); player.PlayerIsForaging = true; foreach (var character in room.players) { if (character != player) { var roomMessage = $"{Helpers.ReturnName(player, character, string.Empty)} continues searching the area."; HubContext.Instance.SendToClient(roomMessage, character.HubGuid); } } await Task.Delay(500); var foragingAB = player.Skills.FirstOrDefault(x => x.Name.Equals("Foraging")); double getSkillProf = 0; if (foragingAB != null) { getSkillProf = foragingAB.Points; } var getItems = room.ForageItems.Where(x => x.ForageRank <= player.ForageRank).ToList(); if (getItems.Count == 0 && room.terrain == Room.Terrain.City) { getItems = new ItemContainer(); if (Helpers.Rand(1, 100) <= 50) { getItems.Add(Held.TatteredRag()); getItems.Add(Held.ScrapMetal()); } } else if (room.terrain == Room.Terrain.City) { if (Helpers.Rand(1, 100) <= 50) { getItems.Add(Held.TatteredRag()); getItems.Add(Held.ScrapMetal()); } } var successChance = Helpers.Rand(1, 100); if (getSkillProf >= successChance && getItems.Count > 0) { var YouFound = "You found " + Helpers.ReturnName(null, null, getItems[Helpers.Rand(0, getItems.Count)].name).ToLower() + "."; var item = getItems[Helpers.Rand(0, getItems.Count)]; item.location = Item.Item.ItemLocation.Inventory; item.type = Item.Item.ItemType.Food; item.hidden = false; PlayerSetup.Player.AddItem(player, item); HubContext.Instance.SendToClient(YouFound, player.HubGuid); } else { var failMessage = ""; if (room.terrain == Room.Terrain.City) { failMessage = "You fail to find anything."; } else { switch (Helpers.Rand(1, 4)) { case 1: failMessage = "A bee has stung you on the hand, Ouch!"; break; case 2: case 3: failMessage = "You fail to find anything worth taking."; break; default: failMessage = "You don't recognise any of the flora here."; break; } } HubContext.Instance.SendToClient(failMessage, player.HubGuid); if (getSkillProf < 99) { HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points", player.HubGuid); var xp = new Experience(); player.Experience += 100; xp.GainLevel(player); foragingAB.Points += Helpers.Rand(1, 5); if (foragingAB.Points > 99) { foragingAB.Points = 99; } } if (foragingAB.Points == 99) { HubContext.Instance.SendToClient("You must commit to a craft to progress further", player.HubGuid); } Score.ReturnScoreUI(player); } player.ActiveSkill = null; player.PlayerIsForaging = false; }
private async Task DoSearching(Player player, Room room) { player.Status = Player.PlayerStatus.Busy; await Task.Delay(500); HubContext.Instance.SendToClient("You continue searching the area.", player.HubGuid); foreach (var character in room.players) { if (character != player) { var roomMessage = $"{Helpers.ReturnName(player, character, string.Empty)} continues searching the area."; HubContext.Instance.SendToClient(roomMessage, character.HubGuid); } } await Task.Delay(500); var AB = player.Skills.FirstOrDefault(x => x.Name.Equals("Search")); double getSkillProf = 0; if (AB != null) { getSkillProf = AB.Proficiency / (double)95 * 100; } var getItems = room.items.Where(x => x.isHiddenInRoom).ToList(); var successChance = Helpers.Rand(1, 100); if (getSkillProf >= successChance && getItems.Count > 0) { var YouFound = "You found " + Helpers.ReturnName(null, null, getItems[Helpers.Rand(0, getItems.Count)].name).ToLower() + "."; var item = getItems[Helpers.Rand(0, getItems.Count)]; item.location = Item.Item.ItemLocation.Inventory; item.isHiddenInRoom = false; PlayerSetup.Player.AddItem(player, item); HubContext.Instance.SendToClient(YouFound, player.HubGuid); } else { var failMessage = ""; if (room.terrain == Room.Terrain.City) { failMessage = "You fail to find anything."; } else { switch (Helpers.Rand(1, 4)) { case 1: failMessage = "You search quickly but fail to find anything."; break; case 2: case 3: failMessage = "You fail to find anything."; break; default: failMessage = "You didn't find anything from your search."; break; } } HubContext.Instance.SendToClient(failMessage, player.HubGuid); if (getSkillProf < 95) { HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points", player.HubGuid); var xp = new Experience(); player.Experience += 100; xp.GainLevel(player); AB.Proficiency += Helpers.Rand(1, 5); } Score.ReturnScoreUI(player); } player.ActiveSkill = null; Score.UpdateUiInventory(player); }
public static void IsDead(Player attacker, Player defender, Room room) { if (defender.HitPoints <= 0) { CheckEvent.FindEvent(CheckEvent.EventType.Death, attacker, "death"); foreach (var player in room.players) { if (player != defender) { HubContext.SendToClient(defender.Name + " dies ", player.HubGuid); } else { HubContext.SendToClient("You die", defender.HubGuid); } } defender.Target = null; defender.ActiveFighting = false; defender.Status = Player.PlayerStatus.Ghost; //Turn corpse into room item var defenderCorpse = new Item { name = "The corpse of " + defender.Name, container = true, containerItems = new List <Item>(), description = new Description { look = "The slain corpse of " + defender.Name + " is here.", room = "The slain corpse of " + defender.Name } }; foreach (var invItem in defender.Inventory) { invItem.location = Item.ItemLocation.Room; defenderCorpse.containerItems.Add(invItem); } var oldRoom = room; room.items.Add(defenderCorpse); room.corpses.Add(defender); if (defender.Type == Player.PlayerTypes.Mob || string.IsNullOrEmpty(defender.HubGuid)) { room.mobs.Remove(defender); } else { //room.players.Remove(defender); //Add slain player to recall } defender.Target = null; if (attacker.Target.Name == defender.Name) { attacker.Target = null; attacker.Status = PlayerSetup.Player.PlayerStatus.Standing; attacker.ActiveFighting = false; } defender.Status = defender.Type == Player.PlayerTypes.Player ? PlayerSetup.Player.PlayerStatus.Ghost : PlayerSetup.Player.PlayerStatus.Dead; Cache.updateRoom(room, oldRoom); var xp = new Experience(); int xpGain = xp.GainXp(attacker, defender); attacker.Experience += xpGain; attacker.TotalExperience += xpGain; HubContext.SendToClient(xpGain + "XP", attacker.HubGuid); xp.GainLevel(attacker); //calc xp //create corpse foreach (var player in room.players) { var roomdata = LoadRoom.DisplayRoom(room, player.Name); Score.UpdateUiRoom(player, roomdata); } if (attacker.HubGuid != null) { room.fighting.Remove(attacker.HubGuid); } if (defender.HubGuid != null) { room.fighting.Remove(defender.HubGuid); } //remove followers if (defender.Following != null) { if (defender.Followers.Count > 0) { foreach (var follower in defender.Followers) { if (follower.HubGuid != null) { HubContext.SendToClient("You stop following " + defender.Name, follower.HubGuid); } } } defender.Followers = null; defender.Following = null; } // check if defender is following? if (attacker.Followers?.FirstOrDefault(x => x.Equals(defender)) != null) { attacker.Followers.Remove(defender); if (attacker.HubGuid != null) { HubContext.SendToClient(defender.Name + " stops following you", attacker.HubGuid); } } } }
public void StartFishing(Player player, Room room) { if (room.terrain != Room.Terrain.Water) { HubContext.Instance.SendToClient("You must be by water to fish.", player.HubGuid); return; } var rod = player.Inventory.FirstOrDefault(x => x.name.Contains("rod") && x.location == Item.Item.ItemLocation.Worn); if (rod == null) { HubContext.Instance.SendToClient("You must be holding a rod to fish.", player.HubGuid); return; } if (rod.HasBeenCast) { HubContext.Instance.SendToClient("Your rod has already been casted.", player.HubGuid); return; } var fishingAB = player.Skills.FirstOrDefault(x => x.Name.Equals("Fishing")); if (player.ActiveSkill != null) { HubContext.Instance.SendToClient("wait till you have finished " + player.ActiveSkill.Name, player.HubGuid); return; } else { player.ActiveSkill = fishingAB; } if (player.MovePoints < 10) { HubContext.Instance.SendToClient("You are too tired to cast the rod.", player.HubGuid); player.ActiveSkill = null; return; } player.MovePoints -= 15; if (player.MovePoints < 0) { player.MovePoints = 0; } Score.UpdateUiPrompt(player); var getSkill = player.Skills.FirstOrDefault(x => x.Name.Equals("Fishing")); double getSkillProf = 0; if (getSkill != null) { getSkillProf = getSkill.Proficiency / (double)95 * 100; } var successChance = Helpers.Rand(1, 100); if (getSkillProf >= successChance) { HubContext.Instance.SendToClient("You cast your rod out, the float plops into the water.", player.HubGuid); rod.HasBeenCast = true; foreach (var character in room.players) { if (character != player) { var roomMessage = $"{Helpers.ReturnName(player, character, string.Empty)} casts their rod into the water."; HubContext.Instance.SendToClient(roomMessage, character.HubGuid); } } Task.Run(() => DoFishing(player, room)); } else { var failMessage = ""; switch (Helpers.Rand(1, 4)) { case 1: failMessage = "You hooked yourself Ouch!"; break; case 2: case 3: failMessage = "You fail to cast correctly."; break; default: failMessage = "You fail to cast correctly."; break; } HubContext.Instance.SendToClient(failMessage, player.HubGuid); if (getSkillProf < 95) { HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points", player.HubGuid); var xp = new Experience(); player.Experience += 100; xp.GainLevel(player); getSkill.Proficiency += Helpers.Rand(1, 5); } Score.ReturnScoreUI(player); player.ActiveSkill = null; } }
public static void GetFish(Player player, Room room) { var rod = player.Inventory.FirstOrDefault(x => x.name.Contains("rod") && x.location == Item.Item.ItemLocation.Worn); if (rod == null) { HubContext.Instance.SendToClient("You must be holding a rod before you can reel anything in.", player.HubGuid); return; } if (rod.HasBeenCast == false) { HubContext.Instance.SendToClient("You have to be fishing before you try reeling in.", player.HubGuid); return; } if (room.terrain != Room.Terrain.Water) { HubContext.Instance.SendToClient("You must be by water to fish.", player.HubGuid); return; } var getSkill = player.Skills.FirstOrDefault(x => x.Name.Equals("Fishing")); double getSkillProf = 0; if (getSkill != null) { getSkillProf = getSkill.Proficiency / (double)95 * 100; } var successChance = Helpers.Rand(1, 100); if (getSkillProf >= successChance) { if (rod.HasFish) { rod.HasFish = false; Score.UpdateUiPrompt(player); var caughtFish = "Perch"; switch (Helpers.Rand(1, 16)) { case 1: caughtFish = "Bream"; break; case 2: case 3: caughtFish = "Brown Trout"; break; case 4: case 5: caughtFish = "Carp"; break; case 6: case 7: case 8: case 9: case 10: caughtFish = "Chub"; break; case 11: caughtFish = "Perch"; break; case 12: caughtFish = "Snapping turtle"; break; case 13: caughtFish = "Eel"; break; case 14: caughtFish = "Frog"; break; case 15: case 16: caughtFish = "Water Snake"; break; } if (caughtFish == "Water Snake") { HubContext.Instance.SendToClient("You hooked a " + caughtFish + "!!", player.HubGuid); var snake = new Player() { Name = "Water Snake", Aggro = true, Strength = 40, Dexterity = 60, Constitution = 30, Wisdom = 30, Intelligence = 40, Charisma = 30, MobAttackType = Player.MobAttackTypes.Bite, Type = Player.PlayerTypes.Mob, HitPoints = 25, MaxHitPoints = 25, MovePoints = 50, MaxMovePoints = 50, MobAttackStats = new Stats() { damMax = 11, damMin = 4 }, Level = 2, }; room.mobs.Add(snake); Player.MobAttack(snake, player, room); } else { HubContext.Instance.SendToClient("You reel your rod in, you have caught a " + caughtFish + ".", player.HubGuid); var fish = new Item.Item() { name = caughtFish, location = Item.Item.ItemLocation.Inventory }; PlayerSetup.Player.AddItem(player, fish); Score.UpdateUiInventory(player); foreach (var character in room.players) { if (character != player) { var roomMessage = $"{Helpers.ReturnName(player, character, string.Empty)} reels their rod in, they have caught a " + caughtFish; HubContext.Instance.SendToClient(roomMessage, character.HubGuid); } } } } else { HubContext.Instance.SendToClient("You reel your rod in but nothing is on the hook.", player.HubGuid); rod.HasBeenCast = false; } } else { var failMessage = ""; switch (Helpers.Rand(1, 4)) { case 1: failMessage = "Your line breaks."; break; case 2: failMessage = "You hooked a stump."; break; case 3: failMessage = "You reel in too fast and lost the catch."; break; default: failMessage = "The line snapped and you hit yourself in the face. Ouch!"; break; } HubContext.Instance.SendToClient(failMessage, player.HubGuid); if (getSkillProf < 95) { HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points", player.HubGuid); var xp = new Experience(); player.Experience += 100; xp.GainLevel(player); getSkill.Proficiency += Helpers.Rand(1, 5); player.ActiveSkill = null; } Score.ReturnScoreUI(player); } player.ActiveSkill = null; }