明輝手游網(wǎng)唯一官網(wǎng):79things.com

本站App下載  |  

首頁 > 游戲資訊 > 單機(jī)游戲

《閃點(diǎn)行動(dòng)2:龍之崛起》任務(wù)編輯器教程

作者:佚名   來源:本站   時(shí)間:2024-04-17  點(diǎn)擊:

電腦大家應(yīng)該不怎么陌生吧!現(xiàn)在電腦已經(jīng)普及到大多數(shù)人的家庭之中了,電腦的用途非常地廣,不同年齡段、不同行業(yè)的人對電腦的用處不同。但是對于很多的年輕人來說電腦最大的用途就是玩游戲了。電腦游戲大家肯定玩過吧!它可以使人上癮。

原文:點(diǎn)擊

感想:本人玩過的三角洲系列,毀滅戰(zhàn)士系列,地震系列,反恐系列,霹靂系列,彩虹系列,榮譽(yù)勛章系列,cod系列。

說實(shí)話我已厭倦了巷戰(zhàn),厭倦了按規(guī)定線路沖鋒的的第一人稱射擊游戲。

給我感覺最好的好是閃點(diǎn)行動(dòng)和三角洲,開闊的地圖,真實(shí)的戰(zhàn)爭,1公里開外匍匐在草叢中,抬個(gè)狙,聽著風(fēng)吹過草地的聲音,等待著目標(biāo)的出現(xiàn)。!

任務(wù)編輯器感想:該編輯還是比較傻瓜容易懂的。連我這種對腳本語言一巧不通的人也摸出了點(diǎn)門道。

教程一:初識界面,放置單位,單位屬性。

 

可以看到圖片所示。界面很簡單。

要做個(gè)最最簡單的地圖就是把解放軍,和美軍拖到地圖上,然后選中一個(gè)單位在屬性界面里把AI換成player就可以了。
下面圖片的屬性的簡單介紹 如圖


沒什么難點(diǎn)隨便選擇了玩玩就可以了。


教程二: 路徑點(diǎn)

因?yàn)槁窂皆O(shè)置已經(jīng)有人寫過比較好的帖子,我復(fù)制如下(感謝原作者vid190):
很多人都要問道怎么讓AI自動(dòng)走路,下面簡單介紹下,會(huì)了這個(gè)你也就差不多能做個(gè)極為簡單的防御地圖了


舉例做一個(gè)讓AI一開始就自己移動(dòng)一段距離的任務(wù)

1.首先加入AI,在Create面板里的USMC跟PLA下的,F(xiàn)ireteams 火線小組 Soldiers 單兵 Squads 一個(gè)班 ,這些就不多介紹了,自己選擇個(gè)小隊(duì)加入。然后在設(shè)置自己,這里要注意了,如果讓AI自己移動(dòng)那么這個(gè)移動(dòng)的隊(duì)伍里不能有你自己。不然系統(tǒng)會(huì)自己默認(rèn)讓你自己發(fā)號施令指揮隊(duì)友。自己在Soldiers選擇個(gè)自己喜歡的加上,讓后在地圖上在自己加入的這個(gè)人物圖標(biāo)上單擊右鍵選擇Set Control Mode Of This Character - Player 就設(shè)置為自己了,但是如果設(shè)置的為敵方那就不用考慮自己了。

2.然后是設(shè)置路徑點(diǎn)。在Create面板里的Systems下的,Mission里選擇 Waypoint 路徑點(diǎn)。然后在地圖上畫出路徑點(diǎn),這里要注意,每到一個(gè)路徑點(diǎn)隊(duì)長都會(huì)報(bào)告下一個(gè)路徑點(diǎn),所以不要點(diǎn)太多,不然每走幾步隊(duì)長就得烏拉烏拉的。然后選擇AI,不包括你自己,這里可以全選也可以點(diǎn)擊小隊(duì)的盾牌,也可以單選。怎么都可以。選擇后在他們的圖標(biāo)上點(diǎn)右鍵選擇Pick Waypoint 這時(shí)圖標(biāo)會(huì)變灰但是路徑點(diǎn)還是亮著的,選擇你剛才設(shè)置的第一個(gè)起始路徑點(diǎn)就可以了。

技巧一.關(guān)于怎么樣設(shè)置迂回,同理只要在終點(diǎn)路徑點(diǎn)上右鍵單擊并選擇Pick Next Waypoint 然后點(diǎn)擊起始路徑點(diǎn)即可。這時(shí)會(huì)看見路徑線的兩個(gè)箭頭會(huì)重合相對,意思就是AI會(huì)在這兩點(diǎn)上來回游走。當(dāng)然你也可以畫個(gè)圈,反正怎么畫隨你。

