找回密码
 点一下
查看: 1775|回复: 14

J创建的单位无法被任意单位事件获得么?

[复制链接]
发表于 2008-11-21 16:53:50 | 显示全部楼层 |阅读模式
RT
用J创立了一个单位
但是却无法用任意单位死亡获得他的死亡事件
……
为什么呢?
发表于 2008-11-21 16:56:14 | 显示全部楼层
会响应的,大概是哪里写错了。
回复

使用道具 举报

 楼主| 发表于 2008-11-21 17:11:40 | 显示全部楼层
[jass]function Trig_j_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A001' ) ) then
        return false
    endif
    return true
endfunction

function Trig_j_Func002Func004001002001 takes nothing returns boolean
    return ( GetOwningPlayer(GetFilterUnit()) == GetOwningPlayer(GetSpellAbilityUnit()) )
endfunction

function Trig_j_Func002Func004001002002 takes nothing returns boolean
    return ( GetUnitTypeId(GetFilterUnit()) == 'u002' )
endfunction

function Trig_j_Func002Func004001002 takes nothing returns boolean
    return GetBooleanAnd( Trig_j_Func002Func004001002001(), Trig_j_Func002Func004001002002() )
endfunction

function Trig_j_Func002Func005Func001002 takes nothing returns nothing
    call UnitPauseTimedLifeBJ( true, GetEnumUnit() )
endfunction

function Trig_j_Func002Func005Func005002 takes nothing returns nothing
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    call GroupAddUnitSimple( GetEnumUnit(), udg_Tc_allunit[udg_Tc_n] )
endfunction

function Trig_j_Func002Func005Func006Func005A takes nothing returns nothing
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    set udg_Tc_i[udg_Tc_n] = ( udg_Tc_i[udg_Tc_n] + 1 )
    set udg_Tc_point[( udg_Number_players + udg_Tc_n )] = GetUnitLoc(GetEnumUnit())
    set udg_Tc_angle[( ( udg_Tc_i[udg_Tc_n] * udg_Number_players ) + udg_Tc_n )] = AngleBetweenPoints(udg_Tc_point[udg_Tc_n], udg_Tc_point[( udg_Number_players + udg_Tc_n )])
    call RemoveLocation( udg_Tc_point[( udg_Number_players + udg_Tc_n )] )
endfunction

function Trig_j_Func002Func005Func006Func006A takes nothing returns nothing
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    set udg_Tc_i[udg_Tc_n] = ( udg_Tc_i[udg_Tc_n] + 1 )
    set udg_Tc_point[( udg_Number_players + udg_Tc_n )] = GetUnitLoc(GetEnumUnit())
    set udg_Tc_angle[( ( udg_Tc_i[udg_Tc_n] * udg_Number_players ) + udg_Tc_n )] = AngleBetweenPoints(udg_Tc_point[udg_Tc_n], udg_Tc_point[( udg_Number_players + udg_Tc_n )])
    call RemoveLocation( udg_Tc_point[( udg_Number_players + udg_Tc_n )] )
endfunction

function Trig_j_Func002Func005Func006Func007Func003Func001C takes nothing returns boolean
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    if ( not ( udg_Tc_angle_temp[udg_Tc_n] > udg_Tc_angle[( ( udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )] ) ) then
        return false
    endif
    return true
endfunction

function Trig_j_Func002Func005Func006Func010Func001C takes nothing returns boolean
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    if ( not ( ( udg_Tc_angle[( ( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] + 1 ) * udg_Number_players ) + udg_Tc_n )] - udg_Tc_angle[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )] ) >= 180.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_j_Func002Func005Func006Func011001 takes nothing returns boolean
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    return ( udg_Tc_inorout[udg_Tc_n] == true )
endfunction

