示例#1
0
        private static bool HasOwner(string name, out string owner)
        {
            bool hasOwner = false;

            owner = null;

            if (!string.IsNullOrEmpty(name))
            {
                int pIndex = name.IndexOf("`s ", StringComparison.Ordinal);
                if ((pIndex > -1 && IsPetOrMount(name, pIndex + 3, out _)) || (pIndex = name.LastIndexOf(" pet", StringComparison.Ordinal)) > -1)
                {
                    var verifiedPet = PlayerManager.Instance.IsVerifiedPet(name);
                    if (verifiedPet || Helpers.IsPossiblePlayerName(name, pIndex))
                    {
                        owner    = name.Substring(0, pIndex);
                        hasOwner = true;

                        if (!verifiedPet && PlayerManager.Instance.IsPetOrPlayer(owner))
                        {
                            PlayerManager.Instance.AddVerifiedPet(name);
                        }
                    }
                }
            }

            return(hasOwner);
        }
示例#2
0
        private static bool CheckForPetLeader(string action)
        {
            bool handled = false;

            if (action.Length >= 28 && action.Length < 75)
            {
                int index = action.IndexOf(" says, 'My leader is ", StringComparison.Ordinal);
                if (index > -1)
                {
                    string pet = action.Substring(0, index);
                    if (!PlayerManager.Instance.IsVerifiedPlayer(pet)) // thanks idiots for this
                    {
                        int period = action.IndexOf(".", index + 24, StringComparison.Ordinal);
                        if (period > -1)
                        {
                            string owner = action.Substring(index + 21, period - index - 21);

                            if (!Helpers.IsPossiblePlayerName(pet) && (pet.StartsWith("A ", StringComparison.Ordinal) || pet.StartsWith("An ", StringComparison.Ordinal)))
                            {
                                pet = pet.ToLower(CultureInfo.CurrentCulture);
                            }

                            PlayerManager.Instance.AddVerifiedPlayer(owner);
                            PlayerManager.Instance.AddVerifiedPet(pet);
                            PlayerManager.Instance.AddPetToPlayer(pet, owner);
                        }
                    }

                    handled = true;
                }
            }

            return(handled);
        }
示例#3
0
        internal void Save()
        {
            if (PetMappingUpdated)
            {
                var filtered = PetToPlayer.Where(keypair => Helpers.IsPossiblePlayerName(keypair.Key) && Helpers.IsPossiblePlayerName(keypair.Value) && keypair.Value != Labels.UNASSIGNED);
                ConfigUtil.SavePetMapping(filtered);
                PetMappingUpdated = false;
            }

            if (PlayersUpdated)
            {
                ConfigUtil.SavePlayers(VerifiedPlayers.Keys.ToList());
                PlayersUpdated = false;
            }
        }
        internal static bool IsValidHeal(HealRecord record)
        {
            bool valid = false;

            if (record != null && (Helpers.IsPossiblePlayerName(record.Healed) || PlayerManager.Instance.IsPetOrPlayer(record.Healed)))
            {
                valid = true;
                SpellData spellData;
                if (record.SubType != null && (spellData = DataManager.Instance.GetSpellByName(record.SubType)) != null)
                {
                    if (spellData.Target == (byte)SpellTarget.TARGETAE || spellData.Target == (byte)SpellTarget.NEARBYPLAYERSAE ||
                        spellData.Target == (byte)SpellTarget.TARGETRINGAE)
                    {
                        valid = MainWindow.IsAoEHealingEnabled;
                    }
                }
            }

            return(valid);
        }
