/// <summary>
 ///
 /// </summary>
 /// <seealso cref="https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/sample-remove-role-user"/>
 /// <param name="target"></param>
 public void DisassociateRoleFromUser(RoleTargets target)
 {
     QueryExpression query = new QueryExpression("role")
     {
         ColumnSet = new ColumnSet("roleid"),
         Criteria  = new FilterExpression()
         {
             //Conditions = { new ConditionExpression("name",ConditionOperator.Equal,)}
         }
     };
 }
Exemple #2
0
        public void OnPhaseEnd(GamePhase gamePhase)
        {
            if (gamePhase == GamePhase.PICK_NAME)
            {
                foreach (Player player in GetAllPlayers())
                {
                    if (player.GetName() != null)
                    {
                        continue;
                    }

                    for (int i = 0; i < 40; i++)
                    {
                        String name = Messages.PickRandomName();

                        if (NameConflicts(name))
                        {
                            continue;
                        }

                        player.SetName(name);
                        break;
                    }

                    if (player.GetName() == null)
                    {
                        player.SetName("Player " + new Random().Next(1, 3000));
                    }
                }
            }
            else if (gamePhase == GamePhase.DAY_BEGIN)
            {
                died = GetDeadPlayers().FindAll(player => player.HasState(StateType.DEATH));
            }
            else if (gamePhase == GamePhase.VOTING)
            {
                String targets = new RoleTargets("vote").Serialize();

                GetLivingPlayers().ForEach(p => p.SendTargets(targets));
            }
        }
 public void RetrieveRolesFromUserOrganization(RoleTargets target)
 {
 }
Exemple #4
0
 public void SendTargets(RoleTargets action)
 {
     SendTargets(Newtonsoft.Json.JsonConvert.SerializeObject(action));
 }
Exemple #5
0
        public void OnMessage(Player player, String message)
        {
            Newtonsoft.Json.Linq.JObject obj = Newtonsoft.Json.Linq.JObject.Parse(message);
            JsonTypeReceive messageType      = (JsonTypeReceive)Enum.Parse(typeof(JsonTypeReceive), obj.GetValue("type").ToString());

            Newtonsoft.Json.Linq.JToken token = obj.GetValue("value");

            // If the player is talking
            if (messageType == JsonTypeReceive.MESSAGE)
            {
                HandleChat(player, token.ToString());
            }
            else if (messageType == JsonTypeReceive.WILL && player.IsAlive() && player.GetRole() != null)
            {
                String will = token.ToString().Trim();

                if (will.Length > 10000)
                {
                    will = will.Substring(0, 10000);
                }

                if (will.Length <= 0)
                {
                    lastWills.Remove(player);
                }
                else
                {
                    lastWills.Add(player, System.Web.HttpUtility.HtmlEncode(will));
                }
            }
            else if (messageType == JsonTypeReceive.DEATHNOTE && player.IsAlive() && player.GetRole() != null && player.GetRole().HasDeathNote())
            {
                String deathnote = token.ToString().Trim();

                if (deathnote.Length > 10000)
                {
                    deathnote = deathnote.Substring(0, 10000);
                }

                if (deathnote.Length <= 0)
                {
                    deathNotes.Remove(player);
                }
                else
                {
                    deathNotes.Add(player, System.Web.HttpUtility.HtmlEncode(deathnote));
                }
            }
            else if (messageType == JsonTypeReceive.NAME && GetGamePhase() == GamePhase.PICK_NAME)
            {
                String name = token.ToString().Trim();

                if (!new System.Text.RegularExpressions.Regex("(?!.*[ ]{2})[a-zA-Z ]{2,16}").IsMatch(name))
                {
                    player.SendMessage(Messages.INFO_INVALID_NAME);
                    return;
                }

                if (NameConflicts(name))
                {
                    player.SendMessage(Messages.INFO_NAME_EXISTS);
                    return;
                }

                if (player.GetName() == null)
                {
                    BroadcastMessage(String.Format(Messages.GAME_PICKED_NAME, name));
                }
                else
                {
                    BroadcastMessage(String.Format(Messages.GAME_PICKED_RENAME, player.GetName(), name));
                }

                player.SetName(name);
            }
            else if (messageType == JsonTypeReceive.ACTION)
            {
                RoleAction action = token.ToObject <RoleAction>();

                if (action.GetAbility().Equals("votes"))
                {
                    if (GetGamePhase() == GamePhase.VOTING)
                    {
                        if (action.GetTarget() < 0 || (votes.ContainsKey(player) && votes[player] == action.GetTarget()))
                        {
                            if (votes.ContainsKey(player))
                            {
                                int target = votes[player];
                                votes.Remove(player);

                                BroadcastMessage(String.Format(Messages.VOTING_UNVOTED_PLAYER, player.GetName(), GetAllPlayers()[target]));
                            }
                        }
                        else if (action.GetTarget() < GetAllPlayers().Count)
                        {
                            Player target = GetAllPlayers()[action.GetTarget()];

                            if (!target.IsAlive())
                            {
                                return;
                            }

                            BroadcastMessage(String.Format(votes.ContainsKey(player) ? Messages.VOTING_VOTED_ANOTHER_PLAYER : Messages.VOTING_VOTED_PLAYER, player.GetName(), target.GetName()));

                            votes.Add(player, action.GetTarget());
                        }

                        Dictionary <Player, int> voteCount = new Dictionary <Player, int>();
                        int votesNeeded = (GetLivingPlayers().Count / 2) + 1;

                        foreach (Player voter in votes.Keys)
                        {
                            Player p = GetAllPlayers()[votes[voter]];

                            if (!p.IsAlive())
                            {
                                // TODO Reset votes for this player

                                continue;
                            }

                            int newCount = (voteCount.ContainsKey(p) ? voteCount[p] : 0) + (voter.GetRole() is Mayor ? 3 : 1);

                            voteCount.Add(p, newCount);

                            if (newCount < votesNeeded)
                            {
                                continue;
                            }

                            String targets = new RoleTargets("vote").Serialize();

                            GetLivingPlayers().ForEach(pl => pl.SendTargets(targets));

                            SetGamePhase(GamePhase.VOTING_UP);
                            judged = p;
                        }
                    }
                    else if (GetGamePhase() == GamePhase.VOTING_DECISION)
                    {
                        if (action.GetTarget() < 0 || (votes.ContainsKey(player) && votes[player] == action.GetTarget()))
                        {
                            if (votes.ContainsKey(player))
                            {
                                int target = votes[player];
                                votes.Remove(player);

                                BroadcastMessage(String.Format(Messages.VOTING_JUDGEMENT_UNCAST, player.GetName(), GetAllPlayers()[target]));
                            }
                        }
                        else if (action.GetTarget() < GetAllPlayers().Count)
                        {
                            Player target = GetAllPlayers()[action.GetTarget()];

                            if (!target.IsAlive())
                            {
                                return;
                            }

                            BroadcastMessage(String.Format(votes.ContainsKey(player) ? Messages.VOTING_JUDGEMENT_SWITCH : Messages.VOTING_JUDGEMENT_CAST, player.GetName(), target.GetName()));

                            votes.Add(player, action.GetTarget());
                        }
                    }
                }
                else
                {
                    player.GetRole().DoAction(player, action);
                }
            }
        }
