找回密码
 点一下
查看: 1844|回复: 13

神奇的测试-闪电链

[复制链接]
发表于 2009-10-6 15:41:28 | 显示全部楼层 |阅读模式
今天做技能碰到了诡异的现象,发现闪电链的伤害有时候不能被触发正确地捕抓到。

测试如下:

注册触发:显示伤害值。

使用1点伤害的闪电链打目标(6次跳跃,0衰减),有时候会发生不能捕捉伤害触发的事件。。。。
发表于 2009-10-6 15:51:53 | 显示全部楼层
对LS进行补充:
这种情况发生在闪电链施法者的Owner没有闪电链下一目标的视野时,闪电链自动停止而已。
用16连999999伤害闪电链小心得对一个兵团的一个小角(其余看不见)使用它。
你会发现根本只有你看得见的人死掉了。其余的人根本没事。
回复

使用道具 举报

发表于 2009-10-6 16:05:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-10-6 17:36:31 | 显示全部楼层
就是普通的闪电,请全图查看
回复

使用道具 举报

发表于 2009-10-6 17:36:53 | 显示全部楼层
引用第2楼徘徊精灵于2009-10-06 16:05发表的  :
闪电链只有第一下是施法者放的
其余都是创建马甲放的
而创建的马甲是没有视野的
所以施法者看不见的
马甲同样看不见

补充一点

伤害是由施法者造成的
回复

使用道具 举报

发表于 2009-10-7 23:18:50 | 显示全部楼层
其余都是创建马甲放的
...........
暴血也用马甲啊. 犀利.
回复

使用道具 举报

发表于 2009-10-7 23:21:25 | 显示全部楼层
这跟马甲有什么关系了?
回复

使用道具 举报

发表于 2009-10-8 13:04:32 | 显示全部楼层
的确跟马甲没什么关系. 闪电效果可以检测可见度,包括创建的时候就有这选项,如果没有那么闪电效果就不创建,至于暴雪用来做什么...仅仅需要检测闪电是否创建成功..就可以决定闪电类魔法是不是继续XX蹦XX了.
以上 纯属猜想
回复

使用道具 举报

发表于 2009-10-8 14:50:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-10-9 12:39:05 | 显示全部楼层
某些时候会导致找不到,但是一般都可以找到,是不是很诡异呢。

大约平均测试10次就会有一次找不到,而且是从某一个跳跃节点开始的,一旦某一个找不到了以后这一道闪电后面的就都找不到了。
回复

使用道具 举报

 楼主| 发表于 2009-10-9 12:55:05 | 显示全部楼层
顺便附送一个最新制作的闪电链函数

[jass]
//==Sample:===
call ChainLightning_Start(su,tu,UnitSelectFilter,JumpCount,JumpRange,TempGroup)
[/jass]

[jass]function CreateGroupTimed_End takes nothing returns nothing
    local integer tmIndex=GetTimerIndex(GetExpiredTimer())
    call DestroyGroup(SYS_TimerData_Group[tmIndex])
    call ReleaseTimer(GetExpiredTimer())
endfunction
function CreateGroupTimed takes real looptime returns group
    local integer tmIndex=GetTimerIndex(GetTimer())
    set SYS_TimerData_Group[tmIndex]=CreateGroup()
    call TimerStart(SYS_Timer[tmIndex],looptime,false,function CreateGroupTimed_End)
    return SYS_TimerData_Group[tmIndex]
endfunction

