|
楼主 |
发表于 2014-10-24 23:12:34
|
显示全部楼层
- globals
- constant integer Spellz2__SPELLID='A010'
- constant string Spellz2__EFFECT="war3mapImported\\slam.mdx"
- constant string Spellz2__EFFECT2="war3mapImported\\lightningNova.mdx"
- constant string Spellz2__EFFECT3="war3mapImported\\dead spirit by deckai2.mdx"
- constant string Spellz2__EFFECT4="war3mapImported\\effect_ReiatsuOverFlowbyDeckai.mdx"
- constant string Spellz2__EFFECT5="war3mapImported\\ArcaneExplosion.mdx"
- constant string Spellz2__EFFECT6="war3mapImported\\blueCharge3.mdx"
- constant integer si__Spellz2__data=50
- integer si__Spellz2__data_F=0
- integer si__Spellz2__data_I=0
- integer array si__Spellz2__data_V
- unit array s__Spellz2__data_c
- unit array s__Spellz2__data_t
- integer array s__Spellz2__data_count
- effect array s__Spellz2__data_e
- real array s__Spellz2__data_time
- real array s__Spellz2__data_dist
- endglobals
复制代码
- function s__Spellz2__data__allocate takes nothing returns integer
- local integer this=si__Spellz2__data_F
- if(this!=0)then
- set si__Spellz2__data_F=si__Spellz2__data_V[this]
- else
- set si__Spellz2__data_I=si__Spellz2__data_I+1
- set this=si__Spellz2__data_I
- endif
- if(this>8190)then
- call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1000.,"Unable to allocate id for an object of type: Spellz2__data")
- return 0
- endif
- set s__Spellz2__data_count[this]=0
- set s__Spellz2__data_time[this]=0.6
- set si__Spellz2__data_V[this]=-1
- return this
- endfunction
- function s__Spellz2__data_deallocate takes integer this returns nothing
- if this==null then
- call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1000.,"Attempt to destroy a null struct of type: Spellz2__data")
- return
- elseif(si__Spellz2__data_V[this]!=-1)then
- call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1000.,"Double free of type: Spellz2__data")
- return
- endif
- set si__Spellz2__data_V[this]=si__Spellz2__data_F
- set si__Spellz2__data_F=this
- endfunction
- function Spellz2__Periodic takes nothing returns nothing
- local timer z=GetExpiredTimer()
- local unit c=LoadUnitHandle(HS,GetHandleId(z),0)
- local unit t=LoadUnitHandle(HS,GetHandleId(z),1)
- call SetUnitAnimation(t,"death")
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT,GetUnitX(t),GetUnitY(t)))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT2,GetUnitX(t),GetUnitY(t)))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT3,GetUnitX(t),GetUnitY(t)))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT5,GetUnitX(t),GetUnitY(t)))
- call DestroyTimer(z)
- call FlushChildHashtable(HS,GetHandleId(z))
- set c=null
- set t=null
- endfunction
- function Spellz2__PlayAnimation takes unit caster,unit target,integer value,real time returns nothing
- local timer z=CreateTimer()
- call SetUnitAnimationByIndex(caster,value)
- call SoundStart("war3mapImported\\SlashKirito.mp3",GetUnitX(caster),GetUnitY(caster))
- call SaveUnitHandle(HS,GetHandleId(z),0,caster)
- call SaveUnitHandle(HS,GetHandleId(z),1,target)
- call TimerStart(z,time,false,function Spellz2__Periodic)
- set z=null
- endfunction
- function s__Spellz2__data_damage takes integer this returns real
- return I2R((GetUnitAbilityLevel(s__Spellz2__data_c[this],Spellz2__SPELLID)*700)+GetHeroStr(s__Spellz2__data_c[this],true)*3)
- endfunction
- function s__Spellz2__data_destroy takes integer this returns nothing
- call PauseUnit(s__Spellz2__data_c[this],false)
- call PauseUnit(s__Spellz2__data_t[this],false)
- call SetUnitInvulnerable(s__Spellz2__data_c[this],false)
- call SetUnitInvulnerable(s__Spellz2__data_t[this],false)
- call UnitDamageTarget(s__Spellz2__data_c[this],s__Spellz2__data_t[this],s__Spellz2__data_damage(this),true,true,null,DAMAGE_TYPE_DIVINE,null)
- call SetUnitPathing(s__Spellz2__data_c[this],true)
- call SetUnitTimeScale(s__Spellz2__data_c[this],1)
- call DestroyEffect(s__Spellz2__data_e[this])
- call s__Spellz2__data_deallocate(this)
- endfunction
- function s__Spellz2__data_periodic4 takes nothing returns nothing
- local timer z=GetExpiredTimer()
- local integer this=(LoadInteger(TimerUtils___ht,0,GetHandleId((z))))
- local real a=Angle(GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]))
- local real xx=(((GetUnitX(s__Spellz2__data_c[this]))*1.0)+((s__Spellz2__data_dist[this])*1.0)*Cos(((a)*1.0)*bj_DEGTORAD))
- local real yy=(((GetUnitY(s__Spellz2__data_c[this]))*1.0)+((s__Spellz2__data_dist[this])*1.0)*Sin(((a)*1.0)*bj_DEGTORAD))
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),a,1,'h010',0.5,255,255,255,55)
- call SetUnitTimeScale(bj_lastCreatedUnit,3)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),a,3,'h0A1',0.5,255,255,255,255)
- call SetUnitTimeScale(bj_lastCreatedUnit,3)
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT3,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this])))
- call SetUnitPosition(s__Spellz2__data_c[this],xx,yy)
- if Distance(GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]))<=140 then
- call ShakeGroupCamera(1,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),1000,12)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),270,1,'h00X',0.5,255,255,255,255)
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT2,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT3,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT4,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),270,10,'h03S',2.5,255,255,255,255)
- call SetUnitTimeScale(bj_lastCreatedUnit,3)
- call ReleaseTimer(z)
- call s__Spellz2__data_destroy(this)
- endif
- endfunction
- function s__Spellz2__data_periodic3 takes nothing returns nothing
- local timer z=GetExpiredTimer()
- local integer this=(LoadInteger(TimerUtils___ht,0,GetHandleId((z))))
- set s__Spellz2__data_dist[this]=Distance(GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]))/5
- call SetUnitTimeScale(s__Spellz2__data_c[this],1)
- call TimerStart(z,0.02,true,function s__Spellz2__data_periodic4)
- endfunction
- function s__Spellz2__data_periodic takes nothing returns nothing
- local timer z=GetExpiredTimer()
- local integer this=(LoadInteger(TimerUtils___ht,0,GetHandleId((z))))
- local real a=Angle(GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]))
- local real xx=(((GetUnitX(s__Spellz2__data_t[this]))*1.0)+((20)*1.0)*Cos(((a)*1.0)*bj_DEGTORAD))
- local real yy=(((GetUnitY(s__Spellz2__data_t[this]))*1.0)+((20)*1.0)*Sin(((a)*1.0)*bj_DEGTORAD))
- local real x
- local real y
- local integer int
- call SetUnitFacing(s__Spellz2__data_c[this],a)
- set s__Spellz2__data_time[this]=s__Spellz2__data_time[this]-0.02
- if s__Spellz2__data_time[this]<=0 then
- if s__Spellz2__data_count[this]==0 then
- call SoundStart("war3mapImported\\KiritoWhak2.mp3",GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]))
- endif
- if s__Spellz2__data_count[this]==9 then
- call SoundStart("war3mapImported\\KiritoWhak1.mp3",GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]))
- endif
- if s__Spellz2__data_count[this]==3 then
- call SoundStart("war3mapImported\\KiritoFast1.mp3",GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]))
- endif
- if s__Spellz2__data_count[this]==14 then
- call SoundStart("war3mapImported\\KiritoFast2.mp3",GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]))
- endif
- if s__Spellz2__data_count[this]>=4 and s__Spellz2__data_count[this]<=15 then
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),GetRandomReal(0,360),1.75,'h03T',1,255,255,255,255)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),GetRandomReal(0,360),2,'h0AC',1,255,255,255,255)
- call SetUnitTimeScale(bj_lastCreatedUnit,0.5)
- call SetUnitFlyHeight(bj_lastCreatedUnit,100,0)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),GetRandomReal(0,360),2.5,'h03T',1,255,255,255,45)
- call SetUnitFlyHeight(bj_lastCreatedUnit,100,0)
- if s__Spellz2__data_count[this]==10 then
- call SetUnitTimeScale(s__Spellz2__data_c[this],1.5)
- endif
- set s__Spellz2__data_time[this]=0.65
- elseif s__Spellz2__data_count[this]<4 then
- set s__Spellz2__data_time[this]=0.5
- elseif s__Spellz2__data_count[this]>12 then
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),GetRandomReal(0,360),2,'h03T',1,255,255,255,255)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),GetRandomReal(0,360),2,'h0AC',1,255,255,255,255)
- call SetUnitTimeScale(bj_lastCreatedUnit,1.5)
- call SetUnitFlyHeight(bj_lastCreatedUnit,100,0)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),a,1.5,'h00V',1,255,255,255,255)
- call SetUnitTimeScale(bj_lastCreatedUnit,1.5)
- call SetUnitFlyHeight(bj_lastCreatedUnit,0,0)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),GetRandomReal(0,360),3,'h03T',1,255,255,255,45)
- call SetUnitFlyHeight(bj_lastCreatedUnit,100,0)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),GetRandomReal(0,360),2,'h03U',1,255,255,255,155)
- call SetUnitTimeScale(bj_lastCreatedUnit,2)
- if s__Spellz2__data_count[this]==27 then
- call SetUnitTimeScale(s__Spellz2__data_c[this],2)
- endif
- set s__Spellz2__data_time[this]=0.35
- endif
- set int=GetRandomInt(12,17)
- if int==12 then
- set int=11
- endif
- if s__Spellz2__data_count[this]<29 then
- call SetUnitPosition(s__Spellz2__data_t[this],xx,yy)
- set x=(((GetUnitX(s__Spellz2__data_t[this]))*1.0)+((120)*1.0)*Cos(((a+180)*1.0)*bj_DEGTORAD))
- set y=(((GetUnitY(s__Spellz2__data_t[this]))*1.0)+((120)*1.0)*Sin(((a+180)*1.0)*bj_DEGTORAD))
- call SetUnitPosition(s__Spellz2__data_c[this],x,y)
- call Spellz2__PlayAnimation(s__Spellz2__data_c[this],s__Spellz2__data_t[this],int,s__Spellz2__data_time[this])
- elseif s__Spellz2__data_count[this]==29 then
- set s__Spellz2__data_e[this]=AddSpecialEffectTarget(Spellz2__EFFECT6,s__Spellz2__data_c[this],"weapon")
- set s__Spellz2__data_time[this]=0.7
- call SetUnitTimeScale(s__Spellz2__data_c[this],1)
- call SetUnitAnimation(s__Spellz2__data_c[this],"attack")
- endif
- if s__Spellz2__data_count[this]>=30 then
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT2,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT3,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]),270,0.25,'h03V',0.5,255,255,255,255)
- call SlideUnitAngle(s__Spellz2__data_t[this],0,0.0,a,"")
- call SetUnitTimeScale(s__Spellz2__data_c[this],0.2)
- call SetUnitAnimation(s__Spellz2__data_c[this],"attack")
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),270,4,'h0A1',2.2,255,255,255,155)
- call SetUnitTimeScale(bj_lastCreatedUnit,3)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),180,4,'h00Y',2.2,255,255,255,155)
- call SetUnitTimeScale(bj_lastCreatedUnit,3)
- call TimerStart(z,2.5,false,function s__Spellz2__data_periodic3)
- endif
- set s__Spellz2__data_count[this]=s__Spellz2__data_count[this]+1
- endif
- set z=null
- endfunction
- function s__Spellz2__data_periodic2 takes nothing returns nothing
- local timer z=GetExpiredTimer()
- local integer this=(LoadInteger(TimerUtils___ht,0,GetHandleId((z))))
- local real a=Angle(GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this]))
- local real x=(((GetUnitX(s__Spellz2__data_t[this]))*1.0)+((120)*1.0)*Cos(((a+180)*1.0)*bj_DEGTORAD))
- local real y=(((GetUnitY(s__Spellz2__data_t[this]))*1.0)+((120)*1.0)*Sin(((a+180)*1.0)*bj_DEGTORAD))
- call SetUnitPosition(s__Spellz2__data_c[this],x,y)
- call SetUnitFacing(s__Spellz2__data_c[this],a)
- call Spellz2__PlayAnimation(s__Spellz2__data_c[this],s__Spellz2__data_t[this],GetRandomInt(13,16),0.6)
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT2,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT3,GetUnitX(s__Spellz2__data_t[this]),GetUnitY(s__Spellz2__data_t[this])))
- call TimerStart(z,0.02,true,function s__Spellz2__data_periodic)
- set z=null
- endfunction
- function s__Spellz2__data_create takes unit caster,unit target returns integer
- local integer this=s__Spellz2__data__allocate()
- local timer z=CreateTimer()
- set s__Spellz2__data_c[this]=caster
- set s__Spellz2__data_t[this]=target
- call PauseUnit(s__Spellz2__data_c[this],true)
- call PauseUnit(s__Spellz2__data_t[this],true)
- call SetUnitInvulnerable(s__Spellz2__data_c[this],true)
- call SetUnitInvulnerable(s__Spellz2__data_t[this],true)
- call SetUnitPathing(s__Spellz2__data_c[this],false)
- call SetUnitAnimation(s__Spellz2__data_c[this],"Spell Two")
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT3,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT2,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this])))
- call DestroyEffect(AddSpecialEffect(Spellz2__EFFECT5,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this])))
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),270,4,'h0A1',4.2,255,255,255,155)
- call SetUnitTimeScale(bj_lastCreatedUnit,2)
- call EffectUnitColor(s__Spellz2__data_c[this],GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),180,4,'h03W',4.2,255,255,255,155)
- call SetUnitTimeScale(bj_lastCreatedUnit,2)
- call SoundStart("war3mapImported\\Eclipe.mp3",GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]))
- call ShakeGroupCamera(21.0,GetUnitX(s__Spellz2__data_c[this]),GetUnitY(s__Spellz2__data_c[this]),800,25)
- call SaveInteger(TimerUtils___ht,0,GetHandleId((z)),(this))
- call TimerStart(z,4.65,true,function s__Spellz2__data_periodic2)
- set z=null
- return this
- endfunction
- function Spellz2__Conditions takes nothing returns boolean
- return GetSpellAbilityId()==Spellz2__SPELLID
- endfunction
- function Spellz2__Actions takes nothing returns nothing
- local unit c=GetTriggerUnit()
- local unit t=GetSpellTargetUnit()
- call s__Spellz2__data_create(c,t)
- set c=null
- set t=null
- endfunction
- function Spellz2__init takes nothing returns nothing
- local trigger t=CreateTrigger()
- local integer index=0
- loop
- call TriggerRegisterPlayerUnitEvent(t,Player(index),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
- set index=index+1
- exitwhen index==bj_MAX_PLAYER_SLOTS
- endloop
- call TriggerAddCondition(t,Condition(function Spellz2__Conditions))
- call TriggerAddAction(t,function Spellz2__Actions)
- set t=null
- endfunction
复制代码
努力工作中 我也真是醉了 求助1个技能需要在U9 飞飞世界 GA论坛都发帖才找到1个思路
@chyj4747 话说使用VJ的私有域来注册全局变量和注册触发器事件的方法具体要怎麽个使用法? VJ处于一知半解的状态
到底是用Library还是Scope来做呢(>_<)
|
|