传奇脚本编写的重点与技巧

admin 2022/02/03 18:52:17 1487
脚本编写的重点与技巧

任何脚本都要完成以下几个部分:买药,买杂物,出发,打怪,拣东西(金币),回城修整等等。为了方便大家更加清晰的了解及时雨脱机脚本的写法,现为大家详细解释一下如何撰写脚本。由于脚本命令很简单,都是汉字,一看就明白,所以重点在于让大家搞清楚一些关键的概念,向大家介绍一些写脚本的技巧。

 

首先我们要对及时雨脱机脚本有一个“大格局”的概念,就是及时雨脱机脚本是由哪些部分组成的:

 

$衣服=[自己][衣服][名称] 
$头盔=[自己][头盔][名称]
$武器=[自己][武器][名称]
$项链=[自己][项链][名称]
$左手镯=[自己][左手镯][名称]
$右手镯=[自己][右手镯][名称]
$左戒指=[自己][左戒指][名称]
$右戒指=[自己][右戒指][名称]

(说明: 以$开头的是变量。所谓变量就是你当前给它的定义的内容,它会随着实际情况而改变自己包含的内容,用起来非常方便。比如 $衣服 ,在脚本开始你将它的内容写成 $衣服=[自己][衣服][名称]  ,这是一个标准格式,比如你现在穿的衣服是 战神盔甲 ,那么 脚本会通过 [自己][衣服][名称]判断出你衣服的名字是战神盔甲,其实就是 $衣服=战神盔甲 。下面的 $衣服 也就代表了 战神盔甲 。每次执行脚本的时候,都会重新给这些变量定义当前最新的内容。这样,上面的几句可以作为以后你写脚本的标准语句使用,适用任何人物的任何装备。)


<全局脚本开始>

内容。。


<全局脚本结束>

<挂机脚本开始>

<回城>

<总控>

<装备修理>

<购买药品>

<购买杂物>

<出发>

<战斗>

<全局脚本结束>

我们就从这些部分,一点点解释,涵盖所有的命令,这样你就可以直接“套用”,写起来会简单的多。


1:<全局脚本开始> 和 <全局脚本结束>

  这两个语句中间的任何一个判断,在你开启全局脚本以后,会一直随时随地忠实的为你监视着你人物的各种情况,当你在脚本中执行战斗以前开启以后才会运行。比如:

如果[自己][HP]<200
那么跳转到[回城]

a:在及时雨脱机脚本中, 如果。。。那么。。。是最基本的,也是使用最多的判断语句。上面的意思就是说,如果自己的血小于200的话,脚本会马上跳转到“模块” <回城> ,这里对血的检测是随时的,不管在什么情况下,一但你人物的血小于200,它就会忠实的执行 <回城>
再比如:
如果[待存物品][数量]>0
那么跳转到<回城>

[待存物品],代表了你在程序中已经设置好的需要存入仓库的装备,一但你的拣起,你的背包中出现了你设置过的这些物品,那么就会马上触发这个条件,执行回城。

b:那么什么是“模块”呢?

模块的格式由符号 < > 来引导,比如模块 <回城>的写法:

<回城>
关闭全局脚本
停止战斗
如果[0,332,269][距离]>200
那么使用[回城卷]
否则跳转到<总控>
等待[2000]毫秒
跳转到<回城>

模块有两种,一种是执行“跳转到”命令的。这样的模块在执行完最后一个语句后,会自动执行下面的语句或者模块。另一种是执行 “调用”命令的,这样的模块适合需要反复执行的动作,比如<购买药品> <购买杂物>等等,被调用的模块的结束语必须是 “返回” ,这样执行完这个模块后,会再返回到你刚才调用这个模块的下一个语句。对于模块我们头脑中一定要有3个概念:

1:它是独立的,每一个模块都执行的一个具体的行动。可以多次跳转或者调用它执行。
2:执行模块可以用命令 “跳转到” 。跳转到就是“啥也别说了,直接执行那个模块”,比如 跳转到<回城>
3: 执行模块可以用命令 “调用” 。调用某个模块执行完毕后,会返回到你刚才调用这个模块的下一个语句,所以这类模块的结束语必须是“返回”。就是“我在某个地方需要拉粑粑,但是粑粑拉完了必须得马上回来,接着干该干的事。但不能在拉粑粑的地方不回来了。。。。” 比如 调用<购买药品>

我们来看几个例子:

<全局脚本开始>

