gur111 icon

Zero Sign v2.0

gur111 | PRO | 07/09/18 09:22:55 AM UTC | 0 ⭐ | 932 👁️ | Never ⏰ | []
Java |

11 KB

|

None

|

0 👍

/

0 👎

import java.lang.Math; // headers MUST be above the first class
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import javax.imageio.ImageIO;
import java.io.*;
import java.time.LocalTime;
 
 
public class SignZero{
    private static Robot bot;
    final static String CNT_FILE_NAME = "ZeroSignCounter.txt";
    final static int WAIT_INTERVAL = 500;
    final static int MAX_WAIT = 40; // In halves of a second
    final static Rectangle SCREEN = new Rectangle(0, 0, 1920, 1080);
    final static int KEY_INTERVAL = 20;
    final static int CLICK_OFFSET = 5;
    final static int DROPDOWN_DELAY = 200;
    static int counter = 0;
    static int skips = 0;
    enum Error {
        NO_ERR,
        NOT_OPENED,
        NOT_CLOSED,
        NO_PANEL
    }
    static Error lastErr = Error.NO_ERR;
    
    
    public static void main(String args[]) throws IOException, AWTException{
        main();
        BufferedReader reader = new BufferedReader(new FileReader(CNT_FILE_NAME));
        String line;
        int lastCount = 0;
        if((line = reader.readLine()) != null){
            lastCount = Integer.parseInt(line);
        }
        reader.close();
        BufferedWriter writer = new BufferedWriter(new FileWriter(CNT_FILE_NAME));
        writer.write(""+(lastCount+counter));
        writer.close();
        
        
    }
    
    private static void main() throws IOException, AWTException{
        
        BufferedImage editImg = getImg("edit"),
                        edit2Img = getImg("edit2"),
                        signBtnImg = getImg("sign_button"),
                        acceptImg = getImg("accept"),
                        tabsImg = getImg("tabs"),
                        succImg = getImg("success"),
                        assignFldImg = getImg("assign_field"),
                        businessDetailsImg = getImg("business_details"),
                        noEditImg = getImg("no_edit"),
                        ntnImg = getImg("netanya"),
                        detailsTabImg = getImg("details"),
                        cmdrFldImg = getImg("commander"),
                        fullListImg = getImg("full_list"),
                        infoTabTitleImg = getImg("causes"),
                        funcPanelImg = getImg("func_panel"),
                        popupTitleImg = getImg("edit_popup_title");
        
        bot = new Robot();
        while(true){
            Point p, signP;
            // Checking if ready
            log("Readying for next line", 5);
            if((p = waitForImg(funcPanelImg, 10)) == null){
                if((p = imgLoc(popupTitleImg)) != null){
                    if(lastErr != Error.NOT_CLOSED){
                        closeWin();
                        error("Somehow the windows didn't close. Counter might be wrong.");
                        lastErr = Error.NOT_CLOSED;
                        bot.delay(4000);
                        continue;
                    }else{
                        if(lastErr == Error.NO_PANEL){
                            lastErr = Error.NO_PANEL;
                            bot.delay(4000);
                            continue;
                        }else{
                            error("Window didn't close... Giving up.");
                            return;
                        }
                    }
                }
                error("Can't find panel. Something went wrong.");
                return;
            }
            
            // Wait for edit button
            log("Waiting for edit btn", 5);
            p = waitForImg(editImg, edit2Img);
            if(p == null){
                if(waitForImg(tabsImg) != null){
                    closeWin();
                    continue;
                }
                notFoundErr("edit button");
                return;
            }
            log("Found edit", 3);
            aimAndClick(p);
            
            // Wait for loading
            log("Waiting until loaded", 5);
            p = waitForImg(businessDetailsImg);
            if(p == null){
                if(lastErr == Error.NOT_CLOSED || lastErr == Error.NOT_OPENED){
                    notFoundErr("loaded details");
                    return;
                }
                // Make sure the win has opened
                if(imgLoc(funcPanelImg) == null){
                    if((p = imgLoc(popupTitleImg)) != null){
                        closeWin();
                        error("Somehow the windows didn't close. Counter might be wrong.");
                        lastErr = Error.NOT_CLOSED;
                        continue;
                    }
                }else{ // You can still see the panel. Try again.
                    lastErr = Error.NOT_OPENED;
                    continue;
                }
            }
            
            // Validate assignment
            log("Make sure a station is assigned", 5);
            p = waitForImg(assignFldImg, 2);
            if(p == null){
                if(imgLoc(noEditImg) != null){
                    closeWin();
                    skips++;
                    continue;
                }
            }else{
                aimAndClick(p);
                if((p = waitForImg(ntnImg, 5)) == null){
                    notFoundErr("dropdown ntn option");
                    return;
                }
                bot.delay(DROPDOWN_DELAY);
                aimAndClick(p);
            }
            
            // Go to more info tab
            log("Going to info tab", 5);
            p = waitForImg(detailsTabImg, 2);
            if(p == null){
                notFoundErr("more info tab");
                return;
            }
            aimAndClick(p);
            
            // Wait for loading
            log("Wait until info is loaded", 5);
            if(waitForImg(infoTabTitleImg) == null){
                notFoundErr("loaded info in info tab");
                return;
            }
            
            // Check commander
            log("Checking commander", 5);
            p = imgLoc(cmdrFldImg);
            if(p == null){
                log("Commander already set", 3);
            }else{
                aimAndClick(p);
                p = waitForImg(fullListImg, 2);
                if(p == null){
                    key(KeyEvent.VK_DOWN);
                    key(KeyEvent.VK_ENTER);
                }else{    
                    key(KeyEvent.VK_T);
                    key(KeyEvent.VK_K);
                    key(KeyEvent.VK_H);
                    key(KeyEvent.VK_V);
                    key(KeyEvent.VK_U);
                    space();
                    key(KeyEvent.VK_R);
                    key(KeyEvent.VK_J);
                    bot.delay(KEY_INTERVAL);
                    key(KeyEvent.VK_ENTER);
                }
                bot.delay(DROPDOWN_DELAY);
            }
            
            
            { // Try signing
                log("Looking for sign btn",5);
                p = waitForImg(signBtnImg);
                if(p == null){
                    skips++;
                    continue;
                }
                log("Click sign", 5);
                aimAndClick(p);
                
                // Accept Signing
                log("Accept signing", 5);
                p = waitForImg(acceptImg);
                if(p == null){
                    notFoundErr("accept button");
                    return;
                }
                space();
                
                // Check for success msg
                log("Wait for success", 5);
                p = waitForImg(succImg, 7);
                if(p == null){
                    notFoundErr("success");
                    if(waitForImg(acceptImg, 4) == null){
                        notFoundErr("accept button");
                        return;
                    }
                    space();
                    continue;
                }
                counter++;
                space();
            }
        }
    }
    
    private static void notFoundErr(String name){
        log("Error. Can't find "+name, 1);
    }
    
    private static void error(String str){
        log("Error. "+str, 1);
    }
    
    private static void aimAndClick(Point p){
        aim((int) p.getX()+CLICK_OFFSET, (int) p.getY()+CLICK_OFFSET);
        bot.delay(KEY_INTERVAL);
        click();
    }
    
    private static BufferedImage getImg(String name) throws IOException{
        return ImageIO.read(new File("Assets\\"+name+".bmp"));
        
    }
    
    private static void key(int keyCode){
        bot.keyPress(keyCode);
        bot.delay(KEY_INTERVAL);
        bot.keyRelease(keyCode);
    }
    
    private static void space(){
        bot.keyPress(KeyEvent.VK_SPACE);
        bot.delay(KEY_INTERVAL);
        bot.keyRelease(KeyEvent.VK_SPACE);
    }
    
    private static void click(){
        bot.mousePress(InputEvent.BUTTON1_MASK);
        bot.mouseRelease(InputEvent.BUTTON1_MASK);
    }
    
    private static void aim(int x, int y){
        bot.mouseMove(x,y);
    }
    
    private static void assignStation(){
        // TODO: Assign missing stuff
    }
    
    static Point waitForImg(BufferedImage img){
        return waitForImg(img, 0);
    }
  
    static Point waitForImg(BufferedImage img, BufferedImage img2){
        return waitForImg(img, img2, 0);
    }
    
    private static Point waitForImg(BufferedImage img, BufferedImage img2, int sec) {
        int times = sec*2;
        if(sec == 0){
            times = MAX_WAIT;
        }
        while((times--) > 0){
            bot.delay(WAIT_INTERVAL);
            Point p;
            // If found then return loc
            if((p = imgLoc(img)) != null || (p = imgLoc(img2)) != null){
              log("", 5);
              return p;
            }
            logil(".", 5);
        }
        log("", 5);
        return null;
    }
  
  
    private static Point waitForImg(BufferedImage img, int sec) {
        int times = sec*2;
        if(sec == 0){
            times = MAX_WAIT;
        }
        while((times--) > 0){
            bot.delay(WAIT_INTERVAL);
            Point p;
            // If found then return loc
            if((p = imgLoc(img)) != null){
              log("", 5);
              return p;
            }
            logil(".", 5);
        }
        log("", 5);
        return null;
        
    }
    
    private static Point imgLoc(BufferedImage img){
        
        BufferedImage current = bot.createScreenCapture(SCREEN);
        
        for (int x = 0; x < SCREEN.getWidth()-img.getWidth(); x++)
            for (int y = 0; y < SCREEN.getHeight()-img.getHeight(); y++){
                boolean match = true;
                for (int x2 = 0; x2 < img.getWidth() && match; x2++){
                    for (int y2 = 0; y2 < img.getHeight() && match; y2++){
                        if (img.getRGB(x2, y2) != current.getRGB(x+x2, y+y2)){
                            match = false;
                        }
                    }
                }
                if (match){
                    log("Found on: ("+x+","+y+")", 10);
                    return new Point(x,y);
                }
            }
        return null;
        
    }
    
    private static void log(String str, int lvl){
        log(str);
    }
    
    private static void logil(String str, int lvl){
        logil(str);
    }
    
    private static void log(String str){
        LocalTime localTime = LocalTime.now();
        logil("["+localTime+"]: "+str+"\n");
    }
    
    private static void logil(String str){
        System.out.print(str);
    }
    
    
    private static void closeWin(){
        bot.keyPress(KeyEvent.VK_ALT);
        bot.keyPress(KeyEvent.VK_F4);
        bot.delay(20);
        bot.keyRelease(KeyEvent.VK_ALT);
        bot.keyRelease(KeyEvent.VK_F4);
  }
    
    
}

Comments