教你制作一个简单的脚本
本帖最后由 cmc5410 于 2012-8-13 13:21 编辑第2章见8楼
第3章见10楼
第4章游戏像素的搜索(自动补血补蓝)http://www.52pojie.cn/thread-160546-2-1.html
第1章
GUI(图形用户界面)
介绍 这仅仅是基本的AutoIt。 通过本教程结束时,你将能够写出自己的一点简单的脚本,可以自定义定时按键。
下载AutoIt下载地址 下载后,运行它,安装它... 你知道该怎么做你懂的 。 第1节创建一个新文件夹
创建一个新的文件夹,并命名为“脚本”。
创建AU3文件。
好吧,现在你AutoIt的安装,你应该能够创建一个新的.AU3(AutoIt脚本)文件。 只需任何文件夹右键点击,然后点击新建按钮,然后单击AutoIt v3 脚本 。
重命名该文件
例如我命名“epoxgonewild”,。
打开文件
打开AutoIt v3的脚本文件,右键单击,然后按下“编辑AU3脚本”。
第2节 添加代码的开头
我们做任何事情之前,你应该总是正确的开头 写代码也是这样#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: Forsaken
#ce ----------------------------------------------------------------------------CS表示注释的开始,并表示注释的开始
导入的图形用户界面功能
如果你想使用GUI(图形用户界面),你必须添加这一行#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: Forsaken
#ce ----------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
GUISetState(@SW_SHOW)GUISetState声明是告诉程序一旦运行,就会显示GUI界面,。 务必始终有(@SW_SHOW) 因为程序运行是读取从上到下的代码
制作一个界面框架
在AutoIt里你必须做的是添加GUICreate,并定义窗口的标题和尺寸。 很容易,对不对?#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: Forsaken
#ce ----------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
GUICreate("DNF自动刷材料脚本", 335, 100)
GUISetState(@SW_SHOW)("DNF自动刷材料脚本", 335, 100)
("x", y, z)
X =窗口的标题,它出现在窗口栏,关闭和最小化程序。
Y =窗户的宽度,决定程序有多宽。
Z =窗户的高度,决定程序的高度。
如果一切正确完成,一旦运行,您的框架看起来应该像这样。
###注意:如果你现在运行了就会关闭只要我们添加了一些实际的代码就行了 ###
脚本的末尾添加下面的代码,我们就可以让他不关闭
<font size="2">While 1
sleep(1)
WEnd</font>第3节
添加标签
标签,我们也可以叫它文本(text)。 为此,我们使用GUICtrlCreateLabel。#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: Forsaken
#ce ----------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
GUICreate("DNF自动刷材料脚本", 335, 100)
GUICtrlCreateLabel("text", 8, 10)
GUISetState(@SW_SHOW)
###注意:如果你现在运行了就会关闭只要我们添加了一些实际的代码就行了 ###
脚本的末尾添加下面的代码,我们就可以让他不关闭
<font size="2">While 1
sleep(1)
WEnd</font>添加输入框
输入用户提交的数据(如文本,数字和符号),并将它们保存起来。 我们使用GUICtrlCreateLabel。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("text", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUISetState(@SW_SHOW)
While 1
sleep(1)
WEnd
KEY1 这是一个变量也可以叫做字符串。这个变量就相当于易语言的变量可以自己设置变量名(例如,输入$ 52pojie $1 )
(“”,35,8,120)
(“X”,Y,Z,S)
X =留空,如果你想显示默认的文本你就可以在这里输入 想让用户输入就留空
Y =水平位置。
Z =垂直位置。
S =输入框的宽度。
一切完成了就向这样
第4节
这是一个很长的教程(我们只走了一半),如何添加更多的标签和输入框,可以按照上面完全同样的方法
需要做的是改变变量/字符串名称。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Text", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Text", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
GUISetState(@SW_SHOW)
While 1
sleep(1)
WEnd
这里我就多弄了一个标签 $time1.
重命名标签名#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Key", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Time", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
GUISetState(@SW_SHOW)
While 1
sleep(1)
WEnd
第5节
添加一个按钮
按钮是来开启脚本的。 我们来用GUICtrlCreateButton函数来创建按钮。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Key", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Time", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
<font color="Green">$startbutton</font> = GUICtrlCreateButton("开始", 190, 8, 60)
GUISetState(@SW_SHOW)
While 1
sleep(1)
WEnd$ startbutton是我们分配到的按钮,所以我们可以refrence一次我们需要它的变量。
(“开始”,190,8,60)
(“X”,Y,Z,S)
X =按钮的名称。
Y =水平位置。
Z =垂直位置。
S =按钮的宽度。
本帖最后由 cmc5410 于 2012-8-13 10:49 编辑
第2章
介绍
我们增加了图形用户界面,让我们开始添加实际的编码。
第1节
添加一个while循环
一个while循环,使代码可以重复执行一个固定的条件。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Key", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Time", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
$startbutton = GUICtrlCreateButton("开始", 190, 8, 60)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
WEnd While 1表示一个while循环
WEND表示while循环语句的结束。
如果你现在运行你的代码
GUI界面不会关闭,可以用托盘的退出按钮关闭。
这个GUIGetMsg用到$msg = GUIGetMsg()
添加一个Case语句#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Key", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Time", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
$startbutton = GUICtrlCreateButton("开始", 190, 8, 60)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Case $msg = $startbutton
Case $msg = $GUI_EVENT_CLOSE
EndSelect
WEnd我们增加了两个选项Select语句 选项 1:$ MSG = $ startbutton,这意味着如果开始按钮按下它会引发什么样的事件 (现在还没有添加代码)
选项 2:$ MSG =的$ GUI_EVENT_CLOSE,这意味着,如果退出按钮(X按钮)按下它会引发什么样的事件(现在还没有添加代码)
startbutton事件
现在让我们来告诉程序一旦按下开始按钮做什么。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Key", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Time", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
$startbutton = GUICtrlCreateButton("开始", 190, 8, 60)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $startbutton
$send1 = GUICtrlRead($key1)
$sleep1 = GUICtrlRead($time1)
Case $msg = $GUI_EVENT_CLOSE
EndSelect
WEnd首先,它将声明所有的变量。 这意味着它会读取用户输入到我们的两个输入字段$ time1和$KEY1 ,并使其在以下代码可用。
$KEY1 被赋予新的变量$ send1。
$ time1被分配了新的变量$ sleep1。
下一步我们将添加另一个while循环#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Key", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Time", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
$startbutton = GUICtrlCreateButton("开始", 190, 8, 60)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $startbutton
$send1 = GUICtrlRead($key1)
$sleep1 = GUICtrlRead($time1)
While 1
Send($send1)
Sleep($sleep1)
WEnd
Case $msg = $GUI_EVENT_CLOSE
EndSelect
WEnd退出按钮事件
$GUI_EVENT_CLOSE功能将退出循环,退出/关闭程序#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GUICreate("DNF自动刷材料脚本", 302, 143, 192, 124)
GUICtrlCreateLabel("Key", 8, 10)
$key1 = GUICtrlCreateInput("", 35, 8, 120)
GUICtrlCreateLabel("Time", 8, 44)
$time1 = GUICtrlCreateInput("", 35, 40, 120)
$startbutton = GUICtrlCreateButton("开始", 190, 8, 60)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $startbutton
$send1 = GUICtrlRead($key1)
$sleep1 = GUICtrlRead($time1)
While 1
Send($send1)
Sleep($sleep1)
WEnd
Case $msg = $GUI_EVENT_CLOSE
GUIDelete()
ExitLoop
EndSelect
WEnd
GUIDelete()就是关闭界面 反之就必须用托盘的退出了
第3章
附加功能
介绍
可以用于游戏。
TimerInit和TimerDiff
使用TimerInit 暂停整个代码。 一旦在休眠模式下,就会暂停 另一种方法是使用TimerInit()和TimerDiff()函数。 我们可以做一个if语句中使用这两个函数。 好吧,这里是代码...$timer = TimerInit()
While 1
$timed = TimerDiff($timer)
If $timed > 3000 Then ; we use greater than (>) because sometimes it might get skipped
MsgBox(1,"TimerDiff","TimerDiff : "&$timed)
$timer = TimerInit()
EndIf
WEndControlSend
发送键(S),发送到任何窗口之上, 使用ControlSend我们可以到指定的窗口发送键(S)。 可以后台发送
可以用于游戏窗口可以最小化 最大化ControlSend ( "title", "text", controlID, "string" [, flag] )例如ControlSend("地下城与勇士", "", "", "Hello !")
Sleep("100")
ControlSend("地下城与勇士", "", "", "{ENTER}"
Sleep("100")
ControlSend("地下城与勇士", "", "", "这里就是回车键按下出现的文字.")更改按钮上的文字
使用GUICtrlSetData我们可以在界面上改变任何东西我们要做的是增加一个开关,用到if,我们可以看到开始/停止按钮#include <GUIConstantsEx.au3>
GUICreate("GUICtrlSetData", 200,100)
GUISetState(@SW_SHOW)
$button = GUICtrlCreateButton("开始",60, 30, 80, 20)
$count = 0
While 1
Switch GUIGetMsg()
Case $button
If $count = 1 Then
GUICtrlSetData($button, "开始")
$count = 0
ElseIf $count = 0 Then
GUICtrlSetData($button, "停止")
$count = 1
EndIf
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
GUICtrlSetData($button, "停止")
$button,变量$button被分配到一个按钮,包含“开始”数据。 该函数的第二部分是我们正在改变的数据,我们将改变它的“停止”。
本帖最后由 cmc5410 于 2012-8-13 11:26 编辑
第四章
像素搜索(自动补血自动补蓝)
介绍 在本教程的一部分,您将学习如何创建一个脚本,自动使用HP / MP的药水。 HP / MP
首先让我们看看下面的HP MP
http://i48.tinypic.com/51yixl.png
有颜色, 红色和蓝色
现在看这个图片
http://i48.tinypic.com/2mqrbjk.png
从这张图片 我们看到血和魔都少了一部分
GetMousePos
获取当前鼠标光标位置。
我们需要做的第一件事是选择一个点
我拿起这个点在这里。(见绿点)
http://i49.tinypic.com/2a63twx.png
我们需要找到X和Y坐标While 1
sleep("1")
WEnd
Func _getDefault()
EndFunc然后,我们添加两个变量。 一个X坐标和Y坐标$x = 0
$y = 0
While 1
sleep("1")
WEnd
Func _getDefault()
EndFunc现在使用MouseGetPos()函数的实际坐标,并设置新的$ x和$ y变量包含的位置。$x = 0
$y = 0
While 1
sleep("1")
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
EndFunc像素搜索
下一步,我们要添加一些颜色的变化,不断地检查该位置。
我们这样做之前,我们必须在该位置的像素的颜色。 一些红色的阴影。
我打算把它添加到_getDefault()函数,因为它很容易,但也有不同的方式去做。$x = 0
$y = 0
$color = 0
While 1
sleep("1")
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
EndFunc现在让我们使用的Hex()函数得到的十六进制颜色代码值。$x = 0
$y = 0
$color = 0
While 1
sleep("1")
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
$color = Hex(PixelGetColor( $coord, $coord), 6)
EndFunc下一步,我们需要一个热键,来运行_getDefault()函数, 因为程序不会自动运行 我们将使用的HotKeySet()函数。HotKeySet("{NUMPADSUB}", "_getPosition")
$x = 0
$y = 0
$color = 0
$status = "off"
While 1
sleep("1")
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
$color = Hex(PixelGetColor( $coord, $coord), 6)
$status = "on"
EndFunc现在,当移动鼠标在屏幕上,按小键盘的减号 -它会设置$X $Y $color
接下来,我们开始if语句。 首先我们要检查状态。 如果状态设置为OFF时,它会跳过此代码。 如果它被设置它来将执行里面的代码。
下一步,我们要添加一个if语句来检查看到$status已经改变,如果这一立场。 我们有一个变量名为$status和设置其默认值之外的“OFF”,使脚本无法启动循环。HotKeySet("{NUMPADSUB}", "_getPosition")
$x = 0
$y = 0
$color = 0
$status = "off"
While 1
sleep("1")
If $status = "on" Then
;code here
EndIf
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
$color = Hex(PixelGetColor( $coord, $coord), 6)
$status = "on"
EndFunc之前,我们做里面的if语句的代码,我们必须做出一个功能llike _setDefault()。 唯一的区别是,它不会得到一个新的鼠标坐标和十六进制的颜色,它会保存到一个新的变量。 我们将利用我们现有的$ x和$ y位置。 不要忘了$ newColor。HotKeySet("{NUMPADSUB}", "_getDefault")
$x = 0
$y = 0
$color = 0
$newColor = 0
$status = "off"
While 1
sleep("1")
If $status = "on" Then
EndIf
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
$color = Hex(PixelGetColor( $coord, $coord), 6)
$status = "on"
EndFunc
Func _getCurrentColor($xDef, $yDef)
$newColor = Hex(PixelGetColor( $xDef, $yDef), 6)
Return ($newColor)
EndFunc现在,我们将继续if语句。 现在我们添加一个if语句来检查,如果颜色已经改变的话。HotKeySet("{NUMPADSUB}", "_getDefault")
$x = 0
$y = 0
$color = 0
$newColor = 0
$status = "off"
While 1
If $status = "on" Then
If _getCurrentColor($x, $y) <> $color Then
;code here
EndIf
EndIf
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
$color = Hex(PixelGetColor( $coord, $coord), 6)
$status = "on"
EndFunc
Func _getCurrentColor($xDef, $yDef)
$newColor = Hex(PixelGetColor( $xDef, $yDef), 6)
Return ($newColor)
EndFunc现在如果新的颜色不等于旧的颜色,它会执行代码。 现在用到Send()函数 如果药水放在快捷栏1快捷键1的话 我们将用数字“1”。HotKeySet("{NUMPADSUB}", "_getDefault")
$x = 0
$y = 0
$color = 0
$newColor = 0
$status = "off"
While 1
If $status = "on" Then
If _getCurrentColor($x, $y) <> $color Then
Send("1")
EndIf
EndIf
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
$color = Hex(PixelGetColor( $coord, $coord), 6)
$status = "on"
EndFunc
Func _getCurrentColor($xDef, $yDef)
$newColor = Hex(PixelGetColor( $xDef, $yDef), 6)
Return ($newColor)
EndFunc直到血补满 他就会停止
HotKeySet("{NUMPADSUB}", "_getDefault")
$x = 0
$y = 0
$color = 0
$newColor = 0
$status = "off"
While 1
If $status = "on" Then
If _getCurrentColor($x, $y) <> $color Then
;code here
EndIf
EndIf
WEnd
Func _getDefault()
$coord = MouseGetPos()
$x = $coord
$y = $coord
$color = Hex(PixelGetColor( $coord, $coord), 6)
$status = "on"
EndFunc
Func _getCurrentColor($xDef, $yDef)
$newColor = Hex(PixelGetColor( $xDef, $yDef), 6)
Return ($newColor)
EndFunc 内容呢?…… 我没看懂。你们呢? 支持楼主开讲AUTOIT系列教程~~~~ 学习了!!!! 期待更多教程,想学但不知从何入手 我看不懂哎。。