Beispiel #1
0
        public static void LearnFromMistake(Player player, Skill skill, int xpGain)
        {
            if (skill.Proficiency < 95)
            {
                var xp = new Experience();
                player.Experience += xpGain;

                xp.GainLevel(player);

                var gain = Helpers.Rand(1, 5);

                skill.Proficiency += gain;

                HubContext.Instance.SendToClient($"<span style='color:yellow'>Your {skill.Name} skill increases by {gain}%.</span>", player.HubGuid);


                HubContext.Instance.SendToClient($"<span style='color:yellow'>You learn from your mistakes and gain {xpGain} experience points</span>",
                                                 player.HubGuid);
            }
        }
Beispiel #2
0
        public static async Task CraftItem(PlayerSetup.Player player, Room.Room room, Craft craftItem)
        {
            //add skill check here
            var getSkill = player.Skills.FirstOrDefault(x => x.Alias.Equals(craftItem.CraftCommand.ToString()));

            if (getSkill == null)
            {
                HubContext.Instance.SendToClient("You don't know how to do that", player.HubGuid);
                return;
            }


            if (player.MovePoints < craftItem.MoveCost)
            {
                if (craftItem.CraftCommand == CraftType.Chop || craftItem.CraftCommand == CraftType.Brew)
                {
                    HubContext.Instance.SendToClient("You are too tired to make " + Helpers.ReturnName(null, null, craftItem.CreatesItem.name).ToLower() + ".", player.HubGuid);
                    return;
                }



                HubContext.Instance.SendToClient("You are too tired to make " + Helpers.ReturnName(null, null, craftItem.Name).ToLower() + ".", player.HubGuid);
                return;
            }

            player.MovePoints -= craftItem.MoveCost;



            var successChance = ShowSkills.CraftSuccess(getSkill.Points);

            if (getSkill.Points >= successChance)
            {
                //success
                if (player.ActiveSkill != null)
                {
                    HubContext.Instance.SendToClient("wait till you have finished " + player.ActiveSkill.Name,
                                                     player.HubGuid);
                    return;
                }

                player.ActiveSkill = getSkill;

                var oldRoom = room;
                HubContext.Instance.SendToClient(craftItem.StartMessage, player.HubGuid);

                await Task.Delay(1500);

                foreach (var emote in craftItem.CraftingEmotes)
                {
                    HubContext.Instance.SendToClient(emote, player.HubGuid);


                    await Task.Delay(2000);
                }

                HubContext.Instance.SendToClient(craftItem.SuccessMessage, player.HubGuid);


                if (craftItem.Materials != null)
                {
                    foreach (var materials in craftItem.Materials)
                    {
                        for (var i = 0; i < materials.Count; i++)
                        {
                            var item = player.Inventory.FirstOrDefault(x => x.name.ToLower()
                                                                       .Contains(materials.Name.ToLower()));

                            player.Inventory.Remove(item);
                        }
                    }
                }

                if (craftItem.CraftAppearsInRoom)
                {
                    room.items.Add(craftItem.CreatesItem);
                }

                if (!craftItem.CraftAppearsInRoom)
                {
                    PlayerSetup.Player.AddItem(player, craftItem.CreatesItem);
                }


                Score.UpdateUiInventory(player);

                Cache.updateRoom(room, oldRoom);

                player.ActiveSkill = null;
            }
            else
            {
                var failMessage = craftItem.FailureMessages[Helpers.Rand(1, craftItem.FailureMessages.Count)];

                HubContext.Instance.SendToClient(failMessage.Message,
                                                 player.HubGuid);

                if (failMessage.BreakMaterial)
                {
                    var item = player.Inventory.FirstOrDefault(x => x.name.ToLower().Contains(craftItem
                                                                                              .Materials[Helpers.Rand(1, craftItem.Materials.Count)].Name.ToLower()));

                    player.Inventory.Remove(item);
                }

                var xp = new Experience();



                if (getSkill != null)
                {
                    if (player.ChosenCraft == craftItem.CraftCommand.ToString())
                    {
                        getSkill.Points += Helpers.Rand(1, 10);


                        HubContext.Instance.SendToClient("<p class='roomExit'>You learn from your mistakes and gain 100 experience points.</p>",
                                                         player.HubGuid);

                        player.Experience += 100;
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(player.ChosenCraft) && getSkill.Points <= 99)
                        {
                            HubContext.Instance.SendToClient("<p class='roomExit'>You learn from your mistakes and gain 100 experience points.</p>",
                                                             player.HubGuid);

                            player.Experience += 100;


                            getSkill.Points += Helpers.Rand(1, 10);

                            if (getSkill.Points > 99)
                            {
                                var rankWarning = ShowSkills.checkRank(getSkill.Points, player);
                                HubContext.Instance.SendToClient(rankWarning,
                                                                 player.HubGuid);

                                getSkill.Points = 99;
                            }
                        }
                        else if (getSkill.Points <= 99)
                        {
                            HubContext.Instance.SendToClient("<p class='roomExit'>You learn from your mistakes and gain 100 experience points.</p>",
                                                             player.HubGuid);

                            player.Experience += 100;


                            getSkill.Points += Helpers.Rand(1, 10);

                            if (getSkill.Points > 99)
                            {
                                getSkill.Points = 99;
                            }
                        }
                    }
                }

                Score.ReturnScoreUI(player);


                xp.GainLevel(player);
            }
        }