function Trig_j_Func002Func005Func006A takes nothing returns nothing
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    set udg_Tc_unit[udg_Tc_n] = GetEnumUnit()
    call GroupRemoveUnitSimple( udg_Tc_unit[udg_Tc_n], udg_Tc_allunit[udg_Tc_n] )
    set udg_Tc_point[udg_Tc_n] = GetUnitLoc(udg_Tc_unit[udg_Tc_n])
    set udg_Tc_i[udg_Tc_n] = -1
    call ForGroupBJ( udg_Tc_allunit[udg_Tc_n], function Trig_j_Func002Func005Func006Func005A )
    call ForGroupBJ( udg_Tc_allunit_edge[udg_Tc_n], function Trig_j_Func002Func005Func006Func006A )
    set udg_Tc_i[( udg_Number_players + udg_Tc_n )] = 0
    loop
        exitwhen udg_Tc_i[( udg_Number_players + udg_Tc_n )] > ( udg_Tc_i[udg_Tc_n] - 1 )
        set udg_Tc_angle_temp[udg_Tc_n] = udg_Tc_angle[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )]
        set udg_Tc_order_num[udg_Tc_n] = ( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )
        set udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] = ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] + 1 )
        loop
            exitwhen udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] > udg_Tc_i[udg_Tc_n]
            if ( Trig_j_Func002Func005Func006Func007Func003Func001C() ) then
                set udg_Tc_order_num[udg_Tc_n] = ( ( udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )
                set udg_Tc_angle_temp[udg_Tc_n] = udg_Tc_angle[udg_Tc_order_num[udg_Tc_n]]
            else
            endif
            set udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] = udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] + 1
        endloop
        set udg_Tc_angle[udg_Tc_order_num[udg_Tc_n]] = udg_Tc_angle[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )]
        set udg_Tc_angle[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )] = udg_Tc_angle_temp[udg_Tc_n]
        set udg_Tc_i[( udg_Number_players + udg_Tc_n )] = udg_Tc_i[( udg_Number_players + udg_Tc_n )] + 1
    endloop
    set udg_Tc_angle[( ( ( udg_Tc_i[udg_Tc_n] + 1 ) * udg_Number_players ) + udg_Tc_n )] = ( udg_Tc_angle[udg_Tc_n] + 360.00 )
    set udg_Tc_inorout[udg_Tc_n] = false
    set udg_Tc_i[( udg_Number_players + udg_Tc_n )] = 0
    loop
        exitwhen udg_Tc_i[( udg_Number_players + udg_Tc_n )] > udg_Tc_i[udg_Tc_n]
        if ( Trig_j_Func002Func005Func006Func010Func001C() ) then
            call GroupAddUnitSimple( udg_Tc_unit[udg_Tc_n], udg_Tc_allunit_edge[udg_Tc_n] )
            set udg_Tc_inorout[udg_Tc_n] = true
        else
        endif
        set udg_Tc_i[( udg_Number_players + udg_Tc_n )] = udg_Tc_i[( udg_Number_players + udg_Tc_n )] + 1
    endloop
    if ( Trig_j_Func002Func005Func006Func011001() ) then
        call DoNothing(  )
    else
        call GroupAddUnitSimple( udg_Tc_unit[udg_Tc_n], udg_Tc_allunit_in[udg_Tc_n] )
    endif
endfunction

function Trig_j_Func002Func005Func009Func002001 takes nothing returns boolean
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    return ( udg_Tc_unit[udg_Tc_n] == udg_Tc_unit[( udg_Number_players + udg_Tc_n )] )
endfunction

function Trig_j_Func002Func005Func017A takes nothing returns nothing
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    set udg_Tc_i[udg_Tc_n] = ( udg_Tc_i[udg_Tc_n] + 1 )
    set udg_Tc_point[( ( udg_Tc_i[udg_Tc_n] * udg_Number_players ) + udg_Tc_n )] = GetUnitLoc(GetEnumUnit())
    set udg_Tc_angle[( ( udg_Tc_i[udg_Tc_n] * udg_Number_players ) + udg_Tc_n )] = AngleBetweenPoints(udg_Tc_point[udg_Tc_n], udg_Tc_point[( ( udg_Tc_i[udg_Tc_n] * udg_Number_players ) + udg_Tc_n )])
endfunction

