tdBattlePetScript 是一個寵物插件,可以簡化寵物戰鬥的操作流程,

NGA很多人習慣稱之為腳本,但他本質其實並不是腳本,而是巨集(macro),作用是「把很多按鍵整合成一個按鍵」

只是比內建巨集又更強一點,強的地方在於「可以用 if 判斷式」,多了if 在應用上就靈活非常多。

(其實魔獸古早的內建巨集也能做全判斷式,結果就被暴雪拿掉了 XDD 但寵物戰鬥的還是可以使用)


tdBattlePetScript非常的簡單易寫,我本身也不是資工系,只有上過大一計算機概論而已,但也能靠自己寫出屬於自己的戰鬥流程。
(當然語法漂不漂亮又是另一回事了XDDDD 反正對新手來說能用就好了)


tdBattlePetScript的指令集在這裡:https://github.com/DengSir/tdBattlePetScript/wiki/API

這邊我就不一一介紹有哪些指令

我這邊只講「指令集沒告訴你的事」、「新手入門常犯的錯/debug」


第一件事是「指令越前面代表越優先考量,而不是施放順序」

以伊奇為例,你想要先放[黑爪],然後放[群聚攻擊],很多新手會寫成:

ability(黑爪)
ability(群聚攻擊)


這樣寫的結果是:「伊奇從頭到尾都只會放黑爪!」

而不是你想像的「先黑爪後群聚」

為什麼呢?因為 它一次只會做一個動作,從第一行開始檢查,若第一行符合條件,它就會做第一行的動作。

若第一行不符合,才會檢查下一行......逐行檢查,以此類推。

而黑爪是一個無CD的技能,第一行永遠成立,所以無論你按幾次他都是放黑爪囉!


那要怎麼辦?

正確寫法是:

ability(黑爪) [self.round=1]
ability(群聚攻擊) [self.round=2]


[中括號]內的內容代表if判斷式,self.round代表「友方該寵物當下的回合數」。所以上面那兩行的意思是:

若第一回,則放 黑爪
若第二回,則放 群聚攻擊

====================================================================

第二件事:「round函數」

self.round是一個極常用的函數,只要會用這個函數,就能寫出最基本的字符串囉。

除了self.round,還有round及enemy.round。


round代表的是「絕對回合數,無論是第幾隻寵物」,round比較少用,因為寵物會死掉、會換寵,戰鬥到後來,常常已經搞不清楚是第幾回合了,只要多一個回合或少一個回合,就會滿盤皆錯。

所以用self.round比較能寫成你想要的效果。

round通常是在「你很清楚第幾回合」的時候才用。

例如: quit [self(#1).hp < 100 & round = 1]

意思是: 開場第一回合時,若自己的第一隻寵物血量<100 ,則退出戰鬥 (quit即投降)

這句話是用來防止自己不小心攜帶快死的寵物進戰鬥。

你可能會想問:那為什麼要限制round = 1呢?

只寫quit [self(#1).hp < 100]不行嗎?

這樣寫的結果就是:一號寵物戰鬥到快死的時候(hp < 100),會觸發此條件,會直接投降!

所以,如果你不想戰鬥中途投降,那你就必須要把時間點交待清楚才行,時間點是「一開場」那就是round=1


至於enemy.round代表的是「敵方該寵物的回合數」,在某些場合會用到這個函數。


==================================================


第三件事:換寵物

學會運用round之後,下一課就是要學「換寵物」

換寵物的情境有 「當前寵物死掉而被迫換寵物」和「因戰術考量而主動換寵物」

前者的寫法: change(#2) [self.dead] 或 change(next) [self.dead]

( 我自己習慣把#2或#3寫出來,比較少用next )


後者的寫法就是把你想要的戰術條件寫出來,條件千變萬化,主要是看你自己想怎麼寫就怎麼寫。

範例1. 當敵方1號死去時,我方換2號上場

change(#2) [enemy(#1).dead]

範例2. 我方伊奇第一回放黑爪、第二回放群聚攻擊,之後飛羽到死,死亡之後換2號寵物上場

if [self(伊奇).active]
ability(黑爪) [self.round=1]
ability(群聚攻擊) [self.round=2]
ability(飛羽)
change(#2)
endif

由於 ability(飛羽) 這一行就代表「無腦飛羽到死」的意思,所以會一直到死才執行換寵。


注意:換了寵物之後,self.round又會從1開始算。

===================================================

另外說明if...endif

我們前面說過[中括號]內就已經代表if了,那什麼情況會用 if...endif 呢?

就是你的條件內容比較長的時候,用if...endif可以精簡表達。

例如上面的範例2,如果你不是用if... endif,而只用中括號,內容會變很冗長,如下範例3

ability(黑爪) [self(伊奇).active & self.round=1]
ability(群聚攻擊) [self(伊奇).active & self.round=2]
ability(飛羽) [self(伊奇).active]
change(#2) [self(伊奇).active]

範例2和範例3的意思是一模一樣的。

只是範例3看起來比較凌亂了點,萬一中間有寫錯你要debug也會比較吃力
(但也有些人不在意,看個人習慣)


===================================================

學會以上,就能開始動手寫啦!


我以破碎群島達拉然訓練師[蓋維斯頓爵士]為例

我方寵物
#1=宮廷手抄本,技能:#1秘法衝擊 #2魔法增效 #3厄運詛咒
#2=機械熊貓人幼龍 ,技能:#1吐息 #2雷霆箭 #3爆炸
#3=任意小寵物


我們的劇本是這樣的:

宮廷手抄本,第一回厄運詛咒,第二回秘法衝擊,第三回魔法增效,之後一直放秘法衝擊放到死
換機械熊貓人幼龍上場,第一回雷霆箭(這招可以把躲在後面的殘血魚人補刀死) 接著一直吐息,吐到敵人HP<=560時,放爆炸,戰鬥結束。


先寫 宮廷手抄本的部份  //綠字部份是註解給你看的,實際上只需要黑字部份就好


if [self(#1).active]              //當自己第一隻寵物啟用時 (也就是宮廷手抄本在場上時,才適用以下內容)
ability(#3) [self.round=1]  //第一回放厄運詛咒
ability(#1) [self.round=2]  //第二回放秘術衝擊
ability(#2) [self.round=3]  //第三回放魔法增效
ability(#1)                        //無腦放秘術衝擊
change(#2)                      //換第二隻寵物(也就是機械熊貓人幼龍)
endif

如此就能銜接到機械熊貓人幼龍(#2)

if [self(#2).active]         //當自己第二隻寵物啟用時 (也就是機械熊貓人幼龍在場上時,才適用以下內容)
ability(#2) [self.round=1]     //第一回先雷霆箭
ability(#3) [enemy.hp <= 560]    //若敵方血少於560,就爆炸
ability(#1)                                 //否則就一直放吐息
endif

這樣就寫完啦,是不是很簡單呢 A_A

但我第一次寫的時候還是debug快兩個小時,因為沒什麼新手教學文只能自己在那邊try and error。

希望這個心得文能幫助新手很快就上手。

 

PS 你可以發現有趣的是,tdBattlePetScript 並沒有「否則」的語法,不像其他地方有像「if...then」 

因為在tdBattlePetScript裡面,「否則」是不需要寫出來的,只要第一行不符合,他就會跳第二行,「跳第二行」這個動作本身就已經是「否則」的概念。

arrow
arrow

    sandra80032 發表在 痞客邦 留言(1) 人氣()