技巧二.如果你想讓AI跑步以最快的速度行進(jìn),那只要點(diǎn)擊路徑點(diǎn)然后選擇右邊Modify-Waypoint下的Rapid Move,把它點(diǎn)亮就可以了。然后你會(huì)看見路徑線變成多箭頭,既是成功。

技巧三.當(dāng)然這時(shí)你可能看到Rapid Move下的Stance選項(xiàng),它是設(shè)置到這個(gè)路徑點(diǎn)用什么樣的姿態(tài),依次為正常直立行進(jìn),蹲著行進(jìn),還有匍匐前進(jìn)。

技巧四.然后你會(huì)看到Stance下面的Doctrine選項(xiàng),雖然這個(gè)單詞很難理解,但也是跟姿態(tài)有關(guān)。依次說下你們就明白了。第一個(gè)命令后的姿態(tài),就是說隊(duì)長命令A(yù)I什么樣AI就保持什么樣的姿態(tài),然后第二個(gè)是巡邏姿態(tài),就是心不在焉的那種。第三個(gè)事正常姿態(tài)。第四個(gè)也是個(gè)巡邏姿態(tài),但是是非常警覺的那種,也可以理解成搜尋姿態(tài)。第五個(gè)就是戰(zhàn)斗姿態(tài)了。然后這里下面的Formation我們簡單介紹下,就是行進(jìn)隊(duì)形。明白了吧,什么代表什么隊(duì)形游戲中熟悉這里就不做多介紹了。

技巧五.然后是Delay選項(xiàng),顧名思義就是延遲,就是到達(dá)次路徑點(diǎn)后等待多長時(shí)間再移動(dòng)到下個(gè)路徑點(diǎn)。單位是毫秒,注意不是秒。1000毫秒=1秒。要是設(shè)置60分鐘就得是 3600000

感謝原作者vid190


教程三:部隊(duì)編組

因?yàn)椴筷?duì)編組已經(jīng)有人寫過比較好的帖子,我復(fù)制如下(感謝原作者vid190):
1.我們先在Soldiers重選擇5個(gè)單兵,放到地圖上去,因?yàn)橐粋(gè)小隊(duì)最多5個(gè)人,你選6個(gè)也編不到一塊去。
然后我們在看Create-Systems-AI-下的Echelon圖標(biāo)。這個(gè)事我們以后編輯任務(wù)的常用圖標(biāo),就是小隊(duì)圖標(biāo)。
我們在地圖上加一個(gè)。

2.然后我們就可以把這5個(gè)人編輯成一小組,我們可以在Echelon圖標(biāo)上點(diǎn)擊右鍵選擇Pick Parent Echelon單個(gè)選擇單兵,
也可以在單兵圖標(biāo)上點(diǎn)擊右鍵選擇Pick Parent Echelon指向Echelon圖標(biāo)。在就可以用鼠標(biāo)全選,或者按住Ctrl挑選。

3.這時(shí)我們看到五個(gè)單兵都用線指向Echelon圖標(biāo),并且Echelon圖標(biāo)被點(diǎn)亮了。然后我們看到這五個(gè)單兵中有一個(gè)帶有白色黑點(diǎn)小盾牌圖標(biāo)的,這個(gè)就是隊(duì)長了。怎么樣設(shè)置隊(duì)長呢,我們來說下。首先選擇你那個(gè)要設(shè)置隊(duì)長的單兵,然后在右下角Modify面板中找到Hierarchy面板中的Leadership選項(xiàng),我們看到數(shù)值有100,200,300這樣的,說到這有的人明白了吧,數(shù)越大級別越高。小隊(duì)中級別最高的就是隊(duì)長。
而后面的Reset就是還原成默認(rèn),還有就是什么樣的級別對應(yīng)什么樣軍銜,在下一課中Rank屬性中有介紹,不然一個(gè)小兵命令一個(gè)將軍就糗大了,(400為小隊(duì)長,800為大隊(duì)長。)

4.小隊(duì)任務(wù)說完了,然后我們再說編輯班級隊(duì)伍,就是把編輯好的幾個(gè)小隊(duì)組成一個(gè)大隊(duì)。
把剛才編輯好的Ctrl+c Ctrl+v再復(fù)制出4個(gè)來。然后再加入一個(gè)Echelon圖標(biāo),聰明人到這個(gè)都應(yīng)該明白再怎么設(shè)置了吧,
在每個(gè)小隊(duì)的Echelon圖標(biāo)上點(diǎn)擊右鍵選擇Pick Parent Echelon指向新加入的Echelon圖標(biāo)。這時(shí)你會(huì)看到。新加入的圖標(biāo)變成兩個(gè)黑點(diǎn)。
這就是一個(gè)大隊(duì)的標(biāo)志。5個(gè)小隊(duì)都選擇完畢后你會(huì)看到這25人其中有一個(gè)人有兩點(diǎn)白色盾牌標(biāo)記,那個(gè)就是大隊(duì)長了。關(guān)于怎么設(shè)置大隊(duì)長,同上面的第3節(jié),這里就不啰嗦了。

