easyclick之大话西游2经典版修罗任务设计开发(1)

大话西游2经典版修罗任务设计开发

修罗任务是大话经典任务之一。是人物获得经验的主要来源之一。接下来我们就来分析下任务这个任务,放上
代码。所有代码均有注释,通俗易懂,方便学习。
其中包含了本次任务的很多公共方法,下面会有专门介绍

公共方法

主要公共方法介绍,主要包含了ocr识别、找图、找色等一些常用的基础方法。其中、找图和找色完全可以用其中的一种就可以做,为了学习,把这些方法都用上了。

/**
 * @param type 1地图识别  2 坐标识别  3修罗任务识别  4识别申请列表种族  5五倍任务识别 
 * 6飞行状态识别(飞、降) 7修罗次数 8五环完成对话识别		(该方法识别的方式有很多,字库
 * 、找色、图片等等,我这里使用的是文字识别api)
 */
shibie(type)
/**
 * 2S间隔判断是否移动 true 没移动 fasle移动中	(该方法为了效率,我自己通过Tesseract OCR训练了一一套数字字库,没有使用在线api识别是因为该方法调用过于频繁,我怕自己服务器压力受不了)
 */
is_move1()
/**
 *坐标转换,把任务坐标转换成对应的小地图坐标
 *
 * @param piont 任务坐标点
 * @param lit_map_right  小地图右上真实坐标
 * @param big_map_right 大地图右上像素坐标
 * @param big_map_left  大地图左下像素坐标
 * @param type 不传偏差小传了偏差大
 * @returns {*}
 * (改方法是通过比例把任务坐标转换成小地图坐标,点击小地图自动寻路过去)
 */
toRealxy(piont, lit_map_right, big_map_right, big_map_left, type)

/**
 * 1 信息弹窗  2 找暂离队伍的颜色  3对话采挖时弹出的对话“不”字 4 加蓝 5加血 6飞行飞字 7自动战斗按钮的小三角 8对话按钮
 * @param type 找色类型
 * @returns {boolean}
 */
finColor(type, is_log)

任务流程分解

   对于脚本,都是把一个固定流程分解以后,逐步实现其流程。那么只需要分解修罗流程就可以写好这个任务
的脚本。
0、去任务NPC地图
1、领任务
2、点击寻路
3、去任务点的路上
4、战斗
5、返回重新领取任务
下面我们定义修罗任务的基础参数
let xl_task = {
	//任务坐标点
    point: "",
    //任务地图
    map: "",
    //当前人物设定的法术
    xl_fashu: "",
    //当前队伍的人员信息
    xl_team: [],
    //修罗地图找坐标次数计数
    count_nmb: 0,
    acount_nmb: 0,
    shibie_acount_nmb: 0,
    //返回地图时是否使用的飞行道具回去
    is_huichengfu: false,
    //任务开始时间计时
    start_time: 0,
    //到达任务地图时间
    task_map_time: 0,
    //需要对话的怪物点NPC列表信息
    xl_click_point: [],
    //0 去灵兽 1领任务 2点击寻路  3去任务点的路上 4战斗  5使用回城符文
    step: 0
}

流程-领任务

任务领取,我们需要分析其各种情况。各种情况的基础条件就是当前人物是否在移动中,移动我们就不做任何
处理,未移动我们就做处理

领取修罗任务
下面我们贴出去步骤0的去灵兽的代码

