protected override void GetGameOverlays(SuperBitmap bmp) { Overlays.Clear(); ushort chksum; Color c; //Overlays if (CurrentArea == Area.MainBases.Main) { chksum = ScreenState.GetScreenChecksum(bmp, 67, 16, 6); if (chksum == 0x95ca) { Overlays.Add(Overlay.Statuses.Loading); } chksum = ScreenState.GetScreenChecksum(bmp, 352, 545, 20); if (chksum == 0xdd80) { Overlays.Add(Overlay.Widgets.AllianceHelp); } chksum = ScreenState.GetScreenChecksum(bmp, 373, 348, 10); //if (chksum != 0xe8ae && chksum != 0x6bb1) ///depricated? if (chksum == 0x0060) { //c = bmp.GetPixel(44, 395); //if (!c.Equals(165, 121, 24)) c = bmp.GetPixel(372, 345); if (!c.Equals(198, 150, 33)) { Overlays.Add(Overlay.Widgets.DailyLogin); } } //c = s.bmp.GetPixel(35, 498); //c2 = s.bmp.GetPixel(29, 498); c = bmp.GetPixel(275, 535); //Rectangle(4, 489, 63, 18) //if (Math.Abs(c.R - c.G) <= 11 && (c.Within(157, 156, 155, 28) || c2.Within(165, 162, 156, 28)) && if (ScreenState.BlackBoxExists(bmp, new Rectangle(4, 587, 51, 18), Color.FromArgb(74, 77, 74))) { Overlays.Add(Overlay.Widgets.GlobalGift); } if (!ScreenState.BlackBoxExists(bmp, new Rectangle(63, 587, 51, 18), Color.FromArgb(74, 77, 74))) { for (int i = 552; i <= 570; i++) { c = bmp.GetPixel(91, i); //int min = 99; //Useful for debugging //min = Math.Min(min, Math.Max(Math.Max(Math.Abs(c.R - 99), Math.Abs(c.G - 97)), Math.Abs(c.B - 99))); if (c.Within(99, 97, 99, 8)) { Overlays.Add(Overlay.Widgets.SecretGift); break; } } } chksum = ScreenState.GetScreenChecksum(bmp, 98, 16, 10); if (chksum == 0x0f1e) { Overlays.Add(Overlay.Statuses.VIPInactive); } if (ScreenState.BlackBoxExists(bmp, new Rectangle(16, 562, 63, 18), Color.FromArgb(74, 77, 74))) { Overlays.Add(Overlay.Widgets.RewardsCrate); } if (ScreenState.BlackBoxExists(bmp, new Rectangle(248, 589, 51, 16), Color.FromArgb(74, 77, 74))) //DIFF ff { Overlays.Add(Overlay.Widgets.AmmoFreeAttack); } } else if (CurrentArea == Area.StateMaps.Main || CurrentArea == Area.StateMaps.FullScreen) { chksum = ScreenState.GetScreenChecksum(bmp, 352, 545, 20); if (chksum == 0xdd80) { Overlays.Add(Overlay.Widgets.AllianceHelp); } chksum = ScreenState.GetScreenChecksum(bmp, 54, 198, 10); if (chksum == 0xcadb) { Overlays.Add(Overlay.Dialogs.Tiles.Empty); } else { chksum = ScreenState.GetScreenChecksum(bmp, 40, 107, 10); if (chksum == 0x63bd) { c = bmp.GetPixel(195, 240); if (c.Equals(0, 186, 255)) { Overlays.Add(Overlay.Dialogs.Tiles.PlayerFriend); } else { c = bmp.GetPixel(195, 244); //if that player's VIP is active if (c.Equals(0, 186, 255)) { Overlays.Add(Overlay.Dialogs.Tiles.PlayerFriend); } else { Overlays.Add(Overlay.Dialogs.Tiles.PlayerEnemy); } } } else { chksum = ScreenState.GetScreenChecksum(bmp, 54, 71, 10); if (chksum == 0x3dec) { Overlays.Add(Overlay.Dialogs.Tiles.RssOpen); } else { chksum = ScreenState.GetScreenChecksum(bmp, 23, 18, 10); if (chksum == 0x10f3) { Overlays.Add(Overlay.Dialogs.Tiles.Rebel); } else { chksum = ScreenState.GetScreenChecksum(bmp, 54, 128, 10); if (chksum == 0x41c0) { Overlays.Add(Overlay.Dialogs.Tiles.Warzone); } else { chksum = ScreenState.GetScreenChecksum(bmp, 54, 128, 10); if (chksum == 0x5345) { Overlays.Add(Overlay.Dialogs.Tiles.ControlPoint); } else { chksum = ScreenState.GetScreenChecksum(bmp, 192, 120, 10); if (chksum == 0xa992 || chksum == 0x520b) //crystal no occupy allowed <-no longer true, its just a Blocked dialog { Overlays.Add(Overlay.Dialogs.Tiles.Blocked); } } } } } } } } else if (CurrentArea == Area.Menus.Alliance || CurrentArea == Area.Menus.Mission || CurrentArea == Area.Menus.Account) { //bmp.Bitmap.Save(String.Format("{0}\\help{1}.bmp", Controller.Instance.GetFullScreenshotDir(), System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()), System.Drawing.Imaging.ImageFormat.Bmp); chksum = ScreenState.GetScreenChecksum(bmp, 67, 16, 6); if (chksum == 0x041e) { Overlays.Add(Overlay.Statuses.Loading); } } else if (CurrentArea == Area.Menus.AllianceHelp) { //bmp.Bitmap.Save(String.Format("{0}\\help{1}.bmp", Controller.Instance.GetFullScreenshotDir(), System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()), System.Drawing.Imaging.ImageFormat.Bmp); chksum = ScreenState.GetScreenChecksum(bmp, 36, 225, 20); if (chksum == 0xfb5e) //f534 loaded2 //fb5e loading { Overlays.Add(Overlay.Statuses.Loading); } } chksum = ScreenState.GetScreenChecksum(bmp, 190, 104, 10); if (chksum == 0x7cf6 || chksum == 0x124a) //popup { chksum = ScreenState.GetScreenChecksum(bmp, 190, 115, 20); switch (chksum) { case 0x0388: case 0x6abd: //TODO: look into possible transparency issue with this dialog // TODO: Remove, debugging chksum = ScreenState.GetScreenChecksum(bmp, 67, 16, 4); ushort chksum2 = ScreenState.GetScreenChecksum(bmp, 160, 16, 14); ushort chksum3 = ScreenState.GetScreenChecksum(bmp, 190, 115, 20); if (!System.IO.File.Exists(String.Format("{0}\\unknown\\rss{1}-{2}-{3}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4"), chksum3.ToString("X4")))) { bmp.Save(String.Format("{0}\\unknown\\rss{1}-{2}-{3}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4"), chksum3.ToString("X4"))); } Overlays.Add(Overlay.Dialogs.Popups.TransferConfirmation); break; case 0xdc05: //max limit Overlays.Add(Overlay.Dialogs.Popups.MaxDeployments); break; case 0x1187: Overlays.Add(Overlay.Dialogs.Popups.DemolishBuilding); break; case 0x4c4a: case 0x6262: //log out Overlays.Add(Overlay.Dialogs.Popups.AreYouSure); break; case 0x152c: Overlays.Add(Overlay.Dialogs.Popups.LoginFailed); break; case 0xba61: //notice case 0x9aed: //memu 5.1.1.1 chksum = ScreenState.GetScreenChecksum(bmp, 190, 150, 20); switch (chksum) { case 0x8a67: //march may have not sent due to internet connection Overlays.Add(Overlay.Dialogs.Popups.ConnectionInterrupted); break; case 0x4e5b: //please try to collect the gift later Overlays.Add(Overlay.Dialogs.Popups.Unknown); break; default: Overlays.Add(Overlay.Dialogs.Popups.Unknown); break; } //google play error //quest timer not completed //cannot attack allied base //nsf rss break; case 0xb3aa: //tip! chksum = ScreenState.GetScreenChecksum(bmp, 190, 150, 20); if (chksum == 0x003e) //warning troops attacking outside base are not saved by hospital { Overlays.Add(Overlay.Dialogs.Popups.WarningOutsideAttack); } else { Overlays.Add(Overlay.Dialogs.Popups.Unknown); } break; case 0x49ac: //scout chksum = ScreenState.GetScreenChecksum(bmp, 190, 150, 20); if (chksum == 0x68e1) //scout not unlocked { Overlays.Add(Overlay.Dialogs.Popups.ScoutNotUnlocked); } else { Overlays.Add(Overlay.Dialogs.Popups.Unknown); } break; case 0x54db: Overlays.Add(Overlay.Dialogs.Popups.ReplaceBoost); break; case 0xe495: Overlays.Add(Overlay.Dialogs.Popups.NewEvent); break; case 0xf58b: //coordinate dialog break; default: Overlays.Add(Overlay.Dialogs.Popups.Unknown); break; } } chksum = ScreenState.GetScreenChecksum(bmp, 200, 660, 10); //c = bmp.GetPixel(213, 664); //DIFF MS //if (c.Equals(24, 130, 16) || c.Equals(0, 28, 0)) //DIFF MS if (chksum == 0x2bd0 || chksum == 0x4dde) { Overlays.Add(Overlay.Widgets.AllianceGift); } c = bmp.GetPixel(132, 652); if (c.Equals(231, 4, 82)) { Overlays.Add(Overlay.Widgets.MissionsAvailable); } chksum = ScreenState.GetScreenChecksum(bmp, 360, 494, 8);//DIFF ff switch (chksum) { // case 0x7d6a: // Overlays.Add(Overlay.Incomings.Rally); // s.SuperBitmap.Bitmap.Save(Controller.Instance.GetFullScreenshotDir() + "rally.bmp", System.Drawing.Imaging.ImageFormat.Bmp); // break; case 0x3d9f: Overlays.Add(Overlay.Incomings.Attack); break; // case 0x1475: // Overlays.Add(Overlay.Incomings.Scout); // break; // case 0xb76e: // Overlays.Add(Overlay.Incomings.Transport); // break; // case 0xe405: // Overlays.Add(Overlay.Incomings.Reinforcement); // break; } if (Overlays.Count == 0 && CurrentArea != Area.Unknown && CurrentArea != Area.MainBases.Main && CurrentArea != Area.StateMaps.Main && CurrentArea != Area.StateMaps.FullScreen && CurrentArea != Area.Emulators.Loading && CurrentArea != Area.Emulators.Android && CurrentArea != Area.Others.Login && CurrentArea != Area.Others.Splash && CurrentArea != Area.Others.Ad && CurrentArea != Area.Others.Chat && CurrentArea != Area.Others.SessionTimeout) { chksum = ScreenState.GetScreenChecksum(bmp, 67, 16, 4); ushort chksum2 = ScreenState.GetScreenChecksum(bmp, 160, 16, 14); ushort chksum3 = ScreenState.GetScreenChecksum(bmp, 190, 115, 20); if (chksum == 0x0cde || chksum == 0x57ca) //modal or double modal on a menu { if (!System.IO.File.Exists(String.Format("{0}\\unknown\\unknown{1}-{2}-{3}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4"), chksum3.ToString("X4")))) { bmp.Save(String.Format("{0}\\unknown\\unknown{1}-{2}-{3}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4"), chksum3.ToString("X4"))); } } } if (Overlays.Contains(Overlay.Dialogs.Popups.Unknown)) { chksum = ScreenState.GetScreenChecksum(bmp, 190, 115, 20); ushort chksum2 = ScreenState.GetScreenChecksum(bmp, 190, 150, 20); if (!System.IO.File.Exists(String.Format("{0}\\unknown\\popup{1}-{2}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4")))) { bmp.Save(String.Format("{0}\\unknown\\popup{1}-{2}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4"))); } } }
protected override void GetGameOverlays(SuperBitmap bmp) { Overlays.Clear(); ushort chksum; Color c; //Overlays if (CurrentArea == Area.MainBases.Main) { chksum = ScreenState.GetScreenChecksum(bmp, 345, 500, 20); //if (chksum == 0xb877) //depricated? if (chksum == 0xe925) { Overlays.Add(Overlay.Widgets.AllianceHelp); } chksum = ScreenState.GetScreenChecksum(bmp, 373, 348, 10); //if (chksum != 0xe8ae && chksum != 0x6bb1) ///depricated? if (chksum == 0x0060) { //c = bmp.GetPixel(44, 395); //if (!c.Equals(165, 121, 24)) c = bmp.GetPixel(372, 345); if (!c.Equals(198, 150, 33)) { Overlays.Add(Overlay.Widgets.DailyLogin); } } //c = s.bmp.GetPixel(35, 498); //c2 = s.bmp.GetPixel(29, 498); c = bmp.GetPixel(275, 535); //Rectangle(4, 489, 63, 18) //if (Math.Abs(c.R - c.G) <= 11 && (c.Within(157, 156, 155, 28) || c2.Within(165, 162, 156, 28)) && if (ScreenState.BlackBoxExists(bmp, new Rectangle(253, 562, 63, 18), Color.FromArgb(74, 77, 74), 10) && !c.Equals(57, 85, 140)) { Overlays.Add(Overlay.Widgets.GlobalGift); } chksum = ScreenState.GetScreenChecksum(bmp, 275, 532, 10); c = bmp.GetPixel(275, 535); if (chksum != 0x41fa && !ScreenState.BlackBoxExists(bmp, new Rectangle(253, 562, 63, 18), Color.FromArgb(74, 77, 74))) { int n = 0; for (int i = 514; i <= 544; i++) { c = bmp.GetPixel(278, i); if (c.Within(49, 83, 155, 50)) { n++; } } if (n > 6) { n = 0; for (int i = 514; i <= 544; i++) { c = bmp.GetPixel(298, i); if (c.Within(49, 83, 155, 50)) { n++; } } if (n > 6) { n = 0; for (int i = 514; i <= 544; i++) { c = bmp.GetPixel(286, i); if (Math.Abs(c.G - c.R) < 18 && Math.Abs(c.B - c.G) < 18 && c.R < 80 && c.G < 80 && c.B < 80) { n++; } } if (n > 7) { Overlays.Add(Overlay.Widgets.SecretGift); } } } } chksum = ScreenState.GetScreenChecksum(bmp, 98, 16, 10); if (chksum == 0x0f1e) { Overlays.Add(Overlay.Statuses.VIPInactive); } if (ScreenState.BlackBoxExists(bmp, new Rectangle(16, 562, 63, 18), Color.FromArgb(74, 77, 74))) { Overlays.Add(Overlay.Widgets.RewardsCrate); } //Rectangle(253, 490, 63, 17) if (ScreenState.BlackBoxExists(bmp, new Rectangle(178, 563, 63, 17), Color.FromArgb(74, 77, 74))) { Overlays.Add(Overlay.Widgets.AmmoFreeAttack); } } else if (CurrentArea == Area.StateMaps.Main || CurrentArea == Area.StateMaps.FullScreen) { c = bmp.GetPixel(387, 515); if (c.Equals(239, 8, 41)) { Overlays.Add(Overlay.Widgets.AllianceHelp); } } c = bmp.GetPixel(213, 664); if (c.Equals(24, 130, 16) || c.Equals(0, 28, 0)) { Overlays.Add(Overlay.Widgets.AllianceGift); } c = bmp.GetPixel(134, 668); if (c.Equals(231, 8, 33)) { Overlays.Add(Overlay.Widgets.MissionsAvailable); } chksum = ScreenState.GetScreenChecksum(bmp, 352, 457, 8); /*switch (chksum) * { * case 0x7d6a: * Overlays.Add(Overlay.Incomings.Rally); * s.SuperBitmap.Bitmap.Save(Controller.Instance.GetFullScreenshotDir() + "rally.bmp", System.Drawing.Imaging.ImageFormat.Bmp); * break; * case 0x6de0: * Overlays.Add(Overlay.Incomings.Attack); * break; * case 0x1475: * Overlays.Add(Overlay.Incomings.Scout); * break; * case 0xb76e: * Overlays.Add(Overlay.Incomings.Transport); * break; * case 0xe405: * Overlays.Add(Overlay.Incomings.Reinforcement); * break; * }*/ }