Return to post
settings
{
main
{
Description: "24 Hogs One Hole. Workshop Maps only; includes settings for dynamic hole size and position. By Puppetsquid. Based on 12 Pigs One Hole by Scrumrot and Block#12425. Code: K6KFM"
}
lobby
{
Allow Players Who Are In Queue: Yes
Match Voice Chat: Enabled
Max Spectators: 12
Return To Lobby: Never
}
modes
{
Deathmatch
{
enabled maps
{
Workshop Chamber
Workshop Island
Workshop Island Night
}
}
General
{
Allow Hero Switching: Off
Game Mode Start: Immediately
Hero Limit: Off
Respawn As Random Hero: On
Respawn Time Scalar: 1%
Score To Win: 100
Self Initiated Respawn: Off
Spawn Health Packs: Disabled
}
}
heroes
{
General
{
Roadhog
{
Chain Hook Cooldown Time: 25%
Healing Dealt: 10%
Jump Vertical Speed: 200%
Movement Gravity: 130%
Movement Speed: 140%
Primary Fire: Off
Secondary Fire: Off
Take a Breather Cooldown Time: 50%
Ultimate Generation - Combat Whole Hog: 0%
Ultimate Generation - Passive Whole Hog: 0%
Ultimate Generation Whole Hog: 50%
Whole Hog Knockback Scalar: 0%
}
enabled heroes
{
Roadhog
}
}
}
workshop
{
Auto Restart After POTG: On
}
extensions
{
Kinetic Explosion Effects
Play More Effects
Spawn More Dummy Bots
}
}
variables
{
global:
0: init
1: tinyModeUnused
6: fakeHoleWidth
7: fakeHolePos
8: It
9: holeTargetLoc
10: speed
11: holeTargetWidth
12: customSpawnpoints
13: customNames
14: minHoleWidth
15: maxHoleWidth
16: holeInit
17: maxAI
25: QuickRestart
30: CloudSize
31: MaxKillStealChainTimer
34: CurrentUltSize
37: TopPlayerScore
38: TopPlayer
player:
21: hoggOffset
22: hoogLR
23: pigPos
24: pigTarget
25: hasdied
26: InitPlayer
29: ultReadyEffectId1
30: ultReadyEffectId2
31: HudIdAbility2
32: HookCount
33: KillStealChainTimer
34: TextIdHookCount
35: bonusAuraId1
39: overLooking
44: prepKillSteal
45: triggerKillStealChain
46: HUDPlayerKillBonusId
47: KeepSummerSafe
52: MeleeHudId
}
rule("Define Hole and Spawns")
{
event
{
Ongoing - Global;
}
actions
{
Global.maxAI = Workshop Setting Integer(Custom String("Game Settings"), Custom String("Max AI"), 12, 0, 12, 0);
Wait(0.250, Ignore Condition);
Global.customSpawnpoints = Empty Array;
For Global Variable(It, 0, 1, 0.010);
Create Effect(All Players(All Teams), Ring, Color(Black), Global.fakeHolePos, (0.500 + Global.fakeHoleWidth) * Evaluate Once(
Global.It), Visible To Position and Radius);
Wait(0.016, Ignore Condition);
End;
Create Effect(All Players(All Teams), Light Shaft, Color(Black), Global.fakeHolePos + Vector(0, -10, 0),
Global.fakeHoleWidth + 0.500, Visible To Position and Radius);
For Global Variable(It, -14, 14, 4);
Modify Global Variable(customSpawnpoints, Append To Array, Vector(Global.It, 0, 18));
Modify Global Variable(customSpawnpoints, Append To Array, Vector(Global.It, 0, -18));
Modify Global Variable(customSpawnpoints, Append To Array, Vector(18, 0, Global.It));
Modify Global Variable(customSpawnpoints, Append To Array, Vector(-18, 0, Global.It));
End;
If(Global.maxAI > 0);
For Global Variable(It, 0, 12 + Global.maxAI, 1);
Create Dummy Bot(Hero(Roadhog), All Teams, -1, Last Of(Filtered Array(Global.customSpawnpoints, Distance Between(
Current Array Element, Closest Player To(Current Array Element, All Teams)))), Vector(0, 0, 0));
Wait(0.100, Ignore Condition);
End;
For Global Variable(It, 0, 12, 1);
Destroy Dummy Bot(All Teams, Global.It);
End;
End;
Global.init = True;
}
}
rule("CustomSpawning")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Alive(Event Player) == True;
Has Spawned(Event Player) == True;
Count Of(Global.customSpawnpoints) > 20;
}
actions
{
Teleport(Event Player, Last Of(Filtered Array(Sorted Array(Global.customSpawnpoints, Distance Between(Current Array Element,
Closest Player To(Current Array Element, All Teams))), Distance Between(Current Array Element, Global.fakeHolePos)
> Global.fakeHoleWidth + 4)));
Wait Until(Is On Ground(Event Player), 99999);
While(Distance Between(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Vector(0, 1, 0))) > 1);
Set Facing(Event Player, Direction Towards(Event Player, Vector(0, 1, 0)), To World);
Wait(0.100, Ignore Condition);
End;
}
}
rule("Player init")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.InitPlayer != True;
Global.init == True;
}
actions
{
Event Player.HookCount = 1;
Event Player.InitPlayer = True;
If(Global.tinyModeUnused);
Start Scaling Player(Event Player, 0.500, True);
End;
}
}
rule("Outlines")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
Start Forcing Player Outlines(Filtered Array(All Players(All Teams), Is Dummy Bot(Current Array Element)), All Players(All Teams),
True, Color(Black), Default);
}
}
rule("Out of bounds")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Using Ultimate(Event Player) != True;
(16 < Max(Absolute Value(X Component Of(Position Of(Event Player))), Absolute Value(Z Component Of(Position Of(Event Player)))))
== True;
}
actions
{
Wait(0.016, Ignore Condition);
Skip If(Event Player.hasdied, 1);
Set Status(Event Player, Null, Phased Out, 9999);
Set Ability 1 Enabled(Event Player, False);
Cancel Primary Action(Event Player);
Event Player.hasdied = True;
}
}
rule("In of bounds")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
(16 < Max(Absolute Value(X Component Of(Position Of(Event Player))), Absolute Value(Z Component Of(Position Of(Event Player)))))
== False;
}
actions
{
Clear Status(Event Player, Phased Out);
Set Ability 1 Enabled(Event Player, True);
}
}
disabled rule("============== Custom Hole ==============")
{
event
{
Ongoing - Global;
}
}
rule("Setup Hole")
{
event
{
Ongoing - Global;
}
actions
{
Global.fakeHolePos = Vector(0, 0, 0);
Global.fakeHoleWidth = 0;
Global.holeTargetWidth = Workshop Setting Integer(Custom String("Game Settings"), Custom String("Default Hole Width"), 7, 3, 12,
0);
If(Global.tinyModeUnused);
Global.holeTargetWidth = 3.500;
End;
Wait(5, Ignore Condition);
Global.holeTargetLoc = Vector(0, 0.200, 0);
Global.minHoleWidth = Workshop Setting Integer(Custom String("Dynamic Settings"), Custom String("Min Hole Width"), 3, 2, 5, 0);
Global.maxHoleWidth = Workshop Setting Integer(Custom String("Dynamic Settings"), Custom String("Max Hole Width"), 10, 5, 12, 0);
Global.holeInit = True;
}
}
rule("Change Hole Pos / Size Target")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Global.init == True;
Workshop Setting Toggle(Custom String("Game Settings"), Custom String("Dynamic Hole"), False, 0) == True;
}
actions
{
Wait(Random Real(1, 10), Ignore Condition);
Global.holeTargetLoc = Vector(Random Real(-10, 10), 0, Random Real(-10, 10));
Global.speed = Random Integer(0, 6) * 0.500;
Global.holeTargetWidth = (Random Integer(Global.minHoleWidth, Global.maxHoleWidth) + Random Integer(Global.minHoleWidth,
Global.maxHoleWidth)) * 0.500;
Loop;
}
}
rule("Hole Pos Over Time")
{
event
{
Ongoing - Global;
}
conditions
{
disabled Global.fakeHolePos != Global.holeTargetLoc;
Global.holeInit == True;
(Global.fakeHoleWidth != Global.holeTargetWidth || Global.fakeHolePos != Global.holeTargetLoc) == True;
}
actions
{
Global.fakeHolePos = Global.fakeHolePos + Direction Towards(Global.fakeHolePos, Global.holeTargetLoc) * 0.010;
Global.fakeHoleWidth = Global.fakeHoleWidth + (Global.holeTargetWidth - Global.fakeHoleWidth) * 0.010;
Wait(0.020, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Make Hole Unsolid")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Global.fakeHolePos) < Global.fakeHoleWidth;
}
actions
{
Disable Movement Collision With Environment(Event Player, True);
}
}
rule("Make Floor Solid")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Global.fakeHolePos) > Global.fakeHoleWidth;
Y Component Of(Position Of(Event Player)) > -0.500;
}
actions
{
Enable Movement Collision With Environment(Event Player);
}
}
disabled rule("============== AI CODE ==============")
{
event
{
Ongoing - Global;
}
}
rule("AI Setup")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Event Player.pigTarget = Random Value In Array(Remove From Array(All Living Players(All Teams), Event Player));
}
}
rule("AI: Dir Input")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Event Player.pigPos = Vector(0, 0, 0);
Start Throttle In Direction(Event Player, Direction Towards(Event Player, Nearest Walkable Position(
Global.fakeHolePos + Direction From Angles(Horizontal Angle From Direction(Direction Towards(Global.fakeHolePos, Event Player))
+ Event Player.hoogLR, 0) * Max(Global.fakeHoleWidth + 2, Event Player.hoggOffset))), 1, To World, Replace existing throttle,
Direction and Magnitude);
}
}
rule("AI: Set Random Directions")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Event Player.hoggOffset = Random Real(3, Global.fakeHoleWidth * 0.500 + 15);
Wait(Random Integer(0.500, 2), Ignore Condition);
Event Player.hoogLR = Random Integer(-5, 5);
Wait(Random Integer(1, 2.500), Ignore Condition);
Loop;
}
}
rule("AI: Do Hook")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Is Alive(Event Player) == True;
Ability Cooldown(Event Player, Button(Ability 1)) == 0;
Distance Between(Event Player, Event Player.pigTarget) < 20;
Distance Between(Event Player, Global.fakeHolePos) < Global.fakeHoleWidth + 3;
}
actions
{
Wait(Random Real(0.500, 2), Ignore Condition);
Press Button(Event Player, Button(Ability 1));
Wait(Random Real(0.500, 2), Ignore Condition);
Loop If Condition Is True;
}
}
rule("AI: Hook Flick")
{
event
{
Player Dealt Damage;
All;
Roadhog;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Global.fakeHolePos), 150, To World,
Direction and Turn Rate);
}
}
rule("AI: Target On Cooldown")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Is On Ground(Event Player) == True;
Ability Cooldown(Event Player, Button(Ability 1)) == 0;
Has Status(Event Player, Phased Out) != True;
}
actions
{
Wait(Random Real(0.100, 2), Ignore Condition);
Event Player.pigTarget = Random Value In Array(Remove From Array(All Living Players(All Teams), Event Player));
Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.pigTarget)), 120, To World,
Direction and Turn Rate);
}
}
rule("AI: Target On Death")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Is Dead(Event Player.pigTarget) == True;
}
actions
{
Wait(Random Real(0.100, 2), Ignore Condition);
Event Player.pigTarget = Random Value In Array(Remove From Array(All Living Players(All Teams), Event Player));
Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.pigTarget)), 120, To World,
Direction and Turn Rate);
}
}
rule("AI: Do Breather")
{
event
{
Player Took Damage;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Wait Until(!Has Status(Event Player, Stunned), 2);
Abort If(Distance Between(Event Player, Global.fakeHolePos) > Global.fakeHoleWidth);
Wait(Random Real(0, 0.750), Ignore Condition);
Press Button(Event Player, Button(Ability 2));
}
}
rule("AI: Do Ult")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Y Component Of(Position Of(Event Player)) < -5;
Ultimate Charge Percent(Event Player) == 100;
}
actions
{
Wait(Random Real(0, 3), Ignore Condition);
Press Button(Event Player, Button(Ultimate));
}
}
rule("AI: Do Jump")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Horizontal Speed Of(Event Player) < 1;
}
actions
{
Press Button(Event Player, Button(Jump));
}
}
rule("AI: Followup")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Is Using Ability 1(Event Player) != True;
}
actions
{
Wait(Random Real(0, 2), Ignore Condition);
If(Random Real(0, 5) == 5);
Communicate(Event Player, Hello);
Else;
Press Button(Event Player, Button(Melee));
End;
}
}
rule("Setup Custom names")
{
event
{
Ongoing - Global;
}
actions
{
Global.customNames = Array(Custom String("Jasper"), Custom String("Clara"), Custom String("Lawrence"), Custom String("Clarence"),
Custom String("Claude"), Custom String("Grace"), Custom String("Alice"), Custom String("Cora"), Custom String("Amos"),
Custom String("Lillian"), Custom String("Emil"), Custom String("Pearl"), Custom String("Julius"), Custom String("Rose"),
Custom String("Edwin"), Custom String("Ada"), Custom String("Herbert"), Custom String("Nettie"), Custom String("Oscar"),
Custom String("Flora"), Custom String("Walter"), Custom String("Puppetsquid"), Custom String("Scumrot"), Custom String(
"Block"));
Modify Global Variable(customNames, Append To Array, Array(Custom String("K6KFM"), Custom String("38SY3")));
}
}
rule("Grant Name to Dummy")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Start Forcing Dummy Bot Name(Event Player, Random Value In Array(Global.customNames));
Modify Global Variable(customNames, Remove From Array By Value, Custom String("{0}", Event Player));
}
}
disabled rule("12 Hooks 1 Hole: When Pigs Fly! by Block#12425 & Scrumrot.")
{
event
{
Ongoing - Global;
}
}
disabled rule("============== Ultimate Rules ==============")
{
event
{
Ongoing - Global;
}
}
rule("Using Ultimate @ Block#12425")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Is Using Ultimate(Event Player) == True;
Event Player.InitPlayer == True;
}
actions
{
Event Player.HookCount += 1;
Set Damage Dealt(Event Player, 0);
Apply Impulse(Event Player, Up, 13, To World, Cancel Contrary Motion);
Start Accelerating(Event Player, Up, 70, 10, To Player, Direction Rate and Max Speed);
Start Facing(Event Player, Vector(0, -1, 0), 400, To Player, Direction and Turn Rate);
Wait(0.600, Ignore Condition);
Set Status(Event Player, Null, Frozen, 0.100);
Stop Accelerating(Event Player);
Stop Facing(Event Player);
Set Damage Dealt(Event Player, 100);
Wait(1, Ignore Condition);
Event Player.KillStealChainTimer = Global.MaxKillStealChainTimer + 0;
Event Player.prepKillSteal = True;
Event Player.triggerKillStealChain = True;
}
}
rule("Stop on Stun Ultimate @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Has Status(Event Player, Stunned) == True;
}
actions
{
Wait(0.100, Ignore Condition);
Stop Accelerating(Event Player);
Stop Facing(Event Player);
Set Damage Dealt(Event Player, 100);
}
}
rule("Set Ultimate Charge to 100% on Kill @ Block#12425")
{
event
{
Player Dealt Final Blow;
All;
Roadhog;
}
conditions
{
Event Player.InitPlayer == True;
}
actions
{
Set Ultimate Charge(Event Player, 100);
}
}
disabled rule("============== Player In Game Effects ==============")
{
event
{
Ongoing - Global;
}
}
rule("Show Ult Ready @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Ultimate Charge Percent(Event Player) == 100;
Event Player.InitPlayer == True;
}
actions
{
Create Effect(All Players(All Teams), Good Aura, Color(Orange), Event Player, Global.CurrentUltSize - 0.100,
Visible To Position and Radius);
Event Player.ultReadyEffectId1 = Last Created Entity;
Create Effect(All Players(All Teams), Good Aura, Color(Red), Event Player, Global.CurrentUltSize, Visible To Position and Radius);
Event Player.ultReadyEffectId2 = Last Created Entity;
}
}
rule("Remove Ult Ready @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Ultimate Charge Percent(Event Player) < 100;
Event Player.InitPlayer == True;
}
actions
{
Destroy Effect(Event Player.ultReadyEffectId1);
Event Player.ultReadyEffectId1 = Null;
Destroy Effect(Event Player.ultReadyEffectId2);
Event Player.ultReadyEffectId2 = Null;
Event Player.prepKillSteal = True;
}
}
disabled rule("============== Gas Powered Stick Rules ==============")
{
event
{
Ongoing - Global;
}
}
rule("Gas Powered Stick! @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Is Using Ability 2(Event Player) == True;
Event Player.InitPlayer == True;
}
actions
{
Apply Impulse(Event Player, Up, 8.800, To World, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Explosion Sound, Color(White), Event Player, 50);
Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Position Of(Event Player) + Vector(0, 0.500, -0.100),
Global.CloudSize);
Wait(0.050, Ignore Condition);
Play Effect(All Players(All Teams), Good Explosion, Color(Orange), Position Of(Event Player) + Vector(0, 0.500, -0.100),
Global.CloudSize);
Wait(0.050, Ignore Condition);
Play Effect(All Players(All Teams), Bad Explosion, Color(Yellow), Position Of(Event Player) + Vector(0, 0.500, -0.100),
Global.CloudSize);
}
}
disabled rule("============== Kill Steal Rules ==============")
{
event
{
Ongoing - Global;
}
}
rule("If Player Took Damage && !prepKillSteal => prepKillSteal = true @ Scrumrot")
{
event
{
Player Took Damage;
All;
Roadhog;
}
conditions
{
Event Player.InitPlayer == True;
Is Alive(Event Player) == True;
Event Player.prepKillSteal == False;
Distance Between(Vector(X Component Of(Global.fakeHolePos), 0, Z Component Of(Global.fakeHolePos)), Vector(X Component Of(
Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player)))) <= 20;
Is Using Ability 1(Attacker) == True;
}
actions
{
Event Player.prepKillSteal = True;
Heal(Event Player, Null, Event Damage);
}
}
rule("HookCount Timer @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.KillStealChainTimer > 0;
Event Player.InitPlayer == True;
}
actions
{
Wait(1, Ignore Condition);
Event Player.KillStealChainTimer = Max(Event Player.KillStealChainTimer - 1, 0);
Loop If Condition Is True;
}
}
rule("HookCount Icon @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.HookCount > 1;
Event Player.InitPlayer == True;
}
actions
{
Create In-World Text(All Players(All Teams), Custom String("{0}x{1}", Icon String(Skull), Event Player.HookCount), Position Of(
Event Player) + Vector(0, 2, 0), 1.750, Clip Against Surfaces, Visible To Position and String, Color(Green),
Default Visibility);
Event Player.TextIdHookCount = Last Text ID;
Create Effect(All Players(All Teams), Bad Aura, Color(Green), Event Player, Global.CurrentUltSize, Visible To Position and Radius);
Event Player.bonusAuraId1 = Last Created Entity;
}
}
rule("On KillStealChainTimer <= 1 : Destroy HookCount Icon @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.KillStealChainTimer <= 1;
Event Player.InitPlayer == True;
}
actions
{
Wait(0.050, Abort When False);
Destroy In-World Text(Event Player.TextIdHookCount);
Event Player.TextIdHookCount = Null;
Destroy Effect(Event Player.bonusAuraId1);
Event Player.bonusAuraId1 = Null;
Event Player.HookCount = 1;
Event Player.triggerKillStealChain = False;
Event Player.prepKillSteal = False;
}
}
rule("If prepKillSteal == true && player is within TheWellPosition || using their ult: Reset KillStealChainTimer @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.prepKillSteal == True;
(Distance Between(Vector(X Component Of(Global.fakeHolePos), 0, Z Component Of(Global.fakeHolePos)), Vector(X Component Of(
Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player)))) <= Global.fakeHoleWidth || Is Using Ultimate(
Event Player)) == True;
}
actions
{
Skip If(Event Player.triggerKillStealChain == True, 1);
Wait(0.016, Ignore Condition);
Event Player.triggerKillStealChain = True;
Event Player.KillStealChainTimer = Global.MaxKillStealChainTimer;
Wait(1, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Add to Hook Count @ Scrumrot")
{
event
{
Player Took Damage;
All;
Roadhog;
}
conditions
{
Event Player.InitPlayer == True;
Is Alive(Event Player) == True;
Event Player.triggerKillStealChain == True;
Is Using Ability 1(Attacker) == True;
}
actions
{
Wait(0.016, Ignore Condition);
Event Player.HookCount += 1;
Heal(Event Player, Null, Event Damage);
}
}
disabled rule("============== Top Score ==============")
{
event
{
Ongoing - Global;
}
}
rule("Set Top Player @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Score Of(Event Player) > Global.TopPlayerScore;
Score Of(Event Player) > 1;
Event Player.InitPlayer == True;
}
actions
{
Wait(0.100, Ignore Condition);
Global.TopPlayerScore = Score Of(Event Player);
Global.TopPlayer = Event Player;
}
}
disabled rule("============== Melee ==============")
{
event
{
Player Dealt Damage;
All;
All;
}
}
rule("Make Melee push the Victim @ Block#12425 && Scrumrot")
{
event
{
Player Dealt Damage;
All;
All;
}
conditions
{
Is Using Ability 1(Event Player) == False;
}
actions
{
Apply Impulse(Victim, Direction From Angles(Horizontal Facing Angle Of(Event Player), -1), 19, To World, Cancel Contrary Motion);
Skip If(Victim.triggerKillStealChain == False, 1);
Victim.HookCount += 1;
Heal(Victim, Null, Event Damage);
}
}
disabled rule("============== Player Hud ==============")
{
event
{
Ongoing - Global;
}
}
rule("HUD: Ability 2 @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.InitPlayer == True;
Event Player.HudIdAbility2 == False;
}
actions
{
Create HUD Text(Event Player, Custom String("{0} Gas Powered Stick! {1}", Icon String(Radioactive), Hero Icon String(Hero(
Roadhog))), Custom String("USE ~TAKE A BREATHER~ (ABILITY 2)", Icon String(Asterisk)), Custom String("AIR JUMP UP {0}",
Icon String(Arrow: Up)), Left, 0, Color(Orange), Color(Red), Color(Yellow), Visible To and String, Default Visibility);
Event Player.HudIdAbility2 = Last Text ID;
}
}
rule("HUD: Melee @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.InitPlayer == True;
Event Player.MeleeHudId == False;
}
actions
{
Create HUD Text(Event Player, Custom String("{0} Shove {1}", Icon String(Happy), Hero Icon String(Hero(Roadhog))), Custom String(
"USE MELEE TO", Icon String(Asterisk)), Custom String("{0} KNOCKBACK TARGET", Icon String(Arrow: Right)), Left, 1, Color(
Orange), Color(Red), Color(Yellow), Visible To and String, Default Visibility);
Event Player.MeleeHudId = Last Text ID;
}
}
rule("HUD: Kill Bonus @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.InitPlayer == True;
(Has Status(Event Player, Phased Out) && Event Player.overLooking) == False;
Event Player.HUDPlayerKillBonusId == False;
Event Player.KeepSummerSafe == False;
}
actions
{
Create HUD Text(Event Player, Custom String("{0} X {1}", Icon String(Skull), Event Player.HookCount), Null, Null, Top, 0, Color(
Green), Color(Green), Color(Green), Visible To and String, Default Visibility);
Event Player.HUDPlayerKillBonusId = Last Text ID;
}
}
rule("HUD: Remove Kill Bonus @ Scrumrot")
{
event
{
Ongoing - Each Player;
All;
Roadhog;
}
conditions
{
Event Player.HUDPlayerKillBonusId == True;
Event Player.KeepSummerSafe == True;
}
actions
{
Destroy HUD Text(Event Player.HUDPlayerKillBonusId);
Event Player.HUDPlayerKillBonusId = Null;
}
}
disabled rule("============== On Death Rules ==============")
{
event
{
Ongoing - Global;
}
}
rule("OnDeath: Reset HookCount @ Scrumrot")
{
event
{
Player Died;
All;
Roadhog;
}
actions
{
Skip If(Attacker == Event Player, 3);
Skip If(Event Player.HookCount <= 1, 2);
Set Player Score(Attacker, Score Of(Attacker) + Max(Event Player.HookCount - 1, 0));
Big Message(Attacker, Custom String("{0} Kill Steal Bonus {1}! {0} ", Icon String(Skull), Event Player.HookCount));
Wait(0.050, Ignore Condition);
Event Player.HookCount = 0;
Event Player.KillStealChainTimer = 0;
Destroy In-World Text(Event Player.TextIdHookCount);
Event Player.TextIdHookCount = Null;
Event Player.prepKillSteal = False;
Event Player.prepKillSteal = False;
Play Effect(All Players(All Teams), Bad Pickup Effect, Color(Orange), Event Player, 8);
Wait(0.100, Ignore Condition);
Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 4);
Wait(0.016, Ignore Condition);
Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Orange), Event Player, 40);
}
}
rule("OnDeath: Reset Saftey")
{
event
{
Player Died;
All;
All;
}
actions
{
Event Player.hasdied = False;
Respawn(Event Player);
}
}
rule("Rule 100")
{
event
{
Ongoing - Global;
}
conditions
{
Is Match Complete == True;
}
actions
{
Wait(22, Ignore Condition);
Restart Match;
}
}
rule("resetsettings")
{
event
{
Ongoing - Global;
}
actions
{
Global.QuickRestart = Workshop Setting Toggle(Custom String("LOBBY SETTINGS"), Custom String("Auto Restart After POTG"), False, 0);
}
}
rule("Disable Inspector")
{
event
{
Ongoing - Global;
}
actions
{
Disable Inspector Recording;
}
}