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(); } }
public Form1() { InitializeComponent(); EQScreen.Initialize(); player = new EQPlayer(updateStatus); CurrentStateTimer = new System.Timers.Timer(300); CurrentStateTimer.Elapsed += UpdateCurrentState; CurrentStateTimer.AutoReset = true; CurrentStateTimer.Enabled = true; }
public static async Task <bool> FocusOnEQWindowTask() { IntPtr h = EQScreen.GetEQWindowHandle(); if (h == IntPtr.Zero) { return(false); } SetForegroundWindow(h); await Task.Delay(750); return(true); }
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); }
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); }
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++; } }
public static float GetPetHealthPercentFilled(Bitmap bm) { return(EQScreen.GetBarPercentFilled(bm, EQScreen.petHealthBarXMin, EQScreen.petHealthBarXMax, EQScreen.petHealthBarY, EQScreen.IsPetHealthColor)); }
public static float GetManaPercentFilled(Bitmap bm) { return(EQScreen.GetBarPercentFilled(bm, EQScreen.manaBarXMin, EQScreen.manaBarXMax, EQScreen.manaBarY, EQScreen.IsManaColor)); }
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); }
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); }
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); }