要點(diǎn):加入軍官時(shí)要小心,只要一個(gè)就夠了,不要重復(fù)加入,系統(tǒng)不支持多軍官。
      還有就是你最多只能控制9個(gè)單位,就是說最多只能命令24個(gè)人,1到9,1是你自己,2到5是你小隊(duì)的人,6.7.8.9是另外4個(gè)小隊(duì)。

教程四:初識lua腳本

編寫level.lua是此編輯器的靈魂核心。
請不要看見代碼就犯暈,其實(shí)都很簡單。
我之前對腳本語言一竅不通,不對之處多多指教。
首先我們點(diǎn)到右上角界面中system然后拖動(dòng)

圖標(biāo)在地圖上。地圖上選中該圖標(biāo),在標(biāo)簽欄就會(huì)出現(xiàn)level.lua標(biāo)簽。如圖所示。


二我們打開標(biāo)簽level.lua,在輸入界面里輸入:
function onMissionStart()
OFP:showLetterBoxOsd(true);
end
請不要暈,我們慢慢的一行行的解釋。
首先第一行:
function onMissionStart() 意思可以這么理解“當(dāng)游戲開始的時(shí)候”這段代碼就是這個(gè)意思?吹絝unction就是“當(dāng)什么什么的時(shí)候”。onMissionStart()意思是游戲開始。
再看第二行OFP:showLetterBoxOsd(true);
OFP:觸發(fā)。showLetterBoxOsd(true)意識是給出信框。
end為結(jié)束,記得end要和function連用。
很簡單把.整段代碼的作用是:

當(dāng)游戲開始的時(shí)候
觸發(fā):出現(xiàn)信框。                 --要滿足function onMissionStart()否則不觸發(fā)。
效果:
就是我們在玩任務(wù)的時(shí)候一開始,屏幕上下的黑幕。

再看個(gè)例子:
function onDeath_huang(victim, killer)
OFP:missionFailed();
end
看到function就是“當(dāng)”,
第一行意為“當(dāng)huang這個(gè)單位死了”
第二行:觸發(fā):任務(wù)失敗;       --要滿足function onDeath_huang(victim, killer)否則無法觸發(fā)。
效果:只要huang這個(gè)名稱的兵死了任務(wù)將失敗。

總結(jié)下:寫level.lua不外乎就是當(dāng)什么什么的時(shí)候,觸發(fā)什么什么。很簡單吧。

教程五:如何顯示小黃棋

這個(gè)圖標(biāo)在游戲中起到指南的作用,讓玩家一步步順者提示走。(該圖標(biāo)只有指南作用,沒有完成任務(wù)的作用,也就是說這個(gè)圖標(biāo)配合任務(wù)圖標(biāo)才能完美任務(wù))
用法很簡單就是點(diǎn)擊system里的把

拖動(dòng)到地圖上就可以了,如果拖動(dòng)多個(gè)

就要將他們之間互相連接起來,類似路徑點(diǎn)。屬性里設(shè)置下名稱大小等就可以了。
但是很多朋友可能遇到這樣個(gè)問題,明明把

放在了地圖上。但是測試游戲里面就是不見。。。。。!
其實(shí)關(guān)鍵是我們沒有觸發(fā)。
好,一一來實(shí)現(xiàn)。
首先拖動(dòng)

圖標(biāo)到地圖上,然后再拖動(dòng)

到地圖上,并且在

的屬性name命名為point1,讓后點(diǎn)擊level.lua標(biāo)簽
輸入:
function onMissionStart()
OFP:activateRVChain("point1");
End
這樣看來就很簡單了把:
當(dāng)游戲開始的時(shí)
觸發(fā):point1這個(gè)旗。
效果:
進(jìn)入游戲后我們就能看到這個(gè)小黃棋在坐標(biāo)上啦。
備注:如果有多個(gè)00并且之間相連,那么在level.lua里只要觸發(fā)第一個(gè)棋子的名字就可以了,其他后面的棋子都可見到了。
休息下,抽根煙,喝點(diǎn)茶。
待編。。。。。。。。。。。。


教程六:如何制作任務(wù)

要制作好的任務(wù)必須配合上一章的內(nèi)容。根據(jù)小黃棋的提示來完成任務(wù)。(當(dāng)然你不用小黃旗也是可以的)
我們先來做個(gè)最簡單的任務(wù)。
首先在右上角的界面里擊system標(biāo)簽然后把

拖到地圖上,然后點(diǎn)擊

把屬性里把name寫成objective,后在把type里面選擇成primary objictive 1.意思是這個(gè)是主要任務(wù)一,再把a(bǔ)rmy設(shè)置成PLA,意思是PLA的任務(wù)。如圖所示:


