|
发表于 2008-3-5 14:57:02
|
显示全部楼层
引用楼主Renee于2008-03-04 14:53发表的 [压箱底活技]制作一个昏迷光环(一个更完美的修正版本,原版WE也能打开) :
话说要做头目自然得要有几手压箱底的手艺~~
今天没事拿其中一个出来做个随便的演示罢~~话说其中用到了一些我6年来从未公开展示过的东西~~
不过由于我实在太懒暂时只有演示~~具体对里面用到的各种BUG和方法的解释~~还是下次啥时候想起来再说罢~~
这个昏迷光环嘛~~就是在光环作用范围下的敌人都会陷入昏迷状态~~而离开光环作用的单位则立刻不会再昏迷~~
一般来说~~如果想学习的话~~注意其中几个要点~~
1]如何判断单位获得光环的buff呢?~~单位进入范围是绝对不准的~~因为光环的范围计算方法和触发不一样~~而且有延时~~这演示是怎么实现判断的呢~~
2]如何判断单位失去光环的buff呢?~~显然用单位离开范围来判断是不行的~~光环可是有延时的~~何况也根本没有单位离开范围的事件~~这演示是如何使得昏迷效果正好持续到buff消失的呢~~
3]如何让捕捉到的单位昏迷呢?~~用Dummy System?隐藏单位扔锤子?~~这演示可不用隐藏单位~~这个附加状态的方法也是一个密法~~这法子可不止能附加几个状态而以哦~~很多地方可以做的比Dummy System完美得多~~
4]关于处理多个昏迷光环的共存的问题~~以及两个敌对单位之间的互相昏迷
5]合理地搭配和利用bug~~留下bug中想要的部分~~除去bug中的负面因素~~
编辑:
3月5日,加了一句触发,修正了潜在的Crash问题~~
理解一下,看对不对。
1、获取光环buff:通过单位受到伤害来获取。首先在地图建立的时候让所有单位创建受到伤害时触发Effect,然后当敌对单位接近龙卷风或者什么buff的时候,会认为受到伤害,再判断伤害是否为0,是否受到龙卷风光环的抚慰,如果满足条件,则可以确定已经被光环所笼罩
2、失去光环buff:当获取到光环后,会立即删除掉光环的效果,然后附加有时限的眩晕效果,三秒后(或者是1秒 不清楚),光环自动检测的时候,如果单位身上不存在眩晕光环,则再次给单位附上龙卷风光环,单位再次受到伤害,再次戴上眩晕。如果光环离开,则三秒后眩晕效果消失。
3、如何让捕捉到的单位昏迷:给单位吃书,书里面带着两个技能,一个昏迷宝典一个防御宝典,效果都是昏迷光环,和英雄身上的昏迷光环是用的一个buff。
4、由于对buff很不了解,所以不知道什么情况下能共存 什么情况下不能。
5、由于不知道buff的bug,所以不知道怎么消除。
然后顺带帮jass比较弱的朋友们解释一下里面一点点的jass
if (((GetUnitCurrentOrder(GetTriggerUnit())!=851973)or(UnitHasBuffBJ(GetTriggerUnit(), 'BPSE')))) then
这一句 就是当满足GetUnitCurrentOrder(GetTriggerUnit())!=851973或者满足(UnitHasBuffBJ(GetTriggerUnit(), 'BPSE')))) 的时候,执行之后的语句
其中 GetUnitCurrentOrder(GetTriggerUnit())!=851973的意思是 触发单位当前被触发的命令ID不等于851973
在《WE自学手册》的命令碼與命令字串對照表中查询得知
851973 (0xD0005)=(stun) 。當部隊被暈眩(催眠、空中鎖鍊)時會收到此命令。(但群體傳送、網子的目標不會)。
也就是当伤害不是由眩晕引起的时候。
(UnitHasBuffBJ(GetTriggerUnit(), 'BPSE')))) 是单位身上带有BPSE这个buff也就是昏迷光环 (3重buff)的时候
function Trig_Init_Func002A takes nothing returns nothing
call TriggerRegisterUnitEvent( gg_trg_Effect, GetEnumUnit(), EVENT_UNIT_DAMAGED )
endfunction
function Trig_Init_Actions takes nothing returns nothing
call Cheat( "iseedeadpeople" )
call ForGroupBJ( GetUnitsInRectAll(GetEntireMapRect()), function Trig_Init_Func002A )
endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
set gg_trg_Init = CreateTrigger( )
call TriggerAddAction( gg_trg_Init, function Trig_Init_Actions )
endfunction
至于这一段 就更简单了 翻译成t就是
事件 地图初始化时
动作 开启密集iseedeadpeople(地图全开)
选定地图内所有单位,执行动作
当单位受到伤害时,触发Effect
至于为什么还有一个Reg 是因为Init注册的是所有地图初始化时的单位,游戏途中创建的单位(比如水元素)则需要在他创建出来以后再注册进Effect
有错误的地方请头目指正 另外希望详解buff的bug |
|