如果[自己][HP]<200  <--在全局中,如果开启,将随时监测是否人物的血小于200
那么跳转到<回城>


<全局脚本结束>

<回城>
关闭全局脚本   <-- 先关闭全局监视
停止战斗       <--必须要让脚本停止战斗,否则人物会在城里跑着找怪打
如果[0,332,269][距离]>200   <--这是一个计算距离的标准格式,意思是如果和土城的坐标(332,269)的距离超过200 如果你在其他地图会被默认大于200。
那么使用[回城卷]  <--你可以使用任何存在的物品,物品用中括号[ ] 括起来
否则跳转到<总控>  <-- “否则”的使用,是在 如果。。那么。。以后,是指如果“XXX”条件不成立的情况下会执行下面这个 “否则” 如何。。
等待[2000]毫秒  <--时间延迟的标准格式。由于很多动作需要游戏服务器有时间做出反映,所以一定的时间延迟是必须的。
跳转到<回城>  

<总控>
内容..........


我们来仔细看一下模块<回城>是如何判断和运行的:
首先看你当时所在的点是否和土城的坐标(332,269)的距离是否大于200,如果小于,那么会直接执行下面的模块 <总控> ,如果大于,那么会使用 回城卷,然后下面的 否则XXX 不会执行,然后会执行 “跳转到<回城>” ,就是跳转到模块自己,在使用了回城卷后再次判断是否已经回到土城。这样在身上有回城卷的情况下,会保证你回城。

-------------------------------------------------------------------------------<总控>
如果[蓝药][数量]<2  <---及时雨脱机脚本中,你可以在程序的基本设置中找到物品的设置,其中[蓝药]就代表了强效魔法药,超强魔法药等等所有你设置过的。这个数量<2 ,是指它会寻找任何一种[蓝药],只有当最后一种[蓝药]的数量小于2时,才会触发这个条件。
那么调用<药品购买>  <--这里就是调用了,当药品购买完成以后,会执行下面的语句
如果[红药][数量]<2  <--及时雨脱机脚本中,你可以判断任何存物品的数量,比如 如果[裁决][数量]>2 那么。。。
那么调用<药品购买>
如果[回城卷][数量]<2
那么调用<杂物购买>
调用<红药购买>

如果[自己][衣服][持久]<5 <-- 这是判断当前穿在人物身上的装备的持久情况。直接这样写就OK了,脚本会很准备的判断出你所有装备的持久,这就是标准格式。
那么调用<衣服修理>
如果[自己][头盔][持久]<2
那么调用<衣服修理>

如果[自己][项链][持久]<2
那么调用<首饰修理>
如果[自己][左手镯][持久]<2
那么调用<首饰修理>
如果[自己][右手镯][持久]<2
那么调用<首饰修理>
如果[自己][左戒指][持久]<2
那么调用<首饰修理>
如果[自己][右戒指][持久]<2
那么调用<首饰修理>

 


<红药购买>   <--被调用的模块
走到NPC附近[3,359,339]  <--这里一定要走到离这个NPC近的地方,最好是他自己的坐标
对话[盟重药店老板]  <--这里可以用程序中的脚本录制就OK了
选择[买]
买够[打捆超强魔法药]9个  <-- 记住这个简单的格式,这样可以一次买完9个
买够[打捆超强金创药]6个
返回         〈----非常重要,它会返回刚才调用这个模块的地方


<衣服修理>
走到NPC附近[3,333,330]
对话[盟重商店传送员]
选择[武器店]
等待[3000]毫秒
走到[0149,15,15]
对话[张家布衣老板]
如果[自己][衣服][名称]="$衣服"
那么修理[衣服]           <----及时雨脱机脚本大大简化了修理的过程,看下面的说明
否则修理[$衣服]装备到[衣服]
如果[自己][头盔][名称]="$头盔"
那么修理[头盔]
否则修理[$头盔]装备到[头盔]
使用[回城卷]
等待[3000]毫秒
返回

(说明:及时雨脱机脚本中,你可以直接用 特修[衣服] 或者 修理[衣服] 这一句,来代替修理的全过程,包括卸下衣服,修理衣服,装备XXX到衣服,这些只要一句特修[衣服] 就全包括了。是不是很方便?)

 

-------------------------------------------------------------------------------<出发>

