在传奇等游戏中,NPC(非玩家角色)的对话内容和跳转都需要通过脚本来设定。下面以一个简单的传送NPC脚本为例,介绍如何优化NPC脚本,使其更加清晰和易读。
原始NPC脚本
[@main]
你好 需要传送到盟重吗?\\
<传送/@chuansong>\\
<退出@exit>\\\\
[@chuansong]
#IF “checkgamegold 100”
#act “mapmove 3 330 330”
#elseact
#elsesay 你的包里没有100元宝\\
我不能帮你传送\\
<返回/@main> \\\\
Copy
1. 使用 #else 代替 #elseact
#elseact 是一种特定的语法,用于在 #if 语句中表示执行其他操作。但是,更常见的做法是使用 #else 语句,它可以更好地与其他语言保持一致。
修改后的 NPC 脚本:
[@main]
你好 需要传送到盟重吗?\\
<传送/@chuansong>\\
<退出@exit>\\\\
[@chuansong]
#IF “checkgamegold 100”
#act “mapmove 3 330 330”
#else
#elsesay 你的包里没有100元宝\\
我不能帮你传送\\
<返回/@main> \\\\
Copy
2. 使用 #endif 代替 #act 和 #elseact
#act 和 #elseact 语句可以使用 #endif 语句来替代,这样可以更好地表示 #if 语句的结尾。
优化后的 NPC 脚本:
[@main]
你好 需要传送到盟重吗?\\
<传送/@chuansong>\\
<退出@exit>\\\\
[@chuansong]
#IF “checkgamegold 100”
#act “mapmove 3 330 330”
#else
#elsesay 你的包里没有100元宝\\
我不能帮你传送\\
<返回/@main>
#endif
Copy
3. 使用 #else 代替 #elsesay
#elsesay 语句可以使用 #else 语句来替代,这样可以更好地与其他语言保持一致。
优化后的 NPC 脚本:
[@main]
你好 需要传送到盟重吗?\\
<传送/@chuansong>\\
<退出@exit>\\\\
[@chuansong]
#IF “checkgamegold 100”
#act “mapmove 3 330 330”
#else
#else
你的包里没有100元宝\\
我不能帮你传送\\
<返回/@main>
#endif
Copy
4. 使用 #else 和 #endif 代替 #act 和 #elseact
可以使用 #else 和 #endif 语句来替代 #act 和 #elseact 语句,这样可以更好地表示 #if 语句的结尾。
优化后的 NPC 脚本:
[@main]
你好 需要传送到盟重吗?\\
<传送/@chuansong>\\
<退出@exit>\\\\
[@chuansong]
#IF “checkgamegold 100”
#act “mapmove 3 330 330”
#else
#else
#say
你的包里没有100元宝\\
我不能帮你传送\\
<返回/@main>
#endif
#endif
NPC脚本示例:
plaintext
[@main]
你好,需要传送到盟重吗?
<传送/@chuansong>
<退出/@exit>
[@chuansong]
#IF
checkgamegold 100
#act
mapmove 3 330 330
#elseact
#elsesay
你的包里没有100元宝,我不能帮你传送。
<返回/@main>
脚本组成部分解释:
[@main]:这是脚本的开始部分,在对话开始时触发。
<传送/@chuansong>:这是一个选项,显示为“传送”,点击后跳转到标记为@chuansong的脚本部分。
<退出/@exit>:这是另一个选项,显示为“退出”,用于结束对话。
[@chuansong]:这是<传送>选项对应的脚本部分。
#IF:条件判断语句,检查是否满足条件。
checkgamegold 100:检查背包中是否有100元宝。
#act:如果条件满足,则执行下面的操作。
mapmove 3 330 330:将玩家传送到盟重地图,坐标为(330, 330)。
#elseact:如果条件不满足,则执行下面的操作。
#elsesay:在否认条件时向玩家显示消息。
#返回/@main:提供一个选项,允许玩家返回到对话的起始部分。
脚本:
首先开头
[@main]
你好 需要传送到盟重吗?\ 所说的话,后面要加上 \ 这是换行的意思
<传送/@chuansong>\ 选项外要加上<> 这样表示这是一个选项 可以跳转到@开头的脚本
这样会在对话界面显示: 传送 而/后面的内容被隐藏了
<退出@exit>\\ 两个\是结束。
[@chuansong] 这是上面传送的对应脚本
#IF “#if”在脚本中表示检测 就是如果的意思 比方说 如果 背包里有100元宝
checkgamegold 100 检查包里是否有100元宝
#act “#act” 那么的意思 那么传送到 盟重
mapmove 3 330 330 既是传送到盟重地图 3代表盟重 坐标 330 330
#elseact “elseact”表示 如果否认了IF的条件 就是 如果包里没有100元宝的话
#elsesay 意思是那么对玩家说:
你的包里没有100元宝\
我不能帮你传送\
<返回/@main> \\ 退到菜单
传奇基本所有的NPC都是这个格式的脚本 ,具体每个引擎的脚本命令和变量检测不同,查看你所用的M2的使用指南里有脚本命令和变量检测