魔兽世界自动打怪脚本跑商原理

发布时间:2021-12-19 来源:脚本之家 点击:

这就是说,如果使用看起来象是数字的数据,则VBScript会假定其为数字并以适用于数字的方式处理可能有人已经猜出来他们的作用了

倩女幽魂手游脚本助手ios系统
四篇(共六篇):
大家好,昨天我休息了一天,所以今天写第4章:循环结构

  我们先来看一道题:商场进行每日结算,要求累加出今天的营业额,每次输入一个数,这道题其实很简单,但就我们现在学

过的知识要完成这道题相当麻烦,我们来分析一下.首先,我们需要知道买卖的次数,这样才能控制输入的次数,但是,这种设

计是非常低效的,每天都要重新设计程序.假定今天进行了5次交易,以下是源程序:

dimsum
sum=0'初始化变量
sum=sum+int(inputbox("请输入交易额"))
'sum=sum+x 这种形式是把本身的值取出来,进行一次运算,再放回本身,这种方法很有用处
'这里使用了函数嵌套,把inputbox的返回值直接传给int函数,转化成整数,下同
sum=sum+int(inputbox("请输入交易额"))
sum=sum+int(inputbox("请输入交易额"))
sum=sum+int(inputbox("请输入交易额"))
sum=sum+int(inputbox("请输入交易额"))
msgbox(sum)

  看到了吗,我通过把计算过程复制了5遍才设计好了程序,这种程序在汽车交易所等交易次数少的地方还能凑合着用,如果

放到超市岂不是要复制,粘贴几千遍?我们今天讲的内容就可以克服这种缺陷,首先,我们来讲以下Do...Loop语句.

  do...loop的结构看上去非常简单,就是:do...loop,仅此而已,这个结构不断执行do和loop之间的语句(学名叫:循环体),
永不停止.举个例子来说:

do
msgbox("这个信息会不断重复出现,要停止程序请使用任务管理器(Ctrl+Alt+Del)中止wscript进程")
loop

  运行这个程序,当你点销掉一个对话框马上会出来另一个,你永远点不完,总有下一个.谁会运行这样的程序?除非是给

别人捣乱(我就干过这种事),所以在do..loop结构中还有一个语句:exitdo,这个语句将终止循环,跳到loop后面的语句继续

执行.据个例子来说:

dima'注意:常量不需要在dim里面声明,否则会引发错误
constpass="123456"'这是一个字符串请用""包裹起来.设定密码为常量,不可变更
do
a=inputbox("请输入密码")
ifa=passthen
msgbox("密码校验成功")
exitdo
endif
loop

  这个程序会一直不停的问你密码,知道你输入了正确的密码为止.(if可以嵌套在另一个if当中,也可以嵌套在循环体当中

,所以一定要用缩进,来分清楚程序的各个部分).这个程序是很经典的,早期的程序都是这么做的.但是我们是Hacker,所以

我们了解系统的安全性,这种无限次认证程序很容易被穷举破解,我们要来限定认证的次数.修改程序如下

dima,ctr
ctr=0'设置计数器
constpass="pas123_"'上面的那个是弱密码,这次改的强一点
do
ifctr=3then
msgbox("已经达到认证上限,认证程序关闭")
exitdo
else
a=inputbox("请输入密码")
ifa=passthen
msgbox("认证成功")
msgbox("(你可以在这里加一段成功后得到的信息)")
exitdo
else
ctr=ctr+1'如果密码出错就增加一次错误认证计数
msgbox("认证出错,请检查密码")
endif
endif
loop

  运行这个程序试试看,当你出了3此错误以后,就会停止再次询问密码,关闭程序.telnet认证用来限制次数的程序与此大

同小异.要注意的是嵌套的if语句,清仔细读一下这个程序,可能比较难懂,也请你试着自己设计一下类似的程序.

  其实,要在do...loop加上验证的功能,并不一定要用if,我们可以直接利用do.我来介绍一下while关键字,while可以放
在do或者是loop后面,然后再接一个表达式,当表达式的值为true的时候(表达式成立),才运行循环体.我们来看一下修改后的
程序"