走到NPC附近[0,330,267]
对话[比奇省服务员]
选择[傲世练级区]
选择[猪洞六层]
等待[2000]毫秒
躲避PKER开启  <--这个命令适合你冲级时,在程序的基本选中使用了被PK时不做任何反映后,它会使你远远的躲开在你挂机时恶意PK你的人。
开启全局脚本  <--根据你的实际情况用 开启全局脚本 这个命令使全局监测开始工作
如果 $_当前地图=0  <--从及时雨脱机版本1.16A以后,引入了这个重要的变量。$_当前地图 是个固定的格式,它可以随时监测你当前所在的地图编号。这个变量非常重要。
那么跳转到<出发>
否则跳转到<战斗>

<战斗>
。。。。。

(说明:这就是出发了,呵呵。就是你买完了药品,修理了装备,要上路打怪了)


-------------------------------------------------------------------------------


<战斗>
边走边打到[D5072,7,51]
跳转到<战斗>

说明:战斗由于地图不同,情况也都不相同。但是基本上都要使用 边走边打到[地图编码,X坐标,Y坐标] 这个命令。编写战斗脚本,有以下几个基本点,掌握了这几点,战斗部分的编写将变的十分轻松:

a: 由于每个SF的地图不同,即使是相同的地方,也可能坐标点不一样。这里有一个重要的概念,就是门点。门点的坐标是脚本正常运行的基本保证。然而在成熟的及时雨脱机脚本中,你根本看不到一个门点,这就是及时雨脱机最智能的方面:它可以跨地图行走。但是有一个前提:就是你在执行脚本以前,必须要把你要作战的地图都走一遍。提前走一次的目的,就在于程序会自动纪录下每个地图之间准确的门点,在你走过一次以后,你的脚本已经变的十分的轻松。比如你要从地图D5071打到D5072,那么你直接可以写边打边走到[D5071,x,y],根本不需要在脚本中出现门点,过门等等语句了。这里有一个问题要注意,当跨地图编写时,你要到达的下一个地图的坐标,最好离门点稍微近一些,这样会程序会减少计算时间,使脚本优化,快速。(这里还有一个小技巧,比如你两个人物需要在同一个地图挂机。其中一个人物已经把要作战的地图都走过了,你可以在程序的文件夹中的 DATA 目录下,找到这个人物的名字的文件夹,打开它,你会看到有一个 doorlink.ini 的文件,当下一个人物需要在同样的地图挂机时,你把这个文件 复制,粘贴到另一个人物的文件夹下,覆盖掉新人物的 doorlink.ini ,那么这个新人物可以直接挂机,而不用重新走了。对了,doorlink.ini 就是纪录地图之间门点的文件)

b: 及时雨脱机脚本默认搜索怪的范围是最大,所以如果你想控制它搜索怪物范围的话,可以使用命令  搜索怪物范围[X]格,加在边打边走的坐标之前,比如 搜索怪物范围[5]格

c:战斗中对地图的判断至关重要,完善的地图判断是脚本顺利战斗的保证。因为你在打怪过程中,会出现小退,断线等等情况,人物上线以后,会停留在原地图,或者被传送到某个其他地图。


这里先解释一下程序在小退以后是如何判断的:及时雨脱机外挂在人物小退以后,会首先判断你新上线以后的地图是不是刚才你下线时候的地图,如果是,那么它会继续执行你下线以前的脚本语句,你会在程序的系统显示中看到重新激活脚本 的字样。如果不是,那么它会重新启动脚本。

新上线时候,如果装备持久高,药带的足够,回城的话太浪费时间。但是装备需要修理,没药的时候如果判断不对,就不能及时回城,装备有化掉的危险。那么如何来做到既不浪费时间,又能保证该回城的时候就回去呢?

我们用两个例子来说明。首先是战斗中的地图判断。

下面的例子用来说明如何用一个模块来对整个地图的判断加以最完美的控制。


<战斗>
系统显示[您的人物已经开始战斗]  <--这样写会在你的程序系统 显示部分出现一行你定义的蓝色的字,对于调试脚本很有用,建议你养成这个好习惯
如果 $_当前地图=D515
那么跳转到<小退>
如果 $_当前地图=D5071
那么跳转到<D5071>
如果 $_当前地图=D5072
那么跳转到<D5072>
如果 $_当前地图=D5073
那么跳转到<D5073>
如果 $_当前地图=D5074
那么跳转到<D5074>

 

 

<小退>   <--这个服务器是先到玛祖7,小退后再上来才能到祖玛6
小退[20]毫秒
等待[2000]毫秒
如果 $_当前地图<>D5071 <---这里的 <> 为不等于,脚本支持 >= <= <> =
那么跳转到<小退> <---直到地图编号=D5071才会到下一句,返回
跳转到<战斗>

