411606037 发表于 2018-2-12 13:33:51

多线程寻路坐标问题。。死活找不着人物当前坐标

本帖最后由 411606037 于 2018-2-12 13:35 编辑

.版本 2
.支持库 spec

.程序集 主程序集
.程序集变量 主线程句柄, 整数型

.子程序 __启动窗口_创建完毕
.局部变量 启动返回, 整数型
.局部变量 停止返回, 整数型

.如果真 (大漠注册 (取运行目录 () + “\dm.dll”) = 假)
    信息框 (“注册大漠插件到系统失败!”, 0, )
    返回 ()
.如果真结束
全局大漠.创建对象 ()
全局大漠.注册VIP (“”)
启动返回 = 热键_注册 (取窗口句柄 (), , 键值确定 (组合框_启动键.内容), &启动脚本)
停止返回 = 热键_注册 (取窗口句柄 (), , 键值确定 (组合框_停止键.内容), &停止脚本)
调试输出 (启动返回, 停止返回)
.如果真 (启动返回 ≠ 0 且 停止返回 ≠ 0)
    调试输出 (“热键注册成功!”, 0, )
.如果真结束
.如果真 (启动返回 = 0 且 停止返回 ≠ 0)
    信息框 (“启动热键设置失败,请更换按键,并单击按钮保存配置”, 0, )
.如果真结束
.如果真 (启动返回 ≠ 0 且 停止返回 = 0)
    信息框 (“停止热键设置失败,请更换按键,并单击按钮保存配置”, 0, )
.如果真结束
.如果真 (启动返回 = 0 且 停止返回 = 0)
    信息框 (“启动热键与停止热键设置失败,请更换按键,并单击按钮保存配置”, 0, )
.如果真结束
全局大漠.置全局路径 (取运行目录 ())
全局大漠.字库_置文件 (0, “坐标寻路字库.txt”)
调试输出 (全局大漠.取插件版本 ())
许可证 = 线程_创建许可证 ()
全局大漠.置全局路径 (取运行目录 ())

.子程序 启动脚本

线程_启动 (&启动脚本线程, , 主线程句柄)

.子程序 启动脚本线程
.局部变量 i, 整数型

初始化COM库 ()
i = 线程_找空余位置 ()
调试输出 (i)
大漠多线程信息 .窗口句柄 = 全局大漠.窗口_取鼠标指向句柄 ()
.如果 (大漠多线程信息 .大漠.创建对象 () = 假)
    调试输出 (“取鼠标指向句柄失败”, 0, )
.否则
    调试输出 (“取鼠标指向句柄绑定成功”, 0, )
.如果结束

.如果 (线程_启动 (&初始化, i, 大漠多线程信息 .线程句柄) = 假)
    调试输出 (“线程启动失败”, 0, )
.否则
    调试输出 (“线程” + 到文本 (i) + “启动成功”, 0, )
.如果结束


.子程序 停止脚本

全局大漠.解绑 ()
线程_结束 (主线程句柄)
热键_卸载 ()

.子程序 _按钮_保存配置_被单击
.局部变量 启动返回, 整数型
.局部变量 停止返回, 整数型

热键_卸载 ()
启动返回 = 热键_注册 (取窗口句柄 (), , 键值确定 (组合框_启动键.内容), &启动脚本)
停止返回 = 热键_注册 (取窗口句柄 (), , 键值确定 (组合框_停止键.内容), &停止脚本)
调试输出 (启动返回, 停止返回)
.如果真 (启动返回 ≠ 0 且 停止返回 ≠ 0)
    信息框 (“热键注册成功!”, 0, )
.如果真结束
.如果真 (启动返回 = 0 且 停止返回 ≠ 0)
    信息框 (“启动热键设置失败,请更换按键,并单击按钮保存配置”, 0, )
.如果真结束
.如果真 (启动返回 ≠ 0 且 停止返回 = 0)
    信息框 (“停止热键设置失败,请更换按键,并单击按钮保存配置”, 0, )
.如果真结束
.如果真 (启动返回 = 0 且 停止返回 = 0)
    信息框 (“启动热键与停止热键设置失败,请更换按键,并单击按钮保存配置”, 0, )