function Trig_j_Func002Func005Func018Func003Func001C takes nothing returns boolean
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    if ( not ( udg_Tc_angle_temp[udg_Tc_n] > udg_Tc_angle[( ( udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )] ) ) then
        return false
    endif
    return true
endfunction

function Trig_j_Func002Func005Func024C takes nothing returns boolean
    if ( not ( DistanceBetweenPoints(udg_Point[1], udg_Point[2]) > 1500.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_j_Func002Func005C takes nothing returns boolean
    if ( not ( CountUnitsInGroup(udg_Tc_allunit_all[GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))]) <= 2 ) ) then
        return false
    endif
    return true
endfunction

function Trig_j_Func002C takes nothing returns boolean
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    if ( not ( udg_Tc_run[udg_Tc_n] == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_j_Actions takes nothing returns nothing
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
    if ( Trig_j_Func002C() ) then
        call GroupClear( udg_Tc_allunit_all[udg_Tc_n] )
        call GroupAddGroup( GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function Trig_j_Func002Func004001002)), udg_Tc_allunit_all[udg_Tc_n] )
        if ( Trig_j_Func002Func005C() ) then
            set udg_Point[1] = GetUnitLoc(GetSpellAbilityUnit())
            set udg_Point[2] = GetUnitLoc(udg_Baowu[udg_Tc_n])
            if ( Trig_j_Func002Func005Func024C() ) then
                set udg_Point[3] = PolarProjectionBJ(udg_Point[1], 200.00, GetUnitFacing(GetSpellAbilityUnit()))
                call CreateNUnitsAtLoc( 1, 'u001', ConvertedPlayer(udg_Tc_n), udg_Point[3], bj_UNIT_FACING )
                call SetUnitFacingTimed( GetLastCreatedUnit(), ( AngleBetweenPoints(udg_Point[1], udg_Point[2]) + GetRandomReal(-30.00, 30.00) ), 0.20 )
                call UnitApplyTimedLifeBJ( 10.00, 'BTLF', GetLastCreatedUnit() )
                call RemoveLocation( udg_Point[3] )
            else
                call DisplayTimedTextToForce( GetForceOfPlayer(ConvertedPlayer(udg_Tc_n)), 15.00, "TRIGSTR_117" )
            endif
            call RemoveLocation( udg_Point[1] )
            call RemoveLocation( udg_Point[2] )
        else
            call ForGroupBJ( udg_Tc_allunit_all[udg_Tc_n], function Trig_j_Func002Func005Func001002 )
            call GroupClear( udg_Tc_allunit[udg_Tc_n] )
            call GroupClear( udg_Tc_allunit_edge[udg_Tc_n] )
            call GroupClear( udg_Tc_allunit_in[udg_Tc_n] )
            call ForGroupBJ( udg_Tc_allunit_all[udg_Tc_n], function Trig_j_Func002Func005Func005002 )
            call ForGroupBJ( udg_Tc_allunit_all[udg_Tc_n], function Trig_j_Func002Func005Func006A )
            call RemoveLocation( udg_Tc_point[udg_Tc_n] )
            set udg_Tc_unit[udg_Tc_n] = GroupPickRandomUnit(udg_Tc_allunit_edge[udg_Tc_n])
            set udg_Tc_i[udg_Tc_n] = 1
            loop
                exitwhen udg_Tc_i[udg_Tc_n] > 1
                set udg_Tc_unit[( udg_Number_players + udg_Tc_n )] = GroupPickRandomUnit(udg_Tc_allunit_edge[udg_Tc_n])
                if ( Trig_j_Func002Func005Func009Func002001() ) then
                    set udg_Tc_i[udg_Tc_n] = 0
                else
                    call DoNothing(  )
                endif
                set udg_Tc_i[udg_Tc_n] = udg_Tc_i[udg_Tc_n] + 1
            endloop
            set udg_Tc_point[( udg_Number_players + udg_Tc_n )] = GetUnitLoc(udg_Tc_unit[udg_Tc_n])
            set udg_Tc_point[( ( 2 * udg_Number_players ) + udg_Tc_n )] = GetUnitLoc(udg_Tc_unit[( udg_Number_players + udg_Tc_n )])
            set udg_Tc_point[udg_Tc_n] = PolarProjectionBJ(udg_Tc_point[( udg_Number_players + udg_Tc_n )], ( DistanceBetweenPoints(udg_Tc_point[( udg_Number_players + udg_Tc_n )], udg_Tc_point[( ( 2 * udg_Number_players ) + udg_Tc_n )]) / 2.00 ), AngleBetweenPoints(udg_Tc_point[( udg_Number_players + udg_Tc_n )], udg_Tc_point[( ( 2 * udg_Number_players ) + udg_Tc_n )]))
            call AddSpecialEffectLocBJ( udg_Tc_point[udg_Tc_n], "Abilities\\\\Spells\\\\Other\\\\TalkToMe\\\\TalkToMe.mdl" )
            call RemoveLocation( udg_Tc_point[( udg_Number_players + udg_Tc_n )] )
            call RemoveLocation( udg_Tc_point[( ( 2 * udg_Number_players ) + udg_Tc_n )] )
            set udg_Tc_i[udg_Tc_n] = 0
            call ForGroupBJ( udg_Tc_allunit_edge[udg_Tc_n], function Trig_j_Func002Func005Func017A )
            set udg_Tc_i[( udg_Number_players + udg_Tc_n )] = 1
            loop
                exitwhen udg_Tc_i[( udg_Number_players + udg_Tc_n )] > ( udg_Tc_i[udg_Tc_n] - 1 )
                set udg_Tc_angle_temp[udg_Tc_n] = udg_Tc_angle[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )]
                set udg_Tc_order_num[udg_Tc_n] = ( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )
                set udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] = ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] + 1 )
                loop
                    exitwhen udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] > udg_Tc_i[udg_Tc_n]
                    if ( Trig_j_Func002Func005Func018Func003Func001C() ) then
                        set udg_Tc_order_num[udg_Tc_n] = ( ( udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )
                        set udg_Tc_angle_temp[udg_Tc_n] = udg_Tc_angle[udg_Tc_order_num[udg_Tc_n]]
                    else
                    endif
                    set udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] = udg_Tc_i[( ( 2 * udg_Number_players ) + udg_Tc_n )] + 1
                endloop
                set udg_Tc_angle[udg_Tc_order_num[udg_Tc_n]] = udg_Tc_angle[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )]
                set udg_Tc_angle[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )] = udg_Tc_angle_temp[udg_Tc_n]
                set udg_Tc_point_temp[udg_Tc_n] = udg_Tc_point[udg_Tc_order_num[udg_Tc_n]]
                set udg_Tc_point[udg_Tc_order_num[udg_Tc_n]] = udg_Tc_point[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )]
                set udg_Tc_point[( ( udg_Tc_i[( udg_Number_players + udg_Tc_n )] * udg_Number_players ) + udg_Tc_n )] = udg_Tc_point_temp[udg_Tc_n]
                set udg_Tc_i[( udg_Number_players + udg_Tc_n )] = udg_Tc_i[( udg_Number_players + udg_Tc_n )] + 1
            endloop
            call RemoveLocation( udg_Tc_point[udg_Tc_n] )
            call CreateNUnitsAtLoc( 1, 'o000', GetOwningPlayer(GetSpellAbilityUnit()), GetRectCenter(GetPlayableMapRect()), bj_UNIT_FACING )
            call KillUnit( GetLastCreatedUnit() )
        endif
    else
        call DisplayTimedTextToForce( GetForceOfPlayer(ConvertedPlayer(udg_Tc_n)), 15.00, "TRIGSTR_116" )
    endif
