Загрузка данных


@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()

}