這樣任務(wù)就能顯示了。
不過現(xiàn)在還沒有任務(wù)的實(shí)際內(nèi)容,所以我們還要寫level.lua
再拖一個(gè)

到地圖上,再隨便拖一輛坦克在地圖上并且在name里設(shè)置為tank1.然后后打開.lua
輸入以下代碼:
function onDeath_tank1(victim, killer)
OFP:setObjectiveState("objective"," COMPLETE ");
End
這個(gè)代碼很容易懂。
意思是:
當(dāng)tank1被摧毀
觸發(fā):任務(wù)objective完成。

效果:把坦克打爆,則任務(wù)完成
哈哈 是不是超級簡單
當(dāng)然這里你要把

和坦克放在一起,或者在

的屬性欄里面的linked to里面選擇tank1。這樣才能準(zhǔn)確的定位坦克的位置,不然任務(wù)和內(nèi)容就不匹配了。

這樣一個(gè)簡單的任務(wù)就制作完成了。
還可以對該代碼改進(jìn)一下,如:
function onDeath_tank1(victim, killer)
OFP:setObjectiveState("objective"," COMPLETE ");
OFP:missionCompleted();
end
意思是該任務(wù)完成并且所有任務(wù)完成退出游戲。
下面介紹下復(fù)雜一點(diǎn)的任務(wù)編輯。

我們怎樣來制作2個(gè)或3任務(wù)呢?
那就很簡單了直接放兩個(gè)

分別命名為objective1和objective2,設(shè)置好陣營,分別設(shè)置primary objictive 1和primary objictive 2
然后拖

到地圖上。再分別拖一輛坦克命名為但tank1個(gè)一個(gè)兵命名為bin1,如圖所示:


代碼為:
function onDeath_tank1(victim, killer)
OFP:setObjectiveState("objective1"," COMPLETE ");
end
function onDeath_bin1(victim, killer)
OFP:setObjectiveState("objective2"," COMPLETE ");
end
很好理解:
意思為:
當(dāng)tank1爆炸則任務(wù)1完成
當(dāng)bin1死亡則任務(wù)2完成
2個(gè)任務(wù)制作很簡單吧!!哈哈

不過細(xì)心的同學(xué)發(fā)現(xiàn)了,以上代碼是無論你先完成哪個(gè)任務(wù)都可以,但如果想完成了任務(wù)1才能完成任務(wù)2那怎么辦?
我們必須加入個(gè)判斷:
代碼修改如下:
function onMissionStart()
ob=0;
end

function onDeath_tank1(victim, killer)
OFP:setObjectiveState("objective1"," COMPLETE ");
ob=1;
end

function onDeath_bin1(victim, killer)
if ob==1 then
OFP:setObjectiveState("objective2"," COMPLETE ");
OFP:missionCompleted();
end
end

我們詳細(xì)講解下:
首先看到function onMissionStart()就知道是“當(dāng)游戲開始時(shí)"
下面ob=0;則是設(shè)定了個(gè)變量!且把0(為假)賦值給ob

再看下一段
function onDeath_tank1(victim, killer)
OFP:setObjectiveState("objective1"," COMPLETE ");
ob=1;           ---這里多了個(gè)ob=1,意思是當(dāng)objective1這個(gè)任務(wù)完成后讓1(真)賦值給ob
end

接著看最后段
function onDeath_bin1(victim, killer)
if ob==1 then     ---這里是如果 ob等于1則觸發(fā)objective2任務(wù)完成,達(dá)到了完成任務(wù)1后才能完成任務(wù)2的效果。注意下語法結(jié)構(gòu)。
OFP:setObjectiveState("objective2"," COMPLETE ");
OFP:missionCompleted();
end  - -這里注意凡有if必須有end結(jié)束
end  - -這里的end對function

超級簡單吧! 哈哈
其實(shí)不外乎多1個(gè)變量讓他完成任務(wù)1時(shí)ob變成1,任務(wù)判斷ob是否等于1才觸發(fā)第二個(gè)任務(wù)!
那么三個(gè)任務(wù)就不多講了!
此章介紹到這里。
任務(wù)完成可以是多樣性的,可以是某單位被殺,或者進(jìn)入某區(qū)域,或者某段時(shí)間內(nèi)。
學(xué)到這里應(yīng)該可以制作“1公里開外匍匐在草叢中,抬個(gè)狙,聽著風(fēng)吹過草地的聲音,等待著目標(biāo)的出現(xiàn)!!狙殺!。。。。!“
大家靈活應(yīng)用可以做出絢麗的任務(wù)來!


教程七:如何刷兵,如何刪除出來的刷兵

