close


第5章 List的使用:配合%ismember

%ismember可以查詢某資料有沒有在List裡,
很方便可以把幾個類似句型的trigger寫成同一個,

例如你想抓 <xxx>告訴你 這樣的句型,
當xxx是Suzin、Hippo、Chowchow時做某件事情(例如beep)
當xxx是Nacn、Nala、Square時做另一件事情
如果各自寫一個觸發,6個人就要寫6個觸發,加上預設要cap起來1個共7個

以我的習慣,喜歡減少觸發的數量,而增加每個觸發做的事情量
我會寫一個觸發,pattern是

(%*)告訴你

指令是

#if {%ismember(%1, "Suzin|Hippo|Chowchow")} {#beep}
#if {%ismember(%1, "Nacn|Nala|Square")} {do_something}
#cap tell


第6章 List的使用:配合%line跟%match

這跟%ismember的用法有點相似之處。

%line是一個zmud預先定義的變數,zmud會幫你設好裡面的值
%line裡面放的是從MUD收到的最後一行,
如果用在觸發裡面,那就是符合觸發的那一整行(這是比較容易理解的想法)

舉個例子,
我想把mud裡的新聞頻道cap起來,
則我cap的觸發,pattern是新聞頻道的字眼,例如 【新聞】
內容是

#cap news

但是新聞頻道裡混著二種東西,遊戲裡的事件跟現實的新聞,後者是我不想cap的
假設現實的新聞是來自:kimo、pchome、bahamut而且新聞頻會出現這些字串
則我把觸發內容改成

#if { !%match( %line, "{kimo|pchome|bahamut}" ) } { #cap news }

則新聞頻道沒有這些字眼時(注意有個!表示否定),才會被cap起來

第7章 List的操作函式

%additem(s,list)
  • 把s加到list裡,會加到list的最後面
  • 注意:list本身並不會被更改,
    要把增加後的list設到原本的list,以下大部分函式也一樣
  • #VAR ToDo {kill orc|kill goblin}
    #VAR ToDo %addItem("kill orc",@ToDo)
    則ToDo會變成 kill orc|kill goblin|kill orc
%delitem(s,list)
  • 從list裡移除s,如果有多個,只會移除最前面的一個
  • 注意:跟additem一樣,list本身並不會被更改
  • #VAR ToDo {kill orc|kill goblin|kill orc}
    #VAR ToDo %delItem("kill orc",@ToDo)
    則ToDo會變成 kill goblin|kill orc
%delnitem(list,n)
  • 從list裡移除第n個項目
  • list本身並不會被更改
  • %delnitem("a|b|c", 2) 會得到 a|c
%replaceitem(s,n,list)
  • 將list裡第n個項目換成s
  • list本身並不會被更改
  • #VAR ToDo {kill orc|kill goblin|kill orc}
    #VAR ToDo %replaceitem("kill dwarf",1,@ToDo)
    ToDO將變成kill dwarf|kill goblin|kill orc
%sort(list[,dir])
  • 把list排序,dir省略或0時是遞增,dir為非0時為遞減
  • #VAR slist {123|ab|45|008|789|ABC|ab cd|def|9}
    %sort(@slist) 會得到 008|123|45|789|9|ab|ab cd|ABC|def
    %sort(@slist,1) 會得到 def|ABC|ab cd|ab|9|789|45|123|008
%expandlist(list,delim)
  • 把分隔線用delim取代
  • 結果將不再是個list
  • List="a|b|c"
    %expandlist(@List," ") 會得到 a b c
    %expandlist(@List," , ") 會得到 a , b , c
%dups(list)
  • 移除重覆的項目
  • list本身並不會被更改
  • %dups(Athos|Bertrand|Caesar|Bertrand|Caesar|Bertrand)
    會得到 Athos|Bertrand|Caesar
%push(item,list)
  • 將item加到list的前面
  • 堆疊(stack)用法
  • list本身並不會被更改
  • List="b|c"
    List=%push("a",@List)
    則List會變成 a|b|c
%pop(listname)
  • 將list最前面的項目取出
  • 堆疊(stack)用法
  • 注意:會更改list本身
  • 注意:參數是listname而不是list,意思是不要打@符號
  • List="a"|"b"|"c"
    #SHOW %pop(List) 印出 "a"
    #SHOW @List 印出"b|c"

第8章 重複(duplicate)資料

這一章是一些跟重複項目有關的小提醒。

%additem會把重覆的項目加入list
#additem不會把重覆的項目加入list

%delitem只會移除第一個找到的項目
#delitem會移除所有找到的項目

%dups可以把有重覆項目的list轉成無重覆項目的list
arrow
arrow
    全站熱搜

    suzin 發表在 痞客邦 留言(3) 人氣()