※ 徵求光暈路亞研究網站 : 可在底下留言板或嘎姆小哈片刻的留言板推薦,我會將完整易懂的網站列在文末以及遊戲中。
>> 光暈路亞API: 來這邊可以流覽所有me的資料和可控制的動作
>> 如何利用遊戲中下載的『光暈路亞偵錯環境』
>> 光暈路亞程式範例
系統介紹:
在路亞修行的模式中,進入遊戲前會先自動開啟一個「路亞檔案管理員」,用來增加/更新/刪除你的路亞檔案。其中一個最重要的檔案叫 main.lua ,這是遊戲中會不斷去執行的路亞檔,你可以在這個檔案裏依不同的情況,控制角色攻擊、移動或說話。如果 main.lua 裏面內容太多,你也可以將各種情況分類後,將程式寫在不同的檔案裏,然後在 main.lua 中依情況決定去執行別的檔案,比如說,除了 main.lua ,你還可以增加 spirit.lua,如果你發現目前角色已變成靈體,就改去執行 spirit.lua ,這樣就可以把程式邏輯分類管理,才不會看到一個超大的檔案讓你頭痛。
第一次進入遊戲,系統會先送你一組程式檔案,你不用改動任何程式就可以進去遊玩。對照程式內容和遊戲體驗,就會發現路亞的強大與趣味。
路亞介紹:
路亞(Lua)是當今最受歡迎的程式語言之一,許多遊戲裏都有利用路亞設計關卡的機關、魔王的智慧、遊戲的視窗介面等,學會路亞對於未來想從事遊戲設計的同學們絕對有幫助。
路亞就如同其他的程式語言一樣,都是人類說話給電腦聽的方法,以下我們會從一行程式開始,慢慢熟悉路亞這個語言。
請開啟光暈的路亞修行,在路亞檔案管理員中點選 main.lua, 這樣就可以在遊戲中快速編輯程式。
首先把 main.lua 清空,一個字都不要留。(可以在路亞檔案管理員,刪除 main.lua 將其還原成光暈初始的檔案內容)
然後在第一行寫下
me.talk("你好!")
這就是一行程式了,你可以進入戰鬥玩看看,然後再繼續編輯 main.lua。
現在來解釋一下這行程式是在搞什麼鬼。
首先,在光暈的路亞裏,有兩個重要的物件:
一個是 me (玩家自己) - 用來控制自己的角色
一個是 game (遊戲) - 用來取得戰場上的狀況
me 後面的小數點,是用來取得 me 裏面的資料,也包括 me 可以做的動作。
talk 是me可以做的動作之一,中文叫「說話」
talk 後面的括號就是用來輸入要講的內容
如果要講的內容是一串字,就要加上引號(") (不然電腦會以為那一串字是一個物件)
接下來你可以試試這一行
me.talk(me.info.name)
me裏面有一個物件叫做 info,而 info 裏又有一個物件叫 name, 這個name物件剛好是一個字串,所以可以輸入給 me.talk() 使用。
me.talk() 這就相當於一個光暈同人陣裏的一個「動作」。接下來我們就要來看看相當於同人陣裏的「事件」和「檢查」是怎麼一回事。
路亞的事件和同人陣不一樣,是有好幾個種類的,主要有以下四種
我們先研究 if then else end, 在路亞修行中,90%都是在用它
if ... then ... else ... end 翻成中文就是: 如果(if) ... 就(then) ... 否則就(else) ...。(end)
最後的句點很重要,這樣電腦才看得懂這個事件是從 if 開始到 end 結束
我們在 main.lua 裏的第二行開始寫下面的這段話
if me.hp < me.hpMax then me.talk("我受傷了!") else me.talk("滿血狀態!") end
首先有注意到我們會控制程式碼的縮排嗎? me.talk的前面都有空格,這是因為這樣比較好看,一眼望去就能理解這段話的內容和結構。
以下逐行翻譯:
--如果(if) 我的血量比我的最大血量少 就(then) if me.hp < me.hpMax then --說話 me.talk("我受傷了!") --否則(else)就 else --說話 me.talk("滿血狀態!") --句點結束 end
這樣就相當於一個同人陣的事件,裏面有
me.hp < me.hpMax 這個檢查
以及
me.talk() 這些動作
>> 光暈路亞 API : 來這邊可以流覽所有 me 的資料和可控制的動作
接下來另一個很重要的事件是 for ... do ... end
這個翻成中文就是 對於每個(for) ... 都要做(do) ... 。(end)
這個可能比較難理解,我們用實際的例子來說明。
首先要介紹一下 game.events 這個可以在光暈路亞中取得的事件列表,這裏面是一串剛發生的事件,不過通常裏面沒有資料,在程式的術語裏叫空陣列(empty array)
但如果有發生特殊事件時,我們就可以根據這個事件列表來做出反應。
以下範例:
你可以將這段程式貼在main.lua中,看看他的效果如何。
接下來另一個很重要的事件是 for ... do ... end
這個翻成中文就是 對於每個(for) ... 都要做(do) ... 。(end)
這個可能比較難理解,我們用實際的例子來說明。
首先要介紹一下 game.events 這個可以在光暈路亞中取得的事件列表,這裏面是一串剛發生的事件,不過通常裏面沒有資料,在程式的術語裏叫空陣列(empty array)
但如果有發生特殊事件時,我們就可以根據這個事件列表來做出反應。
以下範例:
--在列表前加一個#符號,就會取得這個列表裏有多少筆資料 --所以下面這一行意思就是,如果突發事件列表裏有多於0筆資料時,我們就... if #game.events > 0 then --重點來了 --這句話翻成中文就是 --把game.events的每一筆資料都拆成 i(順序編號) 和 event (事件資料) --並對每筆資料進行以下檢查與動作 for i, event in ipairs(game.events) do --如果有一個事件是我被攻擊了的話就 if event.type == "beingAttacked" then --大叫「痛啊」 me.talk("痛啊~") --然後轉頭到攻擊過來的角度 me.turnTo(event.angle) --按一下滑鼠反擊 me.triggerMouse() --如果有一個事件是我的武器被打落了 elseif event.type == "weaponKnockedOff" then --按一下esc切換回預設武器 me.triggerKeyboard("esc") end end end
你可以將這段程式貼在main.lua中,看看他的效果如何。
更多路亞資源
- Lua 官方教學網站 : http://www.lua.org/pil/contents.html
- http://www.tutorialspoint.com/execute_lua_online.php - 線上編輯並測試路亞的編輯器
按一下"Execute"按鈕就可以看到main.lua的執行狀況 - 不過光暈路亞有內附很多光暈專用的功能,如果要測試光暈上的main.lua請參考
>> 如何利用遊戲中下載的『光暈路亞偵錯環境』 - 光暈路亞程式範例
- 帝國皇朝 : 光暈同人陣及路亞教學
- 同人技術研討中心 : 光暈同人陣及路亞教學
==.....
回覆刪除好像有點屌?
#頭香
二香
回覆刪除我懂這個惹!!
原來
回覆刪除作者已經移除這則留言。
回覆刪除一個直接寫程式語一個是利用已經做好的插件做任務根本不一樣,如果沒有同人陣要做任務就只能自己打程式語設計插件
刪除可能對有些人而言沒差吧...
刪除能這樣寫同人的話限制會少很多
回覆刪除檢查的延遲也會改善
連AI都可以自己寫
大推!
小一留
開放同人也能打程式吧
回覆刪除好!希望能把狙擊槍英文附上!接下來我就OK
回覆刪除如果我懂路亞而又有機會進入嘎呣,我一定會把以前林家文寫過的蛙人套裝編出來。
回覆刪除有些困難...
回覆刪除能否多出點新任務和新模式阿.....
回覆刪除請告訴我 找最近的槍 怎嚜翻
回覆刪除如果消耗2條生命
回覆刪除要怎麼翻???
可能就要扣100%再扣100%吧..
刪除作者我的嘎姆登不進去耶 0~0
回覆刪除從國小玩到現在高中資訊科感謝光暈給我一個很好的管道練習寫程式
回覆刪除這不就是要製造出最強的電腦馬ouo
回覆刪除我不小心把開頭的字刪掉嘞!!請問前面的字是什ㄇ??
回覆刪除設定技能的等級是在什麼情況用?
回覆刪除me.fineClosestItem()找最近的道具
回覆刪除me.fineClosestItem("彈匣")找最近的彈匣
me.findClosestItem("大刀","狙擊槍")找最近的大刀或狙擊槍
請問這邊是錯誤嗎? 上面2個是fine 第3個是find 還是要找的物品不同的關係?
尋找的英文是find,另外我不認為程式會懂中文所以可能要找正式的武器代碼甚麼的
刪除me.findClosestItem(XXX)
其實find是「找到」的意思喔。
刪除請問 路亞檔案管理員 要怎還原成光暈原始檔
回覆刪除我的AI不會打人了 怎麼讓我打人?
回覆刪除怎麼還原阿~~~
作者已經移除這則留言。
回覆刪除