1. //鹤羽原创,翻版必究
  2. //制作脚本最关键的部分不是语句,因为所有语句的功能和用法都可以查询到,即使不记得也无所谓。最关键在于制作的逻辑。
  3. //因此首先要把需要用脚本操作的过程手工做一遍,找到每一个关键的步骤和需要判断的关键点坐标、颜色等。
  4. //然后把这些主要的判断和动作串起来,就形成了一个初步的脚本框架。在这个大框架中再添加,完善就比较容易了。
  5. //本例中要完成挂机过程,其实只需要以下几个过程:
  6. //1、判断什么时候进入战斗画面
  7. //2、如果在战斗画面是不是轮到玩家攻击
  8. //3、如何攻击
  9. //4、如何判断攻击结束并退出了战斗画面
  10. //另外一个附加的问题是加血,可以在大框架确定以后再考虑插入。
  11. //后面的脚本是一个完整的功能脚本,大家可以从脚本说明中看出这几个过程的顺序以及各自的判断方式、选择的点和颜色,
  12. //当然这种选择不是唯一的,大家可以根据自己的理解进行选择。
  13. //脚本中使用了后台技术,虽然这个游戏实际上并不能完全支持后台(比如不支持后台键盘,后台鼠标也只在鼠标放在游戏窗口中才生效)。
  14. //这里只是举例说明一下后台插件的使用方法。
  15. //--------------------------------------------------------------
  16. //获得游戏窗口句柄和位置尺寸等信息以便使用后台操作
  17. 调用插件命令 hw=Window.mousepoint()
  18. 调用插件命令 clintrect=Window.GetClientRect(hw)
  19. rect=split(clintrect,"|",-1,1)
  20. xoffset=cint(rect(0))
  21. yoffset=cint(rect(1))
  22. xwinsize=cint(rect(2))
  23. ywinsize=cint(rect(3))
  24. //系统和窗口初始化完毕------------------------------------------
  25. //
  26. //以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400)
  27. 如果表达式 (xwinsize<>550 or ywinsize<>400) 为真,则
  28.     调用外部VBScript子程序 messagebox("请将鼠标放在游戏窗口内启动脚本。")
  29.     跳转到标记 end
  30. 条件结束
  31. //
  32. //以下程序段用于参数设置
  33. 用户定义变量 attackmode=DropList{普通:0|技能:1}=0 攻击模式
  34. 用户定义变量 fillredscale=30 补血百分比
  35. //参数设置完毕--------------------------------------------------
  36. //
  37. //以下程序段用于定义关键点(所有点位均以游戏窗口左上角为基准零点)
  38. //之所以把一些关键点位都集中在一起定义是为了方便以后修改
  39. //
  40. //1、血条左边界点和血条长度及颜色(这个游戏的血条大约是90个像素点)
  41. xred0=82: yred=36: dxred=90: colorred="0066FF"
  42. xred=xred0+cint(fillredscale*dxred/100)
  43. //
  44. //2、迷你小地图上的人物标志点和颜色(如果进入战斗状态小地图上会出现蓝色方块表示人物位置,因此可用来判断是否遇敌)
  45. xme=495: yme=70: colorme="CC9900"
  46. //
  47. //3、回合标志(回合标志取第一个字上的点,为了判断什么时候开始攻击)
  48. xround=208: yround=26: colorround="003399"
  49. //
  50. //4、mini地图上的敌人位置和位差(最左侧敌人为1,右侧敌人按位差移动)
  51. xanimy1=448: yanimy1=62: dxanimy=25: dyanimy=-9: coloranimy="0066FF"
  52. //定义基本点完毕------------------------------------------------
  53. //
  54. //
  55. //****************************************************************
  56. //
  57. //挂机程序正式开始
  58. 标记 start
  59. 调用插件命令 Bkgnd.MoveTo(hw,0,0)
  60. //一直向上移动,直到遇敌,因为无地图限制所以往一个方向运动即可
  61. 按住#
  62. //
  63. 标记 等待遇敌
  64. //获得小地图上的定义点,判断是否出现蓝框
  65. 调用插件命令 color1=BkgndColor.GetPixelColor(hw,xme,yme)
  66. //如果不遇敌则反复判断
  67. 如果表达式 (color1<>clng("&H" & colorme)) 为真,则
  68.     延时100毫秒
  69.     跳转到标记 等待遇敌
  70. 条件结束
  71. //检测到小地图蓝框则执行下面的遇敌处理
  72. //遇敌后首先停止移动
  73. 弹起#
  74. 延时100毫秒
  75. 标记 等待攻击
  76. //再次判断人物蓝框和回合标志
  77. 调用插件命令 color1=BkgndColor.GetPixelColor(hw,xme,yme)
  78. //如果人物蓝框消失,表示战斗结束
  79. 如果表达式 (color1<>clng("&H" & colorme)) 为真,则
  80.     跳转到标记 start
  81. 条件结束
  82. 调用插件命令 color1=BkgndColor.GetPixelColor(hw,xround,yround)
  83. //如果没有回合标志镖师还在等待战斗状态
  84. 如果表达式 (color1<>clng("&H" & colorround)) 为真,则
  85.     延时100毫秒
  86.     跳转到标记 等待攻击
  87. 条件结束
  88. //回合标志出现,按顺序搜索小地图上的敌人
  89. i=0
  90. 如果表达式 (i<3) 为真,则循环执行
  91.     调用插件命令 color1=BkgndColor.GetPixelColor(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)
  92.     如果表达式 (color1=clng("&H" & coloranimy)) 为真,则
  93.         //如果找到任何一个敌人,则实施攻击并回到等待攻击状态,等待下一回合
  94.         调用子程序 战斗
  95.         跳转到标记 等待攻击
  96.     条件结束
  97.     i=i+1
  98. 循环结束
  99. //没有找到敌人,表示攻击结束,进入移动状态
  100. //因为此游戏补血没有消耗,所以战斗结束后补血一次