Return to post
settings
{
main
{
Description: "Instagib v1.8.0 | Created by scort#11221 | 10/13/20\r\n- Hold down Jump to gain speed by bunny hopping\r\n- Press Secondary Fire (Right Click) to fire a knockback orb to displace enemies or to give yourself more mobility\r\n-Press Ability 1 (Shift) to dodge in any direction\r\n- Press Ability 2 (E) to throw out a grappling hook to attach to walls or pull players\r\n- Buffs are littered throughout the map that change your weapon drastically"
Description: "Instagib v1.7.1 | Created by scort#11221 | 10/01/20\r\n- Hold down Jump to gain speed by bunny hopping\r\n- Press Secondary Fire (Right Click) to fire a knockback orb to displace enemies or to give yourself more mobility\r\n-Press Ability 1 (Shift) to dodge in any direction\r\n- Press Ability 2 (E) to throw out a grappling hook to attach to walls or pull players\r\n- Buffs are littered throughout the map that change your weapon drastically"
}
lobby
{
Allow Players Who Are In Queue: Yes
Map Rotation: After A Game
Max Spectators: 12
Return To Lobby: Never
}
modes
{
Deathmatch
{
enabled maps
{
Black Forest
Black Forest Winter
Blizzard World
Blizzard World Winter
Castillo
Château Guillard
Dorado
Ecopoint: Antarctica
Ecopoint: Antarctica Winter
Eichenwalde
Havana
Hollywood
King's Row
King's Row Winter
Lijiang Control Center
Lijiang Control Center Lunar New Year
Necropolis
Paris
}
}
General
{
Allow Hero Switching: Off
Game Mode Start: Immediately
Hero Limit: Off
Respawn Time Scalar: 10%
Spawn Health Packs: Disabled
}
}
heroes
{
General
{
McCree
{
Combat Roll: Off
Damage Dealt: 500%
Damage Received: 500%
Flashbang: Off
No Ammunition Requirement: On
Quick Melee: Off
Secondary Fire: Off
Ultimate Ability Deadeye: Off
}
enabled heroes
{
McCree
}
}
}
}
variables
{
global:
1: _arrayBuilder
2: BHOP_MAX_SPEED
3: BHOP_SPEED_RATE
4: GRAPPLE_PULL_SPEED
5: SECONDARY_PROJECTILE_SPEED
6: MATCH_TIME_LIMIT
7: matchStarted
8: DODGE_FORCE
9: buffsEnabled
10: buffsSpawnImmediately
11: validBuffMap
12: buffEffect
13: buffPos
14: buffIcon
15: cdText
16: spawnWallbang
17: spawnWithWallbang
18: wallbangDbg
2: DEFAULT_START_SPEED
3: BHOP_MAX_SPEED
4: BHOP_SPEED_RATE
5: GRAPPLE_PULL_SPEED
6: SECONDARY_PROJECTILE_SPEED
7: MATCH_TIME_LIMIT
8: matchStarted
9: DODGE_FORCE
10: buffsEnabled
11: buffsSpawnImmediately
12: validBuffMap
13: buffEffect
14: buffPos
15: buffIcon
16: cdText
17: spawnWallbang
18: spawnWithWallbang
19: NUM_WALLBANGS
20: WALLBANG_DUR
21: WALLBANG_CD
22: canPickupWallbang
23: wallbangCD
24: wallbangUser
25: spawnRicochet
26: spawnWithRicochet
27: ricochetDbg
28: NUM_RICOCHETS
29: RICOCHET_CD
30: RICOCHET_DUR
31: canPickupRicochet
32: ricochetCD
33: ricochetUser
34: spawnBuckshot
35: spawnWithBuckshot
36: buckshotDbg
37: BUCKSHOT_SPREAD
38: BUCKSHOT_CD
39: BUCKSHOT_DUR
40: canPickupBuckshot
41: buckshotCD
42: buckshotUser
43: spreadDiag
44: spreadHori
45: spawnLife
46: spawnWithLife
47: LIFE_CD
48: canPickupLife
49: lifeCD
50: telePos
51: i
27: NUM_RICOCHETS
28: RICOCHET_CD
29: RICOCHET_DUR
30: canPickupRicochet
31: ricochetCD
32: ricochetUser
33: spawnBuckshot
34: spawnWithBuckshot
35: randomSpread
36: BUCKSHOT_SPREAD
37: BUCKSHOT_CD
38: BUCKSHOT_DUR
39: canPickupBuckshot
40: buckshotCD
41: buckshotUser
42: spreadDiag
43: spreadHori
44: spawnLife
45: spawnWithLife
46: LIFE_CD
47: lifeCD
player:
1: bhopSpeed
2: speedAccumInAir
3: isChasing
4: primaryHit
5: primaryStartPos
6: secondaryHit
7: secondaryEyePos
8: secondaryOrb
10: grappleEyePos
12: usingGrapple
13: grappleHit
16: grappleHitPlayer
18: livingEnemies
19: throttleOf
20: canDodge
21: hudText
22: lifeKills
23: spreeInWorld
24: spreeEffects
25: spreeHud
26: killsHud
27: wallbangEffect
28: wallbangEnabled
29: wallbangDur
30: wallbangBuffEffect
31: wbDbgEffects
32: wbDbgBeam
33: ricochetEnabled
34: ricochetDur
35: ricochetBuffEffect
36: rDbgEffects
37: rDbgBeam
38: eyePos
39: facing
40: buckshotHitPos
41: buckshotHitPlayer
42: buckshotCenter
43: buckshotEnabled
44: buckshotDur
45: buckshotBuffEffect
46: bDbgEffects
47: bDbgBeam
48: extraLife
49: extraLifeIcon
50: lifeBuffEffect
51: secondaryInAir
52: grappleBeam
53: grappleSphere
54: usingTele
55: primaryBeam
56: i
57: players
58: loop
59: sound
60: gunPos
61: wallbangHitPos
62: wallbangLivingEnemies
63: wallbangHitPlayer
64: wallbangCount
65: sound_0
66: normals
67: hitPos
68: hitPosPlayer
69: ricochets
70: hitPosRicochets
71: hitPosPlayerRicochets
72: ricochetEffects
73: ricochetEffect
74: loop_0
75: i_0
76: sound_1
77: gunPos_0
78: buckshotBeam
79: centerBeam
80: pellets
81: beams
6: primaryBeam
7: secondaryHit
8: secondaryEyePos
9: secondaryOrb
11: grappleEyePos
12: grappleBeamEffect
13: usingGrapple
14: grappleHit
15: grappleHitSphere
16: grapplePlayerBeamEffect
17: grappleHitPlayer
18: grappleHitPlayerSphere
19: livingEnemies
20: throttleOf
21: canDodge
22: hudText
23: wallbangEffect
24: wallbangEnabled
25: wallbangDur
26: wallbangBuffEffect
27: ricochetEnabled
28: ricochetDur
29: ricochetBuffEffect
30: normals
31: hitPos
32: hitPosPlayer
33: ricochets
34: hitPosRicochets
35: hitPosPlayerRicochets
36: eyePos
37: facing
38: buckshotHitPos
39: buckshotHitPlayer
40: buckshotCenter
41: buckshotEnabled
42: buckshotDur
43: buckshotBuffEffect
44: randomizedSpreadHori
45: randomizedSpreadDiag
46: extraLife
47: extraLifeIcon
48: lifeKills
49: spreeInWorld
50: spreeEffects
51: spreeHud
52: killsHud
53: i
54: players
55: loop
56: sound
57: gunPos
58: wallbangHitPos
59: wallbangLivingEnemies
60: wallbangHitPlayer
61: wallbangCount
62: sound_0
63: ricochetEffects
64: ricochetEffect
65: loop_0
66: i_0
67: sound_1
68: gunPos_0
69: buckshotBeam
70: centerBeam
71: hori
72: diag
73: pellets
74: beams
}
subroutines
{
0: WallbangCooldown
1: RicochetCooldown
2: BuckshotCooldown
3: LifeCooldown
}
rule("[Sub] :: Wallbang Cooldown")
{
event
{
Subroutine;
WallbangCooldown;
}
actions
{
If(!Global.spawnWithWallbang && Global.spawnWallbang);
Global.wallbangCD = Global.WALLBANG_CD;
Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.wallbangCD, Up)), Global.buffPos[0], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.cdText[0] = Last Text ID;
Chase Global Variable At Rate(wallbangCD, 0, 1, None);
End;
}
}
rule("[Sub] :: Ricochet Cooldown")
{
event
{
Subroutine;
RicochetCooldown;
}
actions
{
If(!Global.spawnWithRicochet && Global.spawnRicochet);
Global.ricochetCD = Global.RICOCHET_CD;
Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.ricochetCD, Up)), Global.buffPos[1], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.cdText[1] = Last Text ID;
Chase Global Variable At Rate(ricochetCD, 0, 1, None);
End;
}
}
rule("[Sub] :: Buckshot Cooldown")
{
event
{
Subroutine;
BuckshotCooldown;
}
actions
{
If(!Global.spawnWithBuckshot && Global.spawnBuckshot);
Global.buckshotCD = Global.BUCKSHOT_CD;
Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.buckshotCD, Up)), Global.buffPos[2], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.cdText[2] = Last Text ID;
Chase Global Variable At Rate(buckshotCD, 0, 1, None);
End;
}
}
rule("[Sub] :: Life Cooldown")
{
event
{
Subroutine;
LifeCooldown;
}
actions
{
If(!Global.spawnWithLife && Global.spawnLife);
Global.lifeCD = Global.LIFE_CD;
Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.lifeCD, Up)), Global.buffPos[3], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.cdText[3] = Last Text ID;
Chase Global Variable At Rate(lifeCD, 0, 1, None);
End;
}
}
disabled rule("---------------- Main ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Main] :: Initial Global")
{
event
{
Ongoing - Global;
}
actions
{
Disable Built-In Game Mode Completion;
Disable Built-In Game Mode Announcer;
Create HUD Text(All Players(All Teams), Null, Custom String("Instagib: | Created by scort#11221ㅤ"), Custom String(
" v1.8.0 | Share Code: APPPXㅤ"), Right, 0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, Custom String(" "), Right, 0.100, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(All Players(All Teams), Null, Custom String("ㅤInstagib: v1.7.1 | Created by scort#11221"), Custom String(
"ㅤ Share Code: APPPX"), Right, 0, White, White, White, Visible To and String, Default Visibility);
Global.cdText = Empty Array;
Global.buffEffect = Empty Array;
Global.buffPos = Empty Array;
Global.buffIcon = Empty Array;
Global.telePos = Empty Array;
Global.matchStarted = False;
Global.BHOP_MAX_SPEED = Workshop Setting Integer(Custom String("BHop"), Custom String(
"Maximum Speed Possible From Hops (100 = bhops off) (320)"), 320, 100, 10000);
Global.BHOP_SPEED_RATE = Workshop Setting Real(Custom String("BHop"), Custom String("Speed gain rate (12.5)"), 12.500, 1, 100);
Global.DEFAULT_START_SPEED = Workshop Setting Integer(Custom String("BHop"), Custom String("Starting Speed (100)"), 100, 25, 300);
Global.BHOP_MAX_SPEED = Workshop Setting Integer(Custom String("BHop"), Custom String("Maximum Speed Possible From Hops (320)"),
320, 25, 10000);
Global.BHOP_SPEED_RATE = Workshop Setting Real(Custom String("BHop"), Custom String("Speed gain rate (12.5)"), 12.500, 1, 100);
Global.buffsSpawnImmediately = Workshop Setting Toggle(Custom String("Buff General"), Custom String(
"Buffs Spawn Immediately When Match Starts (Off)"), False);
Global.buffsEnabled = Workshop Setting Toggle(Custom String("Buff General"), Custom String("Spawn Buffs and Teleporters (On)"),
"Buffs Spawn Immediately When Match Starts (Off)"), False);
Global.buffsEnabled = Workshop Setting Toggle(Custom String("Buff General"), Custom String("Spawn Buffs (On)"), True);
Global.NUM_WALLBANGS = Workshop Setting Integer(Custom String("Wallbang Buff Settings"), Custom String("Wallbang Amount (5)"), 5,
2, 100);
Global.WALLBANG_CD = Workshop Setting Integer(Custom String("Wallbang Buff Settings"), Custom String(
"Wallbang Orb Spawn Time (65)"), 65, 1, 300);
Global.WALLBANG_DUR = Workshop Setting Integer(Custom String("Wallbang Buff Settings"), Custom String(
"Wallbang Buff Duration (25)"), 25, 1, 300);
Global.spawnWallbang = Workshop Setting Toggle(Custom String("Wallbang Buff Settings"), Custom String("Spawn Wallbang Orb (On)"),
True);
Global.NUM_WALLBANGS = Workshop Setting Integer(Custom String("Wallbang Settings"), Custom String("Wallbang Amount (5)"), 5, 2,
100);
Global.WALLBANG_CD = Workshop Setting Integer(Custom String("Wallbang Settings"), Custom String("Wallbang Spawn Time (65)"), 65,
1, 500);
Global.WALLBANG_DUR = Workshop Setting Integer(Custom String("Wallbang Settings"), Custom String("Wallbang Duration (25)"), 25,
1, 500);
Global.spawnWallbang = Workshop Setting Toggle(Custom String("Wallbang Settings"), Custom String("Spawn Wallbang (On)"), True);
Global.spawnWithWallbang = Workshop Setting Toggle(Custom String("Wallbang Settings"), Custom String(
"Spawn With Wallbang (Lasts Forever) (Off)"), False);
Global.RICOCHET_CD = Workshop Setting Integer(Custom String("Ricochet Settings"), Custom String("Ricochet Spawn Time (55)"), 55,
1, 500);
Global.RICOCHET_DUR = Workshop Setting Integer(Custom String("Ricochet Settings"), Custom String("Ricochet Duration (30)"), 30,
1, 500);
Global.NUM_RICOCHETS = Workshop Setting Integer(Custom String("Ricochet Settings"), Custom String("Ricochet Amount (4)"), 4, 1,
32);
Global.spawnRicochet = Workshop Setting Toggle(Custom String("Ricochet Settings"), Custom String("Spawn Ricochet (On)"), True);
Global.spawnWithRicochet = Workshop Setting Toggle(Custom String("Ricochet Settings"), Custom String(
"Spawn With Ricochet (Lasts Forever) (Off)"), False);
Global.BUCKSHOT_CD = Workshop Setting Integer(Custom String("Buckshot Settings"), Custom String("Buckshot Spawn Time (85)"), 85,
1, 500);
Global.BUCKSHOT_DUR = Workshop Setting Integer(Custom String("Buckshot Settings"), Custom String("Buckshot Duration (20)"), 20,
1, 500);
Global.BUCKSHOT_SPREAD = Workshop Setting Real(Custom String("Buckshot Settings"), Custom String(
"Buckshot Spread (Lower is Tighter) (3.5)"), 3.500, 0.100, 20);
Global.spawnBuckshot = Workshop Setting Toggle(Custom String("Buckshot Settings"), Custom String("Spawn Buckshot (On)"),
Global.spawnWithWallbang = Workshop Setting Toggle(Custom String("Wallbang Buff Settings"), Custom String(
"Spawn With Wallbang (Lasts Forever) (Off)"), False);
Global.RICOCHET_CD = Workshop Setting Integer(Custom String("Ricochet Buff Settings"), Custom String(
"Ricochet Orb Spawn Time (55)"), 55, 1, 300);
Global.RICOCHET_DUR = Workshop Setting Integer(Custom String("Ricochet Buff Settings"), Custom String(
"Ricochet Buff Duration (25)"), 25, 1, 300);
Global.NUM_RICOCHETS = Workshop Setting Integer(Custom String("Ricochet Buff Settings"), Custom String("Ricochet Amount (4)"), 4,
1, 64);
Global.spawnRicochet = Workshop Setting Toggle(Custom String("Ricochet Buff Settings"), Custom String("Spawn Ricochet Orb (On)"),
True);
Global.spawnWithBuckshot = Workshop Setting Toggle(Custom String("Buckshot Settings"), Custom String(
"Spawn With Buckshot (Lasts Forever) (Off)"), False);
Global.LIFE_CD = Workshop Setting Integer(Custom String("Extra Life Settings"), Custom String("Extra Life Spawn Time (140)"), 140,
1, 500);
Global.spawnLife = Workshop Setting Toggle(Custom String("Extra Life Settings"), Custom String("Spawn Extra Life (On)"), True);
Global.spawnWithLife = Workshop Setting Toggle(Custom String("Extra Life Settings"), Custom String(
"Spawn With Extra Life (Off)"), False);
Global.MATCH_TIME_LIMIT = Workshop Setting Integer(Custom String("Miscellaneous"), Custom String("Match Time (Minutes) (20)"), 20,
1, 60) * 60;
Global.GRAPPLE_PULL_SPEED = Workshop Setting Real(Custom String("Miscellaneous"), Custom String("Grapple Pull Speed (3.5)"),
3.500, 0.500, 10);
Global.SECONDARY_PROJECTILE_SPEED = Workshop Setting Integer(Custom String("Miscellaneous"), Custom String(
"Secondary Projectile Speed (110)"), 110, 10, 500);
Global.DODGE_FORCE = Workshop Setting Real(Custom String("Miscellaneous"), Custom String("Dodge Force (14)"), 14, 1, 100);
Global.wallbangDbg = Workshop Setting Toggle(Custom String("Debug"), Custom String("Show Wallbang Hits"), False);
Global.ricochetDbg = Workshop Setting Toggle(Custom String("Debug"), Custom String("Show Ricochet Hits"), False);
Global.buckshotDbg = Workshop Setting Toggle(Custom String("Debug"), Custom String("Show Buckshot Hits"), False);
If(!Global.buffsEnabled);
Global.spawnWallbang = False;
Global.spawnRicochet = False;
Global.spawnBuckshot = False;
Global.spawnLife = False;
End;
Global.spawnWithRicochet = Workshop Setting Toggle(Custom String("Ricochet Buff Settings"), Custom String(
"Spawn With Ricochet (Lasts Forever) (Off)"), False);
Global.BUCKSHOT_CD = Workshop Setting Integer(Custom String("Buckshot Buff Settings"), Custom String(
"Buckshot Orb Spawn Time (85)"), 85, 1, 300);
Global.BUCKSHOT_DUR = Workshop Setting Integer(Custom String("Buckshot Buff Settings"), Custom String(
"Buckshot Buff Duration (20)"), 20, 1, 300);
Global.BUCKSHOT_SPREAD = Workshop Setting Real(Custom String("Buckshot Buff Settings"), Custom String(
"Buckshot Spread (Lower is Tighter) (3.5)"), 3.500, 0.100, 20);
Global.randomSpread = Workshop Setting Toggle(Custom String("Buckshot Buff Settings"), Custom String(
"Randomized Buckshot Spread (Off)"), False);
Global.spawnBuckshot = Workshop Setting Toggle(Custom String("Buckshot Buff Settings"), Custom String("Spawn Buckshot Orb (On)"),
True);
Global.spawnWithBuckshot = Workshop Setting Toggle(Custom String("Buckshot Buff Settings"), Custom String(
"Spawn With Buckshot (Lasts Forever) (Off)"), False);
Global.LIFE_CD = Workshop Setting Integer(Custom String("Extra Life Buff Settings"), Custom String(
"Extra Life Orb Spawn Time (140)"), 140, 1, 400);
Global.spawnLife = Workshop Setting Toggle(Custom String("Extra Life Buff Settings"), Custom String("Spawn Extra Life Orb (On)"),
True);
Global.spawnWithLife = Workshop Setting Toggle(Custom String("Extra Life Buff Settings"), Custom String(
"Spawn With Extra Life (Off)"), False);
Global.SECONDARY_PROJECTILE_SPEED = Workshop Setting Integer(Custom String("Secondary Fire"), Custom String(
"Secondary Projectile Speed (110)"), 110, 10, 500);
Global.MATCH_TIME_LIMIT = Workshop Setting Integer(Custom String("Misc"), Custom String("Match Time (Minutes) (20)"), 20, 1, 60)
* 60;
Global.GRAPPLE_PULL_SPEED = Workshop Setting Real(Custom String("Misc"), Custom String("Grapple Pull Speed (3.5)"), 3.500, 0.500,
10);
Global.DODGE_FORCE = Workshop Setting Real(Custom String("Misc"), Custom String("Dodge Force (14)"), 14, 1, 100);
}
}
rule("[Main] :: Player Join")
{
event
{
Player Joined Match;
All;
All;
}
actions
{
Disallow Button(Event Player, Ability 1);
Disallow Button(Event Player, Ability 2);
Event Player.wallbangDur = Global.WALLBANG_DUR;
Event Player.ricochetDur = Global.RICOCHET_DUR;
Event Player.buckshotDur = Global.BUCKSHOT_DUR;
Event Player.hudText = Empty Array;
Event Player.spreeInWorld = Empty Array;
Event Player.spreeEffects = Empty Array;
Preload Hero(Event Player, Hero(McCree));
}
}
rule("[Main] :: Start Match")
{
event
{
Ongoing - Global;
}
conditions
{
(!Global.matchStarted && Count Of(All Living Players(All Teams)) > 0 && !Is Waiting For Players) == True;
}
actions
{
Set Match Time(10);
Wait(10.500, Ignore Condition);
Set Match Time(Global.MATCH_TIME_LIMIT);
Global.matchStarted = True;
If(Global.validBuffMap && !Global.buffsSpawnImmediately && Global.buffsEnabled && !Is Waiting For Players);
If(Global.validBuffMap && !Global.buffsSpawnImmediately && !Is Waiting For Players);
Call Subroutine(WallbangCooldown);
Call Subroutine(RicochetCooldown);
Call Subroutine(BuckshotCooldown);
Call Subroutine(LifeCooldown);
End;
If(Global.buffsEnabled && Global.validBuffMap);
If(Global.buffsEnabled);
If(!Global.spawnWithWallbang && Global.spawnWallbang);
Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Baptiste), Button(Ultimate))), Null,
Global.wallbangCD != 0 ? Custom String("{0}", Round To Integer(Global.wallbangCD, Up)) : (
Global.canPickupWallbang ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.wallbangUser)),
Left, 1, Yellow, White, White, Visible To and String, Default Visibility);
Global.wallbangCD != 0 ? Custom String("{0}", Round To Integer(Global.wallbangCD, Up)) : (Entity Exists(Global.buffEffect[0])
? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.wallbangUser)), Left, 1, Yellow, White,
White, Visible To and String, Default Visibility);
End;
If(!Global.spawnWithRicochet && Global.spawnRicochet);
Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Winston), Button(Ability 1))), Null,
Global.ricochetCD != 0 ? Custom String("{0}", Round To Integer(Global.ricochetCD, Up)) : (
Global.canPickupRicochet ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.ricochetUser)),
Left, 2, Purple, White, White, Visible To and String, Default Visibility);
Global.ricochetCD != 0 ? Custom String("{0}", Round To Integer(Global.ricochetCD, Up)) : (Entity Exists(Global.buffEffect[1])
? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.ricochetUser)), Left, 2, Purple, White,
White, Visible To and String, Default Visibility);
End;
If(!Global.spawnWithBuckshot && Global.spawnBuckshot);
Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Ashe), Button(Ability 1))), Null,
Global.buckshotCD != 0 ? Custom String("{0}", Round To Integer(Global.buckshotCD, Up)) : (
Global.canPickupBuckshot ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.buckshotUser)),
Left, 3, Green, White, White, Visible To and String, Default Visibility);
Global.buckshotCD != 0 ? Custom String("{0}", Round To Integer(Global.buckshotCD, Up)) : (Entity Exists(Global.buffEffect[2])
? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.buckshotUser)), Left, 3, Green, White,
White, Visible To and String, Default Visibility);
End;
If(!Global.spawnWithLife && Global.spawnLife);
Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Mercy), Button(Ability 2))), Null,
Global.lifeCD != 0 ? Custom String("{0}", Round To Integer(Global.lifeCD, Up)) : Custom String("{0}", Icon String(Checkmark)),
Left, 4, Sky Blue, White, White, Visible To and String, Default Visibility);
Global.lifeCD != 0 ? Custom String("{0}", Round To Integer(Global.lifeCD, Up)) : (Entity Exists(Global.buffEffect[3])
? Custom String("{0}", Icon String(Checkmark)) : Custom String("{0}", Icon String(Checkmark))), Left, 4, Sky Blue, White,
White, Visible To and String, Default Visibility);
End;
End;
}
}
rule("[Main] :: Player Spawned")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Has Spawned(Event Player) && Global.matchStarted) == True;
}
actions
{
Small Message(Event Player, Custom String("Welcome!"));
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String("Holding down {0} will let you gain speed by bunny hopping", Input Binding String(Button(
Jump))));
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String(
"Press {0} to throw out a grappling hook to pull you towards a surface or to pull players towards you", Input Binding String(
Button(Ability 2))));
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String(
"Press {0} to fire a projectile that knocks players back, including yourself allowing for extra mobility",
Input Binding String(Button(Secondary Fire))));
"Press {0} to fire an orb that knocks players back, including yourself allowing for extra mobility", Input Binding String(
Button(Secondary Fire))));
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String("Press {0} to dodge in any direction", Input Binding String(Button(Ability 1))));
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String("Buffs are littered thorughout the map that give you special changes to your weapon"));
Wait(3, Ignore Condition);
Small Message(Event Player, Custom String("Happy Fragging!"));
}
}
rule("[Main] :: Speedometer")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
Create HUD Text(Event Player, Null, Null, Custom String(" \n{0} M/S\n{1}% Modifier", Horizontal Speed Of(Event Player),
Round To Integer(Event Player.bhopSpeed - 100, Up)), Left, 10, White, White, White, Visible To and String, Default Visibility);
Round To Integer(Event Player.bhopSpeed - Global.DEFAULT_START_SPEED, Up)), Left, 6, White, White, White,
Visible To and String, Default Visibility);
}
}
rule("[Main] :: End Game")
{
event
{
Ongoing - Global;
}
conditions
{
Global.matchStarted == True;
}
actions
{
Wait(Global.MATCH_TIME_LIMIT, Ignore Condition);
Enable Built-In Game Mode Completion;
}
}
rule("[Main] :: Primary Effect")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Event Player.wallbangEnabled && !Event Player.ricochetEnabled && !Event Player.buckshotEnabled && Is Firing Primary(
Event Player)) == True;
}
actions
{
Event Player.primaryBeam = Empty Array;
Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
Event Player.primaryStartPos = World Vector Of(Right - Vector(0, 0.300, 0), Event Player, Rotation) * 0.180;
Event Player.primaryHit = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 100, Event Player.livingEnemies, Event Player, True);
Play Effect(Event Player, Good Explosion, Aqua, Event Player.primaryHit, 0.200);
Play Effect(Remove From Array(All Players(Opposite Team Of(Team Of(Event Player))), Event Player), Good Explosion, Red,
Event Player.primaryHit, 0.200);
Create Beam Effect(Event Player, Bad Beam, Eye Position(Event Player) + Facing Direction Of(Event Player)
+ Event Player.primaryStartPos, Event Player.primaryHit, Aqua, None);
Event Player.primaryBeam[0] = Last Created Entity;
Create Beam Effect(Remove From Array(All Players(Opposite Team Of(Team Of(Event Player))), Event Player), Bad Beam, Eye Position(
Event Player) + Facing Direction Of(Event Player) + Event Player.primaryStartPos, Event Player.primaryHit, Red, None);
Event Player.primaryBeam[1] = Last Created Entity;
Wait(0.150, Ignore Condition);
Destroy Effect(Event Player.primaryBeam[0]);
Destroy Effect(Event Player.primaryBeam[1]);
}
}
disabled rule("---------------- Killing Spree Notifs ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Killspree] :: Record Kills While Alive")
{
event
{
Player Dealt Final Blow;
All;
All;
}
actions
{
Event Player.lifeKills += 1;
}
}
rule("[Killspree] :: Reset Kills on death")
{
event
{
Player Died;
All;
All;
}
actions
{
Destroy HUD Text(Event Player.killsHud);
Small Message(Event Player, Custom String("{0} player kill spree!", Event Player.lifeKills));
If(Event Player.lifeKills > 5);
Big Message(All Players(All Teams), !Event Was Environment ? Custom String("{0}'s {1} player spree was ended by {2}!", Victim,
Event Player.lifeKills, Attacker) : Custom String("{0}'s {1} player spree was ended by the world!", Victim,
Event Player.lifeKills));
Small Message(Event Player, Custom String("{0} player kill spree!", Event Player.lifeKills));
End;
Event Player.i = 0;
While(Event Player.i < 7);
Destroy Effect(Event Player.spreeEffects[Event Player.i]);
Destroy In-World Text(Event Player.spreeInWorld[Event Player.i]);
Destroy HUD Text(Event Player.spreeHud[Event Player.i]);
Event Player.i += 1;
End;
Wait(0.032, Ignore Condition);
Event Player.lifeKills = 0;
Event Player.spreeInWorld = Empty Array;
Event Player.spreeEffects = Empty Array;
Event Player.spreeHud = Empty Array;
}
}
rule("[Killspree] :: Killing Spree")
rule("[Killspree] :: 5 Kills")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Event Player.lifeKills == 6;
Event Player.lifeKills == 5;
}
actions
{
Big Message(All Players(All Teams), Custom String("{0} is on a Killing Spree!", Event Player));
Create In-World Text(Event Player, Custom String("Killing Spree!"), Position Of(Victim) + Up, 3, Do Not Clip, None, White,
Default Visibility);
Event Player.spreeInWorld[0] = Last Text ID;
Create Effect(All Players(All Teams), Sparkles, White, Event Player, 1, Visible To Position and Radius);
Event Player.spreeEffects[0] = Last Created Entity;
Create HUD Text(Event Player, Null, Custom String(" \n{0} Kills", Event Player.lifeKills), Custom String("Killing Spree"), Left,
15, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String(" \n{0} Kill Spree", Event Player.lifeKills), Left, 9, White, White, White,
Visible To and String, Default Visibility);
Event Player.killsHud = Last Text ID;
Create HUD Text(Event Player, Null, Null, Custom String("Killing Spree"), Left, 10, White, White, White, Visible To and String,
Default Visibility);
Event Player.spreeHud[0] = Last Text ID;
Wait(2, Ignore Condition);
Destroy In-World Text(Event Player.spreeInWorld[0]);
}
}
rule("[Killspree] :: Rampage")
rule("[Killspree] :: 8 Kills")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Event Player.lifeKills == 8;
}
actions
{
Destroy Effect(Event Player.spreeEffects[0]);
Destroy HUD Text(Event Player.spreeHud[0]);
Big Message(All Players(All Teams), Custom String("{0} is on a Rampage!", Event Player));
Create In-World Text(Event Player, Custom String("Rampage!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Lime Green,
Default Visibility);
Event Player.spreeInWorld[1] = Last Text ID;
Create Effect(All Players(All Teams), Sparkles, Lime Green, Event Player, 1, Visible To Position and Radius);
Event Player.spreeEffects[1] = Last Created Entity;
Create HUD Text(Event Player, Null, Custom String(" \n{0} Kills", Event Player.lifeKills), Custom String("Rampage"), Left, 15,
White, White, Lime Green, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Rampage"), Left, 10, White, White, Lime Green, Visible To and String,
Default Visibility);
Event Player.spreeHud[1] = Last Text ID;
Wait(2, Ignore Condition);
Destroy In-World Text(Event Player.spreeInWorld[1]);
}
}
rule("[Killspree] :: Dominating")
rule("[Killspree] :: 11 Kills")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Event Player.lifeKills == 11;
}
actions
{
Destroy Effect(Event Player.spreeEffects[1]);
Destroy HUD Text(Event Player.spreeHud[1]);
Big Message(All Players(All Teams), Custom String("{0} is Dominating!", Event Player));
Create In-World Text(Event Player, Custom String("Dominating!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Sky Blue,
Create In-World Text(Event Player, Custom String("Dominating!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Blue,
Default Visibility);
Event Player.spreeInWorld[2] = Last Text ID;
Create Effect(All Players(All Teams), Sparkles, Sky Blue, Event Player, 1, Visible To Position and Radius);
Create Effect(All Players(All Teams), Sparkles, Blue, Event Player, 1, Visible To Position and Radius);
Event Player.spreeEffects[2] = Last Created Entity;
Create HUD Text(Event Player, Null, Custom String(" \n{0} Kills", Event Player.lifeKills), Custom String("Dominating"), Left, 15,
White, White, Sky Blue, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Dominating"), Left, 10, White, White, Blue, Visible To and String,
Default Visibility);
Event Player.spreeHud[2] = Last Text ID;
Wait(2, Ignore Condition);
Destroy In-World Text(Event Player.spreeInWorld[2]);
}
}
rule("[Killspree] :: Unstoppable")
rule("[Killspree] :: 14 Kills")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Event Player.lifeKills == 14;
}
actions
{
Destroy Effect(Event Player.spreeEffects[2]);
Destroy HUD Text(Event Player.spreeHud[2]);
Big Message(All Players(All Teams), Custom String("{0} is Unstoppable!", Event Player));
Create In-World Text(Event Player, Custom String("Unstoppable!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Purple,
Default Visibility);
Event Player.spreeInWorld[3] = Last Text ID;
Create Effect(All Players(All Teams), Sparkles, Purple, Event Player, 1, Visible To Position and Radius);
Event Player.spreeEffects[3] = Last Created Entity;
Create HUD Text(Event Player, Null, Custom String(" \n{0} Kills", Event Player.lifeKills), Custom String("Unstoppable"), Left, 15,
White, White, Purple, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Unstoppable"), Left, 10, White, White, Purple, Visible To and String,
Default Visibility);
Event Player.spreeHud[3] = Last Text ID;
Wait(2, Ignore Condition);
Destroy In-World Text(Event Player.spreeInWorld[3]);
}
}
rule("[Killspree] :: Godlike")
rule("[Killspree] :: 17 Kills")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Event Player.lifeKills == 17;
}
actions
{
Destroy Effect(Event Player.spreeEffects[3]);
Destroy HUD Text(Event Player.spreeHud[3]);
Big Message(All Players(All Teams), Custom String("{0} is Godlike!", Event Player));
Create In-World Text(Event Player, Custom String("Godlike!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Yellow,
Default Visibility);
Event Player.spreeInWorld[4] = Last Text ID;
Create Effect(All Players(All Teams), Sparkles, Yellow, Event Player, 1, Visible To Position and Radius);
Event Player.spreeEffects[4] = Last Created Entity;
Create HUD Text(Event Player, Null, Custom String(" \n{0} Kills", Event Player.lifeKills), Custom String("Godlike"), Left, 15,
White, White, Yellow, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Godlike"), Left, 10, White, White, Yellow, Visible To and String,
Default Visibility);
Event Player.spreeHud[4] = Last Text ID;
Wait(2, Ignore Condition);
Destroy In-World Text(Event Player.spreeInWorld[4]);
}
}
rule("[Killspree] :: Divine")
rule("[Killspree] :: 21 Kills")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Event Player.lifeKills == 21;
}
actions
{
Destroy Effect(Event Player.spreeEffects[4]);
Destroy HUD Text(Event Player.spreeHud[4]);
Big Message(All Players(All Teams), Custom String("{0} is Divine!", Event Player));
Create In-World Text(Event Player, Custom String("Divine!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Orange,
Default Visibility);
Event Player.spreeInWorld[5] = Last Text ID;
Create Effect(All Players(All Teams), Sparkles, Orange, Event Player, 1, Visible To Position and Radius);
Event Player.spreeEffects[5] = Last Created Entity;
Create HUD Text(Event Player, Null, Custom String(" \n{0} Kills", Event Player.lifeKills), Custom String("Divine"), Left, 15,
White, White, Orange, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Divine"), Left, 10, White, White, Orange, Visible To and String,
Default Visibility);
Event Player.spreeHud[5] = Last Text ID;
Wait(2, Ignore Condition);
Destroy In-World Text(Event Player.spreeInWorld[5]);
}
}
rule("[Killspree] :: Empyreal")
rule("[Killspree] :: 24 Kills")
{
event
{
Player Dealt Final Blow;
All;
All;
}
conditions
{
Event Player.lifeKills == 24;
}
actions
{
Destroy Effect(Event Player.spreeEffects[5]);
Destroy HUD Text(Event Player.spreeHud[5]);
Big Message(All Players(All Teams), Custom String("{0} is Empyreal!", Event Player));
Create In-World Text(Event Player, Custom String("Empyreal!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Red,
Default Visibility);
Event Player.spreeInWorld[6] = Last Text ID;
Create Effect(All Players(All Teams), Sparkles, Red, Event Player, 1, Visible To Position and Radius);
Event Player.spreeEffects[6] = Last Created Entity;
Create HUD Text(Event Player, Null, Custom String(" \n{0} Kills", Event Player.lifeKills), Custom String("Empyreal"), Left, 15,
White, White, Red, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Empyreal"), Left, 10, White, White, Red, Visible To and String,
Default Visibility);
Event Player.spreeHud[6] = Last Text ID;
Wait(2, Ignore Condition);
Destroy In-World Text(Event Player.spreeInWorld[6]);
}
}
disabled rule("---------------- Bhop ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Bhop] :: Auto Hop")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Is On Ground(Event Player) && Is Button Held(Event Player, Jump)) == True;
}
actions
{
Disallow Button(Event Player, Jump);
Wait(0.016, Ignore Condition);
Allow Button(Event Player, Jump);
}
}
rule("[Bhop] :: Starting Speed")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
Event Player.bhopSpeed = 100;
Event Player.bhopSpeed = Global.DEFAULT_START_SPEED;
}
}
rule("[Bhop] :: If Airborne")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((!Event Player.usingGrapple && Is Jumping(Event Player) && Horizontal Speed Of(Event Player) > 5.140) || (
Event Player.usingGrapple && Is In Air(Event Player) && Distance Between(Event Player.grappleEyePos, Event Player.grappleHit)
< 40)) == True;
((!Event Player.usingGrapple && Is Jumping(Event Player) && Horizontal Speed Of(Event Player)
> Global.DEFAULT_START_SPEED / 33.330) || (Event Player.usingGrapple && Is In Air(Event Player) && Distance Between(
Event Player.grappleEyePos, Event Player.grappleHit) < 40)) == True;
}
actions
{
Event Player.speedAccumInAir = Horizontal Speed Of(Event Player);
Wait(0.050, Ignore Condition);
Chase Player Variable At Rate(Event Player, bhopSpeed, Global.BHOP_MAX_SPEED, Global.BHOP_SPEED_RATE, Destination and Rate);
Event Player.isChasing = True;
}
}
rule("[Bhop] :: Update Speed")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.isChasing == True;
}
actions
{
Event Player.speedAccumInAir = Horizontal Speed Of(Event Player);
Set Move Speed(Event Player, Event Player.bhopSpeed);
Wait(0.032, Ignore Condition);
Loop If Condition Is True;
}
}
rule("[Bhop] :: Update isChasing")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Event Player.isChasing && Event Player.bhopSpeed == Global.BHOP_MAX_SPEED) || (Event Player.bhopSpeed == 100)) == True;
((Event Player.isChasing && Event Player.bhopSpeed == Global.BHOP_MAX_SPEED) || (
Event Player.bhopSpeed == Global.DEFAULT_START_SPEED)) == True;
}
actions
{
Stop Chasing Player Variable(Event Player, bhopSpeed);
Event Player.isChasing = False;
}
}
rule("[Bhop] :: Stop chasing if too slow")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Event Player.usingGrapple && (Event Player.isChasing || Event Player.bhopSpeed == Global.BHOP_MAX_SPEED) && Horizontal Speed Of(
Event Player) < 5.140) == True;
Event Player) < Global.DEFAULT_START_SPEED / 22.200) == True;
}
actions
{
Stop Chasing Player Variable(Event Player, bhopSpeed);
Event Player.isChasing = False;
Event Player.bhopSpeed = 100;
Event Player.bhopSpeed = Global.DEFAULT_START_SPEED;
Set Move Speed(Event Player, Event Player.bhopSpeed);
Wait(0.032, Ignore Condition);
Loop If Condition Is True;
}
}
rule("[Bhop] :: Stop if player is on ground")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Is On Ground(Event Player) && !Event Player.usingGrapple && Event Player.bhopSpeed > 100) == True;
(Is On Ground(Event Player) && !Event Player.usingGrapple && Event Player.bhopSpeed > Global.DEFAULT_START_SPEED) == True;
}
actions
{
Wait(0.200, Abort When False);
Stop Chasing Player Variable(Event Player, bhopSpeed);
Event Player.bhopSpeed = 100;
Event Player.bhopSpeed = Global.DEFAULT_START_SPEED;
Set Move Speed(Event Player, Event Player.bhopSpeed);
}
}
disabled rule("---------------- Dodge ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Dodge] :: Action")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.canDodge && Is Button Held(Event Player, Ability 1)) == True;
}
actions
{
Event Player.throttleOf = Throttle Of(Event Player) + Vector(0, 0.500, 0);
If(Event Player.throttleOf == Vector(0, 0.500, 0));
Event Player.throttleOf = Vector(0, 0.500, 1);
End;
Apply Impulse(Event Player, Event Player.throttleOf, Global.DODGE_FORCE, To Player, Cancel Contrary Motion);
If(Event Player.bhopSpeed < 120);
If(Event Player.bhopSpeed < Global.DEFAULT_START_SPEED + 20);
Event Player.bhopSpeed += Global.BHOP_SPEED_RATE * 3;
End;
Event Player.canDodge = False;
}
}
rule("[Dodge] :: On Ground")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is On Ground(Event Player) == True;
}
actions
{
Event Player.canDodge = True;
}
}
disabled rule("---------------- Secondary Fire ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Secondary Fire] :: Projectile")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Global.matchStarted && Is Button Held(Event Player, Secondary Fire) && Is Alive(Event Player)) == True;
}
actions
{
Destroy Effect(Event Player.secondaryOrb);
Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
Event Player.secondaryHit = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 100, Event Player.livingEnemies, Event Player, True);
Event Player.secondaryEyePos = Eye Position(Event Player) + Facing Direction Of(Event Player) + World Vector Of(Right - Vector(0,
0.300, 0), Event Player, Rotation) * 0.180;
Event Player.secondaryInAir = True;
Event Player.secondaryEyePos = Eye Position(Event Player);
Destroy Effect(Event Player.secondaryOrb);
Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 50);
Create Effect(All Players(All Teams), Orb, Red, Event Player.secondaryEyePos, 0.100, Visible To Position and Radius);
Event Player.secondaryOrb = Last Created Entity;
Chase Player Variable At Rate(Event Player, secondaryEyePos, Event Player.secondaryHit, Global.SECONDARY_PROJECTILE_SPEED,
Destination and Rate);
Wait(0.750, Ignore Condition);
Loop If Condition Is True;
Wait(0.500, Ignore Condition);
}
}
rule("[Secondary Fire] :: Impulse")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Distance Between(Event Player.secondaryEyePos, Event Player.secondaryHit) < 0.100 || Ray Cast Hit Player(Eye Position(
Event Player), Event Player.secondaryEyePos, All Living Players(All Teams), Event Player, True) != Null) == True;
}
actions
{
Event Player.secondaryInAir = False;
Stop Chasing Player Variable(Event Player, secondaryEyePos);
Event Player.players = Filtered Array(All Living Players(All Teams), Distance Between(Current Array Element,
Event Player.secondaryEyePos) <= 4.500);
For Player Variable(Event Player, loop, 0, Count Of(Event Player.players), 1);
Apply Impulse(Event Player.players[Event Player.loop], Direction Towards(Event Player.secondaryEyePos,
Event Player.players[Event Player.loop] + Vector(0, Y Component Of(Eye Position(Event Player.players[Event Player.loop])
- Event Player.players[Event Player.loop]) / 2, 0) + Up), 15, To World, Incorporate Contrary Motion);
End;
Play Effect(All Players(All Teams), Good Explosion, Red, Event Player.secondaryHit, 2.500);
Destroy Effect(Event Player.secondaryOrb);
}
}
rule("[Secondary Fire] :: Effect Loop")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.secondaryInAir == True;
}
actions
{
While(Event Player.secondaryInAir);
Play Effect(All Players(All Teams), Bad Explosion, Red, Event Player.secondaryEyePos, 0.050);
Wait(0.016, Ignore Condition);
End;
}
}
disabled rule("---------------- Grapple ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Grapple] :: Grapple Start")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Global.matchStarted && Is Button Held(Event Player, Ability 2) && Is Alive(Event Player)) == True;
}
actions
{
Event Player.grappleSphere = Empty Array;
Event Player.grappleBeam = Empty Array;
Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
Event Player.grappleHit = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 40, Event Player.livingEnemies, Event Player, True);
Event Player.grappleHitPlayer = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 40, Event Player.livingEnemies, Event Player, True);
Event Player.grappleEyePos = Eye Position(Event Player);
If(Event Player.grappleHitPlayer);
Create Beam Effect(All Players(All Teams), Grapple Beam, Event Player, Event Player.grappleHitPlayer, Yellow,
Visible To Position and Radius);
Event Player.grappleBeam[0] = Last Created Entity;
Event Player.grappleBeamEffect = Last Created Entity;
If(Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) != 40);
Create Effect(All Players(All Teams), Sphere, Yellow, Event Player.grappleHitPlayer, 0.200, Visible To Position and Radius);
Event Player.grappleSphere[0] = Last Created Entity;
Event Player.grappleHitPlayerSphere = Last Created Entity;
End;
Else;
Create Beam Effect(All Players(All Teams), Grapple Beam, Event Player, Event Player.grappleHit, Yellow,
Visible To Position and Radius);
Event Player.grappleBeam[0] = Last Created Entity;
Event Player.grappleBeamEffect = Last Created Entity;
If(Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) != 40);
Create Effect(All Players(All Teams), Sphere, Yellow, Event Player.grappleHit, 0.200, Visible To Position and Radius);
Event Player.grappleSphere[0] = Last Created Entity;
Event Player.grappleHitSphere = Last Created Entity;
End;
End;
Event Player.usingGrapple = True;
If(Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) == 40);
Wait(0.250, Ignore Condition);
Event Player.usingGrapple = False;
Destroy Effect(Event Player.grappleSphere[0]);
Destroy Effect(Event Player.grappleSphere[1]);
Destroy Effect(Event Player.grappleBeam[0]);
Destroy Effect(Event Player.grappleBeam[1]);
Destroy Effect(Event Player.grappleBeamEffect);
Destroy Effect(Event Player.grapplePlayerBeamEffect);
Destroy Effect(Event Player.grappleHitSphere);
Destroy Effect(Event Player.grappleHitPlayerSphere);
Else;
Play Effect(All Players(All Teams), Bad Explosion, Yellow, Event Player.grappleHit, 0.200);
Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player.grappleHit, 50);
Play Effect(All Players(All Teams), Bad Explosion, Yellow, Event Player, 0.330);
Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player, 100);
End;
Wait(0.500, Ignore Condition);
Loop If(Is Button Held(Event Player, Ability 2) && Is Alive(Event Player) && Distance Between(Event Player.grappleEyePos,
Event Player.grappleHit) == 40);
}
}
rule("[Grapple] :: Pull")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.usingGrapple && Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) < 40) == True;
}
actions
{
Start Forcing Throttle(Event Player, 0, 0.050, 0, 0.050, 0, 0.050);
If(Event Player.grappleHitPlayer && Is Alive(Event Player.grappleHitPlayer));
Apply Impulse(Event Player.grappleHitPlayer, Vector(0, 0.300, 0) + Direction Towards(Event Player.grappleHitPlayer, Eye Position(
Event Player)), Global.GRAPPLE_PULL_SPEED / 1.250, To World, Incorporate Contrary Motion);
Else If(Is Button Held(Event Player, Jump));
Apply Impulse(Event Player, Vector(0, 0.300, 0) + Direction Towards(Eye Position(Event Player), Event Player.grappleHit),
Global.GRAPPLE_PULL_SPEED, To World, Incorporate Contrary Motion);
Else;
Apply Impulse(Event Player, Direction Towards(Eye Position(Event Player), Event Player.grappleHit), Global.GRAPPLE_PULL_SPEED,
To World, Incorporate Contrary Motion);
If(Is Button Held(Event Player, Jump));
Apply Impulse(Event Player, Vector(0, 0.300, 0) + Direction Towards(Eye Position(Event Player), Event Player.grappleHit),
Global.GRAPPLE_PULL_SPEED, To World, Incorporate Contrary Motion);
Else;
Apply Impulse(Event Player, Direction Towards(Eye Position(Event Player), Event Player.grappleHit), Global.GRAPPLE_PULL_SPEED,
To World, Incorporate Contrary Motion);
End;
End;
Wait(0.064, Ignore Condition);
Loop If Condition Is True;
}
}
rule("[Grapple] :: Grapple End")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Is Button Held(Event Player, Ability 2) || Is Dead(Event Player) || Is Dead(Event Player.grappleHitPlayer)
|| !Is In Line of Sight(Event Player, Event Player.grappleHitPlayer, Barriers Do Not Block LOS) || !Is In View Angle(
Event Player, Event Player.grappleHitPlayer, 105) || Event Player.usingTele) == True;
Event Player, Event Player.grappleHitPlayer, 105)) == True;
}
actions
{
Event Player.usingGrapple = False;
Stop Forcing Throttle(Event Player);
Destroy Effect(Event Player.grappleSphere[0]);
Destroy Effect(Event Player.grappleSphere[1]);
Destroy Effect(Event Player.grappleBeam[0]);
Destroy Effect(Event Player.grappleBeam[1]);
}
}
rule("[Grapple] :: !usingGrapple")
rule("[Grapple] :: Destroy Effects")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
!Event Player.usingGrapple == True;
}
actions
{
Destroy Effect(Event Player.grappleSphere[0]);
Destroy Effect(Event Player.grappleSphere[1]);
Destroy Effect(Event Player.grappleBeam[0]);
Destroy Effect(Event Player.grappleBeam[1]);
Stop Forcing Throttle(Event Player);
}
}
rule("[Grapple] :: On Death: Destroy Effects")
{
event
{
Player Died;
All;
All;
}
actions
{
Event Player.usingGrapple = False;
Destroy Effect(Event Player.grappleSphere[0]);
Destroy Effect(Event Player.grappleSphere[1]);
Destroy Effect(Event Player.grappleBeam[0]);
Destroy Effect(Event Player.grappleBeam[1]);
Destroy Effect(Event Player.grappleBeamEffect);
Destroy Effect(Event Player.grapplePlayerBeamEffect);
Destroy Effect(Event Player.grappleHitSphere);
Destroy Effect(Event Player.grappleHitPlayerSphere);
Stop Forcing Throttle(Event Player);
}
}
disabled rule("---------------- Buff + Tele ----------------")
disabled rule("---------------- Buff ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Buff] :: Player With Buff Doesn't Exist")
{
event
{
Player Left Match;
All;
All;
}
actions
{
If(!Entity Exists(Global.wallbangUser) && !Entity Exists(Global.buffEffect[0])
&& Global.wallbangUser != Null && !Global.spawnWithWallbang);
Global.wallbangUser.wallbangEnabled = False;
Global.wallbangUser.wallbangDur = 0;
Wait(1, Ignore Condition);
Call Subroutine(WallbangCooldown);
End;
If(!Entity Exists(Global.ricochetUser) && !Entity Exists(Global.buffEffect[1])
&& Global.ricochetUser != Null && !Global.spawnWithRicochet);
Else If(!Entity Exists(Global.ricochetUser) && !Entity Exists(Global.buffEffect[1])
&& Global.ricochetUser != Null && !Global.spawnWithRicochet);
Global.ricochetUser.ricochetEnabled = False;
Global.ricochetUser.ricochetDur = 0;
Wait(1, Ignore Condition);
Call Subroutine(RicochetCooldown);
End;
If(!Entity Exists(Global.buckshotUser) && !Entity Exists(Global.buffEffect[2])
&& Global.buckshotUser != Null && !Global.spawnWithBuckshot);
Else If(!Entity Exists(Global.buckshotUser) && !Entity Exists(Global.buffEffect[2])
&& Global.buckshotUser != Null && !Global.spawnWithBuckshot);
Global.buckshotUser.buckshotEnabled = False;
Global.buckshotUser.buckshotDur = 0;
Wait(1, Ignore Condition);
Call Subroutine(BuckshotCooldown);
End;
}
}
rule("[Buff + Tele] :: Map Locations")
rule("[Buff] :: Map Locations")
{
event
{
Ongoing - Global;
}
actions
{
"i do not recommend opening the large action in-game"
Global.validBuffMap = False;
Skip(Array(153, 0, 11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132, 143)[Index Of Array Value(Array(Current Map == Map(
Workshop Chamber) || Current Map == Map(Workshop Expanse) || Current Map == Map(Workshop Expanse Night) || Current Map == Map(
Workshop Island) || Current Map == Map(Workshop Island Night), Current Map == Map(Black Forest) || Current Map == Map(
Black Forest Winter), Current Map == Map(Blizzard World) || Current Map == Map(Blizzard World Winter), Current Map == Map(
Castillo), Current Map == Map(Château Guillard) || Current Map == Map(Château Guillard Halloween), Current Map == Map(Dorado),
Current Map == Map(Ecopoint: Antarctica) || Current Map == Map(Ecopoint: Antarctica Winter), Current Map == Map(Eichenwalde)
|| Current Map == Map(Eichenwalde Halloween), Current Map == Map(Havana), Current Map == Map(Hollywood) || Current Map == Map(
Hollywood Halloween), Current Map == Map(King's Row) || Current Map == Map(King's Row Winter), Current Map == Map(
Lijiang Control Center) || Current Map == Map(Lijiang Control Center Lunar New Year), Current Map == Map(Necropolis),
Current Map == Map(Paris)), Global.buffsEnabled) + 1]);
Skip(Array(83, 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78)[Index Of Array Value(Array((
Global.buffsEnabled && Current Map == Map(Workshop Chamber)) || (Current Map == Map(Workshop Expanse)) || Current Map == Map(
Workshop Expanse Night) || Current Map == Map(Workshop Island) || Current Map == Map(Workshop Island Night), (
Global.buffsEnabled && Current Map == Map(Blizzard World)) || (Current Map == Map(Blizzard World Winter)), (
Global.buffsEnabled && Current Map == Map(Château Guillard)) || (Current Map == Map(Château Guillard Halloween)),
Global.buffsEnabled && Current Map == Map(Dorado), (Global.buffsEnabled && Current Map == Map(Ecopoint: Antarctica)) || (
Current Map == Map(Ecopoint: Antarctica Winter)), (Global.buffsEnabled && Current Map == Map(Eichenwalde)) || (
Current Map == Map(Eichenwalde Halloween)), (Global.buffsEnabled && Current Map == Map(Hollywood)) || (Current Map == Map(
Hollywood Halloween)), (Global.buffsEnabled && Current Map == Map(King's Row)) || (Current Map == Map(King's Row Winter)), (
Global.buffsEnabled && Current Map == Map(Lijiang Control Center)) || (Current Map == Map(
Lijiang Control Center Lunar New Year)), Global.buffsEnabled && Current Map == Map(Necropolis),
Global.buffsEnabled && Current Map == Map(Paris), Global.buffsEnabled && Current Map == Map(Havana),
Global.buffsEnabled && Current Map == Map(Castillo), (Global.buffsEnabled && Current Map == Map(Black Forest)) || (
Current Map == Map(Black Forest Winter))), True) + 1]);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(0, 1, 2);
Global.buffPos[1] = Vector(0, 1, -2);
Global.buffPos[2] = Vector(0, 1, -6);
Global.buffPos[3] = Vector(0, 1, 6);
Global.buffPos[4] = Vector(12, 1, 0);
Global.telePos[0] = Vector(19, 2, 0);
Global.telePos[1] = Vector(-19, 2, 0);
Global.telePos[2] = Vector(0, 2, 19);
Global.telePos[3] = Vector(0, 2, -19);
Skip(142);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(16.790, 12.440, 29.480);
Global.buffPos[1] = Vector(4.660, 18.280, 5);
Global.buffPos[2] = Vector(16.180, 12.360, -20.110);
Global.buffPos[3] = Vector(-25.490, 13.090, 5);
Global.buffPos[4] = Vector(21, 10, 5);
Global.telePos[0] = Vector(-29, 13.980, 5);
Global.telePos[1] = Vector(29.090, 11, 5);
Global.telePos[2] = Vector(19.840, 19.070, 38.530);
Global.telePos[3] = Vector(20.340, 19.070, -27.570);
Skip(131);
Skip(77);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(-32.500, 0.610, 73.150);
Global.buffPos[1] = Vector(-77.280, 5.880, 66.150);
Global.buffPos[2] = Vector(-54.500, 0.610, 110.200);
Global.buffPos[3] = Vector(-67.550, 1.750, 138.740);
Global.buffPos[4] = Vector(-25.040, 1.290, 109.950);
Global.telePos[0] = Vector(-30.010, -0.210, 148.680);
Global.telePos[1] = Vector(-80.460, 6.880, 63.050);
Global.telePos[2] = Vector(-13.320, 3.920, 89.040);
Global.telePos[3] = Vector(-101.220, 2.750, 90.240);
Skip(120);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(-106.180, 40.560, 43.200);
Global.buffPos[1] = Vector(-128.200, 35.380, 63.400);
Global.buffPos[2] = Vector(-100.350, 40.560, 73.750);
Global.buffPos[3] = Vector(-74.820, 33, 52.930);
Global.buffPos[4] = Vector(-85.650, 39.640, 55);
Global.telePos[0] = Vector(-112.580, 34.610, 22.570);
Global.telePos[1] = Vector(-99.910, 35.740, 93.710);
Global.telePos[2] = Vector(-131.300, 36.380, 63.910);
Global.telePos[3] = Vector(-70.640, 34.510, 52.100);
Skip(109);
Skip(71);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(206.310, 9.030, 101.900);
Global.buffPos[1] = Vector(206.310, 9, 61.910);
Global.buffPos[2] = Vector(180.600, 10, 101.930);
Global.buffPos[3] = Vector(206.190, 1, 77.960);
Global.buffPos[4] = Vector(229.120, 14, 61.970);
Global.telePos[0] = Vector(206.250, 2, 84.500);
Global.telePos[1] = Vector(205.460, 10, 48.770);
Global.telePos[2] = Vector(165.750, 7, 81);
Global.telePos[3] = Vector(238.630, 4, 90.230);
Skip(98);
Skip(65);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(115.660, 8.730, -7.080);
Global.buffPos[1] = Vector(85.300, 13.750, 29.840);
Global.buffPos[1] = Vector(64.440, 15.010, 25.150);
Global.buffPos[2] = Vector(98.040, 19.010, 15.260);
Global.buffPos[3] = Vector(131.270, 12.050, 26.120);
Global.buffPos[4] = Vector(76.870, 9, 7.340);
Global.telePos[0] = Vector(137.980, 13.050, 28);
Global.telePos[1] = Vector(81.340, 8.700, -5.310);
Global.telePos[2] = Vector(85.190, 16.300, 40.640);
Global.telePos[3] = Vector(130.890, 11.020, -26.940);
Skip(87);
Skip(59);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(1.660, 12.630, -25);
Global.buffPos[1] = Vector(-19.500, 13, 0);
Global.buffPos[2] = Vector(1.660, 12.630, 25);
Global.buffPos[3] = Vector(20.500, 10, 0);
Global.buffPos[4] = Vector(18.700, 5, 0);
Global.telePos[0] = Vector(23.360, 5, 0);
Global.telePos[1] = Vector(-35.110, 11, 0);
Global.telePos[2] = Vector(12.200, 10.160, -54.150);
Global.telePos[3] = Vector(12.200, 10.180, 54.150);
Skip(76);
Skip(53);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(55.700, 22, -67.840);
Global.buffPos[1] = Vector(58.330, 5.720, -90.390);
Global.buffPos[2] = Vector(76.030, 11.690, -109.660);
Global.buffPos[3] = Vector(88.130, 13.670, -67.390);
Global.buffPos[4] = Vector(30.760, 15, -81.880);
Global.telePos[0] = Vector(89.160, 14.830, -63.610);
Global.telePos[1] = Vector(36.430, 14.720, -106.730);
Global.telePos[2] = Vector(35.920, 6.930, -63.800);
Global.telePos[3] = Vector(105.890, 14.720, -110.790);
Skip(65);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(9.500, 7, -79.230);
Global.buffPos[1] = Vector(37.640, 11, -94.230);
Global.buffPos[2] = Vector(27.920, 13, -61.960);
Global.buffPos[3] = Vector(64.500, 13, -83.330);
Global.buffPos[4] = Vector(40.740, 6.820, -83.330);
Global.telePos[0] = Vector(-1.840, 8, -79.200);
Global.telePos[1] = Vector(66.150, 8, -83.200);
Global.telePos[2] = Vector(34.050, 8, -59.830);
Global.telePos[3] = Vector(30.600, 6, -102.450);
Skip(54);
Skip(47);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(-11.910, 2.730, -74.640);
Global.buffPos[1] = Vector(-4.090, 2.600, -15.870);
Global.buffPos[2] = Vector(20.670, 2.600, -51.820);
Global.buffPos[3] = Vector(7.870, 13.900, -48.380);
Global.buffPos[4] = Vector(18.510, 5.690, -28.410);
Global.telePos[0] = Vector(-1.170, 3.600, -83);
Global.telePos[1] = Vector(16.140, 3.750, -8.470);
Global.telePos[2] = Vector(-25.640, 7.750, -37.560);
Global.telePos[3] = Vector(53, 4.750, -57.910);
Skip(43);
Skip(41);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(-49.460, 1, 2.690);
Global.buffPos[1] = Vector(-31.190, 10, -13.400);
Global.buffPos[2] = Vector(-93.670, 8.500, -29.380);
Global.buffPos[3] = Vector(-48.850, 10.120, -37.620);
Global.buffPos[4] = Vector(-92.150, 2.100, 7.650);
Global.telePos[0] = Vector(-33.630, 1.860, -24.440);
Global.telePos[1] = Vector(-99.900, 3.010, -8.520);
Global.telePos[2] = Vector(-91.950, 3.120, 12.030);
Global.telePos[3] = Vector(-36.350, 4, -52.210);
Skip(32);
Global.buffPos[3] = Vector(-69.640, 1.500, -35.480);
Skip(35);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(-26.800, 268, 308);
Global.buffPos[1] = Vector(0, 271, 323);
Global.buffPos[2] = Vector(26.800, 268, 308);
Global.buffPos[3] = Vector(0, 271, 260.650);
Global.buffPos[4] = Vector(0, 279, 291.850);
Global.telePos[0] = Vector(0, 269.170, 269.690);
Global.telePos[1] = Vector(0, 272, 329.500);
Global.telePos[2] = Vector(0, -10000, 0);
Global.telePos[3] = Vector(0, -10000, 0);
Skip(21);
Global.buffPos[3] = Vector(0, 271, 267.500);
Skip(29);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(1.680, 12.700, 17.250);
Global.buffPos[1] = Vector(-21.050, 13.710, 0);
Global.buffPos[2] = Vector(1.800, 12.700, -16.410);
Global.buffPos[3] = Vector(8.500, 2.010, 0);
Global.buffPos[4] = Vector(23.080, 5.990, 0);
Global.telePos[0] = Vector(-49.210, 7, 0);
Global.telePos[1] = Vector(31.590, 3, -0.200);
Global.telePos[2] = Vector(5.500, 12.330, -28.760);
Global.telePos[3] = Vector(5.500, 12.020, 28.390);
Skip(10);
Skip(23);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(-104.100, 16, -100.650);
Global.buffPos[1] = Vector(-109.180, 11, -60.600);
Global.buffPos[2] = Vector(-57.190, 14, -82);
Global.buffPos[3] = Vector(-73.390, 11.020, -38.230);
Global.buffPos[4] = Vector(-85.930, 13, -64.090);
Global.telePos[0] = Vector(-125.470, 12, -57);
Global.telePos[1] = Vector(-53.720, 15, -84.200);
Global.telePos[2] = Vector(-68.330, 13.350, -27.940);
Global.telePos[3] = Vector(-105.960, 17, -104.230);
}
}
rule("[Tele] :: Create Tele Effects")
{
event
{
Ongoing - Global;
}
conditions
{
(Global.validBuffMap && Global.matchStarted && Global.buffsEnabled) == True;
}
actions
{
Global.i = 0;
While(Global.i < 4);
Create Effect(All Players(All Teams), Bad Aura, Blue, Global.telePos[Global.i], 2, None);
Global.i += 1;
End;
}
}
rule("[Tele] :: 0 to 1")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Event Player.usingTele && Global.validBuffMap && Distance Between(Global.telePos[0], Event Player) < 3) == True;
}
actions
{
Event Player.usingTele = True;
Teleport(Event Player, Global.telePos[1]);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
Play Effect(All Players(All Teams), Good Explosion, Blue, Event Player, 1);
Play Effect(All Players(All Teams), Good Explosion, Blue, Global.telePos[0], 3);
Wait(0.016, Ignore Condition);
Apply Impulse(Event Player, Forward, 20, To Player, Cancel Contrary Motion);
Wait(1, Ignore Condition);
Event Player.usingTele = False;
}
}
rule("[Tele] :: 1 to 0")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Event Player.usingTele && Global.validBuffMap && Distance Between(Global.telePos[1], Event Player) < 3) == True;
}
actions
{
Event Player.usingTele = True;
Teleport(Event Player, Global.telePos[0]);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
Play Effect(All Players(All Teams), Good Explosion, Blue, Event Player, 1);
Play Effect(All Players(All Teams), Good Explosion, Blue, Global.telePos[1], 3);
Wait(0.016, Ignore Condition);
Apply Impulse(Event Player, Forward, 20, To Player, Cancel Contrary Motion);
Wait(1, Ignore Condition);
Event Player.usingTele = False;
}
}
rule("[Tele] :: 2 to 3")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Event Player.usingTele && Global.validBuffMap && Distance Between(Global.telePos[2], Event Player) < 3) == True;
}
actions
{
Event Player.usingTele = True;
Teleport(Event Player, Global.telePos[3]);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
Play Effect(All Players(All Teams), Good Explosion, Blue, Event Player, 1);
Play Effect(All Players(All Teams), Good Explosion, Blue, Global.telePos[2], 3);
Wait(0.016, Ignore Condition);
Apply Impulse(Event Player, Forward, 20, To Player, Cancel Contrary Motion);
Wait(1, Ignore Condition);
Event Player.usingTele = False;
}
}
rule("[Tele] :: 3 to 2")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Event Player.usingTele && Global.validBuffMap && Distance Between(Global.telePos[3], Event Player) < 3) == True;
}
actions
{
Event Player.usingTele = True;
Teleport(Event Player, Global.telePos[2]);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
Play Effect(All Players(All Teams), Good Explosion, Blue, Event Player, 1);
Play Effect(All Players(All Teams), Good Explosion, Blue, Global.telePos[3], 3);
Wait(0.016, Ignore Condition);
Apply Impulse(Event Player, Forward, 20, To Player, Cancel Contrary Motion);
Wait(1, Ignore Condition);
Event Player.usingTele = False;
Skip(17);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(0, 7, -79.230);
Global.buffPos[1] = Vector(32.090, 5, -97.450);
Global.buffPos[2] = Vector(64.200, 5, -65.680);
Global.buffPos[3] = Vector(64.500, 13, -83.330);
Skip(11);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(-106.180, 40.560, 43.200);
Global.buffPos[1] = Vector(-128.200, 35.380, 63.400);
Global.buffPos[2] = Vector(-100.350, 40.560, 73.750);
Global.buffPos[3] = Vector(-74.820, 33, 52.930);
Skip(5);
Global.validBuffMap = True;
Global.buffPos[0] = Vector(16.790, 12.440, 29.480);
Global.buffPos[1] = Vector(4.660, 18.280, 5);
Global.buffPos[2] = Vector(16.180, 12.360, -20.110);
Global.buffPos[3] = Vector(-25.490, 13.090, 5);
}
}
disabled rule("---------------- Wallbang ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Buff] :: Wallbang : Create Orb")
{
event
{
Ongoing - Global;
}
conditions
{
(Global.validBuffMap && !Global.spawnWithWallbang && Global.spawnWallbang && Global.wallbangCD == 0 && (
Global.matchStarted || Global.buffsSpawnImmediately)) == True;
}
actions
{
Global.canPickupWallbang = True;
Destroy In-World Text(Global.cdText[0]);
Create Effect(All Players(All Teams), Orb, Yellow, Global.buffPos[0], 2, Visible To Position and Radius);
Global.buffEffect[0] = Last Created Entity;
Play Effect(All Players(All Teams), Good Pickup Effect, Yellow, Global.buffPos[0], 1);
Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Baptiste), Button(Ultimate)), Global.buffPos[0], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.buffIcon[0] = Last Text ID;
Destroy In-World Text(Global.cdText[0]);
Global.canPickupWallbang = True;
}
}
rule("[Buff] :: Wallbang : Collect")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Global.matchStarted && Global.canPickupWallbang && Distance Between(Global.buffPos[0], Event Player) < 2.500 && Has Spawned(
Event Player) && Is Alive(Event Player)) || Global.spawnWithWallbang) == True;
((Global.matchStarted && Global.canPickupWallbang && Entity Exists(Global.buffEffect[0]) && Distance Between(Global.buffPos[0],
Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithWallbang) == True;
}
actions
{
Global.canPickupWallbang = False;
Event Player.wallbangEnabled = True;
Global.wallbangUser = Event Player;
If(!Global.spawnWithWallbang);
Destroy In-World Text(Global.cdText[0]);
Destroy In-World Text(Global.buffIcon[0]);
Destroy Effect(Global.buffEffect[0]);
Play Effect(All Players(All Teams), Good Pickup Effect, Yellow, Global.buffPos[0], 1);
Play Effect(All Players(All Teams), Buff Explosion Sound, Yellow, Global.buffPos[0], 200);
Event Player.wallbangDur = Global.WALLBANG_DUR;
Chase Player Variable At Rate(Event Player, wallbangDur, 0, 1, None);
Create HUD Text(Event Player, Null, Null, Custom String("{0} Wallbang: {1} {0}", Ability Icon String(Hero(Baptiste), Button(
Ultimate)), Round To Integer(Event Player.wallbangDur, Up)), Right, 0.300, White, White, Yellow, Visible To and String,
Ultimate)), Round To Integer(Event Player.wallbangDur, Up)), Top, 2, White, White, White, Visible To and String,
Default Visibility);
Event Player.hudText[0] = Last Text ID;
Small Message(Event Player, Custom String("Your bullets go through walls!"));
Big Message(Event Player, Custom String("Wallbang"));
Create Effect(Is Alive(Event Player) ? All Players(All Teams) : Null, Good Aura, Yellow, Event Player, 0.750,
Visible To Position and Radius);
Event Player.wallbangBuffEffect = Last Created Entity;
Wait(Global.WALLBANG_DUR - 4, Ignore Condition);
For Player Variable(Event Player, sound, 0, 4, 1);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
Wait(1, Ignore Condition);
End;
Else;
Create HUD Text(Event Player, Null, Null, Custom String("{0} Wallbang: Forever {0}", Ability Icon String(Hero(Baptiste), Button(
Ultimate))), Right, 0.300, White, White, Yellow, Visible To and String, Default Visibility);
Ultimate))), Top, 1, White, White, White, Visible To and String, Default Visibility);
Event Player.hudText[0] = Last Text ID;
End;
}
}
rule("[Buff] :: Wallbang : Remove")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Global.spawnWithWallbang && Event Player.wallbangDur == 0) == True;
}
actions
{
Wait(0.128, Ignore Condition);
Destroy HUD Text(Event Player.hudText[0]);
Destroy Effect(Event Player.wallbangBuffEffect);
Stop Chasing Player Variable(Event Player, wallbangDur);
Event Player.wallbangEnabled = False;
Global.wallbangUser = Null;
Event Player.wallbangDur = Global.WALLBANG_DUR;
Call Subroutine(WallbangCooldown);
}
}
rule("[Buff] :: Wallbang : Action")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.wallbangEnabled && Is Firing Primary(Event Player)) == True;
}
actions
{
Event Player.gunPos = Eye Position(Event Player) + Facing Direction Of(Event Player) + World Vector Of(Right - Vector(0, 0.300, 0),
Event Player, Rotation) * 0.180;
Event Player.wallbangHitPos = Eye Position(Event Player);
Event Player.wallbangLivingEnemies = 0;
Event Player.wallbangHitPlayer = 0;
Event Player.wallbangCount = 0;
While(Distance Between(Event Player.gunPos, Event Player.wallbangHitPos)
< 100 && Event Player.wallbangCount < Global.NUM_WALLBANGS);
Event Player.wallbangLivingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(
Current Array Element));
Event Player.wallbangHitPos = Ray Cast Hit Position(Event Player.wallbangHitPos + Facing Direction Of(Event Player),
Event Player.wallbangHitPos + Facing Direction Of(Event Player) * (100 - Distance Between(Event Player.gunPos,
Event Player.wallbangHitPos)), Event Player.wallbangLivingEnemies, Event Player, True);
Play Effect(All Players(All Teams), Good Explosion, Yellow, Event Player.wallbangHitPos, 0.200);
Event Player.wallbangHitPlayer = Ray Cast Hit Player(Event Player.wallbangHitPos,
Event Player.wallbangHitPos + Facing Direction Of(Event Player) * (100 - Distance Between(Event Player.gunPos,
Event Player.wallbangHitPos)), Event Player.wallbangLivingEnemies, Event Player, True);
If(Event Player.wallbangHitPlayer != Null && Event Player.wallbangHitPlayer != Event Player);
Damage(Event Player.wallbangHitPlayer, Event Player, 10000);
End;
If(Global.wallbangDbg);
Destroy Effect(Event Player.wbDbgEffects[Event Player.wallbangCount]);
Destroy Effect(Event Player.wbDbgBeam[Event Player.wallbangCount]);
Create Effect(All Players(All Teams), Sphere, Yellow, Event Player.wallbangHitPos, 0.250, None);
Event Player.wbDbgEffects[Event Player.wallbangCount] = Last Created Entity;
Create Beam Effect(All Players(All Teams), Bad Beam, Eye Position(Event Player), Event Player.wallbangHitPos, Yellow, None);
Event Player.wbDbgBeam[Event Player.wallbangCount] = Last Created Entity;
End;
Event Player.wallbangCount += 1;
End;
Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.gunPos, Event Player.wallbangHitPos, Yellow, None);
Event Player.wallbangEffect[0] = Last Created Entity;
Wait(0.250, Ignore Condition);
Destroy Effect(Event Player.wallbangEffect[0]);
}
}
disabled rule("---------------- Ricochet ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Buff] :: Ricochet : Create Orb")
{
event
{
Ongoing - Global;
}
conditions
{
(Global.validBuffMap && !Global.spawnWithRicochet && Global.spawnRicochet && Global.ricochetCD == 0 && (
Global.matchStarted || Global.buffsSpawnImmediately)) == True;
}
actions
{
Global.canPickupRicochet = True;
Destroy In-World Text(Global.cdText[1]);
Create Effect(All Players(All Teams), Orb, Purple, Global.buffPos[1], 2, Visible To Position and Radius);
Global.buffEffect[1] = Last Created Entity;
Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Global.buffPos[1], 1);
Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Winston), Button(Ability 1)), Global.buffPos[1], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.buffIcon[1] = Last Text ID;
Destroy In-World Text(Global.cdText[1]);
Global.canPickupRicochet = True;
}
}
rule("[Buff] :: Ricochet : Collect")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Global.matchStarted && Global.canPickupRicochet && Distance Between(Global.buffPos[1], Event Player) < 2.500 && Has Spawned(
Event Player) && Is Alive(Event Player)) || Global.spawnWithRicochet) == True;
((Global.matchStarted && Global.canPickupRicochet && Entity Exists(Global.buffEffect[1]) && Distance Between(Global.buffPos[1],
Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithRicochet) == True;
}
actions
{
Global.canPickupRicochet = False;
Event Player.ricochetEnabled = True;
Global.ricochetUser = Event Player;
If(!Global.spawnWithRicochet);
Destroy In-World Text(Global.cdText[1]);
Destroy In-World Text(Global.buffIcon[1]);
Destroy Effect(Global.buffEffect[1]);
Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Global.buffPos[1], 1);
Play Effect(All Players(All Teams), Buff Explosion Sound, Purple, Global.buffPos[1], 200);
Event Player.ricochetDur = Global.RICOCHET_DUR;
Chase Player Variable At Rate(Event Player, ricochetDur, 0, 1, None);
Create HUD Text(Event Player, Null, Null, Custom String("{0} Ricochet: {1} {0}", Ability Icon String(Hero(Winston), Button(
Ability 1)), Round To Integer(Event Player.ricochetDur, Up)), Right, 0.400, White, White, Purple, Visible To and String,
Create HUD Text(Event Player, Null, Null, Custom String("{0} Ricochet Bullets: {1} {0}", Ability Icon String(Hero(Winston), Button(
Ability 1)), Round To Integer(Event Player.ricochetDur, Up)), Top, 3, White, White, White, Visible To and String,
Default Visibility);
Event Player.hudText[1] = Last Text ID;
Small Message(Event Player, Custom String("Your bullets ricochet off walls!"));
Big Message(Event Player, Custom String("Ricochet"));
Big Message(Event Player, Custom String("Ricochet Bullets"));
Create Effect(Is Alive(Event Player) ? All Players(All Teams) : Null, Good Aura, Purple, Event Player, 0.750,
Visible To Position and Radius);
Event Player.ricochetBuffEffect = Last Created Entity;
Wait(Global.RICOCHET_DUR - 4, Ignore Condition);
For Player Variable(Event Player, sound_0, 0, 4, 1);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
Wait(1, Ignore Condition);
End;
Else;
Create HUD Text(Event Player, Null, Null, Custom String("{0} Ricochet: Forever {0}", Ability Icon String(Hero(Winston), Button(
Ability 1))), Right, 0.400, White, White, Purple, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("{0} Ricochet Bullets: Forever {0}", Ability Icon String(Hero(Winston),
Button(Ability 1))), Top, 2, White, White, White, Visible To and String, Default Visibility);
Event Player.hudText[1] = Last Text ID;
End;
}
}
rule("[Buff] :: Ricochet : Remove")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.ricochetDur == 0 && !Global.spawnWithRicochet) == True;
}
actions
{
Wait(0.128, Ignore Condition);
Destroy HUD Text(Event Player.hudText[1]);
Destroy Effect(Event Player.ricochetBuffEffect);
Stop Chasing Player Variable(Event Player, ricochetDur);
Event Player.ricochetEnabled = False;
Global.ricochetUser = Null;
Event Player.ricochetDur = Global.RICOCHET_DUR;
Call Subroutine(RicochetCooldown);
}
}
rule("[Buff] :: Ricochet : Action")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.ricochetEnabled && Is Firing Primary(Event Player)) == True;
}
actions
{
"https://math.stackexchange.com/questions/13261/how-to-get-a-reflection-vector"
Event Player.normals = Empty Array;
Event Player.hitPos = Empty Array;
Event Player.hitPosPlayer = Empty Array;
Event Player.ricochets = Empty Array;
Event Player.hitPosRicochets = Empty Array;
Event Player.hitPosPlayerRicochets = Empty Array;
Event Player.ricochetEffects = Empty Array;
Event Player.ricochetEffect = Empty Array;
Event Player.eyePos = Eye Position(Event Player) + Facing Direction Of(Event Player) + World Vector Of(Right - Vector(0, 0.300, 0),
Event Player, Rotation) * 0.180;
Event Player.facing = Facing Direction Of(Event Player);
Event Player.loop_0 = 0;
While(Event Player.loop_0 < Global.NUM_RICOCHETS);
If(Event Player.loop_0 > 0);
Event Player.eyePos = Event Player.hitPos[Event Player.loop_0 - 1];
Event Player.facing = Event Player.ricochets[Event Player.loop_0 - 1];
Else;
Event Player.eyePos = Eye Position(Event Player) + Facing Direction Of(Event Player) + World Vector Of(Right - Vector(0, 0.300, 0),
Event Player, Rotation) * 0.180;
Event Player.facing = Facing Direction Of(Event Player);
End;
Event Player.normals[Event Player.loop_0] = Ray Cast Hit Normal(Event Player.eyePos,
Event Player.eyePos + Event Player.facing * 100, All Players(All Teams), Event Player, True);
Event Player.hitPos[Event Player.loop_0] = Ray Cast Hit Position(Event Player.eyePos,
Event Player.eyePos + Event Player.facing * 100, All Players(All Teams), Event Player, True);
Event Player.hitPosPlayer[Event Player.loop_0] = Ray Cast Hit Player(Event Player.eyePos,
Event Player.eyePos + Event Player.facing * 100, All Players(All Teams), Event Player, True);
Event Player.ricochets[Event Player.loop_0] = Event Player.facing - 2 * Event Player.normals[Event Player.loop_0] * Dot Product(
Event Player.facing, Event Player.normals[Event Player.loop_0]);
Event Player.hitPosRicochets[Event Player.loop_0] = Ray Cast Hit Position(Event Player.hitPos[Event Player.loop_0],
Event Player.hitPos[Event Player.loop_0] + Event Player.ricochets[Event Player.loop_0] * 100, All Living Players(All Teams),
Event Player, True);
Event Player.hitPosPlayerRicochets[Event Player.loop_0] = Ray Cast Hit Player(Event Player.hitPos[Event Player.loop_0],
Event Player.hitPos[Event Player.loop_0] + Event Player.ricochets[Event Player.loop_0] * 100, All Living Players(All Teams),
Event Player, True);
Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.eyePos, Event Player.hitPos[Event Player.loop_0], Purple, None);
Event Player.ricochetEffect[Event Player.loop_0] = Last Created Entity;
Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.hitPos[Event Player.loop_0],
Event Player.hitPosRicochets[Event Player.loop_0], Purple, None);
Event Player.ricochetEffects[Event Player.loop_0] = Last Created Entity;
Play Effect(All Players(All Teams), Good Explosion, Purple, Event Player.hitPos[Event Player.loop_0], 0.200);
Play Effect(All Players(All Teams), Good Explosion, Purple, Event Player.hitPosRicochets[Event Player.loop_0], 0.200);
Damage(Event Player.hitPosPlayer[Event Player.loop_0], Event Player, 10000);
Damage(Event Player.hitPosPlayerRicochets[Event Player.loop_0], Event Player, 10000);
If(Global.ricochetDbg);
Destroy Effect(Event Player.rDbgEffects[0][Event Player.loop_0]);
Destroy Effect(Event Player.rDbgEffects[1][Event Player.loop_0]);
Destroy Effect(Event Player.rDbgBeam[0][Event Player.loop_0]);
Destroy Effect(Event Player.rDbgBeam[1][Event Player.loop_0]);
Create Effect(All Players(All Teams), Sphere, Purple, Event Player.hitPos[Event Player.loop_0], 0.250, None);
Global._arrayBuilder = Event Player.rDbgEffects[0];
Global._arrayBuilder[Event Player.loop_0] = Last Created Entity;
Event Player.rDbgEffects[0] = Global._arrayBuilder;
Create Effect(All Players(All Teams), Sphere, Purple, Event Player.hitPosRicochets[Event Player.loop_0], 0.250, None);
Global._arrayBuilder = Event Player.rDbgEffects[1];
Global._arrayBuilder[Event Player.loop_0] = Last Created Entity;
Event Player.rDbgEffects[1] = Global._arrayBuilder;
Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.eyePos, Event Player.hitPos[Event Player.loop_0], Purple, None);
Global._arrayBuilder = Event Player.rDbgBeam[0];
Global._arrayBuilder[Event Player.loop_0] = Last Created Entity;
Event Player.rDbgBeam[0] = Global._arrayBuilder;
Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.hitPos[Event Player.loop_0],
Event Player.hitPosRicochets[Event Player.loop_0], Purple, None);
Global._arrayBuilder = Event Player.rDbgBeam[1];
Global._arrayBuilder[Event Player.loop_0] = Last Created Entity;
Event Player.rDbgBeam[1] = Global._arrayBuilder;
End;
Event Player.loop_0 += 1;
End;
Wait(0.150, Ignore Condition);
Event Player.i_0 = 0;
While(Event Player.i_0 < Global.NUM_RICOCHETS);
Destroy Effect(Event Player.ricochetEffect[Event Player.i_0]);
Destroy Effect(Event Player.ricochetEffects[Event Player.i_0]);
Event Player.i_0 += 1;
End;
}
}
disabled rule("---------------- Buckshot ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Buff] :: Buckshot : Create Orb")
{
event
{
Ongoing - Global;
}
conditions
{
(Global.validBuffMap && !Global.spawnWithBuckshot && Global.spawnBuckshot && Global.buckshotCD == 0 && (
Global.matchStarted || Global.buffsSpawnImmediately)) == True;
}
actions
{
Global.canPickupBuckshot = True;
Destroy In-World Text(Global.cdText[2]);
Create Effect(All Players(All Teams), Orb, Green, Global.buffPos[2], 2, Visible To Position and Radius);
Global.buffEffect[2] = Last Created Entity;
Play Effect(All Players(All Teams), Good Pickup Effect, Green, Global.buffPos[2], 1);
Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Ashe), Button(Ability 1)), Global.buffPos[2], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.buffIcon[2] = Last Text ID;
Destroy In-World Text(Global.cdText[2]);
Global.canPickupBuckshot = True;
}
}
rule("[Buff] :: Buckshot : Collect")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Global.matchStarted && Global.canPickupBuckshot && Distance Between(Global.buffPos[2], Event Player) < 2.500 && Has Spawned(
Event Player) && Is Alive(Event Player)) || Global.spawnWithBuckshot) == True;
((Global.matchStarted && Global.canPickupBuckshot && Entity Exists(Global.buffEffect[2]) && Distance Between(Global.buffPos[2],
Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithBuckshot) == True;
}
actions
{
Global.canPickupBuckshot = False;
Event Player.buckshotEnabled = True;
Global.buckshotUser = Event Player;
If(!Global.spawnWithBuckshot);
Destroy In-World Text(Global.cdText[2]);
Destroy In-World Text(Global.buffIcon[2]);
Destroy Effect(Global.buffEffect[2]);
Play Effect(All Players(All Teams), Good Pickup Effect, Green, Global.buffPos[2], 1);
Play Effect(All Players(All Teams), Buff Explosion Sound, Green, Global.buffPos[2], 200);
Event Player.buckshotDur = Global.BUCKSHOT_DUR;
Chase Player Variable At Rate(Event Player, buckshotDur, 0, 1, Destination and Rate);
Create HUD Text(Event Player, Null, Null, Custom String("{0} Buckshot: {1} {0}", Ability Icon String(Hero(Ashe), Button(
Ability 1)), Round To Integer(Event Player.buckshotDur, Up)), Right, 0.500, White, White, Green, Visible To and String,
Ability 1)), Round To Integer(Event Player.buckshotDur, Up)), Top, 4, White, White, White, Visible To and String,
Default Visibility);
Event Player.hudText[2] = Last Text ID;
Big Message(Event Player, Custom String("Buckshot"));
Small Message(Event Player, Custom String("Your bullets spread like a shotgun!"));
Create Effect(Is Alive(Event Player) ? All Players(All Teams) : Null, Good Aura, Green, Event Player, 0.750,
Visible To Position and Radius);
Event Player.buckshotBuffEffect = Last Created Entity;
Wait(Global.BUCKSHOT_DUR - 4, Ignore Condition);
For Player Variable(Event Player, sound_1, 0, 4, 1);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
Wait(1, Ignore Condition);
End;
Else;
Create HUD Text(Event Player, Null, Null, Custom String("{0} Buckshot: Forever {0}", Ability Icon String(Hero(Ashe), Button(
Ability 1))), Right, 0.500, White, White, Green, Visible To and String, Default Visibility);
Ability 1))), Top, 3, White, White, White, Visible To and String, Default Visibility);
Event Player.hudText[2] = Last Text ID;
End;
}
}
rule("[Buff] :: Buckshot : Remove")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(!Global.spawnWithBuckshot && Event Player.buckshotDur == 0) == True;
}
actions
{
Wait(0.128, Ignore Condition);
Destroy HUD Text(Event Player.hudText[2]);
Destroy Effect(Event Player.buckshotBuffEffect);
Stop Chasing Player Variable(Event Player, buckshotDur);
Event Player.buckshotEnabled = False;
Global.buckshotUser = Null;
Event Player.buckshotDur = Global.BUCKSHOT_DUR;
Call Subroutine(BuckshotCooldown);
}
}
rule("[Buff] :: Buckshot : Action")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.buckshotEnabled && Is Firing Primary(Event Player)) == True;
}
actions
{
Event Player.buckshotHitPos = Empty Array;
Event Player.buckshotHitPlayer = Empty Array;
Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
Event Player.gunPos_0 = World Vector Of(Right - Vector(0, 0.300, 0), Event Player, Rotation) * 0.180;
Event Player.buckshotBeam = Empty Array;
Event Player.centerBeam = 0;
Global.spreadDiag = Global.BUCKSHOT_SPREAD - Global.BUCKSHOT_SPREAD * 0.330;
Global.spreadHori = Global.BUCKSHOT_SPREAD;
If(Global.randomSpread);
Event Player.randomizedSpreadHori = Empty Array;
Event Player.randomizedSpreadDiag = Empty Array;
Event Player.hori = 0;
While(Event Player.hori < 4);
Event Player.randomizedSpreadHori[Event Player.hori] = Random Real(Global.spreadHori / 5, Global.spreadHori + 1.500);
Event Player.hori += 1;
End;
Event Player.diag = 0;
While(Event Player.diag < 4);
Event Player.randomizedSpreadDiag[Event Player.diag] = Random Real(Global.spreadHori / 5, Global.spreadDiag + 1.500);
Event Player.diag += 1;
End;
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[0] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[0] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Else;
Event Player.buckshotHitPos[0] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[0]) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[0]) * 100, All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[0] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[0]) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[0]) * 100, All Living Players(All Teams), Event Player, False);
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[1] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[1] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
All Living Players(All Teams), Event Player, False);
Else;
Event Player.buckshotHitPos[1] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[1]) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[1] * -1) * 100, All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[1] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[1]) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[1] * -1) * 100, All Living Players(All Teams), Event Player, False);
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[2] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[2] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Else;
Event Player.buckshotHitPos[2] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[2] * -1) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[2]) * 100, All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[2] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[2] * -1) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[2]) * 100, All Living Players(All Teams), Event Player, False);
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[3] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[3] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
All Living Players(All Teams), Event Player, False);
Else;
Event Player.buckshotHitPos[3] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[3] * -1) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[3] * -1) * 100, All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[3] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[3] * -1) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
+ Event Player.randomizedSpreadDiag[3] * -1) * 100, All Living Players(All Teams), Event Player, False);
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[4] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
False);
Event Player.buckshotHitPlayer[4] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
False);
Else;
Event Player.buckshotHitPos[4] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[0]) * 100, All Living Players(
All Teams), Event Player, False);
Event Player.buckshotHitPlayer[4] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[0]) * 100, All Living Players(
All Teams), Event Player, False);
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[5] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori * -1) * 100, All Living Players(All Teams),
Event Player, False);
Event Player.buckshotHitPlayer[5] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori * -1) * 100, All Living Players(All Teams),
Event Player, False);
Else;
Event Player.buckshotHitPos[5] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[1] * -1) * 100, All Living Players(
All Teams), Event Player, False);
Event Player.buckshotHitPlayer[5] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[1] * -1) * 100, All Living Players(
All Teams), Event Player, False);
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[6] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
Event Player, False);
Event Player.buckshotHitPlayer[6] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
Event Player, False);
Else;
Event Player.buckshotHitPos[6] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[2]) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[6] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[2]) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
All Living Players(All Teams), Event Player, False);
End;
If(!Global.randomSpread);
Event Player.buckshotHitPos[7] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
Event Player, False);
Event Player.buckshotHitPlayer[7] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
Event Player, False);
Else;
Event Player.buckshotHitPos[7] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[3] * -1) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[7] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[3] * -1) * 100, 0, 0), Event Player, Rotation)
+ Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
All Living Players(All Teams), Event Player, False);
End;
Event Player.buckshotCenter = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 100, Event Player.livingEnemies, Event Player, True);
Event Player.buckshotHitPos[0] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPos[1] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) - Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPos[2] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPos[3] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) - Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPos[4] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
False);
Event Player.buckshotHitPos[5] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) - Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
False);
Event Player.buckshotHitPos[6] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)) * 100, All Living Players(All Teams),
Event Player, False);
Event Player.buckshotHitPos[7] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)) * 100, All Living Players(All Teams),
Event Player, False);
Event Player.buckshotHitPlayer[0] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[1] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) - Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[2] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[3] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) - Global.spreadDiag) * 100,
All Living Players(All Teams), Event Player, False);
Event Player.buckshotHitPlayer[4] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
False);
Event Player.buckshotHitPlayer[5] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
Event Player), Vertical Facing Angle Of(Event Player) - Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
False);
Event Player.buckshotHitPlayer[6] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)) * 100, All Living Players(All Teams),
Event Player, False);
Event Player.buckshotHitPlayer[7] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
Vector(Tangent From Degrees(Global.spreadHori * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)) * 100, All Living Players(All Teams),
Event Player, False);
Play Effect(All Players(All Teams), Good Explosion, Green, Event Player.buckshotCenter, 0.200);
Create Beam Effect(All Players(All Teams), Bad Beam, Eye Position(Event Player) + Facing Direction Of(Event Player)
+ Event Player.gunPos_0, Event Player.buckshotCenter, Green, None);
Event Player.centerBeam = Last Created Entity;
Event Player.pellets = 0;
While(Event Player.pellets < 8);
Damage(Event Player.buckshotHitPlayer[Event Player.pellets], Event Player, 10000);
Play Effect(All Players(All Teams), Good Explosion, Green, Event Player.buckshotHitPos[Event Player.pellets], 0.200);
If(Global.buckshotDbg);
Destroy Effect(Event Player.bDbgEffects[Event Player.pellets]);
Destroy Effect(Event Player.bDbgBeam[Event Player.pellets]);
Create Effect(All Players(All Teams), Sphere, Green, Event Player.buckshotHitPos[Event Player.pellets], 0.250, None);
Event Player.bDbgEffects[Event Player.pellets] = Last Created Entity;
Create Beam Effect(All Players(All Teams), Bad Beam, Eye Position(Event Player), Event Player.buckshotHitPos[Event Player.pellets],
Green, None);
Event Player.bDbgBeam[Event Player.pellets] = Last Created Entity;
End;
Create Beam Effect(All Players(All Teams), Bad Beam, Eye Position(Event Player) + Facing Direction Of(Event Player)
+ Event Player.gunPos_0, Event Player.buckshotHitPos[Event Player.pellets], Green, None);
Event Player.buckshotBeam[Event Player.pellets] = Last Created Entity;
Event Player.pellets += 1;
End;
Wait(0.150, Ignore Condition);
Destroy Effect(Event Player.centerBeam);
Event Player.beams = 0;
While(Event Player.beams < 8);
Destroy Effect(Event Player.buckshotBeam[Event Player.beams]);
Event Player.beams += 1;
End;
}
}
disabled rule("---------------- Extra Life ----------------")
{
event
{
Ongoing - Global;
}
}
rule("[Buff] :: Extra Life : Create Orb")
{
event
{
Ongoing - Global;
}
conditions
{
(Global.validBuffMap && !Global.spawnWithLife && Global.spawnLife && Global.lifeCD == 0 && (
Global.matchStarted || Global.buffsSpawnImmediately)) == True;
}
actions
{
Global.canPickupLife = True;
Create Effect(All Players(All Teams), Orb, Sky Blue, Global.buffPos[3], 2, Visible To Position and Radius);
Global.buffEffect[3] = Last Created Entity;
Play Effect(All Players(All Teams), Good Pickup Effect, Sky Blue, Global.buffPos[3], 1);
Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Mercy), Button(Ability 2)), Global.buffPos[3], 2,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Global.buffIcon[3] = Last Text ID;
Destroy In-World Text(Global.cdText[3]);
}
}
rule("[Buff] :: Extra Life : Collect")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Global.matchStarted && !Event Player.extraLife && Global.canPickupLife && Distance Between(Global.buffPos[3], Event Player)
< 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || (Global.spawnWithLife && Is Alive(Event Player))) == True;
((Global.matchStarted && !Event Player.extraLife && Entity Exists(Global.buffEffect[3]) && Distance Between(Global.buffPos[3],
Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || (Global.spawnWithLife && Is Alive(
Event Player))) == True;
}
actions
{
Global.canPickupLife = False;
Event Player.extraLife = True;
Set Status(Event Player, Null, Unkillable, 10000);
If(!Global.spawnWithLife);
Destroy In-World Text(Global.cdText[3]);
Destroy In-World Text(Global.buffIcon[3]);
Destroy Effect(Global.buffEffect[3]);
Play Effect(All Players(All Teams), Good Pickup Effect, Sky Blue, Global.buffPos[3], 1);
Play Effect(All Players(All Teams), Buff Explosion Sound, Sky Blue, Global.buffPos[3], 200);
Small Message(Event Player, Custom String("Extra Life"));
Small Message(Event Player, Custom String("Extra life"));
Big Message(Event Player, Custom String("Extra Life"));
Call Subroutine(LifeCooldown);
End;
Create HUD Text(Event Player, Null, Null, Custom String("{0} Extra Life {0}", Ability Icon String(Hero(Mercy), Button(Ability 2))),
Right, 0.200, White, White, Sky Blue, Visible To and String, Default Visibility);
Top, 1, White, White, White, Visible To and String, Default Visibility);
Event Player.hudText[3] = Last Text ID;
Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Mercy), Button(Ability 2)), Event Player, 2,
Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Mercy), Button(Ability 2)), Event Player, 1,
Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
Event Player.extraLifeIcon = Last Text ID;
Create Effect(All Players(All Teams), Bad Aura, Sky Blue, Event Player, 0.750, Visible To Position and Radius);
Event Player.lifeBuffEffect = Last Created Entity;
}
}
rule("[Buff] :: Extra Life : Remove")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player.extraLife && (Health(Event Player) == 1 || Is Dead(Event Player))) == True;
(Event Player.extraLife && (Health(Event Player) == 1 || (Is Dead(Event Player) && !Global.spawnWithLife))) == True;
}
actions
{
Event Player.extraLife = False;
Clear Status(Event Player, Unkillable);
If(!Global.spawnWithLife);
Small Message(Event Player, Custom String("Extra life used"));
Play Effect(Event Player, Debuff Impact Sound, White, Event Player, 200);
End;
Small Message(Event Player, Custom String("Extra life used"));
Play Effect(Event Player, Debuff Impact Sound, White, Event Player, 200);
Destroy In-World Text(Event Player.extraLifeIcon);
Destroy Effect(Event Player.lifeBuffEffect);
Destroy HUD Text(Event Player.hudText[3]);
Wait(1, Ignore Condition);
Wait(0.500, Ignore Condition);
Set Player Health(Event Player, Max Health(Event Player));
}
}
rule("[Debug] :: Position")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player == Host Player;
}
actions
{
Create HUD Text(Event Player, Null, Null, Position Of(Event Player), Top, 10, White, White, White, Visible To and String,
Default Visibility);
}
}
rule("[Debug] :: Bots")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player == Host Player && Is Button Held(Event Player, Interact) && !Is Button Held(Event Player, Crouch)) == True;
}
actions
{
Create Dummy Bot(Hero Of(Event Player), Opposite Team Of(Team Of(Event Player)), -1, Ray Cast Hit Position(Eye Position(
Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 100, Null, Event Player, True),
Facing Direction Of(Event Player) * -1);
}
}
rule("[Debug] :: Destroy Bots")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(Event Player == Host Player && Is Button Held(Event Player, Crouch) && Is Button Held(Event Player, Interact)) == True;
}
actions
{
Destroy All Dummy Bots;
}
}