Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        //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);
        }
Ejemplo n.º 6
0
Archivo: Skill.cs Proyecto: sizzles/MIM
        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);
        }
Ejemplo n.º 7
0
Archivo: Kick.cs Proyecto: sizzles/MIM
        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;
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
        //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);
        }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        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;
        }
Ejemplo n.º 13
0
        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;
        }
Ejemplo n.º 14
0
        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;
            }
        }
Ejemplo n.º 15
0
        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;
            }
        }
Ejemplo n.º 16
0
        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;
        }
Ejemplo n.º 17
0
        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;
        }
Ejemplo n.º 18
0
        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;
        }
Ejemplo n.º 19
0
        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);
            }
        }
Ejemplo n.º 20
0
        /// <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;
            }
        }