VCMP极简开服教学:脚本开发
- 作者:VEGETAZ
0.前置依赖
- 引擎准备完毕
- 基本的插件、脚本环境配置完毕
- 初步理解VCMP的事件驱动环境
- 求知的好奇心和冷静的思考脑
1.基础认知
- 程序的本质就是让机器干的活。活要一步步干,干完整个活就走完了整个程序流程。
- 流程里每一步和它的上一步、下一步关系是清晰的。可以是按照顺序关联,也可以是用某种关系关联,下文会体现出来。
- 数据从外面流入为输入,流出去外面为输出。比如键盘鼠标输入数据进计算机,计算机输出数据到屏幕上。
- 指令是提前设定好给外部使用的东西,对应着内部的某些功能。VCMP中默认把玩家用对话框输入/开头的文本当作指令。
2.编写脚本:指令事件的实现
- 在服务端的脚本开发中,有个事件玩家输入指令时触发(指令是以/开头的文本内容),onPlayerComman事件,会将当时环境中三个重要的信息作为参数传递进来,分别是玩家、指令名、附加文本。
- 在入口脚本中编写以下代码(目前先忽略次要元素,重点解释核心元素):
function onPlayerCommand(player, cmd, text) {
}
- 这里函数onPlayerCommand的括号内注明了三个参数,分别代表玩家实例、指令名、附加文本。
- 在该函数内即可使用这三个参数进行功能的实现。
- 玩家0在输入框输入/abc 666后按回车发送,服务器则会捕获到指令事件的发生,然后执行该函数。在该函数内player代表玩家0,cmd的值是abc,text的值是666。
3.编写脚本:基本指令示例,获取玩家当前坐标
- 设计一个查询当前坐标指令,玩家输入/s触发,那么该指令名就是s,通过判断传进来的cmd是不是s来确定接下来的步骤是不是“查询当前坐标指令”。
- 在onPlayerCommand内编写代码,整个onPlayerCommand如下:
function onPlayerCommand(player, cmd, text) {
if (cmd == "s") {
return MessagePlayer(player.Pos+"", player);
}
}
- 这里用到了if条件判断语句,用来判断cmd是否等于s,是的话就执行大括号内的return MessagePlayer。用中文伪码解释if结构:
如果(条件){
执行内容
}
- 默认的代码流程是顺序进行,如下伪码和流程图:
步骤1;
步骤2;
步骤3;
- 而用条件判断语句可以控制流程的走向,如下伪码和流程图:
步骤1;
if(条件){
步骤2;
}
步骤3;
- 查询MessagePlayer功能的用法(通过WiKi)可知这里最少需要两个数据,分别是:
- 消息文本内容:message
- 玩家:player
- MessagePlayer的作用如WiKi中所说,是发送一段简单的文本给指定的玩家。这也是VCMP已经实现的功能,可在脚本中使用。
- 利用传进来的player参数,该参数实际上是一条地址,指向玩家实例,有Pos属性(玩家角色的世界三维坐标),将其用+运算符拼接""空文本即可把Pos转为字符串(文本),就能作为MessagePlayer需要的message参数使用。
- 保存后重新启动引擎,进入游戏出生后,输入/s,即可看到服务器响应了一条消息内容正是玩家角色的坐标。
- 稍微理解一下当前服务器脚本原理
- 引擎启动,执行脚本内容。
- 执行脚本内容时,发现预设的onPlayerCommand事件的实现定义,于是引擎将其地址保存,后续当有玩家输入指令时将会通过地址触发该实现。
- 当玩家输入指令后,执行该函数,首先玩家输入的指令cmd是否值为s,是的话直接return返回一个功能MessagePlayer,该功能对该玩家发送了它的角色坐标消息。这里的return是脚本环境的一个关键字,用来表示函数运行到此处就结束、返回了。













