關(guān)于LUA在網(wǎng)游任務(wù)中應(yīng)用教程
關(guān)于LUA在網(wǎng)游任務(wù)中的應(yīng)用是本文要介紹的內(nèi)容,主要是來了解LUA中網(wǎng)游的問題。LUA生來是與游戲相關(guān)的;自從魔獸將它發(fā)揚光大之后,越來越多的游戲公司使用它。
游戲邏輯中與其密切相關(guān)的是訪問NPC部分,彈出一個交易框、打造框、任務(wù)對話框等等,這些基本都是由LUA實現(xiàn);本文我想就自己最近的一點兒體會,寫下關(guān)于游戲任務(wù)的lua實現(xiàn);
去年12月份,新游戲項目成立,分配給我的***個任務(wù)就是編游戲任務(wù);當(dāng)時我還不知lua為何物,先花了一天的時間基本熟悉了lua語法(主要是關(guān)于table結(jié)構(gòu)),C和lua的相互調(diào)用接口;然后摸索著上路了。
我個人比較喜歡自頂向下的學(xué)習(xí)方法,所以在這里先給出一個訪問任務(wù)NPC的大概輪廓:
1、玩家訪問NPC,客戶端將附帶NPCid的點擊消息發(fā)給服務(wù)器;
2、服務(wù)器查找關(guān)于此NPC的任務(wù)菜單(其實是個lua table),判斷玩家是否滿足條件(等級是否合適、前置任務(wù)是否完成、是否已經(jīng)做過。。etc)
3、如果滿足,服務(wù)器填充好表單信息,并給每個任務(wù)按鈕(因為一個NPC處可能不止一個任務(wù))賦予一個從0開始的id索引,為每個按鈕注冊好回調(diào)函數(shù),由id來索引;表單信息發(fā)給客戶端,客戶端執(zhí)行,從而顯示合適的對話界面;
4、玩家點擊某個任務(wù)按鈕,客戶端將其對應(yīng)的id信息發(fā)給服務(wù)器,服務(wù)器執(zhí)行相應(yīng)回調(diào)。(比如接任務(wù)的時候這個回調(diào)大概就是acceptTask(taskid)之類的,交任務(wù)的時候這個回調(diào)大概就是commitTask(taskid))
真實情況還有很多種,由于接任務(wù)是最簡單的,所以選來做說明。
編程序首先要確定好數(shù)據(jù)結(jié)構(gòu)。我最終定義的struct task大概包含以下成員:任務(wù)唯一id,類型,前置任務(wù),任務(wù)獎勵道具、經(jīng)驗、金錢,任務(wù)起始NPC(從這里接),任務(wù)終止NPC(到這里交),任務(wù)描述,未完成描述,完成描述,任務(wù)元素;還有個別字段,不是這里的重點就不提了。確定這個結(jié)構(gòu)前后斷斷續(xù)續(xù)就用了兩個星期,因為我。。。從來沒打過網(wǎng)游,最開始的幾天下了幾個網(wǎng)游客戶端,注冊個號進去玩,簡單的了解任務(wù)是怎么回事。
關(guān)于任務(wù)元素我要詳細解釋一下:
我最初的理解是,任務(wù)是要做讓你做一定的事情,然后你才能夠完成這個任務(wù),得到獎勵。于是將它抽象成任務(wù)元素。名字可能有點怪,感覺有點順口當(dāng)時我就這么定了。
任務(wù)元素有類型之分。最常見的兩種類型是 怪物 和 物品。很多任務(wù)都是要求殺掉多少個怪、收集多少物品來完成。這也是最簡單最基本的。
后來由于策劃需求的不斷提出,我又增加了一些類型,比如某任務(wù)要求你尋訪一些NPC,那么類型為 VISIT,即訪問。
有些任務(wù)讓你答題,又有了類型QUESTION;等等。
在游戲啟動時,任務(wù)數(shù)據(jù)導(dǎo)入lua,為每一個跟任務(wù)相關(guān)的NPC構(gòu)造lua表,表名后綴就是相應(yīng)的npc ID,便于查找。
接任務(wù)的流程開頭已經(jīng)簡單說過了,這里再將完成任務(wù)簡單說一下。
每當(dāng)玩家接了一個新任務(wù),那么這個任務(wù)的任務(wù)元素會被添加到玩家結(jié)構(gòu)(class Player)的任務(wù)管理器(Task Manager)中。任務(wù)管理器用一個map來實現(xiàn)管理多個任務(wù)的功能。
當(dāng)玩家訪問這個任務(wù)的終止NPC時,會判斷任務(wù)元素是否完成了,如果完成會構(gòu)造提交任務(wù)的對話框,玩家點擊完成就可獲得該任務(wù)獎勵。
如果沒有完成,終止NPC就會說一句相應(yīng)任務(wù)的“未完成描述”。比如可能是一句“連那些毛猴都收拾不了,你真讓我失望”。
上面描述的是最簡單、最常見的任務(wù)類型。實際的游戲任務(wù)花樣百出,想用很統(tǒng)一的框架實現(xiàn)是有些難度。但是由于LUA的靈活性(個人認(rèn)為實質(zhì)上是table結(jié)構(gòu)靈活,簡直***),策劃的一些無法想象的需求(他們拿魔獸的任務(wù)來向我描述需求,可是我根本沒碰過魔獸。所以說有些游戲經(jīng)驗還是挺好的啊),很多情況下我都用lua table配表,再寫幾個功能函數(shù),大致搞定。不過感覺自己的某些想法可能有些“任性”,目前來說是夠用了,未來就難說了,畢竟我無法想象還有什么形式的任務(wù)。
小結(jié):關(guān)于LUA在網(wǎng)游任務(wù)中應(yīng)用教程的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!


















