[心得] zMUD將國家水和一般水監控寫成一行的方法

看板mud_sanc (Sanctuary - 聖殿)作者 (hmml)時間15年前 (2011/04/03 01:04), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
這個寫法是將一般水和國家水的監控寫成一行的方法之一,可以讓藥水相關觸發變成 一行,無須分成一般水和國家水兩行。 Pattern : ^特級藥水: (&drinklist). =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 紅色部份,為"^",前面加上這個,可以讓句子中的"特級藥水:",唯有在句首出現時 才會執行比對,由於這個句子比對部份稍短,利用這個字元,可以有效降低誤觸的機 率,最後的"."亦有這個效果。 (&drinklist)是設定變數的方法之一,zMUD555以上版本確定可用,效果同等#var的 寫法,不過因為聖殿藥水水量顯示的格式,讓zMUD555無法用#var的方式取得變數內 容,必須用這個寫法,基本上,兩種寫法互用,可以解決不少吃字的難題。 以國籍為star的角色為例,drinklist最後會得到以下類似的內容: 0罐, 魔法藥水: 33罐, 內力藥水: 0罐.風之小捲: 100罐, 寒雪冰丹: 0罐, 星爍光丹: 30 再來就是後製部份。 Commands : #var drinklist %replace(@drinklist,"罐",|) #var drinklist %remove(", 魔法藥水: ",@drinklist) #var drinklist %remove(", 內力藥水: ",@drinklist) #var drinklist %remove(".風之小捲: ",@drinklist) #var drinklist %remove(", 寒雪冰丹: ",@drinklist) #var drinklist %remove(", 星爍光丹: ",@drinklist) #if (%numwords(@drinklist,|)=3) {#var drinklist @drinklist"0|0|0"} {#noop} #var drinklist2 HP:%word(@drinklist,1,|)|%word(@drinklist,4,|)_SP: %word(@drinklist,2,|)|%word(@drinklist,5,|)_PP:%word(@drinklist,3,|)| %word(@drinklist,6,|) =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 金色部份,目的是將分隔字元置入,由於水量後接字都是"罐",因此用它來置入分隔字 元是恰恰好,分隔字元可以自行指定,這裡指定"|",如果想省一行,直接用"罐"亦 無不可,依個人習慣而定。用#say @drinklist輸出結果如下: 0|, 魔法藥水: 33|, 內力藥水: 0|.風之小捲: 100|, 寒雪冰丹: 0|, 星爍光丹: 30| 靛色部份,是為了將不需要的字元移除,讓資料更符合需求。輸出結果如下: 0|33|0|.風之小捲: 100|, 寒雪冰丹: 0|, 星爍光丹: 30| 亮綠色部份,目的與前段相同,不過國籍不同,指令多少會有些變動,請自行修改。輸 出結果如下: 0|33|0|100|0|30| 紅色部份,因為有時候角色不會買國家藥水,這時候國家藥水的明細就不會出現,那上 段的輸出結果就會變成: 0|33|0| 到時藥水監控畫面難免會差了一點,所以本行做個判斷來確認到底取得幾個數值,如果 數值只有三個,那就再後方補上三個數值:0|0|0,讓接下來的運作,仍能使用六個數。 黃色部分,就是再排列了,個人習慣編輯格式是: HP:水|國水 SP:水|國水 PP:水|國水 所以就把drinklist裡的資料依格式編入新的變數:drinklist2,以HP部分來說即 HP:%word(@drinklist,1,|)%word(@drinklist,4,|) %word可以將指定字串中的資料取想要的部份出來用,所以字串的資料愈整齊乾淨愈好, 為此才寫了多行來整理字串,在drinklist中,代表HP一般藥水和國家藥水的是第一筆和 第四筆資料,分隔字元如前述是"|",寫法如上就能套入想要的資料。 再來以"_"代替空格來使用,因為空格無法正確顯示,僅此而已。 執行後,輸出結果如下: HP:0|100_SP:33|0_PP:0|30 最後將drinklist2放到status bar就完成了。 若想加入判斷水量自動買水,同樣使用%word從drinklist裡取出資料來寫機即可。想把 黃色部分寫在status bar亦是可行,不過staus bar會比較亂,看個人喜好吧! Commands -2: #var drinklist %replace(@drinklist,"罐",|) #var drinklist %replace(@drinklist,": ",|) #if (%numwords(@drinklist,|)<8) {#var drinklist @drinklist"khp|0|ksp|0|kpp|0|"} {#noop} #var drinklist2 HP:%word(@drinklist,1,|)|%word(@drinklist,7,|)_SP: %word(@drinklist,3,|)|%word(@drinklist,9,|)_PP:%word(@drinklist,5,|)| %word(@drinklist,11,|) =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 上方是另一個整理方式,使用的資料會比較凌亂,不過依然可用,輸出結果會變成: 0|, 魔法藥水|33|, 內力藥水|0|.風之小捲|100|, 寒雪冰丹|0|, 星爍光丹|30| 還是有規律的資料,之後亦只是小幅變動,結果不變。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.176.62 ※ 編輯: hmml 來自: 220.133.176.62 (04/03 01:23)
文章代碼(AID): #1DbrShAz (mud_sanc)
文章代碼(AID): #1DbrShAz (mud_sanc)