dima,ctr
ctr=0
constpass="pas123_"
dowhilectr<3
a=inputbox("请输入密码")
ifa=passthen
msgbox("认证成功")
msgbox("(你可以在这里加一段成功后得到的信息)")
exitdo
else
ctr=ctr+1'如果密码出错就增加一次错误认证计数
msgbox("认证出错,请检查密码")
endif
loop

  这样实现的功能和上一个例子完全一样,我们再来看看把while放在loop后面:

dima,ctr
ctr=0
constpass="pas123_"
do
a=inputbox("请输入密码")
ifa=passthen
msgbox("认证成功")
msgbox("(你可以在这里加一段成功后得到的信息)")
exitdo
else
ctr=ctr+1'如果密码出错就增加一次错误认证计数
msgbox("认证出错,请检查密码")
endif
loopwhilectr<3

  功能是一样的,为什么要放在loop后面呢?你把ctr的值改成3就知道了,while在do后面的程序会直接退出,而在loop后面

还会允许一次认证,到了loop才结束.和while相反的是until,用法和while一样,不过他只有当后面的表达式的值为false(表

达式不成立)的时候才执行循环体,请自己试验一下

  ok,我们来看另外一种循环结构,for....next,这种循环结构是基于计数的,也是在编程中最常见到的循环结构.

dimi
fori=0to5
msgbox(i)
next

  看到了吗?每次输出的i都是递增的,但我们没有明确指出i要递增,当i达到5的时候,循环就结束了,因为由0开始,所以

循环体执行了6次,这一点很重要,大部分东西都是从0开始而不是1.这个程序也可以写成

do的形式:

dimi
i=0
dowhilei<5
msgbox(i)
i=i+1'因为do不能自动计数,必须手动加
loop

  怎么样,还是for比较好用吧.for在编程中很有用途,我们再举一个例子,顺便讲一下嵌套循环.

dimi,j
fori=1to9
fori=1to9
str=str&i*j&""'&是和并字符串的符号
next'每个next对应一个for
next

  看看运行结果,是否令你会想起小学时代的数学老师(丑陋的嘴脸).要注意,这里有一个"大"的for,和一个小的for,当

小的for执行完一个周期以后,大的for才执行一次(换句话说,大的for执行一次,小的要执行9次),所以一共执行了九九八十

一次.在大的for里可以不仅仅是一个小的for,也可以加上另外的语句.我们来修改一下源程序:

dimi,j
fori=1to9
fori=1to9
str=str&i*j&""
next'每个next对应一个for
str=str&vbCrlf'vbCrlf相当于键盘上的回车键,因为你不能在键盘上输入,所以系统定义了一个默认的常量
next

  这次运行完成以后,输出结果按照乘数进行了分割,每小for运行完一次,就换一行(通过vbcrlf).

  这次的内容对菜鸟可能比较难懂,掌握的办法只有一个:多实践.另外,我在论坛看到很多人还是问:"VBScript要用什么工

具编?"我就很气愤,我在第一篇里面已经说明:用记事本编辑源代码,然后保存为以.vbs为扩展名的程序就可以了,请大家不要

再问.另外,国产的一种垃圾软件"超级X霸"抢占了vbs这个扩展名,请把那个垃圾卸载掉.

  我们总结一下:

要点:

1)do..loop和exitdo的用法

2)while当表达式true的时候执行循环体,until反之

3)for...next是计数循环,每次执行计数器递加

4)嵌套循环的作用和写法

4.5)&用于连接字符串

5)vbCrLf相当于键盘上的回车键


作业:

1)在我国的数学经典著作"九章算术"中有这样一道题:百钱买百鸡,公鸡5钱一只,母鸡3钱一只,小鸡1钱2只(这个数据我是参

考一本编程书的,但我记得是公3,母1,小1钱3只?不管了,就按照书上得来吧)求得是能有多少种办法买这些鸡.如果看不懂的

话我用大白话说说:有人要去买鸡,用100块钱正好买了100只鸡,价格如下:公:5$,母:3$,小:1$for2,让你求一共多少种卖

法(公母小怎么搭配).请用循环解决这个问题.

