11op三国群英传

 找回密码
 立即注册
搜索
热搜: 三国群英传
查看: 5101|回复: 0

脚本编写入门

[复制链接]

1576

主题

1921

帖子

6854

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6854
发表于 2018-4-20 23:06:53 | 显示全部楼层 |阅读模式
贝贝脚本是模块化的脚本, 用来辅助贝贝完成一些高自由度的功能.
符号:
      符号的使用规则: 在脚本中用到的符号全部都是半角(选中可看到长度是汉字的一半), 全角字符和中文字符将不能识别.
标记:
      标记的作用:在一段特定脚本前的固定位置做标记,通常是为了在需要时跳转到此位置并运行后面的脚本。
    标记的使用规则:标记的固定格式为:<标记名>,即是用两个尖括号(大、小于号)作首尾的一串字符。标记单独为一行,前后都不应该夹杂其它字符。一个脚本文件中可存在多个同名标记,但使用方式有特别要求。示例:
      <回程>
      使用物品[回城卷轴]
      跳转到<回程>
      
      以上就形成了一个一直使用回城卷的循环
      
判断语句
  判断语句的作用:判断语句根据条件是否满足而判断真假,并选择对应操作。判断语句是智能脚本中不可或缺的重要元素。
条件符号有: == 等于,  != 不等于, >= 大于等于, > 大于, < 小于, <= 小于等于
  判断语句的使用规则:判断语句一般用“如果”作前缀,并根据格式填好条件。判断语句根据条件满足与否而判定“真”或“假”,当条件满足时判定为“真”,否则判定为“假”,并分别执行对应的语句。
    当执行语句超过一行时,将要执行的语句用一对{} 包括起来。示例:
   
如果不需要否则的情况, 示例如下:
    如果 (当前地图名[] != "寿春")
  系统显示[不在寿春]
    如果只执行判断语句后面一句, 如下示例:
     
    如果 (当前地图名[] != "寿春")
  系统显示[不在寿春]
否则
  系统显示[在寿春]

    如果要执行判断语句后一组语句, 如下示例:
   
    如果 (当前地图名[] != "寿春")
    {
  系统显示[不在寿春]
  等待毫秒[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;
   
   
  
  

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|11op三国群英传  

GMT+8, 2024-4-18 13:31 , Processed in 0.176250 second(s), 26 queries .

Powered by 11op游戏论坛

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表