Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "lucioball neo 0.8.6 by @nakamoooooo *マップを夜モードに変更 *ジャンプパッドに関するスクリプトを削減 *ボールを飛ばすエフェクトの色味を調整 *ボールを飛ばした時にダメージ音追加 *The map is now night mode. *Scripts are redused, that work for jumppads. *Color of effect fix *Now damage sound is played on hitting the ball."
  • Description: "(AYKSC)lucioball neo 0.8.7 by @nakamoooooo *ゲンジの手裏剣の拡散を12度から9度に変更 *モイラのオーブのクールタイムを70%(7秒)に変更、効果が残る時間も同様 *マーシーのshiftにクールタイムが表示されるよう変更*ラインハルトが盾を構えて後ろに進む速度を0.125に変更"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Max Spectators: 12
  • Max Team 1 Players: 5
  • Max Team 2 Players: 5
  • }
  • modes
  • {
  • Team Deathmatch
  • {
  • enabled maps
  • {
  • Workshop Expanse Night
  • }
  • }
  • General
  • {
  • Game Length In Minutes: 5
  • Game Mode Start: Manual
  • Hero Limit: Off
  • Respawn Time Scalar: 80%
  • Score To Win: 7
  • Self Initiated Respawn: Off
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Brigitte
  • {
  • Barrier Shield Cooldown Time: 0%
  • Barrier Shield Recharge Rate: 500%
  • Repair Pack: Off
  • Shield Bash Knockback Scalar: 25%
  • Whip Shot Knockback Scalar: 25%
  • }
  • Genji
  • {
  • Primary Fire: Off
  • Projectile Speed: 500%
  • Quick Melee: Off
  • Ultimate Ability Dragonblade: Off
  • }
  • Hanzo
  • {
  • Quick Melee: Off
  • Sonic Arrow Cooldown Time: 55%
  • Storm Arrows: Off
  • Ultimate Ability Dragonstrike: Off
  • }
  • Lúcio
  • {
  • Crossfade: Off
  • Primary Fire: Off
  • Quick Melee: Off
  • Soundwave Cooldown Time: 75%
  • Soundwave Knockback Scalar: 0%
  • }
  • Mei
  • {
  • Cryo-Freeze Cooldown Time: 0%
  • Ice Wall Cooldown Time: 54%
  • No Ammunition Requirement: On
  • Quick Melee: Off
  • Weapon Freeze Duration Scalar: 20%
  • Weapon Freeze Rate Scalar: 0%
  • }
  • Mercy
  • {
  • Guardian Angel: Off
  • Primary Fire: Off
  • Quick Melee: Off
  • Resurrect: Off
  • Secondary Fire: Off
  • Ultimate Ability Valkyrie: Off
  • Weapons Enabled: Caduceus Staff Only
  • }
  • Moira
  • {
  • Biotic Energy Maximum: 500%
  • Biotic Energy Recharge Rate: 500%
  • Biotic Orb Cooldown Time: 70%
  • Damage Dealt: 10%
  • Projectile Speed: 0%
  • Quick Melee: Off
  • }
  • Reinhardt
  • {
  • Charge Cooldown Time: 55%
  • Charge Knockback Scalar: 0%
  • Rocket Hammer Knockback Scalar: 0%
  • }
  • Sigma
  • {
  • Accretion: Off
  • Accretion Knockback Scalar: 0%
  • Kinetic Grasp Cooldown Time: 60%
  • Primary Fire: Off
  • Projectile Gravity: 0%
  • Quick Melee: Off
  • Ultimate Ability Gravitic Flux: Off
  • }
  • Tracer
  • {
  • Ammunition Clip Size Scalar: 105%
  • Quick Melee: Off
  • Recall Cooldown Time: 120%
  • Ultimate Ability Pulse Bomb: Off
  • }
  • Widowmaker
  • {
  • Damage Dealt: 10%
  • Grappling Hook Cooldown Time: 35%
  • No Ammunition Requirement: On
  • No Automatic Fire: On
  • Quick Melee: Off
  • Ultimate Ability Infra-Sight: Off
  • Venom Mine: Off
  • }
  • Wrecking Ball
  • {
  • Roll Always Active: On
  • }
  • enabled heroes
  • {
  • Genji
  • Hanzo
  • Lúcio
  • Mei
  • Mercy
  • Moira
  • Reinhardt
  • Sigma
  • Tracer
  • Widowmaker
  • }
  • }
  • }
  • }
  • variables
  • {
  • global:
  • 0: theBall
  • 1: area_radius
  • 2: center_goal_distance
  • 3: floor_goal_height
  • 4: I_goalEffectCreation
  • 5: canGoal
  • 6: Moira_orb_range
  • 7: center_sidewall_distance
  • 8: goal_half_length
  • 9: pos_jump_pad
  • 10: radius_jump_pad
  • 11: radius_mei_frost
  • 12: I_goalKillSlot
  • 13: genji_secondary_gap_degrees
  • 14: sigma_primary_explode_radius
  • 15: tracer_max_primary_force
  • 16: Recaller
  • 17: isBallRecalling
  • 18: mercy_beam_natural_length
  • 19: mercy_beam_maximum_length
  • 20: hanzo_min_spd
  • 21: hanzo_max_spd
  • 22: hanzo_bomb_radius
  • 23: Xlength_center_goalJumpPad
  • player:
  • 0: ball_previous_pos
  • 1: ball_ray_hit_pos
  • 2: ball_ray_hit_normal
  • 3: ball_current_pos
  • 4: moira_canShotOrb
  • 5: moira_orbPos
  • 6: moira_orbBirthTime
  • 7: moira_orbIsHeal
  • 8: moira_orbEffect
  • 9: step_in_jumppad
  • 10: mei_frost_positions
  • 11: mei_frost_limit_times
  • 12: rein_isSwingOdd
  • 13: widow_charge_percent
  • 14: widow_isCharging
  • 15: widow_isSeeingScope
  • 16: widow_charge_percent_shot
  • 17: widow_txt_percent_shot
  • 18: widow_txt_percent_current
  • 19: genjiS_arg_axis_direction
  • 20: genjiS_arg_theta_degree
  • 21: genjiS_ret_direction
  • 22: genji_I_secondary
  • 23: sigma_pos_primary
  • 24: sigma_spd_primary
  • 27: sigma_effect_primary
  • 28: sigma_I_primary
  • 29: sigma_primary_fired_time
  • 30: Tracer_primary_force
  • 31: Tracer_ball_distance
  • 32: mercy_beam_effect
  • 33: mercy_ball_distance
  • 34: Is_mercy_primary_looping
  • 35: mercy_self_move_direction
  • 36: mercy_ball_primary_speed
  • 37: is_hanzo_charging
  • 38: hanzo_spd_primary
  • 39: hanzo_velocity_primary
  • 40: hanzo_pos_arrow
  • 41: effect_hanzo_bomb
  • 42: hanzo_using_ability1
  • 43: hanzo_arrow_has_bomb
  • 44: hanzoS_arrow_travel_is_looping
  • 45: hanzo_bomb_is_bonded_to_ball
  • 46: hanzo_pos_bomb
  • 47: mercy_ability1_target_player
  • }
  • subroutines
  • {
  • 0: stopTheBall
  • 1: BallPowerEffect
  • 2: teleportToFirstPos
  • 3: genjiS_getSideShurikenDirection
  • 4: hanzoS_arrow_trabel
  • 5: hanzoS_arrow_hit
  • 6: hanzoS_bomb
  • }
  • rule("Display server performance characteristics")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create HUD Text(All Players(All Teams), String("{0}: {1}", String("Server Load"), String("{0}%", Server Load)), Null, Null, Left,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), String("{0}: {1}", String("Server Load Average"), String("{0}%", Server Load Average)),
  • Null, Null, Left, 1, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), String("{0}: {1}", String("Server Load Peak"), String("{0}%", Server Load Peak)), Null,
  • Null, Left, 2, White, White, White, Visible To and String, Default Visibility);
  • }
  • }
  • rule("create ball")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Wrecking Ball), Team 1, 5, Vector(0, 0, 0), Vector(0, 0, 0));
  • Global.theBall = Last Created Entity;
  • Set Status(Global.theBall, Null, Unkillable, 9999);
  • disabled Set Status(Global.theBall, Null, Phased Out, 9999);
  • Start Camera(Global.theBall, Vector(0, 10, 5), Position Of(Global.theBall), 15);
  • Create Icon(All Players(All Teams), Position Of(Global.theBall), Circle, Visible To and Position, Purple, True);
  • Create Effect(All Players(All Teams), Light Shaft, White, Vector(X Component Of(Position Of(Global.theBall)), 0, Z Component Of(
  • Position Of(Global.theBall))), 0.200, Visible To Position and Radius);
  • "sideway ball accel"
  • Start Accelerating(Global.theBall, Vector(0, 0, 1 - 2 * (Z Component Of(Position Of(Global.theBall)) > 0)), 100 * (Absolute Value(
  • Z Component Of(Position Of(Global.theBall))) > Global.center_sidewall_distance), 20, To World, Direction Rate and Max Speed);
  • }
  • }
  • rule("Hanzo settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("Mei settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Event Player.mei_frost_positions = Empty Array;
  • Event Player.mei_frost_limit_times = Empty Array;
  • }
  • }
  • rule("Mercy settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mercy;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("Lucio settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Lúcio;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("Sigma settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sigma;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("Moira settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Event Player.moira_canShotOrb = True;
  • }
  • }
  • rule("Rein settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("Widow settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Widowmaker;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Create In-World Text(Filtered Array(Append To Array(Empty Array, Event Player), Event Player.widow_isCharging), String("{0}%",
  • Round To Integer(Event Player.widow_charge_percent, To Nearest)), Eye Position(Event Player) Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), 6.100 Vertical Facing Angle Of(Event Player)), 1.750, Do Not Clip,
  • Round To Integer(Event Player.widow_charge_percent, To Nearest)), Eye Position(Event Player) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), 6.100 + Vertical Facing Angle Of(Event Player)), 1.750, Do Not Clip,
  • Visible To Position and String, White, Default Visibility);
  • Modify Player Variable(Event Player, widow_txt_percent_current, Append To Array, Last Text ID);
  • }
  • }
  • rule("Genji settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("tracer settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Tracer;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("set up time shorten")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • }
  • actions
  • {
  • Set Match Time(7);
  • }
  • }
  • rule("pos loop")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ball_current_pos = Position Of(Event Player) Vector(0, 0.500, 0);
  • Event Player.ball_current_pos = Position Of(Event Player) + Vector(0, 0.500, 0);
  • If(Event Player.ball_previous_pos != Null);
  • Event Player.ball_ray_hit_pos = Ray Cast Hit Position(Event Player.ball_previous_pos, Event Player.ball_current_pos, All Players(
  • All Teams), Event Player, True);
  • If(Event Player.ball_ray_hit_pos != Event Player.ball_current_pos);
  • If(Has Status(Event Player, Burning) == False);
  • Set Status(Event Player, Null, Burning, 0.300);
  • Event Player.ball_ray_hit_normal = Ray Cast Hit Normal(Event Player.ball_previous_pos, Event Player.ball_current_pos, All Players(
  • All Teams), Event Player, True);
  • Apply Impulse(Event Player, Event Player.ball_ray_hit_normal, 1 * Speed Of In Direction(Event Player,
  • -1 * Event Player.ball_ray_hit_normal), To World, Cancel Contrary Motion);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Event Player, 1);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, White, Position Of(Global.theBall), 70);
  • End;
  • End;
  • End;
  • Event Player.ball_previous_pos = Event Player.ball_current_pos;
  • Wait(0.016, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("lucio boop poke")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Lúcio;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • If(Is In View Angle(Event Player, Eye Position(Global.theBall), 80) == True);
  • disabled Small Message(Event Player, Custom String("angle OK"));
  • If(Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 6);
  • disabled Small Message(Event Player, Custom String("distance OK"));
  • If(Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS) == True);
  • disabled Small Message(Event Player, Custom String("LOS OK"));
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
  • Event Player)), 18, To World, Cancel Contrary Motion);
  • Start Rule(BallPowerEffect, Restart Rule);
  • End;
  • End;
  • End;
  • }
  • }
  • rule("area limit power")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), Vector(0, 0.500, 0)), 100 * (Distance Between(
  • Position Of(Event Player), Vector(0, 0, 0)) > Global.area_radius), 20, To World, Direction Rate and Max Speed);
  • }
  • }
  • rule("init var,mode setting")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.area_radius = 30;
  • Global.center_goal_distance = 28;
  • Global.Xlength_center_goalJumpPad = 24;
  • Global.floor_goal_height = 4;
  • Global.canGoal = True;
  • Disable Built-In Game Mode Scoring;
  • Global.Moira_orb_range = 6;
  • Global.center_sidewall_distance = 22;
  • Global.goal_half_length = Square Root(
  • Global.area_radius * Global.area_radius - Global.center_goal_distance * Global.center_goal_distance);
  • Global.pos_jump_pad = Vector(12.500, 0, 9);
  • Global.radius_jump_pad = 3.300;
  • Global.radius_mei_frost = 2;
  • Global.genji_secondary_gap_degrees[0] = -6;
  • Global.genji_secondary_gap_degrees[0] = -4.500;
  • Global.genji_secondary_gap_degrees[1] = 0;
  • Global.genji_secondary_gap_degrees[2] = 6;
  • Global.genji_secondary_gap_degrees[2] = 4.500;
  • Global.sigma_primary_explode_radius = 5;
  • Global.tracer_max_primary_force = 4;
  • Global.mercy_beam_natural_length = 10;
  • Global.mercy_beam_maximum_length = 20;
  • Global.hanzo_min_spd = 25;
  • Global.hanzo_max_spd = 110;
  • Global.hanzo_bomb_radius = 5;
  • }
  • }
  • rule("effects")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Sphere, Orange, Vector(0, 0, 0), Global.area_radius, Visible To Position and Radius);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(-1 * Global.area_radius, 2, 1 * Global.center_sidewall_distance),
  • Vector(1 * Global.area_radius, 2, 1 * Global.center_sidewall_distance), Orange, Visible To);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(-1 * Global.area_radius, 2, -1 * Global.center_sidewall_distance),
  • Vector(1 * Global.area_radius, 2, -1 * Global.center_sidewall_distance), Orange, Visible To);
  • For Global Variable(I_goalEffectCreation, 0, 10, 1);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) Vector(-1 * Global.center_goal_distance,
  • 0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) Vector(-1 * Global.center_goal_distance,
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) + Vector(-1 * Global.center_goal_distance,
  • 0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) + Vector(-1 * Global.center_goal_distance,
  • 0.500 * Global.I_goalEffectCreation, -10), Team 1, Visible To);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) Vector(1 * Global.center_goal_distance,
  • 0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) Vector(1 * Global.center_goal_distance,
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) + Vector(1 * Global.center_goal_distance,
  • 0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) + Vector(1 * Global.center_goal_distance,
  • 0.500 * Global.I_goalEffectCreation, -10), Team 2, Visible To);
  • End;
  • "jump pads"
  • Create Effect(All Players(All Teams), Ring, Purple, Global.pos_jump_pad, Global.radius_jump_pad, Visible To);
  • Create Effect(All Players(All Teams), Ring, Purple, -1 * Global.pos_jump_pad, Global.radius_jump_pad, Visible To);
  • Create Effect(All Players(All Teams), Ring, Purple, Vector(-1 * X Component Of(Global.pos_jump_pad), 0, Z Component Of(
  • Global.pos_jump_pad)), Global.radius_jump_pad, Visible To);
  • Create Effect(All Players(All Teams), Ring, Purple, Vector(X Component Of(Global.pos_jump_pad), 0, -1 * Z Component Of(
  • Global.pos_jump_pad)), Global.radius_jump_pad, Visible To);
  • "edge of goal"
  • Create Effect(All Players(All Teams), Light Shaft, Team 1, Vector(-1 * Global.center_goal_distance, 0,
  • -1 * Global.goal_half_length), 0.500, Visible To);
  • Create Effect(All Players(All Teams), Light Shaft, Team 1, Vector(-1 * Global.center_goal_distance, 0,
  • 1 * Global.goal_half_length), 0.500, Visible To);
  • Create Effect(All Players(All Teams), Light Shaft, Team 2, Vector(1 * Global.center_goal_distance, 0,
  • -1 * Global.goal_half_length), 0.500, Visible To);
  • Create Effect(All Players(All Teams), Light Shaft, Team 2, Vector(1 * Global.center_goal_distance, 0, 1 * Global.goal_half_length),
  • 0.500, Visible To);
  • "center line"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.050, Global.area_radius), Vector(0, 0.050,
  • -1 * Global.area_radius), White, Visible To);
  • "goal jumppads"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(1 * Global.Xlength_center_goalJumpPad, 0.050, Global.area_radius),
  • Vector(1 * Global.Xlength_center_goalJumpPad, 0.050, -1 * Global.area_radius), Purple, Visible To);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(-1 * Global.Xlength_center_goalJumpPad, 0.050, Global.area_radius),
  • Vector(-1 * Global.Xlength_center_goalJumpPad, 0.050, -1 * Global.area_radius), Purple, Visible To);
  • }
  • }
  • rule("Sigma primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sigma;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Primary Fire) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.sigma_primary_fired_time = Total Time Elapsed;
  • Create Effect(All Players(All Teams), Good Aura, Purple, Event Player.sigma_pos_primary, 0.200, Visible To Position and Radius);
  • Event Player.sigma_effect_primary = Last Created Entity;
  • Event Player.sigma_pos_primary = Eye Position(Event Player);
  • Event Player.sigma_spd_primary = 0.750 * Facing Direction Of(Event Player);
  • For Player Variable(Event Player, sigma_I_primary, 0, 20, 1);
  • If(Ray Cast Hit Position(Event Player.sigma_pos_primary, Event Player.sigma_pos_primary Event Player.sigma_spd_primary,
  • If(Ray Cast Hit Position(Event Player.sigma_pos_primary, Event Player.sigma_pos_primary + Event Player.sigma_spd_primary,
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Null, True)
  • == Event Player.sigma_pos_primary Event Player.sigma_spd_primary);
  • Event Player.sigma_pos_primary = Event Player.sigma_spd_primary;
  • == Event Player.sigma_pos_primary + Event Player.sigma_spd_primary);
  • Event Player.sigma_pos_primary += Event Player.sigma_spd_primary;
  • Wait(0.050, Ignore Condition);
  • Else;
  • Event Player.sigma_pos_primary = Ray Cast Hit Position(Event Player.sigma_pos_primary,
  • Event Player.sigma_pos_primary Event Player.sigma_spd_primary, Append To Array(All Players(Opposite Team Of(Team Of(
  • Event Player.sigma_pos_primary + Event Player.sigma_spd_primary, Append To Array(All Players(Opposite Team Of(Team Of(
  • Event Player))), Global.theBall), Null, True);
  • Event Player.sigma_I_primary = 19;
  • End;
  • Event Player.sigma_spd_primary = Vector(0, -0.015, 0);
  • Event Player.sigma_spd_primary += Vector(0, -0.015, 0);
  • End;
  • Play Effect(All Players(All Teams), Bad Explosion, Purple, Event Player.sigma_pos_primary, Global.sigma_primary_explode_radius);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, White, Event Player.sigma_pos_primary, 50);
  • If(Distance Between(Position Of(Global.theBall), Event Player.sigma_pos_primary) < Global.sigma_primary_explode_radius);
  • Apply Impulse(Global.theBall, Direction Towards(Position Of(Global.theBall) Vector(0, 0.800, 0), Event Player.sigma_pos_primary),
  • Apply Impulse(Global.theBall, Direction Towards(Position Of(Global.theBall) + Vector(0, 0.800, 0), Event Player.sigma_pos_primary),
  • 10, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • End;
  • Wait(0.050, Ignore Condition);
  • Destroy Effect(Event Player.sigma_effect_primary);
  • Wait(1.750 Event Player.sigma_primary_fired_time - Total Time Elapsed, Ignore Condition);
  • Wait(1.750 + Event Player.sigma_primary_fired_time - Total Time Elapsed, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("human player settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Phased Out, 9999);
  • Disable Death Spectate All Players(Event Player);
  • Set Status(Event Player, Null, Invincible, 9999);
  • Event Player.step_in_jumppad = False;
  • }
  • }
  • rule("sigma shield cancel")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sigma;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.020, Ignore Condition);
  • Set Secondary Fire Enabled(Event Player, False);
  • Wait(1.200, Ignore Condition);
  • Set Secondary Fire Enabled(Event Player, True);
  • Wait(0.020, Ignore Condition);
  • Press Button(Event Player, Secondary Fire);
  • Wait(0.020, Ignore Condition);
  • Set Secondary Fire Enabled(Event Player, False);
  • Wait(1.400, Ignore Condition);
  • Set Secondary Fire Enabled(Event Player, True);
  • }
  • }
  • rule("sigma grasp")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Sigma;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • Distance Between(Eye Position(Event Player) Facing Direction Of(Event Player), Eye Position(Global.theBall)) < 2.500;
  • Distance Between(Eye Position(Event Player) + Facing Direction Of(Event Player), Eye Position(Global.theBall)) < 2.500;
  • }
  • actions
  • {
  • If(Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS) == True);
  • Call Subroutine(stopTheBall);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -45), 11.500, To World,
  • Cancel Contrary Motion);
  • Start Rule(BallPowerEffect, Restart Rule);
  • Set Ability 1 Enabled(Event Player, False);
  • Wait(0.250, Ignore Condition);
  • Set Ability 1 Enabled(Event Player, True);
  • End;
  • }
  • }
  • rule("stopTheBall")
  • {
  • event
  • {
  • Subroutine;
  • stopTheBall;
  • }
  • actions
  • {
  • Apply Impulse(Global.theBall, Right, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.theBall, Left, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.theBall, Forward, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.theBall, Backward, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.theBall, Up, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.theBall, Down, 0.001, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("mei primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 10 * Facing Direction Of(Event Player),
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 10 * Facing Direction Of(Event Player),
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 + Vertical Facing Angle Of(
  • Event Player)), 3.500, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Restart Rule);
  • Else If(Vertical Facing Angle Of(Event Player) > 7);
  • Modify Player Variable(Event Player, mei_frost_positions, Append To Array, Ray Cast Hit Position(Eye Position(Event Player),
  • Eye Position(Event Player) 10 * Facing Direction Of(Event Player), Remove From Array(All Players(Opposite Team Of(Team Of(
  • Eye Position(Event Player) + 10 * Facing Direction Of(Event Player), Remove From Array(All Players(Opposite Team Of(Team Of(
  • Event Player))), Global.theBall), Null, True));
  • Modify Player Variable(Event Player, mei_frost_limit_times, Append To Array, Total Time Elapsed 1);
  • Modify Player Variable(Event Player, mei_frost_limit_times, Append To Array, Total Time Elapsed + 1);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Last Of(Event Player.mei_frost_positions), Global.radius_mei_frost);
  • End;
  • Wait(0.240, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("mei frost remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.mei_frost_positions != Empty Array;
  • First Of(Event Player.mei_frost_limit_times) < Total Time Elapsed;
  • }
  • actions
  • {
  • Modify Player Variable(Event Player, mei_frost_positions, Remove From Array By Index, 0);
  • Modify Player Variable(Event Player, mei_frost_limit_times, Remove From Array By Index, 0);
  • }
  • }
  • rule("step mei frost")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mei;
  • }
  • conditions
  • {
  • Event Player.mei_frost_positions != Empty Array;
  • Is True For Any(Event Player.mei_frost_positions, Distance Between(Position Of(Event Player), Current Array Element)
  • < Global.radius_mei_frost) == True;
  • }
  • actions
  • {
  • disabled Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player) Horizontal Angle From Direction(
  • disabled Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player) + Horizontal Angle From Direction(
  • Throttle Of(Event Player)), 0), 6, To World, Incorporate Contrary Motion);
  • Set Move Speed(Event Player, 140);
  • Wait(0.240, Ignore Condition);
  • Loop If Condition Is True;
  • Set Move Speed(Event Player, 100);
  • }
  • }
  • rule("Moira primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 20 * Facing Direction Of(Event Player),
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 20 * Facing Direction Of(Event Player),
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 + Vertical Facing Angle Of(
  • Event Player)), 2.800, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Restart Rule);
  • End;
  • Wait(0.240, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Moira secondary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 20 * Facing Direction Of(Event Player),
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 20 * Facing Direction Of(Event Player),
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player) 180, -15 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player) + 180, -15 + Vertical Facing Angle Of(
  • Event Player)), 2.800, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Restart Rule);
  • End;
  • Wait(0.240, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Moira orb stop ready")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.moira_canShotOrb = True;
  • Disallow Button(Event Player, Ability 2);
  • Wait(1, Ignore Condition);
  • Allow Button(Event Player, Ability 2);
  • Press Button(Event Player, Ability 2);
  • Wait(0.020, Ignore Condition);
  • Disallow Button(Event Player, Ability 2);
  • Wait(0.016, Ignore Condition);
  • Event Player.moira_canShotOrb = False;
  • Wait(0.214, Ignore Condition);
  • Allow Button(Event Player, Ability 2);
  • Event Player.moira_canShotOrb = True;
  • }
  • }
  • rule("Moira heal orb")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • Event Player.moira_canShotOrb == True;
  • Is Button Held(Event Player, Primary Fire) == True;
  • }
  • actions
  • {
  • Abort If Condition Is False;
  • Event Player.moira_canShotOrb = False;
  • Small Message(Event Player, Custom String("heal orb"));
  • Event Player.moira_orbPos = Eye Position(Event Player);
  • Event Player.moira_orbIsHeal = True;
  • Event Player.moira_orbBirthTime = Total Time Elapsed;
  • Create Effect(All Players(All Teams), Good Aura, Yellow, Event Player.moira_orbPos, Global.Moira_orb_range, Visible To);
  • Event Player.moira_orbEffect = Last Created Entity;
  • Wait(10, Ignore Condition);
  • Wait(7, Ignore Condition);
  • Destroy Effect(Event Player.moira_orbEffect);
  • }
  • }
  • rule("Moira dmg orb")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • Event Player.moira_canShotOrb == True;
  • Is Button Held(Event Player, Secondary Fire) == True;
  • Is Button Held(Event Player, Primary Fire) == False;
  • }
  • actions
  • {
  • Abort If Condition Is False;
  • Event Player.moira_canShotOrb = False;
  • Small Message(Event Player, Custom String("dmg orb"));
  • Event Player.moira_orbPos = Eye Position(Event Player);
  • Event Player.moira_orbIsHeal = False;
  • Event Player.moira_orbBirthTime = Total Time Elapsed;
  • Create Effect(All Players(All Teams), Bad Aura, Purple, Event Player.moira_orbPos, Global.Moira_orb_range, Visible To);
  • Event Player.moira_orbEffect = Last Created Entity;
  • Wait(10, Ignore Condition);
  • Wait(7, Ignore Condition);
  • Destroy Effect(Event Player.moira_orbEffect);
  • }
  • }
  • rule("moira orb push pull")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Moira;
  • }
  • conditions
  • {
  • Total Time Elapsed - Event Player.moira_orbBirthTime < 10;
  • Total Time Elapsed - Event Player.moira_orbBirthTime < 7;
  • Distance Between(Eye Position(Global.theBall), Event Player.moira_orbPos) <= Global.Moira_orb_range;
  • }
  • actions
  • {
  • If(Event Player.moira_orbIsHeal);
  • Apply Impulse(Global.theBall, Direction Towards(Event Player.moira_orbPos, Eye Position(Global.theBall)), 3.200, To World,
  • Incorporate Contrary Motion);
  • Else;
  • Apply Impulse(Global.theBall, Direction Towards(Eye Position(Global.theBall), Event Player.moira_orbPos), 3.200, To World,
  • Incorporate Contrary Motion);
  • End;
  • Start Rule(BallPowerEffect, Do Nothing);
  • Wait(0.240, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("rein primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.410, Abort When False);
  • Event Player.rein_isSwingOdd = True;
  • While(Is Firing Primary(Event Player));
  • If(Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 5.200);
  • If(Is In View Angle(Event Player, Eye Position(Global.theBall), 80));
  • If(Is In Line of Sight(Eye Position(Event Player), Global.theBall, Barriers Do Not Block LOS) == True);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player)
  • -30 60 * Event Player.rein_isSwingOdd, -10 Vertical Facing Angle Of(Event Player)), 11, To World,
  • + -30 + 60 * Event Player.rein_isSwingOdd, -10 + Vertical Facing Angle Of(Event Player)), 11, To World,
  • Incorporate Contrary Motion);
  • Call Subroutine(BallPowerEffect);
  • End;
  • End;
  • End;
  • Event Player.rein_isSwingOdd = !Event Player.rein_isSwingOdd;
  • Wait(0.940, Abort When False);
  • End;
  • }
  • }
  • rule("Rein charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String(" "));
  • Wait(0.570, Ignore Condition);
  • Set Status(Event Player, Null, Hacked, 0.030);
  • Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), -16), 32, To World,
  • Cancel Contrary Motion);
  • Small Message(Event Player, Custom String(" "));
  • }
  • }
  • rule("Rein shield to throttle")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Global.theBall), Position Of(Event Player)), 0.250,
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Global.theBall), Position Of(Event Player)), 0.125,
  • To World, Replace existing throttle, Direction and Magnitude);
  • Apply Impulse(Event Player, Direction Towards(Position Of(Global.theBall), Position Of(Event Player)), 0.001, To World,
  • Cancel Contrary Motion);
  • }
  • }
  • rule("Rein stop shield to stop throttle")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Reinhardt;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == False;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • }
  • }
  • rule("BallPowerEffect")
  • {
  • event
  • {
  • Subroutine;
  • BallPowerEffect;
  • }
  • actions
  • {
  • Damage(Global.theBall, Event Player, 1);
  • Play Effect(All Players(All Teams), Good Explosion, Lime Green, Global.theBall, 0.010);
  • Play Effect(All Players(All Teams), Explosion Sound, White, Position Of(Global.theBall), 30);
  • }
  • }
  • rule("genjiSubroutine")
  • {
  • event
  • {
  • Subroutine;
  • genjiS_getSideShurikenDirection;
  • }
  • actions
  • {
  • Event Player.genjiS_ret_direction = Facing Direction Of(Event Player) * Cosine From Degrees(Event Player.genjiS_arg_theta_degree)
  • Cross Product(Event Player.genjiS_arg_axis_direction, Facing Direction Of(Event Player)) * Sine From Degrees(
  • + Cross Product(Event Player.genjiS_arg_axis_direction, Facing Direction Of(Event Player)) * Sine From Degrees(
  • Event Player.genjiS_arg_theta_degree);
  • }
  • }
  • rule("genji secondary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.genjiS_arg_axis_direction = Direction From Angles(Horizontal Facing Angle Of(Event Player),
  • -90 Vertical Facing Angle Of(Event Player));
  • -90 + Vertical Facing Angle Of(Event Player));
  • For Player Variable(Event Player, genji_I_secondary, 0, 3, 1);
  • Event Player.genjiS_arg_theta_degree = Global.genji_secondary_gap_degrees[Event Player.genji_I_secondary];
  • Call Subroutine(genjiS_getSideShurikenDirection);
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 100 * Event Player.genjiS_ret_direction,
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 100 * Event Player.genjiS_ret_direction,
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Angle From Direction(Event Player.genjiS_ret_direction),
  • -10 Vertical Angle From Direction(Event Player.genjiS_ret_direction)), 2.600, To World, Incorporate Contrary Motion);
  • -10 + Vertical Angle From Direction(Event Player.genjiS_ret_direction)), 2.600, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • End;
  • End;
  • }
  • }
  • rule("genji ability1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 2;
  • }
  • actions
  • {
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
  • Event Player)), 9, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • }
  • }
  • rule("genji deflect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Genji;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 2;
  • Speed Of In Direction(Global.theBall, Facing Direction Of(Event Player)) < 0;
  • }
  • actions
  • {
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
  • Event Player)), Absolute Value(Speed Of In Direction(Global.theBall, Facing Direction Of(Event Player))), To World,
  • Cancel Contrary Motion);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Global.theBall, 1);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, White, Position Of(Global.theBall), 70);
  • }
  • }
  • rule("widow scoping")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • Is Firing Primary(Event Player) == False;
  • Is Button Held(Event Player, Secondary Fire) == True;
  • }
  • actions
  • {
  • If(Event Player.widow_isSeeingScope);
  • Wait(0.400, Abort When False);
  • Else;
  • Wait(0.320, Abort When False);
  • End;
  • Event Player.widow_isSeeingScope = True;
  • Set Status(Event Player, Null, Burning, 9999);
  • Event Player.widow_isCharging = True;
  • Disallow Button(Event Player, Jump);
  • }
  • }
  • rule("widow not scoping")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Widowmaker;
  • }
  • conditions
  • {
  • disabled Is Button Held(Event Player, Secondary Fire) == False;
  • disabled Is Using Ability 1(Event Player) == False;
  • (!Is Button Held(Event Player, Secondary Fire) || Is Using Ability 1(Event Player)) == True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Burning);
  • Event Player.widow_isCharging = False;
  • Stop Chasing Player Variable(Event Player, widow_charge_percent);
  • Event Player.widow_charge_percent = 0;
  • Event Player.widow_isSeeingScope = False;
  • Allow Button(Event Player, Jump);
  • }
  • }
  • rule("widow charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Widowmaker;
  • }
  • conditions
  • {
  • Event Player.widow_isCharging == True;
  • }
  • actions
  • {
  • Chase Player Variable Over Time(Event Player, widow_charge_percent, 200, 1.800, None);
  • }
  • }
  • rule("widow snipe shot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Widowmaker;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 100 * Facing Direction Of(Event Player),
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 100 * Facing Direction Of(Event Player),
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
  • Event Player)), Event Player.widow_charge_percent * 0.080, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • End;
  • "debug"
  • disabled Event Player.widow_charge_percent_shot = Event Player.widow_charge_percent;
  • "debug"
  • disabled Create In-World Text(Event Player, Event Player.widow_charge_percent_shot, Eye Position(Event Player) Facing Direction Of(
  • disabled Create In-World Text(Event Player, Event Player.widow_charge_percent_shot, Eye Position(Event Player) + Facing Direction Of(
  • Event Player), 4, Clip Against Surfaces, String, White, Default Visibility);
  • "debug"
  • disabled Event Player.widow_txt_percent_shot = Last Text ID;
  • Clear Status(Event Player, Burning);
  • Event Player.widow_isCharging = False;
  • Stop Chasing Player Variable(Event Player, widow_charge_percent);
  • Event Player.widow_charge_percent = 0;
  • "debug"
  • disabled Wait(0.250, Ignore Condition);
  • "debug"
  • disabled Destroy In-World Text(Event Player.widow_txt_percent_shot);
  • }
  • }
  • rule("Tracer primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Tracer;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 20 * Facing Direction Of(Event Player),
  • If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 20 * Facing Direction Of(Event Player),
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
  • Event Player.Tracer_ball_distance = Distance Between(Position Of(Event Player), Position Of(Global.theBall));
  • If(Event Player.Tracer_ball_distance <= 5);
  • Event Player.Tracer_primary_force = Global.tracer_max_primary_force;
  • Else;
  • Event Player.Tracer_primary_force = Global.tracer_max_primary_force * (5 / Event Player.Tracer_ball_distance);
  • End;
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 Vertical Facing Angle Of(
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 + Vertical Facing Angle Of(
  • Event Player)), Event Player.Tracer_primary_force, To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Restart Rule);
  • End;
  • Wait(0.240, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Tracer recall")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Tracer;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • If(Distance Between(Position Of(Event Player), Position Of(Global.theBall)) < 1.500 && !Global.isBallRecalling);
  • Global.Recaller = Event Player;
  • Global.isBallRecalling = True;
  • Start Rule(stopTheBall, Do Nothing);
  • End;
  • }
  • }
  • rule("ball recall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.isBallRecalling == True;
  • }
  • actions
  • {
  • Set Invisible(Global.theBall, All);
  • Wait(0.900, Ignore Condition);
  • Start Rule(stopTheBall, Do Nothing);
  • If(Absolute Value(X Component Of(Position Of(Global.Recaller))) > Global.center_goal_distance - 2);
  • Teleport(Global.theBall, Vector((Global.center_goal_distance - 2) * (X Component Of(Position Of(Global.Recaller)) / Absolute Value(
  • X Component Of(Position Of(Global.Recaller)))), Y Component Of(Position Of(Global.Recaller)), Z Component Of(Position Of(
  • Global.Recaller))));
  • Else;
  • Teleport(Global.theBall, Position Of(Global.Recaller));
  • End;
  • Set Invisible(Global.theBall, None);
  • Global.Recaller = Null;
  • Global.isBallRecalling = False;
  • }
  • }
  • rule("mercy primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mercy;
  • }
  • conditions
  • {
  • Entity Exists(Global.theBall) == True;
  • Is Button Held(Event Player, Primary Fire) == True;
  • Distance Between(Eye Position(Event Player) Facing Direction Of(Event Player), Position Of(Global.theBall) Vector(0, 0.800, 0))
  • Distance Between(Eye Position(Event Player) + Facing Direction Of(Event Player), Position Of(Global.theBall) + Vector(0, 0.800, 0))
  • < Global.mercy_beam_maximum_length;
  • Is In View Angle(Event Player, Position Of(Global.theBall) Vector(0, 0.800, 0), 60) == True;
  • Is In View Angle(Event Player, Position Of(Global.theBall) + Vector(0, 0.800, 0), 60) == True;
  • Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS) == True;
  • }
  • actions
  • {
  • Create Beam Effect(All Players(All Teams), Good Beam, Eye Position(Event Player) Facing Direction Of(Event Player), Position Of(
  • Global.theBall) Vector(0, 0.800, 0), Green, Visible To Position and Radius);
  • Create Beam Effect(All Players(All Teams), Good Beam, Eye Position(Event Player) + Facing Direction Of(Event Player), Position Of(
  • Global.theBall) + Vector(0, 0.800, 0), Green, Visible To Position and Radius);
  • Event Player.mercy_beam_effect = Last Created Entity;
  • Event Player.Is_mercy_primary_looping = True;
  • While(Event Player.Is_mercy_primary_looping == True);
  • Event Player.mercy_ball_distance = Distance Between(Eye Position(Event Player) Facing Direction Of(Event Player), Position Of(
  • Global.theBall) Vector(0, 0.800, 0));
  • Event Player.mercy_ball_distance = Distance Between(Eye Position(Event Player) + Facing Direction Of(Event Player), Position Of(
  • Global.theBall) + Vector(0, 0.800, 0));
  • If(!Is Button Held(Event Player, Primary Fire) || !Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS)
  • || Event Player.mercy_ball_distance >= Global.mercy_beam_maximum_length);
  • Event Player.Is_mercy_primary_looping = False;
  • Else;
  • If(Event Player.mercy_ball_distance > Global.mercy_beam_natural_length);
  • Event Player.mercy_self_move_direction = Direction Towards(Eye Position(Event Player) Facing Direction Of(Event Player),
  • Position Of(Global.theBall) Vector(0, 0.800, 0));
  • Event Player.mercy_self_move_direction = Direction Towards(Eye Position(Event Player) + Facing Direction Of(Event Player),
  • Position Of(Global.theBall) + Vector(0, 0.800, 0));
  • Else;
  • Event Player.mercy_self_move_direction = Direction Towards(Position Of(Global.theBall) Vector(0, 0.800, 0), Eye Position(
  • Event Player) Facing Direction Of(Event Player));
  • Event Player.mercy_self_move_direction = Direction Towards(Position Of(Global.theBall) + Vector(0, 0.800, 0), Eye Position(
  • Event Player) + Facing Direction Of(Event Player));
  • End;
  • Event Player.mercy_ball_primary_speed = 0.450 * Absolute Value(
  • Event Player.mercy_ball_distance - Global.mercy_beam_natural_length);
  • Apply Impulse(Event Player, Event Player.mercy_self_move_direction, Event Player.mercy_ball_primary_speed, To World,
  • Incorporate Contrary Motion);
  • Apply Impulse(Global.theBall, -1 * Event Player.mercy_self_move_direction, Event Player.mercy_ball_primary_speed, To World,
  • Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • Wait(0.240, Ignore Condition);
  • End;
  • End;
  • Destroy Effect(Event Player.mercy_beam_effect);
  • }
  • }
  • rule("mercy shift")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Mercy;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Ability 1) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • }
  • actions
  • {
  • Event Player.mercy_ability1_target_player = First Of(Filtered Array(Sorted Array(Append To Array(Players in View Angle(
  • Event Player, Team Of(Event Player), 25), Global.theBall), Distance Between(Vector(0, 0, 0), Cross Product(Vector Towards(
  • Eye Position(Event Player), Eye Position(Current Array Element)), Facing Direction Of(Event Player))) / Distance Between(
  • Vector(0, 0, 0), Normalize(Facing Direction Of(Event Player)))), Distance Between(Position Of(Event Player), Position Of(
  • Current Array Element)) < 30));
  • disabled Event Player.mercy_ability1_target_player = First Of(Sorted Array(Append To Array(Players in View Angle(Event Player, Team Of(
  • Event Player), 25), Global.theBall), Distance Between(Vector(0, 0, 0), Cross Product(Vector Towards(Eye Position(Event Player),
  • Eye Position(Current Array Element)), Facing Direction Of(Event Player))) / Distance Between(Vector(0, 0, 0), Normalize(
  • Facing Direction Of(Event Player)))));
  • If(Event Player.mercy_ability1_target_player != Null);
  • Apply Impulse(Event Player, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Position Of(Event Player),
  • Position Of(Event Player.mercy_ability1_target_player))), -15 Vertical Angle From Direction(Direction Towards(Position Of(
  • Event Player), Position Of(Event Player.mercy_ability1_target_player)))), 6 1.250 * Distance Between(Position Of(
  • Position Of(Event Player.mercy_ability1_target_player))), -15 + Vertical Angle From Direction(Direction Towards(Position Of(
  • Event Player), Position Of(Event Player.mercy_ability1_target_player)))), 6 + 1.250 * Distance Between(Position Of(
  • Event Player), Position Of(Event Player.mercy_ability1_target_player)), To World, Cancel Contrary Motion);
  • Wait(1.740, Ignore Condition);
  • Play Effect(Event Player, Buff Impact Sound, White, Event Player, 40);
  • disabled Wait(1.740, Ignore Condition);
  • Set Ability Cooldown(Event Player, Button(Ability 1), 1.750);
  • disabled Play Effect(Event Player, Buff Impact Sound, White, Event Player, 40);
  • End;
  • }
  • }
  • rule("hanzo shot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == False;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, hanzo_spd_primary);
  • If(Is Button Held(Event Player, Primary Fire) == False);
  • If(Event Player.is_hanzo_charging);
  • disabled Small Message(Event Player, Event Player.hanzo_spd_primary);
  • Event Player.hanzo_pos_arrow = Eye Position(Event Player);
  • Event Player.hanzo_velocity_primary = Event Player.hanzo_spd_primary * Facing Direction Of(Event Player) / 30;
  • Event Player.hanzo_arrow_has_bomb = Event Player.hanzo_using_ability1;
  • Start Rule(hanzoS_arrow_trabel, Restart Rule);
  • End;
  • End;
  • Event Player.is_hanzo_charging = False;
  • }
  • }
  • rule("hanzo start charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.is_hanzo_charging = True;
  • Event Player.hanzo_spd_primary = Global.hanzo_min_spd;
  • Chase Player Variable Over Time(Event Player, hanzo_spd_primary, Global.hanzo_max_spd, 0.750, None);
  • }
  • }
  • rule("hanzoS_arrow_travel")
  • {
  • event
  • {
  • Subroutine;
  • hanzoS_arrow_trabel;
  • }
  • actions
  • {
  • Event Player.hanzoS_arrow_travel_is_looping = True;
  • While(Event Player.hanzoS_arrow_travel_is_looping);
  • If(Ray Cast Hit Position(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary,
  • If(Ray Cast Hit Position(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary,
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Null, True)
  • == Event Player.hanzo_velocity_primary Event Player.hanzo_pos_arrow);
  • Event Player.hanzo_pos_arrow = Event Player.hanzo_velocity_primary;
  • Event Player.hanzo_velocity_primary = Vector(0, -0.015, 0);
  • == Event Player.hanzo_velocity_primary + Event Player.hanzo_pos_arrow);
  • Event Player.hanzo_pos_arrow += Event Player.hanzo_velocity_primary;
  • Event Player.hanzo_velocity_primary += Vector(0, -0.015, 0);
  • Else;
  • Event Player.hanzoS_arrow_travel_is_looping = False;
  • Start Rule(hanzoS_arrow_hit, Restart Rule);
  • End;
  • Play Effect(All Players(All Teams), Bad Explosion, Green, Event Player.hanzo_pos_arrow, 0.010);
  • Wait(1 / 30, Ignore Condition);
  • End;
  • }
  • }
  • rule("hanzo charge with abilit1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.hanzo_using_ability1 = True;
  • }
  • }
  • rule("hanzo charge without abilit1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Firing Primary(Event Player) == True;
  • Is Using Ability 1(Event Player) == False;
  • }
  • actions
  • {
  • Event Player.hanzo_using_ability1 = False;
  • }
  • }
  • rule("hanzoS_arrow_hit")
  • {
  • event
  • {
  • Subroutine;
  • hanzoS_arrow_hit;
  • }
  • actions
  • {
  • "hit ham"
  • If(Ray Cast Hit Player(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary,
  • If(Ray Cast Hit Player(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary,
  • Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Null, True) == Global.theBall);
  • Event Player.hanzo_pos_arrow = Ray Cast Hit Position(Event Player.hanzo_pos_arrow,
  • Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
  • Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
  • Event Player))), Global.theBall), Null, True);
  • Apply Impulse(Global.theBall, Direction From Angles(Horizontal Angle From Direction(Event Player.hanzo_velocity_primary),
  • -10 Vertical Angle From Direction(Event Player.hanzo_velocity_primary)), Distance Between(Vector(0, 0, 0),
  • -10 + Vertical Angle From Direction(Event Player.hanzo_velocity_primary)), Distance Between(Vector(0, 0, 0),
  • Event Player.hanzo_velocity_primary) * (10 / 3.666), To World, Incorporate Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • If(Event Player.hanzo_arrow_has_bomb);
  • Event Player.hanzo_bomb_is_bonded_to_ball = True;
  • Start Rule(hanzoS_bomb, Restart Rule);
  • End;
  • Else;
  • Event Player.hanzo_pos_arrow = Ray Cast Hit Position(Event Player.hanzo_pos_arrow,
  • Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
  • Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
  • Event Player))), Global.theBall), Null, True);
  • If(Event Player.hanzo_arrow_has_bomb);
  • Event Player.hanzo_bomb_is_bonded_to_ball = False;
  • Start Rule(hanzoS_bomb, Restart Rule);
  • End;
  • End;
  • }
  • }
  • rule("hanzoS_bomb")
  • {
  • event
  • {
  • Subroutine;
  • hanzoS_bomb;
  • }
  • actions
  • {
  • If(Event Player.hanzo_bomb_is_bonded_to_ball);
  • "soutai"
  • Event Player.hanzo_pos_bomb = Event Player.hanzo_pos_arrow - (Position Of(Global.theBall) Vector(0, 0.800, 0));
  • Create Effect(All Players(All Teams), Sphere, Red, Event Player.hanzo_pos_bomb Position Of(Global.theBall) Vector(0, 0.800, 0),
  • Event Player.hanzo_pos_bomb = Event Player.hanzo_pos_arrow - (Position Of(Global.theBall) + Vector(0, 0.800, 0));
  • Create Effect(All Players(All Teams), Sphere, Red, Event Player.hanzo_pos_bomb + Position Of(Global.theBall) + Vector(0, 0.800, 0),
  • 0.500, Visible To Position and Radius);
  • Event Player.effect_hanzo_bomb = Last Created Entity;
  • Wait(1, Ignore Condition);
  • Destroy Effect(Event Player.effect_hanzo_bomb);
  • Play Effect(All Players(All Teams), Good Explosion, Red, Position Of(Global.theBall) Vector(0, 0.800, 0)
  • Event Player.hanzo_pos_bomb, 2);
  • Play Effect(All Players(All Teams), Good Explosion, Red, Position Of(Global.theBall) + Vector(0, 0.800, 0)
  • + Event Player.hanzo_pos_bomb, 2);
  • Apply Impulse(Global.theBall, -1 * Event Player.hanzo_pos_bomb, 9, To World, Cancel Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • Else;
  • "zettai"
  • Event Player.hanzo_pos_bomb = Event Player.hanzo_pos_arrow;
  • Create Effect(All Players(All Teams), Sphere, Red, Event Player.hanzo_pos_bomb, 0.500, Visible To);
  • Event Player.effect_hanzo_bomb = Last Created Entity;
  • Wait(1, Ignore Condition);
  • Destroy Effect(Event Player.effect_hanzo_bomb);
  • Play Effect(All Players(All Teams), Good Explosion, Red, Event Player.hanzo_pos_bomb, 2);
  • If(Distance Between(Position Of(Global.theBall) Vector(0, 0.800, 0), Event Player.hanzo_pos_bomb) < Global.hanzo_bomb_radius);
  • If(Is In Line of Sight(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) Vector(0, 0.800, 0), Enemy Barriers Block LOS));
  • Apply Impulse(Global.theBall, Direction Towards(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) Vector(0, 0.800, 0)), 9,
  • If(Distance Between(Position Of(Global.theBall) + Vector(0, 0.800, 0), Event Player.hanzo_pos_bomb) < Global.hanzo_bomb_radius);
  • If(Is In Line of Sight(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) + Vector(0, 0.800, 0), Enemy Barriers Block LOS));
  • Apply Impulse(Global.theBall, Direction Towards(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) + Vector(0, 0.800, 0)), 9,
  • To World, Cancel Contrary Motion);
  • Start Rule(BallPowerEffect, Do Nothing);
  • End;
  • End;
  • End;
  • }
  • }
  • disabled rule("debug human player hud")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, String("{0} - {1}", String("Secondary Fire"), Is Firing Secondary(Event Player)), Null, Null, Left,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", String("Primary Fire"), Is Firing Primary(Event Player)), Null, Null, Left, 0,
  • White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", String("Ability 2"), Is Using Ability 2(Event Player)), Null, Null, Left, 0,
  • White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", Custom String("moira can shot orb"), Event Player.moira_canShotOrb), Null, Null,
  • Left, 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", Custom String("jumppad step in"), Event Player.step_in_jumppad), Null, Null,
  • Left, 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", Custom String("vertical facing angle"), Vertical Facing Angle Of(Event Player)),
  • Null, Null, Left, 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", String("Ability 1"), Is Using Ability 1(Event Player)), Null, Null, Left, 0,
  • White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", Custom String("widow charging"), Event Player.widow_isCharging), Null, Null,
  • Left, 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", Custom String("widow charge percent"), Event Player.widow_charge_percent), Null,
  • Null, Left, 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, String("{0} - {1}", Custom String("widow is seeing scope"), Event Player.widow_isSeeingScope), Null,
  • Null, Left, 0, White, White, White, Visible To and String, Default Visibility);
  • }
  • }
  • rule("goal")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Hero Of(Event Player) == Hero(Wrecking Ball);
  • Global.canGoal == True;
  • Absolute Value(X Component Of(Position Of(Event Player))) >= Global.center_goal_distance;
  • (Y Component Of(Position Of(Global.theBall)) <= Global.floor_goal_height) == True;
  • Absolute Value(Z Component Of(Position Of(Event Player))) < Global.goal_half_length;
  • Global.isBallRecalling == False;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player, 100);
  • Play Effect(All Players(All Teams), Ring Explosion, White, Event Player, 32);
  • Play Effect(All Players(All Teams), Ring Explosion, White, Event Player, 16);
  • If(X Component Of(Position Of(Event Player)) > 0);
  • Small Message(All Players(All Teams), Custom String("team 1 score!"));
  • Modify Team Score(Team 1, 1);
  • disabled Kill(Filtered Array(All Players(Team 2), Hero Of(Current Array Element) != Null), Global.theBall);
  • For Global Variable(I_goalKillSlot, 0, 6, 1);
  • Kill(Players In Slot(Global.I_goalKillSlot, Team 2), Global.theBall);
  • End;
  • Else;
  • Small Message(All Players(All Teams), Custom String("team 2 score!"));
  • Modify Team Score(Team 2, 1);
  • disabled Kill(Filtered Array(All Players(Team 1), Hero Of(Current Array Element) != Null), Global.theBall);
  • For Global Variable(I_goalKillSlot, 0, 6, 1);
  • Kill(Players In Slot(Global.I_goalKillSlot, Team 1), Global.theBall);
  • End;
  • End;
  • Global.canGoal = False;
  • Wait(10, Ignore Condition);
  • Teleport(Global.theBall, Vector(0, 0, 0));
  • Call Subroutine(stopTheBall);
  • Wait(0.020, Ignore Condition);
  • Global.canGoal = True;
  • }
  • }
  • rule("teleportToFirstPos")
  • {
  • event
  • {
  • Subroutine;
  • teleportToFirstPos;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 1);
  • Teleport(Event Player, Vector(0, 0, 0) Vector(-1 * Global.center_goal_distance, 0, 0));
  • Teleport(Event Player, Vector(0, 0, 0) + Vector(-1 * Global.center_goal_distance, 0, 0));
  • Wait(0.100, Ignore Condition);
  • Set Facing(Event Player, Vector(1, 0, 0), To World);
  • Else;
  • Teleport(Event Player, Vector(0, 0, 0) Vector(1 * Global.center_goal_distance, 0, 0));
  • Teleport(Event Player, Vector(0, 0, 0) + Vector(1 * Global.center_goal_distance, 0, 0));
  • Wait(0.100, Ignore Condition);
  • Set Facing(Event Player, Vector(-1, 0, 0), To World);
  • End;
  • }
  • }
  • rule("alive teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Call Subroutine(teleportToFirstPos);
  • }
  • }
  • rule("spawn teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Call Subroutine(teleportToFirstPos);
  • }
  • }
  • rule("canGoal teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.canGoal == True;
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • Call Subroutine(teleportToFirstPos);
  • }
  • }
  • rule("always phase out")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Has Status(Event Player, Phased Out) == False;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Phased Out, 9999);
  • }
  • }
  • disabled rule("debug create bot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Interact) == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero(Ana), Team Of(Event Player), -1, Position Of(Event Player), Vector(0, 0, 0));
  • }
  • }
  • rule("on jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Jumping(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.step_in_jumppad = Distance Between(Global.pos_jump_pad, Vector(Absolute Value(X Component Of(Position Of(
  • Event Player))), Y Component Of(Position Of(Event Player)), Absolute Value(Z Component Of(Position Of(Event Player)))))
  • < Global.radius_jump_pad ? True : False;
  • If(Absolute Value(X Component Of(Position Of(Event Player))) > Global.Xlength_center_goalJumpPad && Y Component Of(Position Of(
  • Event Player)) < 1);
  • Event Player.step_in_jumppad = True;
  • End;
  • If(Event Player.step_in_jumppad);
  • Apply Impulse(Event Player, Vector(0, 1, 0), 13, To World, Cancel Contrary Motion);
  • Play Effect(All Players(All Teams), Good Explosion, Sky Blue, Event Player, 2);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Sky Blue, Event Player, 50);
  • Event Player.step_in_jumppad = False;
  • Set Move Speed(Event Player, 130);
  • Wait(1, Ignore Condition);
  • Set Move Speed(Event Player, 100);
  • End;
  • }
  • }
Join the Workshop.codes Discord