function AddLightningTimedByUnit_Loop takes nothing returns nothing
    local integer tmIndex=GetTimerIndex(GetExpiredTimer())
    local integer inv = 10
    local unit su = SYS_TimerData_U00[tmIndex]
    local unit tu = SYS_TimerData_U01[tmIndex]
    local real x1 = GetUnitX(su)
    local real y1 = GetUnitY(su)
    local real z1 = GetUnitFlyHeight(su) + 60.0
    local real x2 = GetUnitX(tu)
    local real y2 = GetUnitY(tu)
    local real z2 = GetUnitFlyHeight(tu) + 60.0
    local real alpha =0.0
    if(GetUnitState(su,UNIT_STATE_MAX_LIFE)<=0.0 or GetUnitState(tu,UNIT_STATE_MAX_LIFE)<=0.0)then
        set SYS_TimerData_I00[tmIndex] = 0
        set SYS_TimerData_I01[tmIndex] = 0
    endif
    if(SYS_TimerData_I00[tmIndex]>0)then
        set SYS_TimerData_I00[tmIndex] = SYS_TimerData_I00[tmIndex] - inv
        call MoveLightningEx(SYS_TimerData_Lightning[tmIndex],false,x1,y1,z1,x2,y2,z2)
    elseif(SYS_TimerData_I01[tmIndex]>0)then
        set SYS_TimerData_I01[tmIndex] = IMax(0,SYS_TimerData_I01[tmIndex] - inv)
        set alpha = I2R(SYS_TimerData_I01[tmIndex])/I2R(SYS_TimerData_I02[tmIndex])
        call MoveLightningEx(SYS_TimerData_Lightning[tmIndex],false,x1,y1,z1,x2,y2,z2)
        call SetLightningColor(SYS_TimerData_Lightning[tmIndex],1.0,1.0,1.0,alpha)
    else
        call DestroyLightning(SYS_TimerData_Lightning[tmIndex])
        call ReleaseTimer(GetExpiredTimer())
    endif
    set su = null
    set tu = null
endfunction

function AddLightningTimedByUnit takes string s,unit su,unit tu,integer lTime,integer rTime returns nothing
    local integer tmIndex=GetTimerIndex(GetTimer())
    local real x1 = GetUnitX(su)
    local real y1 = GetUnitY(su)
    local real z1 = GetUnitFlyHeight(su) + 60.0
    local real x2 = GetUnitX(tu)
    local real y2 = GetUnitY(tu)
    local real z2 = GetUnitFlyHeight(tu) + 60.0
    set SYS_TimerData_U00[tmIndex] = su
    set SYS_TimerData_U01[tmIndex] = tu
    set SYS_TimerData_I00[tmIndex] = lTime
    set SYS_TimerData_I01[tmIndex] = rTime
    set SYS_TimerData_I02[tmIndex] = rTime
    set SYS_TimerData_Lightning[tmIndex]=AddLightningEx(s,false,x1,y1,z1,x2,y2,z2)
    call TimerStart(SYS_Timer[tmIndex],0.1,true,function AddLightningTimedByUnit_Loop)
endfunction


function ChainLightning_SelectUnit_Cond takes nothing returns boolean
    if(not(IsUnitInRangeXY(GetFilterUnit(),SYS_GroupX,SYS_GroupY,SYS_GroupR)))then
        return false
    endif
    if(IsUnitInGroup(GetFilterUnit(),SYS_Group))then
        return false
    endif
    if(not(TargetUnitCheck(GetFilterUnit(),SYS_GroupUnit,SYS_GroupInt)))then
        return false
    endif
    set SYS_GroupTempData[0] = SYS_GroupTempData[0] + 1
    return true
endfunction

function ChainLightning_SelectUnit_Action takes nothing returns nothing
    set SYS_GroupTempData[0] = SYS_GroupTempData[0] - 1
    if(SYS_GroupTempData[0]==0)then
        set SYS_GroupTarget = GetEnumUnit()
    endif
endfunction

function ChainLightning_SelectUnit takes unit su,integer filter,real x,real y,real r,group fGroup returns unit
    local group g = CreateGroup()
    local real range = 100.0
    set SYS_GroupTarget = null
    set SYS_GroupUnit = su
    set SYS_Group = fGroup
    set SYS_GroupInt = filter
    set SYS_GroupX = x
    set SYS_GroupY = y
    loop
        exitwhen(SYS_GroupTarget!=null or range>r)
        call GroupClear(g)
        set SYS_GroupTempData[0] = 0
        set SYS_GroupR = range
        call GroupEnumUnitsInRange(g,x,y,range+200.0,Condition(function ChainLightning_SelectUnit_Cond))
        if(SYS_GroupTempData[0]>0)then
            set SYS_GroupTempData[0] = GetRandomInt(1,SYS_GroupTempData[0])
            call ForGroup(g,function ChainLightning_SelectUnit_Action)
        endif
        set range = range + 100.0
    endloop
    call DestroyGroup(g)
    set g = null
    return SYS_GroupTarget
