예제 #1
0
        static void ListenForTells()
        {
            foreach (String playerName in EQScreen.GetAllPlayerNames())
            {
                if (playerName == "Unknown")
                {
                    continue;
                }

                new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;

                    String path = @"C:\Users\Peter\Desktop\eq\everquest_rof2\Logs\eqlog_" + playerName + "_EQ Reborn.txt";
                    // https://hooks.slack.com/services/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 // croc-bot incoming

                    //[Sun Feb 10 18:16:02 2019] Ghaleon tells you, 'neil is gettin close to my place'
                    Regex tellRx = new Regex(@"\[.*\] ([^\s]*) tells you, \'(.*)\'", RegexOptions.Compiled | RegexOptions.IgnoreCase);

                    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                        using (var sr = new StreamReader(fs, Encoding.Default))
                        {
                            while (sr.ReadLine() != null)
                            {
                            }

                            while (true)
                            {
                                string line = sr.ReadLine();
                                if (line != null)
                                {
                                    Match tellMatch = tellRx.Match(line);

                                    if (tellMatch.Success)
                                    {
                                        string name    = tellMatch.Groups[1].Value;
                                        string message = tellMatch.Groups[2].Value;

                                        if (message.Contains("Master."))
                                        {
                                        }
                                        else
                                        {
                                            Console.WriteLine("You were sent a tell from " + name + " " + "'" + message + "'");
                                            var slackMessage = name + " sent you a tell: " + message;
                                            SlackHelper.SendSlackMessageAsync(slackMessage);
                                        }
                                    }
                                }
                                Thread.Sleep(50);
                            }
                        }
                }).Start();
            }
        }
예제 #2
0
        public Form1()
        {
            InitializeComponent();
            EQScreen.Initialize();
            player = new EQPlayer(updateStatus);

            CurrentStateTimer           = new System.Timers.Timer(300);
            CurrentStateTimer.Elapsed  += UpdateCurrentState;
            CurrentStateTimer.AutoReset = true;
            CurrentStateTimer.Enabled   = true;
        }
예제 #3
0
        public static async Task <bool> FocusOnEQWindowTask()
        {
            IntPtr h = EQScreen.GetEQWindowHandle();

            if (h == IntPtr.Zero)
            {
                return(false);
            }

            SetForegroundWindow(h);

            await Task.Delay(750);

            return(true);
        }
예제 #4
0
        async Task <bool> MultiAccountLoopTask()
        {
            updateStatus("Kicking off dual account loop task");

            foreach (String character in EQScreen.GetAllPlayerNames())
            {
                Console.WriteLine("Found character " + character);
            }
            EQScreen.SetNextCharacter();

            DmgShieldLoopTask();
            //DruidLoopTask();
            RogueLoopTask();

            return(true);
        }
예제 #5
0
        public static EQState GetCurrentEQState()
        {
            EQState currentEQState = new EQState();

            Bitmap bm = EQScreen.GetEQBitmap();

            currentEQState.mana                 = GetManaPercentFilled(bm);
            currentEQState.health               = GetHealthPercentFilled(bm);
            currentEQState.targetHealth         = GetTargetHealthPercentFilled(bm);
            currentEQState.petHealth            = GetPetHealthPercentFilled(bm);
            currentEQState.targetInfo           = GetTargetMonster(bm);
            currentEQState.characterState       = GetCharacterState(bm);
            currentEQState.minutesSinceMidnight = GetMinutesSinceMidnight();
            bm.Dispose();

            mostRecentState = currentEQState;

            return(currentEQState);
        }
예제 #6
0
        public static void Initialize()
        {
            SetComputer();

            // find window handles
            Process[] ps         = Process.GetProcessesByName("eqgame");
            int       processNum = 0;

            characterNames = new String[ps.Length];
            foreach (Process p in ps)
            {
                Bitmap userBm = ScreenCapture.CaptureWindowBM(p.MainWindowHandle);
                string name   = EQScreen.SetNameFromBitmap(userBm, p.MainWindowHandle);
                Console.WriteLine("Process " + p.MainWindowTitle + " name = " + name);
                ScreenCapture.CaptureWindowToFile(p.MainWindowHandle, "Test" + processNum + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                characterNames[processNum] = name;
                processNum++;
            }
        }
예제 #7
0
 public static float GetPetHealthPercentFilled(Bitmap bm)
 {
     return(EQScreen.GetBarPercentFilled(bm, EQScreen.petHealthBarXMin, EQScreen.petHealthBarXMax, EQScreen.petHealthBarY, EQScreen.IsPetHealthColor));
 }
예제 #8
0
 public static float GetManaPercentFilled(Bitmap bm)
 {
     return(EQScreen.GetBarPercentFilled(bm, EQScreen.manaBarXMin, EQScreen.manaBarXMax, EQScreen.manaBarY, EQScreen.IsManaColor));
 }
예제 #9
0
        async Task <bool> DruidLoopTask()
        {
            updateStatus("Kicking off druid loop");
            EQState     currentEQState     = EQState.GetCurrentEQState();
            PlayerState currentPlayerState = PlayerState.WAITING_TO_FOCUS;

            while (currentPlayerState != PlayerState.EXITING_CORE_GAMEPLAY_LOOP)
            {
                if (EQScreen.currentCharacterName != "Durdle")
                {
                    await Task.Delay(100);

                    continue;
                }
                await EQTask.FocusOnEQWindowTask();

                currentEQState = EQState.GetCurrentEQState();

                // always update EQState here?
                switch (currentPlayerState)
                {
                case PlayerState.WAITING_TO_FOCUS:
                    updateStatus("Focusing on EQ Window");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.FocusOnEQWindowTask(),
                                                                            PlayerState.FOCUSED_ON_EQ_WINDOW,
                                                                            PlayerState.EXITING_CORE_GAMEPLAY_LOOP);

                    break;

                case PlayerState.FOCUSED_ON_EQ_WINDOW:
                    updateStatus("Focused on EQ Window");
                    await EQTask.HideCorpsesTask();

                    currentPlayerState = PlayerState.CHECK_COMBAT_STATUS;
                    break;

                case PlayerState.CHECK_FARMING_TIME_LIMIT:
                    updateStatus("Checking farming time limit");
                    if (!CurrentTimeInsideDuration(lastFarmingLimitTime, FARMING_LIMIT_TIME_MILLIS))
                    {
                        lastFarmingLimitTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();
                    }
                    currentPlayerState = PlayerState.CHECK_COMBAT_STATUS;
                    break;

                case PlayerState.CHECK_COMBAT_STATUS:
                    updateStatus("Checking combat status");
                    currentPlayerState = ChangeStateBasedOnBool(currentEQState.characterState == EQState.CharacterState.COMBAT,
                                                                PlayerState.PULL_WITH_NUKE,
                                                                PlayerState.WAITING_FOR_MANA);
                    break;

                case PlayerState.PULL_WITH_NUKE:
                    updateStatus("Pulling with Nuke");
                    await EQTask.PullWithSpellTask();

                    await EQTask.EnterCombatTask();

                    currentPlayerState = PlayerState.KILLING_TARGET_ASAP;
                    break;

                case PlayerState.KILLING_TARGET_ASAP:
                    updateStatus("Killing target ASAP");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.NukeTask(),
                                                                            PlayerState.ATTEMPT_TO_LOOT,
                                                                            PlayerState.KILLING_TARGET_ASAP);

                    break;

                case PlayerState.WAITING_FOR_MANA:
                    updateStatus("Resting for mana");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.RestUntilFullManaTask(),
                                                                            PlayerState.CASTING_BURNOUT_ON_PET,
                                                                            PlayerState.WAITING_FOR_MANA);

                    break;

                case PlayerState.CASTING_BURNOUT_ON_PET:
                    updateStatus("Casting skin like rock");
                    if (!CurrentTimeInsideDuration(lastSkinLikeRockCastTime, SKIN_LIKE_ROCK_MILLIS))
                    {
                        lastSkinLikeRockCastTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();
                        await EQTask.ApplyPetBuffTask();

                        await EQTask.RestTask();
                    }
                    currentPlayerState = PlayerState.FINDING_SUITABLE_TARGET;
                    break;

                case PlayerState.FINDING_SUITABLE_TARGET:
                    updateStatus("Finding Suitable Target");
                    //bool foundTargetResult = await EQTask.FindNearestTargetTask(true);
                    bool foundTargetResult = await EQTask.FindAnyTargetWithMacroTask();

                    currentPlayerState = ChangeStateBasedOnBool(foundTargetResult,
                                                                PlayerState.PULL_WITH_NUKE,
                                                                PlayerState.CHECK_COMBAT_STATUS);
                    break;

                case PlayerState.ATTEMPT_TO_LOOT:
                    updateStatus("Attempting to loot");
                    await EQTask.ScoochForwardTask();

                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.LootTask(true),
                                                                            PlayerState.HIDE_CORPSES,
                                                                            PlayerState.HIDE_CORPSES);

                    break;

                case PlayerState.HIDE_CORPSES:
                    updateStatus("Hiding Corpses");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.HideCorpsesTask(),
                                                                            PlayerState.CHECK_FARMING_TIME_LIMIT,
                                                                            PlayerState.CHECK_FARMING_TIME_LIMIT);

                    break;
                }

                EQScreen.SetNextCharacter();
            }

            updateStatus("Exited Core Gameplay, attempting to camp");
            await EQTask.CampTask();

            EQScreen.SetNextCharacter();
            return(true);
        }
