轉自巴哈阿洛斯版作者 jack9685
準備工具
- GOOGLE翻譯
- ModDocsEng 或 http://allods.uuu9.com/moddocseng/Index.html - 英文版的UI設計相關文件
- 記事本 或 UltraEdit
- 幾個應該知道的事:
- 放UI的位置(一般:C:\Program Files\Allods\data\Mods\Addons)
- Log檔(mods.txt)的位置(一般:C:\Program Files\Allods\Personal\Logs)
瞭解UI的結構
在阿洛斯裡最簡單的UI最少也要有兩個檔案:
- AddonDesc.(UIAddon).xdb
- Script.lua
AddonDesc.(UIAddon).xdb
這個檔案用來告知阿洛斯:
- UI是否在進入遊戲後自動啟動
- UI的名字
- 程式碼檔案名稱
- 介面檔案名稱(本篇無介面設計的介紹 因為我不會XD)
- 作者
- 版本
- 最後更新日
- 相關網址
在AutoBag裡此檔的結構如下圖:
Script.lua
這個檔案就是整個UI的主體,
檔案名稱可以自訂,
只要對應到AddonDesc.(UIAddon).xdb裡的程式碼檔案名稱即可,
阿洛斯使用的UI語法與魔獸相似,都是構筑在LUA語法上的,
基本的語法說明:
- 註解
- 「---」
- 所有在「---」後的文字皆會被忽略,不進行編譯,利用這個可以在程式中加入一些說明,以免自己日後忘記在寫什麼。
- 變數
- 「Global("[name]", [default] )」 --- 全域變數(其實是利用LUA的Table 不過不用管太多...能用就好)
- 「local [name] )」 --- 區域變數
- [name]可自行定義變數的名稱,[default]為此變數的預設值,所謂的變數就像是暫存區一樣,可以把一些需要累計的數字,或者需要串接的文字存起來,向在AutoBug中,就必須要記錄排列次數、排到第幾個等等。
- 判斷式
- 「if...then...[elseif]...[then]...[else]...end」
- 判斷式讓程式可以依照條件去執行動作,例如一個人看天氣來決定怎麼出門的話:
- if 天氣 == 晴天 then 騎車 elseif 天氣 == 陰天 then 坐捷運 else 不出門 end
- 上述的意思是:如果天氣是晴天就騎車,如果天氣是陰天就坐捷運,如果以上皆非(下雨、颱風...)就不出門,其中[elseif][then][else]都是可選的,所以可以有以下組合:
- if...then...end
- if...then...else...end
- if...then...elseif...then...end
- if...then...elseif...then...else...end
- 迴圈
- 「for [start], [end] do...end」
- 「while [判斷式] do...end」
- 迴圈用來執行重覆且有規律的動作,如1加到100:
- local i = 1
- local iCount = 0
- for i, 100 do iCoun = iCount + i end
- 使用while的用法:
- local i = 1
- local iCount = 0
- while i <= 100 do
- iCoun = iCount + i
- i = i + 1
- end
阿洛斯專用的部份:
- Log記錄
- 「common.LogInfo("common", "[text]")」
- 這個指令用來將一些Debug(偵錯)用的資料寫入到Log檔(mods.txt)裡,方便程式設計師在測試某些資料時用的
- 內定事件
- 「common.RegisterEventHandler([function name], "[event]")」
- 內定事件囊括了在阿洛斯中的大部份行為,如切換選取的目標、撿取物品、背包內容變動...等等,當發生這些事情時,系統就會告知程式這個動作被觸發了,利用這一點就可以在某動作觸發時做出對應的事情,例如收到密語時將內容記錄到到Log中:
- common.RegisterEventHandler(OnChatMessage, "EVENT_CHAT_MESSAGE")
- function OnChatMessage(msg)
- --- 判斷是否為密語
- if msg.chatType == CHAT_TYPE_WHISPER then
- --- 寫入角色名稱及內容到Log中
- common.LogInfo("common", msg.sender..":"..msg.msg)
- end
- end
- 取得基本背包大小
- 「avatar.InventoryGetBaseBagSlotCount()」
- 取得物品編號
- 「avatar.GetInventoryItemId([slot id])」
- [slot id]為第幾個格子
- 取得物品資料
- 「avatar.GetItemInfo([item id])」
- [item id]為物品編號
- 常用的內容
- itemInfo.name --- 物品名稱
- itemInfo.quality --- 物品品質
- itemInfo.categoryId --- 物品分類編號
- 更多
- 取得物品分類資料
- 「avatar.GetItemCategoryInfo([class id])」
- [class id]為itemInfo.categoryId
以上~更詳細的說明可以直接去下載AutoBag看裡面的ScriptAutoBag.lua,
打到這邊有點累了...如果大家有問題我再補充吧!
冰封邊境-品質卓越
有料
淚奔
無聊
XD
掀桌
KUSO