Exemple #6
0
        public void OnPhaseStart(GamePhase gamePhase)
        {
            if (gamePhase == GamePhase.ASSIGNING_ROLE)
            {
                List <Role> roles = GetRoles();
                Shuffle(roles);
                Shuffle(GetAllPlayers());

                for (int i = 0; i < roles.Count; i++)
                {
                    Player player = GetAllPlayers()[i];
                    player.SetRoleAndPosition(roles[i], i);

                    player.SendMessage(String.Format(Messages.INFO_RECEIVED_ROLE, roles[i].GetName()));
                }
            }
            else if (gamePhase == GamePhase.DEATH_NAME)
            {
                BroadcastMessage(String.Format(Messages.ANNOUNCE_DEATH_NAME, died[0].GetName()));

                List <String> diedFrom = (List <String>)died[0].GetState(StateType.DEATH).GetExtraInfo();

                String death = "";

                for (int i = 0; i < diedFrom.Count; i++)
                {
                    death += (i > 0 ? ", " : "") + String.Format(diedFrom[i], i == 0 ? "He" : "he", i == 0 ? "" : "also ");
                }

                BroadcastMessage(death);
            }
            else if (gamePhase == GamePhase.DEATH_WILL_EXISTS)
            {
                if (lastWills.ContainsKey(died[0]))
                {
                    Announce(Messages.ANNOUNCE_DEATH_WILL_FOUND);
                }
                else
                {
                    Announce(Messages.ANNOUNCE_DEATH_WILL_NOT_FOUND);
                }
            }
            else if (gamePhase == GamePhase.DEATH_WILL_DISPLAY)
            {
                String lastWill = lastWills[died[0]];

                GetAllPlayers().ForEach(p => p.SendWill(lastWill));
            }
            else if (gamePhase == GamePhase.DEATH_DEATHNOTE_FOUND)
            {
                Announce(Messages.ANNOUNCE_DEATH_DEATHNOTE);
            }
            else if (gamePhase == GamePhase.DEATH_ROLE) // This was their role
            {
                Announce(String.Format(Messages.ANNOUNCE_DEATH_ROLE, died[0].GetRole().GetName()));

                died[0].RemoveState(StateType.DEATH);
                died.RemoveAt(0);
            }
            else if (gamePhase == GamePhase.VOTING)
            {
                String targets = new RoleTargets("vote", GetLivingPlayers()).Serialize();

                GetLivingPlayers().ForEach(p => p.SendTargets(targets));
            }
            else if (gamePhase == GamePhase.VOTING_DEATH_WILL_DISPLAY)
            {
                String lastWill = lastWills[judged];

                GetAllPlayers().ForEach(p => p.SendWill(lastWill));
            }
            else if (gamePhase == GamePhase.VOTING_DEATH_ROLE)
            {
                Announce(String.Format(Messages.ANNOUNCE_DEATH_ROLE, judged.GetRole().GetName()));
            }
        }