Загрузка данных
@name Homelander_V36_PRO_Beam
@persist Owner:entity Range MaxHolos LastEffect SpawnPos:vector IsFiring_Old DamageTick ForceTick Pulse
@trigger all
if (first()) {
Owner = owner()
Range = 15000
MaxHolos = 45
LastEffect = 0
DamageTick = 0
ForceTick = 0
Pulse = 0
SpawnPos = entity():pos()
entity():setAlpha(255)
entity():propNotSolid(0)
for(I=1,MaxHolos){
holoCreate(I)
holoModel(I,"models/hunter/misc/sphere025x025.mdl")
holoColor(I,vec(255,40,40))
holoMaterial(I,"models/debug/debugwhite")
holoDisableShading(I,1)
holoAlpha(I,0)
IdxR=I+45
holoCreate(IdxR)
holoModel(IdxR,"models/hunter/misc/sphere025x025.mdl")
holoColor(IdxR,vec(255,40,40))
holoMaterial(IdxR,"models/debug/debugwhite")
holoDisableShading(IdxR,1)
holoAlpha(IdxR,0)
}
holoCreate(91)
holoModel(91,"models/hunter/misc/sphere025x025.mdl")
holoColor(91,vec(255,255,220))
holoMaterial(91,"models/debug/debugwhite")
holoDisableShading(91,1)
holoAlpha(91,0)
timer("logic",50)
}
if(clk("logic")){
Pulse += 0.15
EPos=Owner:shootPos()
EAng=Owner:eyeAngles()
Forward=EAng:forward()
Right=EAng:right()
Up=EAng:up()
L_Start=EPos+(Right*-3.2)+(Up*2.5)+(Forward*15)
R_Start=EPos+(Right*3.2)+(Up*2.5)+(Forward*15)
rangerFilter(Owner)
Trace=rangerOffset(Range,EPos,Forward)
HitPos=Trace:pos()
Dist=Trace:distance()
Targ=Trace:entity()
IsFiring=Owner:keyAttack1()&&Owner:keyAttack2()
if(IsFiring&&!IsFiring_Old){
soundPlay(2,0,"weapons/flaregun/burn.wav")
}
if(!IsFiring&&IsFiring_Old){
soundStop(1)
soundStop(2)
for(I=1,91){
holoAlpha(I,0)
}
entity():setPos(SpawnPos)
entity():setAlpha(255)
}
if(IsFiring){
entity():setAlpha(0)
entity():setPos(HitPos+vec(0,0,100))
CurrentDist=min(Dist,Range)
Step=CurrentDist/MaxHolos
WidthBase=0.11+sin(Pulse)*0.02
for(I=1,MaxHolos){
IdxR=I+45
Frac=I/MaxHolos
Wobble=sin(Pulse*3 + I*0.35)*0.04
Offset=Forward*(I*Step)
PosL=L_Start+Offset+(Right*Wobble)
PosR=R_Start+Offset-(Right*Wobble)
holoAlpha(I,255)
holoAlpha(IdxR,255)
holoPos(I,PosL)
holoPos(IdxR,PosR)
holoAng(I,EAng)
holoAng(IdxR,EAng)
S_Len=(Step/12)*3.5
Width=WidthBase+(Frac*0.03)
holoScale(I,vec(S_Len,Width,Width))
holoScale(IdxR,vec(S_Len,Width,Width))
}
holoAlpha(91,255)
holoPos(91,HitPos)
Impact=0.55+sin(Pulse*8)*0.25
holoScale(91,vec(Impact))
if(Targ:isValid()&&Targ!=Owner){
if(curtime()>DamageTick){
Targ:takeDamage(12,Owner,entity())
if(!Targ:isOnFire()){
Targ:ignite(1)
}
DamageTick=curtime()+0.08
}
if(curtime()>ForceTick){
Targ:applyOffsetForce(
Forward*1700,
HitPos
)
ForceTick=curtime()+0.12
}
}
if(curtime()>LastEffect){
soundPlay(
1,
0,
"ambient/energy/spark"+randint(1,6)+".wav"
)
LastEffect=curtime()+0.12
}
}
IsFiring_Old=IsFiring
timer("logic",50)
}
if(last()){
holoDeleteAll()
}