|
如题所述.
我在其它地图中看到的一个技能,感觉效果很不错.想把它移植出来看看.其中大部分的地方我勉强可以看懂..//注释后内容我的写的,请大大们看看有没有错误.... 晕了,刚才电脑卡死了...我的注释没有保存完整 ....不过还好丢失的不多 ...主要请高手看下下面几个触发是什么意思?
但是在几个关键的地方却卡住了.主要想问的是.
call EnableTrigger(udg_trigger92) //开启此触发
call EnableTrigger(udg_trigger91) //开启此触发
call EnableTrigger(udg_trigger90) //开启此触发
这几个触发的功能是什么?我在那个地图的j文件中找到的这几个触发都没有function起头和结束...只有set和call
让我搞不懂是怎么回事....希望高手赐教.
[jass]
function Trig_dbtx1_Conditions takes nothing returns boolean
if(not(GetSpellAbilityId()=='A078'))then //释放技能等于 XXXX
return false
endif
return true
endfunction
function Trig_dbtx1_Actions takes nothing returns nothing
call DisableTrigger(GetTriggeringTrigger()) //关闭当前触发
call PlaySoundBJ(udg_sound67) //播放音效
set udg_unit21=GetTriggerUnit() //udg_unit21为触发单位
set udg_locations11[1]=GetSpellTargetLoc() //udg_locations11[1]技能释放点 !这是个变量组
call SetUnitInvulnerable(GetTriggerUnit(),true) //触发单位为无敌
call CameraSetEQNoiseForPlayer(GetOwningPlayer(udg_unit21),30.00) //震动镜头
set bj_forLoopAIndex=1 //循环初始值
set bj_forLoopAIndexEnd=5 //循环结束值
loop //开始循环
exitwhen bj_forLoopAIndex>bj_forLoopAIndexEnd //对比大小,判断是否结束.一共5次.
call CreateNUnitsAtLoc(1,'e01D',GetOwningPlayer(GetTriggerUnit()),udg_locations11[1],bj_UNIT_FACING) //创建 1 个 "地暴天星" 给 "Player1" 在 udg_locations11[1] 面向触发单位(这个面向角度不是很确定,但是无伤大雅吧.)"
call SetUnitPathing(GetLastCreatedUnit(),false) //刚才创建的 地爆天星 ,关闭它的碰撞.
call GroupAddUnitSimple(GetLastCreatedUnit(),udg_groups05[1]) //把最后创建的单位添加到单位组 groups05[1] !这是个变量组,目前已经看到两个变量组了.
set bj_forLoopAIndex=bj_forLoopAIndex+1
endloop //结束循环.
set bj_forLoopAIndex=1 //循环初始值
set bj_forLoopAIndexEnd=30 //循环结束值
loop //开始循环
exitwhen bj_forLoopAIndex>bj_forLoopAIndexEnd //对比大小,判断是否结束,一共30次.
call CreateNUnitsAtLoc(1,'e005',GetOwningPlayer(GetTriggerUnit()),udg_locations11[1],bj_UNIT_FACING) //"创建 1个 "空间转移" 给 触发单位所有者 在 "locations11[1] (技能释放点)," 面向触发单位"
call GroupAddUnitSimple(GetLastCreatedUnit(),udg_groups05[2]) 把最后创建的单位添加到单位组 groups05[2] !这是个变量组,目前已经看到两个变量组了.
call SetUnitTimeScalePercent(GetLastCreatedUnit(),200.00) //"改变 最后创建单位 的动画播放速度为200%
call SetUnitPathing(GetLastCreatedUnit(),false) //关闭最后创建的单位 的 碰撞....没有看到新东西,有点无聊的说.和上面写的都一样.....
set bj_forLoopAIndex=bj_forLoopAIndex+1
endloop //结束循环.
call CreateNUnitsAtLoc(1,'e01G',GetOwningPlayer(GetTriggerUnit()),udg_locations11[1],bj_UNIT_FACING) //创建单位 神罗2 给触发单位所有者 在 技能释放点 面向触发单位.
call GroupAddUnitSimple(GetLastCreatedUnit(),udg_groups05[2]) //添加最后创建的单位到单位组 groups05[2]
call SetUnitPathing(GetLastCreatedUnit(),false) //关闭最后创建的单位 碰撞.
call EnableTrigger(udg_trigger92) //开启此触发
call EnableTrigger(udg_trigger91) //开启此触发
call EnableTrigger(udg_trigger90) //开启此触发
call TriggerSleepAction(6.00) //等待六秒
call DisableTrigger(udg_trigger90) //开启此触发
endfunction
function Trig_dbtx2_Func001A takes nothing returns nothing
set udg_real10=(udg_real10+0.06) //设定实数 real10+0.06
call SetUnitScalePercent(GetEnumUnit(),udg_real10,udg_real10,udg_real10) //"改变 选取单位 的尺寸缩放为 reall+0.06
endfunction
function Trig_dbtx2_Actions takes nothing returns nothing
call ForGroupBJ(udg_groups05[1],function Trig_dbtx2_Func001A) //给 group05[1] 单位组中的单位做 Trig_dbtx2_Func001A 的动作.
endfunction
function Trig_dbtx3_Func001Func003002003001 takes nothing returns boolean
return(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) //检查匹配的单位的单位类别为 建筑等于假.
endfunction
function Trig_dbtx3_Func001Func003002003002001 takes nothing returns boolean
return(IsUnitAliveBJ(GetFilterUnit())==true) //匹配单位是存活的等于真.
endfunction
function Trig_dbtx3_Func001Func003002003002002 takes nothing returns boolean
return(IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(udg_unit21))==true) //匹配单位是 unit21 所有者的敌对单位 为真.
endfunction
function Trig_dbtx3_Func001Func003002003002 takes nothing returns boolean
return GetBooleanAnd(Trig_dbtx3_Func001Func003002003002001(),Trig_dbtx3_Func001Func003002003002002()) //满足这两个条件.
endfunction
function Trig_dbtx3_Func001Func003002003 takes nothing returns boolean
return GetBooleanAnd(Trig_dbtx3_Func001Func003002003001(),Trig_dbtx3_Func001Func003002003002()) //同上
endfunction
function Trig_dbtx3_Func001Func004A takes nothing returns nothing
call SetUnitPositionLoc(GetEnumUnit(),udg_locations11[1]) //立即移动选区单位到 技能点 locations[1]
call UnitDamageTargetBJ(udg_unit21,GetEnumUnit(),I2R(GetHeroStatBJ(bj_HEROSTAT_AGI,udg_unit21,true)),ATTACK_TYPE_CHAOS,DAMAGE_TYPE_MAGIC) //命令unit21 对 选取单位 造成英雄属性 敏捷的伤害,攻击类型为混乱,伤害类型法术
endfunction
function Trig_dbtx3_Func001C takes nothing returns boolean
if(not(IsTerrainPathableBJ(udg_locations11[1],PATHING_TYPE_WALKABILITY)==false))then //如果 locations[1]的地面通行状态为关闭 等于假 否则返回 真 这个地方看不太明白...
return false
endif
return true
endfunction
function Trig_dbtx3_Actions takes nothing returns nothing
if(Trig_dbtx3_Func001C())then //判断上面那个 地形通行状态....不是很清楚两者的联系....
set udg_groups05[3]=GetUnitsInRangeOfLocMatching(600.00,udg_locations11[1],Condition(function Trig_dbtx3_Func001Func003002003)) // locations[1]为中心 半径600内符合 Trig_dbtx3_Func001Func003002003 (上面那四个条件)
call ForGroupBJ(udg_groups05[3],function Trig_dbtx3_Func001Func004A) //对单位组 groups05[3]中的单位 运行 Trig_dbtx3_Func001Func004A 这个函数
call GroupClear(udg_groups05[3]) //清空groups05[3]单位组
else
call DoNothing() //无动作
endif
endfunction
function Trig_dbtx4_Conditions takes nothing returns boolean
if(not(GetSpellAbilityId()=='A078'))then //释放技能等于 A078
return false
endif
return true
endfunction
function Trig_dbtx4_Func006Func002001003001 takes nothing returns boolean
return(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) //检查匹配单位的类别不等于 建筑
endfunction
function Trig_dbtx4_Func006Func002001003002001 takes nothing returns boolean
return(IsUnitAliveBJ(GetFilterUnit())==true) //检查匹配时存活的.
endfunction
function Trig_dbtx4_Func006Func002001003002002 takes nothing returns boolean
return(IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(udg_unit21))==true) //匹配单位是 unit21 所有者的敌对单位
endfunction
function Trig_dbtx4_Func006Func002001003002 takes nothing returns boolean
return GetBooleanAnd(Trig_dbtx4_Func006Func002001003002001(),Trig_dbtx4_Func006Func002001003002002()) //满足两个条件
endfunction
function Trig_dbtx4_Func006Func002001003 takes nothing returns boolean
return GetBooleanAnd(Trig_dbtx4_Func006Func002001003001(),Trig_dbtx4_Func006Func002001003002()) //满足这两个条件
endfunction
function Trig_dbtx4_Func006Func002A takes nothing returns nothing
call UnitDamageTargetBJ(GetTriggerUnit(),GetEnumUnit(),(I2R(GetHeroStatBJ(bj_HEROSTAT_AGI,GetTriggerUnit(),true))*80.00),ATTACK_TYPE_CHAOS,DAMAGE_TYPE_MAGIC) //命令 触发单位 对 选区单位 造成 敏捷乘以80的 伤害,攻击类型:混乱 伤害类型 魔法
call GroupAddUnitSimple(GetEnumUnit(),udg_groups05[4]) //添加选取单位到 groups05[4]
endfunction
function Trig_dbtx4_Func006Func003001003001 takes nothing returns boolean
return(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false) //检查匹配单位非建筑物
endfunction
function Trig_dbtx4_Func006Func003001003002001 takes nothing returns boolean
return(IsUnitAliveBJ(GetFilterUnit())==true) //检查匹配单位是存活的
endfunction
function Trig_dbtx4_Func006Func003001003002002 takes nothing returns boolean
return(IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(udg_unit21))==true) //匹配单位是 unit21 所有者的敌对单位
endfunction
function Trig_dbtx4_Func006Func003001003002 takes nothing returns boolean
return GetBooleanAnd(Trig_dbtx4_Func006Func003001003002001(),Trig_dbtx4_Func006Func003001003002002()) //满足这两个条件.
endfunction
function Trig_dbtx4_Func006Func003001003 takes nothing returns boolean
return GetBooleanAnd(Trig_dbtx4_Func006Func003001003001(),Trig_dbtx4_Func006Func003001003002()) //满足这两个条件.
endfunction
function Trig_dbtx4_Func006Func003A takes nothing returns nothing
call UnitDamageTargetBJ(GetTriggerUnit(),GetEnumUnit(),(I2R(GetHeroStatBJ(bj_HEROSTAT_AGI,GetTriggerUnit(),true))*40.00),ATTACK_TYPE_CHAOS,DAMAGE_TYPE_MAGIC) //"命令 触发单位 对 选区单位 造成 敏捷乘以40的 伤害,攻击类型:混乱 伤害类型 魔法
call GroupAddUnitSimple(GetEnumUnit(),udg_groups05[4]) //添加选取单位到单位组 udg_groups05[4]
endfunction
function Trig_dbtx4_Func006C takes nothing returns boolean
if(not(UnitHasItemOfTypeBJ(GetTriggerUnit(),'I05L')==true))then //判断单位是否持有 IO5L 这个物品.
return false
endif
return true
endfunction
function Trig_dbtx4_Func007A takes nothing returns nothing
call RemoveUnit(GetEnumUnit()) //删除 选取单位 ....为什么要删除呢?
endfunction
function Trig_dbtx4_Func008A takes nothing returns nothing
call RemoveUnit(GetEnumUnit()) //删除 选取单位 ....为什么要删除呢?
endfunction
function Trig_dbtx4_Actions takes nothing returns nothing
call DisableTrigger(GetTriggeringTrigger()) //关闭当前触发
call CameraClearNoiseForPlayer(GetOwningPlayer(udg_unit21)) //停止 unit21玩家的镜头震动
call DisableTrigger(udg_trigger91) //关闭此触发
call SetUnitInvulnerable(udg_unit21,false) //设定 unit21为可以攻击的
if(Trig_dbtx4_Func006C())then //判断单位是否持有物品....
call ForGroupBJ(GetUnitsInRangeOfLocMatching(500.00,udg_locations11[1],Condition(function Trig_dbtx4_Func006Func002001003)),function Trig_dbtx4_Func006Func002A) //那个500 是什意思?后面的伤害函数里面应该已经有了选取范围...?满足上面的那些条件并使用乘以80 的伤害.
else
call ForGroupBJ(GetUnitsInRangeOfLocMatching(500.00,udg_locations11[1],Condition(function Trig_dbtx4_Func006Func003001003)),function Trig_dbtx4_Func006Func003A) //那个500 是什意思?后面的伤害函数里面应该已经有了选取范围...?满足上面的那些条件并使用乘以40 的伤害.
endif
call ForGroupBJ(udg_groups05[1],function Trig_dbtx4_Func007A) //对单位组groups05[1] 运行 Trig_dbtx4_Func007A ...是清除里面的单位吗?
call ForGroupBJ(udg_groups05[2],function Trig_dbtx4_Func008A) //单位组和函数变化,意思同上..疑问同上....
set bj_forLoopAIndex=1 //循环初始值
set bj_forLoopAIndexEnd=5 //循环结束值
loop
exitwhen bj_forLoopAIndex>bj_forLoopAIndexEnd
call CreateNUnitsAtLoc(1,'e01F',GetOwningPlayer(udg_unit21),PolarProjectionBJ(udg_locations11[1],200.00,(60.00*I2R(GetForLoopIndexA()))),bj_UNIT_FACING) //创建 e01F 给unit21的所有者 在 locations[1]出距离200 角度为60*GetForLoopIndexA 面向触发单位
call UnitApplyTimedLife(GetLastCreatedUnit(),'BHwe',3.00) //设定 最后创建单位的生命周期为 水元素 持续3秒
call AddSpecialEffectLocBJ(PolarProjectionBJ(udg_locations11[1],GetRandomReal(100.00,500.00),GetRandomDirectionDeg()),"Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl") //使用极坐标 在locations[1]处 随机距离 随机角度 创建 特效
call DestroyEffect(GetLastCreatedEffectBJ()) //删除最后创建的特效
set bj_forLoopAIndex=bj_forLoopAIndex+1
endloop
set bj_forLoopAIndex=1
set bj_forLoopAIndexEnd=12
loop
exitwhen bj_forLoopAIndex>bj_forLoopAIndexEnd
call CreateNUnitsAtLoc(1,'e01F',GetOwningPlayer(udg_unit21),PolarProjectionBJ(udg_locations11[1],400.00,(30.00*I2R(GetForLoopIndexA()))),bj_UNIT_FACING)
call UnitApplyTimedLife(GetLastCreatedUnit(),'BHwe',3.00)
set bj_forLoopAIndex=bj_forLoopAIndex+1
endloop
call DisableTrigger(udg_trigger91)
call EnableTrigger(udg_trigger93)
call TriggerSleepAction(0.14)
call DisableTrigger(udg_trigger93)
call GroupClear(udg_groups05[1])
call GroupClear(udg_groups05[2])
call GroupClear(udg_groups05[4])
set udg_unit21=null
set udg_real10=0.00
call RemoveLocation(udg_locations11[1])
call EnableTrigger(udg_trigger89)
endfunction
function Trig_dbtx5_Func001A takes nothing returns nothing
call AddSpecialEffectLocBJ(GetUnitLoc(GetEnumUnit()),"Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl")
call DestroyEffect(GetLastCreatedEffectBJ())
call SetUnitPositionLoc(GetEnumUnit(),PolarProjectionBJ(GetUnitLoc(GetEnumUnit()),32.00,AngleBetweenPoints(udg_locations11[1],GetUnitLoc(GetEnumUnit()))))
endfunction
function Trig_dbtx5_Actions takes nothing returns nothing
call ForGroupBJ(udg_groups05[4],function Trig_dbtx5_Func001A)
endfunction
set udg_trigger90=CreateTrigger()
call DisableTrigger(udg_trigger90)
call TriggerRegisterTimerEventPeriodic(udg_trigger90,0.01)
call TriggerAddAction(udg_trigger90,function Trig_dbtx2_Actions)
set udg_trigger91=CreateTrigger()
call DisableTrigger(udg_trigger91)
call TriggerRegisterTimerEventPeriodic(udg_trigger91,0.50)
call TriggerAddAction(udg_trigger91,function Trig_dbtx3_Actions)
set udg_trigger92=CreateTrigger()
call DisableTrigger(udg_trigger92)
call TriggerRegisterAnyUnitEventBJ(udg_trigger92,EVENT_PLAYER_UNIT_SPELL_ENDCAST)
call TriggerAddCondition(udg_trigger92,Condition(function Trig_dbtx4_Conditions))
call TriggerAddAction(udg_trigger92,function Trig_dbtx4_Actions)
[/jass] |
|