All pastes #329758 Raw Edit

Anonymous

public java v1 · immutable
#329758 ·published 2007-01-27 00:56 UTC
rendered paste body
import java.awt.Color;import java.awt.Graphics;import impsoft.nexus.bots.color.constants.Areas;import impsoft.nexus.bots.color.methods.ColorScript;import impsoft.nexus.bots.color.scriptobjects.MiniMap;import impsoft.nexus.components.paint.PaintJob;public class canReach extends ColorScript {    @Override    public boolean doStart(String cmd, String[] args)            throws InterruptedException {        // TODO Auto-generated method stub        return true;    }    @Override    public void script() throws InterruptedException {        while (true) {            final int sleepTime=defaultmaxAgeInMillisecs * 1;            try {                final int width = MiniMap.width;                final int height = MiniMap.height;                final int xOffSet = MiniMap.minX;                final int yOffSet = MiniMap.minY;                final byte[][] places = canReachRec(currentMouseX(),                        currentMouseY());                if (places != null) {                    addPaintJob(new PaintJob() {                        long start = System.currentTimeMillis();                        @Override                        public void paint(Graphics g) {                            g.setColor(Color.green);                            for (int xB = 0; xB < width; xB++) {                                for (int yB = 0; yB < height; yB++) {                                    if (places[xB][yB] == 2) {                                        g.fillRect(xB + xOffSet, yB + yOffSet,                                                1, 1);                                    }                                }                            }                        }                        @Override                        public boolean timeUp() {                            return start + sleepTime < System                                    .currentTimeMillis();                        }                    });                }            } catch (RuntimeException e) {                log("e.getCause()=" + e.getCause() + "\n" + e.toString());                e.printStackTrace();            }            sleep(sleepTime-4);        }    }    short ignore[][] = { { 120, 140, 180, 20 }, { 100, 120, 160, 20 },            { 245, 239, 230, 20 } };    public byte[][] canReachRec(int x, int y) {        if (!MiniMap.inMiniMap(x, y)) {            return null;        }        int width = MiniMap.width;        int height = MiniMap.height;        int xOffSet = MiniMap.minX;        int yOffSet = MiniMap.minY;        short[][][] colorMap = getColorArray2d();        boolean blocksp[][] = new boolean[width][height];        for (int xB = 0; xB < width; xB++) {            for (int yB = 0; yB < height; yB++) {                for (short[] color : ignore) {                    short r = colorMap[xB + xOffSet][yB + yOffSet][0];                    short g = colorMap[xB + xOffSet][yB + yOffSet][1];                    short b = colorMap[xB + xOffSet][yB + yOffSet][2];                    int redChange = r - color[0];                    int greenChange = g - color[1];                    int blueChange = b - color[2];                    int tolerance = color[3];                    if ((greenChange >= 0 ? greenChange : -greenChange) < tolerance                            && (redChange >= 0 ? redChange : -redChange) < tolerance                            && (blueChange >= 0 ? blueChange : -blueChange) < tolerance) {                        blocksp[xB][yB] = true;                        if (xB > 0) {                            blocksp[xB - 1][yB] = true;                        }                        if (xB < width - 1) {                            blocksp[xB + 1][yB] = true;                        }                        if (yB > 0) {                            blocksp[xB][yB - 1] = true;                        }                        if (yB < height - 1) {                            blocksp[xB][yB + 1] = true;                        }                    }                }            }        }        byte places[][] = new byte[width][height];        canReachCornerFan(colorMap, places, blocksp, 647, 81, xOffSet, yOffSet,                0, 0);        canReachCornerFan(colorMap, places, blocksp, 650, 82, xOffSet, yOffSet,                0, 1);        canReachCornerFan(colorMap, places, blocksp, 649, 85, xOffSet, yOffSet,                0, 2);        canReachCornerFan(colorMap, places, blocksp, 646, 84, xOffSet, yOffSet,                0, 3);        boolean good = true;        while (good) {            good = false;            for (int xB = 1; xB < width - 1; xB++) {                for (int yB = 1; yB < height - 1; yB++) {                    if (places[xB][yB] == 2) {                        if (places[xB][yB - 1] == 0) {                            if (canReachRec(colorMap, places, blocksp, xB                                    + xOffSet, yB + yOffSet - 1, xOffSet,                                    yOffSet, 0))                                good = true;                        }                        if (places[xB][yB + 1] == 0) {                            if (canReachRec(colorMap, places, blocksp, xB                                    + xOffSet, yB + yOffSet + 1, xOffSet,                                    yOffSet, 0))                                good = true;                        }                        if (places[xB + 1][yB] == 0) {                            if (canReachRec(colorMap, places, blocksp, xB                                    + xOffSet + 1, yB + yOffSet, xOffSet,                                    yOffSet, 0))                                good = true;                        }                        if (places[xB - 1][yB] == 0) {                            if (canReachRec(colorMap, places, blocksp, xB                                    + xOffSet - 1, yB + yOffSet, xOffSet,                                    yOffSet, 0))                                good = true;                        }                    }                }            }        }        return places;    }    public void canReachCornerFan(short[][][] colorMap, byte places[][],            boolean blocksp[][], int x, int y, int xOffSet, int yOffSet, int i,            int mode) {        i++;        if (i > 1500) {            log("canReachTriangle x=" + x + " y=" + y + " i=" + i);            return;        }        if (!MiniMap.inMiniMap(x, y)) {            return;        }        if (places[x - xOffSet][y - yOffSet] == 2                || places[x - xOffSet][y - yOffSet] == 1) {            return;        }        if (blocksp[x - xOffSet][y - yOffSet]) {            places[x - xOffSet][y - yOffSet] = 1;            return;        }        places[x - xOffSet][y - yOffSet] = 2;        switch (mode) {        case 0:            canReachCornerFan(colorMap, places, blocksp, x + 1, y, xOffSet,                    yOffSet, i, mode);            canReachCornerFan(colorMap, places, blocksp, x, y - 1, xOffSet,                    yOffSet, i, mode);            break;        case 1:            canReachCornerFan(colorMap, places, blocksp, x + 1, y, xOffSet,                    yOffSet, i, mode);            canReachCornerFan(colorMap, places, blocksp, x, y + 1, xOffSet,                    yOffSet, i, mode);            break;        case 2:            canReachCornerFan(colorMap, places, blocksp, x - 1, y, xOffSet,                    yOffSet, i, mode);            canReachCornerFan(colorMap, places, blocksp, x, y + 1, xOffSet,                    yOffSet, i, mode);            break;        case 3:            canReachCornerFan(colorMap, places, blocksp, x - 1, y, xOffSet,                    yOffSet, i, mode);            canReachCornerFan(colorMap, places, blocksp, x, y - 1, xOffSet,                    yOffSet, i, mode);            break;        }    }    public boolean canReachRec(short[][][] colorMap, byte places[][],            boolean blocksp[][], int x, int y, int xOffSet, int yOffSet, int i) {        if (i > 1500) {            log("canReachRec x=" + x + " y=" + y + " i=" + i);            return true;        }        i++;        if (!MiniMap.inMiniMap(x, y)) {            return false;        }        if (places[x - xOffSet][y - yOffSet] == 2                || places[x - xOffSet][y - yOffSet] == 1) {            return false;        }        if (blocksp[x - xOffSet][y - yOffSet]) {            places[x - xOffSet][y - yOffSet] = 1;            return false;        }        places[x - xOffSet][y - yOffSet] = 2;        return canReachRec(colorMap, places, blocksp, x + 1, y, xOffSet, yOffSet, i) ||        canReachRec(colorMap, places, blocksp, x - 1, y, xOffSet, yOffSet, i) ||        canReachRec(colorMap, places, blocksp, x, y + 1, xOffSet, yOffSet, i) ||        canReachRec(colorMap, places, blocksp, x, y - 1, xOffSet, yOffSet, i);    }}