TC官方合作论坛

 找回密码
 立即注册
查看: 5918|回复: 7

[游戏] DNF登录完美源码带各种子程序,结构简单功能强悍,异常处理.

[复制链接]
发表于 2013-11-17 09:51:38 | 显示全部楼层 |阅读模式

马上加入TC

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

x
  1. 空间 化骨绵掌
  2. //默认空间
  3. 变量 启动游戏线程句柄 //句柄相关

  4. 变量 界面配置文件路径 //界面配置文件的路径和文件名
  5. 变量 游戏路径,账号路径 //保存游戏路径和账号路径
  6. 变量 出货单价,保留金币,拍卖物品 //拍卖相关变量
  7. 变量 答题设置,答题串是 //答题处理相关变量
  8. 变量 安全模式,禁闭处理 //安全极禁闭相关变量
  9. 变量 拨号设置,宽带账号,宽带密码 //宽带拨号相关变量

  10. 变量 m_dt,stime,tid //答题
  11. 变量 dm,dm_Ret //大漠
  12. 变量 显示信息句柄=0 //大漠写屏句柄
  13. 变量 gjw //老耿插件
  14. 变量 rm //输入法

  15. 变量 账号数量,当前账号的序号,当前账号的账号,当前账号的密码 //账号相关变量
  16. 变量 当前账号的大区,当前账号的小区,当前账号的角色序号,当前账号的区类型,创建角色职业




  17. 功能 复选框0_点击()

  18. 控件.有效("按钮0",真) //设置获取点阵的按钮为有效

  19. 功能结束


  20. 功能 复选框1_点击()

  21. 控件.有效("按钮1",真) //设置打补相的按钮为有效

  22. 功能结束


  23. 功能 按钮0_点击()


  24. 复选框.选中("复选框0",假) //设置复选框为不选 点阵
  25. 控件.有效("按钮0",假)
  26. 功能结束


  27. 功能 按钮1_点击()

  28. 复选框.选中("复选框1",假) //设置复选框为不选 补丁
  29. 控件.有效("按钮1",假)
  30. 功能结束

  31. 功能 保存界面配置() //保存界面配置文件

  32. 辅助.写配置("登录配置","游戏路径",浏览框.获得("浏览框0"),界面配置文件路径 ) //路径相关
  33. 辅助.写配置("登录配置","账号路径",浏览框.获得("浏览框1"),界面配置文件路径 )

  34. 辅助.写配置("登录配置","出货单价",编辑框.获得文本("编辑框0"),界面配置文件路径 ) //拍卖相关
  35. 辅助.写配置("登录配置","保留金币",编辑框.获得文本("编辑框1"),界面配置文件路径 )
  36. 辅助.写配置("登录配置","拍卖物品",编辑框.获得文本("编辑框2"),界面配置文件路径 )

  37. 辅助.写配置("登录配置","答题设置",下拉框.得到选项("下拉框0"),界面配置文件路径 ) //答题相关
  38. 辅助.写配置("登录配置","答题串是",编辑框.获得文本("编辑框3"),界面配置文件路径 )

  39. 辅助.写配置("登录配置","安全选项",下拉框.得到选项("下拉框1"),界面配置文件路径 ) //安全及拨号
  40. 辅助.写配置("登录配置","禁闭处理",下拉框.得到选项("下拉框2"),界面配置文件路径 )
  41. 辅助.写配置("登录配置","拨号设置",下拉框.得到选项("下拉框3"),界面配置文件路径 )

  42. 辅助.写配置("登录配置","宽带账号",编辑框.获得文本("编辑框4"),界面配置文件路径 )
  43. 辅助.写配置("登录配置","宽带密码",编辑框.获得文本("编辑框5"),界面配置文件路径 )

  44. 辅助.写配置("登录配置","创建角色职业",下拉框.得到选项("下拉框4"),界面配置文件路径 ) //创建角色职业

  45. 功能结束

  46. 功能 读取界面配置() //读取界面配置及变量信息

  47. 界面配置文件路径=系统.获取程序路径()&"化骨绵掌.ini"

  48. 游戏路径=辅助.读配置("登录配置","游戏路径",界面配置文件路径) //路径相关
  49. 账号路径=辅助.读配置("登录配置","账号路径",界面配置文件路径)

  50. 出货单价=辅助.读配置("登录配置","出货单价",界面配置文件路径) //拍卖相关
  51. 保留金币=辅助.读配置("登录配置","保留金币",界面配置文件路径)
  52. 拍卖物品=辅助.读配置("登录配置","拍卖物品",界面配置文件路径)

  53. 答题设置=辅助.读配置("登录配置","答题设置",界面配置文件路径) //答题相关
  54. 答题串是=辅助.读配置("登录配置","答题串是",界面配置文件路径)

  55. 安全模式=辅助.读配置("登录配置","安全选项",界面配置文件路径) //安全及拨号
  56. 禁闭处理=辅助.读配置("登录配置","禁闭处理",界面配置文件路径)
  57. 拨号设置=辅助.读配置("登录配置","拨号设置",界面配置文件路径)

  58. 宽带账号=辅助.读配置("登录配置","宽带账号",界面配置文件路径) //宽带账号及密码
  59. 宽带密码=辅助.读配置("登录配置","宽带密码",界面配置文件路径)

  60. 浏览框.设置("浏览框0",游戏路径) //路径相关
  61. 浏览框.设置("浏览框1",账号路径)

  62. 编辑框.设置文本("编辑框0",出货单价) //出货相关
  63. 编辑框.设置文本("编辑框1",保留金币)
  64. 编辑框.设置文本("编辑框2",拍卖物品)

  65. 创建角色职业=辅助.读配置("登录配置","创建角色职业",界面配置文件路径) //无角色创建角色职业

  66. 如果(答题设置=="")
  67. 答题设置=-1
  68. 如果结束

  69. 下拉框.设置选项("下拉框0",答题设置) //答题相关
  70. 编辑框.设置文本("编辑框3",答题串是)

  71. 如果(安全模式=="")
  72. 安全模式=-1
  73. 如果结束

  74. 如果(禁闭处理=="")
  75. 禁闭处理=-1
  76. 如果结束

  77. 如果(拨号设置=="")
  78. 拨号设置=-1
  79. 如果结束

  80. 下拉框.设置选项("下拉框1",安全模式) //安全及拨号
  81. 下拉框.设置选项("下拉框2",禁闭处理)
  82. 下拉框.设置选项("下拉框3",拨号设置)

  83. 编辑框.设置文本("编辑框4",宽带账号) //账号与密码
  84. 编辑框.设置文本("编辑框5",宽带密码)

  85. 如果(创建角色职业=="") //创建角的职业
  86. 创建角色职业=-1
  87. 如果结束

  88. 下拉框.设置选项("下拉框4",创建角色职业)

  89. 功能结束


  90. 功能 初始化()

  91. 化骨绵掌.注册大漠()
  92. 化骨绵掌.注册慧眼()
  93. 化骨绵掌.注册老耿()
  94. 化骨绵掌.读取界面配置()

  95. 功能结束


  96. 功能 按钮2_点击()
  97. 辅助.消息框(界面配置文件路径)
  98. 功能结束


  99. 功能 按钮4_点击()
  100. 化骨绵掌.保存界面配置()
  101. 功能结束

  102. 功能 注册大漠() //注册大漠

  103. 注册:
  104. 是否注册=辅助.是否注册("dm.dmsoft") //判断大漠是否已经注册到系统
  105. 如果(!是否注册)
  106. 是否注册=辅助.注册插件("rc:dm.dll",真) //当未注册到系统时,开始注册大漠插件到系统
  107. 如果(是否注册)
  108. 跳转 注册
  109. 如果结束
  110. 如果结束
  111. dm=com("dm.dmsoft") //创建大漠对像
  112. 如果(dm.ver()!=4.1345)
  113. 是否注册=辅助.注册插件("rc:dm.dll",假)
  114. 跳转 注册
  115. 如果结束
  116. dm_Ret=dm.reg("换成自己的码eng01") //注册收费版大漠
  117. 如果(dm_Ret!=1)
  118. 辅助.退出()
  119. 如果结束
  120. dm_Ret = dm.DmGuard(1, "np")
  121. dm_Ret = dm.SetPath(辅助.获取资源路径("rc:"))
  122. dm_Ret = dm.SetDict(0,"login.dll") //设置登录字库

  123. // dm.SetShowErrorMsg (0) '大漠如果出现错误不提示信息

  124. 功能结束

  125. 功能 注册慧眼() //注册慧眼

  126. 注册:
  127. 是否注册=辅助.是否注册("HYDati.Dati")
  128. 如果(!是否注册)
  129. 是否注册=辅助.注册插件("rc:hydati.dll",真)
  130. 如果(是否注册)
  131. 跳转 注册
  132. 如果结束
  133. 如果结束
  134. m_dt=com("HYDati.Dati") //创建慧眼对像
  135. m_dt.SetAuthor("lifeng") //作者返利

  136. 功能结束

  137. 功能 注册老耿() //注册老耿插件
  138. 注册:
  139. 是否注册=辅助.是否注册("gjw.gjwsoft")
  140. 如果(!是否注册)
  141. 是否注册=辅助.注册插件("rc:gjw.dll",真)
  142. 如果(是否注册)
  143. 跳转 注册
  144. 如果结束
  145. 如果结束
  146. gjw=com("gjw.gjwsoft")
  147. 功能结束

  148. 功能 复选框2_点击()

  149. 控件.有效("按钮7",真) //打开脚本设置为可点

  150. 功能结束


  151. //点击关闭_执行操作
  152. 功能 化骨绵掌_关闭()
  153. dm=null
  154. m_dt=null
  155. 辅助.退出()
  156. 功能结束

  157. 功能 打开梦想脚本()
  158. 功能结束

  159. 功能 启动梦想脚本()
  160. 功能结束

  161. 功能 启动游戏()


  162. 开始登录游戏:

  163. //变量声明区

  164. 变量 登录游戏超时
  165. 变量 大小区坐标
  166. 变量 账号密码错误次数=0

  167. //功能实现区域

  168. //信息初始化

  169. 化骨绵掌.读取界面配置() //得到游戏登录所有的信息
  170. 化骨绵掌.读账号配置()
  171. 化骨绵掌.信息显示("初始化,准备登录游戏.")
  172. dm.DeleteFile("c:\\windows\\stdnf.bat") //删除游戏启动BAT文件
  173. 辅助.等待(1000)
  174. dm.WriteFile("c:\\windows\\stdnf.bat",游戏路径) //重新生成BAT启动文件
  175. 辅助.等待(1000)
  176. 是否存在=文件.是否存在("c:\\windows\\stdnf.bat") //如果启动文件生成,成功启动游戏 ,否则跳转到开头
  177. 如果(!是否存在)
  178. 跳转 开始登录游戏
  179. 如果结束
  180. 化骨绵掌.关闭进程("DNF.exe")
  181. 辅助.命令(辅助.获取资源路径("rc:清理进程.bat"),假) //结束 已存在的进程,然后重新开游戏
  182. 辅助.等待(3000)

  183. 登录游戏超时=日期时间.当前日期() //得到当前时间,用于定时整个游戏启动过程,超时,执行超时代码
  184. 循环(真) //打开游戏到选区界面
  185. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "重新选择大区.bmp", "000000", 0.9, 0)
  186. 如果(字符串.长度(dm_Ret)>0) //重新选择大区部分
  187. dm.Moveto(282,600)
  188. 辅助.等待(200)
  189. dm.LeftClick() //点击重新选区
  190. 辅助.等待(200)
  191. dm.moveto(0,0)
  192. 如果结束

  193. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "选区界面.bmp", "000000", 0.9, 0)
  194. 如果(字符串.长度(dm_Ret)>0) //到达选区界面后跳出
  195. 如果(当前账号的区类型=="网通")
  196. dm.moveto(7,384)

  197. 否则
  198. dm.moveto(7,295)
  199. 如果结束
  200. 辅助.等待(200)
  201. dm.leftclick()
  202. 辅助.等待(500)
  203. 跳出
  204. 如果结束

  205. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>30) //游戏打开超时处理
  206. 跳转 开始登录游戏 //超时重新登录
  207. 如果结束

  208. 辅助.等待(2000)
  209. 循环结束

  210. 化骨绵掌.信息显示("选择大小区")
  211. 登录游戏超时=日期时间.当前日期()
  212. 循环(真)
  213. //这里选择大区
  214. dm_Ret=dm.FindStrFastEx(24, 253, 712, 468, 当前账号的大区, "ffffff-000000", 0.9) //这里是选择大区
  215. 如果(字符串.长度(dm_Ret)>0)
  216. 字符串.分割(dm_Ret,",",大小区坐标)
  217. dm.moveto(大小区坐标[1],大小区坐标[2])
  218. 辅助.等待(200)
  219. dm.LeftDoubleClick()
  220. 辅助.等待(200)
  221. 跳出
  222. 如果结束

  223. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>20) //游戏打开超时处理
  224. 跳转 开始登录游戏 //超时重新登录
  225. 如果结束

  226. 辅助.等待(1000)
  227. 循环结束

  228. 登录游戏超时=日期时间.当前日期()
  229. 循环(真)
  230. //这里选择小区
  231. dm_Ret=dm.FindStrFastEx(32, 472, 724, 629, 当前账号的小区, "ffffff-000000", 0.9) //这里是选择小区
  232. 如果(字符串.长度(dm_Ret)>0)
  233. 字符串.分割(dm_Ret,",",大小区坐标)
  234. dm.moveto(大小区坐标[1],大小区坐标[2])
  235. 辅助.等待(200)
  236. dm.LeftDoubleClick()
  237. 辅助.等待(200)
  238. 跳出
  239. 如果结束

  240. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>30) //游戏打开超时处理
  241. 跳转 开始登录游戏 //超时重新登录
  242. 如果结束

  243. 辅助.等待(1000)
  244. 循环结束


  245. 重输账号密码:
  246. 化骨绵掌.信息显示("准备输入账号密码")
  247. 登录游戏超时=日期时间.当前日期()
  248. 循环(真)

  249. //这里插入 特别情况处理 比如 延时过大 瀑满等
  250. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "延时过大.bmp|已经爆满.bmp", "000000", 0.9, 0)
  251. 如果(字符串.长度(dm_Ret)>0)
  252. dm.MoveTo(456,433)
  253. 辅助.等待(200)
  254. dm.LeftClick()
  255. 辅助.等待(200)
  256. 如果结束

  257. //这里完成账号密码的输入
  258. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "输入账号密码.bmp", "000000", 0.9, 0) //这里是输入账号密码
  259. 如果(字符串.长度(dm_Ret)>0)
  260. 辅助.等待(5000)
  261. dm.MoveTo(437,504)
  262. 辅助.等待(200)
  263. dm.LeftClick() //移动到账号输入框
  264. 辅助.等待(200)
  265. 遍历(15) //删除原有账号输入框内的账号
  266. dm.KeyPress(8)
  267. 辅助.等待(50)
  268. 遍历结束

  269. dm.KeyPressStr(当前账号的账号,50) //输入账号
  270. 辅助.等待(500)
  271. dm.MoveTo(440,532)
  272. 辅助.等待(200)
  273. dm.LeftClick() //移动到密码输入框
  274. 辅助.等待(200)
  275. dm.KeyPressStr(当前账号的密码,50) //输入密码
  276. 辅助.等待(200)
  277. dm.MoveTo(626,510)
  278. 辅助.等待(200)
  279. dm.LeftClick()
  280. 辅助.等待(1000) //点登录按钮开始登录游戏
  281. 跳出
  282. 如果结束

  283. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>60) //游戏打开超时处理
  284. 跳转 开始登录游戏 //超时重新登录
  285. 如果结束

  286. 辅助.等待(1000)
  287. 循环结束

  288. 登录游戏超时=日期时间.当前日期()
  289. 循环(真)
  290. //这里处理 账号密码错误 答题 正常启动跳出 及一些异常处理
  291. 如果(化骨绵掌.进程是否存在("DNF.exe")) //当游戏主进程存在是直接离开
  292. dm.MoveTo(0,0) //复位鼠标
  293. 辅助.等待(200)
  294. 化骨绵掌.信息显示("正在登录,稍后.")
  295. 跳出
  296. 如果结束

  297. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "验证码.bmp", "000000", 0.9, 0)
  298. 如果(字符串.长度(dm_Ret)>0) //发现验证码准备答题
  299. 化骨绵掌.信息显示("开始答题")
  300. 如果(化骨绵掌.游戏登录答题())
  301. //答题成功插入答题成功代码
  302. 否则
  303. //答题失败插入答题失败代码
  304. 跳转 开始登录游戏 //超时重新登录
  305. 如果结束
  306. 如果结束

  307. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "账号密码错误.bmp", "000000", 0.9, 0)
  308. 如果(字符串.长度(dm_Ret)>0) //发现验证码准备答题
  309. 账号密码错误次数=账号密码错误次数+1
  310. 如果(账号密码错误次数>=3) //账号密码错误次数过多,处理.
  311. 辅助.写配置("账号状态",当前账号的序号,"完成,16",账号路径)
  312. 跳转 开始登录游戏 //换号重新登录
  313. 如果结束
  314. dm.MoveTo(510,430)
  315. 辅助.等待(200)
  316. dm.LeftClick()
  317. 辅助.等待(200)
  318. 跳转 重输账号密码 //重新输入账号密码
  319. 如果结束

  320. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>120) //游戏打开超时处理
  321. 跳转 开始登录游戏 //超时重新登录
  322. 如果结束
  323. 辅助.等待(1000)
  324. 循环结束

  325. 登录游戏超时=日期时间.当前日期()
  326. 循环(真) //等等频道出现

  327. dm_Ret = dm.FindStrFastEx(0, 0, 800, 600, "频道", "00e6bf-000000", 0.9)
  328. 如果(字符串.长度(dm_Ret)>0)
  329. 化骨绵掌.信息显示("选择频道")
  330. 如果(化骨绵掌.选择频道())
  331. //选择频道成功代码
  332. 跳出
  333. 否则
  334. //选择频道失败代码
  335. 跳转 开始登录游戏
  336. 如果结束
  337. 如果结束

  338. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>200) //游戏打开超时处理
  339. 跳转 开始登录游戏 //超时重新登录
  340. 如果结束
  341. 辅助.等待(1000)
  342. 循环结束

  343. 登录游戏超时=日期时间.当前日期()
  344. 循环(真) //判断是否到达选角色的界面

  345. 变量 创建角色是否成功
  346. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "选择角色界面.bmp", "000000", 0.9, 0)
  347. 如果(字符串.长度(dm_Ret)>0)
  348. //这是插入所有在角色界面的动作
  349. //例 检测角色是否存在 ,是否有异常窗口(三方,封号,公告,活动)
  350. 化骨绵掌.信息显示("选择角色")
  351. 化骨绵掌.关闭选角色界面异常窗口() //关闭选角色界面异常窗口
  352. 如果(!化骨绵掌.选择角色()) //无角色时创建角色
  353. 选择(创建角色职业)
  354. 条件 0:
  355. 创建角色是否成功=化骨绵掌.创建角色缔造者()
  356. 选择结束

  357. 如果(创建角色是否成功) //创建建角色失败时执行
  358. 跳转 选择角色
  359. 否则
  360. 跳转 开始登录游戏
  361. 如果结束
  362. 如果结束
  363. 跳出
  364. 如果结束

  365. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>120) //游戏打开超时处理
  366. 跳转 开始登录游戏 //超时重新登录
  367. 如果结束
  368. 选择角色:
  369. 辅助.等待(1000)
  370. 循环结束

  371. 登录游戏超时=日期时间.当前日期()
  372. 循环(真) //判断是否到达仓库,或者新建角的前动画
  373. dm_Ret = dm.FindStrFastEx(0,0,800,600,"时空之门","ccc1a7-000000",0.9)
  374. 如果(字符串.长度(dm_Ret)>0)
  375. 跳转 开始登录游戏 //如果有前置动画直接重新开游戏
  376. 如果结束

  377. 如果(dm.CmpColor(3,285, "944252-000000", 0.9)==0) //到达仓加后,直接离开
  378. 跳出
  379. 如果结束


  380. 如果(日期时间.日期间隔("s",登录游戏超时,日期时间.当前日期())>20) //游戏打开超时处理
  381. 跳转 开始登录游戏 //超时重新登录
  382. 如果结束

  383. 辅助.等待(1000)
  384. 循环结束

  385. 化骨绵掌.信息显示("完成游戏登录")

  386. 线程.关闭(启动游戏线程句柄)

  387. 功能结束

  388. 功能 游戏功能选择()
  389. //如果游戏存在执行相对应的代码
  390. //代码包括检测游戏是否卡死.是否正常
  391. //游戏是否满PL.如果满执行相对应的代码
  392. //如果不是满PL执行相对应的代码
  393. //如果游戏存在但已卡死,执行重开游戏动作,
  394. //如果游戏不存在,执行开游戏动作


  395. 功能结束

  396. 功能 热键0_热键() //脚本全部从这里开始

  397. //这里需要插入智能识别代码,调用相对应的线程
  398. //比如,游戏内,仓库内 图内.没开游戏等
  399. //常规线程可以直接启动,需智能选择 如异常检测 游戏内答题检测 弹窗检测等
  400. 启动游戏线程句柄=线程.开启("化骨绵掌.启动游戏","")


  401. 功能结束

  402. 功能 读账号配置()

  403. 重新获取配置:

  404. //变量定义
  405. 变量 当前账号完整信息,当前账号分隔信息,当前账号分隔大小
  406. 变量 当前账号状态信息,当前账号状态分隔信息,当前账号状态分隔大小
  407. 变量 当前账号的角色数量,当前账号完成的数量,当前账号的状态
  408. 变量 网通区集合

  409. //功能实现区域

  410. 化骨绵掌.得到账号数量() //得到账号配置内的账号总数量

  411. 遍历(计数=1;计数<=账号数量;计数++)

  412. 当前账号完整信息=辅助.读配置("账号配置",计数,账号路径)
  413. 字符串.分割(当前账号完整信息,"|",当前账号分隔信息)
  414. 数组空间.大小(当前账号分隔信息,当前账号分隔大小)

  415. 如果(当前账号分隔大小==4)
  416. //变量 账号数量,当前账号的序号,当前账号的账号,当前账号的密码 //账号相关变量
  417. //变量 当前账号的大区,当前账号的小区,当前账号的角色序号
  418. 当前账号的序号=计数
  419. 当前账号的账号=当前账号分隔信息[0]
  420. 当前账号的密码=当前账号分隔信息[1]
  421. 当前账号的角色数量=当前账号分隔信息[2]
  422. 当前账号的小区=当前账号分隔信息[3]
  423. 当前账号的角色序号=1
  424. 当前账号完成的数量=0
  425. 选择(当前账号的小区)
  426. 条件 "广州1/2区":
  427. 当前账号的大区="广东区"

  428. 条件 "云南1区":
  429. 当前账号的大区 = "云贵区"

  430. 条件 "贵州1区":
  431. 当前账号的大区 = "云贵区"

  432. 默认:
  433. 当前账号的大区 =字符串.截取(当前账号的小区,0,2)&"区"

  434. 选择结束 //到这里得到所有账号信息,下面得到账号状态,返回当前需要刷的账号
  435. 网通区集合="华北区|河北区|天津区|东北区|北京区|内蒙古区|辽宁区|吉林区|黑龙江区|河南区|山东区|山西区"
  436. 如果(字符串.查找字符串(网通区集合,当前账号的大区)==-1)
  437. 当前账号的区类型="电信"
  438. 否则
  439. 当前账号的区类型="网通"
  440. 如果结束

  441. 如果结束

  442. 当前账号状态信息=辅助.读配置("账号状态",计数,账号路径)
  443. 字符串.分割(当前账号状态信息,",",当前账号状态分隔信息)
  444. 数组空间.大小(当前账号状态分隔信息,当前账号状态分隔大小)
  445. 如果(当前账号状态分隔大小==2)
  446. 当前账号的状态=当前账号状态分隔信息[0] //这里把信息传给变量,便于已后维护
  447. 当前账号完成的数量=当前账号状态分隔信息[1]
  448. 选择(当前账号的状态) //这里是根据当前账号的状态

  449. 条件 "完成":
  450. 如果(!类型.是否为整型(当前账号完成的数量)) //判断当前得到的状态是否是数字,
  451. 当前账号的角色序号=1
  452. 跳出
  453. 如果结束

  454. 如果(当前账号完成的数量>=当前账号的角色数量)
  455. 跳转 重新开始
  456. 否则
  457. 当前账号的角色序号=当前账号完成的数量+1
  458. 跳出
  459. 如果结束

  460. 默认:
  461. 跳转 重新开始

  462. 选择结束

  463. 否则
  464. 当前账号的状态="" //复位
  465. 当前账号完成的数量=0
  466. 当前账号的角色序号=1
  467. 跳出
  468. 如果结束

  469. 重新开始:

  470. 遍历结束

  471. 如果(账号数量==当前账号的序号&&当前账号完成的数量>=当前账号的角色数量) //如果最后一个账号刷完,在这里刷新所有账号信息,或可以插入在界面上设置是否刷完所有账号自动刷新账号
  472. 遍历(次数=1;次数<=账号数量;次数++)
  473. 辅助.写配置("账号状态",次数,"",账号路径)
  474. 遍历结束
  475. 跳转 重新获取配置
  476. 如果结束

  477. //辅助.消息框(账号数量)
  478. //辅助.消息框(当前账号的序号)
  479. //辅助.消息框(当前账号的账号)
  480. //辅助.消息框(当前账号的密码)
  481. //辅助.消息框(当前账号的角色序号)
  482. //辅助.消息框(当前账号的大区)
  483. //辅助.消息框(当前账号的小区)

  484. 功能结束

  485. 功能 得到账号数量()
  486. //变量声明区域
  487. 变量 当前账号完整信息
  488. 变量 计数=1
  489. 账号数量=0 //初始化账号数量为0

  490. //功能实现区域

  491. 循环(真)

  492. 当前账号完整信息=辅助.读配置("账号配置",计数,账号路径)
  493. 如果(字符串.长度(当前账号完整信息)>0)
  494. 账号数量=计数
  495. 否则
  496. 跳出
  497. 如果结束

  498. 计数++

  499. 循环结束

  500. 功能结束

  501. 功能 进程是否存在(进程名称)
  502. //源理通过得到PID 判断进程是否存在,进程有大小写区分
  503. //变量声明区
  504. 变量 进程数组
  505. 变量 进程数组大小

  506. //功能实现区
  507. 进程数组=进程.信息(进程名称)
  508. 数组空间.大小(进程数组,进程数组大小)
  509. 如果(进程数组大小>0) //如果数组元素大于0,说明进程存在,否则不存在
  510. 返回 真
  511. 否则
  512. 返回 假
  513. 如果结束

  514. 功能结束

  515. 功能 游戏登录答题()
  516. //变量声明区
  517. 变量 答题次数=0

  518. //功能实现区
  519. 答题验证:

  520. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "验证码.bmp", "000000", 0.9, 0)
  521. 如果(字符串.长度(dm_Ret)==0)
  522. 返回 真 //无答题时 直接返回真,离开程序
  523. 如果结束

  524. tid = m_dt.SendImage(答题串是, 340, 363, 131, 56, 1000, 50, 1, "") //发送题目
  525. 辅助.等待(2000)
  526. stime=日期时间.当前日期() //答题定时
  527. 如果(字符串.长度(tid)>0 && 字符串.左侧(tid,1)!="#") //判断发送的答题是否正确
  528. 循环(真)
  529. 变量 answer //声明接收答题的变量
  530. answer=m_dt.GetAnswer(tid) //接收答题
  531. 选择(answer)
  532. 条件 "#答题超时":
  533. 返回 假 //重新登录游戏

  534. 条件 "#图片错误":
  535. 返回 假 //重新登录游戏

  536. 默认:
  537. 如果(字符串.长度(answer)==4) //接收到正确的答案,开始答题
  538. 辅助.等待(200)
  539. dm.MoveTo(659,396) //移动到验证码输入框
  540. 辅助.等待(200)
  541. dm.LeftClick() //选中验证输入框
  542. 辅助.等待(200)
  543. 遍历(10)
  544. dm.KeyPress(8) //防止输入框内有内容,先执行删除动作
  545. 辅助.等待(50)
  546. 遍历结束
  547. dm.KeyPressStr(answer,50) //把答案输入到验证码输入框
  548. 辅助.等待(200)
  549. dm.MoveTo(521,445) //点击验证窗口的确认,完成答题
  550. 辅助.等待(200)
  551. dm.LeftClick()
  552. 辅助.等待(2000)
  553. 答题次数=答题次数+1
  554. 跳出
  555. 如果结束
  556. 选择结束

  557. //答题超时部分
  558. 如果(日期时间.日期间隔("s",stime,日期时间.当前日期())>100) //游戏打开超时处理
  559. 返回 假 //答题超时直接返回假 重新登录游戏
  560. 如果结束

  561. 辅助.等待(1000)
  562. 循环结束

  563. 否则
  564. 返回 假 //重新登录游戏
  565. 如果结束

  566. //暂定这里插入答题次数过多的代码
  567. 如果(答题次数>=3)
  568. 返回 假
  569. 如果结束

  570. 跳转 答题验证 //重新验证是否答题成功
  571. 功能结束

  572. 功能 选择频道()
  573. //变量声明区
  574. 变量 频道信息数组,频道坐标数组,频道随机号,频道最大号
  575. 变量 频道超时

  576. //功能实现区
  577. 频道超时=日期时间.当前日期()
  578. 循环(真)
  579. 如果(窗口.找到窗口("splashres")==0)
  580. 辅助.等待(1000)
  581. dm_Ret = dm.FindStrFastEx(103, 185, 690, 415, "顺畅", "00ff00-000000", 0.9)
  582. 如果(字符串.长度(dm_Ret)==0)
  583. dm_Ret = dm.FindStrFastEx(103, 185, 690, 415, "良好", "ffb400-000000", 0.9)
  584. 如果(字符串.长度(dm_Ret)==0)
  585. dm_Ret = dm.FindStrFastEx(103, 185, 690, 415, "普通", "ff9600-000000", 0.9)
  586. 如果(字符串.长度(dm_Ret)==0)
  587. dm_Ret = dm.FindStrFastEx(103, 185, 690, 415, "拥挤", "ff0000-000000", 0.9)
  588. 如果(字符串.长度(dm_Ret)==0) //全线爆满
  589. 如果(dm.CmpColor(428, 477, "1e4969-000000", 0.9) == 0) //如果不是最后一页
  590. dm.MoveTo(428,477)
  591. 辅助.等待(200)
  592. dm.LeftClick()
  593. 辅助.等待(200)
  594. dm.MoveTo(438,487)
  595. 辅助.等待(500)
  596. 跳转 换页选区
  597. 否则
  598. dm_Ret=dm.FindStrFastEx(103, 185, 690, 415, "爆满", "ff00ff-000000", 0.9) //翻到最后一页找不到非瀑满频道时随便进入一个频道
  599. 如果结束
  600. 如果结束
  601. 如果结束
  602. 如果结束
  603. 如果结束

  604. 如果(字符串.长度(dm_Ret)==0) //频道错误,直接重开游戏
  605. 返回 假
  606. 如果结束

  607. 如果(字符串.查找字符串(dm_Ret,"|")>0) //频道信息正常
  608. 是否成功=字符串.分割(dm_Ret,"|",频道信息数组) //所有的频道信息他割保存到数组中
  609. 如果(!是否成功)
  610. 返回 假
  611. 如果结束
  612. 数组空间.大小(频道信息数组,频道最大号)
  613. 频道随机号=辅助.随机数(0,频道最大号-1) //得到最大可用频道号随机生成一个频道号
  614. 是否成功=字符串.分割(频道信息数组[频道随机号],",",频道坐标数组) //根据随机频道号分割出一个频道坐标
  615. 如果(!是否成功)
  616. 返回 假
  617. 如果结束
  618. 否则
  619. 是否成功=字符串.分割(dm_Ret,",",频道坐标数组)
  620. 如果(!是否成功)
  621. 返回 假
  622. 如果结束
  623. 如果结束
  624. 辅助.等待(1000)
  625. dm.MoveTo(频道坐标数组[1],频道坐标数组[2])
  626. 辅助.等待(500)
  627. dm.LeftDoubleClick()
  628. 辅助.等待(500)
  629. dm.LeftDoubleClick()
  630. 辅助.等待(2000) //选择频道
  631. dm.moveto(0,0)
  632. 辅助.等待(200) //复位鼠标位置
  633. 返回 真
  634. 如果结束

  635. 换页选区:

  636. 如果(日期时间.日期间隔("s",频道超时,日期时间.当前日期())>120) //游戏打开超时处理
  637. 返回 假
  638. 如果结束

  639. 辅助.等待(1000)
  640. 循环结束
  641. 功能结束

  642. 功能 关闭选角色界面异常窗口()
  643. //变量声明区

  644. //功能实现区
  645. 循环(真) //关闭活动 好友推荐

  646. 验证推荐好友是否关闭:
  647. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "推荐好友.bmp", "000000", 0.9, 0)
  648. 如果(字符串.长度(dm_Ret)>0) //发现推荐好友系统后关闭
  649. 辅助.等待(200)
  650. dm.MoveTo(367,371) //取消
  651. 辅助.等待(500)
  652. dm.LeftClick()
  653. 辅助.等待(500)
  654. dm.MoveTo(368,326)
  655. 辅助.等待(500)
  656. dm.LeftClick()
  657. 辅助.等待(200)
  658. dm.MoveTo(0,0)
  659. 辅助.等待(300)
  660. 跳转 验证推荐好友是否关闭
  661. 否则
  662. 跳出
  663. 如果结束
  664. 辅助.等待(1000)
  665. 循环结束

  666. 循环(真) //关闭角色界面异常窗口

  667. 验证异常窗口:
  668. 变量 确认坐标信息,确认坐标,确认坐标数量,计数
  669. dm_Ret = dm.FindStrFastEx(58,83,580,510,"确认","ddc593-000000",0.9)
  670. 如果(字符串.长度(dm_Ret)>0)
  671. 如果(字符串.查找字符串(dm_Ret,"|")==-1)
  672. dm_Ret=dm_Ret&"|"
  673. 如果结束
  674. 是否成功=字符串.分割(dm_Ret,"|",确认坐标信息)
  675. 如果(!是否成功)
  676. 返回 真
  677. 如果结束
  678. 数组空间.大小(确认坐标信息,确认坐标数量)
  679. 遍历(计数=0;计数<确认坐标数量;计数++)
  680. 是否成功=字符串.分割(确认坐标信息[计数],",",确认坐标)
  681. 如果(!是否成功)
  682. 返回 真
  683. 如果结束
  684. dm.MoveTo(确认坐标[1],确认坐标[2])
  685. 辅助.等待(200)
  686. dm.LeftClick()
  687. 辅助.等待(200)
  688. dm.MoveTo(0,0)
  689. 辅助.等待(200)
  690. 遍历结束
  691. 跳转 验证异常窗口
  692. 否则
  693. 跳出
  694. 如果结束
  695. 循环结束

  696. 功能结束

  697. 功能 选择角色()
  698. //只支持8角色,更多角色,可以添加,穷人认为8角色最好
  699. //变量声明区
  700. 变量 intx,inty

  701. //功能实现区
  702. 如果(当前账号的角色序号>8) //判断需要选的择角是否超过8角色,超过8角色,只选第一个角色
  703. 当前账号的角色序号=1
  704. 如果结束
  705. 辅助.等待(1000)
  706. 如果(当前账号的角色序号<=4) //判断需要选择的角色是否存在
  707. dm_Ret = dm.FindColor(69 + (当前账号的角色序号 - 1) * 122, 259, 191 + (当前账号的角色序号 - 1) * 122, 291, "d1b994-000000", 0.9, 0, intx,inty) //找第一排的角色
  708. 否则
  709. dm_Ret = dm.FindColor(69 + (当前账号的角色序号 - 5) * 122, 469, 191 + (当前账号的角色序号 - 5) * 122, 501, "d1b994-000000", 0.9, 0, intx,inty) //找第二排的角色
  710. 如果结束

  711. 如果(intx>0&&inty>0)
  712. //角色存在时选择相对应的角色
  713. 辅助.等待(500)
  714. 如果(当前账号的角色序号<=4)
  715. //选择第一排角色
  716. dm.MoveTo(165+(当前账号的角色序号-1)*122,264)
  717. 辅助.等待(500)
  718. dm.LeftDoubleClick()
  719. 辅助.等待(200)
  720. dm.MoveTo(0,0)
  721. 辅助.等待(800)
  722. 否则
  723. //选择第二排角色
  724. dm.MoveTo(165+(当前账号的角色序号-5)*122,484)
  725. 辅助.等待(500)
  726. dm.LeftDoubleClick()
  727. 辅助.等待(200)
  728. dm.MoveTo(0,0)
  729. 辅助.等待(800)
  730. 如果结束
  731. //插入特殊情况处理,比如新建的角色,选新角色卡死等
  732. //也可以加在主程序里面,有主程序判断
  733. 返回 真
  734. 否则
  735. //插入无角色处理代码 如创建角色
  736. 返回 假 //这里代表无角色
  737. 如果结束

  738. 功能结束

  739. 功能 创建角色缔造者()
  740. //完成角色创建
  741. //变变声明区
  742. 建角色:
  743. 化骨绵掌.信息显示("创建角色")
  744. 变量 名字库="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  745. 变量 随机名字=""
  746. 变量 随机数
  747. 变量 建角色超时
  748. 变量 仓建角色次数=0 //建角色失败时,最多尝试的次数
  749. //功能实现区
  750. 建角色超时=日期时间.当前日期()
  751. 循环(真)

  752. 如果(日期时间.日期间隔("s",建角色超时,日期时间.当前日期())>60) //游戏打开超时处理
  753. 返回 假
  754. 如果结束

  755. 如果(dm.CmpColor(172,547, "ddca9a-000000", 0.9) == 0) //创建角色按纽可用是点击
  756. dm.MoveTo(172,547)
  757. 辅助.等待(300)
  758. dm.LeftClick()
  759. 辅助.等待(300)
  760. 如果结束

  761. 如果(dm.CmpColor(141,322, "e7a31d-000000", 0.9) == 0)
  762. dm.MoveTo(394,570) //创建角色
  763. 辅助.等待(300)
  764. dm.LeftClick()
  765. 辅助.等待(300)
  766. 遍历(12)
  767. 随机数=辅助.随机数(0,35) //得到随机数
  768. 随机名字=随机名字&字符串.截取(名字库,随机数,随机数+1) //生成随机名字
  769. 遍历结束
  770. dm.KeyPressStr(随机名字,30) //输入名字
  771. 辅助.等待(200)
  772. dm.MoveTo(373,573) //建角色确定
  773. 辅助.等待(200)
  774. dm.LeftClick()
  775. 辅助.等待(500)
  776. dm.LeftClick()
  777. 辅助.等待(2000)
  778. 创建角色次数++
  779. 如果(创建角色次数>3)
  780. 返回 假
  781. 如果结束

  782. 跳出
  783. 否则
  784. 如果(dm.CmpColor(731,571, "ddc593-000000", 0.9) == 0)
  785. dm.MoveTo(130,143) //选择缔造者
  786. 辅助.等待(500)
  787. dm.LeftClick()
  788. 辅助.等待(500)
  789. 如果结束
  790. 如果结束

  791. 辅助.等待(1000)
  792. 循环结束

  793. //这里检测是否建角色成功,如每天只能
  794. //处理一天只能建两个角色,都在这里处理
  795. dm_Ret = dm.FindPicEx(0, 0, 1024, 768, "选择角色界面.bmp", "000000", 0.9, 0)
  796. 如果(字符串.长度(dm_Ret)>0) //关闭创建角色时产生的界面
  797. //变量 确认坐标信息,确认坐标,确认坐标数量,计数
  798. //dm_Ret = dm.FindStrFastEx(58,83,580,510,"确认","ddc593-000000",0.9)
  799. //如果(字符串.长度(dm_Ret)>0)
  800. //如果(字符串.查找字符串(dm_Ret,"|")==-1)
  801. //dm_Ret=dm_Ret&"|"
  802. //如果结束
  803. //是否成功=字符串.分割(dm_Ret,"|",确认坐标信息)
  804. //如果(!是否成功)
  805. //返回 真
  806. //如果结束
  807. //数组空间.大小(确认坐标信息,确认坐标数量)
  808. //遍历(计数=0;计数<确认坐标数量;计数++)
  809. //是否成功=字符串.分割(确认坐标信息[计数],",",确认坐标)
  810. //如果(!是否成功)
  811. //返回 真
  812. //如果结束
  813. //dm.MoveTo(确认坐标[1],确认坐标[2])
  814. //辅助.等待(200)
  815. //dm.LeftClick()
  816. //辅助.等待(200)
  817. //dm.MoveTo(0,0)
  818. //辅助.等待(200)
  819. //遍历结束
  820. //返回 真
  821. //如果结束
  822. 返回 真
  823. 如果结束

  824. dm_Ret = dm.FindStrFastEx(58,83,580,510,"两角色","ffffff-000000",0.9)
  825. 如果(字符串.长度(dm_Ret)>0) //如果当前角色建满直接返回换下一个号
  826. 辅助.写配置("账号状态",当前账号的序号,"完成,16",账号路径)
  827. 返回 假
  828. 如果结束

  829. 跳转 建角色
  830. 功能结束

  831. 功能 信息显示(信息内容)
  832. //变量声明区

  833. //功能实现区

  834. 如果(信息内容=="关闭显示")
  835. dm_ret = dm.FoobarClose(显示信息句柄)
  836. 显示信息句柄=0
  837. 返回 真
  838. 如果结束

  839. 如果(显示信息句柄==0)
  840. 显示信息句柄 = dm.CreateFoobarRect(0,200,697,600,30) //创建一个信息承截窗口
  841. dm_ret = dm.FoobarFillRect(显示信息句柄,0,0,600,30,"3a6ea5") //设置背景色为蓝色
  842. dm_ret = dm.FoobarSetFont(显示信息句柄,"宋体",22,0) //设置显示文字的字体
  843. dm_ret = dm.FoobarLock(显示信息句柄) //锁定窗口,不能被移动
  844. 如果结束
  845. dm_ret = dm.FoobarFillRect(显示信息句柄,0,0,600,30,"3a6ea5") //设置背景色为蓝色
  846. dm_ret = dm.FoobarDrawText(显示信息句柄,0,0,600,30,信息内容,"ffffff",2) //显示文字
  847. dm_ret = dm.FoobarUpdate(显示信息句柄) //刷新显示

  848. 功能结束

  849. 功能 关闭进程(进程名称) //进程名称有大小写之分
  850. //变量声明区
  851. 变量 pid数组
  852. 变量 进程句柄
  853. 变量 pid数组大小
  854. 变量 计数
  855. //功能实现区
  856. pid数组=进程.信息(进程名称)
  857. 数组空间.大小(pid数组,pid数组大小)
  858. 如果(pid数组大小!="")
  859. 遍历(计数=0;计数<pid数组大小;计数++)
  860. 进程句柄=进程.信息(pid数组[计数],2)
  861. 进程.关闭进程(进程句柄)
  862. 遍历结束
  863. 如果结束

  864. 功能结束

  865. 功能 注册输入法()
  866. 注册:
  867. 是否注册=辅助.是否注册("rm.ime")
  868. 如果(!是否注册)
  869. 是否注册=辅助.注册插件("rc:rm.dll",真)
  870. 如果(是否注册)
  871. 跳转 注册
  872. 如果结束
  873. 如果结束
  874. rm=com("rm.ime")
  875. rm.Install()

  876. 功能结束

  877. 功能 热键1_热键()
  878. //这里添加你要执行的代码
  879. 线程.关闭(启动游戏线程句柄)
  880. 功能结束


  881. 功能 按钮11_点击() //打开账号配置
  882. //打开账号配置
  883. 辅助.命令("notepad.exe "&账号路径,假)
  884. 功能结束


  885. 功能 按钮12_点击()
  886. //刷新所有账号状态
  887. 化骨绵掌.得到账号数量()
  888. 遍历(次数=1;次数<=账号数量;次数++)
  889. 辅助.写配置("账号状态",次数,"",账号路径)
  890. 遍历结束

  891. 功能结束


  892. 功能 按钮8_点击()
  893. //这里添加你要执行的代码
  894. 如果(化骨绵掌.进程是否存在("DNF.exe"))
  895. 辅助.消息框("OK")
  896. 如果结束

  897. 功能结束

  898. 空间结束
  899. //空间结束语句


复制代码

回复

使用道具 举报

发表于 2013-11-17 09:56:06 | 显示全部楼层
好长的代码!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-17 09:57:58 | 显示全部楼层
自己顶一下,功能完善完美DNF 全自动登录源码,带各种模块,如进程处理模块,账号读取模块,账号状态设置模块,循环刷新账号刷块.建角色模块,异常窗口及活动处理模块,状态信息显示模块.,完美选频道模块,完美选角色模块.,输入法模块.等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-17 09:59:57 | 显示全部楼层
仓库处理模块增加中,如游戏卡死,弹广告,满PL处理,拍卖,上架,出货,邮寄,清物.寻路等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-17 10:02:27 | 显示全部楼层

功能强悍完整所以很长,包含所有的模块,,,,不只是登录.扩展性很强
回复 支持 反对

使用道具 举报

发表于 2014-8-1 20:22:43 | 显示全部楼层
厉害啊,谢谢分享{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2014-8-1 20:41:05 | 显示全部楼层
厉害啊,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2014-8-15 12:50:24 | 显示全部楼层
碉堡了
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-5-20 01:34 , Processed in 0.046206 second(s), 22 queries .

Powered by 海安简单软件服务部

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

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