找回密码
 点一下
查看: 1160|回复: 3

求高手看看这个技能的整体联系...我只能看懂一部分.....不能掌握它们的联系.

[复制链接]
发表于 2010-10-13 13:25:11 | 显示全部楼层 |阅读模式
如题所述.
我在其它地图中看到的一个技能,感觉效果很不错.想把它移植出来看看.其中大部分的地方我勉强可以看懂..//注释后内容我的写的,请大大们看看有没有错误.... 晕了,刚才电脑卡死了...我的注释没有保存完整 ....不过还好丢失的不多 ...主要请高手看下下面几个触发是什么意思?

但是在几个关键的地方却卡住了.主要想问的是.

    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]
发表于 2010-10-13 14:30:11 | 显示全部楼层
是个t转j,没啥看头……不如自己写
回复

使用道具 举报

 楼主| 发表于 2010-10-13 15:25:56 | 显示全部楼层
..........楼上好强大...
不过想问楼上..........
    call EnableTrigger(udg_trigger92) //开启此触发
    call EnableTrigger(udg_trigger91) //开启此触发
    call EnableTrigger(udg_trigger90) //开启此触发
这几个触发是什么东东啊?
问什么没有function........
回复

使用道具 举报

发表于 2010-10-13 16:24:22 | 显示全部楼层
[jass]set udg_trigger90=CreateTrigger()
//新建一个触发器并赋值给udg_trigger90
call DisableTrigger(udg_trigger90)
//关闭触发器udg_trigger90
call TriggerRegisterTimerEventPeriodic(udg_trigger90,0.01)
//为触发器udg_trigger90注册一个0.01秒的周期事件
call TriggerAddAction(udg_trigger90,function Trig_dbtx2_Actions)
//为触发器udg_trigger90添加动作,动作是Trig_dbtx2_Actions函数[/jass]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-7-3 01:20 , Processed in 0.037075 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表