예제 #10
0
        async Task <bool> RogueLoopTask()
        {
            int creaturesPulled     = 0;
            int throwingDaggerStack = 0;

            lastFarmingLimitTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();

            updateStatus("Kicking off rogue loop");
            EQState     currentEQState     = EQState.GetCurrentEQState();
            PlayerState currentPlayerState = PlayerState.WAITING_TO_FOCUS;

            while (currentPlayerState != PlayerState.EXITING_CORE_GAMEPLAY_LOOP)
            {
                if (EQScreen.currentCharacterName != "Trakklo")
                {
                    await Task.Delay(100);

                    continue;
                }
                await EQTask.FocusOnEQWindowTask();

                currentEQState = EQState.GetCurrentEQState();

                switch (currentPlayerState)
                {
                case PlayerState.WAITING_TO_FOCUS:
                    updateStatus("Focusing on EQ Window");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.FocusOnEQWindowTask(),
                                                                            PlayerState.FOCUSED_ON_EQ_WINDOW,
                                                                            PlayerState.EXITING_CORE_GAMEPLAY_LOOP);

                    break;

                case PlayerState.FOCUSED_ON_EQ_WINDOW:
                    updateStatus("Focused on EQ Window");
                    await EQTask.HideCorpsesTask();

                    currentPlayerState = PlayerState.CHECK_COMBAT_STATUS;
                    break;

                case PlayerState.CHECK_FARMING_TIME_LIMIT:
                    updateStatus("Checking farming time limit");
                    currentPlayerState = PlayerState.CHECK_COMBAT_STATUS;
                    if (!CurrentTimeInsideDuration(lastFarmingLimitTime, FARMING_LIMIT_TIME_MILLIS))
                    {
                        currentPlayerState = PlayerState.EXITING_CORE_GAMEPLAY_LOOP;
                    }

                    creaturesPulled++;
                    if (creaturesPulled % 30 == 0)
                    {
                        SlackHelper.SendSlackMessageAsync("Out of daggers, go refill");
                        currentPlayerState = PlayerState.EXITING_CORE_GAMEPLAY_LOOP;
                    }

                    break;

                case PlayerState.CHECK_COMBAT_STATUS:
                    updateStatus("Checking combat Status");
                    currentPlayerState = ChangeStateBasedOnBool(currentEQState.characterState == EQState.CharacterState.COMBAT,
                                                                PlayerState.PREPARED_FOR_BATTLE,
                                                                PlayerState.WAITING_FOR_MANA);
                    break;

                case PlayerState.PREPARED_FOR_BATTLE:
                    updateStatus("Killing target ASAP");
                    await EQTask.ScoochForwardTask();

                    await EQTask.PullWithThrowingWeaponTask();

                    await EQTask.EnterCombatTask();

                    await EQTask.EnterCombatTask();

                    await EQTask.EnterCombatTask();

                    currentPlayerState = PlayerState.KILLING_TARGET_ASAP;
                    break;

                case PlayerState.KILLING_TARGET_ASAP:
                    updateStatus("Killing target ASAP");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.LevelSkillUntilDeadTask(),
                                                                            PlayerState.ATTEMPT_TO_LOOT,
                                                                            PlayerState.KILLING_TARGET_ASAP);

                    break;

                case PlayerState.WAITING_FOR_MANA:
                    updateStatus("Resting until fuly healed");
                    await EQTask.RestUntilFullyHealedTask();

                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.RestUntilFullyHealedTask(),
                                                                            PlayerState.FINDING_SUITABLE_TARGET,
                                                                            PlayerState.WAITING_FOR_MANA);

                    break;
                    if (currentEQState.characterState == EQState.CharacterState.COMBAT)
                    {
                        SlackHelper.SendSlackMessageAsync("Attacked while resting, something's probably wrong.");
                        currentPlayerState = PlayerState.PREPARED_FOR_BATTLE;
                    }

                case PlayerState.FINDING_SUITABLE_TARGET:
                    updateStatus("Finding Suitable Target");
                    //bool foundTargetResult = await EQTask.FindNearestTargetTask(false);
                    bool foundTargetResult = await EQTask.FindAnyTargetWithMacroTask();

                    currentPlayerState = ChangeStateBasedOnBool(foundTargetResult,
                                                                PlayerState.PREPARED_FOR_BATTLE,
                                                                PlayerState.CHECK_COMBAT_STATUS);
                    break;

                case PlayerState.ATTEMPT_TO_LOOT:
                    updateStatus("Attempting to loot");
                    //await EQTask.ScoochForwardTask();
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.LootTask(false),
                                                                            PlayerState.HIDE_CORPSES,
                                                                            PlayerState.HIDE_CORPSES);

                    break;

                case PlayerState.HIDE_CORPSES:
                    updateStatus("Hiding Corpses");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.HideCorpsesTask(),
                                                                            PlayerState.CHECK_FARMING_TIME_LIMIT,
                                                                            PlayerState.CHECK_FARMING_TIME_LIMIT);

                    break;
                }

                EQScreen.SetNextCharacter();
            }

            updateStatus("Exited Core Gameplay, attempting to camp");
            await EQTask.CampTask();

            EQScreen.SetNextCharacter();
            return(true);
        }
