From 0a598543cd50983302d5ec98d94a0a18e5735de1 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Thu, 10 Mar 2022 00:31:51 +0100 Subject: [PATCH] autoban --- include/lolautoaccept.h | 2 ++ src/lolautoaccept.cpp | 27 ++++++++++++++++++++++++++- src/main.cpp | 1 + src/screen.cpp | 2 ++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/include/lolautoaccept.h b/include/lolautoaccept.h index 5b80339..666f64c 100644 --- a/include/lolautoaccept.h +++ b/include/lolautoaccept.h @@ -11,6 +11,7 @@ private: ScreenShot* screen; Matcher acceptmatcher; Matcher arrowmatcher; + Matcher banmatcher; Matcher::Match lastacceptmatch; XInputSimulator& sim; @@ -31,6 +32,7 @@ private: State state = State::LOBBY; void checkForGame(); + void checkForBan(); void performClick(uint32_t nr); void enterSearch(const std::string& text); void pickFirst(const std::string& search); diff --git a/src/lolautoaccept.cpp b/src/lolautoaccept.cpp index c225082..b0156bd 100644 --- a/src/lolautoaccept.cpp +++ b/src/lolautoaccept.cpp @@ -61,6 +61,28 @@ void LolAutoAccept::checkForGame() { lastacceptmatch = mat; } +void LolAutoAccept::checkForBan() { + cv::Mat img; + screen->take(img); + + cv::resize(img, img, cv::Size(ScreenShot::DEFAULTWIDTH, ScreenShot::DEFAULTHEIGHT)); + + Matcher::Match mat = banmatcher.match(img); + if(mat.doesMatch) { + Log::info << "Ban state"; + + if(!ban.empty()) + pickFirst(ban); + + std::this_thread::sleep_for(std::chrono::milliseconds(800)); + + // click "ban" + performClick(4); + + state = State::BAN; + } +} + void LolAutoAccept::performClick(uint32_t nr) { inputs.setOffset(screen->getXOffset(), screen->getYOffset()); inputs.setScale(screen->getXScale(), screen->getYScale()); @@ -94,12 +116,13 @@ void LolAutoAccept::pickFirst(const std::string& search) { performClick(3); // first champion } -LolAutoAccept::LolAutoAccept() : acceptmatcher("imgs/Accept.png"), arrowmatcher("imgs/arrowdown.png"), sim(XInputSimulator::getInstance()) { +LolAutoAccept::LolAutoAccept() : acceptmatcher("imgs/Accept.png"), arrowmatcher("imgs/arrowdown.png"), banmatcher("imgs/ban.png"), sim(XInputSimulator::getInstance()) { // click positions in 1280x720 scale inputs.addPoint({0, 0}); // zero zero inputs.addPoint({645, 560}); // accept game inputs.addPoint({775, 105}); // search box inputs.addPoint({380, 160}); // first champ + inputs.addPoint({638, 608}); // pick champ } void LolAutoAccept::setPrePick(const std::string& prePick) { @@ -139,6 +162,8 @@ void LolAutoAccept::run() { case State::LOBBY: checkForGame(); break; + case State::PREPICK: + checkForBan(); default: break; } diff --git a/src/main.cpp b/src/main.cpp index c73829e..25173c9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,6 +15,7 @@ int main(int argc, const char** argv) { LolAutoAccept lolaa; lolaa.setPrePick("morgana"); + lolaa.setBan("swain"); lolaa.run(); diff --git a/src/screen.cpp b/src/screen.cpp index 906a0cf..228680d 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -119,6 +119,8 @@ void ScreenShot::take(cv::Mat& cv_img) { if (init) init = false; + updateAttrib(); + XShmGetImage(display, window, ximg, 0, 0, 0x00ffffff); cv_img = cv::Mat(wattrib.height, wattrib.width, CV_8UC4, ximg->data); }