心靈終結(jié)3.3.6地圖編輯器萌新教程第9篇:觸發(fā)的禁止和允許(三):異常情況的處理
??? 在任務(wù)地圖制作中,作者往往會設(shè)計一個“正常打法下”的通關(guān)方式,并且引導(dǎo)玩家按照自己想要的通關(guān)方式來打,或者期望正常戰(zhàn)役能夠按照自己的預(yù)期去發(fā)展。然而,在設(shè)計地圖、編寫觸發(fā)的時候,我們還必須考慮一些可能會出現(xiàn)的“異常情況”,并且在自己的能力范圍內(nèi)盡可能去避免這種情況的發(fā)生。
??? “異常情況”的來源主要有兩種。一種是任務(wù)本身可能會出現(xiàn)一些小概率的事件影響觸發(fā)的判定條件,從而引發(fā)一些不合理的結(jié)果。另一種是玩家“整活”,故意不按套路來。當(dāng)然,也可能是兩者都有。對于第一種,我們需要在編寫觸發(fā)時充分考慮可能會出現(xiàn)的影響觸發(fā)判定的“異常情況”,并通過適當(dāng)?shù)挠|發(fā)來避免;對于第二種,如果不鼓勵“整活”,或者說任務(wù)本身流程不允許“整活”,否則會導(dǎo)致卡關(guān),可以通過鎖科技、封路等措施來避免;如果鼓勵玩家“整活”,就需要像第一種情況一樣通過觸發(fā)等來避免“整活”可能帶來的異常情況。
??? 我們通過具體的例子來說明各種針對異常情況的應(yīng)對方法,并體現(xiàn)“觸發(fā)的禁止和允許”在這里發(fā)揮的作用。
例1:紅警2原版“殘兵敗將”戰(zhàn)役中的bug(接第4篇)
??? 我們在“第4篇:觸發(fā)的關(guān)聯(lián)對象”中談到了原版蘇軍第10關(guān)“殘兵敗將”這一關(guān)里的一個bug。任務(wù)目標(biāo)一是“占領(lǐng)盟軍作戰(zhàn)實驗室”,如果作戰(zhàn)實驗室在占領(lǐng)前被摧毀,就會判定任務(wù)失敗;而一旦被占領(lǐng),即使再被摧毀也不會判定失敗。使用的“任務(wù)完成”判定條件為:進入事件,所屬方為蘇聯(lián)(玩家),關(guān)聯(lián)對象為盟軍作戰(zhàn)實驗室。作者認(rèn)為這里的“進入事件”就可以代表工程師進入。原版蘇軍不能造間諜,并且在這一關(guān)中即使玩家占領(lǐng)了盟軍基地也不能造作戰(zhàn)實驗室,從而也不能造間諜,因此“正常情況”下,能“進入盟軍作戰(zhàn)實驗室”的只有工程師。然而,這一關(guān)的一個小島上有一個心靈突擊隊,只要玩家登陸這座小島就可以獲得他,心靈突擊隊對建筑的攻擊方式是安裝C4,而在原版中,像譚雅、海豹部隊這樣的在給建筑安裝C4時會先“進入”建筑,然后建筑被炸毀(心靈終結(jié)中不存在這樣的問題)。這就導(dǎo)致了如果玩家用心靈突擊隊炸毀作戰(zhàn)實驗室之后,仍然會在突擊隊進入實驗室的一瞬間顯示“任務(wù)目標(biāo)一完成”,炸毀后也不會導(dǎo)致任務(wù)失敗,從而出現(xiàn)不合理的情況。
??? 我們可以通過給“任務(wù)目標(biāo)一完成”這一觸發(fā)添加適當(dāng)?shù)难舆t,從而讓心靈突擊隊炸毀實驗室時,“實驗室被摧毀”這一事件發(fā)生得比“任務(wù)目標(biāo)一完成”這一事件早,從而避免這個bug,具體如下:
??? 觸發(fā)1:進入作戰(zhàn)實驗室
??????? 觸發(fā)所屬方:蘇俄
??????? 條件:進入事件
??????? 結(jié)果:允許觸發(fā)2
??????? 關(guān)聯(lián)對象為作戰(zhàn)實驗室
??? 觸發(fā)2:任務(wù)目標(biāo)一完成
??????? 初始狀態(tài):禁止
??????? 條件:流逝時間3秒(至少要長于從突擊隊進入建筑到建筑爆炸之間的時間間隔)
??????? 結(jié)果0:禁止觸發(fā)3
??????? 其他結(jié)果與任務(wù)目標(biāo)一完成相關(guān)(如文本提示等)
??? 觸發(fā)3:實驗室被摧毀
??????? 初始狀態(tài):允許
??????? 條件:科技類型不存在,參數(shù)填盟軍作戰(zhàn)實驗室(假設(shè)地圖上只有這一個盟軍作戰(zhàn)實驗室,并且作戰(zhàn)實驗室不可建造。注意這個條件是指任何一個所屬方都沒有該科技類型。不能換為“所屬方不存在科技類型”并將觸發(fā)所屬方設(shè)為美國,否則當(dāng)實驗室被占領(lǐng)時也會滿足該條件)。
??????? 結(jié)果0:禁止觸發(fā)2(或者摧毀觸發(fā)2)
??????? 其他結(jié)果與任務(wù)失敗相關(guān)
??? 這樣的話,如果還用突擊隊炸作戰(zhàn)實驗室,當(dāng)突擊隊進入實驗室的一瞬間,觸發(fā)1的條件滿足,但結(jié)果僅僅是觸發(fā)2被允許。此后3秒之內(nèi),實驗室爆炸,觸發(fā)3的條件滿足,觸發(fā)任務(wù)失敗,此時觸發(fā)2的結(jié)果還沒有被執(zhí)行就又被禁止。在整個過程中不會再出現(xiàn)任何與“任務(wù)目標(biāo)一完成”相關(guān)的東西。不過,這樣的觸發(fā)還是有一點點小問題,就是如果玩家在占領(lǐng)實驗室后的3秒內(nèi)把實驗室摧毀或賣掉,仍然會顯示任務(wù)失敗,與我們的“預(yù)期”——一旦實驗室被占領(lǐng),再被摧毀不算任務(wù)失敗這一點不同。不過我覺得在3秒之內(nèi)這種情況應(yīng)該不會發(fā)生吧……
例2:自制戰(zhàn)役《守護》第三關(guān):“豈曰無衣”中的一些異常狀況
??? 這一關(guān)的任務(wù)目標(biāo)是護送所有卡瑪茲安全通過此區(qū)域(即開到地圖可見區(qū)域外面)。所有卡瑪茲是不受玩家指揮的,會按照設(shè)定的路線一直行進。后來,有一位朋友在試玩這一關(guān)時說所有卡瑪茲全部卡在路中間不走了。我本來以為是動作腳本出了問題,后來細(xì)問才知道他在卡瑪茲移動的時候用蜻蜓無人機給定住了,再松開的時候就不走了……后來解決辦法簡單粗暴,直接在內(nèi)置ini里給卡瑪茲加了一句免疫EMP的代碼。但實際上,像這種護送任務(wù),只要玩家愿意整活,卡關(guān)是輕輕松松的事,比如用圍墻把卡瑪茲的入口圍起來。所以說,地圖作者也不可能考慮到,或者即使考慮到了也不可能解決所有的“異常情況”。
??? 這一關(guān)在制作時還有一處可能會出現(xiàn)異常狀況的細(xì)節(jié)。本關(guān)總共會有6批卡瑪茲,只要任何一輛被摧毀就會判定失敗。本關(guān)的所有卡瑪茲都被設(shè)定為拉丁同盟所屬方,而地圖上沒有其他所屬方為拉丁同盟的單位。因此,任務(wù)失敗的條件比較容易控制:條件16:單位被摧毀X個,參數(shù)X為1,觸發(fā)所屬方為拉丁同盟。而當(dāng)6批卡瑪茲全部安全駛離地圖時判定任務(wù)成功,觸發(fā)判定條件為:條件82:所屬方不存在科技類型,參數(shù)為卡瑪茲,觸發(fā)所屬方為拉丁同盟。該觸發(fā)初始處于“禁止”狀態(tài),當(dāng)最后一批卡瑪茲進入戰(zhàn)場之后被允許(想想為什么要這樣?)。
??? 但如果是這樣的話,可能會發(fā)生這樣一個事件(雖然概率很?。喝绻?strong>最后一批卡瑪茲只剩下最后一輛沒有駛離地圖,而這輛卡瑪茲被摧毀了,會怎樣呢?這時任務(wù)失敗的條件被滿足了,因為拉丁同盟的單位確實被摧毀了1個;而任務(wù)成功的條件也被滿足了,因為此時“任務(wù)成功”的觸發(fā)已經(jīng)處于允許狀態(tài),而場上也確實沒有拉丁同盟的卡瑪茲了。根據(jù)任務(wù)要求,此時任務(wù)應(yīng)該是失敗了,所以我們要想辦法避免這種異常情況。一種解決方法可以模仿例1,即新建一個觸發(fā)A,將原來“任務(wù)成功”的觸發(fā)中的所有結(jié)果挪到觸發(fā)A的結(jié)果中,觸發(fā)A的條件為“流逝時間若干秒”,然后原來的“任務(wù)成功”的觸發(fā)只設(shè)一個結(jié)果,就是“允許觸發(fā)A”,同時在原來“任務(wù)失敗”的觸發(fā)中新添一個結(jié)果:“摧毀觸發(fā)A”。這樣若再出現(xiàn)這種情況,與任務(wù)完成有關(guān)的觸發(fā)A會在觸發(fā)之前被摧毀。.
??? 以上我們通過例子說明了“觸發(fā)的禁止和允許”的一個應(yīng)用:處理異常情況。從上面舉的例子來看,這種異常情況的出現(xiàn)通常是因為:有若干個事件(起因)都會分別引發(fā)某個觸發(fā)的條件,而實際上我們想要的真正的“起因”只是其中之一。這時,我們可以通過延時并且適當(dāng)?shù)卦O(shè)置允許或禁止觸發(fā),來“識別”這些不同的“起因”,從而避免異常情況的發(fā)生。