脚本对游戏有什么用?可以让游戏程序,从各种繁琐重复的游戏逻辑里面解放出来。简单举个例子:一个副本关卡,怪物应该怎么走路,说什么话,放什么技能。这些只要提供了相应的接口之后,脚本策划就可以根据自己的想法任意的发挥。这中间少了沟通成本,也方便游戏策划创意的发挥。另外因为脚本是不需要编译成二进制文件就可以执行的,所以可以用来做热更新(虽然我基本不这样用)
脚本在游戏怎么用?游戏的后台多数使用c++开发语言,就拿我之前做过的一款端游为例子使用了是 luabind第三方库,这个库使用起来还算比较方便,网上有下载,但好像不怎么更新了。但该库我们在线上应用过一款几十w在线的端游,稳定性没什么问题。具体的原理就是所有用cpp定义的类接口,都可以注册到lua脚本环境中,让脚本调用,同样脚本定义的函数也可以被cpp调用。下面是一个怪物AI脚本,通过 LUABIND_REGISTER_CLASS_FUNC可以向脚本中注册对应的cpp类。
Monster.Cpp文件:怪物AI
class CMonsterAI : public CGameAI
{
public:
uint32 GetHP();
uint32 GetMP();
void AddSkill(uint32 unSkillID, uint16 uLevel);
void UseSkill(uint32 unSkillID, uint16 uLevel);
};
向lua注册cpp类:
#define LUABIND_REGISTER_CMonsterAI(luaScript) \
LUABIND_REGISTER_CLASS_BEGIN(luaScript CMonsterAI) \
LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, GetHP) \
LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, GetMP) \
LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, AddSkill) \
LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, UseSkill) \
LUABIND_REGISTER_CLASS_END()
monster.Lua文件
function Event_Thinking(nAI)
local AI = GetMonsterAI(nAI)
a = AI:GetArray(1)
if a == 0 then
AI:SetTimer(0,30000,65535)
AI:AddSkill(8645,1)
AI:UseSkill(8645,1)
AI:SetArray(1,1)
end
end