TC官方合作论坛

 找回密码
 立即注册
查看: 2263|回复: 5

[已解决] 编写的脚本运行几分钟就停了。求大神指教!!!

[复制链接]
发表于 2021-2-24 10:47:12 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 五叶那么神 于 2021-2-24 10:59 编辑

脚本编写工具:TC6.2,插件:大漠3.1233免费版
脚本调试开始能运行,但运行几遍后脚本的界面就自动消失不见了(不是TC界面)。本人新手菜鸟一枚,不知道怎么查找原因,求路过的大神朋友们抽出您宝贵的几分钟留下您珍贵的建议和意见,谢谢!!
脚本源码:
变量 线程ID, dm, hwnd, dm_ret, 版本号
//从这里开始执行
//启动_热键操作
功能 启动_热键()
    线程ID = 线程开启("执行", "")
结束
功能 执行()
    //从这里开始你的代码
    hwnd = dm.GetMousePointWindow()
    调试输出(hwnd)
    等待(150)
    dm_ret = dm.BindWindowEx(hwnd, "dx.graphic.3d", "dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.api", "dx.keypad.state.api", "dx.public.active.message", 0)
    等待(1000)
     查找任务()
结束
功能 查找任务()
    变量 x1, y1, x = 455, y = 250
    循环(真)
        鼠标小地图移动单击(x, y)
        dm_ret = dm.FindPic(0, 0, 800, 600, "图片四.bmp", "000000", 0.9, 0, x1, y1)
        调试输出(x1 & y1)
        如果(x1 > 0)
            dm.MoveTo(x1 + 31, y1 + 58)
            等待(150)
            dm.LeftClick()
            等待(500)
            跳出
        结束
    结束
    领取任务()
结束
功能 领取任务()
    dm.MoveTo(55, 176)
    等待(500)
    dm.LeftClick()
    等待(1000)
    dm.LeftClick()
    等待(500)
    检查任务一()
结束
功能 检查任务一()
    变量 x, y
    dm.KeyPress(120)
    等待(500)
    dm_ret = dm.FindPic(0, 0, 800, 600, "图片一.bmp", "000000", 0.9, 0, x, y)
    调试输出(x & y)
    如果(x > 0)
        dm.MoveTo(x + 24, y + 10)
        等待(500)
        dm.LeftClick()
        等待(500)
        检查任务二()
    否则
        等待(500)
        查找任务()
    结束
结束
功能 检查任务二()
    变量 x, y
    dm_ret = dm.FindPic(0, 0, 800, 600, "图片二.bmp", "000000", 0.9, 0, x, y)
    调试输出(x & y)
    如果(x > 0)
        dm.KeyPress(9)
        等待(150)
        dm.MoveTo(455, 285)
        等待(500)
        dm.LeftClick()
        等待(500)
        dm.KeyPress(9)
        等待(2000)
        寻路一()
    否则
        等待(500)
        查找任务()
    结束
结束
功能 寻路一()
    变量 x1, y1, x = 180, y = 400
    循环(真)
        鼠标小地图移动单击(x, y)
        dm_ret = dm.FindPic(0, 0, 800, 600, "图片三.bmp", "000000", 0.9, 0, x1, y1)
        调试输出(x1 & y1)
        如果(x1 > 0)
            等待(1500)
            查找任务()
            跳出
        结束
    结束
结束
//终止热键操作
功能 终止_热键()
    线程关闭(线程ID)
结束
功能 碎碎念_初始化()
    //这里添加你要执行的代码
    注册插件("rc:dm.dll", 真)
    dm = 插件("dm.dmsoft")
    版本号 = dm.ver()
    调试输出(版本号)
    dm.SetPath(获取资源路径("rc:"))
结束

回复

使用道具 举报

发表于 2021-2-24 14:47:49 | 显示全部楼层
框架不对,相当于查找任务调用了查找任务,递归
回复 支持 反对

使用道具 举报

发表于 2021-2-24 16:07:20 | 显示全部楼层
本帖最后由 bestkakkoii 于 2021-2-24 16:38 编辑

就是让你别一层一层调用最后又调用回自己头上
就像上司命令员工做事情 最后一层一层下去 最后最底层的员工又跑回来命令上司....?

