Пример #1
0
        private static async Task DoContinualLight(Player attacker, Room room)
        {
            _taskRunnning   = true;
            attacker.Status = Player.PlayerStatus.Busy;


            await Task.Delay(500);

            if (_target == null)
            {
                var castingTextAttacker = $"A bright {_color} ball of light is released by your hands and hovers in the air.";

                HubContext.SendToClient(castingTextAttacker, attacker.HubGuid);

                foreach (var character in room.players)
                {
                    if (character != attacker)
                    {
                        var roomMessage = $"{ Helpers.ReturnName(attacker, character, string.Empty)} releases a {_color} bright ball of light which hovers in the air.";

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

                var ballOfLight = Light.BallOfLight();
                ballOfLight.description = new Description()
                {
                    exam = $"A bright {_color} ball of light hovers here.",
                    look = $"A bright {_color} ball of light hovers here.",
                    room = $"A bright {_color} ball of light hovers here."
                };
                ballOfLight.name     = $"A bright {_color} ball of light";
                ballOfLight.location = Item.Item.ItemLocation.Room;


                room.items.Add(ballOfLight);
            }
            else
            {
                var castingTextAttacker = $"The {_target.name} glows a bright {_color} colour.";

                var castingTextRoom = $"The {_target.name} glows a bright {_color} colour.";

                HubContext.SendToClient(castingTextAttacker, attacker.HubGuid);
                HubContext.broadcastToRoom(castingTextRoom, room.players, attacker.HubGuid, true);

                _target.itemFlags.Add(Item.Item.ItemFlags.glow);
            }

            _target       = null;
            _taskRunnning = false;
        }
Пример #2
0
        public static void ShowPlayerAllSkills(Player player)
        {
            var getClassSkills = GetSkills(player);

            HubContext.SendToClient("You will eventually learn these skills:", player.HubGuid);

            var skills = getClassSkills.OrderBy(o => o.LevelObtained).ToList();

            foreach (var skill in skills)
            {
                HubContext.SendToClient("Level " + skill.LevelObtained + ": " + skill.Name + " " + skill.Proficiency + "%", player.HubGuid);
            }
        }
Пример #3
0
        public static async Task KickIdlePlayers()
        {
            try
            {
                foreach (var player in MIMHub._PlayerCache.ToList())
                {
                    if (player.Value != null && player.Value.LastCommandTime.AddMinutes(10) < DateTime.UtcNow)
                    {
                        HubContext.SendToClient("You disappear in the void", player.Value.HubGuid);

                        var room =
                            MIMHub._AreaCache.FirstOrDefault(
                                x =>
                                x.Value.area.Equals(player.Value.Area) && x.Value.areaId.Equals(player.Value.AreaId) &&
                                x.Value.region.Equals(player.Value.Region));

                        if (room.Value != null)
                        {
                            foreach (var players in room.Value.players.ToList())
                            {
                                HubContext.broadcastToRoom(player.Value.Name + " disappears in the void",
                                                           room.Value.players,
                                                           player.Value.HubGuid, true);
                            }
                        }
                    }

                    if (player.Value != null && player.Value.LastCommandTime.AddMinutes(20) < DateTime.UtcNow)
                    {
                        var room =
                            MIMHub._AreaCache.FirstOrDefault(
                                x =>
                                x.Value.area.Equals(player.Value.Area) && x.Value.areaId.Equals(player.Value.AreaId) &&
                                x.Value.region.Equals(player.Value.Region));

                        Command.ParseCommand("quit", player.Value, room.Value);
                    }
                }
            }
            catch (Exception ex)
            {
                var log = new Error.Error
                {
                    Date         = DateTime.Now,
                    ErrorMessage = ex.InnerException.ToString(),
                    MethodName   = "KickIdlePlayers"
                };

                Save.LogError(log);
            }
        }
Пример #4
0
        public static void buyItems(PlayerSetup.Player player, Room.Room room, string itemName)
        {
            var mob = room.mobs.FirstOrDefault(x => x.Shop.Equals(true));

            if (mob != null)
            {
                if (mob.Shop)
                {
                    if (string.IsNullOrEmpty(itemName))
                    {
                        HubContext.SendToClient("Buy? Buy what?", player.HubGuid);
                        return;
                    }

                    var itemToBuy = mob.itemsToSell.FirstOrDefault(x => x.name.ToLower().Contains(itemName.ToLower()));

                    if (itemToBuy != null)
                    {
                        var    result  = AvsAnLib.AvsAn.Query(itemToBuy.name);
                        string article = result.Article;

                        //Can afford

                        if (player.Gold >= itemToBuy.Gold)
                        {
                            itemToBuy.location = Item.Item.ItemLocation.Inventory;
                            player.Inventory.Add(itemToBuy);
                            HubContext.SendToClient(
                                "You buy " + article + itemToBuy.name + " from " + mob.Name,
                                player.HubGuid);
                            HubContext.broadcastToRoom(
                                player.Name + " buys " + article + " " + itemToBuy.name +
                                " from " +
                                mob.Name, room.players, player.HubGuid, true);
                            Score.UpdateUiInventory(player);
                            //deduct gold

                            player.Gold -= itemToBuy.Gold;
                        }
                        else
                        {
                            HubContext.SendToClient("You can't afford " + article + " " + itemToBuy.name, player.HubGuid);
                        }
                    }
                }
                else
                {
                    HubContext.SendToClient("Sorry I don't sell that", player.HubGuid);
                }
            }
        }
Пример #5
0
        public static void StartTeleport(Player player, Room room)
        {
            //Check if player has spell
            var hasSpell = Skill.CheckPlayerHasSkill(player, TeleporAb().Name);

            if (hasSpell == false)
            {
                HubContext.SendToClient("You don't know that spell.", player.HubGuid);
                return;
            }


            var canDoSkill = Skill.CanDoSkill(player);

            if (!canDoSkill)
            {
                return;
            }


            if (!_taskRunnning)
            {
                if (player.ManaPoints < TeleporAb().ManaCost)
                {
                    HubContext.SendToClient("You attempt to draw energy but fail", player.HubGuid);

                    return;
                }


                player.ManaPoints -= TeleporAb().ManaCost;

                Score.UpdateUiPrompt(player);

                HubContext.SendToClient("You utter iter multo ieiunium.", player.HubGuid);


                foreach (var character in room.players)
                {
                    if (character != player)
                    {
                        var roomMessage = $"{ Helpers.ReturnName(player, character, string.Empty)} utters iter multo ieiunium.";

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

                Task.Run(() => DoTeleport(player, room));
            }
        }
Пример #6
0
        /// <summary>
        /// Starts a fight between two players or mobs
        /// The defender can only fight it's original target
        /// so cant fight back at multiple targets
        /// </summary>
        /// <param name="attacker">The attacker</param>
        /// <param name="room">The room</param>
        /// <param name="defenderName">The defenders Name for now</param>
        /// <returns></returns>
        public static void PerpareToFight(Player attacker, Room room, string defenderName, bool busy = false)
        {
            if (attacker == null)
            {
                return;
            }

            if (attacker.Target != null)
            {
                HubContext.SendToClient("You can only concerntrate on one target", attacker.HubGuid);
                return;
            }

            /* player can only attack one target
             * if player gets attacked by something else they cannot fight back until
             * they have ended the fight they are already in.
             * player defence should be divided by the number of people they are being attacked by.
             *
             */

            //automated Combat rounds for melee attacks

            //find defender
            Player defender = FindValidTarget(room, defenderName, attacker);


            if (defender == null)
            {
                HubContext.SendToClient("No one here by that name", attacker.HubGuid);
                return;
            }



            defender.Status = Player.PlayerStatus.Fighting;

            if (!busy)
            {
                attacker.Status = Player.PlayerStatus.Fighting;
            }
            else
            {
                attacker.Status = Player.PlayerStatus.Busy;
            }


            AddFightersIdtoRoom(attacker, defender, room);

            StartFight(attacker, defender, room);
        }
Пример #7
0
 public static void greet(PlayerSetup.Player player, PlayerSetup.Player mob, Room.Room room, string message = "")
 {
     if (player.Type == PlayerSetup.Player.PlayerTypes.Player && message == string.Empty)
     {
         if (mob.GreetMessage != null)
         {
             string greetMessageToRoom = mob.GreetMessage + " " + player.Name;
             HubContext.broadcastToRoom(mob.Name + " says " + greetMessageToRoom, room.players, player.HubGuid);
         }
     }
     else
     {
     }
 }
Пример #8
0
        public static void StartCreateSpring(Player player, Room room)
        {
            //Check if player has spell
            var hasSpell = Skill.CheckPlayerHasSkill(player, CreateSpringAb().Name);

            if (hasSpell == false)
            {
                HubContext.SendToClient("You don't know that spell.", player.HubGuid);
                return;
            }

            var canDoSkill = Skill.CanDoSkill(player);

            if (!canDoSkill)
            {
                return;
            }

            if (!_taskRunnning)
            {
                if (player.ManaPoints < CreateSpringAb().ManaCost)
                {
                    HubContext.SendToClient("You fail to concentrate due to lack of mana.", player.HubGuid);

                    return;
                }

                player.ManaPoints -= CreateSpringAb().ManaCost;

                Score.UpdateUiPrompt(player);


                HubContext.SendToClient($"You utter aqua fons.", player.HubGuid);


                foreach (var character in room.players)
                {
                    if (character != player)
                    {
                        var roomMessage = $"{ Helpers.ReturnName(player, character, string.Empty)} utters aqua fons.";

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



                Task.Run(() => DoCreateSpring(player, room));
            }
        }
Пример #9
0
        /// <summary>
        /// Remove worn item.
        /// </summary>
        /// <param name="player">The Player</param>
        /// <param name="itemToRemove">Item to Remove</param>
        public static void RemoveItem(Player player, string itemToRemove, bool replaceWithOtherEQ = false, bool unwield = false)
        {
            var oldPlayer = player;
            var foundItem = player.Inventory.Find(i => i.name.ToLower().Contains(itemToRemove.ToLower()) && i.location.Equals("worn"));

            if (foundItem == null)
            {
                if (unwield)
                {
                    HubContext.SendToClient("You do not have that item to unwield.", player.HubGuid);
                    return;
                }

                HubContext.SendToClient("You are not wearing that item.", player.HubGuid);
                return;
            }

            foundItem.location = Item.ItemLocation.Inventory;
            var value = string.Empty;
            var slot  = Enum.GetName(typeof(Item.EqSlot), foundItem.slot);

            var eqLocation = player.Equipment.GetType().GetProperty(slot);

            if (eqLocation == null)
            {
                return;
            }                                    // Log error?


            eqLocation.SetValue(player.Equipment, "Nothing");

            if (!unwield)
            {
                HubContext.SendToClient("You Remove." + foundItem.name, player.HubGuid);
            }
            else
            {
                HubContext.SendToClient("You Unwield." + foundItem.name, player.HubGuid);
            }


            if (replaceWithOtherEQ)
            {
                return; // we don't need to update the cache
            }


            Cache.updatePlayer(player, oldPlayer);
        }
Пример #10
0
        /// <summary>
        /// Displays what the player is wearing and what slots are availaible
        /// </summary>
        /// <param name="player">The player</param>
        public static void ShowEquipment(Player player)
        {
            var eq = player.Equipment;
            var displayEquipment = new StringBuilder();

            HubContext.SendToClient("You are wearing:", player.HubGuid);

            displayEquipment.Append("<ul>")
            .Append("<li>Floating: ".PadRight(4)).Append(eq.Floating).Append("</li>")
            .Append("<li>Head: ".PadRight(8)).Append(eq.Head).Append("</li>")
            .Append("<li>Face: ".PadRight(8)).Append(eq.Face).Append("</li>")
            .Append("<li>Eyes: ".PadRight(8)).Append(eq.Eyes).Append("</li>")
            .Append("<li>Left Ear: ".PadRight(4)).Append(eq.LeftEar).Append("</li>")
            .Append("<li>Right Ear: ".PadRight(4)).Append(eq.RightEar).Append("</li>")
            .Append("<li>Neck: ".PadRight(8)).Append(eq.Neck).Append("</li>")
            .Append("<li>Neck: ".PadRight(8)).Append(eq.Neck2).Append("</li>")
            .Append("<li>Cloak: ".PadRight(8)).Append(eq.Cloak).Append("</li>")
            .Append("<li>About Body: ".PadRight(4)).Append(eq.AboutBody).Append("</li>")
            .Append("<li>Body: ".PadRight(8)).Append(eq.Body).Append("</li>")
            .Append("<li>Waist: ".PadRight(7)).Append(eq.Waist).Append("</li>");

            if (eq.LeftSheath != "Nothing")
            {
                displayEquipment.Append("<li>Left Sheath: ").Append(eq.LeftSheath).Append("</li>");
            }

            if (eq.RightSheath != "Nothing")
            {
                displayEquipment.Append("<li>Right Sheath: ").Append(eq.RightSheath).Append("</li>");
            }

            if (eq.BackSheath != "Nothing")
            {
                displayEquipment.Append("<li>Back Sheath: ").Append(eq.BackSheath).Append("</li>");
            }

            displayEquipment.Append("<li>Back: ".PadRight(8)).Append(eq.Back).Append("</li>")
            .Append("<li>Left Wrist: ".PadRight(4)).Append(eq.LeftWrist).Append("</li>")
            .Append("<li>Right Wrist: ".PadRight(4)).Append(eq.RightWrist).Append("</li>")
            .Append("<li>Left Hand: ".PadRight(4)).Append(eq.LeftHand).Append("</li>")
            .Append("<li>Right Hand: ".PadRight(4)).Append(eq.RightHand).Append("</li>")
            .Append("<li>Left Ring: ".PadRight(4)).Append(eq.LeftRing).Append("</li>")
            .Append("<li>Right Ring: ".PadRight(4)).Append(eq.RightRing).Append("</li>")
            .Append("<li>Legs: ".PadRight(8)).Append(eq.Legs).Append("</li>")
            .Append("<li>Feet: ".PadRight(8)).Append(eq.Feet).Append("</li>")
            .Append("</ul>");

            HubContext.SendToClient(displayEquipment.ToString(), player.HubGuid);
        }
Пример #11
0
        public bool CheckPlayerStatus(PlayerSetup.Player player)
        {
            if (player.Status == PlayerSetup.Player.PlayerStatus.Sleeping)
            {
                HubContext.SendToClient("You can't do that while asleep.", player.HubGuid);
            }

            if (player.Status == PlayerSetup.Player.PlayerStatus.Dead)
            {
                HubContext.SendToClient("You can't do that as a Ghost.", player.HubGuid);
            }


            return(false);
        }
Пример #12
0
        public static void buyItems(PlayerSetup.Player player, PlayerSetup.Player mob, Item.Item item)
        {
            if (mob.Shop)
            {
                player.itemsToSell.Remove(item);
                HubContext.SendToClient("You give " + mob.Name + " your " + item.name, player.HubGuid);

                mob.itemsToSell.Add(item);
                HubContext.SendToClient(mob.Name + " gives you 100 gold", player.HubGuid);
            }
            else
            {
                HubContext.SendToClient("Sorry no shops here", player.HubGuid);
            }
        }
Пример #13
0
        /// <summary>
        /// Displays Help text to User
        /// </summary>
        /// <param name="keyword"></param>
        /// <param name="player"></param>
        public static void ShowHelp(string keyword, PlayerSetup.Player player)
        {
            var help = HelpList().FirstOrDefault(x => x.Key.ToLower().Contains(keyword.ToLower()));

            if (help.Value == null)
            {
                HubContext.SendToClient("No help found for '" + keyword + "'. The gods will be notified.", player.HubGuid);
                //Logs missing help
                return;
            }

            var helpText = help.Value.Syntax + " " + help.Value.HelpText;

            HubContext.SendToClient(helpText, player.HubGuid);
        }
Пример #14
0
        /// <summary>
        /// Displays Help text to User
        /// </summary>
        /// <param name="keyword"></param>
        /// <param name="player"></param>
        public static void ShowHelp(string keyword, PlayerSetup.Player player)
        {
            var help = HelpList().FirstOrDefault(x => x.Key.StartsWith(keyword, StringComparison.InvariantCultureIgnoreCase));

            if (help.Value == null)
            {
                HubContext.SendToClient("No help found for '" + keyword + "'. The gods will be notified.", player.HubGuid);
                //Logs missing help
                return;
            }

            var helpText = help.Value.Syntax + " " + help.Value.HelpText;

            HubContext.SendToClient(helpText, player.HubGuid);
        }
Пример #15
0
        public static void CheckIfGetItemQuestsComplete(PlayerSetup.Player player)
        {
            var quests = player.QuestLog.Where(x => x.Type == Quest.QuestType.FindItem && x.Completed == false);
            var playerInvQuestItems = player.Inventory.Where(x => x.QuestItem);
            var invQuestItems       = playerInvQuestItems as IList <Item.Item> ?? playerInvQuestItems.ToList();

            foreach (var findQuest in quests)
            {
                var compelete            = false;
                var currentItemsForQuest = new List <Item.Item>();
                foreach (var questItem in findQuest.QuestItem)
                {
                    compelete = invQuestItems.Any(x => x.name.Equals(questItem.name, StringComparison.CurrentCultureIgnoreCase));

                    if (compelete)
                    {
                        currentItemsForQuest.Add(questItem);
                    }
                }

                if (compelete && currentItemsForQuest.Count == findQuest.QuestItem.Count)
                {
                    findQuest.Completed = true;

                    HubContext.SendToClient(findQuest.RewardDialog.Message, player.HubGuid);
                    HubContext.SendToClient("You gain " + findQuest.RewardXp + " Experience Points", player.HubGuid);
                    HubContext.SendToClient("You gain " + findQuest.RewardGold + " gold pieces", player.HubGuid);

                    var rewardItem = findQuest?.RewardItem;

                    if (rewardItem != null)
                    {
                        rewardItem.location = Item.Item.ItemLocation.Inventory;

                        player.Inventory.Add(rewardItem);
                    }

                    player.Experience += findQuest.RewardXp;
                    player.Gold        = findQuest.RewardGold;

                    //check if player level
                    var xp = new Experience();
                    xp.GainLevel(player);
                    //update ui
                    Score.ReturnScoreUI(player);
                }
            }
        }
Пример #16
0
        /// <summary>
        /// Wears an item
        /// </summary>
        /// <param name="player">The Player</param>
        /// <param name="itemToWear">Item to wear</param>
        public static void WearItem(Player player, string itemToWear, bool wield = false)
        {
            var oldPlayer = player;
            var foundItem = player.Inventory.Find(i => i.name.ToLower().Contains(itemToWear.ToLower()));

            if (foundItem == null)
            {
                if (wield)
                {
                    HubContext.SendToClient("You do not have that item to wield.", player.HubGuid);
                    return;
                }

                HubContext.SendToClient("You do not have that item to wear.", player.HubGuid);
                return;
            }

            foundItem.location = Item.ItemLocation.Worn;
            var slot = Enum.GetName(typeof(Item.EqSlot), foundItem.slot);

            //TODO: WTF is this?
            var eqLocation = player.Equipment.GetType().GetProperty(slot);

            if (slot == null)
            {
                return;
            }                             // Log error? What the hell is eqLocation?

            var hasValue = eqLocation.GetValue(player.Equipment);

            if (hasValue.ToString() != "Nothing")
            {
                RemoveItem(player, hasValue.ToString(), true);
            }

            eqLocation.SetValue(player.Equipment, foundItem.name);

            if (!wield)
            {
                HubContext.SendToClient("You wear." + foundItem.name, player.HubGuid);
            }
            else
            {
                HubContext.SendToClient("You wield." + foundItem.name, player.HubGuid);
            }

            Cache.updatePlayer(player, oldPlayer);
        }
Пример #17
0
        public static void Annoy(PlayerSetup.Player player, PlayerSetup.Player mob, Room.Room room)
        {
            var phrase = RandomResponses();

            HubContext.SendToClient($"<span class='sayColor'>{mob.Name} says to you \"{phrase}\"</span>", player.HubGuid);

            foreach (var character in room.players)
            {
                if (character != player)
                {
                    HubContext.SendToClient($"<span class='sayColor'>{mob.Name} says to {Helpers.ReturnName(player, character, String.Empty)} \"{phrase}\"</span>", character.HubGuid);
                }
            }

            Follow.MobStalk(mob, player, room);
        }
Пример #18
0
        public static void EmoteActionToRoom(string message, Player player)
        {
            var players = Cache.ReturnPlayers().Where(x => x.AreaId.Equals(player.AreaId) && x.Area.Equals(player.Area) && x.Region.Equals(player.Region));

            foreach (var pc in players)
            {
                if (pc != player)
                {
                    HubContext.SendToClient(Helpers.ReturnName(player, pc, string.Empty) + " " + message, pc.HubGuid);
                }
                else
                {
                    HubContext.SendToClient("You " + message, pc.HubGuid);
                }
            }
        }
Пример #19
0
        public static void DebugPlayer(Player player)
        {
            HubContext.SendToClient("Debug:", player.HubGuid);
            HubContext.SendToClient("Player Target: " + player.Target?.Name, player.HubGuid);
            HubContext.SendToClient("Player is Fighting: " + player.ActiveFighting, player.HubGuid);
            HubContext.SendToClient("Player Has active skill: " + player.ActiveSkill?.Name, player.HubGuid);
            HubContext.SendToClient("Player status: " + player.Status, player.HubGuid);
            HubContext.SendToClient("Player items: ", player.HubGuid);

            if (player.Inventory != null)
            {
                foreach (var item in player.Inventory)
                {
                    HubContext.SendToClient(item.name + " " + item.location + " " + item.type, player.HubGuid);
                }
            }
        }
        private string StoreUser(HubContext context, string clientId)
        {
            var    cookie = context.Cookies["username"];
            string user;

            if (cookie != null)
            {
                _clients[clientId] = cookie.Value;
                user = cookie.Value;
            }
            else
            {
                user = clientId;
            }

            return(user);
        }
Пример #21
0
        public static void fleeCombat(PlayerSetup.Player player, Room.Room room)
        {
            if (player.Status == PlayerSetup.Player.PlayerStatus.Fighting)
            {
                HubContext.SendToClient("You Flee", player.HubGuid);

                //var exit = room.exits.Find(x => x.name.Equals("north", StringComparison.InvariantCultureIgnoreCase));

                player.Status = PlayerSetup.Player.PlayerStatus.Standing;
                HubContext.SendToClient(player.Name + " Flee's from combat", player.Target.HubGuid);

                Room.Movement.Move(player, room, "North");
            }
            else
            {
                HubContext.SendToClient("Flee from whom, you're not fighting anyone", player.HubGuid);
            }
        }
Пример #22
0
        public static void ShowPlayerSkills(Player player, string commandOption)
        {
            if (commandOption.StartsWith("all"))
            {
                ShowPlayerAllSkills(player);
            }
            else
            {
                HubContext.SendToClient("You currently know these skills:", player.HubGuid);

                foreach (var skill in player.Skills)
                {
                    HubContext.SendToClient(
                        "Level " + skill.LevelObtained + ": " + skill.Name + " " + skill.Proficiency + "%",
                        player.HubGuid);
                }
            }
        }
Пример #23
0
        private static async Task DoTeleport(Player attacker, Room room)
        {
            _taskRunnning   = true;
            attacker.Status = Player.PlayerStatus.Busy;


            await Task.Delay(500);


            var castingTextAttacker = "You close your eyes and open them to find yourself somewhere else.";

            HubContext.SendToClient(castingTextAttacker, attacker.HubGuid);

            var goToRoom = Areas.ListOfRooms()[Helpers.diceRoll.Next(Areas.ListOfRooms().Count)];


            foreach (var character in room.players)
            {
                if (character == attacker)
                {
                    continue;
                }

                if (character != attacker)
                {
                    var hisHer      = Helpers.ReturnHisOrHers(attacker, character, false);
                    var roomMessage =
                        $"{Helpers.ReturnName(attacker, character, string.Empty)} closes {hisHer} eyes and then vanishes, only wisps of smoke are left behind.";

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

            var randomExitFroMRandomRoom = goToRoom.exits[Helpers.diceRoll.Next(goToRoom.exits.Count)];

            Movement.Teleport(attacker, room, randomExitFroMRandomRoom);



            Player.SetState(attacker);

            _taskRunnning = false;
        }
Пример #24
0
        public void recieveFromClient(string message, String playerGuid)
        {
            Player PlayerData;
            Room   RoomData;

            _PlayerCache.TryGetValue(playerGuid, out PlayerData);



            var room = new Tuple <string, string, int>(PlayerData.Region, PlayerData.Area, PlayerData.AreaId);


            _AreaCache.TryGetValue(room, out RoomData);


            HubContext.SendToClient("<p style='color:#999'>" + message + "<p/>", PlayerData.HubGuid);

            Command.ParseCommand(message, PlayerData, RoomData);
        }
Пример #25
0
        public static async Task EmoteRoom()
        {
            //Loop every mob in the rooms in cache.
            // only emote if player is in the room

            foreach (var room in MIMHub._AreaCache.Values)
            {
                if (room.players.Count > 0)
                {
                    // check mob emotes

                    if (room.Emotes.Count > 0)
                    {
                        var emoteIndex = Helpers.diceRoll.Next(room.Emotes.Count);
                        HubContext.broadcastToRoom(room.Emotes[emoteIndex], room.players, String.Empty);
                    }
                }
            }
        }
Пример #26
0
        public static void Practice(Player player, Room room, string skillToPractice)
        {
            var foundTrainer = FindItem.Trainer(room.mobs);

            if (foundTrainer == null)
            {
                HubContext.SendToClient("There is no one here that can train you.", player.HubGuid);
                return;
            }

            if (skillToPractice == string.Empty)
            {
                ShowSkills(player);
            }
            else
            {
                PracticeSkill(player, foundTrainer, skillToPractice);
            }
        }
Пример #27
0
        private static async Task DoPunch(Player attacker, Room room)
        {
            _taskRunnning   = true;
            attacker.Status = Player.PlayerStatus.Busy;


            await Task.Delay(5000);


            //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("Punch", StringComparison.CurrentCultureIgnoreCase)).Proficiency, 95); // always 5% chance to miss
            int chance = die.dice(1, 100);


            if (toHit > chance)
            {
                //HIt, but what about defenders ability to block and dodge?



                if (attacker.Target != null && attacker.Target.HitPoints > 0)
                {
                    HubContext.SendToClient("Your punch hits", attacker.HubGuid);
                    HubContext.SendToClient(attacker.Name + " punch hits you", attacker.HubGuid, attacker.Target.HubGuid, false, true);
                    HubContext.broadcastToRoom(attacker.Name + " punches " + attacker.Target.Name, room.players, attacker.HubGuid, true);
                    attacker.Target.HitPoints -= dam;
                }


                //find target and hurt them, not yourself!!
            }
            else
            {
                HubContext.SendToClient("You swing a punch at " + attacker.Target.Name + " but miss", attacker.HubGuid);
                HubContext.SendToClient(attacker.Name + " swings a punch at you but misses", attacker.HubGuid, attacker.Target.HubGuid, false, true);
                HubContext.broadcastToRoom(attacker.Name + " swings at " + attacker.Target.Name + " but misses", room.players, attacker.HubGuid, true);
            }

            _taskRunnning   = false;
            attacker.Status = Player.PlayerStatus.Fighting;
        }
Пример #28
0
        /// <summary>
        /// Shows attack and damage to player
        /// </summary>
        /// <param name="attacker">the attacker</param>
        /// <param name="defender">the defender</param>
        /// <param name="room">The rom</param>
        /// <param name="toHit">Target tohit value</param>
        /// <param name="chance">Chance to hit value</param>
        /// <param name="skillUsed">This is used for skills and spells only</param>
        /// <param name="damage">This is used for skills and spells only</param>
        public static void ShowAttack(Player attacker, Player defender, Room room, double toHit, int chance, Skill skillUsed, int damage = 0)
        {
            bool alive      = IsAlive(attacker, defender);
            int  IsCritical = CriticalHit(toHit, chance);

            if (alive)
            {
                if (toHit > chance)
                {
                    var dam = damage > 0 ? damage : Damage(attacker, defender, IsCritical);

                    var damageText = DamageText(dam);


                    HubContext.SendToClient("Your " + WeaponAttackName(attacker, skillUsed).Key + " " + damageText.Value + " " + Helpers.ReturnName(defender, attacker, null) + " [" + dam + "]", attacker.HubGuid);

                    HubContext.SendToClient(Helpers.ReturnName(attacker, defender, null) + "'s " + WeaponAttackName(attacker, skillUsed).Value + " " + damageText.Value + " you [" + dam + "]", defender.HubGuid);

                    HubContext.SendToAllExcept(Helpers.ReturnName(attacker, defender, null) + "'s " + WeaponAttackName(attacker, skillUsed).Value + " " + damageText.Value + " " + Helpers.ReturnName(defender, attacker, null), room.fighting, room.players);

                    defender.HitPoints -= dam;

                    if (defender.HitPoints < 0)
                    {
                        defender.HitPoints = 0;
                    }


                    if (!IsAlive(attacker, defender))
                    {
                        IsDead(attacker, defender, room);
                    }
                }
                else
                {
                    HubContext.SendToClient("Your " + WeaponAttackName(attacker, skillUsed).Key + " misses " + Helpers.ReturnName(defender, attacker, null), attacker.HubGuid);

                    HubContext.SendToClient(Helpers.ReturnName(attacker, defender, null) + "'s " + WeaponAttackName(attacker, skillUsed).Key + " misses you ", defender.HubGuid);

                    HubContext.SendToAllExcept(Helpers.ReturnName(attacker, defender, null) + "'s " + WeaponAttackName(attacker, skillUsed).Key + " misses " + Helpers.ReturnName(defender, attacker, null), room.fighting, room.players);
                }
            }
        }
Пример #29
0
        public override async Task OnActivateAsync()
        {
            await base.OnActivateAsync();

            _hubContext = GrainFactory.GetHub <IHeroHub>();

            // todo: use key data
            var keySplit = PrimaryKey.Split('/');

            _keyData.Tenant  = keySplit[1];
            _keyData.HeroKey = keySplit[2];

            if (State.Hero == null)
            {
                var hero = await _heroDataClient.GetByKey(_keyData.HeroKey);

                if (hero == null)
                {
                    return;
                }

                await Set(hero);
            }

            var hubGroup    = _hubContext.Group($"hero:{_keyData.HeroKey}");
            var hubAllGroup = _hubContext.Group($"hero:all");

            var streamProvider = GetStreamProvider(Constants.STREAM_PROVIDER);
            var stream         = streamProvider.GetStream <Hero>(StreamConstants.HeroStream, $"hero:{_keyData.HeroKey}");

            RegisterTimer(async x =>
            {
                State.Hero.Health = RandomUtils.GenerateNumber(1, 100);

                await Task.WhenAll(
                    Set(State.Hero),
                    stream.OnNextAsync(State.Hero),
                    hubGroup.Send("HeroChanged", State.Hero),
                    hubAllGroup.Send("HeroChanged", State.Hero)
                    );
            }, State, TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(3));
        }
Пример #30
0
Файл: Who.cs Проект: sizzles/MIM
        public static void Connected(PlayerSetup.Player playerData)
        {
            var whoList = new StringBuilder();

            whoList.Append(Cache.ReturnPlayers().Count).Append(" Players currently playing <br />");
            foreach (var player in Cache.ReturnPlayers())
            {
                whoList.Append("<p>[")
                .Append(player.Level)
                .Append(" ")
                .Append(player.Race.Truncate(5))
                .Append(" ")
                .Append(player.SelectedClass.Truncate(3))
                .Append("]")
                .Append(" ")
                .Append(player.Name).Append("</p><br />");
            }

            HubContext.SendToClient(whoList.ToString(), playerData.HubGuid);
        }
 public ClockTask(HubContext<AppHub> hubContext)
 {
     _hubContext = hubContext;
 }
Пример #32
0
 public ReportRepository(HubContext context)
 {
     _context = context;
 }