|
发表于 2011-12-3 08:38:48
|
显示全部楼层
如果LZ仅仅是演示思路的话,最好注明一下,以免不知道的同学拿去直接使用了~
并且,如果只是演示思路,那么本楼下面这整段都请无视~
如果不仅仅是演示思路的话,那么请接下去看~
首先,效果什么的做得还真不错~[s:191]
然后,请做好接受冷水的心理准备~
残影:
[trigger]canyxiaog
事件
时间 - 每当游戏逝去 0.50 秒
条件
动作
单位 - 创建 1 个 残影特效单位 给 玩家1(红色) 在 (Canying 的位置) ,面向角度为 (Canying 的面向角度) 度
单位 - 为 (最后创建的单位) 设置 水元素 类型的生命周期,持续时间为 0.50 秒
系统<YDWE> - 设置系统自动排泄功能开启 TRUE
[/trigger]
我可以吐槽下最后那个YD自动排泄吗。。。
还有个想吐槽的居然是创建给玩家一。。。。不过由此看来应该仅仅是思路了
[trigger]canyxiaog siw
事件
单位 - 任意单位 死亡
条件
((死亡单位) 的类型) 等于 残影单位
动作
特殊效果 - 在 (Canying 的位置) 创建特效: Abilities\\Weapons\\Bolt\\BoltImpact.mdl
特殊效果 - 在 1.00 秒后删除 最后创建的特效 <New>
单位组 - 选取 (半径为 280.00 圆心为 (Canying 的位置) 且满足 (((匹配单位) 是 ((触发单位) 的所有者) 的敌对单位) 等于 TRUE) 的所有单位) 内所有单位做动作
Loop - 动作
特殊效果 - 创建并绑定特效到 origin 对 (选取单位) ,使用模型: Abilities\\Weapons\\Bolt\\BoltImpact.mdl
特殊效果 - 在 0.50 秒后删除 最后创建的特效 <New>
[/trigger]
动作第二条,呵呵……在指定时间后删除特效。。请问LZ这个演示是只给专门用YD动作的同学看的吗?不是的话指定时间后删除特效这类东西请用普通计时器解决~
另外,除非canyxiaog内开启的YD自动排泄能清理这个T里的东西,否则有两个点和一个单位组泄漏
电子涡流:
[jass]function InitTrig_qiany1 takes nothing returns nothing
set gg_trg_qiany1 = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_qiany1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_qiany1, Condition( function Trig_qiany1_Conditions ) )
call TriggerAddAction( gg_trg_qiany1, function Trig_qiany1_Actions )
endfunction[/jass]
触发器在初始化后一般不需要一直让一个变量记录着,而且如果后面需要,一般也是用GetTriggeringTrigger,基本用不到记录触发器的变量
所以,推荐使用局部变量初始化,并在触发器注册和添加完动作后将该变量清空
[jass]function Trig_qiany1_Actions takes nothing returns nothing
call RemoveLocation( udg_Po_3_JiShiYong )
call RemoveLocation( udg_Po_JiShanFYue[3] )
call RemoveLocation( udg_Po_JiShanFYue[4] )
call RemoveLocation( udg_Po_JiShanFYue[5] )
set udg_qianyindanw = GetSpellAbilityUnit()
set udg_Mubdanw = GetSpellTargetUnit()
set udg_Po_JiShanFYue[3] = GetUnitLoc(udg_qianyindanw)
set udg_Po_JiShanFYue[4] = GetUnitLoc(udg_Mubdanw)
set udg_Po_JiShanFYue[5] = GetSpellTargetLoc()
set udg_Po_3_JiShiYong = PolarProjectionBJ(udg_Po_JiShanFYue[5], 10.00, AngleBetweenPoints(udg_Po_JiShanFYue[5], udg_Po_JiShanFYue[3]))
call AddLightningLoc( "CLPB", udg_Po_JiShanFYue[4], udg_Po_JiShanFYue[3] )
set udg_Shandxiaog = bj_lastCreatedLightning
call PauseUnit( udg_Mubdanw, true )
call EnableTrigger( gg_trg_qiany2 )
endfunction[/jass]
首先我觉得在一开始先清除点这个写法很奇怪……这不就意味着这一次施法所创建的点要到下次施法才会清除?
然后,LZ既然用J了那么初始化变量为何还使用T的变量窗口?。。。
[jass]call AddLightningLoc( "CLPB", udg_Po_JiShanFYue[4], udg_Po_JiShanFYue[3] )
set udg_Shandxiaog = bj_lastCreatedLightning[/jass]
这两句可以并起来,直接给udg_Shandxiaog赋值即可
而且,为何不直接使用AddLightningEx?AddLightningLoc所调用的也是AddLightningEx,虽说写法简化了,但是效率下去了。。
[jass] call PauseUnit( udg_Mubdanw, true )[/jass]
使用暂停单位会对BUFF等造成影响,如果是阻止单位做任何动作的话,可以使用缠绕等技能或别的方法,总之不推荐使用暂停
[jass]function Trig_qiany1_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A006' ) ) then
return false
endif
return true
endfunction[/jass]
然后是这个条件的写法,不够简洁呢。。完全可以写成下面这样~
[jass]function Trig_qiany1_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A006'
endfunction[/jass]
在qiany2里,
AddSpecialEffectLocBJ这个BJ仅仅是将AddSpecialEffectLoc这个函数的两个参数位置换了下,但是LZ使用了前者,这个做法极度影响效率。。
YDWETimerDestroyEffect这个之前已经说过了就不重复了
TriggerRegisterTimerEventPeriodic这个事件,其实就是TriggerRegisterTimerEvent,只不过少了个是否循环计时的布尔值参数,但是前者采用调用后者的方法,影响效率
关于“牵引”这个技能,蓝猫放完技能是会减速的,LZ没有做此效果
超负荷:
[trigger]ChaoFuHe3
事件
单位 - 任意单位 被攻击
条件
(攻击单位) 等于 Fengbao
动作
设置 Beigongj = (被攻击单位)
特殊效果 - 删除 TeXiao[0]
特殊效果 - 删除 TeXiao[1]
等待 0.50 秒
特殊效果 - 删除 (新建特效 Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl 并绑定到 Beigongj 的 origin 附加点上)
以下省略……
[/trigger]
LZ用的是(被攻击)呢……用了(被攻击)动作里还有等待0.5秒呢……
LZ没想过S流吗?我表示拉一个单位过来然后A的同时疯狂S超级爽!像我这么慢手速的都能只靠施放一次主动技能放出三个超负荷~~~~
这个技能果断2级开始直接点满啊!第一级给牵引,2级开始拉过来A然后S到死~~~~~
球形闪电:
[jass]call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(GetTriggerUnit()), GetUnitLoc(udg_Unit_JiShanFYue), GetUnitFacing(GetTriggerUnit()) )
set udg_Unit_JiShanFYue2 = GetLastCreatedUnit()[/jass]
这个是神马?!在指定点创建N个单位结果数量却是1?!
然后还用GetLastCreatedUnit来获取最后创建的单位?!
何必呢……直接给变量赋值CreateUnit就好了额。。
另外,这个是施法事件是能直接捕捉到触发玩家的,不需要先获取触发单位再获取其拥有者
SetUnitAbilityLevelSwapped这个函数。。表示仅仅是SetUnitAbilityLevel换下参数位置的说~
[jass]if ( Trig_JiShanFeiYue1_Func017C() ) then[/jass]
不知LZ为何要写成这样的形式,Trig_JiShanFeiYue1_Func017C()是下面这样的:
[jass]function Trig_JiShanFeiYue1_Func017C takes nothing returns boolean
if ( not ( IsTerrainPathableBJ(udg_Po_JiShanFYue[2], PATHING_TYPE_WALKABILITY) == true ) ) then
return false
endif
return true
endfunction[/jass]
我觉得没有必要多调用一次函数,直接将该条件函数里的判断式写到动作函数里即可
最后再吐个槽,这么多的问题只值3%?!如果LZ说的是视觉特效模拟完善度为97%的话,请注明~[s:191]
嘛。。开玩笑的~
以上~ |
|