改成循环重复调用用完的就返回结束掉等待循环线程下一次调用
然后视窗绑定不要放在线程里面很多功能會莫名失效掉




调用函数会等待执行完才执行下一个 你大可写在一起
function 执行()
while(开关)
    查找任务()
    var value = 领取任务()   
     var value2 = false
    if(value)
        value2 = 检查任务一()
    else
        continue
    end
    if(value2)
        检查任务二()
    else
       continue
    end

        sleep(1000,false)
end
return false
end
之类的







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-24 15:04:23 | 显示全部楼层
1250015590 发表于 2021-2-24 14:47
框架不对,相当于查找任务调用了查找任务,递归

能再说详细点吗?刚开始学写脚本,很多东西都不懂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-24 16:40:13 | 显示全部楼层
bestkakkoii 发表于 2021-2-24 16:07
就是让你别一层一层调用最后又调用回自己头上
就像上司命令员工做事情 最后一层一层下去 最后最底层的员工 ...

明白了,非常感谢指点!!
回复 支持 反对

使用道具 举报

发表于 2021-2-24 19:42:48 | 显示全部楼层
////查找任务() 里有死循环 ,不能重复调用死循环,删除所有非主线程的查找任务()

变量 线程ID, dm, hwnd, dm_ret, 版本号
//从这里开始执行
//启动_热键操作
功能 启动_热键()
    线程ID = 线程开启("执行", "")
结束
功能 执行()
    //从这里开始你的代码
    hwnd = dm.GetMousePointWindow()
    调试输出(hwnd)
    等待(150)
    dm_ret = dm.BindWindowEx(hwnd, "dx.graphic.3d", "dx.mouse.position.lock.api|dx.mouse.position.lock.message|dx.mouse.state.api", "dx.keypad.state.api", "dx.public.active.message", 0)
    等待(1000)
    查找任务()
结束
功能 查找任务()
    变量 x1, y1, x = 455, y = 250
    循环(真)
        鼠标小地图移动单击(x, y)
        dm_ret = dm.FindPic(0, 0, 800, 600, "图片四.bmp", "000000", 0.9, 0, x1, y1)
        调试输出(x1 & y1)
        如果(x1 > 0)
            dm.MoveTo(x1 + 31, y1 + 58)
            等待(150)
            dm.LeftClick()
            等待(500)
            跳出
        结束
    结束
    领取任务()
结束
功能 领取任务()
    dm.MoveTo(55, 176)
    等待(500)
    dm.LeftClick()
    等待(1000)
    dm.LeftClick()
    等待(500)
    检查任务一()
结束
功能 检查任务一()
    变量 x, y
    dm.KeyPress(120)
    等待(500)
    dm_ret = dm.FindPic(0, 0, 800, 600, "图片一.bmp", "000000", 0.9, 0, x, y)
    调试输出(x & y)
    如果(x > 0)
        dm.MoveTo(x + 24, y + 10)
        等待(500)
        dm.LeftClick()
        等待(500)
        检查任务二()
    结束
结束
功能 检查任务二()
    变量 x, y
    dm_ret = dm.FindPic(0, 0, 800, 600, "图片二.bmp", "000000", 0.9, 0, x, y)
    调试输出(x & y)
    如果(x > 0)
        dm.KeyPress(9)
        等待(150)
        dm.MoveTo(455, 285)
        等待(500)
        dm.LeftClick()
        等待(500)
        dm.KeyPress(9)
        等待(2000)
        寻路一()
    结束
结束
功能 寻路一()
    变量 x1, y1, x = 180, y = 400
    循环(真)
        鼠标小地图移动单击(x, y)
        dm_ret = dm.FindPic(0, 0, 800, 600, "图片三.bmp", "000000", 0.9, 0, x1, y1)
        调试输出(x1 & y1)
        如果(x1 > 0)
            等待(1500)
            跳出
        结束
    结束
结束
//终止热键操作
功能 终止_热键()
    线程关闭(线程ID)
结束
功能 碎碎念_初始化()
    //这里添加你要执行的代码
    注册插件("rc:dm.dll", 真)
    dm = 插件("dm.dmsoft")
    版本号 = dm.ver()
    调试输出(版本号)
    dm.SetPath(获取资源路径("rc:"))
结束
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-4-24 23:11 , Processed in 0.052230 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表