.如果真结束



.子程序 __启动窗口_将被销毁

全局大漠.解绑 ()
热键_卸载 ()
线程_强制结束 (主线程句柄)

.子程序 初始化
.参数 i, 整数型
.局部变量 大漠, 大漠中文版

初始化COM库 ()
大漠.置全局路径 (取运行目录 ())
大漠.字库_置文件 (0, “坐标寻路字库.txt”)
辅助延时 (500)
绑定游戏 (i)
主程序 (i)
辅助延时 (200)



.子程序 绑定游戏
.参数 i, 整数型
.局部变量 大漠, 大漠中文版
.局部变量 句柄, 整数型

大漠 = 大漠多线程信息 .大漠
句柄 = 大漠多线程信息 .窗口句柄
.如果 (大漠.绑定Ex (句柄, “dx2”, “normal”, “dx.keypad.input.lock.api|dx.keypad.state.api|dx.keypad.api”, “dx.public.active.api|dx.public.active.message”, 0) = 1)
    调试输出 (“线程” + 到文本 (i) + “绑定成功”)
.否则
    调试输出 (“线程” + 到文本 (i) + “绑定失败”, 0, )
.如果结束

.' 如果 (大漠.绑定Ex (句柄, “normal”, “windows”, “windows”, “windows”, 0) = 1)
    ' 调试输出 (“线程” + 到文本 (i) + “绑定成功”)
.否则
    ' 调试输出 (“线程” + 到文本 (i) + “绑定失败”, 0, )
.如果结束


.子程序 主程序
.参数 i, 整数型
.局部变量 大漠, 大漠中文版
.局部变量 坐标1, 文本型
.局部变量 坐标2, 文本型
.局部变量 当前坐标, 人物坐标

大漠 = 大漠多线程信息 .大漠
' 坐标1 = 大漠多线程信息 .文本参数一
' 坐标2 = 大漠多线程信息 .文本参数二
.' 如果 (当前地图 = 挂机地图)
    ' 大地图寻路 (i, “”, 挂机地点)
    ' 寻路判断 (大漠)
    ' 调试输出 (“到达”)
.否则
    .' 如果 (当前地图 = “”)
      ' 大地图寻路 (i, “”, 挂机地图)
      ' 寻路判断 (大漠)

    .否则

    .如果结束

.如果结束