예제 #11
0
        async Task <bool> DmgShieldLoopTask()
        {
            updateStatus("Kicking off core gameplay loop");

            lastFarmingLimitTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();

            EQState     currentEQState     = EQState.GetCurrentEQState();
            PlayerState currentPlayerState = PlayerState.WAITING_TO_FOCUS;

            while (currentPlayerState != PlayerState.EXITING_CORE_GAMEPLAY_LOOP)
            {
                if (EQScreen.currentCharacterName != "Yoyokazoo")
                {
                    await Task.Delay(100);

                    continue;
                }
                await EQTask.FocusOnEQWindowTask();

                currentEQState = EQState.GetCurrentEQState();

                // always update EQState here?
                switch (currentPlayerState)
                {
                case PlayerState.WAITING_TO_FOCUS:
                    updateStatus("Focusing on EQ Window");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.FocusOnEQWindowTask(),
                                                                            PlayerState.FOCUSED_ON_EQ_WINDOW,
                                                                            PlayerState.EXITING_CORE_GAMEPLAY_LOOP);

                    break;

                case PlayerState.FOCUSED_ON_EQ_WINDOW:
                    updateStatus("Focused on EQ Window");
                    await EQTask.HideCorpsesTask();

                    currentPlayerState = PlayerState.CHECK_FARMING_TIME_LIMIT;
                    break;

                case PlayerState.CHECK_FARMING_TIME_LIMIT:
                    updateStatus("Checking farming time limit");
                    currentPlayerState = PlayerState.WAITING_FOR_MANA;

                    if (!CurrentTimeInsideDuration(lastFarmingLimitTime, FARMING_LIMIT_TIME_MILLIS))
                    {
                        currentPlayerState = PlayerState.EXITING_CORE_GAMEPLAY_LOOP;
                    }
                    break;

                case PlayerState.WAITING_FOR_MANA:
                    updateStatus("Resting for mana");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.RestUntilFullManaTask(),
                                                                            PlayerState.CHECKING_FOR_PYZJN,
                                                                            PlayerState.WAITING_FOR_MANA);

                    break;

                case PlayerState.CHECKING_FOR_PYZJN:
                    updateStatus("Checking for Pyzjn");
                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.FindSpecificTarget(),
                                                                            PlayerState.KILLING_TARGET_ASAP,
                                                                            PlayerState.FINDING_SUITABLE_TARGET);

                    break;

                case PlayerState.KILLING_TARGET_ASAP:
                    updateStatus("Killing target ASAP");
                    SlackHelper.SendSlackMessageAsync("Killing Lockjaw, check for loot");
                    await EQTask.PetAttackTask();

                    await EQTask.NukeTask();

                    await EQTask.EnterCombatTask();

                    currentPlayerState = await ChangeStateBasedOnTaskResult(EQTask.NukeUntilDeadTask(),
                                                                            PlayerState.CHECK_FARMING_TIME_LIMIT,
                                                                            PlayerState.CHECK_FARMING_TIME_LIMIT);

                    break;

                case PlayerState.FINDING_SUITABLE_TARGET:
                    updateStatus("Finding Suitable Target");
                    bool foundTargetResult = await EQTask.FindAnyTargetWithMacroTask();

                    currentPlayerState = ChangeStateBasedOnBool(foundTargetResult,
                                                                PlayerState.CASTING_DMG_SHIELD_ON_PET,
                                                                PlayerState.CHECK_FARMING_TIME_LIMIT);
                    break;

                case PlayerState.CASTING_DMG_SHIELD_ON_PET:
                    updateStatus("Casting Damage Shield on target");
                    if (!CurrentTimeInsideDuration(lastDmgShieldCastTime, DMG_SHIELD_TIME_MILLIS))
                    {
                        lastDmgShieldCastTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();
                        await EQTask.DamageShieldBotTask();
                    }
                    await Task.Delay(5000);

                    await EQTask.DeselectTargetTask();

                    currentPlayerState = PlayerState.CHECK_FARMING_TIME_LIMIT;
                    break;
                }

                EQScreen.SetNextCharacter();
            }

            updateStatus("Exited Core Gameplay, attempting to camp");
            await EQTask.CampTask();

            EQScreen.SetNextCharacter();
            return(true);
        }