private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (dontRefresh) return;
     string conflict = lstConflicts.SelectedItem.ToString();
     string[] conflictSplit = conflict.Split(':');
     selectedFunnel = "";
     lstFunnel.SelectedIndex = -1;
     if (MainForm.SelectedCharacter != null && ConflictManager.Instance.ConflictRules.ContainsKey(MainForm.SelectedCharacter.Name)
                                             && ConflictManager.Instance.ConflictRules[MainForm.SelectedCharacter.Name].ContainsKey(conflictSplit[1]))
     {
         try
         {
             selectedConflict = ConflictManager.Instance.ConflictRules[MainForm.SelectedCharacter.Name][conflictSplit[1]][(ConflictRule.ConflictTypes)Enum.Parse(typeof(ConflictRule.ConflictTypes), conflictSplit[0])];
             tabConflictRule.Enabled = true;
             RefreshSelectedConflict();
         }
         catch (Exception ex)
         {
             ConflictManager.Instance.DebugException(ex);
             selectedConflict = null;
             tabConflictRule.Enabled = false;
         }
         
     }
 }
 public void SetFunnel(Character character, ConflictRule selectedConflict, string selectedFunnel)
 {
     conflictRules[character.Name][selectedConflict.FullEventName][selectedConflict.ConflictType].AddFunnel(selectedFunnel);
     SaveSettings(character);
 }
 public void SetRule(Character character, string fullEventName, ConflictRule.ConflictTypes conflictType, string clientName, bool ruleState)
 {
     lock (conflictRules)
     {
         if (conflictRules.ContainsKey(character.Name) && conflictRules[character.Name].ContainsKey(fullEventName) && conflictRules[character.Name][fullEventName].ContainsKey(conflictType))
         {
             bool changed = false;
             ConflictRule rule = conflictRules[character.Name][fullEventName][conflictType];
             if (rule.ClientsRules.ContainsKey(clientName) && rule.ClientsRules[clientName] != ruleState) changed = true;
             rule.ClientsRules[clientName] = ruleState;
             if (rule.UnsolvedClients.Contains(clientName)) rule.UnsolvedClients.Remove(clientName);
             if (rule.UnsolvedClients.Count == 0) rule.Solved = true;
             conflictRules[character.Name][fullEventName][conflictType] = rule;
             if (changed) SaveSettings(character);
         }
     }
 }
 private void CreateRule(string character, string fullEventName, ConflictRule.ConflictTypes conflictType, List<string> clientsList, ConflictSettings.DefaultRuleType defaultRule)
 {
     ConflictRule cr = new ConflictRule(fullEventName, conflictType);
     if (defaultRule != ConflictSettings.DefaultRuleType.Ignore)
     {
         foreach (string client in clientsList) cr.ClientsRules[client] = defaultRule == ConflictSettings.DefaultRuleType.All;
     }
     else
     {
         foreach (string client in clientsList) cr.UnsolvedClients.Add(client);
     }
     if (!conflictRulesBuffer.ContainsKey(character)) conflictRulesBuffer[character] = new Dictionary<string, Dictionary<ConflictRule.ConflictTypes, ConflictRule>>();
     if (!conflictRulesBuffer[character].ContainsKey(fullEventName)) conflictRulesBuffer[character][fullEventName] = new Dictionary<ConflictRule.ConflictTypes, ConflictRule>();
     conflictRulesBuffer[character][fullEventName][conflictType] = cr;
 }
 private bool IsRuleSolved(string character, string fullEventName, ConflictRule.ConflictTypes conflictType, List<string> clientsList, ConflictSettings.DefaultRuleType defaultRule)
 {
     if (!conflictRules.ContainsKey(character)) return false;
     if (!conflictRules[character].ContainsKey(fullEventName)) return false;
     if (!conflictRules[character][fullEventName].ContainsKey(conflictType)) return false;
     if (!conflictRules[character][fullEventName][conflictType].Solved) return false;
     return true;
 }
        private void RefreshInfo()
        {
            dontRefresh = true;
            if (MainForm.SelectedCharacter !=null && ConflictManager.Instance.ConflictRules.ContainsKey(MainForm.SelectedCharacter.Name)) {
                lstConflicts.Enabled = true;
                lstConflicts.Items.Clear();
                foreach (string conflictEvent in ConflictManager.Instance.ConflictRules[MainForm.SelectedCharacter.Name].Keys)
                {
                    foreach (KeyValuePair<ConflictRule.ConflictTypes, ConflictRule> conflictType in ConflictManager.Instance.ConflictRules[MainForm.SelectedCharacter.Name][conflictEvent])
                    {
                        lstConflicts.Items.Add(conflictType.Key.ToString() + ":" + conflictType.Value.FullEventName);
                    }
                }

                if (selectedConflict != null)
                {
                    tabConflictRule.Enabled = true;
                    bool found = false;
                    for (int i = 0; i < lstConflicts.Items.Count; i++)
                    {
                        if (lstConflicts.Items[i].ToString() == selectedConflict.ConflictType + ":" + selectedConflict.FullEventName)
                        {
                            lstConflicts.SelectedIndex = i;
                            found = true;
                            break;
                        }
                    }
                    if (!found) selectedConflict = null;
                    else
                    {
                        RefreshSelectedConflict();
                    }
                }
                else
                {
                    tabConflictRule.Enabled = false;
                }

                switch (ConflictManager.Instance.DefaultRuleOnActionPublishingConflict)
                {
                    case ConflictSettings.DefaultRuleType.All:
                        radActionPublishersAll.Checked = true;
                        break;
                    case ConflictSettings.DefaultRuleType.Ignore:
                        radActionPublishersIgnore.Checked = true;
                        break;
                    default:
                        radActionPublishersNone.Checked = true;
                        break;
                }
                switch (ConflictManager.Instance.DefaultRuleOnActionSubscriptionConflict)
                {
                    case ConflictSettings.DefaultRuleType.All:
                        radActionSubscribersAll.Checked = true;
                        break;
                    case ConflictSettings.DefaultRuleType.Ignore:
                        radActionSubscribersIgnore.Checked = true;
                        break;
                    default:
                        radActionSubscribersNone.Checked = true;
                        break;
                }
                switch (ConflictManager.Instance.DefaultRuleOnPerceptionPublishingConflict)
                {
                    case ConflictSettings.DefaultRuleType.All:
                        radPerceptionPublishersAll.Checked = true;
                        break;
                    case ConflictSettings.DefaultRuleType.Ignore:
                        radPerceptionPublishersIgnore.Checked = true;
                        break;
                    default:
                        radPerceptionPublishersNone.Checked = true;
                        break;
                }
                switch (ConflictManager.Instance.DefaultRuleOnPerceptionSubscriptionConflict)
                {
                    case ConflictSettings.DefaultRuleType.All:
                        radPerceptionSubscribersAll.Checked = true;
                        break;
                    case ConflictSettings.DefaultRuleType.Ignore:
                        radPerceptionSubscribersIgnore.Checked = true;
                        break;
                    default:
                        radPerceptionSubscribersNone.Checked = true;
                        break;
                }
            }
            else{
                lstConflicts.Enabled = false;
                lstConflicts.Items.Clear();
                lstConflicts.Items.Add("No Conflicts.");
            }
            
            dontRefresh = false;
        }