Beispiel #3
0
        public static void IsDead(Player attacker, Player defender, Room room)
        {
            if (defender.HitPoints <= 0)
            {
                HubContext.SendToAllExcept(defender.Name + " dies ", room.fighting, room.players);


                HubContext.SendToClient("You die", defender.HubGuid);

                HubContext.SendToClient(defender.Name + " dies", attacker.HubGuid);

                defender.Target = null;


                //Turn corpse into room item
                var defenderCorpse = new Item
                {
                    name           = "The corpse of " + defender.Name,
                    container      = true,
                    containerItems = new List <Item>(),
                    description    = new Description {
                        look = "The slain corpse of " + defender.Name + " is here.", room = "The slain corpse of " + defender.Name
                    }
                };

                foreach (var invItem in defender.Inventory)
                {
                    invItem.location = Item.ItemLocation.Room;
                    defenderCorpse.containerItems.Add(invItem);
                }



                var oldRoom = room;
                room.items.Add(defenderCorpse);
                room.corpses.Add(defender);

                if (defender.Type == Player.PlayerTypes.Mob || string.IsNullOrEmpty(defender.HubGuid))
                {
                    room.mobs.Remove(defender);
                }
                else
                {
                    //room.players.Remove(defender);
                    //Add slain player to recall
                }

                defender.Target = null;
                attacker.Target = null;

                attacker.Status = PlayerSetup.Player.PlayerStatus.Standing;

                defender.Status = defender.Type == Player.PlayerTypes.Player ? PlayerSetup.Player.PlayerStatus.Ghost : PlayerSetup.Player.PlayerStatus.Dead;

                Cache.updateRoom(room, oldRoom);

                var xp = new Experience();

                int xpGain = xp.GainXp(attacker, defender);
                attacker.Experience      += xpGain;
                attacker.TotalExperience += xpGain;
                HubContext.SendToClient(xpGain + "XP", attacker.HubGuid);

                xp.GainLevel(attacker);
                //calc xp
                //create corpse

                foreach (var player in room.players)
                {
                    var roomdata = LoadRoom.DisplayRoom(room, player.Name);
                    Score.UpdateUiRoom(player, roomdata);
                }
            }
        }
