|
楼主 |
发表于 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()))
这么两句
然后最后那句创建单位,杀死的单执行后任意单位死亡事件无法获得
没有添加时没有问题 |
|