示例#5
0
        private static bool CheckForPlayersOrNPCs(string action)
        {
            bool found = false;

            if (action.Length > 10)
            {
                int index;
                if (action.Length > 20 && action.StartsWith("Targeted (", StringComparison.Ordinal))
                {
                    if (action[10] == 'P' && action[11] == 'l') // Player
                    {
                        PlayerManager.Instance.AddVerifiedPlayer(action.Substring(19));
                    }

                    found = true; // ignore anything that starts with Targeted
                }
                else if (action.Length < 27 && (index = action.IndexOf(" shrinks.", StringComparison.Ordinal)) > -1 &&
                         (index + 9) == action.Length && Helpers.IsPossiblePlayerName(action, index))
                {
                    string test = action.Substring(0, index);
                    PlayerManager.Instance.AddPetOrPlayerAction(test);
                    found = true;
                }
                else if (action.Length < 35 && (index = action.IndexOf(" joined the raid.", StringComparison.Ordinal)) > -1 &&
                         (index + 17) == action.Length && Helpers.IsPossiblePlayerName(action, index))
                {
                    string test = action.Substring(0, index);
                    PlayerManager.Instance.AddVerifiedPlayer(test);
                    found = true;
                }
                else if (action.Length < 60 && (index = action.IndexOf(" has joined the group.", StringComparison.Ordinal)) > -1)
                {
                    string test = action.Substring(0, index);
                    PlayerManager.Instance.AddPetOrPlayerAction(test);
                    found = true;
                }
            }

            return(found);
        }
        private static bool IsValidAttack(DamageRecord record, double currentTime, out bool defender)
        {
            bool valid = false;

            defender = false;

            if (!record.Attacker.Equals(record.Defender, StringComparison.OrdinalIgnoreCase))
            {
                var isDefenderNpc    = record.Defender.StartsWith("Combat Dummy", StringComparison.OrdinalIgnoreCase) || DataManager.Instance.IsKnownNpc(record.Defender);
                var isAttackerNpc    = record.Attacker.StartsWith("Combat Dummy", StringComparison.OrdinalIgnoreCase) || DataManager.Instance.IsKnownNpc(record.Attacker);
                var isAttackerPlayer = PlayerManager.Instance.IsPetOrPlayer(record.Attacker);

                if (isDefenderNpc && !isAttackerNpc)
                {
                    valid    = isAttackerPlayer || Helpers.IsPossiblePlayerName(record.Attacker);
                    defender = true;
                }
                else if (!isDefenderNpc && isAttackerNpc)
                {
                    valid    = true;
                    defender = false;
                }
                else if (!isDefenderNpc && !isAttackerNpc)
                {
                    var isDefenderPlayer = PlayerManager.Instance.IsPetOrPlayer(record.Defender);
                    valid    = (isAttackerPlayer || !Helpers.IsPossiblePlayerName(record.Attacker)) && !isDefenderPlayer;
                    defender = true;
                }
                else if (isDefenderNpc && isAttackerNpc && DataManager.Instance.GetFight(record.Defender, currentTime) != null &&
                         DataManager.Instance.GetFight(record.Attacker, currentTime) == null)
                {
                    valid    = true;
                    defender = true;
                }
            }

            return(valid);
        }
示例#7
0
 private void AddPlayer(string value)
 {
     if (!string.IsNullOrEmpty(value))
     {
         string player = value.ToLower(CultureInfo.CurrentCulture);
         if (!PlayerCache.ContainsKey(player) && !PlayerManager.Instance.IsVerifiedPet(player) && Helpers.IsPossiblePlayerName(player))
         {
             PlayerCache[player] = 1;
             PlayerCacheUpdated  = true;
         }
     }
 }
        private void Load()
        {
            if (!Running)
            {
                Running = true;

                Task.Delay(75).ContinueWith(task =>
                {
                    Helpers.SetBusy(true);

                    lock (CollectionLock)
                    {
                        EventRows.Clear();
                    }

                    var rows = new List <EventRow>();
                    DataManager.Instance.GetDeathsDuring(0, double.MaxValue).ForEach(block =>
                    {
                        block.Actions.ForEach(action =>
                        {
                            if (action is DeathRecord death)
                            {
                                if (!(PlayerManager.Instance.IsVerifiedPet(death.Killed) && !Helpers.IsPossiblePlayerName(death.Killed)))
                                {
                                    var isActorNpc     = DataManager.Instance.IsLifetimeNpc(death.Killer) || DataManager.Instance.IsKnownNpc(death.Killer);
                                    var isTargetNpc    = DataManager.Instance.IsLifetimeNpc(death.Killed) || DataManager.Instance.IsKnownNpc(death.Killed);
                                    var isActorPlayer  = PlayerManager.Instance.IsPetOrPlayerOrSpell(death.Killer);
                                    var isTargetPlayer = PlayerManager.Instance.IsPetOrPlayer(death.Killed);

                                    string text = KILLSHOT_EVENT;
                                    if (isTargetPlayer && isActorPlayer)
                                    {
                                        text = PLAYERKILL_EVENT;
                                    }
                                    else if (isTargetPlayer || (isActorNpc && !isTargetNpc && Helpers.IsPossiblePlayerName(death.Killed)))
                                    {
                                        text = PLAYERSLAIN_EVENT;
                                    }

                                    rows.Add(new EventRow()
                                    {
                                        Time = block.BeginTime, Actor = death.Killer, Target = death.Killed, Event = text
                                    });
                                }
                            }
                        });
                    });

                    DataManager.Instance.GetMiscDuring(0, double.MaxValue).ForEach(block =>
                    {
                        block.Actions.ForEach(action =>
                        {
                            if (action is MezBreakRecord mezBreak)
                            {
                                rows.Add(new EventRow()
                                {
                                    Time = block.BeginTime, Actor = mezBreak.Breaker, Target = mezBreak.Awakened, Event = MEZBREAK_EVENT
                                });
                            }
                            else if (action is ZoneRecord zone)
                            {
                                rows.Add(new EventRow()
                                {
                                    Time = block.BeginTime, Actor = ConfigUtil.PlayerName, Event = ZONE_EVENT, Target = zone.Zone
                                });
                            }
                        });
                    });

                    rows.Sort((a, b) => a.Time.CompareTo(b.Time));
                    rows.ForEach(row => EventRows.Add(row));

                    Helpers.SetBusy(false);

                    Dispatcher.InvokeAsync(() =>
                    {
                        UpdateUI(rows.Count > 0);
                        Running = false;
                    });
                }, TaskScheduler.Default);
            }
        }