查看: 2769|回复: 2

冒险岛脚本编写基础教程六

  • TA的每日心情
    开心
    2023-4-29 03:45
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    初级会员

    枫币
    397
    威望
    0
    贡献
    15
    在线时间
    35 小时
    注册时间
    2019-3-9
    QQ
    发表于 2021-4-29 18:34:13 | 显示全部楼层 |阅读模式
    第二级: 中坚份子
    第一课: Learning to code an NPC
    编写 NPC 时最好对自己在干嘛有个概念,简单的方法是打开记事本,把你想
    要 NPC 做的事情写下来。例如:
    道具交换
    对话框 1 - 显示几个选项
    对话框 2 - 对话框 1 选择后显示几个选项
    对话框 1 选项 - 矿石换黄金枫叶标志、矿石换枫叶
    对话框 2 选项 - 如果选择黄金枫叶标志,10 个矿石交换 1 个黄金枫叶标志,20 个矿
    石交换 3 个黄金枫叶标志
    如果选择枫叶,5 个矿石交换 1 个枫叶,10 个矿石交换 3 个枫叶

    以上只是个范例,但这样子做纪录,你就能事先想好最佳的布局,甚至能提醒
    你当初的想法,假如你没法一次写好脚本的话。
    现在,在你开始之前,你要先思考你需要什么类型的 NPC。如果你需要参考,
    请回到第一级第二课。在这个范例中,我会使用需要 status 的 NPC,请阅读
    批注(第一级第三课)来了解我在做什么。

    var status;
    function start() { // NPC 开始
    status = -1; // 设定 status 为 -1
    action(1, 0, 0); // 设定 mode 为 1, type 为 0, selection 为 0
    } // 关闭 start 函数
    function action(mode, type, selection) { // calls what you set above in
    function start, almost all actions are done here
    if (mode == 1) { // mode 被设为 1,因为函数 start,如上
    status++; // 让 NPC 进到下一个 status,此时 status 变为 0
    } else { // 如果 mode 不是 1
    status--; // 不让 NPC 进到下一个 status
    }

    if (status == 0) { // 如果 mode 是 1,status 会从 -1 变为 0。如果
    status 为 0,以下会发生
    cm.sendSimple("哈啰,我来示范如何使用 #belse#k 和 #bif#k,准备好了
    吗?\r\n #L0# 是的,船长。 #l \r\n #L1# 不,我还没好。 #l"); // 显示一个有两
    个选项的对话窗
    } else if (status == 1) { // 如果作出了选择,NPC 会进到下一个 status
    if (selection == 0) { // 选项 0 是 #L0#, "是的,船长。"
    if (cm.haveItem(4001129, 10)) { // 检查道具
    cm.sendOk("如果 (if) 你选择选项 0,简单来说就是第一个选项,我
    就会说这句话。"); // 如果 (if) 你有道具,会显示这个对话窗
    cm.dispose();
    } else {
    cm.sendOk("抱歉,你没有该道具。"); // 否则 (else),你没有该
    道具
    cm.dispose();
    }
    } else if (selection == 1) { // "不,我还没好。"
    cm.sendOk("否则如果(else if)你选择选项 1,我会说这句话。");
    cm.dispose();
    }
    }
    }
    这里是一些能帮你弄懂 NPC 的东西:
    sendNext(); & sendOk();
    Type = 0
    如果点了停止 - mode = -1
    如果点了下一个/确认 - mode = 1

    sendNextPrev();
    Type = 0
    如果点了停止 - mode = -1
    如果点了下一个 - mode = 1
    如果点了上一个 - mode = 0

    sendYesNo();
    Type = 1
    如果点了停止 - mode = -1
    如果点了是 - mode = 1
    如果点了否 - mode = 0

    sendAcceptDecline();
    Type = 12
    如果点了停止 - mode = -1
    如果点了接受 - mode = 1
    如果点了拒绝 - mode = 0

    sendGetText();
    没事儿

    sendGetNumber();
    Type = 3
    如果点了停止 - mode = 0
    如果点了确认 - mode = 1

    sendSimple();
    Type = 4
    如果点了停止 - mode = 0
    如果点了选择 - mode = 1
    Credits: BENG
    括号会是决定 NPC 能不能运作的关键。让我们看看上面 NPC 脚本的一个小片段:
    if (cm.haveItem(4001129, 10)) { // 检查道具
    cm.sendOk("如果 (if) 你选择选项 0,简单来说就是第一个选项,我就会
    说这句话。"); // 如果 (if) 你有道具,会显示这个对话窗
    cm.dispose();
    }
    看看第一行...
    if (cm.haveItem(4001129, 10)) {
    在第一行的尾端有一个左括号,这代表当条件为真时,其后所接的事情将会发 生。以该行来说,如果你有 10 个 4001129,下一行就会执行。 看看此片段的最后一行,注意到右括号了吗?
    }
    右括号结束条件,所以任何介于左括号与右括号之间的事情都将会在指定的条 件成立后发生。 右括号又经常伴随着 else,也就是当你没有足够的道具时,else 之后的片段 便会执行。

  • TA的每日心情
    开心
    2023-4-4 22:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    初级会员

    枫币
    224
    威望
    0
    贡献
    5
    在线时间
    37 小时
    注册时间
    2016-8-20
    QQ
    发表于 2021-4-30 19:13:59 | 显示全部楼层
    谢谢分享
    回复

    使用道具 举报

    该用户从未签到

    新人上路

    枫币
    38
    威望
    0
    贡献
    0
    在线时间
    4 小时
    注册时间
    2020-3-14
    发表于 2021-5-12 14:10:13 | 显示全部楼层
    真不戳真不戳
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    枫叶物语即使倒闭也绝对不会变质
    Copyright © 2001-2013 Discuz Team. Powered by Discuz! X3.5 |网站地图 | 本站已运行: