public static int Damage(int dam, PlayerSetup.Player target) { if (target.Status == PlayerSetup.Player.PlayerStatus.Sleeping || target.Status == PlayerSetup.Player.PlayerStatus.Stunned) { dam *= 2; } if (target.Status == PlayerSetup.Player.PlayerStatus.Resting) { dam *= (int)1.5; } var armourReduction = Fight2.CalculateDamageReduction(target, dam); if (armourReduction > 0) { dam /= armourReduction; } if (dam <= 0) { dam = 1; } var criticalHitChance = Helpers.Rand(1, 20); if (criticalHitChance == 20) { dam *= 2; } return(dam); }
private async Task DoShockingGrasp(Player attacker, Player target, Room room) { attacker.Status = Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < ShockingGraspAb().ManaCost) { HubContext.SendToClient("You attempt to draw energy but fail", attacker.HubGuid); attacker.ActiveSkill = null; Player.SetState(attacker); return; } var die = new PlayerStats(); var dam = die.dice(5, 6); var toHit = Helpers.GetPercentage(attacker.Skills.Find(x => x.Name.Equals(ShockingGraspAb().Name, StringComparison.CurrentCultureIgnoreCase)).Proficiency, 95); // always 5% chance to miss int chance = die.dice(1, 100); Fight2.ShowAttack(attacker, target, room, toHit, chance, ShockingGraspAb(), dam); Score.ReturnScoreUI(target); Player.SetState(attacker); Fight2.PerpareToFightBack(attacker, room, target.Name, true); target = null; attacker.ActiveSkill = null; }
private async Task DoSkill(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < causeLightAb().ManaCost) { context.SendToClient("You attempt to draw energy but fail", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); if (attacker.ManaPoints < 0) { attacker.ManaPoints = 0; } return; } var chanceOfSuccess = Helpers.Rand(1, 100); var skill = attacker.Skills.FirstOrDefault(x => x.Name.Equals("Cause Light")); if (skill == null) { attacker.ActiveSkill = null; return; } var skillProf = skill.Proficiency; if (skillProf >= chanceOfSuccess) { var damage = Helpers.Rand(1, 8) / 3; var toHit = Helpers.GetPercentage(attacker.Skills.Find(x => x.Name.Equals(causeLightAb().Name, StringComparison.CurrentCultureIgnoreCase)).Proficiency, 95); // always 5% chance to miss Fight2.ShowAttack(attacker, target, room, toHit, chanceOfSuccess, causeLightAb(), false, damage); } else { attacker.ActiveSkill = null; HubContext.Instance.SendToClient("You lost your concerntration.", attacker.HubGuid); PlayerSetup.Player.LearnFromMistake(attacker, causeLightAb(), 250); Score.ReturnScoreUI(attacker); } Score.ReturnScoreUI(target); PlayerSetup.Player.SetState(attacker); Fight2.PerpareToFightBack(attacker, room, target.Name, true); attacker.ActiveSkill = null; }
public static void StartMagicMissile(Player attacker, Room room, string target = "") { //Check if player has spell var hasSpell = Skill.CheckPlayerHasSkill(attacker, MagicMissileAb().Name); if (hasSpell == false) { HubContext.SendToClient("You don't know that spell.", attacker.HubGuid); return; } var foundTarget = Skill.FindTarget(target, room); if (foundTarget != null && attacker.Target == null && target != "") { Fight2.PerpareToFight(attacker, room, foundTarget.Name, true); } if (!_taskRunnning && attacker.Target != null) { if (attacker.ManaPoints < MagicMissileAb().ManaCost) { HubContext.SendToClient("You clasp your hands together but fail to form any energy", attacker.HubGuid); var excludePlayerInBroadcast = new List <string>(); excludePlayerInBroadcast.Add(attacker.HubGuid); HubContext.SendToAllExcept(Helpers.ReturnName(attacker, null) + " clasps " + Helpers.ReturnHisOrHers(attacker.Gender) + " hands together but fails to form any energy", excludePlayerInBroadcast, room.players); return; } attacker.ManaPoints -= MagicMissileAb().ManaCost; Score.UpdateUiPrompt(attacker); HubContext.SendToClient("A red ball begins swirling between your hands as you begin chanting magic missle", attacker.HubGuid); HubContext.SendToClient("A red ball begins swirling between " + Helpers.ReturnName(attacker, null) + " hands " + Helpers.ReturnHisOrHers(attacker.Gender) + " as they begin chanting magic missle", attacker.HubGuid, attacker.Target.HubGuid, false, true); HubContext.broadcastToRoom("A red ball begins swirling between " + Helpers.ReturnName(attacker, null) + " hands " + Helpers.ReturnHisOrHers(attacker.Gender) + " as they begin chanting magic missle " + Helpers.ReturnName(attacker.Target, null), room.players, attacker.HubGuid, true); Task.Run(() => DoMagicMissile(attacker, room)); } else { if (attacker.Target == null) { HubContext.SendToClient("Cast magic missile at whom?", attacker.HubGuid); return; } HubContext.SendToClient("You are trying to cast magic missle", attacker.HubGuid); } }
//public static Dictionary<string, Action> commandList { get; set; } public static Dictionary <string, Action> Commands(string commandOptions, string commandKey, PlayerSetup.Player playerData, Room.Room room) { var commandList = new Dictionary <String, Action>(); commandList.Add("north", () => Movement.Move(playerData, room, "North")); commandList.Add("south", () => Movement.Move(playerData, room, "South")); commandList.Add("east", () => Movement.Move(playerData, room, "East")); commandList.Add("west", () => Movement.Move(playerData, room, "West")); commandList.Add("down", () => Movement.Move(playerData, room, "Down")); commandList.Add("up", () => Movement.Move(playerData, room, "Up")); //commandList.Add("look at", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "look")); commandList.Add("look", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "look")); commandList.Add("l in", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "look in")); commandList.Add("look in", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "look in")); commandList.Add("examine", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "examine")); commandList.Add("touch", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "touch")); commandList.Add("smell", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "smell")); commandList.Add("taste", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "taste")); commandList.Add("score", () => Score.ReturnScore(playerData)); commandList.Add("inventory", () => Inventory.ReturnInventory(playerData.Inventory, playerData)); commandList.Add("equipment", () => Equipment.ShowEquipment(playerData)); commandList.Add("garb", () => Equipment.ShowEquipment(playerData)); commandList.Add("get", () => ManipulateObject.GetItem(room, playerData, commandOptions, commandKey, "item")); commandList.Add("take", () => ManipulateObject.GetItem(room, playerData, commandOptions, commandKey, "item")); commandList.Add("drop", () => ManipulateObject.DropItem(room, playerData, commandOptions, commandKey)); commandList.Add("put", () => ManipulateObject.DropItem(room, playerData, commandOptions, commandKey)); commandList.Add("save", () => Save.UpdatePlayer(playerData)); commandList.Add("'", () => Communicate.Say(commandOptions, playerData, room)); commandList.Add("say", () => Communicate.Say(commandOptions, playerData, room)); commandList.Add("sayto", () => Communicate.SayTo(commandOptions, room, playerData)); commandList.Add(">", () => Communicate.SayTo(commandOptions, room, playerData)); commandList.Add("quit", () => HubContext.Quit(playerData.HubGuid, room)); commandList.Add("wear", () => Equipment.WearItem(playerData, commandOptions)); commandList.Add("remove", () => Equipment.RemoveItem(playerData, commandOptions)); commandList.Add("wield", () => Equipment.WearItem(playerData, commandOptions, true)); commandList.Add("unwield", () => Equipment.RemoveItem(playerData, commandOptions, false, true)); commandList.Add("kill", () => Fight2.PerpareToFight(playerData, room, commandOptions)); commandList.Add("flee", () => Flee.fleeCombat(playerData, room)); commandList.Add("unlock", () => ManipulateObject.UnlockItem(room, playerData, commandOptions, commandKey)); commandList.Add("lock", () => ManipulateObject.LockItem(room, playerData, commandOptions, commandKey)); commandList.Add("open", () => ManipulateObject.Open(room, playerData, commandOptions, commandKey)); commandList.Add("close", () => ManipulateObject.Close(room, playerData, commandOptions, commandKey)); commandList.Add("punch", () => Punch.StartPunch(playerData, room)); commandList.Add("help", () => Help.ShowHelp(commandOptions, playerData)); commandList.Add("time", Update.Time.ShowTime); commandList.Add("clock", Update.Time.ShowTime); return(commandList); }
public static PlayerSetup.Player FindTarget(string target, Room.Room room) { //Find target if it's specified if (target == "") { return(null); } var getTargetName = Skill.GetSkillTarget(target); if (getTargetName != string.Empty) { var foundTarget = Fight2.FindTarget(room, getTargetName); return(foundTarget); } return(null); }
private static async Task DoKick(Player attacker, Room room) { _taskRunnning = true; attacker.Status = Player.PlayerStatus.Busy; await Task.Delay(2000); //get attacker strength var die = new PlayerStats(); var dam = die.dice(1, attacker.Strength); var toHit = Helpers.GetPercentage(attacker.Skills.Find(x => x.Name.Equals("Kick", StringComparison.CurrentCultureIgnoreCase)).Proficiency, 95); // always 5% chance to miss int chance = die.dice(1, 100); Fight2.ShowAttack(attacker, attacker.Target, room, toHit, chance, KickAb(), dam); _taskRunnning = false; attacker.Status = Player.PlayerStatus.Fighting; }
private async Task DoSkill(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < DisarmAb().MovesCost) { context.SendToClient("You are too tired to disarm.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); bool alive = Fight2.IsAlive(attacker, target); if (alive) { var weapon = target.Inventory.FirstOrDefault( x => x.name == attacker.Equipment.Wielded && x.location == Item.Item.ItemLocation.Worn || x.name == attacker.Equipment.Wielded && x.location == Item.Item.ItemLocation.Wield); if (weapon == null) { HubContext.Instance.SendToClient( Helpers.ReturnName(target, attacker, null).ToLower() + " has no weapon to disarm.", attacker.HubGuid); attacker.ActiveSkill = null; return; } var skillSuccess = DisarmSuccess(attacker, target); int chanceOfDisarm = die.dice(1, 100); if (skillSuccess > chanceOfDisarm) { HubContext.Instance.SendToClient( "You disarm " + Helpers.ReturnName(target, attacker, null).ToLower() + "!", attacker.HubGuid); HubContext.Instance.SendToClient( $"{Helpers.ReturnName(attacker, target, null)} disarms you!", target.HubGuid); DoDisarm(target, room); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " disarms " + Helpers.ReturnName(target, attacker, null) + "!", target.HubGuid); } } } else { var attackerMessage = "You try to disarm " + Helpers.ReturnName(target, attacker, null) + " but fail."; var targetMessage = Helpers.ReturnName(attacker, target, null) + " tries to disarm you."; var observerMessage = Helpers.ReturnName(attacker, target, null) + " tries to disarm " + Helpers.ReturnName(target, attacker, null); HubContext.Instance.SendToClient(attackerMessage, attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage, target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } } } Score.ReturnScoreUI(attacker); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); }
private async Task DoSkill(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < FeintAb().MovesCost) { context.SendToClient("You are too tired to feint.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); bool alive = Fight2.IsAlive(attacker, target); if (alive) { var skillSuccess = FeintSuccess(attacker, target); int chanceOfFeint = die.dice(1, 100); if (skillSuccess > chanceOfFeint) { var weapon = attacker.Inventory.FirstOrDefault( x => x.name == attacker.Equipment.Wielded && x.location == Item.Item.ItemLocation.Worn || x.name == attacker.Equipment.Wielded && x.location == Item.Item.ItemLocation.Wield); int damage; if (weapon == null) { damage = Helpers.Rand(1, attacker.Level / 3 + 1); } else { damage = Helpers.Rand(1, weapon.stats.damMax * 2); } var calcDamage = Skill.Damage(damage, target); var damageText = Fight2.DamageText(calcDamage); target.HitPoints -= calcDamage; HubContext.Instance.SendToClient( "Your feint sends " + Helpers.ReturnName(target, attacker, null).ToLower() + " the wrong way. Your attack " + damageText.Value.ToLower() + " " + Helpers.ReturnName(target, attacker, null).ToLower() + " [" + calcDamage + "]" + Fight2.ShowStatus(target), attacker.HubGuid); HubContext.Instance.SendToClient("<span style=color:cyan>" + Helpers.ReturnName(target, attacker, null) + " " + Fight2.ShowMobHeath(target) + "</span>", attacker.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} feint leaves you wrong footed, their attack {damageText.Value.ToLower()} you! [{calcDamage}]</span>", target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " tricks " + Helpers.ReturnName(target, attacker, null) + " leaving them wrong footed. " + Helpers.ReturnName(attacker, target, null) + " attack " + damageText.Value.ToLower() + Helpers.ReturnName(target, attacker, null), target.HubGuid); } } Fight2.IsDead(attacker, target, room); } else { var attackerMessage = "Your feint <span style='color:olive'>fails</span> to trick " + Helpers.ReturnName(target, attacker, null); var targetMessage = Helpers.ReturnName(attacker, target, null) + "tries to feint their attack."; var observerMessage = Helpers.ReturnName(attacker, target, null) + "tries to feint their attack. But " + Helpers.ReturnName(target, attacker, null) + " see's through it."; HubContext.Instance.SendToClient(attackerMessage, attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage, target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } } } Score.ReturnScoreUI(target); PlayerSetup.Player.SetState(attacker); Fight2.PerpareToFightBack(attacker, room, target.Name, true); attacker.ActiveSkill = null; }
//public static Dictionary<string, Action> commandList { get; set; } public static Dictionary <string, Action> Commands(string commandOptions, string commandKey, PlayerSetup.Player playerData, Room.Room room) { var commandList = new Dictionary <String, Action> { { "north", () => Movement.Move(playerData, room, "North") }, { "south", () => Movement.Move(playerData, room, "South") }, { "east", () => Movement.Move(playerData, room, "East") }, { "west", () => Movement.Move(playerData, room, "West") }, { "down", () => Movement.Move(playerData, room, "Down") }, { "up", () => Movement.Move(playerData, room, "Up") }, { "look", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "look") }, { "l in", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "look in") }, { "look in", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "look in") }, { "examine", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "examine") }, { "touch", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "touch") }, { "smell", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "smell") }, { "taste", () => LoadRoom.ReturnRoom(playerData, room, commandOptions, "taste") }, { "score", () => Score.ReturnScore(playerData) }, { "inventory", () => Inventory.ReturnInventory(playerData.Inventory, playerData) }, { "equipment", () => Equipment.ShowEquipment(playerData) }, { "garb", () => Equipment.ShowEquipment(playerData) }, { "get", () => ManipulateObject.GetItem(room, playerData, commandOptions, commandKey, "item") }, { "take", () => ManipulateObject.GetItem(room, playerData, commandOptions, commandKey, "item") }, { "drop", () => ManipulateObject.DropItem(room, playerData, commandOptions, commandKey) }, { "give", () => ManipulateObject.GiveItem(room, playerData, commandOptions, commandKey, "killable") }, { "put", () => ManipulateObject.DropItem(room, playerData, commandOptions, commandKey) }, { "save", () => Save.UpdatePlayer(playerData) }, { "'", () => Communicate.Say(commandOptions, playerData, room) }, { "newbie", () => Communicate.NewbieChannel(commandOptions, playerData) }, { "gossip", () => Communicate.GossipChannel(commandOptions, playerData) }, { "ooc", () => Communicate.OocChannel(commandOptions, playerData) }, { "say", () => Communicate.Say(commandOptions, playerData, room) }, { "sayto", () => Communicate.SayTo(commandOptions, room, playerData) }, { ">", () => Communicate.SayTo(commandOptions, room, playerData) }, { "talkto", () => Talk.TalkTo(commandOptions, room, playerData) }, { "emote", () => Emote.EmoteActionToRoom(commandOptions, playerData) }, { "quit", () => HubContext.Quit(playerData.HubGuid, room) }, { "wear", () => Equipment.WearItem(playerData, commandOptions) }, { "remove", () => Equipment.RemoveItem(playerData, commandOptions) }, { "doff", () => Equipment.RemoveItem(playerData, commandOptions) }, { "wield", () => Equipment.WearItem(playerData, commandOptions, true) }, { "unwield", () => Equipment.RemoveItem(playerData, commandOptions, false, true) }, { "kill", () => Fight2.PerpareToFight(playerData, room, commandOptions) }, { "flee", () => Flee.fleeCombat(playerData, room) }, //spells { "c magic missile", () => MagicMissile.StartMagicMissile(playerData, room, commandOptions) }, { "cast magic missile", () => MagicMissile.StartMagicMissile(playerData, room, commandOptions) }, { "c armour", () => Armour.StartArmour(playerData, room, commandOptions) }, { "cast armour", () => Armour.StartArmour(playerData, room, commandOptions) }, { "c armor", () => Armour.StartArmour(playerData, room, commandOptions) }, { "cast armor", () => Armour.StartArmour(playerData, room, commandOptions) }, { "c continual light", () => ContinualLight.StarContinualLight(playerData, room, commandOptions) }, { "cast continual light", () => ContinualLight.StarContinualLight(playerData, room, commandOptions) }, { "c invis", () => Invis.StartInvis(playerData, room, commandOptions) }, { "cast invis", () => Invis.StartInvis(playerData, room, commandOptions) }, { "c weaken", () => Weaken.StartWeaken(playerData, room, commandOptions) }, { "cast weaken", () => Weaken.StartWeaken(playerData, room, commandOptions) }, { "c chill touch", () => ChillTouch.StartChillTouch(playerData, room, commandOptions) }, { "cast chill touch", () => ChillTouch.StartChillTouch(playerData, room, commandOptions) }, { "c fly", () => Fly.StartFly(playerData, room, commandOptions) }, { "cast fly", () => Fly.StartFly(playerData, room, commandOptions) }, { "c refresh", () => Refresh.StartRefresh(playerData, room, commandOptions) }, { "cast refresh", () => Refresh.StartRefresh(playerData, room, commandOptions) }, { "c faerie fire", () => FaerieFire.StartFaerieFire(playerData, room, commandOptions) }, { "cast faerie fire", () => FaerieFire.StartFaerieFire(playerData, room, commandOptions) }, { "c teleport", () => Teleport.StartTeleport(playerData, room) }, { "cast teleport", () => Teleport.StartTeleport(playerData, room) }, { "c blindness", () => Blindness.StartBlind(playerData, room, commandOptions) }, { "cast blindess", () => Blindness.StartBlind(playerData, room, commandOptions) }, { "c haste", () => Haste.StartHaste(playerData, room, commandOptions) }, { "cast haste", () => Haste.StartHaste(playerData, room, commandOptions) }, { "c create spring", () => CreateSpring.StartCreateSpring(playerData, room) }, { "cast create spring", () => CreateSpring.StartCreateSpring(playerData, room) }, //skills { "punch", () => Punch.StartPunch(playerData, room) }, { "kick", () => Kick.StartKick(playerData, room) }, // { "unlock", () => ManipulateObject.UnlockItem(room, playerData, commandOptions, commandKey) }, { "lock", () => ManipulateObject.LockItem(room, playerData, commandOptions, commandKey) }, { "open", () => ManipulateObject.Open(room, playerData, commandOptions, commandKey) }, { "close", () => ManipulateObject.Close(room, playerData, commandOptions, commandKey) }, { "drink", () => ManipulateObject.Drink(room, playerData, commandOptions, commandKey) }, { "help", () => Help.ShowHelp(commandOptions, playerData) }, { "time", Update.Time.ShowTime }, { "clock", Update.Time.ShowTime }, { "skills", () => ShowSkills.ShowPlayerSkills(playerData, commandOptions) }, { "skills all", () => ShowSkills.ShowPlayerSkills(playerData, commandOptions) }, { "practice", () => Trainer.Practice(playerData, room, commandOptions) }, { "list", () => Shop.listItems(playerData, room) }, { "buy", () => Shop.buyItems(playerData, room, commandOptions) }, { "quest log", () => Quest.QuestLog(playerData) }, { "qlog", () => Quest.QuestLog(playerData) }, { "wake", () => Status.WakePlayer(playerData, room) }, { "sleep", () => Status.SleepPlayer(playerData, room) }, { "greet", () => Greet.GreetMob(playerData, room, commandOptions) }, { "who", () => Who.Connected(playerData) }, { "affects", () => Affect.Show(playerData) }, { "follow", () => Follow.FollowThing(playerData, room, commandOptions) } }; return(commandList); }
private async Task DoSkill(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < DirtKickAb().MovesCost) { context.SendToClient("You are too tired to use dirt kick.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } if (Effect.HasEffect(target, Effect.Blindness(attacker).Name)) { context.SendToClient("They are already blinded.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); bool alive = Fight2.IsAlive(attacker, target); if (alive) { var skillSuccess = DirtKickSuccess(attacker, target); int chanceOfDirtKick = die.dice(1, 100); if (skillSuccess > chanceOfDirtKick) { HubContext.Instance.SendToClient( "<span style='color:cyan'>You kick dirt into the eyes of " + Helpers.ReturnName(target, attacker, null).ToLower() + ".</span>", attacker.HubGuid); HubContext.Instance.SendToClient( $"Your dirt kick blinds {Helpers.ReturnName(target, attacker, null).ToLower()}.", attacker.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} kicks dirt in your eyes!</span>", target.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>You can't see a thing!</span>", target.HubGuid); var blindEffect = Effect.Blindness(attacker); if (!Effect.HasEffect(target, blindEffect.Name)) { target.Effects.Add(blindEffect); } foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " kicks dirt into the eyes of " + Helpers.ReturnName(target, attacker, null) + ".", target.HubGuid); } } } else { var attackerMessage = "Your dirt kick <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); var targetMessage = Helpers.ReturnName(attacker, target, null) + "'s dirt kick <span style='color:olive'>misses</span> you "; var observerMessage = Helpers.ReturnName(attacker, target, null) + "'s dirt kick <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); HubContext.Instance.SendToClient(attackerMessage, attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage, target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } } } Score.ReturnScoreUI(target); PlayerSetup.Player.SetState(attacker); Fight2.PerpareToFightBack(attacker, room, target.Name, true); attacker.ActiveSkill = null; }
private async Task DoSkill(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < LungeAb().MovesCost) { context.SendToClient("You are too tired to kick.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); bool alive = Fight2.IsAlive(attacker, target); if (alive) { var skillSuccess = LungeSuccess(attacker, target); int chanceOfKick = die.dice(1, 100); if (skillSuccess > chanceOfKick) { var weapon = attacker.Inventory.FirstOrDefault( x => x.name == attacker.Equipment.Wielded && x.location == Item.Item.ItemLocation.Worn || x.name == attacker.Equipment.Wielded && x.location == Item.Item.ItemLocation.Wield); if (weapon == null) { HubContext.Instance.SendToClient("You need a weapon to lunge", attacker.HubGuid); attacker.ActiveSkill = null; attacker.Status = Player.PlayerStatus.Standing; return; } var damage = Helpers.Rand(weapon.stats.damMax / 2, weapon.stats.damMax + weapon.stats.damRoll * 2); var calcDamage = Skill.Damage(damage, target); var damageText = Fight2.DamageText(calcDamage); target.HitPoints -= calcDamage; HubContext.Instance.SendToClient( "Your lunge" + " " + damageText.Value.ToLower() + " " + Helpers.ReturnName(target, attacker, null).ToLower() + " [" + calcDamage + "]" + Fight2.ShowStatus(target), attacker.HubGuid); HubContext.Instance.SendToClient("<span style=color:cyan>" + Helpers.ReturnName(target, attacker, null) + " " + Fight2.ShowMobHeath(target) + "</span>", attacker.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} lunge {damageText.Value.ToLower()} you! [{calcDamage}]</span>", target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " lunge " + damageText.Value.ToLower() + " " + Helpers.ReturnName(target, attacker, null) + ".", target.HubGuid); } } Fight2.IsDead(attacker, target, room); Fight2.PerpareToFightBack(attacker, room, target.Name, true); } else { var attackerMessage = "Your lunge <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); var targetMessage = Helpers.ReturnName(attacker, target, null) + "'s lunge <span style='color:olive'>misses</span> you "; var observerMessage = Helpers.ReturnName(attacker, target, null) + "'s lunge <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); HubContext.Instance.SendToClient(attackerMessage, attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage, target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } Fight2.PerpareToFightBack(attacker, room, target.Name, true); } } Score.ReturnScoreUI(target); PlayerSetup.Player.SetState(attacker); attacker.ActiveSkill = null; }
private static async Task DoMagicMissile(Player attacker, Room room) { _taskRunnning = true; attacker.Status = Player.PlayerStatus.Busy; await Task.Delay(1000); //get attacker strength var die = new PlayerStats(); var ballCount = 1; if (attacker.Level == 1) { ballCount = 1; } else if (attacker.Level <= 5) { ballCount = 2; } else if (attacker.Level <= 10) { ballCount = 3; } else if (attacker.Level <= 15) { ballCount = 4; } else if (attacker.Level >= 20) { ballCount = 5; } var castingTextAttacker = ballCount == 1 ? "A red crackling energy ball hurls from your hands straight at " + Helpers.ReturnName(attacker.Target, null) : ballCount + " red crackling energy balls hurl from your hands in a wide arc closing in on " + Helpers.ReturnName(attacker.Target, null); var castingTextDefender = ballCount == 1 ? Helpers.ReturnName(attacker, null) + " hurls a red crackling energy ball straight towards you." : Helpers.ReturnName(attacker, null) + " launches " + ballCount + " red crackling energy balls from " + Helpers.ReturnHisOrHers(attacker.Gender) + " hands in a wide arc closing in on you"; var castingTextRoom = ballCount == 1 ? Helpers.ReturnName(attacker, null) + " hurls a red crackling energy ball straight towards " + Helpers.ReturnName(attacker.Target, null) + "." : Helpers.ReturnName(attacker, null) + " launches " + ballCount + " red crackling energy balls from " + Helpers.ReturnHisOrHers(attacker.Gender) + " hands in a wide arc closing in on" + Helpers.ReturnName(attacker.Target, null); //level dependant but for testing launch 4 balls HubContext.SendToClient(castingTextAttacker, attacker.HubGuid); HubContext.SendToClient(castingTextDefender, attacker.Target.HubGuid); HubContext.SendToAllExcept(castingTextRoom, room.fighting, room.players); for (int i = 0; i < ballCount; i++) { var dam = die.dice(1, 4); var toHit = Helpers.GetPercentage(attacker.Skills.Find(x => x.Name.Equals(MagicMissileAb().Name, StringComparison.CurrentCultureIgnoreCase)).Proficiency, 95); // always 5% chance to miss int chance = die.dice(1, 100); Fight2.ShowAttack(attacker, attacker.Target, room, toHit, chance, MagicMissileAb(), dam); } _taskRunnning = false; attacker.Status = Player.PlayerStatus.Fighting; }
private async Task DoRescue(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; if (attacker.ManaPoints < RescueAb().MovesCost) { context.SendToClient("You are too tired to use Rescue.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); var ToRescue = Helpers.GetPercentage( attacker.Skills.Find(x => x.Name.Equals(RescueAb().Name, StringComparison.CurrentCultureIgnoreCase)) .Proficiency, 95); int chance = die.dice(1, 100); bool alive = Fight2.IsAlive(attacker, target); if (alive) { if (ToRescue > chance) { if (Fight2.IsAlive(attacker, target)) { HubContext.Instance.SendToClient( "You <span style='color:cyan'> rescue " + Helpers.ReturnName(target, attacker, null).ToLower() + "</span>!", attacker.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} rescues you!</span>", target.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} rescues {Helpers.ReturnName(target, attacker, null).ToLower()}!</span>", target.Target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " rescues " + Helpers.ReturnName(target, attacker, null) + "!", target.HubGuid); } } var saveFromWhom = target.Target.Name; target.Target.Target = null; target.Target.ActiveFighting = false; target.Target.Target = null; target.Target = null; target.Status = Player.PlayerStatus.Standing; target.ActiveFighting = false; ; Command.ParseCommand($"kill {saveFromWhom}", attacker, room); } } else { if (Fight2.IsAlive(attacker, target)) { var attackerMessage = "You fail to rescue " + Helpers.ReturnName(target, attacker, null); var targetMessage = Helpers.ReturnName(attacker, target, null) + " fails to rescue you."; var observerMessage = Helpers.ReturnName(attacker, target, null) + " fails to rescue " + Helpers.ReturnName(target, attacker, null); HubContext.Instance.SendToClient(attackerMessage + " <br><br> ", attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage + " <br><br> ", target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } } } Score.ReturnScoreUI(target); attacker.ActiveSkill = null; } }
public static void DoSteal(IHubContext context, PlayerSetup.Player player, Room.Room room, string stealItemFrom) { //Check if player has spell var hasSkill = Skill.CheckPlayerHasSkill(player, StealAb().Name); if (hasSkill == false) { context.SendToClient("You don't know that skill.", player.HubGuid); return; } var canDoSkill = Skill.CanDoSkill(player); if (!canDoSkill) { return; } string[] splitString = stealItemFrom.Split(' '); string target; string item; if (splitString.Length > 1) { target = splitString[0].Trim(); item = splitString[1].Trim(); } else { context.SendToClient("What do you want to steal?", player.HubGuid); return; } var _target = Skill.FindTarget(target, room); //Fix issue if target has similar name to user and they use abbrivations to target them if (_target == player) { _target = null; } if (_target != null) { if (_target.HitPoints <= 0) { context.SendToClient("You can't steal from them as they are dead.", player.HubGuid); return; } var chanceOfSuccess = Helpers.Rand(_target.Wisdom, 100); var skill = player.Skills.FirstOrDefault(x => x.Name.Equals("Steal")); if (skill == null) { return; } var skillProf = skill.Proficiency; if (skillProf >= chanceOfSuccess) { HubContext.Instance.SendToClient($"You swipe {Helpers.ReturnName(null, null, item).ToLower()} from {Helpers.ReturnName(_target,player,string.Empty)}.", player.HubGuid); if (_target.Inventory.Count == 0) { HubContext.Instance.SendToClient($"You see nothing of value carried by {Helpers.ReturnName(_target, player, string.Empty)}.", player.HubGuid); return; } var getItem = _target.Inventory.FirstOrDefault(x => x.name.ToLower().Contains(item.ToLower())); if (getItem != null) { player.Inventory.Add(getItem); _target.Inventory.Remove(getItem); Score.ReturnScoreUI(player); Score.ReturnScoreUI(_target); } } else { HubContext.Instance.SendToClient($"You fail to steal from {Helpers.ReturnName(_target, player, string.Empty)}.", player.HubGuid); HubContext.Instance.SendToClient($"{Helpers.ReturnName(player, _target, string.Empty)} tries to steal something from you.", _target.HubGuid); PlayerSetup.Player.LearnFromMistake(player, StealAb(), 250); Fight2.PerpareToFightBack(_target, room, player.Name); Score.ReturnScoreUI(player); } } else { context.SendToClient($"You can't find anything known as '{target}' here.", player.HubGuid); player.ActiveSkill = null; } }
private async Task DoTrip(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room.Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < TripAb().MovesCost) { context.SendToClient("You are too tired to use trip.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); var dam = die.dice(1, 6); var ToTrip = Helpers.GetPercentage(attacker.Skills.Find(x => x.Name.Equals(TripAb().Name, StringComparison.CurrentCultureIgnoreCase)).Proficiency, 95); int chance = die.dice(1, 100); bool alive = Fight2.IsAlive(attacker, target); var tripSuccess = TripSuccess(attacker, target); if (alive) { if (ToTrip > chance && tripSuccess) { var damage = dam > 0 ? dam : Fight2.Damage(attacker, target, 1); var damageText = Fight2.DamageText(damage); if (Fight2.IsAlive(attacker, target)) { HubContext.Instance.SendToClient( "<span style='color:cyan'>You trip " + Helpers.ReturnName(target, attacker, null).ToLower() + " to the ground, leaving them slightly dazed.</span>", attacker.HubGuid); HubContext.Instance.SendToClient( $"Your trip {damageText.Value.ToLower()} {Helpers.ReturnName(target, attacker, null).ToLower()} [{dam}]", attacker.HubGuid); HubContext.Instance.SendToClient( Helpers.ReturnName(target, attacker, null) + " " + Fight2.ShowMobHeath(target) + "<br><br>", attacker.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} sends you to the ground with a well timed trip, leaving you feeling dazed.</span>", target.HubGuid); HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + "'s trip " + damageText.Value.ToLower() + " you [" + dam + "]", target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " sends " + Helpers.ReturnName(target, attacker, null) + " to the ground with a well timed trip, leaving them looking dazed.", target.HubGuid); HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + "'s trip " + damageText.Value.ToLower() + " " + Helpers.ReturnName(target, attacker, null), player.HubGuid); } } target.StunDuration = 4000; target.Status = PlayerSetup.Player.PlayerStatus.Stunned; target.HitPoints -= damage; if (target.HitPoints < 0) { target.HitPoints = 0; } if (!Fight2.IsAlive(attacker, target)) { Fight2.IsDead(attacker, target, room); } } } else { if (Fight2.IsAlive(attacker, target)) { //Randomly pick to output dodge, parry, miss var rand = Helpers.Rand(1, 4); string attackerMessage, targetMessage, observerMessage; if (rand <= 1) { attackerMessage = "Your trip <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); targetMessage = Helpers.ReturnName(attacker, target, null) + "'s trip <span style='color:olive'>misses</span> you "; observerMessage = Helpers.ReturnName(attacker, target, null) + "'s <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); } else if (rand > 1 && rand <= 2) { attackerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>dodges</span> your trip."; targetMessage = "You <span style='color:olive'>dodge</span> " + Helpers.ReturnName(attacker, target, null) + "'s trip"; observerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>dodges</span> " + Helpers.ReturnName(attacker, target, null) + "'s trip."; } else { attackerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>parries</span> your trip"; targetMessage = "You <span style='color:olive'>parry</span> " + Helpers.ReturnName(attacker, target, null) + "'s trip"; observerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>parries</span> " + Helpers.ReturnName(attacker, target, null) + "'s trip"; } HubContext.Instance.SendToClient(attackerMessage + " <br><br> ", attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage + " <br><br> ", target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } } } } //trip / stun player Score.ReturnScoreUI(target); PlayerSetup.Player.SetState(attacker); Fight2.PerpareToFightBack(attacker, room, target.Name, true); attacker.ActiveSkill = null; }
private async Task DoSkill(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < KickAb().MovesCost) { context.SendToClient("You are too tired to spin kick.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); bool alive = Fight2.IsAlive(attacker, target); if (alive) { var skillSuccess = KickSuccess(attacker, target); int chanceOfKick = die.dice(1, 100); if (skillSuccess > chanceOfKick) { var damage = Helpers.Rand(1, attacker.Level + attacker.Level / 2); var calcDamage = Skill.Damage(damage, target); var damageText = Fight2.DamageText(calcDamage); target.HitPoints -= calcDamage; HubContext.Instance.SendToClient( "Your spin kick" + " " + damageText.Value.ToLower() + " " + Helpers.ReturnName(target, attacker, null).ToLower() + " [" + calcDamage + "]" + Fight2.ShowStatus(target), attacker.HubGuid); HubContext.Instance.SendToClient("<span style=color:cyan>" + Helpers.ReturnName(target, attacker, null) + " " + Fight2.ShowMobHeath(target) + "</span>", attacker.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} spin kick {damageText.Value.ToLower()} you! [{calcDamage}]</span>", target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " spin kick " + damageText.Value.ToLower() + " " + Helpers.ReturnName(target, attacker, null) + ".", target.HubGuid); } } Fight2.IsDead(attacker, target, room); } else { var attackerMessage = "Your spin kick <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); var targetMessage = Helpers.ReturnName(attacker, target, null) + "'s spin kick <span style='color:olive'>misses</span> you "; var observerMessage = Helpers.ReturnName(attacker, target, null) + "'s spin kick <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); HubContext.Instance.SendToClient(attackerMessage, attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage, target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } } } Score.ReturnScoreUI(target); PlayerSetup.Player.SetState(attacker); Fight2.PerpareToFightBack(attacker, room, target.Name, true); attacker.ActiveSkill = null; }
private async Task DoBash(IHubContext context, PlayerSetup.Player attacker, PlayerSetup.Player target, Room room) { attacker.Status = PlayerSetup.Player.PlayerStatus.Busy; await Task.Delay(500); if (attacker.ManaPoints < ShieldBashAb().MovesCost) { context.SendToClient("You are too tired to use Shield bash.", attacker.HubGuid); attacker.ActiveSkill = null; PlayerSetup.Player.SetState(attacker); return; } var die = new PlayerStats(); var dam = die.dice(1, 6); var ToBash = Helpers.GetPercentage(attacker.Skills.Find(x => x.Name.Equals(ShieldBashAb().Name, StringComparison.CurrentCultureIgnoreCase)).Proficiency, 95); int chance = die.dice(1, 100); bool alive = Fight2.IsAlive(attacker, target); var bashChance = BashSuccess(attacker, target); var bashStunRand = Helpers.Rand(1, 100); var isBashSuccess = bashChance >= bashStunRand ? true : false; if (alive) { if (ToBash > chance && isBashSuccess) { var damage = Helpers.Rand(2, 4 * (int)attacker.SizeCategory + bashChance / 12); var damageText = Fight2.DamageText(damage); if (Fight2.IsAlive(attacker, target)) { HubContext.Instance.SendToClient( "<span style='color:cyan'>You slam into " + Helpers.ReturnName(target, attacker, null).ToLower() + ", and send " + Helpers.ReturnName(target, attacker, null).ToLower() + " flying!</span>", attacker.HubGuid); HubContext.Instance.SendToClient( $"Your shield bash {damageText.Value.ToLower()} {Helpers.ReturnName(target, attacker, null).ToLower()} [{dam}]", attacker.HubGuid); HubContext.Instance.SendToClient( Helpers.ReturnName(target, attacker, null) + " " + Fight2.ShowMobHeath(target), attacker.HubGuid); HubContext.Instance.SendToClient( $"<span style='color:cyan'>{Helpers.ReturnName(attacker, target, null)} sends you sprawling with a powerful shield bash!</span>", target.HubGuid); HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + "'s shield bash " + damageText.Value.ToLower() + " you [" + dam + "]", target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + " sends " + Helpers.ReturnName(target, attacker, null) + " sprawling with a powerful shield bash.", target.HubGuid); HubContext.Instance.SendToClient( Helpers.ReturnName(attacker, target, null) + "'s shield bash " + damageText.Value.ToLower() + " " + Helpers.ReturnName(target, attacker, null), player.HubGuid); } } target.StunDuration = 10000; target.Status = PlayerSetup.Player.PlayerStatus.Stunned; target.HitPoints -= damage; if (target.HitPoints < 0) { target.HitPoints = 0; } if (!Fight2.IsAlive(attacker, target)) { Fight2.IsDead(attacker, target, room); } } } else { if (Fight2.IsAlive(attacker, target)) { //Randomly pick to output dodge, parry, miss var rand = Helpers.Rand(1, 4); string attackerMessage, targetMessage, observerMessage; if (rand <= 1) { attackerMessage = "Your shield bash <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); targetMessage = Helpers.ReturnName(attacker, target, null) + "'s shield bash <span style='color:olive'>misses</span> you "; observerMessage = Helpers.ReturnName(attacker, target, null) + "'s <span style='color:olive'>misses</span> " + Helpers.ReturnName(target, attacker, null); } else if (rand > 1 && rand <= 2) { attackerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>dodges</span> your shield bash."; targetMessage = "You <span style='color:olive'>dodge</span> " + Helpers.ReturnName(attacker, target, null) + "'s shield bash"; observerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>dodges</span> " + Helpers.ReturnName(attacker, target, null) + "'s shield bash."; } else { attackerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>parries</span> your shield bash"; targetMessage = "You <span style='color:olive'>parry</span> " + Helpers.ReturnName(attacker, target, null) + "'s shield bash"; observerMessage = Helpers.ReturnName(target, attacker, null) + " <span style='color:olive'>parries</span> " + Helpers.ReturnName(attacker, target, null) + "'s shield bash"; } HubContext.Instance.SendToClient(attackerMessage, attacker.HubGuid); HubContext.Instance.SendToClient(targetMessage, target.HubGuid); foreach (var player in room.players) { if (player != attacker && player != target) { HubContext.Instance.SendToClient( observerMessage, player.HubGuid); } } } } } //Bash / stun player Score.ReturnScoreUI(target); PlayerSetup.Player.SetState(attacker); Fight2.PerpareToFightBack(attacker, room, target.Name, true); attacker.ActiveSkill = null; }
public static void StartMagicMissile(Player attacker, Room room, string target = "") { //Check if player has spell var hasSpell = Skill.CheckPlayerHasSkill(attacker, MagicMissileAb().Name); if (hasSpell == false) { HubContext.SendToClient("You don't know that spell.", attacker.HubGuid); return; } var canDoSkill = Skill.CanDoSkill(attacker); if (!canDoSkill) { return; } attacker.Status = Player.PlayerStatus.Busy; var foundTarget = Skill.FindTarget(target, room); if (foundTarget != null && attacker.Target == null && target != "") { Fight2.PerpareToFight(attacker, room, foundTarget.Name, true); } if (!_taskRunnning && attacker.Target != null) { if (attacker.ManaPoints < MagicMissileAb().ManaCost) { HubContext.SendToClient("You clasp your hands together but fail to form any energy", attacker.HubGuid); foreach (var character in room.players) { if (character != attacker) { HubContext.SendToClient($"{Helpers.ReturnName(attacker, attacker.Target, null)} clasps {Helpers.ReturnHisOrHers(attacker, attacker.Target)} hands together but fails to form any energy", attacker.HubGuid); } } Player.SetState(attacker); return; } attacker.ManaPoints -= MagicMissileAb().ManaCost; Score.UpdateUiPrompt(attacker); HubContext.SendToClient("A red ball begins swirling between your hands as you begin chanting magic missile", attacker.HubGuid); HubContext.SendToClient($"A red ball begins swirling between {Helpers.ReturnName(attacker, attacker.Target, null)} 's hands as they begin chanting magic missile", attacker.HubGuid, attacker.Target.HubGuid, false, true); HubContext.broadcastToRoom($"A red ball begins swirling between {Helpers.ReturnName(attacker, attacker.Target, null)} 's hands as they begin chanting magic missile", room.players, attacker.HubGuid, true); Task.Run(() => DoMagicMissile(attacker, room)); } else { Player.SetState(attacker); if (attacker.Target == null) { HubContext.SendToClient("Cast magic missile at whom?", attacker.HubGuid); return; } HubContext.SendToClient("You are trying to cast magic missile", attacker.HubGuid); } }
/// <summary> /// Command list for the game /// </summary> /// <param name="commandOptions">Everything after the 1st occurance of a space</param> /// <param name="commandKey">The string before the 1st occurance of a space</param> /// <param name="playerData">Player Data</param> /// <param name="room">Current room</param> /// <returns>Returns Dictionary of commands</returns> public static void Commands(string commandOptions, string commandKey, PlayerSetup.Player playerData, Room.Room room) { var context = HubContext.Instance; switch (commandKey) { case "north": Movement.Move(playerData, room, "North"); break; case "east": Movement.Move(playerData, room, "East"); break; case "south": Movement.Move(playerData, room, "South"); break; case "west": Movement.Move(playerData, room, "West"); break; case "up": Movement.Move(playerData, room, "Up"); break; case "down": Movement.Move(playerData, room, "Down"); break; case "look": case "look at": case "l at": case "search": LoadRoom.ReturnRoom(playerData, room, commandOptions, "look"); break; case "l in": case "search in": LoadRoom.ReturnRoom(playerData, room, commandOptions, "look in"); break; case "examine": LoadRoom.ReturnRoom(playerData, room, commandOptions, "examine"); break; case "touch": LoadRoom.ReturnRoom(playerData, room, commandOptions, "touch"); break; case "smell": LoadRoom.ReturnRoom(playerData, room, commandOptions, "smell"); break; case "taste": LoadRoom.ReturnRoom(playerData, room, commandOptions, "taste"); break; case "score": Score.ReturnScore(playerData); break; case "inventory": Inventory.ReturnInventory(playerData.Inventory, playerData); break; case "eq": case "equip": case "equipment": case "garb": Equipment.ShowEquipment(playerData); break; case "loot": case "get": case "take": ManipulateObject.GetItem(room, playerData, commandOptions, commandKey, "item"); break; case "plunder": ManipulateObject.GetItem(room, playerData, "all " + commandOptions, commandKey, "item"); break; case "drop": case "put": ManipulateObject.DropItem(room, playerData, commandOptions, commandKey); break; case "give": ManipulateObject.GiveItem(room, playerData, commandOptions, commandKey, "killable"); break; case "save": Save.SavePlayer(playerData); break; case "say": case "'": Communicate.Say(commandOptions, playerData, room); break; case "sayto": case ">": Communicate.SayTo(commandOptions, room, playerData); break; case "newbie": Communicate.NewbieChannel(commandOptions, playerData); break; case "gossip": Communicate.GossipChannel(commandOptions, playerData); break; case "ooc": Communicate.OocChannel(commandOptions, playerData); break; case "yes": Communicate.Say("Yes", playerData, room); break; case "no": Communicate.Say("No", playerData, room); break; case "yell": Communicate.Yell(commandOptions, room, playerData); break; case "talkto": Talk.TalkTo(commandOptions, room, playerData); break; case "emote": Emote.EmoteActionToRoom(commandOptions, playerData); break; case "use": case "wear": case "wield": Equipment.WearItem(playerData, commandOptions); break; case "remove": case "doff": case "unwield": Equipment.RemoveItem(playerData, commandOptions); break; case "hit": case "kill": case "attack": Fight2.PerpareToFight(playerData, room, commandOptions); break; case "flee": Flee.fleeCombat(playerData, room); break; case "sacrifice": case "harvest": Harvest.Body(playerData, room, commandOptions); break; case "peek": Peak.DoPeak(context, playerData, room, commandOptions); break; case "steal": Steal.DoSteal(context, playerData, room, commandOptions); break; case "pick": LockPick.DoLockPick(context, playerData, room, commandOptions); break; case "c magic missile": case "cast magic missile": MagicMissile.StartMagicMissile(playerData, room, commandOptions); break; case "c armour": case "cast armour": case "c armor": case "cast armor": new Armour().StartArmour(playerData, room, commandOptions); break; case "c continual light": case "cast continual light": ContinualLight.StarContinualLight(playerData, room, commandOptions); break; case "c invis": case "cast invis": Invis.StartInvis(playerData, room, commandOptions); break; case "c weaken": case "cast weaken": Weaken.StartWeaken(playerData, room, commandOptions); break; case "c chill touch": case "cast chill touch": ChillTouch.StartChillTouch(playerData, room, commandOptions); break; case "c fly": case "cast fly": Fly.StartFly(playerData, room, commandOptions); break; case "c refresh": case "cast refresh": Refresh.StartRefresh(playerData, room, commandOptions); break; case "c faerie fire": case "cast faerie fire": FaerieFire.StartFaerieFire(playerData, room, commandOptions); break; case "c teleport": case "cast teleport": Teleport.StartTeleport(playerData, room); break; case "c blindness": case "cast blindness": Blindness.StartBlind(playerData, room, commandOptions); break; case "c haste": case "cast haste": Haste.StartHaste(playerData, room, commandOptions); break; case "c create spring": case "cast create spring": CreateSpring.StartCreateSpring(playerData, room); break; case "c shocking grasp": case "cast shocking grasp": new ShockingGrasp().StartShockingGrasp(playerData, room, commandOptions); break; case "c cause light": case "cast cause light": new CauseLight().StartCauseLight(context, playerData, room, commandOptions); break; case "c cure light": case "cast cure light": new CureLight().StartCureLight(context, playerData, room, commandOptions); break; case "c cure blindness": new CureBlindness().StartCureBlindness(context, playerData, room, commandOptions); break; case "c detect invis": case "cast detect invis": DetectInvis.DoDetectInvis(context, playerData, room); break; case "forage": new Foraging().StartForaging(playerData, room); break; case "fish": case "angle": case "line": case "trawl": case "lure": new Fishing().StartFishing(playerData, room); break; case "reel": Fishing.GetFish(playerData, room); break; case "dirt kick": new DirtKick().StartDirtKick(context, playerData, room, commandOptions); break; case "bash": new Bash().StartBash(context, playerData, room, commandOptions); break; case "shield bash": new ShieldBash().StartBash(context, playerData, room, commandOptions); break; case "punch": Punch.StartPunch(playerData, room); break; case "kick": new Kick().StartKick(context, playerData, room, commandOptions); break; case "spin kick": new SpinKick().StartKick(context, playerData, room, commandOptions); break; case "rescue": new Rescue().StartRescue(context, playerData, room, commandOptions); break; case "lunge": new Lunge().StartLunge(context, playerData, room, commandOptions); break; case "disarm": new Disarm().StartDisarm(context, playerData, room); break; case "backstab": new Backstab().StartBackstab(context, playerData, room, commandOptions); break; case "feint": new Feint().StartFeint(context, playerData, room, commandOptions); break; case "mount": case "ride": Mount.StartMount(playerData, room, commandOptions); break; case "dismount": Mount.Dismount(playerData, room, commandOptions); break; case "trip": new Trip().StartTrip(context, playerData, room, commandOptions); break; case "sneak": Sneak.DoSneak(context, playerData); break; case "hide": Hide.DoHide(context, playerData); break; case "lore": Lore.DoLore(context, playerData, commandOptions); break; case "unlock": ManipulateObject.UnlockItem(room, playerData, commandOptions, commandKey); break; case "lock": ManipulateObject.LockItem(room, playerData, commandOptions, commandKey); break; case "close": case "shut": ManipulateObject.Close(room, playerData, commandOptions, commandKey); break; case "drink": ManipulateObject.Drink(room, playerData, commandOptions, commandKey); break; case "help": case "/help": case "?": case "commands": Help.ShowHelp(commandOptions, playerData); break; case "time": case "clock": Update.Time.ShowTime(); break; case "skills": case "spells": case "skills all": ShowSkills.ShowPlayerSkills(playerData, commandOptions); break; case "practice": Trainer.Practice(playerData, room, commandOptions); break; case "list": Shop.listItems(playerData, room); break; case "buy": Shop.buyItems(playerData, room, commandOptions); break; case "sell": Shop.sellItems(playerData, room, commandOptions); break; case "quest log": case "qlog": Quest.QuestLog(playerData); break; case "wake": Status.WakePlayer(context, playerData, room); break; case "sleep": Status.SleepPlayer(context, playerData, room); break; case "rest": case "sit": Status.RestPlayer(context, playerData, room); break; case "stand": Status.StandPlayer(context, playerData, room); break; case "greet": Greet.GreetMob(playerData, room, commandOptions); break; case "who": Who.Connected(playerData); break; case "affects": Effect.Show(playerData); break; case "follow": Follow.FollowThing(playerData, room, commandOptions); break; case "nofollow": Follow.FollowThing(playerData, room, "noFollow"); break; case "quit": HubContext.Instance.Quit(playerData.HubGuid, room); break; case "craft": Craft.CraftItem(playerData, room, commandOptions, CraftType.Craft); break; case "chop": Craft.CraftItem(playerData, room, commandOptions, CraftType.Chop); break; case "cook": Craft.CraftItem(playerData, room, commandOptions, CraftType.Cook); break; case "brew": Craft.CraftItem(playerData, room, commandOptions, CraftType.Brew); break; case "forge": Craft.CraftItem(playerData, room, commandOptions, CraftType.Forge); break; case "carve": Craft.CraftItem(playerData, room, commandOptions, CraftType.Carve); break; case "knit": Craft.CraftItem(playerData, room, commandOptions, CraftType.Knitting); break; case "make": case "build": Craft.CraftItem(playerData, room, commandOptions, CraftType.Craft); break; case "show crafts": case "craftlist": Craft.CraftList(playerData); break; case "set up camp": Camp.SetUpCamp(playerData, room); break; case "repair": Events.Repair.RepairItem(playerData, room, commandOptions); break; case "/debug": PlayerSetup.Player.DebugPlayer(playerData); break; case "/setGold": PlayerSetup.Player.SetGold(playerData, commandOptions); break; case "/setAc": PlayerSetup.Player.SetAC(playerData, commandOptions); break; case "/map": SigmaMap.DrawMap(playerData.HubGuid); //not what you think it does break; default: HubContext.Instance.SendToClient("Sorry you can't do that. Try help commands or ask on the discord channel.", playerData.HubGuid); var log = new Error.Error { Date = DateTime.Now, ErrorMessage = commandKey + " " + commandOptions, MethodName = "Wrong command" }; Save.LogError(log); break; } }