腳本對遊戲有什麼用?可以讓遊戲程序,從各種繁瑣重複的遊戲邏輯裏面解放出來。簡單舉個例子:一個副本關卡,怪物應該怎麼走路,說什麼話,放什麼技能。這些只要提供了相應的接口之後,腳本策劃就可以根據自己的想法任意的發揮。這中間少了溝通成本,也方便遊戲策劃創意的發揮。另外因爲腳本是不需要編譯成二進制文件就可以執行的,所以可以用來做熱更新(雖然我基本不這樣用)
腳本在遊戲怎麼用?遊戲的後臺多數使用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