// 0 去灵兽
xl_task.go_lingshou = function () {
    logd("0:进入去领修罗任务");
    closeother()
    //判断当前地图
    if (shibie(1) == "灵兽村") {
        logd("在灵兽村");
        if (xl_task.is_huichengfu) {
            if (findPic("close_right_down1280.png", 2, "关闭物品栏", true)) {
                findPicAndClick("close_right_down1280.png", 2, "关闭物品栏")
            }
            if (!findPic("duiwu1280.png", 11, "满员标志")) {
                logd("队伍不满员");
                duiwu_stat();
            }
            is_chixiang();
            while (finColor(2)) {
                if (findPic("duiwu1280.png", 11, "满员标志")) {
                    logd("队伍满员");
                } else {
                    duiwu_stat();
                }
            }
            logd("在灵兽村使者旁边,准备做好开始领任务");
            sleep(500);
            click_point(map_big_to_little_point.当前地图, "灵兽村地图");
            sleep(800);
            if (findPic("click_search_npc1280.png", 19, "小地图搜索按钮")) {
                findPicAndClick("click_search_npc1280.png", 19, "小地图搜索按钮");
            } else {
                wb_task.step = 0;
                return;
            }
            sleep(500);
            //1280分辨率
            click_point("480,208", "点击搜索框");
            sleep(800);
            imeInputText(null, "灵兽村使者")
            sleep(1000);
            click_point("1150,610", "搜索按钮");
            sleep(800);
            click_point("490,270", "点击搜索结果")
            xl_task.step = 1;
            return
        }
        if (is_move1()) {
            logd("没有移动");
            let now_point = shibie(2);
            let now_points = now_point.split(",");
            if (parseInt(now_points[0]) > 99 && parseInt(now_points[0]) < 135 && parseInt(now_points[1]) > 80 && parseInt(now_points[1]) < 100) {
                logd("在灵兽村使者旁边,为领任务做准备(队伍吃香)");
                if (!findPic("duiwu1280.png", 11, "满员标志")) {
                    logd("队伍不满员");
                    duiwu_stat();
                }
                is_chixiang();
                while (finColor(2)) {
                    if (findPic("duiwu1280.png", 11, "满员标志")) {
                        logd("队伍满员");
                    } else {
                        duiwu_stat();
                    }
                }
                logd("在灵兽村使者旁边,准备做好开始领任务");
                sleep(500);
                click_point(map_big_to_little_point.当前地图, "灵兽村");
                sleep(800);
                if (findPic("click_search_npc1280.png", 19, "小地图搜索按钮")) {
                    findPicAndClick("click_search_npc1280.png", 19, "小地图搜索按钮");
                } else {
                    wb_task.step = 0;
                    return;
                }
                sleep(500);
                //1280分辨率
                click_point("480,208", "点击搜索框");
                sleep(800);
                imeInputText(null, "灵兽村使者")
                sleep(1000);
                click_point("1150,610", "搜索按钮");
                sleep(800);
                click_point("490,270", "点击搜索结果")
                xl_task.step = 1;
                return
            } else {
                logd("不在在灵兽村使者旁边,点击地图到他旁边");
                click_point(map_big_to_little_point.当前地图, "灵兽村")
                sleep(600)
                findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
                sleep(300);
                click_point("625,280", "系统信息弹框");
                sleep(500)
                //1280分辨率 修罗点
                click_point("590,310", "修罗领取任务点");
                sleep(500)
                findPicAndClick("close_little_map1280.png", 1, "关闭小地图");
                return;
            }
        }
    } else {
        logd("不在灵兽村");
        if (xl_task.is_huichengfu) {
            closeother();
            findPicAndClick("open_package1280.png", 13, "背包按钮");
            sleep(600);
            if (findPic("open_package1280.png", 13, "背包按钮")) {
                findPicAndClick("open_package1280.png", 13, "背包按钮");
                sleep(600);
            }
            click_point("896,140", "任务物品栏");
            sleep(500);
            click_point("896,140", "任务物品栏");
            sleep(500);
            findPicAndClick("xiuluo_back1280.png", 10, "修罗回城福");
            sleep(800);
            findPicAndClick("xiuluo_use1280.png", 9999, "使用按钮");
            xl_task.is_huichengfu = false;
            sleep(800)
            xl_task.step = 0
            return;
        }
        if (is_move1()) {
            logd("没有移动");
            findPicAndClick("open_big_map1280.png", 18, "打开大地图");
            sleep(600)
            //找到灵兽村
            click_point(map_big_to_little_point.灵兽村, "灵兽村");
            sleep(600)
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(300);
            click_point("625,280", "系统信息弹框");
            sleep(500)
            //1280分辨率 修罗点
            click_point("590,310", "修罗领取任务点");
            sleep(500)
            findPicAndClick("close_little_map1280.png", 1);
            return;
        }
    }
}

