TA的每日心情 | 怒 2019-12-27 13:32 |
---|
签到天数: 15 天 连续签到: 1 天 [LV.4]测试营长
|
脚本起着驱动整[来源:GameRes.com]个游戏进程的作用, 在单机RPG时代游戏的剧情发展和任务都是由客户端的脚本来驱动的。
目前现有的网游绝大部分也都拥有自己的脚本系统, 或者嵌入某种通用的脚本语言如python,lua, 或者自己设计一套游戏流程/逻辑描述规则也就是自定义的剧情描述语言, 和单机RPG所不同的是网
游的脚本通常运行在服务器端。
游戏中的脚本体系一般以事件为中心, 和宿主代码之间进行相互的交互。
1. 宿主代码会在某些事件发生或者满足一定条件下调用脚本, 这种调用是双方约定好的, 例如调用脚本的某一个函数
2. 脚本被调用后会执行剧情逻辑, 当然做具体的动作的时候还是要调用宿主代码暴露给脚本的接口。
脚本代码和宿主代码相比较, 最大的优势在于脚本更为简单易学, 有利于策划编写游戏逻辑, 而且不需要重新编译程序。
劣势是脚本通常是解释性的或者是类似于java有中间字节码的, 执行速度上远不及宿主二进制代码, 有的资料显示要慢10倍以上。
下面我们来看下剑侠情缘公测服务端1.2的脚本, 其用的是嵌入lua, 我们先找个它的简单来分析下是如何实现的:
巴陵县_长江码头船夫对话.lua
function main(sel)
if (GetLevel() >= 10) then --等级达到十级
Say("船夫:我有个外号叫做“浪里白条”,说起游水的功夫,全巴陵县我认了第二,就没人敢认第一!所以坐我的船你保管放心,你要去哪个码头呀?", 2, "坐船/WharfFun", "不
坐/OnCancel");
else
Say("船夫:对不起,没到十级的新手不能坐船出村。", 0)
end
end;
--------------------------------------------------------------- 华丽的分割线
function OnCancel()
Say("船夫:没银子可坐不了船!",0)
end;
在以上的脚本中描述了长江码头船夫和玩家之间的对话逻辑, 当玩家点击npc试图和其说话时, 服务器端就会调用该npc对应的脚本中的main函数来驱动游戏的剧情, 其中的GetLevel,Say等就是宿主
代码暴露给脚本的接口, 如果玩家在客户端选了"不坐", 客户端会发送"OnCancel"给服务器来促使其执行OnCancel函数。 |
|