Return to post
settings
{
main
{
Description: "Pharah 1on1 Practice Tool v3.0 by Seita"
}
lobby
{
Allow Players Who Are In Queue: Yes
Match Voice Chat: Enabled
Max Spectators: 12
Max Team 1 Players: 1
Max Team 2 Players: 1
}
modes
{
Assault
{
enabled maps
{
}
}
Control
{
Limit Valid Control Points: First
enabled maps
{
}
}
Deathmatch
{
enabled maps
{
}
}
Escort
{
enabled maps
{
}
}
Hybrid
{
enabled maps
{
}
}
Skirmish
{
enabled maps
{
Workshop Chamber
}
}
General
{
Game Mode Start: Manual
Hero Limit: Off
Kill Cam: Off
Spawn Health Packs: Disabled
}
}
heroes
{
General
{
Pharah
{
Ultimate Ability Barrage: Off
}
}
}
}
variables
{
global:
0: BotSpawn
1: PlayerSpawn
2: PathLoc
3: RocketLandHelper
4: RocketLandPos
5: RangeProfile
9: BotFacing
10: Center
11: BotShoot
12: NextRound
13: Team1Dmg
14: Team2Dmg
15: BotPathing
17: RocketBotPos
18: BotUsingFuel
22: BotScore
23: PlayerScore
28: Dodge1
29: Dodge2
33: PathDirection
34: PathOld
35: PathHelper
37: RocketPlayerPos
43: BotFlying
44: StartingJump
49: BackDamage
player:
2: Hud2
3: ConcRandomizer
4: PlayerPosition
6: Hero
7: JumpJetCD
8: Active
9: Hud4
10: InteractCooldown
11: NotBot
12: Hud1
13: Hud3
14: ShootHelper
15: Hud5
22: BotPlayerDistance
}
subroutines
{
1: ShootNormal
2: ResetGlobals
5: DodgeRocket
}
rule("Pharah 1on1 Practice Tool by Seita")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
actions
{
Disable Inspector Recording;
Event Player.Hud1 = -1;
Event Player.Hud2 = -1;
Event Player.Hud3 = -1;
Event Player.Hud4 = -1;
Event Player.Hud5 = -1;
}
}
rule("Mercy Pocket: Full HP, Stop Healing & Damage Boost")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Health(Event Player) == 200;
Hero Of(Event Player) == Hero(Pharah);
}
actions
{
Stop All Heal Over Time(Event Player);
Set Damage Dealt(Event Player, 130);
}
}
rule("Mercy Pocket: 0.5s After taking Damage, Start Healing 50 hp/s & Damage Boost Off")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Health(Event Player) < 200;
Hero Of(Event Player) == Hero(Pharah);
}
actions
{
Wait(0.500, Ignore Condition);
Start Heal Over Time(Event Player, Null, 9999, 50);
Set Damage Dealt(Event Player, 100);
}
}
disabled rule("Game mode:")
{
event
{
Ongoing - Global;
}
}
rule("Locations")
{
event
{
Ongoing - Global;
}
actions
{
Global.BotSpawn = Vector(-17, 0.500, 0);
Global.PlayerSpawn = Vector(17, 0.500, 0);
Global.PathLoc = Vector(-15, 1, -15);
Modify Global Variable(PathLoc, Append To Array, Vector(0, 1, -15));
Modify Global Variable(PathLoc, Append To Array, Vector(15, 1, -15));
Modify Global Variable(PathLoc, Append To Array, Vector(15, 1, 0));
Modify Global Variable(PathLoc, Append To Array, Vector(15, 1, 15));
Modify Global Variable(PathLoc, Append To Array, Vector(0, 1, 15));
Modify Global Variable(PathLoc, Append To Array, Vector(-15, 1, 15));
Modify Global Variable(PathLoc, Append To Array, Vector(-15, 1, 0));
Global.PathHelper = 0;
Modify Global Variable(PathHelper, Append To Array, 1);
Modify Global Variable(PathHelper, Append To Array, 2);
Modify Global Variable(PathHelper, Append To Array, 3);
Modify Global Variable(PathHelper, Append To Array, 4);
Modify Global Variable(PathHelper, Append To Array, 5);
Modify Global Variable(PathHelper, Append To Array, 6);
Modify Global Variable(PathHelper, Append To Array, 7);
Global.Center = Vector(0, 1, 0);
Pause Match Time;
Set Match Time(1220);
}
}
rule("Not Bot")
{
event
{
Player Joined Match;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
}
actions
{
Event Player.NotBot = 1;
}
}
rule("Game starts (2 players)")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Event Player.Active == 1;
Players In Slot(0, Team 2).NotBot == 1;
}
actions
{
Call Subroutine(ResetGlobals);
Event Player.Hero = Hero Of(Event Player);
Start Forcing Player To Be Hero(Event Player, Hero(Symmetra));
Start Forcing Player To Be Hero(Event Player, Event Player.Hero);
Respawn(Event Player);
Players In Slot(0, Team 2).Hero = Hero Of(Players In Slot(0, Team 2));
Start Forcing Player To Be Hero(Players In Slot(0, Team 2), Hero(Symmetra));
Start Forcing Player To Be Hero(Players In Slot(0, Team 2), Players In Slot(0, Team 2).Hero);
Respawn(Players In Slot(0, Team 2));
Wait(0.050, Ignore Condition);
Teleport(Event Player, Global.PlayerSpawn);
Teleport(Players In Slot(0, Team 2), Global.BotSpawn);
Set Facing(Event Player, Local Vector Of(Global.BotSpawn, Event Player, Rotation And Translation), To Player);
Set Facing(Players In Slot(0, Team 2), Local Vector Of(Global.PlayerSpawn, Players In Slot(0, Team 2), Rotation And Translation),
To Player);
Stop Forcing Player To Be Hero(All Players(All Teams));
}
}
rule("Next Round (2 players)")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Event Player.Active == 1;
Global.NextRound == 1;
Players In Slot(0, Team 2).NotBot == 1;
}
actions
{
Call Subroutine(ResetGlobals);
Event Player.Hero = Hero Of(Event Player);
Start Forcing Player To Be Hero(Event Player, Hero(Symmetra));
Start Forcing Player To Be Hero(Event Player, Event Player.Hero);
Respawn(Event Player);
Players In Slot(0, Team 2).Hero = Hero Of(Players In Slot(0, Team 2));
Start Forcing Player To Be Hero(Players In Slot(0, Team 2), Hero(Symmetra));
Start Forcing Player To Be Hero(Players In Slot(0, Team 2), Players In Slot(0, Team 2).Hero);
Respawn(Players In Slot(0, Team 2));
Wait(0.050, Ignore Condition);
Teleport(Event Player, Global.PlayerSpawn);
Teleport(Players In Slot(0, Team 2), Global.BotSpawn);
Set Facing(Event Player, Local Vector Of(Global.BotSpawn, Event Player, Rotation And Translation), To Player);
Set Facing(Players In Slot(0, Team 2), Local Vector Of(Global.PlayerSpawn, Players In Slot(0, Team 2), Rotation And Translation),
To Player);
Global.NextRound = 0;
Stop Forcing Player To Be Hero(All Players(All Teams));
}
}
rule("Game starts (Bot)")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Event Player.Active == 1;
Players In Slot(0, Team 2).NotBot != 1;
}
actions
{
Call Subroutine(ResetGlobals);
Event Player.Hero = Hero Of(Event Player);
Start Forcing Player To Be Hero(Event Player, Hero(Symmetra));
Start Forcing Player To Be Hero(Event Player, Event Player.Hero);
Respawn(Event Player);
Wait(0.050, Ignore Condition);
Teleport(Event Player, Global.PlayerSpawn);
Set Facing(Event Player, Local Vector Of(Global.BotSpawn, Event Player, Rotation And Translation), To Player);
Create Dummy Bot(Hero(Pharah), Team 2, 0, Global.BotSpawn, Direction Towards(Global.BotSpawn, Global.PlayerSpawn));
Stop Forcing Player To Be Hero(All Players(All Teams));
}
}
rule("Next Round (Bot)")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Event Player.Active == 1;
Global.NextRound == 1;
Players In Slot(0, Team 2).NotBot != 1;
}
actions
{
Call Subroutine(ResetGlobals);
Event Player.Hero = Hero Of(Event Player);
Start Forcing Player To Be Hero(Event Player, Hero(Symmetra));
Start Forcing Player To Be Hero(Event Player, Event Player.Hero);
Respawn(Event Player);
Wait(0.050, Ignore Condition);
Teleport(Event Player, Global.PlayerSpawn);
Set Facing(Event Player, Local Vector Of(Global.BotSpawn, Event Player, Rotation And Translation), To Player);
Create Dummy Bot(Hero(Pharah), Team 2, 0, Global.BotSpawn, Direction Towards(Global.BotSpawn, Global.PlayerSpawn));
Global.NextRound = 0;
Stop Forcing Player To Be Hero(All Players(All Teams));
}
}
rule("Sub: Reset Globals")
{
event
{
Subroutine;
ResetGlobals;
}
actions
{
Global.RangeProfile = 0;
Global.BackDamage = 0;
Global.BotShoot = 0;
Global.BotPathing = 0;
Global.BotFacing = 0;
Global.BotFlying = 0;
Global.BotUsingFuel = 0;
Global.StartingJump = 0;
}
}
rule("Bot Enabled actions vs Pharah")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Has Spawned(Event Player) == True;
Is Dummy Bot(Event Player) == True;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
}
actions
{
Global.StartingJump = 1;
Wait(0.500, Ignore Condition);
Global.BotFacing = 1;
Global.RangeProfile = Random Integer(0, 1);
Global.BotPathing = 1;
Wait(1, Ignore Condition);
Wait(0.250, Ignore Condition);
Set Status(Event Player, Null, Invincible, 0);
Wait(0.250, Ignore Condition);
Global.BotShoot = 1;
Start Holding Button(Event Player, Jump);
Wait(0.250, Ignore Condition);
Global.BotUsingFuel = 1;
Global.BotFlying = 1;
}
}
rule("Bot Enabled actions vs no Pharah")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Has Spawned(Event Player) == True;
Is Dummy Bot(Event Player) == True;
Hero Of(Players In Slot(0, Team 1)) != Hero(Pharah);
}
actions
{
Wait(0.500, Ignore Condition);
Global.BotFacing = 1;
Global.BotPathing = 1;
Press Button(Event Player, Ability 1);
Event Player.JumpJetCD = 10;
Chase Player Variable At Rate(Event Player, JumpJetCD, 0, 1, Destination and Rate);
Wait(0.900, Ignore Condition);
Global.BotShoot = 1;
Global.BotUsingFuel = 1;
Global.BotFlying = 1;
}
}
rule("Rocket jump Script")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Is Button Held(Event Player, Ultimate) == True;
Players In Slot(0, Team 2).NotBot != 1;
Hero Of(Event Player) == Hero(Pharah);
}
actions
{
Press Button(Event Player, Primary Fire);
Wait(0.040, Ignore Condition);
Press Button(Event Player, Ability 1);
Small Message(All Players(All Teams), Custom String("Rocket jump script used"));
}
}
disabled rule("Bot Flying:")
{
event
{
Ongoing - Global;
}
}
rule("Bot Starting Jump")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Global.StartingJump == 1;
}
actions
{
Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Vector(X Component Of(Position Of(Event Player)) + 0.300,
Y Component Of(Position Of(Event Player)), Z Component Of(Position Of(Event Player)))), To World);
Wait(0.250, Ignore Condition);
Press Button(Event Player, Primary Fire);
Wait(0.040, Ignore Condition);
Press Button(Event Player, Ability 1);
Set Status(Event Player, Null, Invincible, 9999);
Event Player.JumpJetCD = 10;
Chase Player Variable At Rate(Event Player, JumpJetCD, 0, 1, Destination and Rate);
}
}
rule("BotUsingFuel Vertical speed < -5.5")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Vertical Speed Of(Event Player) < -5.500;
Global.BotUsingFuel == 1;
}
actions
{
Start Holding Button(Event Player, Jump);
}
}
rule("BotUsingFuel, Stop - Vertical speed > 3.8")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Vertical Speed Of(Event Player) > 3.800;
Global.BotUsingFuel == 1;
}
actions
{
Stop Holding Button(Event Player, Jump);
}
}
rule("Bot JumpJet")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Y Component Of(Eye Position(Event Player)) < 23;
Global.BotFlying == 1;
Event Player.JumpJetCD == 0;
}
actions
{
Global.BotUsingFuel = 0;
Stop Holding Button(Event Player, Jump);
Wait(0.300, Ignore Condition);
Press Button(Event Player, Ability 1);
Event Player.JumpJetCD = 10;
Chase Player Variable At Rate(Event Player, JumpJetCD, 0, 1, Destination and Rate);
Wait(0.900, Ignore Condition);
Global.BotUsingFuel = 1;
}
}
disabled rule("Bot Shooting:")
{
event
{
Ongoing - Global;
}
}
rule("Bot Shoot")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Global.BotShoot == 1;
Has Spawned(Event Player) == True;
Is Alive(Players In Slot(0, Team 1)) == True;
Is Dummy Bot(Event Player) == True;
}
actions
{
Global.BotFacing = 0;
Stop Facing(Event Player);
Call Subroutine(ShootNormal);
Wait(0.100, Ignore Condition);
Global.BotFacing = 1;
Wait(0.645, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Sub: Predict Rocket")
{
event
{
Subroutine;
ShootNormal;
}
actions
{
Event Player.PlayerPosition = Vector(X Component Of(Eye Position(Players In Slot(0, Team 1))), Y Component Of(Eye Position(
Players In Slot(0, Team 1))) - 0, Z Component Of(Eye Position(Players In Slot(0, Team 1))));
Wait(0.025, Ignore Condition);
Event Player.BotPlayerDistance = Distance Between(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1)));
Modify Player Variable(Event Player, PlayerPosition, Append To Array, Vector(X Component Of(Eye Position(Players In Slot(0,
Team 1))), Y Component Of(Eye Position(Players In Slot(0, Team 1))) - 0, Z Component Of(Eye Position(Players In Slot(0,
Team 1)))));
Event Player.BotPlayerDistance /= 45;
Event Player.BotPlayerDistance /= 0.025;
Event Player.ShootHelper = Event Player.PlayerPosition[1];
Event Player.ShootHelper -= Event Player.PlayerPosition[0];
Event Player.BotPlayerDistance *= Event Player.ShootHelper;
Event Player.BotPlayerDistance = Vector(X Component Of(Event Player.BotPlayerDistance), Y Component Of(
Event Player.BotPlayerDistance) / 3, Z Component Of(Event Player.BotPlayerDistance));
Event Player.BotPlayerDistance += Event Player.PlayerPosition[1];
Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.BotPlayerDistance), To World);
Press Button(Event Player, Primary Fire);
}
}
rule("Bot Melee")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Is Alive(Players In Slot(0, Team 1)) == True;
Health(Players In Slot(0, Team 1)) < 30;
Distance Between(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1))) < 3;
}
actions
{
Press Button(Event Player, Melee);
}
}
rule("Bot Concussive Blast X-Component")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Is Alive(Players In Slot(0, Team 1)) == True;
Y Component Of(Eye Position(Players In Slot(0, Team 1))) > 20;
Y Component Of(Eye Position(Event Player)) > 26;
(X Component Of(Eye Position(Players In Slot(0, Team 1))) > 14 || X Component Of(Eye Position(Players In Slot(0, Team 1))) < -14)
== True;
}
actions
{
Event Player.ConcRandomizer = Random Integer(0, 4);
Abort If(Event Player.ConcRandomizer <= 1);
Press Button(Event Player, Ability 2);
}
}
rule("Bot Concussive Blast Z-Component")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Is Alive(Players In Slot(0, Team 1)) == True;
Y Component Of(Eye Position(Players In Slot(0, Team 1))) > 20;
Y Component Of(Eye Position(Event Player)) > 26;
(Z Component Of(Eye Position(Players In Slot(0, Team 1))) > 14 || Z Component Of(Eye Position(Players In Slot(0, Team 1))) < -14)
== True;
}
actions
{
Event Player.ConcRandomizer = Random Integer(0, 4);
Abort If(Event Player.ConcRandomizer <= 1);
Press Button(Event Player, Ability 2);
}
}
disabled rule("Bot Movement, Pathing, Facing:")
{
event
{
Ongoing - Global;
}
}
rule("Bot Pathing in general")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == True;
Is Alive(Event Player) == True;
Global.BotPathing == 1;
}
actions
{
Skip If(Global.BotPathing == 0, 5);
Modify Global Variable(PathHelper, Remove From Array By Value, Global.PathDirection);
Global.PathOld = Global.PathDirection;
Global.PathDirection = Random Value In Array(Global.PathHelper);
Modify Global Variable(PathHelper, Append To Array, Global.PathOld);
Start Throttle In Direction(Event Player, Local Vector Of(Global.PathLoc[Global.PathDirection], Event Player,
Rotation And Translation), 1, To Player, Replace existing throttle, Direction and Magnitude);
Wait(Random Real(0.150, 0.350), Ignore Condition);
Loop If Condition Is True;
}
}
rule("Bot Pathing Far > 13 (Range profile 0)")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Distance Between(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1))) > 13;
Global.BackDamage == 0;
Is Dummy Bot(Event Player) == True;
Global.BotPathing == 1;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
Global.RangeProfile == 0;
}
actions
{
Start Forcing Throttle(Event Player, 1, 1, 0, 0, 0, 1);
}
}
rule("Bot Pathing Close < 10 (Range profile 0)")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Distance Between(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1))) < 10;
Global.BackDamage == 0;
Is Dummy Bot(Event Player) == True;
Global.BotPathing == 1;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
Global.RangeProfile == 0;
}
actions
{
Stop Forcing Throttle(Event Player);
}
}
rule("Bot Pathing Far > 20 (Range profile 1)")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Distance Between(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1))) > 20;
Global.BackDamage == 0;
Is Dummy Bot(Event Player) == True;
Global.BotPathing == 1;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
Global.RangeProfile == 1;
}
actions
{
Start Forcing Throttle(Event Player, 1, 1, 0, 0, 0, 1);
}
}
rule("Bot Pathing Close < 15 (Range profile 1)")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Distance Between(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1))) < 15;
Global.BackDamage == 0;
Is Dummy Bot(Event Player) == True;
Global.BotPathing == 1;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
Global.RangeProfile == 1;
}
actions
{
Stop Forcing Throttle(Event Player);
}
}
rule("Bot Pathing really Close < 7")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Has Spawned(Event Player) == True;
Distance Between(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1))) <= 7;
Is Dummy Bot(Event Player) == True;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
}
actions
{
Start Forcing Throttle(Event Player, 1, 1, 0, 0, 0, 1);
}
}
rule("Bot Pathing after taking damage")
{
event
{
Player Took Damage;
Team 2;
Slot 0;
}
conditions
{
Team Of(Attacker) == Team 1;
Is Dummy Bot(Event Player) == True;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
}
actions
{
Global.BackDamage = 1;
Start Forcing Throttle(Event Player, 0, 0, 1, 1, 0, 1);
Wait(0.800, Ignore Condition);
Skip If(Global.BotPathing == 0, 1);
Start Forcing Throttle(Event Player, 1, 1, 0, 0, 0, 1);
Global.BackDamage = 0;
}
}
rule("Player Shooting: Bot Dodge - 3s cooldown")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Is Firing Primary(Players In Slot(0, Team 1)) == True;
Is Dummy Bot(Event Player) == True;
Global.BotShoot == 1;
Hero Of(Players In Slot(0, Team 1)) == Hero(Pharah);
}
actions
{
Global.BotPathing = 0;
Start Forcing Throttle(Event Player, 0, 0, 0, 0, 1, 1);
Call Subroutine(DodgeRocket);
Wait(Distance Between(Eye Position(Players In Slot(0, Team 1)), Eye Position(Players In Slot(0, Team 2))) / 35, Ignore Condition);
Global.BotPathing = 1;
Wait(3, Ignore Condition);
}
}
rule("SUB: DodgeRocket")
{
event
{
Subroutine;
DodgeRocket;
}
actions
{
Global.RocketBotPos = Eye Position(Players In Slot(0, Team 2));
Global.RocketPlayerPos = Eye Position(Players In Slot(0, Team 1));
Global.RocketLandHelper = Global.RocketPlayerPos + Facing Direction Of(Players In Slot(0, Team 1)) * Distance Between(
Players In Slot(0, Team 1), Players In Slot(0, Team 2));
Global.RocketLandPos = Ray Cast Hit Position(Eye Position(Players In Slot(0, Team 1)), Global.RocketLandHelper, All Players(
Team 2), Players In Slot(0, Team 1), True);
Global.Dodge1 = Eye Position(Players In Slot(0, Team 2)) + 7 * Direction From Angles(90 + Horizontal Angle From Direction(
Direction Towards(Eye Position(Players In Slot(0, Team 1)), Eye Position(Players In Slot(0, Team 2)))), 0);
Global.Dodge2 = Eye Position(Players In Slot(0, Team 2)) + 7 * Direction From Angles(-90 + Horizontal Angle From Direction(
Direction Towards(Eye Position(Players In Slot(0, Team 1)), Eye Position(Players In Slot(0, Team 2)))), 0);
Skip If(Distance Between(Global.RocketLandPos, Global.Dodge1) >= Distance Between(Global.RocketLandPos, Global.Dodge2), 1);
Start Throttle In Direction(Event Player, Local Vector Of(Global.Dodge2, Event Player, Rotation And Translation), 1, To Player,
Replace existing throttle, Direction and Magnitude);
Skip If(Distance Between(Global.RocketLandPos, Global.Dodge1) < Distance Between(Global.RocketLandPos, Global.Dodge2), 1);
Start Throttle In Direction(Event Player, Local Vector Of(Global.Dodge1, Event Player, Rotation And Translation), 1, To Player,
Replace existing throttle, Direction and Magnitude);
}
}
rule("Bot Facing")
{
event
{
Ongoing - Each Player;
Team 2;
Slot 0;
}
conditions
{
Has Spawned(Event Player) == True;
Is Dummy Bot(Event Player) == True;
Is Alive(Event Player) == True;
Global.BotFacing == 1;
}
actions
{
Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Players In Slot(0, Team 1))), 5000, To World,
Direction and Turn Rate);
}
}
disabled rule("Buttons & Hud")
{
event
{
Ongoing - Global;
}
}
rule("Scoreboard")
{
event
{
Ongoing - Global;
}
actions
{
Create HUD Text(All Players(All Teams), Null, Null, Custom String(" "), Left, 2, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, String("{0} - {1}", String("Kills"), String("Damage")), Left, 3, White, White,
White, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, String("{0}: {1}", Players In Slot(0, Team 1), String("{0} - {1}",
Round To Integer(Global.PlayerScore, To Nearest), Round To Integer(Global.Team1Dmg, To Nearest))), Left, 4, White, White, Blue,
Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, String("{0}: {1}", Players In Slot(0, Team 2), String("{0} - {1}",
Round To Integer(Global.BotScore, To Nearest), Round To Integer(Global.Team2Dmg, To Nearest))), Left, 5, White, White, Red,
Visible To and String, Default Visibility);
}
}
rule("Interact: Start")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Is Button Held(Event Player, Interact) == True;
Event Player.Active == 0;
Event Player.InteractCooldown == 0;
}
actions
{
Global.NextRound = 0;
Event Player.InteractCooldown = 1;
Chase Player Variable At Rate(Event Player, InteractCooldown, 0, 1, Destination and Rate);
Event Player.Active = 1;
Global.BotScore = 0;
Global.PlayerScore = 0;
Global.Team1Dmg = 0;
Global.Team2Dmg = 0;
}
}
rule("Interact: Stop")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Is Button Held(Event Player, Interact) == True;
Event Player.Active == 1;
Event Player.InteractCooldown == 0;
}
actions
{
Event Player.InteractCooldown = 1;
Chase Player Variable At Rate(Event Player, InteractCooldown, 0, 1, Destination and Rate);
Event Player.Active = 0;
Destroy Dummy Bot(Team 2, 0);
}
}
rule("Change hero: Crouch + Ultimate")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Crouch) == True;
Is Button Held(Event Player, Ultimate) == True;
Players In Slot(0, Team 1).Active == 0;
}
actions
{
Set Player Allowed Heroes(Event Player, Random Value In Array(All Heroes));
Wait(0.100, Ignore Condition);
Set Player Allowed Heroes(Event Player, All Heroes);
}
}
rule("Next Round & Scoring: Player Dies")
{
event
{
Player Died;
Team 1;
Slot 0;
}
actions
{
Play Effect(Players In Slot(0, Team 2), Buff Explosion Sound, White, Eye Position(Players In Slot(0, Team 2)), 500);
Global.BotScore += 1;
Wait(0.300, Ignore Condition);
Destroy Dummy Bot(Team 2, 0);
Wait(0.700, Ignore Condition);
Global.NextRound = 1;
}
}
rule("Next Round & Scoring: Bot Dies")
{
event
{
Player Died;
Team 2;
Slot 0;
}
actions
{
Play Effect(Players In Slot(0, Team 1), Buff Explosion Sound, White, Eye Position(Players In Slot(0, Team 1)), 500);
Global.PlayerScore += 1;
Wait(1, Ignore Condition);
Global.NextRound = 1;
Destroy Dummy Bot(Team 2, 0);
}
}
rule("Hud Game Mode off")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Event Player.Active == 0;
}
actions
{
Destroy HUD Text(Event Player.Hud4);
Create HUD Text(All Players(All Teams), Null, Null, String("{0}: {1}", String("Game"), String("Off")), Left, 0, White, White, Red,
Visible To and String, Default Visibility);
Event Player.Hud4 = Last Text ID;
}
}
rule("Hud Game Mode On")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Event Player.Active == 1;
Is Dummy Bot(Event Player) == False;
}
actions
{
Destroy HUD Text(Event Player.Hud4);
Create HUD Text(All Players(All Teams), Null, Null, String("{0}: {1}", String("Game"), String("On")), Left, 0, White, White, Green,
Visible To and String, Default Visibility);
Event Player.Hud4 = Last Text ID;
}
}
rule("Damage tracking")
{
event
{
Player Took Damage;
Team 1;
Slot 0;
}
conditions
{
Team Of(Attacker) == Team 2;
}
actions
{
Global.Team2Dmg += Event Damage;
}
}
rule("Damage tracking")
{
event
{
Player Took Damage;
Team 2;
Slot 0;
}
conditions
{
Team Of(Attacker) == Team 1;
}
actions
{
Global.Team1Dmg += Event Damage;
}
}
rule("Hide Help Hud")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Event Player.Active == 1;
}
actions
{
Destroy HUD Text(Event Player.Hud1);
Destroy HUD Text(Event Player.Hud2);
Destroy HUD Text(Event Player.Hud3);
Destroy HUD Text(Event Player.Hud5);
}
}
rule("Show Help Hud")
{
event
{
Ongoing - Each Player;
Team 1;
Slot 0;
}
conditions
{
Event Player.Active == 0;
}
actions
{
Create HUD Text(Event Player, Null, Null, Custom String("Press Interact to Start (or to Stop)"), Top, 20, White, White, Green,
Visible To and String, Default Visibility);
Event Player.Hud1 = Last Text ID;
Create HUD Text(Event Player, Null, Null, Custom String(
"If you can't super jump perfectly, look down and Press Ultimate(Q) to activate rocket jump script"), Top, 21, White, White,
White, Visible To and String, Default Visibility);
Event Player.Hud2 = Last Text ID;
Create HUD Text(Event Player, Null, Null, Custom String("To change hero press Crouch+Ultimate"), Top, 22, White, White, Orange,
Visible To and String, Default Visibility);
Event Player.Hud3 = Last Text ID;
Create HUD Text(Event Player, Null, Null, Custom String("For latest updates check out: twitter.com/Seita_ow"), Top, 23, White,
White, Blue, Visible To and String, Default Visibility);
Event Player.Hud5 = Last Text ID;
}
}