ps:今天要去移民局办事,所以文章写的很仓促.大部分代码都没有实验,请大家帮我找错.另外,上次的作业大家在论坛应该

看到了,我就不重复答案了,不知道大家喜欢做这种题,还是以前那种比较简单的?
记得在Class_Terminate中填写对象撤销后的代码


''owc.vbs
class owc
private o
'传入物件
public property set set_obj(o_id)
set o=o_id
end property
'画图矩形图
'chart_bgcolor_图表的背景颜色
'chartCaption_图表的标题
'chartCaption_fontColor_图表标题颜色
'Interior_Color_矩形内的填充颜色
'Caption_名称
'categories_名称数组
'values_值数组串
public sub bar(chart_bgcolor_,chartCaption_,chartCaption_fontColor_,Interior_Color_,Caption_,categories_,values_)
o.Clear
set cht=o.Charts.Add
set c=o.Constants
cht.Type=c.chChartTypeColumnClustered
'设背景色或是填充
o.Charts(0).PlotArea.Interior.SetSolid chart_bgcolor_

'加上图表的标题
o.HasChartSpaceTitle=True
set cst=o.ChartSpaceTitle
cst.Caption=chartCaption_
cst.Font.Color=chartCaption_fontColor_
cst.Font.Italic=False
cst.Font.Name="Arial"
cst.Font.Size=12
cst.Font.Underline=c.owcUnderlineStyleSingle

'添加数据
cht.SetData c.chDimCategories, c.chDataLiteral, categories_
cht.SeriesCollection(0).SetData c.chDimValues, c.chDataLiteral, values_
'直条的背景色进行设定
set sc=o.Charts(0).SeriesCollection(0)
sc.Interior.Color=Interior_Color_

'直条上的显示设置
sc.Caption=Caption_
set dl=cht.SeriesCollection(0).DataLabelsCollection.Add
dl.HasValue=True
dl.HasPercentage=False
dl.Font.Size=9
dl.Font.Color="red"
dl.Position=c.chLegendPositionRight
dl.NumberFormat="00.00%"
'左边百分比的属性设置
Set cta=cht.Axes(c.chAxisPositionLeft)
cta.Font.Size=9
cta.NumberFormat="0.0%"
cta.MajorUnit=0.1
end sub
'多系列矩形图
'chart_bgColor_图表的背景颜色
'chartCaption_图表的标题
'chartCaption_fontColor_图表标题颜色
'color_颜色数组
'caption_名称数组
'categories_名称数组
'values_值数组
public sub serBar(chart_bgColor_,chartCaption_,chartCaption_fontColor_,color_,caption_,categories_,values_)
o.Clear
o.Charts.Add
Set c=o.Constants
'图表的类型
o.Charts(0).type=c.chChartTypeColumnClustered
'给绘图区加背景色
o.Charts(0).PlotArea.Interior.SetSolid chart_bgColor_
''加上图表的标题
o.HasChartSpaceTitle=True
o.ChartSpaceTitle.Caption=chartCaption_
'标题的属性
o.ChartSpaceTitle.Font.Color=chartCaption_fontColor_
o.ChartSpaceTitle.Font.Italic=False
o.ChartSpaceTitle.Font.Name="Arial"
o.ChartSpaceTitle.Font.Size=12
o.ChartSpaceTitle.Font.Underline=c.owcUnderlineStyleSingle
'用循环来新增SeriesCollection以及里面的内容
for i=0 to ubound(caption_)
valuetemp=""
for j=i*(ubound(categories_)+1) to (i+1)*(ubound(categories_)+1)-1
valuetemp=valuetemp & "," & values_(j)
next
valuearr=split(mid(valuetemp,2),",")
o.Charts(0).SeriesCollection.Add
o.Charts(0).SeriesCollection(i).Caption=caption_(i)
o.Charts(0).SeriesCollection(i).Interior.Color=color_(i)
o.Charts(0).SeriesCollection(i).SetData c.chDimCategories, c.chDataLiteral, categories_
o.Charts(0).SeriesCollection(i).SetData c.chDimValues, c.chDataLiteral, valuearr
set dl=o.Charts(0).SeriesCollection(i).DataLabelsCollection.Add
dl.HasValue=True
dl.HasPercentage=False
dl.Font.Size=9
dl.Font.Color="red"
dl.Position=c.chLegendPositionRight
dl.NumberFormat="00.00%"
next
''图例的设定
o.Charts(0).HasLegend=True
o.Charts(0).Legend.Font.Size=9
o.Charts(0).Legend.Position=c.chLegendPositionBottom
''左边百分比的属性设置
Set cta=o.Charts(0).Axes(c.chAxisPositionLeft)
cta.Font.Size=9
cta.NumberFormat="0.00%"
cta.MajorUnit=0.1
end sub
'画圆饼图
'chart_bgColor_绘图区加背景色
'chartCaption_图表的标题
'chartCaption_fontColor_图表标题颜色
public sub Pie(chart_bgColor_,chartCaption_,chartCaption_fontColor_,Caption_,categories_,values_)
o.Clear
Set cht=o.Charts.Add
Set c=o.Constants
cht.Type=c.chChartTypePie3d
'给绘图区加背景色
o.Charts(0).PlotArea.Interior.SetSolid chart_bgColor_
cht.ExtrudeAngle=90
cht.ChartDepth=169
cht.AspectRatio=120
cht.Rotation=180
cht.Inclination=70