' 线程_进入许可区 (许可证)
.计次循环首 (2, )
    大漠.键盘_按键 (#B键)
    辅助延时 (200)
.计次循环尾 ()
辅助延时 (300)
' 自定义路线寻路 (“110,95|118,95”, i)
辅助延时 (200)
' 线程_退出许可区 (许可证)


.子程序 _按钮_录制_被单击
.参数 i, 整数型
.局部变量 坐标, 人物坐标
.局部变量 路径, 整数型
.局部变量 大漠, 大漠中文版

大漠 = 大漠多线程信息 .大漠
坐标 = 人物当前坐标读取 (i)

.如果 (编辑框1.内容 = “”)
    编辑框1.内容 = 到文本 (坐标.X) + “,” + 到文本 (坐标.Y)
.否则
    编辑框1.内容 = 编辑框1.内容 + “|” + 到文本 (坐标.X) + “,” + 到文本 (坐标.Y)
.如果结束



然后下面这段是寻路代码

.版本 2
.支持库 spec

.程序集 调用程序集

.子程序 定时程序, 逻辑型
.参数 起始时间, 日期时间型
.参数 CD时间, 整数型, , 秒


.如果 (取时间间隔 (取现行时间 (), 起始时间, #秒) > CD时间)
    起始时间 = 取现行时间 ()
    返回 (真)
.否则
    返回 (假)
.如果结束


.子程序 开始寻路
.局部变量 点阵1, 文本型
.局部变量 点阵2, 文本型
.局部变量 大漠, 大漠中文版
.局部变量 i, 整数型

大漠 = 大漠多线程信息 .大漠
.判断循环首 (1 = 1)
    点阵1 = 大漠.点阵_提取 (895, 21, 963, 39, “dc7338-000000”, “信息”)
    辅助延时 (2000)
    点阵2 = 大漠.点阵_提取 (895, 21, 963, 39, “dc7338-000000”, “信息”)
    .如果真 (点阵1 = 点阵2)
      输出调试文本 (“角色停止了,准备跳出循环”)
      跳出循环 ()
    .如果真结束
    输出调试文本 (“我在寻路中”)
.判断循环尾 ()

.子程序 坐标寻路
.参数 目的X坐标, 整数型
.参数 目的Y坐标, 整数型
.参数 i, 整数型
.局部变量 控制, 逻辑型
.局部变量 左右移动, 整数型
.局部变量 上下移动, 整数型
.局部变量 当前坐标, 人物坐标
.局部变量 启动时间, 日期时间型
.局部变量 坐标1, 文本型
.局部变量 坐标2, 文本型
.局部变量 当前坐标2, 人物坐标
.局部变量 校对x, 逻辑型
.局部变量 校对y, 逻辑型
.局部变量 大漠, 大漠中文版

大漠 = 大漠多线程信息 .大漠
当前坐标 = 人物当前坐标读取 ()
调试输出 (当前坐标.X, 当前坐标.Y)

.如果真 (目的X坐标 > 当前坐标.X)
    左右移动 = #D键
    大漠.键盘_按住 (左右移动)
    调试输出 (“人物需要向右移动,按D键”)
.如果真结束
.如果真 (目的X坐标 < 当前坐标.X)
    左右移动 = #A键
    大漠.键盘_按住 (左右移动)
    调试输出 (“人物需要向左移动,按A键”)
.如果真结束
.如果真 (目的Y坐标 > 当前坐标.Y)
    上下移动 = #S键
    大漠.键盘_按住 (上下移动)
    调试输出 (“人物需要向下移动,按S键”)
.如果真结束
.如果真 (目的Y坐标 < 当前坐标.Y)
    上下移动 = #W键
    大漠.键盘_按住 (上下移动)
    调试输出 (“人物需要向上移动,按W键”)
.如果真结束
辅助延时 (100)

启动时间 = 取现行时间 ()
.判断循环首 (控制 = 假)
    当前坐标 = 人物当前坐标读取 ()
    ' 进行微调,防止走过坐标
    .如果真 (目的X坐标 > 当前坐标.X 且 校对x = 假)
      左右移动 = #D键
      大漠.键盘_按住 (左右移动)
      校对x = 真
    .如果真结束
    .如果真 (目的X坐标 < 当前坐标.X 且 校对x = 假)
      左右移动 = #A键
      大漠.键盘_按住 (左右移动)
      校对x = 真
    .如果真结束
    .如果真 (目的Y坐标 > 当前坐标.Y 且 校对y = 假)
      上下移动 = #S键
      大漠.键盘_按住 (上下移动)
      校对y = 真
    .如果真结束
    .如果真 (目的Y坐标 < 当前坐标.Y 且 校对y = 假)
      上下移动 = #W键
      大漠.键盘_按住 (上下移动)
      校对y = 真
    .如果真结束

    ' 以下的内容是寻路结束
    .如果真 (目的X坐标 = 当前坐标.X)
      大漠.键盘_弹起 (左右移动)
      辅助延时 (50)
      调试输出 (“X坐标到达”)
      校对x = 真
    .如果真结束
    .如果真 (目的Y坐标 = 当前坐标.Y)
      大漠.键盘_弹起 (上下移动)
      辅助延时 (50)
      调试输出 (“Y坐标到达”)
      校对y = 真
    .如果真结束
    .如果真 (当前坐标.X = 目的X坐标 且 当前坐标.Y = 目的Y坐标)
      调试输出 (“到达指定位置”)
      跳出循环 ()
    .如果真结束
    ' 以下的内容是防止卡键的
    .如果 (定时程序 (启动时间, 3) = 真)
      调试输出 (“到达时间了”)
      当前坐标2 = 人物当前坐标读取 ()
      .如果 (当前坐标2.X = 当前坐标.X 且 当前坐标2.Y = 当前坐标.Y)
            调试输出 (“卡键了”)
            大漠.键盘_弹起 (左右移动)
            辅助延时 (20)
            大漠.键盘_弹起 (上下移动)
            辅助延时 (20)
            .如果真 (目的X坐标 > 当前坐标.X)
                左右移动 = #D键
                大漠.键盘_按住 (左右移动)
                调试输出 (“人物需要向右移动,按D键”)
            .如果真结束
            .如果真 (目的X坐标 < 当前坐标.X)
                左右移动 = #A键
                大漠.键盘_按住 (左右移动)
                调试输出 (“人物需要向左移动,按A键”)
            .如果真结束
            .如果真 (目的Y坐标 > 当前坐标.Y)
                上下移动 = #S键
                大漠.键盘_按住 (上下移动)
                调试输出 (“人物需要向下移动,按S键”)
            .如果真结束
            .如果真 (目的Y坐标 < 当前坐标.Y)
                上下移动 = #W键
                大漠.键盘_按住 (上下移动)
                调试输出 (“人物需要向上移动,按W键”)
            .如果真结束

      .否则
            调试输出 (当前坐标.X, 当前坐标2.X)
      .如果结束

    .否则

    .如果结束

    辅助延时 (50)
.判断循环尾 ()

.子程序 人物当前坐标读取, 人物坐标
.参数 i, 整数型
.局部变量 x, 文本型
.局部变量 y, 文本型
.局部变量 当前坐标, 人物坐标
.局部变量 大漠, 大漠中文版

大漠 = 大漠多线程信息 .大漠

' 1通过范围来确定X坐标以及Y坐标
' 2通过全部读取,然后进行分割来返回x和y坐标
x = 大漠.识字 (896, 22, 927, 39, “dc7338-000000”, 1)
y = 大漠.识字 (931, 22, 964, 40, “dc7338-000000”, 1)
调试输出 (x, y)
.如果 (x ≠ “” 且 y ≠ “”)
    当前坐标.X = 到整数 (x)
    当前坐标.Y = 到整数 (y)
    返回 (当前坐标)
.否则
    当前坐标.X = 0
    当前坐标.Y = 0
    返回 (当前坐标)
.如果结束


.子程序 寻路判断
.参数 i, 整数型
.局部变量 坐标1, 文本型
.局部变量 坐标2, 文本型
.局部变量 当前时间, 日期时间型
.局部变量 大漠, 大漠中文版

大漠 = 大漠多线程信息 .大漠
当前时间 = 取现行时间 ()
.判断循环首 (1 = 1)
    坐标1 = 大漠.点阵_提取 (896, 21, 957, 39, “dc7338-000000”, “坐标”)
    辅助延时 (1000)
    坐标2 = 大漠.点阵_提取 (896, 21, 957, 39, “dc7338-000000”, “坐标”)
    .如果真 (坐标1 = 坐标2)
      跳出循环 ()
    .如果真结束
    .如果真 (定时程序 (当前时间, 300))
      跳出循环 ()
    .如果真结束

.判断循环尾 ()
调试输出 (“寻路结束”)



.子程序 自定义路线寻路
.参数 寻路路线, 文本型
.参数 i, 整数型, , 线程ID
.局部变量 坐标数组, 文本型, , "0"
.局部变量 坐标, 文本型, , "0"
.局部变量 n, 整数型
.局部变量 大漠, 大漠中文版

大漠 = 大漠多线程信息 .大漠
坐标数组 = 分割文本 (寻路路线, “|”, )
.如果真 (取数组成员数 (坐标数组) > 0)
    .计次循环首 (取数组成员数 (坐标数组), n)
      坐标 = 分割文本 (坐标数组 , “,”, )
      坐标寻路 (到整数 (坐标 ), 到整数 (坐标 ), i)
      辅助延时 (200)
    .计次循环尾 ()
.如果真结束

411606037 发表于 2018-2-12 13:37:18

大哥们帮忙看下。。一直找不着问题在哪
页: [1]
查看完整版本: 多线程寻路坐标问题。。死活找不着人物当前坐标