<D5071>
边打边走到[D5072,11,55]
如果 $_当前地图=D5071
那么跳转到<D5071>
跳转到<战斗>

<D5072>
边打边走到[D5072,86,23]
走到[D5073,13,68] <--走到下一个地图离门点很近的一个坐标点
等待[1000]毫秒
跳转到<战斗>

<D5073>
边打边走到[D5073,78,15]
边打边走到[D5073,54,9]
走到[D5074,45,87]
等待[1000]毫秒
跳转到<战斗>

<D5074>
边打边走到[D5074,75,18]
走到[D515,15,29]
等待[1000]毫秒
跳转到<战斗>


呵呵,对了,就是这样。为每一个战斗地图都专门设立一个模块,并在完成后都跳转到<战斗>中去判断。这样就在战斗期间就永远不会出现地图错误的情况了。这样的脚本在执行中,干净利索,执行速度快。

 

这里需要插一下,说一下 $_当前地图 这个变量的用法。大家刚才看到的最上面的模块中,最后的4句,先看这4个语句

如果 $_当前地图=D5071
那么跳转到<D5071>
如果 $_当前地图=D5072
那么跳转到<D5072>
如果 $_当前地图=D5073
那么跳转到<D5073>
如果 $_当前地图=D5074
那么跳转到<D5074>

其实这这么多句,可以用一句来完成:

跳转到<$_当前地图>

也就是说,最上面那个<战斗>的模块部分,可以写成:


<战斗>
系统显示[您的人物已经开始战斗] 
如果 $_当前地图=D515
那么跳转到<小退>
否则跳转到<$_当前地图>

是不是更加简洁呢?

比如石墓阵里绕来绕去的地方,你也可以用一句来完成:
简单的可以写成

<石墓阵战斗>
边打边走到[$_当前地图,17,12]
跳转到<石墓阵战斗>

.............................................

这个变量会在一些样子相似,但是地图编码不同的地图中发挥最大的作用。比如在 祖码阁 的那些小屋子中也能发挥的淋漓尽致。你现在一定比我用这个变量用的好拉。我们继续往下看:

好了,那么我们说第2个例子,就是一但小退后新上线,由于地图的改变,程序默认会重新执行脚本。那怎么样才能做到完美呢?


在 全局脚本 中,你加的东西越少,随时检测的情况也就越少,你的脚本占用的资源就越少,你判执行的速度就会快。所以,判断装备持久减少,药品减少等情况时,最好是使用程序自带的判断,在基本选项里设置以后就好。因为基本设置这里的判断,是会直接重新启动脚本的。

好了,不管是随时检测的,还是小退后新上线的,比如武器的持久少于设定的数值,那么程序重新执行脚本。我们只要在<回城> 这个模块前面加一个判断是否需要回城的专门模块就可以了,用来判断持久是否足够,药品和杂物是否足够,如果需要就回城,不需要的话,那么就在新上线的地图继续战斗。如下:


<挂机脚本开始>

<是否需回城判断>
如果[待存物品][数量]>0 
那么跳转到<回城>
如果[自己][衣服][持久]<20
那么跳转到<回城>
如果[自己][头盔][持久]<3
那么跳转到<回城>
如果[自己][项链][持久]<3
那么跳转到<回城>
如果[自己][左手镯][持久]<3
那么跳转到<回城>
如果[自己][右手镯][持久]<3
那么跳转到<回城>
如果[自己][左戒指][持久]<3
那么跳转到<回城>
如果[自己][右戒指][持久]<3
那么跳转到<回城>
如果[自己][武器][持久]<10 <-- 如果你的武器持久小于10,那么会直接跳转到<回城>
那么跳转到<回城>
如果[蓝药][数量]<6
那么跳转到<回城>
如果[红药][数量]<6
那么跳转到<回城>
如果[随即传送卷][数量]<4
那么跳转到<回城>
躲避PKER开启
开启全局脚本
跳转到<战斗>  <--如果持久够,药品杂物够,会执行到这里,直接跳转到<战斗>不用回城了

 

<回城>
关闭全局脚本
停止战斗
躲避PKER关闭
如果[3,330,330][距离]>200
那么使用[回城卷]
停止战斗
等待[3000]毫秒
如果 $_当前地图=3
那么跳转到<总控>
如果 $_当前地图=0  <---有些地图回城会回到比奇,这里加一个小模块的判断就OK了
那么跳转到<去盟重>  
等待[3000]毫秒
跳转到<回城>

