|
好久没发技能了,今天就 发一个。。。
如果要移植,就先复制aa3那个 T ,再复制aa4那个 T 。记住把自定义脚本里的东西复制过去。
就 是一个往中间吸兵的技能(尸体也吸,支持多人使用),使用后你会看到步兵努力的往你面前跑,却跑不过来。很有虐的味道。
在本图里对着边缘放技能会使单位不往中间移动,这不是BUG,是和我设置的地图边缘的坐标(就是最大X,Y坐标,最小X,Y坐标)有关系,这4个值是在 T 里面改的,会 T 的都会、、、、、
如果直接使用下面的代码,那么就把下面的代码复制到自定义脚本里,使用时就直接call Xi(触发单位,释放技能点),这个可以在T里进行的。。。
记住回帖呀!!
截图:
以下是代码(那个格式忘了):
[jass]function H2I takes handle h returns integer
return h
return 0
endfunction
function I2U takes integer i returns unit
return i
return null
endfunction
function I2Tm takes integer i returns timer
return i
return null
endfunction
function I2E takes integer e returns effect
return e
return null
endfunction
function Xi_Loop2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local unit OrderUnit=I2U(GetStoredInteger(udg_GC,I2S(H2I(t)),"OrderUnit"))
local location loc=GetUnitLoc(GetEnumUnit())
local real X=GetStoredReal(udg_GC,I2S(H2I(t)),"X")
local real Y=GetStoredReal(udg_GC,I2S(H2I(t)),"Y")
local real X_1=GetLocationX(loc)
local real Y_1=GetLocationY(loc)
local location loc2=Location(X,Y)
local real X_2=X_1 + 5*Cos(AngleBetweenPoints(loc, loc2))
local real Y_2=Y_1 + 5*Sin(AngleBetweenPoints(loc, loc2))
if IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(OrderUnit)) == true then
if IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false then
if GetUnitAbilityLevelSwapped('Aloc', GetEnumUnit()) == 0 then
//
//
//
//---------------------修改下面这一行代码中的数字"1"来改变伤害数值.(每0.02秒的伤害)------------------------------------------
//
call UnitDamageTarget( OrderUnit, GetEnumUnit(), 1, true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
//
//-----------------------------------------------------------------------------------------------------------------------------------
if X_2 > udg_X_max then
set X_2 = udg_X_max
endif
if X_2 < udg_X_min then
set X_2 = udg_X_min
endif
if Y_2 > udg_Y_max then
set Y_2 = udg_Y_max
endif
if Y_2 < udg_Y_min then
set Y_2 = udg_Y_min
endif
call SetUnitX(GetEnumUnit(),X_2)
call SetUnitY(GetEnumUnit(),Y_2)
else
call SetUnitX(GetEnumUnit(),X)
call SetUnitY(GetEnumUnit(),Y)
endif
endif
endif
call RemoveLocation(loc)
call RemoveLocation(loc2)
set loc=null
set loc2=null
set OrderUnit=null
set t=null
endfunction
function Xi_Loop1 takes nothing returns nothing
local timer t=GetExpiredTimer()
local real X=GetStoredReal(udg_GC,I2S(H2I(t)),"X")
local real Y=GetStoredReal(udg_GC,I2S(H2I(t)),"Y")
local location SpellLoc=Location(X,Y)
local integer times=GetStoredInteger(udg_GC,I2S(H2I(t)),"times")
local effect E=I2E(GetStoredInteger(udg_GC,I2S(H2I(t)),"E"))
if times > 0 then
set times=times-1
call StoreInteger(udg_GC,I2S(H2I(t)),"times",times)
set bj_wantDestroyGroup = true
call ForGroupBJ(GetUnitsInRangeOfLocAll(450, SpellLoc),function Xi_Loop2)
call RemoveLocation(SpellLoc)
set SpellLoc=null
else
call FlushStoredMission(udg_GC,I2S(H2I(t)))
call PauseTimerBJ( true, t )
call DestroyTimer(t)
call DestroyEffect(E)
call TerrainDeformationCraterBJ( 1, true, SpellLoc, 450, -150 )
endif
set E=null
set t=null
endfunction
function Xi takes unit Orderunit , location SpellLoc returns nothing
local timer t=CreateTimer()
local real X=GetLocationX(SpellLoc)
local real Y=GetLocationY(SpellLoc)
local integer times=1000
local effect E=AddSpecialEffectLoc("Abilities\\Spells\\Human\\FlameStrike\\FlameStrikeTarget.mdl",SpellLoc)
call TerrainDeformationCraterBJ( 1, true, SpellLoc, 450, 150 )
call StoreReal(udg_GC,I2S(H2I(t)),"X",X)
call StoreReal(udg_GC,I2S(H2I(t)),"Y",Y)
call StoreInteger(udg_GC,I2S(H2I(t)),"E",H2I(E))
call StoreInteger(udg_GC,I2S(H2I(t)),"Orderunit",H2I(Orderunit))
call StoreInteger(udg_GC,I2S(H2I(t)),"times",times)
call TimerStart(t,0.02,true,function Xi_Loop1)
set t=null
endfunction[/jass] |
评分
-
查看全部评分
|