Beispiel #4
0
        private async Task DoForaging(Player player, Room room)
        {
            player.Status = Player.PlayerStatus.Busy;

            await Task.Delay(500);

            HubContext.Instance.SendToClient("You continue searching the area.",
                                             player.HubGuid);


            player.PlayerIsForaging = true;
            foreach (var character in room.players)
            {
                if (character != player)
                {
                    var roomMessage =
                        $"{Helpers.ReturnName(player, character, string.Empty)} continues searching the area.";

                    HubContext.Instance.SendToClient(roomMessage, character.HubGuid);
                }
            }

            await Task.Delay(500);

            var    foragingAB   = player.Skills.FirstOrDefault(x => x.Name.Equals("Foraging"));
            double getSkillProf = 0;

            if (foragingAB != null)
            {
                getSkillProf = foragingAB.Points;
            }

            var getItems = room.ForageItems.Where(x => x.ForageRank <= player.ForageRank).ToList();

            if (getItems.Count == 0 && room.terrain == Room.Terrain.City)
            {
                getItems = new ItemContainer();

                if (Helpers.Rand(1, 100) <= 50)
                {
                    getItems.Add(Held.TatteredRag());

                    getItems.Add(Held.ScrapMetal());
                }
            }
            else if (room.terrain == Room.Terrain.City)
            {
                if (Helpers.Rand(1, 100) <= 50)
                {
                    getItems.Add(Held.TatteredRag());

                    getItems.Add(Held.ScrapMetal());
                }
            }

            var successChance = Helpers.Rand(1, 100);

            if (getSkillProf >= successChance && getItems.Count > 0)
            {
                var YouFound = "You found " +
                               Helpers.ReturnName(null, null, getItems[Helpers.Rand(0, getItems.Count)].name).ToLower() + ".";


                var item = getItems[Helpers.Rand(0, getItems.Count)];

                item.location = Item.Item.ItemLocation.Inventory;
                item.type     = Item.Item.ItemType.Food;
                item.hidden   = false;

                PlayerSetup.Player.AddItem(player, item);

                HubContext.Instance.SendToClient(YouFound, player.HubGuid);
            }

            else
            {
                var failMessage = "";

                if (room.terrain == Room.Terrain.City)
                {
                    failMessage = "You fail to find anything.";
                }
                else
                {
                    switch (Helpers.Rand(1, 4))
                    {
                    case 1:
                        failMessage = "A bee has stung you on the hand, Ouch!";
                        break;

                    case 2:
                    case 3:
                        failMessage = "You fail to find anything worth taking.";
                        break;

                    default:
                        failMessage = "You don't recognise any of the flora here.";
                        break;
                    }
                }



                HubContext.Instance.SendToClient(failMessage, player.HubGuid);


                if (getSkillProf < 99)
                {
                    HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points",
                                                     player.HubGuid);

                    var xp = new Experience();
                    player.Experience += 100;

                    xp.GainLevel(player);

                    foragingAB.Points += Helpers.Rand(1, 5);


                    if (foragingAB.Points > 99)
                    {
                        foragingAB.Points = 99;
                    }
                }

                if (foragingAB.Points == 99)
                {
                    HubContext.Instance.SendToClient("You must commit to a craft to progress further",
                                                     player.HubGuid);
                }



                Score.ReturnScoreUI(player);
            }

            player.ActiveSkill      = null;
            player.PlayerIsForaging = false;
        }
Beispiel #5
0
        private async Task DoSearching(Player player, Room room)
        {
            player.Status = Player.PlayerStatus.Busy;

            await Task.Delay(500);

            HubContext.Instance.SendToClient("You continue searching the area.",
                                             player.HubGuid);


            foreach (var character in room.players)
            {
                if (character != player)
                {
                    var roomMessage =
                        $"{Helpers.ReturnName(player, character, string.Empty)} continues searching the area.";

                    HubContext.Instance.SendToClient(roomMessage, character.HubGuid);
                }
            }

            await Task.Delay(500);

            var    AB           = player.Skills.FirstOrDefault(x => x.Name.Equals("Search"));
            double getSkillProf = 0;

            if (AB != null)
            {
                getSkillProf = AB.Proficiency / (double)95 * 100;
            }

            var getItems = room.items.Where(x => x.isHiddenInRoom).ToList();



            var successChance = Helpers.Rand(1, 100);

            if (getSkillProf >= successChance && getItems.Count > 0)
            {
                var YouFound = "You found " +
                               Helpers.ReturnName(null, null, getItems[Helpers.Rand(0, getItems.Count)].name).ToLower() + ".";


                var item = getItems[Helpers.Rand(0, getItems.Count)];

                item.location       = Item.Item.ItemLocation.Inventory;
                item.isHiddenInRoom = false;


                PlayerSetup.Player.AddItem(player, item);


                HubContext.Instance.SendToClient(YouFound, player.HubGuid);
            }

            else
            {
                var failMessage = "";

                if (room.terrain == Room.Terrain.City)
                {
                    failMessage = "You fail to find anything.";
                }
                else
                {
                    switch (Helpers.Rand(1, 4))
                    {
                    case 1:
                        failMessage = "You search quickly but fail to find anything.";
                        break;

                    case 2:
                    case 3:
                        failMessage = "You fail to find anything.";
                        break;

                    default:
                        failMessage = "You didn't find anything from your search.";
                        break;
                    }
                }



                HubContext.Instance.SendToClient(failMessage, player.HubGuid);


                if (getSkillProf < 95)
                {
                    HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points",
                                                     player.HubGuid);

                    var xp = new Experience();
                    player.Experience += 100;

                    xp.GainLevel(player);

                    AB.Proficiency += Helpers.Rand(1, 5);
                }

                Score.ReturnScoreUI(player);
            }

            player.ActiveSkill = null;

            Score.UpdateUiInventory(player);
        }