endfunction

//===========================================================================
function InitTrig_j takes nothing returns nothing
    set gg_trg_j = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_j, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_j, Condition( function Trig_j_Conditions ) )
    call TriggerAddAction( gg_trg_j, function Trig_j_Actions )
endfunction


[/jass]
就是这个
T转的J
唯一的改变就是为带有tc_n的语句添加了
    local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
这么两句
然后最后那句创建单位,杀死的单执行后任意单位死亡事件无法获得
没有添加时没有问题
回复

使用道具 举报

 楼主| 发表于 2008-11-21 17:14:04 | 显示全部楼层
J太长了
原始的T是这样的
[trigger]
T
    事件
        单位 - 任意单位 开始施放技能
    条件
        (施放技能) 等于 探测宝物
    动作
        自定义代码:   local integer udg_Tc_n
        Set Tc_n = (((施法单位) 的所有者) 的玩家索引号)
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
            If - 条件
                Tc_run[Tc_n] 等于 FALSE
            Then - 动作
                单位组 - 清空 Tc_allunit_all[Tc_n] 内所有单位
                单位组 - 添加 ((可用地图区域) 内满足 ((((匹配单位) 的所有者) 等于 ((施法单位) 的所有者)) 且 (((匹配单位) 的类型) 等于 寻宝标记)) 的所有单位) 内所有单位到 Tc_allunit_all[Tc_n]
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
                    If - 条件
                        (Tc_allunit_all[(((施法单位) 的所有者) 的玩家索引号)] 中的单位数量) 小于或等于 2
                    Then - 动作
                        Set Point[1] = ((施法单位) 的位置)
                        Set Point[2] = (Baowu[Tc_n] 的位置)
                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
                            If - 条件
                                (Point[1] 和 Point[2] 之间的距离) 大于 1500.00
                            Then - 动作
                                Set Point[3] = (从 Point[1] 开始,距离 200.00 ,方向为 ((施法单位) 的面向角度) 度的位移处)
                                单位 - 创建 1 个 箭头 给 (玩家 Tc_n) 在 Point[3] ,面向角度为 默认建筑朝向 度
                                单位 - 设置 (最后创建的单位) 的面向角度为 ((Point[1] 到 Point[2] 的角度) + (随机实数,最小值: -30.00 最大值: 30.00)) 度,使用时间 0.20 秒
                                单位 - 设置 10.00 秒 普通 类型的生命周期对 (最后创建的单位)
                                点 - 清除 Point[3]
                            Else - 动作
                                游戏 - 对 (将 (玩家 Tc_n) 转为玩家组) 发送显示 15.00 秒的文本信息: 距离过近,无...
                        点 - 清除 Point[1]
                        点 - 清除 Point[2]
                    Else - 动作
                        单位组 - 选取 Tc_allunit_all[Tc_n] 内所有单位 (单位 - 暂停 (选取单位) 的生命周期)
                        单位组 - 清空 Tc_allunit[Tc_n] 内所有单位
                        单位组 - 清空 Tc_allunit_edge[Tc_n] 内所有单位
                        单位组 - 清空 Tc_allunit_in[Tc_n] 内所有单位
                        单位组 - 选取 Tc_allunit_all[Tc_n] 内所有单位 (单位组 - 添加 (选取单位) 到 Tc_allunit[Tc_n])
                        单位组 - 选取 Tc_allunit_all[Tc_n] 内所有单位做动作
                            Loop - 动作
                                Set Tc_unit[Tc_n] = (选取单位)
                                单位组 - 把 Tc_unit[Tc_n] 从 Tc_allunit[Tc_n] 移除
                                Set Tc_point[Tc_n] = (Tc_unit[Tc_n] 的位置)
                                Set Tc_i[Tc_n] = -1
                                单位组 - 选取 Tc_allunit[Tc_n] 内所有单位做动作
                                    Loop - 动作
                                        Set Tc_i[Tc_n] = (Tc_i[Tc_n] + 1)
                                        Set Tc_point[(Number_players + Tc_n)] = ((选取单位) 的位置)
                                        Set Tc_angle[((Tc_i[Tc_n] x Number_players) + Tc_n)] = (Tc_point[Tc_n] 到 Tc_point[(Number_players + Tc_n)] 的角度)
                                        点 - 清除 Tc_point[(Number_players + Tc_n)]
                                单位组 - 选取 Tc_allunit_edge[Tc_n] 内所有单位做动作
                                    Loop - 动作
                                        Set Tc_i[Tc_n] = (Tc_i[Tc_n] + 1)
                                        Set Tc_point[(Number_players + Tc_n)] = ((选取单位) 的位置)
                                        Set Tc_angle[((Tc_i[Tc_n] x Number_players) + Tc_n)] = (Tc_point[Tc_n] 到 Tc_point[(Number_players + Tc_n)] 的角度)
                                        点 - 清除 Tc_point[(Number_players + Tc_n)]
                                循环动作[Tc_i[(Number_players + Tc_n)]]从 0 到 (Tc_i[Tc_n] - 1), 运行 (Loop - 动作)
                                    Loop - 动作
                                        Set Tc_angle_temp[Tc_n] = Tc_angle[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)]
                                        Set Tc_order_num[Tc_n] = ((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)
                                        循环动作[Tc_i[((2 x Number_players) + Tc_n)]]从 (Tc_i[(Number_players + Tc_n)] + 1) 到 Tc_i[Tc_n], 运行 (Loop - 动作)
                                            Loop - 动作
                                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
                                                    If - 条件
                                                        Tc_angle_temp[Tc_n] 大于 Tc_angle[((Tc_i[((2 x Number_players) + Tc_n)] x Number_players) + Tc_n)]
                                                    Then - 动作
                                                        Set Tc_order_num[Tc_n] = ((Tc_i[((2 x Number_players) + Tc_n)] x Number_players) + Tc_n)
                                                        Set Tc_angle_temp[Tc_n] = Tc_angle[Tc_order_num[Tc_n]]
                                                    Else - 动作
                                        Set Tc_angle[Tc_order_num[Tc_n]] = Tc_angle[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)]
                                        Set Tc_angle[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)] = Tc_angle_temp[Tc_n]
                                Set Tc_angle[(((Tc_i[Tc_n] + 1) x Number_players) + Tc_n)] = (Tc_angle[Tc_n] + 360.00)
                                Set Tc_inorout[Tc_n] = FALSE
                                循环动作[Tc_i[(Number_players + Tc_n)]]从 0 到 Tc_i[Tc_n], 运行 (Loop - 动作)
                                    Loop - 动作
                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
                                            If - 条件
                                                (Tc_angle[(((Tc_i[(Number_players + Tc_n)] + 1) x Number_players) + Tc_n)] - Tc_angle[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)]) 大于或等于 180.00
                                            Then - 动作
                                                单位组 - 添加 Tc_unit[Tc_n] 到 Tc_allunit_edge[Tc_n]
                                                Set Tc_inorout[Tc_n] = TRUE
                                            Else - 动作
                                如果 (Tc_inorout[Tc_n] 等于 TRUE) 成立,则运行 (不做任何动作) 否则运行 (单位组 - 添加 Tc_unit[Tc_n] 到 Tc_allunit_in[Tc_n])
                        点 - 清除 Tc_point[Tc_n]
                        Set Tc_unit[Tc_n] = (Tc_allunit_edge[Tc_n] 中随机选取的一个单位)
                        循环动作[Tc_i[Tc_n]]从 1 到 1, 运行 (Loop - 动作)
                            Loop - 动作
                                Set Tc_unit[(Number_players + Tc_n)] = (Tc_allunit_edge[Tc_n] 中随机选取的一个单位)
                                如果 (Tc_unit[Tc_n] 等于 Tc_unit[(Number_players + Tc_n)]) 成立,则运行 (Set Tc_i[Tc_n] = 0) 否则运行 (不做任何动作)
                        Set Tc_point[(Number_players + Tc_n)] = (Tc_unit[Tc_n] 的位置)
                        Set Tc_point[((2 x Number_players) + Tc_n)] = (Tc_unit[(Number_players + Tc_n)] 的位置)
                        Set Tc_point[Tc_n] = (从 Tc_point[(Number_players + Tc_n)] 开始,距离 ((Tc_point[(Number_players + Tc_n)] 和 Tc_point[((2 x Number_players) + Tc_n)] 之间的距离) / 2.00) ,方向为 (Tc_point[(Number_players + Tc_n)] 到 Tc_point[((2 x Number_players) + Tc_n)] 的角度)
                        特殊效果 - 在 Tc_point[Tc_n] 创建特效: Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl
                        点 - 清除 Tc_point[(Number_players + Tc_n)]
                        点 - 清除 Tc_point[((2 x Number_players) + Tc_n)]
                        Set Tc_i[Tc_n] = 0
                        单位组 - 选取 Tc_allunit_edge[Tc_n] 内所有单位做动作
                            Loop - 动作
                                Set Tc_i[Tc_n] = (Tc_i[Tc_n] + 1)
                                Set Tc_point[((Tc_i[Tc_n] x Number_players) + Tc_n)] = ((选取单位) 的位置)
                                Set Tc_angle[((Tc_i[Tc_n] x Number_players) + Tc_n)] = (Tc_point[Tc_n] 到 Tc_point[((Tc_i[Tc_n] x Number_players) + Tc_n)] 的角度)
                        循环动作[Tc_i[(Number_players + Tc_n)]]从 1 到 (Tc_i[Tc_n] - 1), 运行 (Loop - 动作)
                            Loop - 动作
                                Set Tc_angle_temp[Tc_n] = Tc_angle[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)]
                                Set Tc_order_num[Tc_n] = ((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)
                                循环动作[Tc_i[((2 x Number_players) + Tc_n)]]从 (Tc_i[(Number_players + Tc_n)] + 1) 到 Tc_i[Tc_n], 运行 (Loop - 动作)
                                    Loop - 动作
                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
                                            If - 条件
                                                Tc_angle_temp[Tc_n] 大于 Tc_angle[((Tc_i[((2 x Number_players) + Tc_n)] x Number_players) + Tc_n)]
                                            Then - 动作
                                                Set Tc_order_num[Tc_n] = ((Tc_i[((2 x Number_players) + Tc_n)] x Number_players) + Tc_n)
                                                Set Tc_angle_temp[Tc_n] = Tc_angle[Tc_order_num[Tc_n]]
                                            Else - 动作
                                Set Tc_angle[Tc_order_num[Tc_n]] = Tc_angle[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)]
                                Set Tc_angle[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)] = Tc_angle_temp[Tc_n]
                                Set Tc_point_temp[Tc_n] = Tc_point[Tc_order_num[Tc_n]]
                                Set Tc_point[Tc_order_num[Tc_n]] = Tc_point[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)]
                                Set Tc_point[((Tc_i[(Number_players + Tc_n)] x Number_players) + Tc_n)] = Tc_point_temp[Tc_n]
                        点 - 清除 Tc_point[Tc_n]
                        单位 - 创建 1 个 马甲 1 给 ((施法单位) 的所有者) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
                        单位 - 杀死 (最后创建的单位)
            Else - 动作
                游戏 - 对 (将 (玩家 Tc_n) 转为玩家组) 发送显示 15.00 秒的文本信息: 探索中……

