Ejemplo n.º 1
0
        private static void HandleCombatLogTH(object sender, LuaEventArgs args)
        {
            var e = new CombatLogEventArgs(args.EventName, args.FireTimeStamp, args.Args);

            if (e.DestUnit == null ||
                e.Event != "SPELL_AURA_REFRESH" &&
                e.Event != "SPELL_AURA_APPLIED" ||
                !IsEnemy(e.DestUnit) ||
                !DisorientsHS.Contains(e.SpellId) &&
                !ControlStunHS.Contains(e.SpellId))
            {
                return;
            }

            if (DisorientsHS.Contains(e.SpellId))
            {
                DisorientsAdd(e.DestUnit);
                //Logging.Write(DateTime.Now.ToString("ss:fff") + " " +
                //              e.DestName +
                //              " got DisorientsHS "
                //              + e.SpellName);
            }

            if (ControlStunHS.Contains(e.SpellId))
            {
                ControlStunAdd(e.DestUnit);
                //Logging.Write(DateTime.Now.ToString("ss:fff") + " " +
                //              e.DestName +
                //              " got ControlStunHS "
                //              + e.SpellName);
            }

            //Logging.Write("[CombatLogAll] " + e.Event + " - " + e.SourceName + " - " + e.SpellName);

            //switch (e.Event)
            //{
            //        //default:
            //        //    Logging.Write("[CombatLog] filter out this event - " + e.Event + " - " + e.SourceName + " - " +
            //        //                  e.SpellName);
            //        //    break;

            //    case "SPELL_AURA_APPLIED":
            //        Logging.Write(e.DestName + " got SPELL_AURA_APPLIED " + e.SpellName);
            //        break;
            //        //case "SPELL_AURA_REFRESH":
            //        //    Logging.Write(e.SourceUnit.Name + " got SPELL_AURA_REFRESH " + e.SpellName);
            //        //    break;
            //        //case "SPELL_AURA_REMOVED":
            //        //    Logging.Write(e.SourceUnit.Name + " got SPELL_AURA_REFRESH " + e.SpellName);
            //        //    break;
            //}
        }
Ejemplo n.º 2
0
        private static void HandleEvadeBuggedMob(LuaEventArgs args, CombatLogEventArgs e)
        {
            WoWUnit unit = e.DestUnit;
            ulong   guid = e.DestGuid;

            if (unit == null && StyxWoW.Me.CurrentTarget != null)
            {
                unit = StyxWoW.Me.CurrentTarget;
                guid = StyxWoW.Me.CurrentTargetGuid;
                Logging.Write("Evade: bugged mob guid:{0}, so assuming current target instead", args.Args[7]);
            }

            if (unit != null)
            {
                if (!MobsThatEvaded.ContainsKey(unit.Guid))
                {
                    MobsThatEvaded.Add(unit.Guid, 0);
                }

                MobsThatEvaded[unit.Guid]++;
                if (MobsThatEvaded[unit.Guid] <= 5)
                {
                    Logging.Write("Mob {0} has evaded {1} times.  Keeping an eye on {2:X0} for now!", unit.Name,
                                  MobsThatEvaded[unit.Guid], unit.Guid);
                }
                else
                {
                    const int secondsToBlacklist = 10;

                    if (Blacklist.Contains(unit.Guid, BlacklistFlags.Combat))
                    {
                        Logging.Write(Colors.LightGoldenrodYellow,
                                      "Mob {0} has evaded {1} times. Previously blacklisted {2:X0} for {3} seconds!",
                                      unit.Name, MobsThatEvaded[unit.Guid], unit.Guid, secondsToBlacklist);
                    }
                    else
                    {
                        Logging.Write(Colors.LightGoldenrodYellow,
                                      "Mob {0} has evaded {1} times. Blacklisting {2:X0} for {3} seconds!", unit.Name,
                                      MobsThatEvaded[unit.Guid], unit.Guid, secondsToBlacklist);
                        Blacklist.Add(unit.Guid, BlacklistFlags.Combat, TimeSpan.FromSeconds(secondsToBlacklist));
                        if (!Blacklist.Contains(unit.Guid, BlacklistFlags.Combat))
                        {
                            Logging.Write(Colors.Pink, "error: blacklist does not contain entry for {0} so adding {1}",
                                          unit.Name, unit.Guid);
                        }
                    }

                    if (BotPoi.Current.Guid == unit.Guid)
                    {
                        Logging.Write("EvadeHandling: Current BotPOI type={0} is Evading, clearing now...",
                                      BotPoi.Current.Type);
                        BotPoi.Clear("Singular recognized Evade bugged mob");
                    }

                    if (StyxWoW.Me.CurrentTargetGuid == guid)
                    {
                        foreach (var target in Targeting.Instance.TargetList)
                        {
                            if (target.IsAlive && Classname.ValidUnit(target) &&
                                !Blacklist.Contains(target, BlacklistFlags.Combat))
                            {
                                Logging.Write(Colors.Pink, "Setting target to {0} to get off evade bugged mob!",
                                              target.Name);
                                target.Target();
                                return;
                            }
                        }

                        Logging.Write(Colors.Pink,
                                      "BotBase has 0 entries in Target list not blacklisted -- nothing else we can do at this point!");
                        // StyxWoW.Me.ClearTarget();
                    }
                }
            }

            /// line below was originally in Evade logic, but commenting to avoid Sleeps
            // StyxWoW.SleepForLagDuration();
        }