<总控>
.........

 


这样战斗部分基本上就比较稳定和顺利了。脚本的重点概念搞清楚后,是不是觉得很轻松?

剩下的就是一些最琐碎的事了,主要是找到每个不同作用的NPC的坐标,录制和他的对话等等,都是很简单的事了。

 


最后还有些小细节需要说明一下


1:被调用的模块里,可以无限的调用其它模块,这会使程序更加方便。比如:

....

调用<一号>

<一号>
如果[苹果][数量]<2
那么调用<买苹果>
返回

<买苹果>
如果[战神油][数量]<2
那么调用<买油>
返回

<买油>
走到NPC附近[u,x,y]
对话[xxx]
.....
....
返回

 

2:有些SF的NPC的名字或者选项里包含了 [ ] 号,这样会导致找不到NPC,这是程序本身的问题,将在后面的版本中改正。

 

 

程序中基本设置的技巧

一:加速设置

1:行走速度
默认的行走很慢,一般拉到 300 毫秒问题不大,但是过快容易引起 多次走路错误。
2:攻击速度
这里一般的服务器拉到 150 毫秒问题都不大,最多是打空气墙的次数多一些,不会引起其他问题。不过有的服务器也会由于使用烈火,刺杀和半月技能说你魔法加速。
3:魔法延时
拉到150吧
4:魔法速度
建议在 600 毫秒到700毫秒之间。如果还出问题,就再加大些,一般到1000就不会出问题了

二:穿人穿怪

如果你的服务器都允许,就都选上好了,但是很多服务器是只能穿怪不能穿人。这时候一定注意不要选择穿人,否则程序会想办法从人穿过而事实上过不去,90%会经常出现 走路错误 问题。

三:职业设置

1:战士如果不是去打装备的话,最好还是把烈火关了。因为这太费蓝了,你可以把刀刀刺杀选上,半月选上,效果差不多。
2:道士的召唤骷髅程序是默认的,这是引起一些SF中法师和战士不段召宝的原因,把对勾去掉就好了。护身符在最下面有个选项,扔掉数量的少的符,这个一定记得选上。如果你想长时间在前线战斗,那么选择那个不攻击好了,或者物理攻击也好。总之道士还是主要依靠宝宝。不推荐道士挂机用火符,因为护身符的消耗过快,会导致回城次数太多,效率低下。
3:法师挂机最好的地方就是石墓阵了。如果你的级别和装备差不多,那么就选上 尽量多引怪 和 在密集的地方引怪 。 你会发现法师烧猪简直是太爽了~~

还有一个选择是 引怪攻击 ,这个适合怪少,但是比较厉害的怪的地图,说白了就是适合打装备而不是升级。

自动躲避怪物的格数,建议法师选择在 6 或者 7 ,道士在 3-5 之间。

 

 

 

好了,现在你一定明白了,其实写脚本就和搭积木差不多。我们来最后总结一下:

脚本的最开始是用来搞全程监控的,就是全局脚本,打开和关闭的命令是 开启全局脚本 和 关闭全局脚本 ,这里的内容越少越好。


<全局脚本开始>


内容。。。

<全局脚本结束>

接下来就是 脚本执行 的这一大块,是包含在

<挂机脚本开始>

内容。。

<挂机脚本结束>

之间的。程序在执行的时候会把上面两个之间的内容读到可执行内容中去。

然后。。在挂机内容中,第一项目是要判断是否要回城的

<判断是否回城>

内容。。。
持久够不?不够就回城拉
药够不?不够就回城~
......
.....
都够的话,就跳转到 <战斗> 看下在什么地图,继续打呗~

然后是 <总控>

<总控>
这里是判断装备是不是需要修理,买药,买杂物的


<出发>

找到传送的NPC对话到达打怪的地点的

<战斗>

判断地图一
判断地图二
.........
.........


<战斗地图一>

这里不但要在当前的地图打,一定要走到下一个地图
跳转到 <战斗> 让它判断当前地图

<战斗地图二>

一样。。。
跳转到 <战斗> 让它判断当前地图


<购买药品>


.....

返回


<购买杂物>

.....
返回
等等重复执行的一些模块,都是返回型的。
看到这里,相信你已经对及时雨脱机脚本有了一个基本的了解。是不是觉得很简单?(^_^) 。祝你天天出极品,每小时都连升三级哦~~~~~ @_@
返回