[/trigger]
回复

使用道具 举报

发表于 2008-11-21 20:17:40 | 显示全部楼层
[codes=jass] local integer udg_Tc_n
    set udg_Tc_n = GetConvertedPlayerId(GetOwningPlayer(GetSpellAbilityUnit()))
[/codes]
udg_***这样不是全局的吗?
回复

使用道具 举报

发表于 2008-11-21 20:36:25 | 显示全部楼层
抛开触发,感觉lz的jass写得好怪,既然自己写jass了,那也不必要与全局重名了,也不必每个条件专门写函数了额,所以看了一点就没看下去了

另外,创建的单位肯定可以被任意单位事件接受的
回复

使用道具 举报

发表于 2008-11-21 20:48:26 | 显示全部楼层
回LSS,那是Union Bug。

啊,现在看T转J真是不习惯啊.......

我觉得应该是和其他的触发冲突了,或是RPBug,话说我也有张地图莫名其妙单位死亡时就跳出WC3了,明明一个关于单位死亡的T都没有.......
回复

使用道具 举报

发表于 2008-11-21 22:13:11 | 显示全部楼层
Union Bug不懂啊.
[codes=jass]globals
                   handle H
                   integer I
endglobals
      
function Trig_test_Actions takes nothing returns nothing
       local handle H=null
       local integer I=0
       set H = GetTriggerUnit()
       call BJDebugMsg(I2S(I))