o.HasChartSpaceTitle=True
o.ChartSpaceTitle.Caption=chartCaption_
o.ChartSpaceTitle.Font.Color=chartCaption_fontColor_
o.ChartSpaceTitle.Font.Name="Arial"
o.ChartSpaceTitle.Font.Size=12
o.ChartSpaceTitle.Font.Underline=c.owcUnderlineStyleSingle

cht.HasLegend=True
cht.Legend.Font.Size=9
cht.Legend.Position=c.chLegendPositionBottom

cht.SetData c.chDimCategories, c.chDataLiteral, categories_
cht.SeriesCollection(0).SetData c.chDimValues, c.chDataLiteral, values_
set sc=o.Charts(0).SeriesCollection(0)
sc.Caption=Caption_
Set dl=cht.SeriesCollection(0).DataLabelsCollection.Add
dl.Separator=":"
dl.HasValue=false
dl.HasSeriesName=false
dl.HasCategoryName=true
dl.HasPercentage=true
dl.Font.Size=9
dl.Font.Color="red"
dl.NumberFormat="00.00%"
end sub
'拆线图
'chart_bgColor_绘图区加背景色
'chartCaption_图表的标题
'chartCaption_fontColor_图表标题颜色
public sub line(chart_bgColor_,chartCaption_,chartCaption_fontColor_,Caption_,categories_,values_)
o.Clear
Set cht=o.Charts.Add
Set c=o.Constants
cht.Type=c.chChartTypeLineMarkers
'给绘图区加背景色
o.Charts(0).PlotArea.Interior.SetSolid chart_bgColor_
o.HasChartSpaceTitle=True
o.ChartSpaceTitle.Caption=chartCaption_
o.ChartSpaceTitle.Font.Color=chartCaption_fontColor_
o.ChartSpaceTitle.Font.Name="Arial"
o.ChartSpaceTitle.Font.Size=12
o.ChartSpaceTitle.Font.Underline=c.owcUnderlineStyleSingle

cht.SetData c.chDimCategories, c.chDataLiteral, categories_
cht.SeriesCollection(0).SetData c.chDimValues, c.chDataLiteral, values_

set sc=o.Charts(0).SeriesCollection(0)
sc.Caption=Caption_
Set dl=cht.SeriesCollection(0).DataLabelsCollection.Add
dl.HasValue=True
dl.HasPercentage=False
dl.Font.Size=9
dl.Font.Color="red"

Set categoryAxis=cht.Axes(c.chAxisPositionBottom)
categoryAxis.Font.Size=9