Ejemplo n.º 3
0
        private static void HandleCombatLog(object sender, LuaEventArgs args)
        {
            var e = new CombatLogEventArgs(args.EventName, args.FireTimeStamp, args.Args);

            if (e.SourceGuid != StyxWoW.Me.Guid)
            {
                return;
            }

            //Logging.Write("[CombatLog] " + e.Event + " - " + e.SourceName + " - " + e.Spell.Name);

            switch (e.Event)
            {
            default:
                Logging.Write("[CombatLog] filter out this event -- " + e.Event + " - " + e.SourceName + " - " +
                              e.Spell.Name);
                break;

            // spell_cast_failed only passes filter in Singular debug mode
            case "SPELL_CAST_FAILED":
                CastFailReason = e.Args[14].ToString();

                if (CastFailReason != "Your target is dead" &&
                    CastFailReason != "No target" &&
                    CastFailReason != "Not yet recovered")
                {
                    Logging.Write(LogLevel.Diagnostic, "[CombatLog] {0} {1}#{2} failure: '{3}'", e.Event,
                                  e.Spell.Name,
                                  e.SpellId,
                                  CastFailReason);
                }

                if (CastFailReason != LocalizedAnotheractionisinprogress)
                {
                    Classname.CastFailed = true;
                }

                //if (e.Args[14].ToString() == LocalizedLineOfSightError)
                //{
                //    LastLineOfSightError = DateTime.Now;
                //    Logging.Write("[CombatLog] cast fail due to los reported at {0}",
                //                  LastLineOfSightError.ToString("HH:mm:ss.fff"));
                //}
                //else if (StyxWoW.Me.Class == WoWClass.Druid && SingularRoutine.IsQuestBotActive)
                //{
                //    if (LocalizedShapeshiftErrors.Contains(e.Args[14].ToString()))
                //    {
                //        LastShapeshiftError = DateTime.Now;
                //        Logging.Write(
                //            "[CombatLog] cast fail due to shapeshift error while questing reported at {0}",
                //            LastShapeshiftError.ToString("HH:mm:ss.fff"));
                //    }
                //}
                break;

            //case "SPELL_AURA_APPLIED":
            //    Classname.LastCastSpell = e.SpellName;
            //    Classname.LastCastTime = DateTime.Now;
            //    //    break;
            //case "SPELL_CAST_START":
            //    Classname.LastCastSpell = e.SpellName;
            //    Classname.LastCastTime = DateTime.Now;
            //    break;
            //case "SPELL_CAST_SUCCESS":
            //    Classname.LastCastSpell = e.SpellName;
            //    Classname.LastCastTime = DateTime.Now;

            // Update the last spell we cast. So certain classes can 'switch' their logic around.
            //Spell.LastSpellCast = e.SpellName;
            //Logging.Write("Successfully cast " + Spell.LastSpellCast);

            // following commented block should not be needed since rewrite of Pet summon
            //
            //// Force a wait for all summoned minions. This prevents double-casting it.
            //if (StyxWoW.Me.Class == WoWClass.Warlock && e.SpellName.StartsWith("Summon "))
            //{
            //    StyxWoW.SleepForLagDuration();
            //}
            //break;

            case "SWING_MISSED":
                if (e.Args[11].ToString() == "EVADE")
                {
                    HandleEvadeBuggedMob(args, e);
                }
                else if (e.Args[11].ToString() == "IMMUNE")
                {
                    WoWUnit unit = e.DestUnit;
                    if (unit != null && !unit.IsPlayer)
                    {
                        Logging.Write("{0} is immune to Physical spell school", unit.Name);
                    }
                }
                break;

            case "SPELL_MISSED":
            case "RANGE_MISSED":
                // Why log misses?  Because users of classes with DoTs testing on training dummies
                // .. that they don't have enough +Hit for will get DoT spam.  This allows easy
                // .. diagnosis of false reports of rotation issues where a user simply isn't geared
                // .. this happens more at the beginning of an expansion especially
                Logging.Write(
                    "[CombatLog] {0} {1}#{2} {3}",
                    e.Event,
                    e.Spell.Name,
                    e.SpellId,
                    e.Args[14]
                    );

                if (e.Args[14].ToString() == "EVADE")
                {
                    HandleEvadeBuggedMob(args, e);
                }
                else if (e.Args[14].ToString() == "IMMUNE")
                {
                    WoWUnit unit = e.DestUnit;
                    if (unit != null && !unit.IsPlayer)
                    {
                        Logging.Write("{0} is immune to {1} spell school", unit.Name, e.SpellSchool);
                    }
                }
                break;
            }
        }