Пример #1
0
        /// <summary>
        /// Envoie un mess
        /// </summary>
        /// <param name="player"></param>
        /// <param name="room"></param>
        /// <param name="message"></param>
        /// <returns>True si envoyé avec succès.</returns>
        public bool SendGlobalMessage(Guid player, string message)
        {
            try
            {
                using (MilleBornesEntities context = new MilleBornesEntities())
                {
                    int userId = context.LoggedInUser.Where(p => p.Token == player)
                        .ToList().First().UserId;

                    Message msg = new Message();
                    msg.Content = message;
                    msg.Date = DateTime.UtcNow;
                    msg.UserId = userId;
                    msg.Type = MessageType.GLOBAL;

                    context.Message.Add(msg);
                    context.SaveChanges();
                }

                return true;
            }
            catch
            {
                return false;
            }
        }
Пример #2
0
        /// <summary>
        /// Parse la commande demandée par l'utilisateur dans le message.
        /// </summary>
        /// <param name="input"></param>
        /// <returns>True si succès, false autrement</returns>
        /// o /teams                    => affiche les équipes.
        /// o /status                   => affiche le status des gens (prêt, pas prêt, j'y vais! :^)
        /// o /validate                 => Valide la composition et les équipes et retourne ce qui ne va pas!
        /// o /kick [name]; [reason]    => Kick le joueur "name" avec la raison "reason".
        private bool GetCommandOuput(Guid player, Guid room, string input)
        {
            try
            {
                using (MilleBornesEntities context = new MilleBornesEntities())
                {
                    User caller = context.LoggedInUser.First(p => p.Token == player).User;

                    var lstPlayers = context.PlayerRoomState
                            .Where(p => p.Room.Token == room)
                            .OrderBy(o => o.Team);

                    string output = "";

                    if (input.StartsWith("/teams"))
                    {
                        output = "**" + caller.Name + " a demandé à afficher les équipes.**\r\n";

                        foreach (PlayerRoomState prs in lstPlayers)
                            output += "   - [" + prs.Team.ToString() + "] " + prs.User.Name + "\r\n";
                    }
                    else if (input.StartsWith("/status"))
                    {
                        output = "**" + caller.Name + " a demandé à afficher les status:**\r\n";

                        foreach (PlayerRoomState prs in lstPlayers)
                            output += "   - [" + (prs.IsReady ? "Prêt" : "Pas prêt") + "] " + prs.User.Name + "\r\n";
                    }
                    else if (input.StartsWith("/validate"))
                    {
                        // Les équipes sont-elles balancées?
                        // Les joueurs sont-ils prêts?
                        if (lstPlayers.Where(p => p.IsReady == false).Count() > 0)
                            output += "  - Certains joueurs ne sont pas prêts. (/status)\r\n";

                        byte t1 = 0;
                        byte t2 = 0;
                        byte t3 = 0;

                        foreach (var user in lstPlayers)
                        {
                            if (user.Team == 0)
                                t1++;
                            else if (user.Team == 1)
                                t2++;
                            else
                                t3++;
                        }

                        // On regarde si il y a moins de 2 équipes
                        if (t1 == 0 && (
                            (t2 == 0 || t3 == 0) ||
                            (t1 == 0 || t3 == 0)
                            ))
                        {
                            output += "  - Il y a moins de 2 équipes! (/teams)\r\n";
                        }

                        // Si 2 équipe, et la troisième vide.
                        if ((t1 != t2 && t3 == 0) ||
                            (t2 != t3 && t1 == 0) ||
                            (t3 != t1 && t2 == 0))
                        {
                            output += "  - Équipes non équilibrées! (/teams)\r\n";
                        }

                        // Si aucune erreur
                        if (output == "")
                        {
                            output += "**Validation (/validate): Tous les éléments sont prêt pour commencer une belle partie!**";
                        }
                        else
                        {
                            output = "**Validation (/validate) échouée.**\r\nRaison:\r\n" + output;
                        }
                    }
                    else if (input.StartsWith("/kick ") && input.Length > "/kick ".Length + 1 && input.Contains(";"))
                    {
                        // Si le caller est le master.
                        if (context.Room.First(p => p.Token == room).MasterUserId == caller.UserId)
                        {
                            string kName = input.Substring("/kick ".Length, input.IndexOf(';') - "/kick ".Length);
                            string reason = input.Substring(input.IndexOf(';') + 1);

                            Guid pId = context.LoggedInUser.First(p => p.User.Name == kName).Token;
                            LeaveRoom(pId, room);

                            output = "**Le joueur " + kName + " a été kické de la salle.**\r\nRaison: " + reason;
                        }
                        else
                        {
                            output = "**Avertissement. Seul le maître peut kicker un joueur.**";
                        }
                    }
                    else
                    {
                        return false;
                    }

                    if (output.Length == 0)
                        return true;

                    Room r = context.Room.First(p => p.Token == room);
                    Message msg = new Message();
                    msg.Content = output;
                    msg.Date = DateTime.UtcNow;
                    msg.Type = MessageType.ROOM; // 1== room.
                    msg.UserId = 5; // sys
                    msg.Room.Add(r);

                    context.Message.Add(msg);
                    context.SaveChanges();

                    return true;
                }
            }
            catch
            {
            }

            return false;
        }