此游戲只能同時(shí)擁有64個(gè)單位,確實(shí)少了點(diǎn)。以上內(nèi)容是能編輯小規(guī)模戰(zhàn)爭mod。
但是學(xué)了此章后,你能把場面放大無數(shù)倍,可以制作出面對成百上千敵人的超級大場面。
可以制作絢麗的海灘登陸。
可以率領(lǐng)25輛99式坦克面對200輛M1坦克的超級坦克大對轟。
還可制作數(shù)十輛武裝直升機(jī)飛過頭頂?shù)恼鸷承Ч。。?br> 可以制作出絢麗的橋頭保衛(wèi)戰(zhàn),村莊保衛(wèi)戰(zhàn)等等

在學(xué)習(xí)此章之前,我們先來了解下地區(qū):

,位置在右上角的system里面可以找到。
如圖:


這個(gè)東西主要是用于:某單位進(jìn)入該地區(qū)時(shí)發(fā)生什么事。
多用于刷兵,刪除刷兵,觸發(fā)任務(wù)完成等。
代碼為:function onEnter(zoneName, unitName)
來個(gè)例子:
首先拖動(dòng)

在地圖上,把

的name命名為zone然后再拖一個(gè)兵并把該兵的name命名為han并設(shè)置為player.
放好后,點(diǎn)擊標(biāo)題欄的level.lua
輸入以下代碼:
function onEnter_zone_han(zoneName, unitName)
OFP:missionFailed();
end
意思是:當(dāng)han這個(gè)單位進(jìn)入zone這個(gè)地區(qū)時(shí)
觸發(fā)總?cè)蝿?wù)完成
效果:
當(dāng)玩家操作han這個(gè)單位進(jìn)去zone這個(gè)區(qū)域則彈出任務(wù)完成菜單,游戲勝利。
很簡單吧。
好了現(xiàn)在我們對地區(qū)已經(jīng)了解了。
現(xiàn)在我們就利用地區(qū)這個(gè)工具來制作刷兵。
在此之前我們先了解為什么要刷兵。
這里在羅嗦下這個(gè)編輯器只能支持64個(gè)單位在地圖上,這明顯限制的游戲的規(guī)模,但是我們可以在64個(gè)單位死后,再刷出新的兵,這樣我就能把戰(zhàn)斗做到無限大!不過注意一個(gè)地圖上同一時(shí)間只能有64個(gè)單位,不然刷不新的兵來。
刷兵語句:OFP:activateEntitySet();
好我們來例子:
例1:
首先點(diǎn)擊 右側(cè)Create欄右邊的Explorer
在 Entety Sey View 目錄下面空白處點(diǎn)一下(防止建在根目錄里) 再選擇+ ADD Entity Set
增加一個(gè)Entity Set 我們這里他命名為E1.單擊E1灰色目錄圖標(biāo)打勾,
然后再右鍵E1選Exportable 最后圖標(biāo)就是一個(gè)黃色打勾的目錄.
這樣我們就建立了個(gè)實(shí)體。
然后拖動(dòng)一組兵到地圖上在屬性界面里的modify里的Entity Set 里選擇剛
才創(chuàng)建的E1。命名為bin1
現(xiàn)在這組兵事E1這個(gè)實(shí)體里的單位。
那么我們要實(shí)現(xiàn)刷兵就必須觸發(fā)這個(gè)實(shí)體(E1這個(gè)實(shí)體里的單位在游戲一開始是不會(huì)出現(xiàn)的)
在地圖上拖一個(gè)地區(qū)

命名為:zone,再拖一個(gè)

,再拖一個(gè)兵命名為han設(shè)置成player。點(diǎn)擊level.lua輸入以下代碼:
function onEnter_zone_han(zoneName, unitName)
OFP:activateEntitySet("E1");
end意思是:
當(dāng)han這個(gè)單位進(jìn)入zone這個(gè)區(qū)域時(shí)
觸發(fā)刷實(shí)體E1
那么我們知道剛才的bin1是在實(shí)體E1中,那么觸發(fā)E1也就實(shí)現(xiàn)了bin1的出現(xiàn)。
效果:
當(dāng)han進(jìn)入zone這個(gè)地區(qū)時(shí),bin1刷出來!
哈哈哈哈哈哈是不是超級簡單。不過要注意刷出來的兵或者說實(shí)體E1里面的單位必須要有小隊(duì)隊(duì)長。不然會(huì)出錯(cuò)。
好了我們再來學(xué)習(xí)刪除刷兵。
代碼為:OFP:destroyEntitySet();
為什么要?jiǎng)h除刷兵?
那么一隊(duì)敵人遠(yuǎn)離你1公里,這隊(duì)敵人也沒辦法追上你,那么我就可以把這個(gè)小隊(duì)刪除,釋放出內(nèi)存給其他的單位!真正實(shí)現(xiàn)大規(guī)模的戰(zhàn)斗。
我們繼續(xù)以例1來講解。
再拖動(dòng)一個(gè)地區(qū)到地圖上00命名為shanbingzone
現(xiàn)在地圖上有兩個(gè)地區(qū)00分別為zone和shanbingzone,一個(gè)han兵,一個(gè)bin1,和一個(gè)level.lua
我們點(diǎn)擊level.lua
輸入以下代碼:
function onEnter_zone_han(zoneName, unitName)
shuabin1=OFP:activateEntitySet("E1");
end
function onEnter_shanbingzone_han(zoneName, unitName)
OFP:destroyEntitySet(shuabin1);
end
代碼的意思是:
當(dāng)han這個(gè)單位進(jìn)入zone這個(gè)區(qū)域時(shí)
shuabin1=觸發(fā)刷兵E1實(shí)體