Beispiel #6
0
        public static void IsDead(Player attacker, Player defender, Room room)
        {
            if (defender.HitPoints <= 0)
            {
                CheckEvent.FindEvent(CheckEvent.EventType.Death, attacker, "death");

                foreach (var player in room.players)
                {
                    if (player != defender)
                    {
                        HubContext.SendToClient(defender.Name + " dies ", player.HubGuid);
                    }
                    else
                    {
                        HubContext.SendToClient("You die", defender.HubGuid);
                    }
                }



                defender.Target         = null;
                defender.ActiveFighting = false;
                defender.Status         = Player.PlayerStatus.Ghost;


                //Turn corpse into room item
                var defenderCorpse = new Item
                {
                    name           = "The corpse of " + defender.Name,
                    container      = true,
                    containerItems = new List <Item>(),
                    description    = new Description {
                        look = "The slain corpse of " + defender.Name + " is here.", room = "The slain corpse of " + defender.Name
                    }
                };

                foreach (var invItem in defender.Inventory)
                {
                    invItem.location = Item.ItemLocation.Room;
                    defenderCorpse.containerItems.Add(invItem);
                }



                var oldRoom = room;
                room.items.Add(defenderCorpse);
                room.corpses.Add(defender);

                if (defender.Type == Player.PlayerTypes.Mob || string.IsNullOrEmpty(defender.HubGuid))
                {
                    room.mobs.Remove(defender);
                }
                else
                {
                    //room.players.Remove(defender);
                    //Add slain player to recall
                }

                defender.Target = null;

                if (attacker.Target.Name == defender.Name)
                {
                    attacker.Target         = null;
                    attacker.Status         = PlayerSetup.Player.PlayerStatus.Standing;
                    attacker.ActiveFighting = false;
                }

                defender.Status = defender.Type == Player.PlayerTypes.Player ? PlayerSetup.Player.PlayerStatus.Ghost : PlayerSetup.Player.PlayerStatus.Dead;

                Cache.updateRoom(room, oldRoom);

                var xp = new Experience();

                int xpGain = xp.GainXp(attacker, defender);
                attacker.Experience      += xpGain;
                attacker.TotalExperience += xpGain;
                HubContext.SendToClient(xpGain + "XP", attacker.HubGuid);

                xp.GainLevel(attacker);
                //calc xp
                //create corpse

                foreach (var player in room.players)
                {
                    var roomdata = LoadRoom.DisplayRoom(room, player.Name);
                    Score.UpdateUiRoom(player, roomdata);
                }

                if (attacker.HubGuid != null)
                {
                    room.fighting.Remove(attacker.HubGuid);
                }

                if (defender.HubGuid != null)
                {
                    room.fighting.Remove(defender.HubGuid);
                }

                //remove followers

                if (defender.Following != null)
                {
                    if (defender.Followers.Count > 0)
                    {
                        foreach (var follower in defender.Followers)
                        {
                            if (follower.HubGuid != null)
                            {
                                HubContext.SendToClient("You stop following " + defender.Name, follower.HubGuid);
                            }
                        }
                    }

                    defender.Followers = null;
                    defender.Following = null;
                }

                // check if defender is following?
                if (attacker.Followers?.FirstOrDefault(x => x.Equals(defender)) != null)
                {
                    attacker.Followers.Remove(defender);

                    if (attacker.HubGuid != null)
                    {
                        HubContext.SendToClient(defender.Name + " stops following you", attacker.HubGuid);
                    }
                }
            }
        }
