職業攻略:戰士 | 聖騎 | 斥候 | 治療 | 祭師 | 法師 | 召喚 | 心控





Addons製作教學---基礎的指令式UI。
Addons製作教學---基礎的指令式UI。
發佈時間:2011年03月24日 17:14:11      人氣: 14988       進入討論區

轉自巴哈阿洛斯版作者 jack9685

準備工具

瞭解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,
打到這邊有點累了...如果大家有問題我再補充吧!

冰封邊境-品質卓越

0
0
0
0
0
0

有料

淚奔

無聊

XD

掀桌

KUSO
0