"while" 結構的範例:
macro foo { $i = 0 log 下一行會重覆執行 11 次 (0 .. 10) while ($i <= 10) as exampleloop log loop $i $i++ end exampleloop}範例:
macro foo { $i = @random ("1", "2", "3") if ($i == 1) goto one if ($i == 2) goto two log i 為三。 goto end ne log i 為一。 goto end :two log i 為二。 :end}注意:要前往的標籤名不能包含任何英文字母或數字以外的符號。例如:warp_to_payon 是無法運作的,必須要像是 warpToPayon 之類的名稱才可以。
條件
條件 意義
< 小於
<= 小於或等於
== 等於
>= 大於或等於
> 大於
!= 不等於
~ <左半部> 是 <右半部(以逗號分隔的項目)> 的部份元素
<left part> is element of <right part (comma-separated list)>
特殊關鍵字
@npc (<x> <y>)
傳回位於座標 (<x>,<y>) 的NPC 的 ID,假如此 NPC 找不到則傳回 -1。
@inventory (<item>)
尋找你的物品欄中的物品 <item> 並傳回其 ID,假如該物品找不到則傳回 -1。
@Inventory (<item>)
與 @inventory 相同,但是是傳回所有相符物品的 ID 並以逗號分隔開來,假如物品找不到則傳回 -1。
@cart (<item>)
尋找你的手推車中的物品 <item> 並傳回其 ID,假如該物品找不到則傳回 -1。
@Cart (<item>)
與 @cart 相同,但是是傳回所有相符物品的 ID 並以逗號分隔開來,假如物品找不到則傳回 -1。
@storage (<item>)
尋找你的倉庫中的物品 <item> 並傳回其 ID,假如該物品找不到則傳回 -1。
@Storage (<item>)
與 @storage 相同,但是是傳回所有相符物品的 ID 並以逗號分隔開來,假如物品找不到則傳回 -1。
@player (<name>)
尋覓玩家並傳回其 ID,假如該玩家找不到則傳回 -1。
@vender (<name>)
尋覓露店並傳回其 ID,假如該露店找不到則傳回 -1。
@store (<name>)
尋覓商店中的物品並傳回其 ID,假如物品找不到則傳回 -1。
@random ("<參數 1>"[, "<參數 2>"[, ...]])
隨機傳回給定參數中的其中一個參數。
@rand (<n>, <m>)
隨機傳回(含)數字 <n> 與 <m> 之間的任一個數字。
@invamount (<item>)
傳回物品欄中指定的 <item> 的數量。
@cartamount (<item>)
傳回手推車中指定的 <item> 的數量。
@shopamount (<item>)
傳回商店中指定的 <item> 的數量。
@storamount (<item>)
傳回倉庫中指定的 <item> 的數量。
@eval (<參數>)
求給定的 <參數> 的數值。
@arg ("<參數>", <n>)
傳回 <參數> 中的第 <n> 個字,假如 <n> 超過 <argument> 所能包含的範圍的話,則傳回空字串。
@config (<變數>)
傳回 config.txt 中指定的 <變數> 的設定值。
"連鎖的" 指令
你可以在不用等待 openkore 的 ai 或 macro_delay 或其它延遲的條件下連續地執行多個指令。只要用 [ 與 ] 把要執行的指令框起來就可以了。
範例(含行號):
0 macro foo {1 do whatever2 log yet another line3 [4 do something5 do something else6 log foo7 ]8 log done9 }第 3 行開始了連鎖模式。這一行沒有延遲。第4、5、6行與前面一行一樣在沒有延遲時間下快速地執行完且無法被中斷。第 7 行停止了連鎖模式,然後第 8 行將會在延遲 $macro_delay 秒後被執行。
簡易的巨集範例
範例:
macro foo { $foobegin = $.pos do move 168 128 prt_in do talk @npc (172 130) do store do store do buy @store (銀箭矢) 10000 do move 280 198 prontera do talk @npc (282 200) do talk cont do talk resp 1 do storage add @inventory (銀箭矢) @eval (@invamount (銀箭矢) - 1000) do move $foobegin}當經由指令 "macro foo [times]" 啟動此巨集時,此巨集做了以下的事:
存放角色的座標於 "foobegin" 變數中
移動至 168 128 prt_in(武器店)
與位於座標 172 130 的 NPC 交談(武器店員)
輸入 "store" 兩次以顯示該店員賣的東西
買入 10,000 支銀箭矢
移動至 280 198 prontera(中央東門)
與卡普拉交談
使用 talk cont 與 talk resp 1 以開啟倉庫
把銀箭矢都放進倉庫,只留 1000 支在身上,最後,
回到我們開始執行本巨集前的座標
自動巨集的語法
範例:
automacro foo { <觸發條件> bar <觸發條件> baz, yatta call macroname}automacro mi { <觸發條件> moo <觸發條件> xyz call { do this do that }}自動巨集是當某些給定的條件相符後會自動觸發執行的巨集。
map <地圖名>
當你目前的地圖為 <地圖名> 的時候會觸發。
location [not] <地圖名 [<x1> <y1> [<x2> <y2>]] [, ...]
當你(不)在指定的座標時會觸發。
當沒有給定 <x1> <y1> 也沒有給定 <x2> <y2> 時,會以(不)在 <地圖名> 時當做觸發條件。
當沒有給定 <x2> <y2> 時會以(不)在 <地圖名> 的 (<x1>,<y1>) 時當做觸發條件。
當 <x1> <y1> 與 <x2> <y2> 都有定義時,會以你在 <地圖名> 中的 <x1>, <y1>(上左點)與 <x2>, <y2>(下右點,當 <x1> < <x2> 及 <y1> > <y2> 時)之間的任一點當做觸發條件。
以逗號分隔的參數是以 OR 條件來處理:
範例:
location geffen, prontera 123 234
當你在吉芬或是在中央座標 123 234 的時候會觸發。
多行之間是以 AND 條件來處理:
範例:
location not geffen
location not prontera
|