Skip to content

Instantly share code, notes, and snippets.

@nathan130200
Created July 24, 2020 00:36
Show Gist options
  • Save nathan130200/fbd571b1b008ecf4ec51db3a316cebcd to your computer and use it in GitHub Desktop.
Save nathan130200/fbd571b1b008ecf4ec51db3a316cebcd to your computer and use it in GitHub Desktop.
Dummy Bots: Mercy Helper
settings
{
lobby
{
Map Rotation: Paused
Max Team 1 Players: 3
Max Team 2 Players: 3
Return To Lobby: Never
Swap Teams After Match: No
}
modes
{
Escort
{
Payload Speed Modifier: 174%
}
disabled Skirmish
{
Limit Valid Control Points: Third
}
General
{
Game Mode Start: Immediately
Health Pack Respawn Time Scalar: 10%
Hero Limit: Off
Kill Cam: Off
Spawn Health Packs: Enabled
}
}
}
variables
{
player:
0: mercyHelperBot
1: mercyHelperOwner
2: mercyHelperHudText
}
rule("Create mercy helper hud text.")
{
event
{
Player Joined Match;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
}
actions
{
Create HUD Text(Filtered Array(Array(Event Player), Entity Exists(Event Player.mercyHelperBot) && Is Alive(
Event Player.mercyHelperBot)), Null, Custom String("{0} Health: {1}%", Hero Icon String(Hero(Mercy)), Round To Integer(
100 * Normalized Health(Event Player.mercyHelperBot), Up)), Null, Right, -1, Yellow, White, White, Visible To and String,
Visible Always);
Event Player.mercyHelperHudText = Last Text ID;
}
}
rule("Create mercy helper.")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Entity Exists(Event Player.mercyHelperBot) == False;
}
actions
{
Create Dummy Bot(Hero(Mercy), Team Of(Event Player), Slot Of(Event Player) + 3, Nearest Walkable Position(Event Player), Vector(0,
0, 0));
Event Player.mercyHelperBot = Players In Slot(Slot Of(Event Player) + 3, Team Of(Event Player));
Players In Slot(Slot Of(Event Player) + 3, Team Of(Event Player)).mercyHelperOwner = Event Player;
}
}
rule("Destroy mercy helper.")
{
event
{
Player Left Match;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
}
actions
{
Destroy Dummy Bot(Team Of(Event Player), Slot Of(Event Player.mercyHelperBot));
Destroy HUD Text(Event Player.mercyHelperHudText);
}
}
rule("Mercy start follow player: initial.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
}
actions
{
Start Throttle In Direction(Event Player, Vector Towards(Event Player, World Vector Of(Vector(0, 0, -1),
Event Player.mercyHelperOwner, Rotation And Translation)), 1, To World, Replace existing throttle, Direction and Magnitude);
Start Facing(Event Player, Vector Towards(Event Player, Event Player.mercyHelperOwner), 500, To World, Direction and Turn Rate);
}
}
rule("Mercy start follow player: far.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Distance Between(Event Player, Event Player.mercyHelperOwner) > 2;
}
actions
{
Start Throttle In Direction(Event Player, Vector Towards(Event Player, World Vector Of(Vector(0, 0, -1),
Event Player.mercyHelperOwner, Rotation And Translation)), 1, To World, Replace existing throttle, Direction and Magnitude);
disabled Start Facing(Event Player, Vector Towards(Event Player, Event Player.mercyHelperOwner), 125, To World, Direction and Turn Rate);
}
}
rule("Mercy stop follow player: near.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Distance Between(Event Player, Event Player.mercyHelperOwner) <= 2;
}
actions
{
Stop Throttle In Direction(Event Player);
disabled Stop Facing(Event Player);
}
}
rule("Mercy start healing.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Normalized Health(Event Player.mercyHelperOwner) <= 0.450;
}
actions
{
Set Weapon(Event Player, 1);
Start Holding Button(Event Player, Primary Fire);
Wait(1, Ignore Condition);
If(Normalized Health(Event Player) < 1);
Loop;
Else;
Loop If Condition Is True;
End;
Wait(1.500, Ignore Condition);
Stop Holding Button(Event Player, Primary Fire);
}
}
rule("Mercy start boosting.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Normalized Health(Event Player.mercyHelperOwner) > 0.500;
Is Button Held(Event Player, Primary Fire) == False;
}
actions
{
Set Weapon(Event Player, 1);
Start Holding Button(Event Player, Secondary Fire);
}
}
rule("Mercy start flying to player.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Distance Between(Event Player, Event Player.mercyHelperOwner) > 2;
}
actions
{
Wait(1.500, Abort When False);
Press Button(Event Player, Ability 1);
Wait(0.250, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Mercy ressurect player.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Is Dead(Event Player.mercyHelperOwner) == True;
Ability Cooldown(Event Player, Button(Ability 2)) <= 0;
}
actions
{
Press Button(Event Player, Ability 2);
Wait(1, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Mercy teleport to player.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Distance Between(Event Player, Event Player.mercyHelperOwner) >= 5;
}
actions
{
Wait(2.500, Abort When False);
Teleport(Event Player, Event Player.mercyHelperOwner);
Wait(0.500, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Sync mercy ultimate.")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Entity Exists(Event Player.mercyHelperOwner) == True;
Is Alive(Event Player) == True;
}
actions
{
Set Ultimate Charge(Event Player.mercyHelperOwner, Ultimate Charge Percent(Event Player));
Wait(0.500, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Extend respawn time.")
{
event
{
Player Died;
All;
All;
}
conditions
{
Is Dummy Bot(Victim) == False;
}
actions
{
Wait(0.250, Ignore Condition);
Set Respawn Max Time(Victim, Ability Cooldown(Victim.mercyHelperBot, Button(Ability 2)) <= 0 ? 15 : 10);
}
}
rule("Consume ultimate ability.")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Is Using Ultimate(Event Player) == False;
}
actions
{
Wait(0.250, Ignore Condition);
Set Ultimate Charge(Event Player.mercyHelperBot, 0);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment