|
在上一个帖子里我们已经有了自己的函数,现在我们看看如何把这个函数在游戏中用起来。
我们需要新建一张空白地图,并把默认的初始化触发关闭,然后新建一个自己的触发,命名为Rush,如下图:
为了方便,我们先用WE的普通语句写好事件部分和技能的条件,这是编写技能或其他RPG内容的最基本知识,因为在WE的世界里,所有的东西都需要一根“导火线”去点燃(“触发”),这根“导火线”就是“事件”,而事件是指魔兽游戏中发生的一些特定事情,如单位死亡或单位开始施放技能等等。如果你不了解这点,建议你停止阅读本文,先去查看相关教程。
触发的基本语句有了,然后我们点击菜单上的编辑-->转化为自定义文本,如图示:
然后我们会看到下面的触发部分变成了纯文本,如图:
我们还需要建立相应的变量:
现在我们的工作开始了,我们要做的,是改造以下部分:
[codes=jass]function Trig_Rush_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'ANcl' ) ) then
return false
endif
return true
endfunction
function Trig_Rush_Actions takes nothing returns nothing
endfunction
//===========================================================================
function InitTrig_Rush takes nothing returns nothing
set gg_trg_Rush = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Rush, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Rush, Condition( function Trig_Rush_Conditions ) )
call TriggerAddAction( gg_trg_Rush, function Trig_Rush_Actions )
endfunction [/codes]
首先我们简化一下触发的条件,让我们的程序看起来更简介:
[codes=jass] function Trig_Rush_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'ANcl'
endfunction [/codes]
接着我们把之前做的野蛮冲撞代码放置在触发的上面,于是:
[codes=jass] function UnitrushBuff takes unit whichUnit returns boolean
if GetUnitAbilityLevel( whichUnit, 'BPSE' ) > 0 or GetUnitAbilityLevel( whichUnit, 'BSTN' ) > 0 then
return false
endif
return true
endfunction
function UnitRush_Effects takes nothing returns nothing
local real dx = GetUnitX(udg_caster) + UnitrushSpeed()*Cos(udg_angle)
local real dy = GetUnitY(udg_caster) + UnitrushSpeed()*Sin(udg_angle)
if udg_bounces == 0 or GetUnitState( udg_caster, UNIT_STATE_LIFE ) == 0.0 or not(UnitrushBuff(udg_caster)) then
call PauseTimer( udg_unitrushtimer )
set udg_caster = null
else
call SetUnitPosition( udg_caster, dx, dy )
set udg_bounces = udg_bounces - 1
endif
endfunction
function UnitRush takes unit caster returns nothing
set udg_caster = caster
set udg_angle = GetUnitFacing( caster ) * bj_DEGTORAD
set udg_bounces = R2I(UnitrushDistance()/UnitrushSpeed())
call TimerStart( udg_unitrushtimer, 0.05, true, function UnitRush_Effects )
endfunction
function Trig_Rush_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'ANcl'
endfunction
function Trig_Rush_Actions takes nothing returns nothing
endfunction [/codes]
到现在为止,我们编写的自定义函数和触发仍然不存在任何联系,那么现在我们就要把它们联系起来,这是很关键的一步,作为一个初学者,你可以不理解自定义函数的内容,但必须清楚理解这一步骤才能学会制作技能:
[codes=jass] function Trig_Rush_Actions takes nothing returns nothing
call UnitRush( GetTriggerUnit())
endfunction [/codes]
原本空白的触发动作部分,加入了这么简单的一句,它是至关重要的,它的意思是,对施放“通魔”的单位处理一系列动作,而这些动作正是我们之前在自定义函数里预设好的。从这里我们可以看到无论是Jass还是一般的触发,都是以游戏中的事件开始的,必须有相应的事件去“触发”一系列动作,才能实现所有你希望的效果。
除了核心函数,我们还需要一些辅助函数,让这个技能更真实,比如当单位被打晕的时候,技能要能停下来,因此我们加入了UnitrushBuff函数,它的作用是检查某单位有没有被打晕。
最后,要让技能顺利执行,我们还要修改一下技能本身的设定,打开单位编辑器,如下图:
由于本文主要是叙述Jass的用法,技能修改的过程就不叙述了,实在不明白的,可以把地图下回去看。
整个过程均为文本操作,而且WE中对纯文本的支持很不好,因此建议下载一个叫TESH的工具,它能嵌入你的WE中,方便你的Jass编辑。 |
|