當(dāng)han這個(gè)單位進(jìn)入shanbingzone這個(gè)地區(qū)時(shí)
觸發(fā)刪除shuabin1這個(gè)變量。

我們來講解下:
shuabin1=OFP:activateEntitySet("E1");這段代碼和例1有所不同,這里必須把OFP:activateEntitySet("E1")賦值給shuabin1才能執(zhí)行后面的消除刷兵。Shuabin1這個(gè)變量可以取自己容易記的名字。
再看下面:
OFP:destroyEntitySet(shuabin1);為觸發(fā)刪除刷出來的兵。
看到了把后面括號里是(shuabin1)而不是E1。如果是E1的話則代碼不能出現(xiàn)效果,切記.那么這里刪除了shuabin1也就刪除了E1這個(gè)實(shí)體也就刪除了bin1這組兵。(注意格式(shuabin1)沒有雙引號)
效果:
當(dāng)han進(jìn)入zone時(shí)刷兵,當(dāng)han進(jìn)入shanbingzone時(shí)刪除剛才所刷的兵.
呵呵 也很簡單把
不外乎把刷兵的觸發(fā)效果給他賦值個(gè)變量,在刪除刷兵的時(shí)候只要?jiǎng)h除這個(gè)變量就可以了。
休息下繼續(xù)。。。。。。。。。。。。。。。。。。。。
但是細(xì)心的同學(xué)又發(fā)現(xiàn)了
上面這個(gè)例子,當(dāng)han單位進(jìn)入zone這個(gè)地區(qū)刷兵,然后進(jìn)去shanbingzone這個(gè)地區(qū)刪除刷出來的兵,但是當(dāng)han再進(jìn)入zone這個(gè)區(qū)域時(shí)又刷兵了,這明顯不是我們設(shè)計(jì)的本意。
那么我們該如何只讓zone這個(gè)區(qū)域只刷一次兵,以后再進(jìn)入zone地區(qū)時(shí)不再刷兵呢。
我們就必須加入判斷。
例3
來看代碼:
function onMissionStart()
panduan1=0;
end

function onEnter_zone_han(zoneName, unitName)
if panduan1==0 then
shuabin1=OFP:activateEntitySet("E1");
panduan1=1;
end
end

function onEnter_shanbingzone_han(zoneName, unitName)
OFP:destroyEntitySet(shuabin1);
end

很好理解把
在游戲開始的時(shí)候設(shè)置個(gè)變量panduan1=0。
當(dāng)han進(jìn)入zone時(shí),先判斷panduan1是不是0后才刷兵。
當(dāng)觸發(fā)刷兵后讓panduan=1,則以后再進(jìn)入zone地區(qū)時(shí)因?yàn)閜anduan=1所以不會(huì)再刷兵了。
當(dāng)然對于例3的功能還有更簡單的辦法:
function onEnter_zone_han(zoneName, unitName)
shuabin1=OFP:activateEntitySet("E1");
OFP:disableEvent("onEnter_zone_han") ;   --消除該觸發(fā)器,也可以達(dá)到例3的效果,且更簡單方便,不需要變量來判斷。
end

function onEnter_shanbingzone_han(zoneName, unitName)
OFP:destroyEntitySet(shuabin1);
end


我們來個(gè)牛的例子
例4:
假設(shè)我們有實(shí)體E1和E2還有兵若干,地區(qū)4個(gè)分別為zone,zone1和shanbingzone,shanbingzong1玩家han.
代碼為
function onMissionStart()
panduan1=0;
panduan2=0;
end