领任务

去灵兽代码中,我们有xl_task.step = 1;设置当前任务状态为领任务的操作,那么接下来我们就要处理领任务
的操作了,下面我们贴出代码。

在这里插入图片描述

xl_task.get_task = function () {
    logd("1:进入开始识别领取修罗任务并领任务");
    let per_time = time();
    while (!findPic("xiuluo_talk1280.png", 6, "修罗对话框识别", true)) {
        if (time() - per_time > 5 * 1000) {
            logd("修罗任务对话框超过5s未弹出,重新开始领取任务");
            closeother()
            xl_task.step = 0;
            return
        }
    }
    logd("识别领取修罗任务对话框已打开,开始领取任务");
    let a = shibie(7);
    let match = a.match(/:(\d+)/);
    xl_task.shibie_acount_nmb = match ? parseInt(match[1], 10) : 0;
    if (xl_task.shibie_acount_nmb === 0) {
        logd("当前修罗次数:" + xl_task.acount_nmb);
    } else {
        if (xl_task.acount_nmb != 0 && xl_task.shibie_acount_nmb - xl_task.acount_nmb < 100) {
            xl_task.acount_nmb = xl_task.shibie_acount_nmb;
            logd("当前修罗次数:" + xl_task.shibie_acount_nmb);
        } else {

        }
    }
    sleep(600);
    click_point("1080,200", "修罗任务");
    sleep(800);
    let map_and_point = shibie(3);
    if (map_and_point.includes("庄")) {
        xl_task.map = "四圣庄";
    } else if (map_and_point.includes("东")) {
        xl_task.map = "长安城东";
    } else if (map_and_point.includes("长安")) {
        xl_task.map = "长安";
    } else if (map_and_point.includes("凤") && map_and_point.includes("七层")) {
        xl_task.map = "凤巢七层";
    } else if (map_and_point.includes("凤") && map_and_point.includes("六层")) {
        xl_task.map = "凤巢六层";
    } else if (map_and_point.includes("凤") && map_and_point.includes("五层")) {
        xl_task.map = "凤巢五层";
    } else if (map_and_point.includes("龙") && map_and_point.includes("七层")) {
        xl_task.map = "龙窟七层";
    } else if (map_and_point.includes("龙") && map_and_point.includes("六层")) {
        xl_task.map = "龙窟六层";
    } else if (map_and_point.includes("龙") && map_and_point.includes("五层")) {
        xl_task.map = "龙窟五层";
    } else if (map_and_point.includes("洛阳城")) {
        xl_task.map = "洛阳城";
    } else if (map_and_point.includes("白骨山")) {
        xl_task.map = "白骨山";
    } else if (map_and_point.includes("万寿山")) {
        xl_task.map = "万寿山";
    } else if (map_and_point.includes("园")) {
        xl_task.map = "蟠桃园";
    } else if (map_and_point.includes("兰若寺")) {
        xl_task.map = "兰若寺";
    } else if (map_and_point.includes("瑶池")) {
        xl_task.map = "瑶池";
    } else if (map_and_point.includes("大唐边境")) {
        xl_task.map = "大唐边境";
    } else if (map_and_point.includes("大") && map_and_point.includes("五层")) {
        xl_task.map = "大雁塔五层";
    } else if (map_and_point.includes("大") && map_and_point.includes("四层")) {
        xl_task.map = "大雁塔四层";
    } else if (map_and_point.includes("大") && map_and_point.includes("三层")) {
        xl_task.map = "大雁塔三层";
    } else {
        logd("未识别到修罗地图,从新领取任务");
        closeother()
        xl_task.step = 0;
        return
    }
    logd("修罗任务地图:" + xl_task.map);
    let matches = map_and_point.match(/\((\d+),(\d+)\)/);
    if (matches) {
        xl_task.point = matches[1] + "," + matches[2];
        logd("修罗任务坐标:" + xl_task.point);
        xl_task.task_state = true;
    } else {
        logd("未识别坐标,重新领取任务");
        closeother()
        xl_task.step = 0;
        return
    }
    logd("跳出开始识别领取修罗任务并领任务");
    logd((xl_task.shibie_acount_nmb === 0 ? xl_task.acount_nmb : xl_task.shibie_acount_nmb) + "次" + xl_task.map + "坐标:" + xl_task.point);
    findPicAndClick("close_right_down1280.png", 3, "关闭对话界面");
    sleep(600);
    if (xl_task.acount_nmb % ybb === 0) {
        findPicAndClick("click_search_npc1280.png", 19, "地图NPC查询列表");
        sleep(600);
        //1280分辨率
        click_point("480,245", "NPC列表超级巫医");
        while (!findPic("ybb1280.png", 15, "医宝宝界面", true)) {
        }
        logd("发现医宝宝界面");
        findPicAndClick("ybb1280.png", 15, "医宝宝")
        sleep(800);
        click_point("625,280", "系统信息弹框");
        sleep(600);
    }
    click_point("380,490", "灵兽村门口")
    sleep(500);
    findPicAndClick("close_little_map1280.png", 1, "小地图");
    sleep(600);
    xl_task.start_time = time();
    xl_task.is_huichengfu = false;
    xl_task.step = 2;
}

