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); }
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); }
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); }
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); }
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); } }