For my mode, I had a similar situation like this. I worked a solution for you. As Alexei pointed out, it might stress out the script. Feel free to change the hero, as this code ONLY works for Pharah. It is an easy change.
Code:
variables
{
player:
26: lookingPosition
27: beamEffect
}
rule(“set where the character is looking when secondary fire is held”)
{
event
{
Ongoing - Each Player;
All;
Pharah;
}
conditions
{
Is Button Held(Event Player, Secondary Fire) == True;
Hero Of(Event Player) == Hero(Pharah);
}
actions
{
Set Player Variable(Event Player, lookingPosition, Ray Cast Hit Position(Eye Position(Event Player), Add(Eye Position(
Event Player), Multiply(Facing Direction Of(Event Player), 1000)), All Living Players(Opposite Team Of(Team Of(Event Player))),
Event Player, True));
Wait(0.250, Ignore Condition);
Loop If Condition Is True;
}
}
rule(“create the beam effect on secondary fire hold”)
{
event
{
Ongoing - Each Player;
All;
Pharah;
}
conditions
{
Is Button Held(Event Player, Secondary Fire) == True;
Hero Of(Event Player) == Hero(Pharah);
}
actions
{
Create Beam Effect(Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Event Player), Bad Beam, Eye Position(
Event Player), Player Variable(Event Player, lookingPosition), Blue, Visible To Position and Radius);
Set Player Variable(Event Player, beamEffect, Last Created Entity);
}
}
rule(“remove the beam effect when not holding secondary fire”)
{
event
{
Ongoing - Each Player;
All;
Pharah;
}
conditions
{
Is Button Held(Event Player, Secondary Fire) != True;
Hero Of(Event Player) == Hero(Pharah);
}
actions
{
Destroy Effect(Player Variable(Event Player, beamEffect));
}
}
rule(“damage an enemy while Pharah holds right click if they are within the hitbox range”)
{
event
{
Ongoing - Each Player;
All;
Pharah;
}
conditions
{
Hero Of(Event Player) == Hero(Pharah);
Is Button Held(Event Player, Secondary Fire) == True;
X Component Of(Player Variable(Event Player, lookingPosition)) <= Add(X Component Of(Position Of(Player Closest To Reticle(
Event Player, Opposite Team Of(Team Of(Event Player))))), X Component Of(Vector(1, 0, 0)));
X Component Of(Player Variable(Event Player, lookingPosition)) >= Subtract(X Component Of(Position Of(Player Closest To Reticle(
Event Player, Opposite Team Of(Team Of(Event Player))))), X Component Of(Vector(1, 0, 0)));
Y Component Of(Player Variable(Event Player, lookingPosition)) <= Add(Y Component Of(Position Of(Player Closest To Reticle(
Event Player, Opposite Team Of(Team Of(Event Player))))), Y Component Of(Vector(0, 1.500, 0)));
Is In Line of Sight(Eye Position(Event Player), Position Of(Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(
Event Player)))), Enemy Barriers Block LOS) == True;
Is Alive(Event Player) == True;
}
actions
{
Damage(Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player))), Event Player, 25);
Wait(0.500, Ignore Condition);
Loop If Condition Is True;
}
}