function onEnter_zone_han(zoneName, unitName)
if panduan1==0 then
shuabin1=OFP:activateEntitySet("E1");
panduan1=1;
end
end
function onEnter_zone1_han(zoneName, unitName)
if panduan2==0 then
shuabin2=OFP:activateEntitySet("E2");
panduan2=1;
end
end
function onEnter_shanbingzone_han(zoneName, unitName)
OFP:destroyEntitySet(shuabin1);
end
function onEnter_shanbingzone1_han(zoneName, unitName)
OFP:destroyEntitySet(shuabin2);
end
意思是:
當(dāng)han進(jìn)入zone時(shí)
觸發(fā)刷E1
當(dāng)han進(jìn)入zone時(shí)
觸發(fā)刷E2
當(dāng)han進(jìn)shanbingzone時(shí)
觸發(fā)刪除E1
當(dāng)han進(jìn)入shanbingzone1時(shí)
觸發(fā)刪除E2
以上代碼刷兵區(qū)域只能刷1次兵
效果:略
值得注意的是一次刷兵判斷時(shí),變量只能用一次
function onEnter_zone_han(zoneName, unitName)
if panduan1==0 then
shuabin1=OFP:activateEntitySet("E1");
panduan1=1;
end
end
function onEnter_zone1_han(zoneName, unitName)
if panduan1==1 then ――用了同一個(gè)變量,錯(cuò)誤
shuabin2=OFP:activateEntitySet("E2");
panduan1=2;――錯(cuò)誤end
這樣寫是錯(cuò)誤的,所以我們必須有panduan1=0;和panduan2=0;兩個(gè)變量來判斷刷兵。切記。。。!

要做大規(guī)模戰(zhàn)斗例4必須要學(xué)會(huì)。
本章說到這里結(jié)束了,希望大家多多練習(xí),作出超級大戰(zhàn)場來給我玩^_^
這章稍微有點(diǎn)難度,有什么困難可以聯(lián)系我,大家一起討論。


教程八:路徑點(diǎn)高級應(yīng)用
在教程二中已經(jīng)認(rèn)識了路徑點(diǎn),那么這里我們對路徑點(diǎn)的功能拓展一下
此章我們用三個(gè)部分來給大家講解:

一:如何讓刷出來的兵安路徑點(diǎn)移動(dòng)
二:如何讓AI防守路徑點(diǎn)
三:當(dāng)達(dá)到路徑點(diǎn)觸發(fā)事件

一:我們在學(xué)習(xí)完教程七的后已經(jīng)學(xué)會(huì)刷兵,但是如果喜歡鉆研的同學(xué)發(fā)現(xiàn),刷出來的兵不會(huì)按路徑點(diǎn)走,無論你怎么設(shè)置路徑,他們只是呆呆的站在原地,或者是發(fā)現(xiàn)敵人就一擁而上。
現(xiàn)在我們解決這個(gè)問題:
例1:
首先我們設(shè)置好事體E1(見教程七),拖動(dòng)一組兵命名為bing1選擇實(shí)體E1,拖2個(gè)地區(qū)分別命名為:shuabingzone和yidongzone.在拖3個(gè)路徑分別命名為:way1,way2,way。并把3個(gè)路徑相連。拖一個(gè)level.lua再來一組兵命名為han選擇為player.
現(xiàn)在我們的任務(wù)是進(jìn)入shuabingzone時(shí),觸發(fā)刷bing1,進(jìn)入yidongzone時(shí)讓bing1按路徑移動(dòng)。(哈哈明白了吧,要讓刷出來的兵按路徑移動(dòng),就必須去觸發(fā))。
好我們輸入以下代碼:
function onEnter_shuabingzone_han(zoneName, unitName)
OFP:activateEntitySet("E1"); - -刷兵
end