Beispiel #7
0
        public void StartFishing(Player player, Room room)
        {
            if (room.terrain != Room.Terrain.Water)
            {
                HubContext.Instance.SendToClient("You must be by water to fish.", player.HubGuid);
                return;
            }

            var rod = player.Inventory.FirstOrDefault(x => x.name.Contains("rod") &&
                                                      x.location == Item.Item.ItemLocation.Worn);

            if (rod == null)
            {
                HubContext.Instance.SendToClient("You must be holding a rod to fish.", player.HubGuid);
                return;
            }

            if (rod.HasBeenCast)
            {
                HubContext.Instance.SendToClient("Your rod has already been casted.", player.HubGuid);
                return;
            }

            var fishingAB = player.Skills.FirstOrDefault(x => x.Name.Equals("Fishing"));

            if (player.ActiveSkill != null)
            {
                HubContext.Instance.SendToClient("wait till you have finished " + player.ActiveSkill.Name, player.HubGuid);
                return;
            }
            else
            {
                player.ActiveSkill = fishingAB;
            }


            if (player.MovePoints < 10)
            {
                HubContext.Instance.SendToClient("You are too tired to cast the rod.", player.HubGuid);
                player.ActiveSkill = null;

                return;
            }



            player.MovePoints -= 15;

            if (player.MovePoints < 0)
            {
                player.MovePoints = 0;
            }

            Score.UpdateUiPrompt(player);

            var    getSkill     = player.Skills.FirstOrDefault(x => x.Name.Equals("Fishing"));
            double getSkillProf = 0;

            if (getSkill != null)
            {
                getSkillProf = getSkill.Proficiency / (double)95 * 100;
            }

            var successChance = Helpers.Rand(1, 100);

            if (getSkillProf >= successChance)
            {
                HubContext.Instance.SendToClient("You cast your rod out, the float plops into the water.",
                                                 player.HubGuid);


                rod.HasBeenCast = true;
                foreach (var character in room.players)
                {
                    if (character != player)
                    {
                        var roomMessage =
                            $"{Helpers.ReturnName(player, character, string.Empty)} casts their rod into the water.";

                        HubContext.Instance.SendToClient(roomMessage, character.HubGuid);
                    }
                }

                Task.Run(() => DoFishing(player, room));
            }
            else
            {
                var failMessage = "";
                switch (Helpers.Rand(1, 4))
                {
                case 1:
                    failMessage = "You hooked yourself Ouch!";
                    break;

                case 2:
                case 3:
                    failMessage = "You fail to cast correctly.";
                    break;

                default:
                    failMessage = "You fail to cast correctly.";
                    break;
                }

                HubContext.Instance.SendToClient(failMessage,
                                                 player.HubGuid);

                if (getSkillProf < 95)
                {
                    HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points",
                                                     player.HubGuid);

                    var xp = new Experience();
                    player.Experience += 100;

                    xp.GainLevel(player);

                    getSkill.Proficiency += Helpers.Rand(1, 5);
                }

                Score.ReturnScoreUI(player);

                player.ActiveSkill = null;
            }
        }