endfunction[/codes]H与I什么关系?制做Union Bug一定要全局吗?
回复

使用道具 举报

发表于 2008-11-21 22:15:49 | 显示全部楼层
union bug是利用jass中多个局部变量与全局变量同名导致的bug,当一个函数中两个以上局部变量与全局变量同名时,你会发现,对其中一个赋值,其他的值都被改变为你刚才赋的那个handle值了
回复

使用道具 举报

发表于 2008-11-21 22:59:13 | 显示全部楼层
这和return bug有什么关系?
回复

使用道具 举报

发表于 2008-11-21 23:08:56 | 显示全部楼层
没有关系,不过同样是用来达到类型转换的效果
回复

使用道具 举报

 楼主| 发表于 2008-11-22 08:39:15 | 显示全部楼层
引用第5楼zhuzeitou于2008-11-21 20:36发表的  :
抛开触发,感觉lz的jass写得好怪,既然自己写jass了,那也不必要与全局重名了,也不必每个条件专门写函数了额,所以看了一点就没看下去了

另外,创建的单位肯定可以被任意单位事件接受的
本来是想直接用自定义语句通过把全局变量Tc_n局域化来避免T运行时的变量冲突的
但是由于条件里的无法改,所以只好T转J了,然后简单的把条件里的Tc_n局域化并赋值
这应就出现了所说的问题
T和直接转化的J都没有问题
出问题的是在各个function加入了两条语句后
出现了无法获得变量的问题
……
难道是RP问题?
T挺熟的
J不太熟悉
回复

使用道具 举报

发表于 2008-11-22 10:02:57 | 显示全部楼层
if语句是可以改的,写成

if xxx then
xxxxxxx
endif
回复

使用道具 举报

发表于 2008-11-23 02:37:18 | 显示全部楼层
可以的阿~~你随便创建个小兵然后杀死它都会触发任意单位死亡的~~
回复

使用道具 举报

 楼主| 发表于 2008-11-23 13:44:59 | 显示全部楼层
但是出问题了
就是这个图
J和j两条

寻宝.w3x

39 KB, 下载次数: 6

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 02:50 , Processed in 0.036444 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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