endfunction

function ChainLightning_Loop takes nothing returns nothing
    local integer tmIndex = GetTimerIndex(GetExpiredTimer())
    local unit su = SYS_TimerData_U00[tmIndex]
    local unit lu = SYS_TimerData_U01[tmIndex]
    local unit tu = SYS_TimerData_U02[tmIndex]
    local real x = GetUnitX(lu)
    local real y = GetUnitY(lu)
    local real r = SYS_TimerData_R00[tmIndex]
    local integer filter = SYS_TimerData_I04[tmIndex]
    set SYS_TimerData_I03[tmIndex] = SYS_TimerData_I03[tmIndex] - 1
    if(tu==null and SYS_TimerData_I03[tmIndex]>=0)then
        set tu = ChainLightning_SelectUnit(su,filter,x,y,r,SYS_TimerData_Group[tmIndex])
    endif
    if(tu!=null and SYS_TimerData_I03[tmIndex]>=0)then
        if(not(IsUnitInGroup(tu,SYS_TimerData_Group[tmIndex])))then
            call GroupAddUnit(SYS_TimerData_Group[tmIndex],tu)
            if(lu==su and SYS_TimerData_B00[tmIndex])then
                call AddLightningTimedByUnit("CLPB",lu,tu,0,100)
            else
                call AddLightningTimedByUnit("CLSB",lu,tu,0,100)
            endif
            call DestroyEffect(AddSpecialEffectTarget("Abilities\\\\Weapons\\\\Bolt\\\\BoltImpact.mdl",tu,"origin"))
            set SYS_GroupUnit = su
            set SYS_GroupTarget = tu
            call ExecuteBoolexpr(SYS_TimerData_Boolexpr[tmIndex])
        endif
        set SYS_TimerData_U01[tmIndex] = tu
        set SYS_TimerData_U02[tmIndex] = null
        call TimerStart(SYS_Timer[tmIndex],0.33,true,function ChainLightning_Loop)
    else
        call ReleaseTimer(GetExpiredTimer())
    endif
    set su = null
    set lu = null
    set tu = null
endfunction

function ChainLightning_Start takes unit su,unit tu,integer filter,integer Count,real range,group fGroup,boolexpr cond returns integer
    local integer tmIndex = GetTimerIndex(GetTimer())
    set SYS_TimerData_U00[tmIndex] = su
    set SYS_TimerData_U01[tmIndex] = su
    set SYS_TimerData_U02[tmIndex] = tu
    set SYS_TimerData_I03[tmIndex] = Count
    set SYS_TimerData_I04[tmIndex] = filter
    set SYS_TimerData_R00[tmIndex] = range
    set SYS_TimerData_Boolexpr[tmIndex] = cond
    if(fGroup==null)then
        set SYS_TimerData_Group[tmIndex] = CreateGroupTimed(I2R(IMax(0,(Count-1)))*0.33+0.1)
    else
        set SYS_TimerData_Group[tmIndex] = fGroup
    endif
    call TimerStart(SYS_Timer[tmIndex],0.0,true,function ChainLightning_Loop)
    return tmIndex
endfunction[/jass]
回复

使用道具 举报

发表于 2009-10-14 22:06:19 | 显示全部楼层
没看细节
和使用mj放电链,干掉mj时电链消失有关么?

最早的时候我用等待+删除法处理mj的时候发现过,删得过早电链就没了
回复

使用道具 举报

 楼主| 发表于 2009-10-14 22:31:16 | 显示全部楼层
不是。似乎是一个很奇怪的问题,偶尔(不是每次都有)闪电链从某一次跳转就抓不到伤害单位了
回复

使用道具 举报

发表于 2009-10-16 06:18:45 | 显示全部楼层
0视野的马甲不能释放技能
视野低于释放距离释放失败?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 23:31 , Processed in 0.067752 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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