点击寻路

去上面代码中,我们有xl_task.step = 2;设置当前任务状态为点击寻路的操作,那么接下来我们就要进行
寻路操作

这里没有什么流程介绍,就是点击地图,点击坐标点。该方法主要就是按照比例对应地图像素点位置。

xl_task.action_task = function () {
    logd("2:进入修罗去打怪");
    closeother();
    findPicAndClick("open_big_map1280.png", 18, "大地图");
    sleep(800);
    switch (xl_task.map) {
        case "长安":
            //打开小地图
            click_point(map_big_to_little_point.长安, "长安小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.长安小右上, map_little_real.长安大右上, map_little_real.长安大左下);
            break;
        case "长安城东":
            click_point(map_big_to_little_point.长安城东, "长安城东小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.长安东小右上, map_little_real.长安东大右上, map_little_real.长安东大左下);
            break;
        case "四圣庄":
            click_point(map_big_to_little_point.四圣庄, "四圣庄小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.四圣庄小右上, map_little_real.四圣庄大右上, map_little_real.四圣庄大左下);
            break;
        case "凤巢七层":
            click_point(map_big_to_little_point.凤巢, "凤巢小地图");
            sleep(1000);
            click_point(map_big_to_little_point.凤巢七层, "凤巢七层小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.凤巢龙窟小右上, map_little_real.凤巢龙窟大右上, map_little_real.凤巢龙窟大左下);
            break;
        case "凤巢六层":
            click_point(map_big_to_little_point.凤巢, "凤巢小地图");
            sleep(1000);
            click_point(map_big_to_little_point.凤巢六层, "凤巢六小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.凤巢龙窟小右上, map_little_real.凤巢龙窟大右上, map_little_real.凤巢龙窟大左下);
            break;
        case "凤巢五层":
            click_point(map_big_to_little_point.凤巢, "凤巢小地图");
            sleep(1000);
            click_point(map_big_to_little_point.凤巢五层, "凤巢五小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.凤巢龙窟小右上, map_little_real.凤巢龙窟大右上, map_little_real.凤巢龙窟大左下);
            break;
        case "龙窟七层":
            click_point(map_big_to_little_point.龙窟, "龙窟小地图");
            sleep(1000);
            click_point(map_big_to_little_point.龙窟七层, "龙窟七小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.凤巢龙窟小右上, map_little_real.凤巢龙窟大右上, map_little_real.凤巢龙窟大左下);
            break;
        case "龙窟六层":
            click_point(map_big_to_little_point.龙窟, "龙窟小地图");
            sleep(1000);
            click_point(map_big_to_little_point.龙窟六层, "龙窟六小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.凤巢龙窟小右上, map_little_real.凤巢龙窟大右上, map_little_real.凤巢龙窟大左下);
            break;
        case "龙窟五层":
            click_point(map_big_to_little_point.龙窟, "龙窟小地图");
            sleep(1000);
            click_point(map_big_to_little_point.龙窟五层, "龙窟五小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏")
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.凤巢龙窟小右上, map_little_real.凤巢龙窟大右上, map_little_real.凤巢龙窟大左下);
            break;
        case "洛阳城":
            click_point(map_big_to_little_point.洛阳城, "洛阳城小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.洛阳小右上, map_little_real.洛阳大右上, map_little_real.洛阳大左下);
            break;
        case "白骨山":
            click_point(map_big_to_little_point.白骨山, "白骨山小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.白骨山小右上, map_little_real.白骨山大右上, map_little_real.白骨山大左下);
            break;
        case "万寿山":
            click_point(map_big_to_little_point.万寿山, "万寿山小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.万寿山小右上, map_little_real.万寿山大右上, map_little_real.万寿山大左下);
            break;
        case "蟠桃园":
            click_point(map_big_to_little_point.蟠桃园, "蟠桃园小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.蟠桃园小右上, map_little_real.蟠桃园大右上, map_little_real.蟠桃园大左下);
            break;
        case "兰若寺":
            click_point(map_big_to_little_point.兰若寺, "兰若寺小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.兰若寺小右上, map_little_real.兰若寺大右上, map_little_real.兰若寺大左下);
            break;
        case "瑶池":
            click_point(map_big_to_little_point.瑶池, "瑶池小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.瑶池小右上, map_little_real.瑶池大右上, map_little_real.瑶池大左下);
            break;
        case "大唐边境":
            click_point(map_big_to_little_point.大唐边境, "大唐边境小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.大唐小右上, map_little_real.大唐大右上, map_little_real.大唐大左下);
            break;
        case "大雁塔五层":
            click_point(map_big_to_little_point.大雁塔, "大雁塔小地图");
            sleep(1000);
            click_point(map_big_to_little_point.大雁塔五层, "大雁塔五小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.大雁塔小右上, map_little_real.大雁塔大右上, map_little_real.大雁塔大左下);
            break;
        case "大雁塔四层":
            click_point(map_big_to_little_point.大雁塔, "大雁塔小地图");
            sleep(1000);
            click_point(map_big_to_little_point.大雁塔四层, "大雁塔四小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.大雁塔小右上, map_little_real.大雁塔大右上, map_little_real.大雁塔大左下);
            break;
        case "大雁塔三层":
            click_point(map_big_to_little_point.大雁塔, "大雁塔小地图");
            sleep(1000);
            click_point(map_big_to_little_point.大雁塔三层, "大雁塔三小地图");
            sleep(1000);
            findPicAndClick("click_fly1280.png", 28, "飞行旗隐藏");
            sleep(800);
            click_point("640,280", "系统信息提示弹窗");
            sleep(1000);
            toRealxy(xl_task.point, map_little_real.大雁塔小右上, map_little_real.大雁塔大右上, map_little_real.大雁塔大左下);
            break;
    }
    // if (finColor(6)) {
    //     chose_fly_state();
    // }
    sleep(600);
    finColor(4, true);
    sleep(600);
    finColor(5, true);
    logd("跳出修罗去打怪");
    xl_task.step = 3
}

去任务点的路上

为什么需要去任务点路上的这个方法呢,因为总会有各种情况,系统卡主人物原地站岗、玩家误操作停止不动。而且最重要的一点是,我们需要判断是否到达怪物点,到了怪物点我们才能进行下一步的对话战斗操作。

在这里插入图片描述

xl_task.xl_daguaipaolu_xuhuan = function () {
    logd("3:进入去战斗路上的循环");
    let is_click_kanda = false;
    while (time() - xl_task.start_time < 1000 * 180) {
        closeother()
        if (is_move1()) {
            logd("去战斗路上未移动");
            if (shibie(1) == xl_task.map) {
                logd("到达修罗地图xl_task.count_nmb" + xl_task.count_nmb);
                if (xl_task.task_map_time === 0) {
                    xl_task.task_map_time = time()
                }
                if (is_task_point(shibie(2), xl_task.point) || xl_task.count_nmb === 2 || time() - xl_task.task_map_time > 30 * 1000) {
                    logd("到达任务坐标点或是count_nmb为:" + xl_task.count_nmb + ",开始对话战斗");
                    if (findPic("open_talk1280.png", 17, "对话按钮")) {
                        findPicAndClick("open_talk1280.png", 17, "对话按钮");
                        sleep(800)
                        if (findPic("kanda1280.png", 5, "修罗看打")) {
                            findPicAndClick("kanda1280.png", 5, "修罗看打")
                            let a = time();
                            while (findPic("open_big_map1280.png", 18, "战斗界面判断", true)) {
                                if (time() - a > 3000) {
                                    xl_task.step = 3;
                                    return;
                                }
                                findPicAndClick("kanda1280.png", 5, "没点上看打,在此点击修罗看打")
                                sleep(300);
                            }
                            logd("点击了看打,准备开始战斗");
                            sleep(1000);
                            xl_task.step = 4;
                            return;
                        } else {
                            xl_task.findColor();
                            logd(xl_task.xl_click_point + "========" + xl_task.xl_click_point.length);
                            for (let i = 0; i < xl_task.xl_click_point.length; i++) {
                                if (findPic("open_talk1280.png", 17, "对话按钮", true)) {
                                    findPicAndClick("open_talk1280.png", 17, "对话按钮");
                                    sleep(600);
                                }
                                click_point(xl_task.xl_click_point[i], "修罗对话坐标点", true)
                                sleep(600);
                                if (findPic("kanda1280.png", 5, "修罗看打")) {
                                    findPicAndClick("kanda1280.png", 5, "修罗看打")
                                    sleep(600);
                                    let a = time();
                                    while (findPic("open_big_map1280.png", 18, "战斗界面判断", true)) {
                                        if (time() - a > 3000) {
                                            xl_task.step = 3;
                                            xl_task.xl_click_point = []
                                            return;
                                        }
                                        findPicAndClick("kanda1280.png", 5, "没点上看打,在此点击修罗看打")
                                        sleep(300);
                                    }
                                    logd("点击了看打,准备开始战斗");
                                    is_click_kanda = true
                                    xl_task.step = 4;
                                    return;
                                } else {
                                    logd("循环下一个修罗窗口对话");
                                }
                            }
                            if (!is_click_kanda) {
                                logd("第一列npc列表没有修罗,滑动到第二列重新识别");
                                findPicAndClick("open_talk1280.png", 17, "对话按钮");
                                sleep(1000)
                                touchDown(892, 490)
                                sleep(500);
                                touchMove(892 + Math.floor(Math.random() * 7) - 3,
                                    490 - 340 + Math.floor(Math.random() * 7) - 3)
                                sleep(1500);
                                if (findPic("wb_ganraokuang.png", 34, "识别是否滑动到底")) {
                                    logd("滑动到底了");
                                }
                                sleep(500);
                                touchUp(892 + Math.floor(Math.random() * 7) - 3,
                                    490 - 340 + Math.floor(Math.random() * 7) - 3)
                                sleep(1000);
                                xl_task.findColor();
                                logd(xl_task.xl_click_point + "========" + xl_task.xl_click_point.length);
                                for (let i = 0; i < xl_task.xl_click_point.length; i++) {
                                    if (findPic("open_talk1280.png", 17, "对话按钮", true)) {
                                        findPicAndClick("open_talk1280.png", 17, "对话按钮");
                                        sleep(600);
                                    }
                                    click_point(xl_task.xl_click_point[i], "修罗对话坐标点", true)
                                    sleep(600);
                                    if (findPic("kanda1280.png", 5, "修罗看打")) {
                                        findPicAndClick("kanda1280.png", 5, "修罗看打")
                                        sleep(600);
                                        let a = time();
                                        while (findPic("open_big_map1280.png", 18, "战斗界面判断", true)) {
                                            if (time() - a > 3000) {
                                                xl_task.step = 3;
                                                xl_task.xl_click_point = []
                                                return;
                                            }
                                            findPicAndClick("kanda1280.png", 5, "没点上看打,在此点击修罗看打")
                                            sleep(300);
                                        }
                                        logd("点击了看打,准备开始战斗");
                                        is_click_kanda = true
                                        xl_task.step = 4;
                                        return;
                                    } else {
                                        logd("循环下一个修罗窗口对话");
                                        sleep(600);
                                    }
                                }
                            }
                            if (!is_click_kanda) {
                                xl_task.step = 0;
                                return;
                            }
                        }
                    } else {
                        xl_task.count_nmb = 0;
                        xl_task.step = 2
                        return;
                    }
                } else {
                    if (xl_task.count_nmb == 1) {
                        click_point(map_big_to_little_point.当前地图, xl_task.map);
                        sleep(800);
                        let sms = readResAutoImage("xunzhao1280.png");
                        //在当前屏幕中查找,并且限制只查找一个
                        let points = null;
                        points = image.findImageEx(sms, 657, 349, 1052, 686, 0.7, 0.8, 1, 5);
                        image.recycle(sms)
                        let x;
                        let y;
                        if (points && points.length > 0) {
                            x = parseInt((points[0].left + points[0].right) / 2)
                            y = parseInt((points[0].top + points[0].bottom) / 2)
                        } else {
                            xl_task.count_nmb += 1;
                            continue
                        }
                        click_point(x - 120 + "," + y, "小地图X输入框");
                        sleep(800);
                        let poninList = xl_task.point.split(",");
                        shuruzuobiao(poninList[0]);
                        click_point(jianpan.ok, "小地图ok确认");
                        sleep(800);
                        click_point(x - 60 + "," + y, "小地图Y输入框");
                        sleep(800);
                        shuruzuobiao(poninList[1]);
                        click_point(jianpan.ok, "小地图ok确认");
                        sleep(800);
                        findPicAndClick("xunzhao1280.png", 999, "小地图前往");
                        sleep(700);
                        findPicAndClick("close_little_map1280.png", 1, "关小地图");
                        xl_task.count_nmb += 1;
                    } else {
                        logd("1111111111");
                        if (is_move1()) {
                            logd("在任务地图,但识别坐标是0,0或站着不动,重新点击任务坐标");
                            xl_task.count_nmb += 1;
                            logd("xl_task.count_nmb" + xl_task.count_nmb);
                            xl_task.step = 2
                            return;
                        }
                    }
                }
            } else {
                logd("不在任务地图,检测到停止不动,再次检测坐标是否没变");
                if (is_move1()) {
                    logd("非修罗地图下停止不动,重新点击目的地");
                    xl_task.step = 2
                    return;
                }
            }
        }
    }
    logd("任务超时,返回灵兽村重新领取任务");
    xl_task.chushihua();
    xl_task.step = 0;
}

战斗流程

到达任务点后,我们通过对话进入战斗,战斗界面也是一个while循环,需要一直判断是否在战斗界面,因为当战斗界面消失时,就是战斗结束的时候,我们需要重新返回领任务的NPC处。
xl_task.xl_start_fight = function () {
    logd("4:开始战斗");
    sleep(3000);
    if (finColor(7, true)) {
        click_point("1226,672", "点击自动战斗");
        sleep(600);
    }
    let is_click_zidong = true;
    while (!findPic("open_big_map1280.png", 18, "战斗界面判断", true)) {
        if (findPic("magic1280.png", 8, "法术按钮", true)) {
            switch (Pfight_state) {
                case "法术":
                    findPicAndClick("magic1280.png", 8, "法术按钮");
                    switch (xl_task.xl_fashu) {
                        case "1-5":
                            sleep(1000);
                            click_point(magic_point.技能15, "技能1-5");
                            break;
                        case "2-5":
                            sleep(1000);
                            click_point(magic_point.技能25, "技能2-5");
                            break;
                        case "3-5":
                            sleep(1000);
                            click_point(magic_point.技能35, "技能3-5");
                            break;
                        default:
                            logd("没选上技能" + xl_task.xl_fashu);
                            break;
                    }
                    sleep(1000);
                    clickPoint(284, 192);
                    logd("中间的怪");
                    // click_point("284,192", "中间的怪");
                    break;
                case "防御":
                    findPicAndClick("fangyu1280.png", 13, "人物防御")
                    break;
                case "攻击":
                    findPicAndClick("fight1280.png", 8, "人物攻击")
                    sleep(1000);
                    click_point("284,192", "中间的怪");
                    break;
            }
            sleep(1000);
            switch (Bfight_state) {
                case "法术":
                    findPicAndClick("magic1280.png", 8, "选择法术按钮");
                    sleep(1000);
                    click_point("900,280", "宠物提克")
                    sleep(1000);
                    click_point("284,192", "中间的怪");
                    break;
                case "防御":
                    findPicAndClick("fangyu1280.png", 13, "宠物防御")
                    break;
                case "攻击":
                    findPicAndClick("fight1280.png", 8, "宠物攻击")
                    sleep(1000);
                    click_point("284,192", "中间的怪");
                    break;
            }
            sleep(2000);
            //点击自动战斗
            click_point("1226,672", "点击自动战斗");
            sleep(1000);
            click_point("1226,672", "点击自动战斗");
        }
        if (is_click_zidong) {
            if (xl_task.acount_nmb != 0 && xl_task.acount_nmb % 5 == 0) {
                sleep(500);
                click_point("1226,672", "点击自动战斗");
                sleep(800);
                findPicAndClick("zidong1280.png", 16, "战斗自动按钮");
                sleep(800);
                click_point("1226,672", "点击自动战斗");
                is_click_zidong = false
            }
        }
    }

    logd("战斗结束");
    sleep(800);
    click_point("650,225", "点击信息提示框", true)
    if (shibie(1) != xl_task.map) {
        xl_task.is_huichengfu = false;
        xl_task.chushihua()
        xl_task.step = 0
    } else {
        logd("使用修罗回城符文");
        xl_task.chushihua()
        xl_task.step = 5
    }

}

使用回城符文

任务结束,就是回城,重新领取任务了。下面放出代码
xl_task.xl_use_huicheng = function () {
xl_task.acount_nmb += 1;
// finColor(1);
sleep(500);
logd("5:战斗结束,开始找回程符文回城");
if (findPic("xu1280.png", 12, "盒子需要按钮")) {
    findPicAndClick("xu1280.png", 12, "盒子需要按钮");
    sleep(500);
}
if (!findPic("xiuluo_back1280.png", 9999, "修罗回城福")) {
    if (findPic("moreX1280.png", 27, "主界面底部状态栏X")) {
        findPicAndClick("moreX1280.png", 27, "主界面底部状态栏X")
        sleep(600);
    }
    findPicAndClick("open_package1280.png", 13, "背包按钮");
    sleep(800);
    if (findPic("open_package1280.png", 13, "背包按钮")) {
        findPicAndClick("open_package1280.png", 13, "背包按钮");
        sleep(600);
    }
    click_point("896,140", "任务物品栏");
    sleep(400);
    click_point("896,140", "任务物品栏");
    sleep(400);
    findPicAndClick("xiuluo_back1280.png", 10, "修罗回城福");
    sleep(800);
    findPicAndClick("xiuluo_use1280.png", 9999, "使用按钮");
    xl_task.is_huichengfu = true;
    sleep(800)
    xl_task.step = 0
} else {
    findPicAndClick("xiuluo_back1280.png", 9999, "修罗回城福");
    xl_task.is_huichengfu = true;
    sleep(800)
    xl_task.step = 0
}

}

总结

通过上面的6个步骤,我们完成修罗任务的闭环。效率还是不错的,经过测试,队伍强悍,基本上3个半小时就能做完100次的修罗任务。

本代码仅适用于学习使用。

下一章节,我们会进行五倍任务的学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值