Set categoryAxis=cht.Axes(c.chAxisPositionLeft)
categoryAxis.Font.Size=9
end sub
'多系列拆线图
'chart_bgColor_图表的背景颜色
'chartCaption_图表的标题
'chartCaption_fontColor_图表标题颜色
'color_颜色数组
'caption_名称数组
'categories_名称数组
'values_值数组
public sub serLine(chart_bgColor_,chartCaption_,chartCaption_fontColor_,color_,SeriesNames_,categories_,values_)
o.Clear
Set cht=o.Charts.Add
Set c=o.Constants
'设置图表类型
cht.Type=c.chChartTypeLineMarkers
'给绘图区加背景色
o.Charts(0).PlotArea.Interior.Color=chart_bgColor_
'加上标题
o.HasChartSpaceTitle=True
o.ChartSpaceTitle.Caption=chartCaption_
o.ChartSpaceTitle.Font.Color=chartCaption_fontColor_
o.ChartSpaceTitle.Font.Name="Arial"
o.ChartSpaceTitle.Font.Size=12
''添加数据
cht.SetData c.chDimSeriesNames, c.chDataLiteral, SeriesNames_
cht.SetData c.chDimCategories, c.chDataLiteral, Categories_

set categoryAxis=cht.Axes(c.chAxisPositionBottom)
categoryAxis.Font.Size=9

Set categoryAxis=cht.Axes(c.chAxisPositionLeft)
categoryAxis.Font.Size=9

for i=0 to ubound(SeriesNames_)
valuetemp=""
for j=i*(ubound(Categories_)+1) to (i+1)*(ubound(Categories_)+1)-1
valuetemp=valuetemp & "," & values_(j)
next
valuearr=split(mid(valuetemp,2),",")
cht.SeriesCollection(i).SetData c.chDimValues, c.chDataLiteral, valuearr
cht.SeriesCollection(i).Line.Color=color_(i)
cht.SeriesCollection(i).Line.Weight=c.owcLineWeightThin
cht.SeriesCollection(i).Marker.Style=c.chMarkerStyleDiamond
cht.SeriesCollection(i).Interior.Color=color_(i)
Set dl=cht.SeriesCollection(i).DataLabelsCollection.Add
dl.HasValue=true
dl.HasPercentage=false
dl.Font.Size=9
dl.font.color="red"
next
end sub
'清除图型
public sub clear()
o.Clear
end sub
end class
例如,如果我们忽略窗口的类,应将定义修改如下:
DeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVal
lpClassNameAsAny,ByVallpWindowNameAsString)AsLong
  然后,在调用时使用如下语句:
  hwndCalc=FindWindow(0&,"abc")
  这里的0&就表示忽略类名


'直接下面代码程序会出现关机的对话框,最后的回车注释掉了,正常使用时,请去掉注释符

固定长度字符串的处理速度通常慢于可变长度字符串,这是因为所有的VB字符串函数和命令只能识别可变长度字符串

您并没有问我们:“是否存在某种变通办法可以实现相同目的,但不必在消息框中嵌入超链接?”如果您这么问,我们就会告诉您:“总会有变通办法的导入文件夹FunctionCompFile(F1asstring,F2asstring)asboolean
Dimissameasboolean
OpenF1ForBinaryAs#1
OpenF2ForBinaryAs#2

issame=True
IfLOF(1)<>LOF(2)Then
issame=False
Else
whole&=LOF(1)\10000'numberofwhole10,000bytechunks
part&=LOF(1)Mod10000'remainingbytesatendoffile
buffer1$=String$(10000,0)
buffer2$=String$(10000,0)
start&=1
Forx&=1Towhole&'thisfor-nextloopwillget10,000
Get#1,start&,buffer1$'bytechunksatatime.
Get#2,start&,buffer2$
Ifbuffer1$<>buffer2$Then
issame=False
ExitFor
EndIf
start&=start& 10000
Next
buffer1$=String$(part&,0)
buffer2$=String$(part&,0)
Get#1,start&,buffer1$'gettheremainingbytesattheend
Get#2,start&,buffer2$'gettheremainingbytesattheend
Ifbuffer1$<>buffer2$Then
issame=False
EndIf
Close
CompFile=issame
EndFunction->


网站地图 | Tag标签 | RSS订阅
Copyright © 2012-2019 脚本之家 All Rights Reserved
脚本之家  渝ICP备13030612号