11op三国群英传SF
标题:
脚本编写入门
[打印本页]
作者:
admin
时间:
2018-4-20 23:06
标题:
脚本编写入门
贝贝脚本是模块化的脚本, 用来辅助贝贝完成一些高自由度的功能.
符号:
符号的使用规则: 在脚本中用到的符号全部都是半角(选中可看到长度是汉字的一半), 全角字符和中文字符将不能识别.
标记:
标记的作用:在一段特定脚本前的固定位置做标记,通常是为了在需要时跳转到此位置并运行后面的脚本。
标记的使用规则:标记的固定格式为:<标记名>,即是用两个尖括号(大、小于号)作首尾的一串字符。标记单独为一行,前后都不应该夹杂其它字符。一个脚本文件中可存在多个同名标记,但使用方式有特别要求。示例:
<回程>
使用物品[回城卷轴]
跳转到<回程>
以上就形成了一个一直使用回城卷的循环
判断语句
判断语句的作用:判断语句根据条件是否满足而判断真假,并选择对应操作。判断语句是智能脚本中不可或缺的重要元素。
条件符号有: == 等于, != 不等于, >= 大于等于, > 大于, < 小于, <= 小于等于
判断语句的使用规则:判断语句一般用“如果”作前缀,并根据格式填好条件。判断语句根据条件满足与否而判定“真”或“假”,当条件满足时判定为“真”,否则判定为“假”,并分别执行对应的语句。
当执行语句超过一行时,将要执行的语句用一对{} 包括起来。示例:
如果不需要否则的情况, 示例如下:
如果 (当前地图名[] != "寿春")
系统显示[不在寿春]
如果只执行判断语句后面一句, 如下示例:
如果 (当前地图名[] != "寿春")
系统显示[不在寿春]
否则
系统显示[在寿春]
如果要执行判断语句后一组语句, 如下示例:
如果 (当前地图名[] != "寿春")
{
系统显示[不在寿春]
等待毫秒[1000]
}
否则
{
系统显示[在寿春]
走到[30, 10]
}
如果跟后面的条件之间要用空格隔开, 也可以不要否则, 就只写否则前的语句就可以
多个条件的使用连接 支持 并且 或 (并且用 && 表示 或用 || 表示)
例如:
// 这个表示当前地图名既不是寿春也不是洛阳时条件满足
如果 [当前地图名[] != "寿春"] && [当前地图名[] != "洛阳"]
{
...要执行的语句
}
// 这个表示当前地图名 是寿春或是洛阳 时条件满足
如果 [当前地图名[] == "寿春"] || [当前地图名[] == "洛阳"]
{
...要执行的语句
}
循环语句
while [条件]
{
...要执行的语句
}
例如: //示例中是如果 鸿燕截镫铁宝箱 宝箱数量大于0 并且包袱有空位时, 一直开箱子
while [[物品数量["鸿燕截镫铁宝箱"] > 0] && [包袱空格数[] > 0]]
{
使用物品["鸿燕截镫铁宝箱"]
等待毫秒[1000]
}
上面的while 循环是一个条件为是否继续循环的判断, 如果我们需要循环固定次数呢, 这时我们
就要用到 for 循环语句, 他的格式如下示例
int a = 0;
for (a=0; a<5; a++)
{
...// 要执行的语句写在这里
}
上面的这个示例中, 中间的语句将会被执行5次, 5次后结束循环
模块化脚本
什么是模块化脚本:使用具有模块形式的脚本段将整个脚本功能相互剥离,更利于使用及维护,也使得可读性变高。每个模块都具备它自身独有的功能,分工细化,更加专一。
模块化脚本的作用:在脚本中可通过简单的语句调用模块,使原本冗长的脚本变得简洁。实际上,我们在脚本中总是遇到重复的内容,其实可以把重复内容替换为调用模块来代替,从而使得整个脚本简化。
示例如下:
// 邺城包子换饭团的脚本
// 这是注释行
<包子换饭团>
系统显示[换饭团]
<买包子> //这里做为一个标记, 用来下面判断来实现循环
如果 (物品数量("饭团") < 500)
{
如果 (物品数量("包子") < 1000)
{
对自己用技能[千里传送] //不会技能的请换成 使用物品[回城卷轴]
等待毫秒[1200]
进入商店[客栈]
等待毫秒[1200]
买物品["包子", 1000]
等待毫秒[1200]
}
否则
{
离开商店[]
等待毫秒[1200]
走到[373, 15]
调用<换饭团> //调用换饭团的子过程
}
等待毫秒[1200]
}
如果 (物品数量("饭团") < 500)
跳转到<买包子>
脚本结束 // 从上面的 <包子换饭团> 到这里为一个脚本段, 可以称为一个过程
<换饭团>
打开NPC[什货郎]
等待毫秒[1200]
执行动作[3861,0]
等待毫秒[1200]
执行动作[3864,上次动作]
等待毫秒[1200]
执行动作[3865,上次动作]
等待毫秒[1200]
<换饭团动作>
如果 (物品数量("包子") >= 250)
{
执行动作[3864,上次动作]
等待毫秒[1200]
执行动作[3865,上次动作]
等待毫秒[1200]
}
如果 (物品数量("包子") >= 250)
跳转到<换饭团动作>
执行动作[-1,上次动作]
等待毫秒[1200]
结束对话[]
等待毫秒[1200]
返回 // 从上面的 <换饭团> 到这里为一个脚本段. 这个为子过程
脚本的组成:
脚本必须至少有一个过程, 并且只执行第一个过程(第一个出现的过程为主过程), 后面定义的过程为子过程仅用于主过程调用
一个过程以一个标记开始, 以 脚本结束 语句做为结束
如下示例:
<用物品> //标记名可自己任意定义
.... // 这中间写你自己的脚本语句
脚本结束
如果是子过程, 像上面示例的, 也可以用 返回 语句结束子过程
变量的定义与使用:
什么是变量:
变量是相对于常量的, 像我们平常用到的数字, 字符串 如: 1 2 3 "字符串", 这样的我们称之为常量. 因为在脚本编写过程中, 我们不能到处写固定的数字字符串, 那样脚本很不灵活不是. 因此我们需要变量. 变量就好比一个盒子一样, 他里面是用来放数字(对应整数型浮点型变量) 或 字符串(对应字符串型变量)的.
变量的值在脚本运行中是可以改变的. 并不是一个固定值.
比如: 你声明一个整数变量
int a = 1; 这里 a 就叫变量, 而 a = 1 就是把1放到了a这个变量里. 在他后面的脚本中写a就代表的 是1, 我们来看一个示例.
<开始>
int a = 1; //定义了一个叫a的变量, 并且把1放到他里面, 我们把这个叫做给变量赋值
//就是给变量a赋值为1
输出[a] //这里就用到了变量a, 结果就是在屏幕上输出了一个数字1
a = 3; //现在我们给变量a 重新赋值为3, 那现在a就相当于数字3了
输出[a] //这时候再输出变量a, 我们在屏幕上看到的就是数字3了
脚本结束
变量分为 系统级变量 和 全局变量 还有 局部变量
贝贝脚本提供10个系统级变量, 类型为整数型 名字 分别是 G0 G1 G2 G4 G5 G6 G7 G8 G9
他们的值在各个脚本间是相同的, 也就是说在
例如在脚本A中修改了G0 把他设置为 4, 那么脚本B中取G0的值就会返回4
全局变量:
支持三种类型: 分别是 int float string (整数型, 浮点型, 字符串型)
在脚本最开始定义的变量为全局变量, 可以在整个脚本中使用, 如下示例
int abc = 1; // abc就是一个全局变量
<脚本1>
abc = 4;
输出[abc]
脚本结束
局部变量:
支持三种类型: 分别是 int float string (整数型, 浮点型, 字符串型)
定义变量 以整数为例:
定义: int a; //这一句定义了一个名字叫a的变量
给a 赋值 a = 1;
a增加1 a++; 或 a = a+1;
字符串型用一对""号包含起来
例如:
string stra = "我是一个字符串";
整数型和浮点型支持加减乘除运算, 字符串型只支持加运算
+ (加) -(减) *(乘) /(除)
注释的使用:
注释在脚本中没有实际作用, 只是作为说明, 以便别人或自己以后看时理解脚本功用.
注释支持 // 单行注释 和 /* ... */ 块注释, 使用方法示例如下
int a = 0; //我是一个单行注释
/* 我是块注释
我也是注释行哦
*/
float b = 0.5;
欢迎光临 11op三国群英传SF (http://11op.com/)
Powered by Discuz! X3.1