大话西游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_talk1