function onEnter_yidongzone_han(zoneName, unitName)
OFP:move(“bing1”,”way1p”)
End
我們講解下:第一段沒問題,看第二段:當(dāng)進(jìn)入yidongzone時(shí)觸發(fā)移動(dòng)move(“兵的名字”,”路徑點(diǎn)名稱+p”):
呵呵是不是很簡單。
但是請注意OFP:move(“bing1”,”way1p”)這里必須是way1+p而不是way1,這里一定要在路徑點(diǎn)名稱后面加個(gè)P,才能讓bing1沿著way1到way2到way3,如果不加p,兵1只會(huì)到達(dá)way1就不動(dòng)了。
二:如何讓AI防守路徑點(diǎn)。
我們要讓刷出來的敵人,防守某個(gè)路徑點(diǎn),而不是亂跑,或者原地不動(dòng)
例2:在例1的基礎(chǔ)上再加一個(gè)路徑點(diǎn)命名為fangshouway和一個(gè)地區(qū)命名為fangshouzone,且該路徑點(diǎn)不能和其他路徑相連.
我們要讓刷出來的兵防守路徑點(diǎn)fangshouway.
代碼如下:
function onEnter_shuabingzone_han(zoneName, unitName)
OFP:activateEntitySet("E1"); - -刷兵
end
function onEnter_fangshouzone_han(zoneName, unitName)
OFP:defendPos("bing1","fangshouway",10);
end
也很簡單
當(dāng)han進(jìn)入shuabing地區(qū)時(shí)觸發(fā)刷兵,再觸發(fā)防守。
OFP:defendPos("bing1","fangshouway",10);這里時(shí)(“兵名稱”,”路徑點(diǎn)”,范圍/米)
三:當(dāng)達(dá)到路徑點(diǎn)觸發(fā)事件
例如我們有一輛卡車,上面裝滿了兵,當(dāng)?shù)竭_(dá)某個(gè)路徑時(shí)觸發(fā)所有兵下車。
我們再拖一輛卡車命名為kache1,拖一組兵命名為bing2,讓bing2裝上卡車。在把bing2和路徑way1相連。
代碼如下:
function onArriveAtWaypoint_kache1_way1(entityName, waypointName)
OFP:move("bin1","way1","OVERRIDE");
end
function onArriveAtWaypoint_kache1_way1(entityName, waypointName)
OFP:land("bing2");
end
第一段觸發(fā)移動(dòng)。
第二段觸發(fā)下卡車。
嚴(yán)重注意:一個(gè)地區(qū)zone只能對應(yīng)一類OFP,
例如:
function onEnter_shuabingzone_han(zoneName, unitName)
OFP:activateEntitySet("E1"); - -刷兵
OFP:activateEntitySet("E2"); - -刷兵
OFP:activateEntitySet("E3"); - -刷兵
end
這個(gè)是正確的,因?yàn)橐粋(gè)為地區(qū)只對應(yīng)了觸發(fā)刷兵,雖然有多個(gè)但是是屬于同一類。
而:
function onEnter_shuabingzone_han(zoneName, unitName)
OFP:activateEntitySet("E1"); - -刷兵
OFP:move("bin1","way1","OVERRIDE");
end
這樣是錯(cuò)誤的:一個(gè)地區(qū)不能對應(yīng)兩種類型觸發(fā)。
再看
function onEnter_zone_han(zoneName, unitName)
shuabin1=OFP:activateEntitySet("E1");
OFP:disableEvent("onEnter_zone_han") ;  
end
這樣情況例外!這個(gè)是正確的shuabin1=OFP:activateEntitySet("E1");和OFP:disableEvent("onEnter_zone_han") 屬于同一類觸發(fā),
好第八章就講到這里。


教程九:實(shí)例應(yīng)用

一:什么是虛擬單位
二:存盤點(diǎn)的制作
三:實(shí)例下載
一:什么是虛擬單位
我們知道一輛坦克需要配上一個(gè)駕駛員,一個(gè)指揮,和一個(gè)炮手,連上坦克本身就需要4個(gè)單位。
我們知道地圖只能有64個(gè)單位,那么是不是只能有16輛坦克同時(shí)在地圖上,答案是否定的。
我們可以把一輛坦克配置上虛擬駕駛員虛擬指揮和虛擬炮手,那么1輛完整的坦克只占用1個(gè)單位
方法:
拖一輛坦克到地圖上,并在屬性欄里面選擇has virtual crew就可以了
二存盤點(diǎn)制作
這個(gè)很簡單
在地圖上拖一個(gè)Mission progress checkpoint就是圓圈里有個(gè)勾勾那個(gè)圖標(biāo),
命名為save1。(在右上角的system里面找到),再拖一個(gè)地區(qū)命名為zone1,
再拖一個(gè)兵到地圖上明命名為han,設(shè)置成player,再來一個(gè)level.lua
(save1和zone1最好在一起。)
輸入代碼:
function onEnter_zone1_han(zoneName, unitName)
OFP:enableCheckpoint("save1")
end
這樣就可以了。
意思是當(dāng)han進(jìn)入zone1這個(gè)區(qū)域時(shí)觸發(fā)存盤點(diǎn)save1,并且恢復(fù)體能,AI彈藥得到補(bǔ)充。
三:實(shí)例下載
這里有個(gè)本人制作的例子供大家參考:
t6解壓到游目錄data_winmissionsMission Editor下,進(jìn)入游戲玩。
介紹:
任務(wù)目標(biāo)1:攻占山頭,擊斃美軍軍官。
任務(wù)目標(biāo)2:埋伏在小道兩側(cè),突襲M1主戰(zhàn)坦克。
任務(wù)目標(biāo)3:占領(lǐng)村莊。
敵人單位:步兵若干(100+),30+輛M1主戰(zhàn)坦克,兩輛運(yùn)兵車。
解放軍單位:20+輛99式主戰(zhàn)坦克,玩家?guī)ьI(lǐng)17人小隊(duì),援兵若干。
戰(zhàn)線長度:4公里。
功略:
順著指南小旗走就可以了。不要硬拼,多用戰(zhàn)術(shù)。
全文完(^.^)
祝大家戰(zhàn)斗愉快!

更多相關(guān)內(nèi)容請?jiān)L問:閃點(diǎn)行動(dòng)2專區(qū)



玩游戲可以在很大程度上讓大家放松放松,但是我建議大家不要把過多的時(shí)間投入到工作當(dāng)中,因?yàn)檫@樣的話大家很有可能上癮,這樣不利于大家的工作或者是學(xué)習(xí)。

推薦游戲

換一換