「新規スキル案」の編集履歴(バックアップ)一覧はこちら
新規スキル案 - (2008/06/03 (火) 22:35:40) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
function Trig_Surprise_jump_attack_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A00F'
endfunction
function Surprise_jump_attack_Damage takes unit c,real x,real y,real AOE,real dam returns nothing
local group G=CreateGroup()
local unit uTMP
local location lTMP
call GroupEnumUnitsInRange(G,x,y,AOE,null)
loop
set uTMP=FirstOfGroup(G)
exitwhen uTMP==null
if IsUnitEnemy(uTMP,GetOwningPlayer(c))and IsUnitDeadBJ(uTMP)==false and GetUnitAbilityLevel(uTMP,'A04R')==0 then
if(IsUnitType(uTMP,UNIT_TYPE_STRUCTURE)==false)then
call UnitDamageTargetBJ(c,uTMP,dam,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)
else
call UnitDamageTargetBJ(c,uTMP,dam/3,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_DEMOLITION)
endif
set lTMP=GetUnitLoc(uTMP)
call RemoveLocation(lTMP)
call GroupRemoveUnit(G,uTMP)
else
call GroupRemoveUnit(G,uTMP)
endif
endloop
call GroupClear(G)
call DestroyGroup(G)
endfunction
function Surprise_jump_attack_Main takes nothing returns nothing
local timer Tm=GetExpiredTimer()
local string Tab=H2Tx(Tm)
local real Range=GetReal(Tab,"Distance")
local real Angle=GetReal(Tab,"Angle")
local integer Count=GetInteger(Tab,"Counter")
local unit Target=GetUnit(Tab,"GeyserTarget")
local unit Caster=GetUnit(Tab,"Caster")
local real Height=(Count-25)*(Count-25)
local real slv=GetUnitAbilityLevel(Caster,'A00F')
local real AOE=300+(slv*slv-slv)*50
local real dam=GetUnitAbilityLevel(Caster,'A009')
local real SpeedMod=Range*Count/50-Range
local location LTarget=GetUnitLoc(Target)
local location lDest=PolarProjectionBJ(LTarget,SpeedMod,Angle)
if ( Count < 51 ) then
call SetUnitPositionLoc(Target,lDest)
call SetUnitFlyHeight(Target,775-Height,0)
set Count=Count+1
if(GetRandomInt(1,4)==2)then
call DestroyEffect(AddSpecialEffectTargetUnitBJ("origin",Target,"Abilities\\Spells\\Undead\\Cripple\\CrippleTarget.mdl"))
endif
endif
if ( Count > 50 ) then
call SetUnitFlyHeight(Target,GetUnitDefaultFlyHeight(Target),0)
call PauseUnit(Target,false)
call SetUnitPathing(Target,true)
call TerrainDeformationRippleBJ(.2,true,LTarget,1.,300.,96.,1,64.)
call DestroyEffect(AddSpecialEffectTargetUnitBJ("origin",Target,"Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl"))
call Surprise_jump_attack_Damage(Caster,GetUnitX(Target),GetUnitY(Target),AOE,dam)
call PauseTimer(GetExpiredTimer())
call PolledWait(.01)
call FastFlush(Tab)
call DestroyTimer(GetExpiredTimer())
call RemoveLocation(LTarget)
call PauseUnitBJ( false, Target )
endif
call SetInteger(Tab,"Counter",Count)
call RemoveLocation(lDest)
endfunction
function Trig_Surprise_jump_attack_Actions takes nothing returns nothing
local timer Tm=CreateTimer()
local string lf5=H2Tx(Tm)
local unit c=GetTriggerUnit()
local location Start=GetUnitLoc(c)
local location tp=GetSpellTargetLoc()
local real Range=DistanceBetweenPoints(Start,tp)
local real Angle=AngleBetweenPoints(Start,tp)
call SetHandle(lf5,"Caster",c)
call SetReal(lf5,"Distance",Range)
call SetReal(lf5,"Angle",Angle)
call SetInteger(lf5,"Counter",1)
call TimerStart(Tm,.02,true,function Surprise_jump_attack_Main)
endfunction
function InitTrig_Surprise_jump_attack takes nothing returns nothing
set gg_trg_Surprise_jump_attack = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Surprise_jump_attack, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Surprise_jump_attack, Condition( function Trig_Surprise_jump_attack_Conditions ) )
call TriggerAddAction( gg_trg_Surprise_jump_attack, function Trig_Surprise_jump_attack_Actions )
endfunction
scope Blur
private constant function GetAbi takes nothing returns integer
return 'AEev' //The spell's raw code
endfunction
function Trig_Blur_Conditions takes nothing returns boolean
return GetLearnedSkillBJ() == GetAbi()
endfunction
globals
private real blur = 100
private unit caster
endglobals
private function Blur_Main takes nothing returns nothing
local real MaxC = GetUnitAbilityLevel(caster,GetAbi()) * 25
local real MinC = ( GetUnitAbilityLevel(caster,GetAbi()) - 1 ) * 25
set blur = blur + GetRandomReal(-3,3)
if ( blur < MinC ) then
set blur = MinC
elseif ( blur > MaxC ) then
set blur = MaxC
endif
call SetUnitVertexColorBJ(caster,100,100,100,blur)
endfunction
private function Trig_Blur_Actions takes nothing returns nothing
local timer tm
if ( GetUnitAbilityLevel(GetLearningUnit(),GetAbi()) == 1 ) then
set caster = GetLearningUnit()
set tm = CreateTimer()
call TimerStart(tm,0.2,true,function Blur_Main)
endif
endfunction
//===========================================================================
function InitTrig_Blur takes nothing returns nothing
set gg_trg_Blur = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Blur, EVENT_PLAYER_HERO_SKILL )
call TriggerAddCondition( gg_trg_Blur, Condition( function Trig_Blur_Conditions ) )
call TriggerAddAction( gg_trg_Blur, function Trig_Blur_Actions )
endfunction
endscope