public override void ClickBack(int timeout) { if (this.ToString().Contains("2")) { timeout = timeout; } if (ScreenState.CurrentArea == Area.Menus.Missions.ActivateVIP) { Controller.SendClick(this, 348, 122, timeout); } else if (ScreenState.CurrentArea == Area.Others.Ad) { Controller.SendClick(this, 380, 12, timeout); } else if (ScreenState.CurrentArea == Area.Others.Quit) { Controller.SendClick(this, 255, 390, timeout); } else if (ScreenState.CurrentArea == Area.Emulators.ProcessStopped) { Controller.SendClick(this, 335, 380, timeout); } else { if (ScreenState.CurrentArea == Area.MainBases.Main) { timeout = timeout; } ushort chksum = ScreenState.GetScreenChecksum(SuperBitmap, 15, 4, 20); if (chksum == 0x133d) //if screen is a menu { Controller.SendClick(this, 25, 14, timeout); } else { Controller.SendClick(this, Controller.SCREEN_W + WINDOW_MARGIN_L + WINDOW_MARGIN_R / 2, 582, timeout); } } }
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 GetGameArea(SuperBitmap bmp) { CurrentArea = Area.Unknown; //Y-axis 485-551 notification area //menu area ushort chksum = ScreenState.GetScreenChecksum(bmp, 255, 19, 4, 4); ushort chksum2 = 0, chksum3 = 0; bool enteredGeneric = false; Color c, c2, c3; //bmp.Bitmap.Save(String.Format("{0}\\file.bmp", Controller.Instance.GetFullScreenshotDir()), System.Drawing.Imaging.ImageFormat.Bmp); switch (chksum) { case 0x81e8: //menu /*using (Bitmap bmp2 = bmp.SubBitmap(62, 2, 204, 20)) * { * //AutoOcr ocr = new AutoOcr(); * * //OcrResult res = ocr.Read(bmp2); * //string text = res.Text; * * using (TesseractEngine ocr = new TesseractEngine(@"./tessdata", "eng")) * { * using (Page page = ocr.Process(bmp2)) * { * string text = page.GetText(); * } * } * }*/ chksum2 = ScreenState.GetScreenChecksum(bmp, 160, 16, 14); switch (chksum2) { case 0x0840: CurrentArea = Area.StateMaps.Main; break; case 0x83ac: CurrentArea = Area.Menus.Alliance; break; case 0x1ab1: CurrentArea = Area.Menus.Gifts; break; case 0xa5ae: CurrentArea = Area.Menus.AllianceHelp; break; case 0xc1a6: CurrentArea = Area.Menus.AllianceWar; break; case 0xbb6b: CurrentArea = Area.Menus.Challenge; break; case 0x474c: CurrentArea = Area.Menus.Deployments; break; case 0x6db9: CurrentArea = Area.Menus.March; break; case 0x67ed: CurrentArea = Area.Menus.Boost; break; case 0x628d: CurrentArea = Area.Menus.Boosts.PeaceShield; break; case 0x9442: CurrentArea = Area.Menus.Boosts.Attack; break; case 0x548b: CurrentArea = Area.Menus.Boosts.Health; break; case 0x0602: CurrentArea = Area.Menus.Boosts.DeploymentSize; break; case 0x7c48: CurrentArea = Area.Menus.Boosts.CommanderXP; break; case 0xe1ff: CurrentArea = Area.Menus.Boosts.UpkeepReduction; break; case 0x464b: CurrentArea = Area.Menus.Boosts.Gathering; break; case 0xad7c: CurrentArea = Area.Menus.Boosts.FakeForces; break; case 0x1586: CurrentArea = Area.Menus.Boosts.AntiScout; break; case 0x19b3: CurrentArea = Area.Menus.Boosts.FoodProduction; break; case 0xc678: CurrentArea = Area.Menus.Boosts.OilProduction; break; case 0x17f4: CurrentArea = Area.Menus.Boosts.StoneProduction; break; case 0xce7f: CurrentArea = Area.Menus.Boosts.IronProduction; break; case 0x2c0e: CurrentArea = Area.Menus.Boosts.CoinProduction; break; case 0x4e99: CurrentArea = Area.Menus.Boosts.TroopQueue; break; case 0x3638: CurrentArea = Area.Menus.Items; break; case 0x9c65: CurrentArea = Area.Menus.Mission; break; case 0xce0f: CurrentArea = Area.Menus.Missions.Base; break; case 0xebbf: CurrentArea = Area.Menus.Missions.Daily; break; case 0xebb1: CurrentArea = Area.Menus.Missions.Alliance; break; case 0xa828: CurrentArea = Area.Menus.Missions.VIP; break; case 0x25d: CurrentArea = Area.Menus.Mail; break; case 0x7687: CurrentArea = Area.Menus.MailCompose; break; case 0x71a7: CurrentArea = Area.Menus.More; break; case 0x232b: CurrentArea = Area.Menus.Account; break; case 0x4425: CurrentArea = Area.Menus.CasinoLobby; break; case 0xa4b5: //blank menu CurrentArea = Area.Menus.Casino; break; case 0xe7d9: CurrentArea = Area.Menus.ResourceHelp; break; case 0xad39: CurrentArea = Area.Menus.Resources; break; case 0x5bbb: case 0x7bdc: //MP TODO: move to new enum case 0xeb6e: //hero boosts TODO: move to new enum CurrentArea = Area.Menus.Commander; break; case 0x375f: case 0x5147: //comments TODO: move to new enum CurrentArea = Area.Menus.Profile; break; case 0x2216: //weapon case 0x29d0: //TODO helmet case 0x8aa6: //armor case 0xbce9: //footwear case 0xd228: //accessory CurrentArea = Area.Menus.Gear; break; case 0x889e: case 0x3181: //vip points CurrentArea = Area.Menus.VIP; break; case 0x6224: CurrentArea = Area.Menus.VIPSubscriptions; break; case 0x71bc: case 0xa9a0: //upgrade building TODO move to new enum case 0xafe0: //speed up building TODO move to new enum case 0x3ce3: //speed up research TODO move to new enum CurrentArea = Area.Menus.BuildingList; break; case 0x474f: CurrentArea = Area.Menus.Buildings.HQ; break; case 0xef15: CurrentArea = Area.Menus.Buildings.Wall; break; case 0x65fc: CurrentArea = Area.Menus.Buildings.Warehouse; break; case 0xc981: CurrentArea = Area.Menus.Buildings.Radar; break; case 0x3816: CurrentArea = Area.Menus.Buildings.TradingPost; break; case 0x35e6: CurrentArea = Area.Menus.Buildings.HallOfHeroes; break; case 0x1e57: //hospital ward case 0x19ff: //hospital CurrentArea = Area.Menus.Buildings.Hospital; break; case 0xf42c: //barracks case 0x8fb2: //training grounds chksum2 = ScreenState.GetScreenChecksum(bmp, 190, 85, 20); if (chksum2 == 0x54bc) { CurrentArea = Area.Menus.ShootingRanges.Lobby; } else { CurrentArea = Area.Menus.Buildings.TrainingGrounds; } break; case 0x5448: CurrentArea = Area.Menus.Buildings.Bank; break; case 0xc39f: //research case 0x5648: //economics case 0xb13a: //combat case 0x5c17: //defense case 0x1803: //crafting case 0xa4dc: //hero CurrentArea = Area.Menus.Buildings.Research; break; case 0x1c5c: CurrentArea = Area.Menus.Buildings.Armory; break; case 0xdadf: CurrentArea = Area.Menus.Buildings.Embassy; break; case 0x69e9: CurrentArea = Area.Menus.Buildings.WarRoom; break; case 0xddb8: CurrentArea = Area.Menus.Buildings.Prison; break; case 0xcac9: CurrentArea = Area.Menus.Buildings.DeathRow; break; case 0x8011: CurrentArea = Area.Menus.Buildings.Farm; break; case 0x9081: CurrentArea = Area.Menus.Buildings.Quarry; break; case 0x9d3e: CurrentArea = Area.Menus.Buildings.IronMine; break; case 0x19b8: CurrentArea = Area.Menus.Buildings.OilWell; break; case 0x2456: CurrentArea = Area.Menus.Buildings.Vault; break; case 0x59a1: //blog TODO: make new enum default: chksum3 = ScreenState.GetScreenChecksum(bmp, 16, 16, 10); if (chksum3 != 0x3ca7) { enteredGeneric = true; } //proving ground check for (int y = 60; y < 90; y++) { c = bmp.GetPixel(20, y); if (c.Equals(173, 4, 24)) { c = bmp.GetPixel(20, y + 10); if (c.Equals(173, 4, 24)) { CurrentArea = Area.Menus.ShootingRanges.Main; break; } } } break; } break; case 0xcfeb: //menu loading chksum2 = ScreenState.GetScreenChecksum(bmp, 160, 16, 14); switch (chksum2) { case 0xb97b: CurrentArea = Area.StateMaps.Main; break; case 0x1c39: CurrentArea = Area.Menus.Alliance; break; case 0x4b7b: CurrentArea = Area.Menus.Mission; break; case 0x8af6: //logging out case 0x3455: CurrentArea = Area.Menus.Account; break; case 0x6caf: CurrentArea = Area.Menus.Deployments; break; case 0x6b06: CurrentArea = Area.Menus.More; break; default: enteredGeneric = true; break; } break; case 0xc7bd: //menu modal case 0xb3b7: //menu modal (Log out/are you sure) //case 0xc4a8: //large modal chksum2 = ScreenState.GetScreenChecksum(bmp, 160, 16, 14); switch (chksum2) { case 0x2689: //login loading case 0x033d: //login modal (failed) CurrentArea = Area.Others.Login; break; case 0x154f: chksum3 = ScreenState.GetScreenChecksum(bmp, 215, 235, 10); if (chksum3 == 0x3702) { CurrentArea = Area.StateMaps.CoordinateError; } else if (chksum3 == 0x8924) { CurrentArea = Area.StateMaps.Coordinate; } else { ushort chksum4 = ScreenState.GetScreenChecksum(bmp, 366, 16, 10); if (chksum4 == 0xe394) { CurrentArea = Area.StateMaps.Main; } else if (chksum4 == 0x2a78) { CurrentArea = Area.StateMaps.FullScreen; } else { enteredGeneric = true; } } break; case 0x2411: //TODO: Convert this to overlay popup, see unknown0cde-6e83 CurrentArea = Area.Menus.Missions.ActivateVIP; break; case 0xef0c: CurrentArea = Area.Menus.MailCompose; break; case 0x369e: //log out CurrentArea = Area.Menus.Account; break; case 0x8e61: case 0x2e14: //donation confirmation CurrentArea = Area.Menus.ResourceHelp; break; case 0xec6f: //rss use confirmation CurrentArea = Area.Menus.Resources; break; case 0xddf8: //economics case 0xf417: //economics case 0xd6b2: //combat case 0x0792: //defense case 0x9b6b: //hero case 0x1477: //hero mastered CurrentArea = Area.Menus.Buildings.Research; break; case 0x84e5: //old? case 0xa973: //TODO check, demolish building dialog CurrentArea = Area.Menus.Buildings.Farm; break; case 0x1fe2: CurrentArea = Area.Menus.Buildings.OilWell; break; case 0x1537: CurrentArea = Area.Menus.Buildings.Quarry; break; case 0x8731: CurrentArea = Area.Menus.Buildings.IronMine; break; case 0x54cd: CurrentArea = Area.Menus.Buildings.Bank; break; case 0xdb75: case 0x8f88: //absolute black //TODO this scenario when demo building confirmation screen CurrentArea = Area.Menus.BuildingList; break; case 0x3e5c: CurrentArea = Area.Menus.Deployments; break; case 0xbe95: CurrentArea = Area.Menus.Casino; break; case 0xdccc: CurrentArea = Area.Menus.Profile; break; default: chksum3 = ScreenState.GetScreenChecksum(bmp, 60, 120, 20); if (chksum3 == 0xf2c6) //proving grounds crate { CurrentArea = Area.Menus.ShootingRanges.NormalCrate; } else { enteredGeneric = true; } break; } break; case 0xf36b: case 0x02f9: //main base loading //case 0x080e: //large modal (event tier prize) TODO: Move to popup CurrentArea = Area.MainBases.Main; break; case 0xec7f: //realm map monster modal (dark modal) chksum2 = ScreenState.GetScreenChecksum(bmp, 366, 16, 10); switch (chksum2) { case 0x4774: CurrentArea = Area.Menus.ShootingRanges.NormalCrate; break; case 0x0094: CurrentArea = Area.StateMaps.Main; break; default: CurrentArea = Area.StateMaps.FullScreen; break; } break; case 0xc930: case 0x13b3: //alternate? CurrentArea = Area.Emulators.Loading; break; case 0x9d61: case 0x4c90: //no search bar on top CurrentArea = Area.Emulators.Android; break; case 0xe0fa: case 0x11dd: //loading case 0x9180: //gray screen CurrentArea = Area.Others.Splash; break; case 0x33e2: //login case 0xfc07: //failed to connect to server (splash screen modal error, set to login to trick it to closing and retrying) CurrentArea = Area.Others.Login; break; /*case 0x9e78: //login modal/loading * chksum2 = ScreenState.GetScreenChecksum(bmp, 70, 120, 20); * if (chksum2 == 0x54e6) //TODO: collision case: casino jackpot crate collect * { * CurrentArea = Area.Menus.ShootingRanges.NormalCrate; * } * //else if (chksum2 == 0xfe5a) //TODO: collision case: deconstruct farm dialog * //{ * // CurrentArea = Area.Menus.Buildings.Farm; * //} * else * { * CurrentArea = Area.Others.Login; * } * break;*/ case 0xe8c8: case 0xbef1: //modal/uncollectable secret gift chksum2 = ScreenState.GetScreenChecksum(bmp, 190, 115, 20); switch (chksum2) { case 0x8adf: //secret gift case 0xef48: //uncollectable CurrentArea = Area.MainBases.SecretGiftCollect; break; case 0xac19: CurrentArea = Area.MainBases.GlobalGiftCollect; break; default: CurrentArea = Area.MainBases.Main; break; } break; case 0xbf9a: //black screen chksum2 = ScreenState.GetScreenChecksum(bmp, 190, 115, 20); if (chksum2 == 0xf1db) //notice { chksum3 = ScreenState.GetScreenChecksum(bmp, 190, 150, 20); if (chksum3 == 0x2f3a) //session timeout { CurrentArea = Area.Others.SessionTimeout; } } else if (chksum2 == 0x88e3) { CurrentArea = Area.Others.LoginPincode; } break; case 0x2c55: //guild chat case 0x59f8: //realm chat case 0xcdf8: //contacts CurrentArea = Area.Others.Chat; break; default: break; } if (CurrentArea == Area.Unknown) { string text = Utilities.GetTextFromImage(bmp, 64, 300, 200, 30); if (text.Replace('i', 'l') == "Closing the Application".Replace('i', 'l')) { CurrentArea = Area.Others.Quit; } text = Utilities.GetTextFromImage(bmp, 30, 325, 340, 30); if (text.StartsWith("Unfortunately")) { CurrentArea = Area.Emulators.ProcessStopped; } } if (CurrentArea == Area.Unknown) { chksum2 = ScreenState.GetScreenChecksum(bmp, 72, 302, 20); switch (chksum2) { case 0x7c8c: case 0x231f: //memu 5.1.1.1 string text = Utilities.GetTextFromImage(bmp, 64, 300, 200, 20); CurrentArea = Area.Others.Quit; /*try * { * bmp.Bitmap.Save(String.Format("{0}\\-save.bmp", Controller.Instance.GetFullScreenshotDir()), System.Drawing.Imaging.ImageFormat.Bmp); * } * catch (System.Runtime.InteropServices.ExternalException e) { }*/ break; default: chksum3 = ScreenState.GetScreenChecksum(bmp, 60, 120, 20); switch (chksum3) { case 0xf2c6: //shooting range crate collect case 0xd0fc: //casino jackpot crate collect CurrentArea = Area.Menus.ShootingRanges.NormalCrate; break; default: chksum3 = ScreenState.GetScreenChecksum(bmp, 190, 476, 20); if (chksum3 == 0xefdf) { CurrentArea = Area.Menus.BuildingList; //Citadel upgrade complete } else { chksum3 = ScreenState.GetScreenChecksum(bmp, 194, 642, 20); switch (chksum3) { case 0x5019: case 0x8a64: CurrentArea = Area.Others.Ad; break; } } break; } break; } } try //TODO: Move this to outer scope after CONST are set up { if (CurrentArea == Area.Unknown) { //chksum3 = ScreenState.GetScreenChecksum(bmp, 190, 115, 20); if (!System.IO.File.Exists(String.Format("{0}\\unknown\\unknown{1}-{2}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4")))) { bmp.Save(String.Format("{0}\\unknown\\unknown{1}-{2}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4"), chksum2.ToString("X4"))); } /*if (CurrentArea == Area.Menu) * { * bmp.Bitmap.Save(String.Format("{0}\\-save.bmp", Controller.Instance.GetFullScreenshotDir()), System.Drawing.Imaging.ImageFormat.Bmp); * }*/ } else if (enteredGeneric && CurrentArea != Area.Others.Quit) { if (!System.IO.File.Exists(String.Format("{0}\\unknown\\genericCase-{1}-{2}-{3}.bmp", Controller.Instance.GetFullScreenshotDir(), this.ToString(), chksum.ToString("X4"), chksum2.ToString("X4")))) { bmp.Save(String.Format("{0}\\unknown\\genericCase-{1}-{2}-{3}.bmp", Controller.Instance.GetFullScreenshotDir(), this.ToString(), chksum.ToString("X4"), chksum2.ToString("X4"))); } //Controller.Instance.SendNotification(string.Format("ScreenState found but missed above\n{0}-{1}-{2}", this.ToString(), chksum.ToString("X4"), chksum2.ToString("X4")), NotificationType.General); } /*chksum = ScreenState.GetScreenChecksum(bmp, 67, 16, 7); * if (!System.IO.File.Exists(String.Format("{0}\\unknown\\unknown{1}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4")))) * { * bmp.Bitmap.Save(String.Format("{0}\\unknown\\unknown{1}.bmp", Controller.Instance.GetFullScreenshotDir(), chksum.ToString("X4")), System.Drawing.Imaging.ImageFormat.Bmp); * }*/ } catch (System.Runtime.InteropServices.ExternalException ex) { } }
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; * }*/ }
protected override void GetGameArea(SuperBitmap bmp) { //menu area ushort chksum = ScreenState.GetScreenChecksum(bmp, 160, 12, 20); Color c, c2, c3; switch (chksum) { case 0x633d: case 0x13c0: //nox case 0xc4eb: //nox new CurrentArea = Area.Menus.Alliance; break; case 0x3956: case 0x501e: //nox case 0xbb5f: //nox new case 0x8759: //now new modal CurrentArea = Area.Menus.Gifts; break; case 0x3b42: //memu main menu case 0x4c18: //memu store case 0x1a87: //memu catalog CurrentArea = Area.Menus.AllianceStore; break; case 0xc88e: case 0x08eb: //nox case 0xa240: //nox new CurrentArea = Area.Menus.AllianceHelp; break; /*case 0x6f55: //"Unknown" glitch on Alliance Help * if (!Logout()) * { * if (!KillApp()) * { * Controller.Instance.RestartEmulator(this); * } * } * break;*/ case 0x26e5: //memu CurrentArea = Area.Menus.AllianceWar; break; case 0x6ff2: CurrentArea = Area.Menus.Challenge; break; case 0xfddf: CurrentArea = Area.Menus.Deployments; break; case 0x4e34: case 0xe9f1: //nox case 0x24ba: //nox new CurrentArea = Area.Menus.Boost; break; case 0x712b: case 0x25c8: //nox case 0x2498: //nox new CurrentArea = Area.Menus.Boosts.PeaceShield; break; case 0x994f: //memu CurrentArea = Area.Menus.Boosts.Attack; break; case 0x46b7: //memu CurrentArea = Area.Menus.Boosts.Health; break; case 0xb253: //memu CurrentArea = Area.Menus.Boosts.Defense; break; case 0xd58f: CurrentArea = Area.Menus.Boosts.DeploymentSize; break; case 0xde1e: CurrentArea = Area.Menus.Boosts.CommanderXP; break; case 0x7623: CurrentArea = Area.Menus.Boosts.UpkeepReduction; break; case 0x6253: CurrentArea = Area.Menus.Boosts.Gathering; break; case 0x456f: CurrentArea = Area.Menus.Boosts.FakeForces; break; case 0x56e4: case 0xbf74: //nox case 0xf0cb: //nox new CurrentArea = Area.Menus.Boosts.AntiScout; break; case 0x5c99: CurrentArea = Area.Menus.Boosts.FoodProduction; break; case 0x8115: CurrentArea = Area.Menus.Boosts.OilProduction; break; case 0xb74b: CurrentArea = Area.Menus.Boosts.StoneProduction; break; case 0xfea6: CurrentArea = Area.Menus.Boosts.IronProduction; break; case 0x506a: CurrentArea = Area.Menus.Boosts.CoinProduction; break; case 0x0506: CurrentArea = Area.Menus.Boosts.TroopQueue; break; case 0xc3ab: CurrentArea = Area.Menus.Boosts.TrainingSpeed; break; case 0x6d81: CurrentArea = Area.Menus.Boosts.TrainingStimulant; break; case 0xdd70: //memu CurrentArea = Area.Menus.Boosts.SetBonus; break; case 0x9138: CurrentArea = Area.Menus.Boosts.AttackStimulant; break; case 0x0d52: case 0x775c: //nox case 0xcbf5: //memu CurrentArea = Area.Menus.Items; break; case 0x217e: case 0xba89: //nox case 0x750a: //nox new CurrentArea = Area.Menus.Mission; break; case 0x2556: //Base Missions also fall here case 0x54fe: //nox case 0x5f4e: //nox new CurrentArea = Area.Menus.Missions.Daily; break; case 0x753c: case 0x6588: //nox case 0x89f8: //nox new CurrentArea = Area.Menus.Missions.Alliance; break; case 0x4262: case 0x6074: //nox case 0x7067: //nox new CurrentArea = Area.Menus.Missions.VIP; break; case 0x996d: case 0xa138: //nox case 0x9ee3: //nox new CurrentArea = Area.Menus.Missions.ActivateVIP; break; case 0x2670: case 0xb55a: //nox case 0xe02e: //nox new CurrentArea = Area.Menus.Missions.VIPStreak; break; case 0x5d85: case 0xc459: //nox case 0xf52c: //nox new CurrentArea = Area.Menus.Mail; break; case 0xb12c: //memu CurrentArea = Area.Menus.MailCompose; break; case 0x2186: case 0x653b: //nox case 0xf278: //nox new CurrentArea = Area.Menus.More; break; case 0xe814: case 0xfa8f: //grayed out loading/modal dialog case 0x255b: //nox case 0xe2f4: //nox modal case 0x3737: //now new case 0x4f4a: //now modal new CurrentArea = Area.Menus.Account; break; case 0x3561: case 0x3ad6: //grayed out (confirmation/max limit) case 0x055b: //nox case 0x6229: //nox grayed out case 0x8d70: //memu case 0xc22d: //memu modal CurrentArea = Area.Menus.ResourceHelp; break; case 0x6c9f: //nox case 0x7ef5: //nox new CurrentArea = Area.Menus.Resources; break; case 0x4e3e: //memu CurrentArea = Area.Menus.Commander; break; case 0xf40e: //memu weapon case 0x29d0: //memu helmet case 0xfc5a: //memu armor case 0x466d: //memu footwear case 0x0e0b: //memu accessory CurrentArea = Area.Menus.Gear; break; case 0x7b13: case 0x0359: //nox case 0xb69b: //nox new CurrentArea = Area.Menus.VIP; break; case 0x8f1e: //nox new CurrentArea = Area.Menus.VIPSubscriptions; break; case 0x6eae: case 0x8993: //nox case 0xa5f9: //nox new CurrentArea = Area.Menus.ShootingRanges.Lobby; break; case 0x1cea: case 0x0a36: //nox case 0x68e7: //nox Special Winter Shooting Range modal case 0x3554: //nox Special Winter Shooting Range case 0xc192: //memu Special Valentine's Day Shooting Range modal case 0x3a76: //memu Special Valentine's Day Shooting Range chksum = ScreenState.GetScreenChecksum(bmp, 300, 70, 10); if (chksum == 0xd714) { CurrentArea = Area.Menus.ShootingRanges.Crates; } else { CurrentArea = Area.Menus.ShootingRanges.Main; } break; case 0x7fab: case 0xf3f8: //nox case 0x969e: //nox new CurrentArea = Area.Menus.ShootingRanges.NormalCrate; break; case 0x87db: case 0xf551: case 0x9a77: //nox case 0xed12: //nox new CurrentArea = Area.Menus.RewardCrate; break; case 0xfab0: case 0xee9d: chksum = ScreenState.GetScreenChecksum(bmp, 110, 430, 20); switch (chksum) { case 0x3075: //MEmu CurrentArea = Area.Emulators.Android; break; /*TODO Redo * case 0xb47c: * CurrentArea = Area.Emulators.TaskManagerApp; * break; * case 0xfcff: * CurrentArea = Area.Emulators.TaskManagerRemove; * break; * case 0xa115: * CurrentArea = Area.Emulators.TaskManager; * break;*/ case 0xfab0: chksum = ScreenState.GetScreenChecksum(bmp, 190, 150, 20); //if (chksum == 0xa265) if (chksum == 0xf81a || chksum == 0x3dd6) //nox and nox new { CurrentArea = Area.Others.SessionTimeout; } else { CurrentArea = Area.Emulators.Crash; } break; } break; case 0xac21: case 0x99c8: //nox CurrentArea = Area.Emulators.Android; break; case 0xa43d: case 0xd521: //memu CurrentArea = Area.Emulators.Loading; break; case 0x59b7: case 0xe2f3: //arnold case 0xb951: //halloween arnold case 0x67fa: //case 0x9e4f: //depricated? CurrentArea = Area.Others.Splash; break; case 0x60b3: //memu case 0xa5a8: //memu loading case 0xb1d0: //memu modal CurrentArea = Area.Others.Login; break; case 0x0f50: //memu CurrentArea = Area.Menus.BuildingList; break; case 0x4491: //memu CurrentArea = Area.Menus.Buildings.HQ; break; case 0xfdea: //memu CurrentArea = Area.Menus.Buildings.Wall; break; case 0x0aa6: //memu CurrentArea = Area.Menus.Buildings.Memorial; break; case 0x4bf0: //memu CurrentArea = Area.Menus.Buildings.Warehouse; break; case 0xe7c6: //memu CurrentArea = Area.Menus.Buildings.Radar; break; case 0x96c1: //memu CurrentArea = Area.Menus.Buildings.TradingPost; break; case 0xc5e2: //memu CurrentArea = Area.Menus.Buildings.HallOfHeroes; break; case 0xdf29: //memu CurrentArea = Area.Menus.Buildings.Hospital; break; case 0x0316: //memu CurrentArea = Area.Menus.Buildings.TrainingGrounds; break; case 0xe980: //memu CurrentArea = Area.Menus.Buildings.Bank; break; case 0xe810: //memu research case 0x2671: //memu economics case 0xe157: //memu combat case 0x3f17: //memu traps case 0x4d3e: //memu commander case 0x618e: //memu adv combat case 0x09d1: //memu adv traps case 0x8ce4: //memu manufacturing case 0x2b70: //memu battle tactics case 0x9d3c: //memu set bonus case 0x2b6d: //memu mod set bonus case 0xf8a7: //memu building development case 0xcb06: //memu mercenary combat case 0xcf59: //memu augments CurrentArea = Area.Menus.Buildings.Research; break; case 0xc1fe: //memu CurrentArea = Area.Menus.Buildings.Embassy; break; case 0xf4d6: //memu CurrentArea = Area.Menus.Buildings.WarRoom; break; case 0x36a2: //memu CurrentArea = Area.Menus.Buildings.Prison; break; case 0x8b1e: //memu CurrentArea = Area.Menus.Buildings.DeathRow; break; case 0x3c43: //memu CurrentArea = Area.Menus.Buildings.Farm; break; case 0x9046: //memu CurrentArea = Area.Menus.Buildings.Quarry; break; case 0x007e: //memu CurrentArea = Area.Menus.Buildings.IronMine; break; case 0x582a: //memu CurrentArea = Area.Menus.Buildings.OilWell; break; case 0x39bb: //memu CurrentArea = Area.Menus.Buildings.Vault; break; case 0xfcbb: //memu CurrentArea = Area.Menus.Buildings.Monument; break; case 0x8b9e: //memu CurrentArea = Area.Menus.Buildings.SpeedUpFactory; break; case 0x7d41: //memu CurrentArea = Area.Menus.Buildings.CombatLab; break; case 0xcb14: //memu CurrentArea = Area.Menus.Buildings.TroopAcademy; break; case 0x6e5b: //memu CurrentArea = Area.Menus.Buildings.CovertOpsCenter; break; case 0x30ac: CurrentArea = Area.Menus.BuildingBoost; break; case 0x9be4: //memu alliance chat case 0x9d42: //memu state/alliance transition case 0x658b: //memu state chat case 0x1cbd: //memu custom chat case 0x0169: //memu contact list CurrentArea = Area.Others.Chat; break; case 0x3436: case 0x6716: //memu get gold CurrentArea = Area.Others.Ad; break; default: ushort chksum2 = ScreenState.GetScreenChecksum(bmp, 267, 20, 20); switch (chksum2) { case 0xf958: case 0x2f05: //nox new case 0x97e4: CurrentArea = Area.MainBases.Main; break; case 0x3ef3: //main base with modal dialog case 0x7d45: //nox new chksum2 = ScreenState.GetScreenChecksum(bmp, 145, 125, 20); switch (chksum2) { case 0xb69d: //Free Daily Bonus case 0x32c5: //Daily Bonus Club case 0xf84f: //nox Free Daily Bonus c = bmp.GetPixel(100, 430); if (c.Equals(41, 93, 115)) { CurrentArea = Area.MainBases.DailyLogin; } else if (c.Equals(115, 121, 123)) { CurrentArea = Area.MainBases.DailyLoginClaimed; } break; case 0x68a6: //Daily Bonus Club: Elite Pack case 0xa0fb: CurrentArea = Area.MainBases.DailyLoginClaimed; break; case 0xa377: //"Congratulations" case 0x76a1: //"Supply Crate" case 0x8770: //"Supply Crate" case 0x57d2: //nox congrats CurrentArea = Area.MainBases.SecretGiftCollect; break; case 0xc5ca: case 0x220f: //nox CurrentArea = Area.MainBases.GlobalGiftCollect; break; default: chksum = ScreenState.GetScreenChecksum(bmp, 180, 190, 10); if (chksum == 0x4c29) // || chksum == 0x0a22) { CurrentArea = Area.Others.Quit; } else if (chksum == 0xad22) { //some kind of small message with blue button, like errors //CurrentArea = Area.Others.Quit; } else { try { bmp.Save(String.Format("{0}\\-save.bmp", Controller.Instance.GetFullScreenshotDir())); } catch (System.Runtime.InteropServices.ExternalException e) { } } break; } break; default: c = bmp.GetPixel(112, 17); c2 = bmp.GetPixel(285, 28); if (c.Equals(41, 113, 156)) { //world map c = bmp.GetPixel(372, 12); if (c.R > 30 && c.G > 30 && c.B > 35) { CurrentArea = Area.StateMaps.FullScreen; } else { CurrentArea = Area.StateMaps.Main; } } else if (c.Equals(16, 44, 57)) { //world map modal chksum = ScreenState.GetScreenChecksum(bmp, 180, 190, 10); if (chksum == 0x4c29) { CurrentArea = Area.Others.Quit; } else { c = bmp.GetPixel(178, 183); if (c.Equals(239, 239, 239) || c.Equals(247, 255, 255)) { //world map coordinate c = bmp.GetPixel(269, 265); if (c.R > 5 && c.G > 40 && c.B > 50) { CurrentArea = Area.StateMaps.Coordinate; } else { CurrentArea = Area.StateMaps.CoordinateError; } } } } else { c = bmp.GetPixel(178, 183); if (c.Equals(239, 239, 239) || c.Equals(247, 255, 255)) { //world map coordinate c = bmp.GetPixel(269, 265); if (c.R > 5 && c.G > 40 && c.B > 50) { CurrentArea = Area.StateMaps.Coordinate; } else { CurrentArea = Area.StateMaps.CoordinateError; } } else { c = bmp.GetPixel(20, 20); if (!c.Equals(140, 211, 239)) { c = bmp.GetPixel(50, 350); c2 = bmp.GetPixel(325, 550); c3 = bmp.GetPixel(200, 500); if (!c.Equals(0, 0, 0) || !c2.Equals(0, 0, 0)) { c = bmp.GetPixel(378, 20); c2 = bmp.GetPixel(135, 665); c3 = bmp.GetPixel(135, 535); if ((c.Equals(239, 239, 239) && (c2.Equals(222, 130, 0) || c2.Equals(33, 158, 90))) || (c.Equals(247, 247, 247) && c3.Equals(222, 130, 0)) || c.Equals(239, 235, 231)) //&& c3.Equals(222, 130, 0))) { CurrentArea = Area.Others.Ad; } else { c = c; } } } else { c = c; } } } break; } break; } }