Beispiel #8
0
        public static void GetFish(Player player, Room room)
        {
            var rod = player.Inventory.FirstOrDefault(x => x.name.Contains("rod") &&
                                                      x.location == Item.Item.ItemLocation.Worn);

            if (rod == null)
            {
                HubContext.Instance.SendToClient("You must be holding a rod before you can reel anything in.", player.HubGuid);

                return;
            }

            if (rod.HasBeenCast == false)
            {
                HubContext.Instance.SendToClient("You have to be fishing before you try reeling in.", player.HubGuid);

                return;
            }

            if (room.terrain != Room.Terrain.Water)
            {
                HubContext.Instance.SendToClient("You must be by water to fish.", player.HubGuid);
                return;
            }

            var    getSkill     = player.Skills.FirstOrDefault(x => x.Name.Equals("Fishing"));
            double getSkillProf = 0;

            if (getSkill != null)
            {
                getSkillProf = getSkill.Proficiency / (double)95 * 100;
            }

            var successChance = Helpers.Rand(1, 100);

            if (getSkillProf >= successChance)
            {
                if (rod.HasFish)
                {
                    rod.HasFish = false;

                    Score.UpdateUiPrompt(player);

                    var caughtFish = "Perch";

                    switch (Helpers.Rand(1, 16))
                    {
                    case 1:
                        caughtFish = "Bream";
                        break;

                    case 2:
                    case 3:
                        caughtFish = "Brown Trout";
                        break;

                    case 4:
                    case 5:
                        caughtFish = "Carp";
                        break;

                    case 6:
                    case 7:
                    case 8:
                    case 9:
                    case 10:
                        caughtFish = "Chub";
                        break;

                    case 11:
                        caughtFish = "Perch";
                        break;

                    case 12:
                        caughtFish = "Snapping turtle";
                        break;

                    case 13:
                        caughtFish = "Eel";
                        break;

                    case 14:
                        caughtFish = "Frog";
                        break;

                    case 15:
                    case 16:
                        caughtFish = "Water Snake";
                        break;
                    }

                    if (caughtFish == "Water Snake")
                    {
                        HubContext.Instance.SendToClient("You hooked a " + caughtFish + "!!", player.HubGuid);

                        var snake =
                            new Player()
                        {
                            Name           = "Water Snake",
                            Aggro          = true,
                            Strength       = 40,
                            Dexterity      = 60,
                            Constitution   = 30,
                            Wisdom         = 30,
                            Intelligence   = 40,
                            Charisma       = 30,
                            MobAttackType  = Player.MobAttackTypes.Bite,
                            Type           = Player.PlayerTypes.Mob,
                            HitPoints      = 25,
                            MaxHitPoints   = 25,
                            MovePoints     = 50,
                            MaxMovePoints  = 50,
                            MobAttackStats = new Stats()
                            {
                                damMax = 11,
                                damMin = 4
                            },
                            Level = 2,
                        };

                        room.mobs.Add(snake);

                        Player.MobAttack(snake, player, room);
                    }
                    else
                    {
                        HubContext.Instance.SendToClient("You reel your rod in, you have caught a " + caughtFish + ".",
                                                         player.HubGuid);


                        var fish = new Item.Item()
                        {
                            name     = caughtFish,
                            location = Item.Item.ItemLocation.Inventory
                        };

                        PlayerSetup.Player.AddItem(player, fish);

                        Score.UpdateUiInventory(player);


                        foreach (var character in room.players)
                        {
                            if (character != player)
                            {
                                var roomMessage =
                                    $"{Helpers.ReturnName(player, character, string.Empty)} reels their rod in, they have caught a " +
                                    caughtFish;

                                HubContext.Instance.SendToClient(roomMessage, character.HubGuid);
                            }
                        }
                    }
                }
                else
                {
                    HubContext.Instance.SendToClient("You reel your rod in but nothing is on the hook.",
                                                     player.HubGuid);
                    rod.HasBeenCast = false;
                }
            }
            else
            {
                var failMessage = "";
                switch (Helpers.Rand(1, 4))
                {
                case 1:
                    failMessage = "Your line breaks.";
                    break;

                case 2:
                    failMessage = "You hooked a stump.";
                    break;

                case 3:
                    failMessage = "You reel in too fast and lost the catch.";
                    break;

                default:
                    failMessage = "The line snapped and you hit yourself in the face. Ouch!";
                    break;
                }

                HubContext.Instance.SendToClient(failMessage,
                                                 player.HubGuid);

                if (getSkillProf < 95)
                {
                    HubContext.Instance.SendToClient("You learn from your mistakes and gain 100 experience points",
                                                     player.HubGuid);

                    var xp = new Experience();
                    player.Experience += 100;

                    xp.GainLevel(player);

                    getSkill.Proficiency += Helpers.Rand(1, 5);

                    player.ActiveSkill = null;
                }

                Score.ReturnScoreUI(player);
            }

            player.ActiveSkill = null;
        }