Jass 技能模型定义(—):半人马酋长的反击光环
Jass是什么?
先闡釋一下什么是jass吧,百度:JASS(正確地說是JASS 2)是魔獸3的程序語言,用于控制游戲和地圖的進(jìn)行,也是魔獸游戲和地圖的基礎(chǔ)。 地圖編輯器中擺放的單位(Unit),區(qū)域(Region) ,觸發(fā)(Trigger)……等,最終都會(huì)被翻譯成JASS語言存在地圖文件里,在游戲時(shí)被使用。JASS在語法結(jié)構(gòu)上比較接近Basic,同時(shí)也引用了許多C語言的東西。
語法結(jié)構(gòu):
//jass語法結(jié)構(gòu)
function Trig_functions_Conditions takes nothing returns boolean
if ( not ( GetUnitTypeId(GetTrainedUnit()) == 'N000' ) ) then
return false
endif
return true
endfunction
function Trig_functions_Actions takes nothing returns nothing
call CreateItemLoc( 'modt', GetUnitLoc(GetTriggerUnit()) )
call UnitAddItemSwapped( GetLastCreatedItem(), GetTrainedUnit() )
endfunction
//c語言的結(jié)構(gòu)
/*
其中
GetTrainedUnit()返回觸發(fā)器事件中創(chuàng)建的單位(類型:Unit)
GetUnitTypeId( Unit ) 返回某一個(gè)單位對(duì)應(yīng)的Id(String)
以上的兩個(gè)來自游戲函數(shù)庫,第一個(gè)函數(shù)的大致意思是 : 如果觸發(fā)器事件中創(chuàng)建的單位對(duì)應(yīng)的Id等于'N000'返回true,否則返回false
*/
public bool Trig_functions_Conditions()
{
return GetUnitTypeId(GetTrainedUnit()) == 'N000'
}
/*
GetTriggerUnit()返回觸發(fā)器事件中的單位(開啟觸發(fā)器的單位,類型:Unit)
GetUnitLoc( Unit ) 返回某一個(gè)單位所在的位置
'modt'是吸血面罩的Id
CreateItemLoc( ItemId , Position ) 在某個(gè)位置創(chuàng)建一個(gè)物品
以上的全部解釋是:在觸發(fā)器單位所處的位置,創(chuàng)建一個(gè)吸血面罩。(汗。。。還沒完)
GetLastCreatedItem() 地圖編輯器上一個(gè)創(chuàng)建物品
UnitAddItemSwapped( Item , Unit ) 把物品Item 移到 Unit 物品欄里(如果物品欄已滿,操作無效)
以上的全部解釋是:把地圖編輯器上一個(gè)創(chuàng)建物品移到上一個(gè)創(chuàng)建單位的物品欄中
合并在一起:在觸發(fā)器單位A所在位置創(chuàng)建一個(gè)吸血面罩,然后把吸血面罩移動(dòng)到A的物品欄里。
注:問:為什么不直接在英雄欄里創(chuàng)建一個(gè)吸血面罩呢?呵呵,函數(shù)庫里沒有這個(gè)功能,這個(gè)功能只能間接實(shí)現(xiàn)。
除非能改寫這個(gè)游戲使用的函數(shù)庫,我覺得我沒這個(gè)能力- -|||
*/
public void Trig_functions_Actions()
{
CreateItemLoc( 'modt', GetUnitLoc(GetTriggerUnit()) ) ;
UnitAddItemSwapped( GetLastCreatedItem(), GetTrainedUnit() );
}
其實(shí)扯淡這么久,我今天為什么突然說起Jass語言了。說明下原因吧,其實(shí)這門古老的語言,我很久沒有使用過了,幾天,我想做兵棋,但是自己又沒有這種經(jīng)驗(yàn)。之前大學(xué)里,我是很喜歡冰封王座這款游戲的,而且自己邊玩邊做,慢慢的就學(xué)會(huì)了Jass,Jass可是我真正精修的第一門語言,對(duì)WorldEditor很熟悉。這樣我就想在自己做的兵棋游戲里加入WorldEditor的元素,比如地圖編輯模式,分為地表、單位、可破壞(森林、樹木、酒桶、箱子)、不可破壞(石頭、塑像、效果)、路徑阻斷。我在自己的兵棋地圖中,大致也會(huì)分這么幾個(gè)層,這么做有一個(gè)好處,我要做一個(gè)兵棋地圖編輯器(不是我瘋了,而是必須有,如果兵棋地圖,都由代碼來完成,未免開發(fā)量有點(diǎn)大),這么做,可以分別做地表、單位、路徑阻斷、可破壞、不可破壞等等的功能,將這幾個(gè)層重合,部署到最基層的六邊形陣列上,當(dāng)我需要開發(fā)某一項(xiàng)功能,可以將其他層搬開,只留下需要開發(fā)的功能層即可。并且WorldEditor中的單位模型,也是很好的借鑒,實(shí)在是太棒了,憑空很難想象的出來的(有個(gè)好靠山,自己就貼上去吧),甚至包括WorldEditor中的Trigger模式,我估計(jì)也會(huì)做一下,游戲中要隨機(jī)出現(xiàn)新事件、或者彈個(gè)片、或者過個(gè)畫,這點(diǎn)用Trigger模式非常好。
真正玩過war3、或者dota的人,或多或少的都用過WorldEditor,只是熟練程度不一樣而已。今天就小試牛刀,跟大家一起做一個(gè)dota中半人馬酋長的被動(dòng)技能吧,呵呵。灰常簡單,就用編輯器中的功能就行了,不用額外寫jass腳本。
1、首先,打開地圖編輯器,在技能類里新創(chuàng)建一個(gè)英雄技能
2、打開Trigger編輯器,新建一個(gè)觸發(fā)器事件
事件:當(dāng)一個(gè)單位被攻擊時(shí)
條件:被攻擊單位反擊光環(huán)等級(jí)大于0
動(dòng)作:
如果反擊光環(huán)等級(jí)等于1 那么被攻擊單位給予攻擊單位10點(diǎn)基礎(chǔ)傷害+被攻擊者力量*0.2的英雄傷害
如果反擊光環(huán)等級(jí)等于2 那么被攻擊單位給予攻擊單位20點(diǎn)基礎(chǔ)傷害+被攻擊者力量*0.3的英雄傷害
如果反擊光環(huán)等級(jí)等于3 那么被攻擊單位給予攻擊單位30點(diǎn)基礎(chǔ)傷害+被攻擊者力量*0.4的英雄傷害
怎么樣,簡單吧,動(dòng)動(dòng)小手,反擊光環(huán)就做出來了。(穴居惡魔的尖刺和先知的荊棘光環(huán)不能實(shí)現(xiàn)反擊光環(huán)的效果,可詳細(xì)對(duì)比下就知道為什么這個(gè)技能不得不借助觸發(fā)器來做了)
總結(jié)
以上是生活随笔為你收集整理的Jass 技能模型定义(—):半人马酋长的反击光环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国合伙人
- 下一篇: 业余时间如何赚钱(手机打字赚钱一单一结)