Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Attack on Titan:Forest of big tree's Fight with 7 TitanBoss in the forest! International Edition v3.3 by LonelyDwD Code:ZP1WW"
  • Description: "Attack on Titan:Forest of big tree's Fight with 9 TitanBoss in the forest! International Edition v4.11 by LonelyDwD Code:ZP1WW"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Map Rotation: Paused
  • Match Voice Chat: Enabled
  • Max Spectators: 12
  • Max Team 1 Players: 9
  • Max Team 2 Players: 0
  • Return To Lobby: Never
  • }
  • modes
  • {
  • disabled Elimination
  • {
  • Capture Objective Tiebreaker: Off
  • Draw After Match Time Elapsed With No Tiebreaker: 150
  • Limited Choice Pool: Team Size +3
  • Reveal Heroes: On
  • Score To Win: 4
  • }
  • Team Deathmatch
  • {
  • Game Length In Minutes: 15
  • Imbalanced Team Score To Win: On
  • Score To Win: 15
  • Team 1 Score To Win: 80
  • Team 2 Score To Win: 60
  • enabled maps
  • {
  • Workshop Expanse Night
  • }
  • }
  • General
  • {
  • Game Mode Start: Immediately
  • Hero Limit: Off
  • Respawn Time Scalar: 30%
  • Skins: Off
  • }
  • }
  • heroes
  • {
  • Team 1
  • {
  • Doomfist
  • {
  • Movement Speed: 200%
  • Rising Uppercut Cooldown Time: 50%
  • Rising Uppercut Knockback Scalar: 10%
  • Rocket Punch Knockback Scalar: 20%
  • Seismic Slam: Off
  • }
  • enabled heroes
  • {
  • Genji
  • }
  • }
  • Team 2
  • {
  • Doomfist
  • {
  • Rising Uppercut Cooldown Time: 50%
  • Rising Uppercut Knockback Scalar: 10%
  • Rocket Punch Knockback Scalar: 20%
  • Seismic Slam: Off
  • }
  • }
  • General
  • {
  • Projectile Gravity: 10%
  • Spawn With Ultimate Ready: On
  • Ana
  • {
  • Damage Dealt: 350%
  • Healing Dealt: 10%
  • }
  • Ashe
  • {
  • Coach Gun: Off
  • Damage Dealt: 150%
  • Dynamite: Off
  • }
  • Baptiste
  • {
  • Jump Vertical Speed: 25%
  • }
  • Brigitte
  • {
  • Barrier Shield Cooldown Time: 0%
  • Barrier Shield Recharge Rate: 500%
  • Shield Bash Cooldown Time: 0%
  • }
  • Doomfist
  • {
  • Movement Speed: 200%
  • Rising Uppercut Cooldown Time: 50%
  • Rising Uppercut Knockback Scalar: 10%
  • Rocket Punch Knockback Scalar: 20%
  • Seismic Slam: Off
  • }
  • Echo
  • {
  • Flight Cooldown Time: 0%
  • }
  • Genji
  • {
  • Ammunition Clip Size Scalar: 25%
  • Deflect Cooldown Time: 500%
  • Infinite Ultimate Duration: On
  • Jump Vertical Speed: 70%
  • Spawn With Ultimate Ready: On
  • Swift Strike: Off
  • Ultimate Generation - Combat Dragonblade: 0%
  • Ultimate Generation - Passive Dragonblade: 0%
  • }
  • Junkrat
  • {
  • Jump Vertical Speed: 150%
  • Primary Fire: Off
  • }
  • McCree
  • {
  • Ammunition Clip Size Scalar: 200%
  • Combat Roll: Off
  • Damage Dealt: 150%
  • Projectile Speed: 500%
  • Secondary Fire: Off
  • }
  • Mercy
  • {
  • Damage Dealt: 300%
  • Guardian Angel: Off
  • No Ammunition Requirement: On
  • Projectile Speed: 300%
  • Regeneration: Off
  • Resurrect Cooldown Time: 80%
  • }
  • Reinhardt
  • {
  • Charge Cooldown Time: 0%
  • }
  • Sigma
  • {
  • Health: 10%
  • }
  • Sombra
  • {
  • Damage Dealt: 220%
  • Hack: Off
  • Translocator: Off
  • }
  • Torbjörn
  • {
  • Damage Dealt: 10%
  • Damage Received: 10%
  • Primary Fire: Off
  • Quick Melee: Off
  • Secondary Fire: Off
  • }
  • Widowmaker
  • {
  • Ammunition Clip Size Scalar: 80%
  • Damage Dealt: 165%
  • Grappling Hook: Off
  • Venom Mine: Off
  • }
  • Winston
  • {
  • Jump Pack Cooldown Time: 250%
  • Spawn With Ultimate Ready: On
  • }
  • Wrecking Ball
  • {
  • Damage Dealt: 50%
  • Health: 10%
  • }
  • Zarya
  • {
  • Particle Barrier Cooldown Time: 1%
  • }
  • }
  • }
  • workshop
  • {
  • 语言Language: [1]
  • 难度Difficulty: [1]
  • }
  • extensions
  • {
  • Beam Effects
  • Buff Status Effects
  • Energy Explosion Effects
  • Kinetic Explosion Effects
  • Explosion Sounds
  • Play More Effects
  • Spawn More Dummy Bots
  • }
  • }
  • variables
  • {
  • global:
  • 1: gravity
  • 2: B
  • 3: i
  • 4: Skill_name
  • 5: ready
  • 7: re_str
  • 8: Score_Hud
  • 9: Score_time
  • 10: ar_Difficult
  • 11: Difficulty
  • 12: ai_adjustPerst
  • 13: Language
  • 14: ar_bosses
  • 15: create_1
  • 16: End_kill_player
  • 17: End_kill_Titan
  • 20: wl_loc
  • 21: wl_size
  • 22: ar_giant
  • 23: ar_hero
  • 24: Random
  • 25: HACK
  • 26: Boss_Fight
  • player:
  • 0: dir_L
  • 1: dir_R
  • 2: endPT_L
  • 3: endPT_R
  • 4: camera
  • 5: root
  • 6: tL
  • 7: tR
  • 8: gason
  • 9: hit_times
  • 10: rt_L
  • 11: rt_R
  • 12: eff_strings
  • 13: ar_shoot
  • 14: HL
  • 15: HR
  • 16: rule
  • 17: skill
  • 18: skill_i1
  • 19: skilleffect_i2
  • 20: skill_GunsLoc_i3
  • 21: skill_Gun_fire
  • 22: respond
  • 23: push_way
  • 24: skill_Gun_face
  • 25: skill_Gun_shootBot
  • 26: skill_Gun_hit
  • 27: in_L
  • 28: in_R
  • 29: life
  • 30: bodysize
  • 31: choose_skill
  • 32: ai_1
  • 33: ai_2
  • 34: ai_3
  • 35: color
  • 36: Founding_Titan
  • 37: closest_tree
  • 38: i
  • }
  • subroutines
  • {
  • 1: tensionAll
  • 2: Smoke_effect
  • 3: LT
  • 4: RT
  • 6: Playerstate
  • 8: length_L
  • 9: length_R
  • 11: AiJump_attack
  • 12: Aipunch
  • 14: circle_attack
  • 15: circle_effect
  • 16: giant_reset
  • 17: Camera
  • 18: GAS
  • 19: Giant_Ai_normal
  • 20: Giant_Ai_solder76
  • 21: ai76_circleAttack
  • 22: ai76_runAttack
  • 23: ai76_targetRefresh
  • 25: Giant_Ai_Monkey
  • 26: aiMonkey_jumpAttack
  • 27: aiMonkey_stoneAttack
  • 29: skill_Lgun
  • 30: skill_Rgun
  • 31: Giant_Ai_DaChui
  • 32: aiDaChui_normalAttack
  • 33: aiDaChui_3normalAttack
  • 34: aiDaChui_rushAttack
  • 35: Giant_Ai_Big
  • 36: aiBig_SteamAttack
  • 37: aiBig_punchAttack
  • 38: aiBig_walkingAttack
  • 39: Giant_Ai_Special
  • 40: aiSpecial_Chasing
  • 41: aiSpecial_attack
  • 42: Giant_Ai_Jaw
  • 43: aiJaw_Fly
  • 44: aiJaw_Attack
  • 45: Create_boss
  • 46: Giant_Ai_Hammer
  • 47: aiHammer_attack
  • 48: aiHammer_ShieldAttack
  • 49: aiHammer_Crystallize
  • 50: Giant_Ai_Cart
  • 51: aiCart_run
  • 52: Giant_Ai_AttackTitan
  • 53: aiAttackTitan_attack
  • 54: Giant_Ai_FoundingTitan
  • 55: aiFoundingTitan_Telep
  • 56: aiFoundingTitan_cart
  • 57: aiFoundingTitan_hammer
  • 58: aiFoundingTitan_Colossal
  • 59: aiFoundingTitan_Armor
  • 60: aiFoundingTitan_raw
  • 61: aiFoundingTitan_male
  • }
  • rule("——————Skill————————")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("蓄力")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Has Status(Event Player, Burning) == False;
  • }
  • actions
  • {
  • Wait(0.200, Abort When False);
  • Disallow Button(Event Player, Button(Primary Fire));
  • Small Message(Event Player, Array(Custom String("松开左键释放蓄力攻击"), Custom String("Release for charged attack "))[Global.Language]);
  • Cancel Primary Action(Event Player);
  • Set Status(Event Player, Null, Burning, 9999);
  • Wait Until(Is Button Held(Event Player, Button(Primary Fire)) == False, 99999);
  • Allow Button(Event Player, Button(Primary Fire));
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.400, Ignore Condition);
  • Abort If(Is Using Ability 2(Event Player) == True);
  • Clear Status(Event Player, Burning);
  • }
  • }
  • rule("特殊技能 大陀螺")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • Ability Cooldown(Event Player, Button(Ability 2)) == 0;
  • Is Using Ability 2(Event Player) == False;
  • Is Alive(Event Player) == True;
  • Event Player.choose_skill == 0;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0);
  • Disallow Button(Event Player, Button(Primary Fire));
  • Event Player.skill = 2;
  • Allow Button(Event Player, Button(Ability 2));
  • Press Button(Event Player, Button(Ability 2));
  • Disallow Button(Event Player, Button(Ability 2));
  • Stop Holding Button(Event Player, Button(Ability 2));
  • Event Player.skill_i1 = 1;
  • Apply Impulse(Event Player, Facing Direction Of(Event Player), 8, To World, Incorporate Contrary Motion);
  • Start Camera(Event Player, Vector(0, 2, 0) + Position Of(Event Player) + Normalize(Velocity Of(Event Player)) * -3, Eye Position(
  • Event Player) + Normalize(Velocity Of(Event Player)) * 20, 33);
  • Event Player.skill = 0;
  • Start Facing(Event Player, Vector(1, 0, 0), 1200, To Player, Direction and Turn Rate);
  • Wait(0.100, Ignore Condition);
  • Set Status(Event Player, Null, Burning, 9999);
  • disabled Set Gravity(Event Player, 80);
  • Create Beam Effect(All Players(All Teams), Omnic Slicer Beam, World Vector Of(Vector(1, 0.800, -0.100), Event Player,
  • Rotation And Translation), World Vector Of(Vector(-0.200, 0.800, 2.500), Event Player, Rotation And Translation), Color(White),
  • Visible To Position and Radius);
  • Event Player.skilleffect_i2[0] = Last Created Entity;
  • Create Beam Effect(All Players(All Teams), Echo Focusing Beam, World Vector Of(Vector(-1, 0.800, 0.100), Event Player,
  • Rotation And Translation), World Vector Of(Vector(0.200, 0.800, -2.700), Event Player, Rotation And Translation), Color(White),
  • Visible To Position and Radius);
  • Event Player.skilleffect_i2[1] = Last Created Entity;
  • Start Rule(circle_effect, Restart Rule);
  • Start Rule(circle_attack, Restart Rule);
  • Wait(0.500, Ignore Condition);
  • Wait Until(Is Dead(Event Player) || Has Status(Event Player, Stunned) || Is Button Held(Event Player, Button(Secondary Fire))
  • == False, 1.700);
  • Clear Status(Event Player, Burning);
  • Stop Facing(Event Player);
  • Destroy Effect(Event Player.skilleffect_i2[0]);
  • Destroy Effect(Event Player.skilleffect_i2[1]);
  • disabled Set Gravity(Event Player, 50);
  • Set Facing(Event Player, Velocity Of(Event Player), To World);
  • Cancel Primary Action(Event Player);
  • Allow Button(Event Player, Button(Primary Fire));
  • Event Player.skill_i1 = 0;
  • Start Rule(Camera, Restart Rule);
  • Start Rule(Playerstate, Restart Rule);
  • Wait(0.500, Ignore Condition);
  • Set Ability Cooldown(Event Player, Button(Ability 2), 2.500);
  • }
  • }
  • rule("circle_effect")
  • {
  • event
  • {
  • Subroutine;
  • circle_effect;
  • }
  • actions
  • {
  • While(Has Status(Event Player, Burning));
  • Play Effect(All Players(Team 1), Sigma Hypersphere Implosion Effect, Color(White), World Vector Of(Vector(0, 1, 0), Event Player,
  • Rotation And Translation), 1);
  • Wait(0.200, Ignore Condition);
  • End;
  • }
  • }
  • rule("circle_attack")
  • {
  • event
  • {
  • Subroutine;
  • circle_attack;
  • }
  • actions
  • {
  • While(Has Status(Event Player, Burning));
  • Damage(Ray Cast Hit Player(World Vector Of(Vector(5, 1, 0), Event Player, Rotation And Translation), World Vector Of(Vector(-5, 0,
  • 0), Event Player, Rotation And Translation), All Players(Team 2), Event Player, True), Event Player, 100);
  • Damage(Ray Cast Hit Player(World Vector Of(Vector(0, 1, 5), Event Player, Rotation And Translation), World Vector Of(Vector(0, 0,
  • -5), Event Player, Rotation And Translation), All Players(Team 2), Event Player, True), Event Player, 100);
  • Wait(0.070, Ignore Condition);
  • End;
  • }
  • }
  • rule("特殊技能 巨人化")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • Is Alive(Event Player) == True;
  • Event Player.choose_skill == 1;
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • If(Ultimate Charge Percent(Event Player) < 100);
  • Small Message(Event Player, Custom String("Insufficient Ultimult Charge"));
  • Small Message(Event Player, Custom String("Insufficient Ultimate Charge"));
  • Else;
  • Stop Holding Button(Event Player, Button(Ability 1));
  • Stop Holding Button(Event Player, Button(Ability 2));
  • Stop Holding Button(Event Player, Button(Ultimate));
  • Event Player.root = Empty Array;
  • Set Status(Event Player, Null, Stunned, 0.800);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Yellow), Event Player, 20);
  • Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 30);
  • Add Health Pool To Player(Event Player, Shields, 4000, True, True);
  • Start Rule(Smoke_effect, Restart Rule);
  • Wait(0.500, Ignore Condition);
  • Stop Forcing Throttle(Event Player);
  • Start Forcing Player To Be Hero(Event Player, Hero(Doomfist));
  • Set Damage Dealt(Event Player, 17000);
  • Allow Button(Event Player, Button(Jump));
  • Allow Button(Event Player, Button(Ability 1));
  • Allow Button(Event Player, Button(Ability 2));
  • Disallow Button(Event Player, Button(Primary Fire));
  • Set Move Speed(Event Player, 120);
  • Start Scaling Player(Event Player, 7, True);
  • Start Rule(Camera, Restart Rule);
  • Wait Until(Is Dead(Event Player), 30);
  • Kill(Event Player, Null);
  • Wait(0.200, Ignore Condition);
  • Stop Scaling Player(Event Player);
  • Start Forcing Player To Be Hero(Event Player, Hero(Genji));
  • Event Player.respond = 1;
  • Resurrect(Event Player);
  • Set Ultimate Charge(Event Player, 0);
  • Set Damage Dealt(Event Player, 100);
  • Remove All Health Pools From Player(Event Player);
  • Disallow Button(Event Player, Button(Ability 1));
  • Disallow Button(Event Player, Button(Ability 2));
  • Disallow Button(Event Player, Button(Jump));
  • Allow Button(Event Player, Button(Primary Fire));
  • disabled Disable Movement Collision With Players(Event Player);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.016, Ignore Condition);
  • Teleport(Event Player, Position Of(Event Player) + Vector(0, 10, 0));
  • Start Rule(Camera, Restart Rule);
  • Event Player.respond = 0;
  • End;
  • }
  • }
  • rule("技能切换")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Melee)) == True;
  • Has Status(Event Player, Phased Out) == False;
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • actions
  • {
  • Destroy Effect(Event Player.skilleffect_i2[0]);
  • Destroy Effect(Event Player.skilleffect_i2[1]);
  • disabled Wait(0.500, Abort When False);
  • disabled Set Ultimate Charge(Event Player, 0);
  • Event Player.choose_skill = (Event Player.choose_skill + 1) % 3;
  • Small Message(Event Player, Custom String("{2}【{0}{1}】", Global.Skill_name[Event Player.choose_skill][0],
  • Global.Skill_name[Event Player.choose_skill][1], Array(Custom String("切换至"), Custom String("Change to"))[Global.Language]));
  • disabled Loop If Condition Is True;
  • }
  • }
  • rule("巨人化 左键变近战")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Doomfist;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Melee));
  • }
  • }
  • rule("特殊技能 雷枪")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • Event Player.choose_skill == 2;
  • Filtered Array(Event Player.skill_GunsLoc_i3, Current Array Element != 0) < 2;
  • }
  • actions
  • {
  • If(Ultimate Charge Percent(Event Player) < 40);
  • Small Message(Event Player, Custom String("Insufficient Ultimult Charge"));
  • Small Message(Event Player, Custom String("Insufficient Ultimate Charge"));
  • Abort;
  • Else;
  • If(Event Player.skill_GunsLoc_i3[0] == 0);
  • Start Rule(skill_Lgun, Do Nothing);
  • Else If(Event Player.skill_GunsLoc_i3[1] == 0);
  • Start Rule(skill_Rgun, Do Nothing);
  • End;
  • End;
  • Wait(0.200, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Gun_L")
  • {
  • event
  • {
  • Subroutine;
  • skill_Lgun;
  • }
  • actions
  • {
  • Set Ultimate Charge(Event Player, Ultimate Charge Percent(Event Player) - 40);
  • Event Player.skill_GunsLoc_i3[0] = World Vector Of(Vector(0.800, 1, 0), Event Player, Rotation And Translation);
  • Event Player.skill_Gun_face[0] = Facing Direction Of(Event Player);
  • Play Effect(All Players(All Teams), Wrecking Ball Piledriver Impact Sound, Color(White), Event Player.skill_GunsLoc_i3[0], 40);
  • Create Beam Effect(All Players(All Teams), Symmetra Turret Beam, Event Player.skill_GunsLoc_i3[0],
  • Event Player.skill_GunsLoc_i3[0] + Event Player.skill_Gun_face[0] * -2, Color(Team 1), Visible To Position and Radius);
  • Event Player.skilleffect_i2[0] = Last Created Entity;
  • Wait(0.016, Ignore Condition);
  • While(Distance Between(Event Player.skill_GunsLoc_i3[0], Eye Position(Event Player)) < 20 && Ray Cast Hit Player(
  • Event Player.skill_GunsLoc_i3[0], Event Player.skill_GunsLoc_i3[0] + -2 * Event Player.skill_Gun_face[0], All Players(Team 2),
  • Event Player, True) == 0);
  • Event Player.skill_GunsLoc_i3[0] += Event Player.skill_Gun_face[0];
  • Play Effect(All Players(All Teams), Good Explosion, Event Player.color, Event Player.skill_GunsLoc_i3[0], 0.500);
  • Wait(0.032, Ignore Condition);
  • End;
  • If(Ray Cast Hit Player(Event Player.skill_GunsLoc_i3[0], Event Player.skill_GunsLoc_i3[0] + -2 * Event Player.skill_Gun_face[0],
  • All Players(Team 2), Event Player, True) != 0);
  • Event Player.skill_Gun_shootBot[0] = Ray Cast Hit Player(Event Player.skill_GunsLoc_i3[0],
  • Event Player.skill_GunsLoc_i3[0] + -2 * Event Player.skill_Gun_face[0], All Players(Team 2), Event Player, True);
  • If(Distance Between(Event Player.skill_GunsLoc_i3[0], World Vector Of(
  • Event Player.skill_Gun_shootBot[0].bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player.skill_Gun_shootBot[0]))][Is Using Ability 1(Event Player.skill_Gun_shootBot[0]) ? 11 : (Is Crouching(
  • Event Player.skill_Gun_shootBot[0]) ? 1 : (Throttle Of(Event Player.skill_Gun_shootBot[0]) == Vector(0, 0, 0) ? 0 : 12))],
  • Event Player.skill_Gun_shootBot[0], Rotation And Translation))
  • <= Event Player.skill_Gun_shootBot[0].bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player.skill_Gun_shootBot[0]))][2] + 0.600);
  • If(Hero Of(Event Player.skill_Gun_shootBot[0]) == Hero(Brigitte));
  • Clear Status(Event Player.skill_Gun_shootBot[0], Invincible);
  • Destroy Effect(Event Player.skill_Gun_shootBot[0].ai_2);
  • End;
  • Event Player.skill_Gun_hit[0] = 1;
  • End;
  • Damage(Event Player.skill_Gun_shootBot[0], Event Player, 50);
  • Event Player.skill_GunsLoc_i3[0] = Local Vector Of(Event Player.skill_GunsLoc_i3[0], Event Player.skill_Gun_shootBot[0],
  • Rotation And Translation);
  • Event Player.skill_Gun_face[0] = Local Vector Of(Event Player.skill_Gun_face[0], Event Player.skill_Gun_shootBot[0], Rotation);
  • Destroy Effect(Event Player.skilleffect_i2[0]);
  • Create Beam Effect(All Players(All Teams), Symmetra Projector Beam, World Vector Of(Event Player.skill_GunsLoc_i3[0],
  • Event Player.skill_Gun_shootBot[0], Rotation And Translation), World Vector Of(Event Player.skill_GunsLoc_i3[0],
  • Event Player.skill_Gun_shootBot[0], Rotation And Translation) + -2 * World Vector Of(Event Player.skill_Gun_face[0],
  • Event Player.skill_Gun_shootBot[0], Rotation), Color(Team 1), Visible To Position and Radius);
  • Event Player.skilleffect_i2[0] = Last Created Entity;
  • Else;
  • Destroy Effect(Event Player.skilleffect_i2[0]);
  • Event Player.skill_Gun_fire[0] = 0;
  • Event Player.skilleffect_i2[0] = 0;
  • Event Player.skill_Gun_shootBot[0] = 0;
  • Event Player.skill_Gun_face[0] = 0;
  • Event Player.skill_GunsLoc_i3[0] = 0;
  • Event Player.skill_Gun_hit[0] = 0;
  • Set Ultimate Charge(Event Player, Ultimate Charge Percent(Event Player) + 25);
  • Wait(0.500, Ignore Condition);
  • Abort;
  • End;
  • Skip If(Event Player.skill_Gun_hit[0] == 0, 1);
  • Small Message(Event Player, String("{0}!", String("Hit")));
  • While(Distance Between(Eye Position(Event Player), Event Player.skill_Gun_shootBot[0] != 0 ? World Vector Of(
  • Event Player.skill_GunsLoc_i3[0], Event Player.skill_Gun_shootBot[0], Rotation And Translation)
  • : Event Player.skill_GunsLoc_i3[0]) < 12 && Event Player.choose_skill == 2);
  • Wait(0.100, Ignore Condition);
  • End;
  • Set Status(Event Player, Null, Burning, 0.200);
  • Event Player.skill_Gun_fire[0] = 1;
  • Wait(0.016, Ignore Condition);
  • Damage(Event Player.skill_Gun_shootBot[0], Event Player, 700);
  • Damage(Filtered Array(Players Within Radius(Event Player.skill_Gun_shootBot[0] != 0 ? World Vector Of(
  • Event Player.skill_GunsLoc_i3[0], Event Player.skill_Gun_shootBot[0], Rotation And Translation)
  • : Event Player.skill_GunsLoc_i3[0], 10, All Teams, Off), Current Array Element != Event Player.skill_Gun_shootBot[0]),
  • Event Player, 100);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Sound, Color(White),
  • Event Player.skill_Gun_shootBot[0] != 0 ? World Vector Of(Event Player.skill_GunsLoc_i3[0], Event Player.skill_Gun_shootBot[0],
  • Rotation And Translation) : Event Player.skill_GunsLoc_i3[0], 80);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Effect, Color(White),
  • Event Player.skill_Gun_shootBot[0] != 0 ? World Vector Of(Event Player.skill_GunsLoc_i3[0], Event Player.skill_Gun_shootBot[0],
  • Rotation And Translation) : Event Player.skill_GunsLoc_i3[0], 1);
  • Destroy Effect(Event Player.skilleffect_i2[0]);
  • Wait(0.016, Ignore Condition);
  • Event Player.skill_Gun_fire[0] = 0;
  • Event Player.skilleffect_i2[0] = 0;
  • Event Player.skill_Gun_shootBot[0] = 0;
  • Event Player.skill_Gun_face[0] = 0;
  • Event Player.skill_GunsLoc_i3[0] = 0;
  • Event Player.skill_Gun_hit[0] = 0;
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("Gun_R")
  • {
  • event
  • {
  • Subroutine;
  • skill_Rgun;
  • }
  • actions
  • {
  • Set Ultimate Charge(Event Player, Ultimate Charge Percent(Event Player) - 40);
  • Event Player.skill_GunsLoc_i3[1] = World Vector Of(Vector(-0.800, 1, 0), Event Player, Rotation And Translation);
  • Event Player.skill_Gun_face[1] = Facing Direction Of(Event Player);
  • Play Effect(All Players(All Teams), Wrecking Ball Piledriver Impact Sound, Color(White), Event Player.skill_GunsLoc_i3[1], 40);
  • Create Beam Effect(All Players(All Teams), Symmetra Turret Beam, Event Player.skill_GunsLoc_i3[1],
  • Event Player.skill_GunsLoc_i3[1] + Event Player.skill_Gun_face[1] * -2, Color(Team 1), Visible To Position and Radius);
  • Event Player.skilleffect_i2[1] = Last Created Entity;
  • Wait(0.016, Ignore Condition);
  • While(Distance Between(Event Player.skill_GunsLoc_i3[1], Eye Position(Event Player)) < 20 && Ray Cast Hit Player(
  • Event Player.skill_GunsLoc_i3[1], Event Player.skill_GunsLoc_i3[1] + -2 * Event Player.skill_Gun_face[1], All Players(Team 2),
  • Event Player, True) == 0);
  • Event Player.skill_GunsLoc_i3[1] += Event Player.skill_Gun_face[1];
  • Play Effect(All Players(All Teams), Good Explosion, Event Player.color, Event Player.skill_GunsLoc_i3[1], 0.500);
  • Wait(0.032, Ignore Condition);
  • End;
  • If(Ray Cast Hit Player(Event Player.skill_GunsLoc_i3[1], Event Player.skill_GunsLoc_i3[1] + -2 * Event Player.skill_Gun_face[1],
  • All Players(Team 2), Event Player, True) != 0);
  • Event Player.skill_Gun_shootBot[1] = Ray Cast Hit Player(Event Player.skill_GunsLoc_i3[1],
  • Event Player.skill_GunsLoc_i3[1] + -2 * Event Player.skill_Gun_face[1], All Players(Team 2), Event Player, True);
  • If(Distance Between(Event Player.skill_GunsLoc_i3[1], World Vector Of(
  • Event Player.skill_Gun_shootBot[1].bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player.skill_Gun_shootBot[1]))][Is Using Ability 1(Event Player.skill_Gun_shootBot[1]) ? 11 : (Is Crouching(
  • Event Player.skill_Gun_shootBot[1]) ? 1 : (Throttle Of(Event Player.skill_Gun_shootBot[1]) == Vector(0, 0, 0) ? 0 : 12))],
  • Event Player.skill_Gun_shootBot[1], Rotation And Translation))
  • <= Event Player.skill_Gun_shootBot[1].bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player.skill_Gun_shootBot[1]))][2] + 0.600);
  • If(Hero Of(Event Player.skill_Gun_shootBot[1]) == Hero(Brigitte));
  • Clear Status(Event Player.skill_Gun_shootBot[1], Invincible);
  • Destroy Effect(Event Player.skill_Gun_shootBot[1].ai_2);
  • End;
  • Event Player.skill_Gun_hit[1] = 1;
  • End;
  • Damage(Event Player.skill_Gun_shootBot[1], Event Player, 50);
  • Event Player.skill_GunsLoc_i3[1] = Local Vector Of(Event Player.skill_GunsLoc_i3[1], Event Player.skill_Gun_shootBot[1],
  • Rotation And Translation);
  • Event Player.skill_Gun_face[1] = Local Vector Of(Event Player.skill_Gun_face[1], Event Player.skill_Gun_shootBot[1], Rotation);
  • Destroy Effect(Event Player.skilleffect_i2[1]);
  • Create Beam Effect(All Players(All Teams), Symmetra Projector Beam, World Vector Of(Event Player.skill_GunsLoc_i3[1],
  • Event Player.skill_Gun_shootBot[1], Rotation And Translation), World Vector Of(Event Player.skill_GunsLoc_i3[1],
  • Event Player.skill_Gun_shootBot[1], Rotation And Translation) + -2 * World Vector Of(Event Player.skill_Gun_face[1],
  • Event Player.skill_Gun_shootBot[1], Rotation), Color(Team 1), Visible To Position and Radius);
  • Event Player.skilleffect_i2[1] = Last Created Entity;
  • Else;
  • Destroy Effect(Event Player.skilleffect_i2[1]);
  • Event Player.skill_Gun_fire[1] = 0;
  • Event Player.skilleffect_i2[1] = 0;
  • Event Player.skill_Gun_shootBot[1] = 0;
  • Event Player.skill_Gun_face[1] = 0;
  • Event Player.skill_GunsLoc_i3[1] = 0;
  • Event Player.skill_Gun_hit[1] = 0;
  • Set Ultimate Charge(Event Player, Ultimate Charge Percent(Event Player) + 25);
  • Wait(0.500, Ignore Condition);
  • Abort;
  • End;
  • Skip If(Event Player.skill_Gun_hit[1] == 0, 1);
  • Small Message(Event Player, String("{0}!", String("Hit")));
  • While(Distance Between(Eye Position(Event Player), Event Player.skill_Gun_shootBot[1] != 0 ? World Vector Of(
  • Event Player.skill_GunsLoc_i3[1], Event Player.skill_Gun_shootBot[1], Rotation And Translation)
  • : Event Player.skill_GunsLoc_i3[1]) < 12 && Event Player.choose_skill == 2);
  • Wait(0.100, Ignore Condition);
  • End;
  • Set Status(Event Player, Null, Burning, 0.200);
  • Event Player.skill_Gun_fire[1] = 1;
  • Wait(0.016, Ignore Condition);
  • Damage(Event Player.skill_Gun_shootBot[1], Event Player, 700);
  • Damage(Filtered Array(Players Within Radius(Event Player.skill_Gun_shootBot[1] != 0 ? World Vector Of(
  • Event Player.skill_GunsLoc_i3[1], Event Player.skill_Gun_shootBot[1], Rotation And Translation)
  • : Event Player.skill_GunsLoc_i3[1], 10, All Teams, Off), Current Array Element != Event Player.skill_Gun_shootBot[1]),
  • Event Player, 100);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Sound, Color(White),
  • Event Player.skill_Gun_shootBot[1] != 0 ? World Vector Of(Event Player.skill_GunsLoc_i3[1], Event Player.skill_Gun_shootBot[1],
  • Rotation And Translation) : Event Player.skill_GunsLoc_i3[1], 80);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Effect, Color(White),
  • Event Player.skill_Gun_shootBot[1] != 0 ? World Vector Of(Event Player.skill_GunsLoc_i3[1], Event Player.skill_Gun_shootBot[1],
  • Rotation And Translation) : Event Player.skill_GunsLoc_i3[1], 1);
  • Destroy Effect(Event Player.skilleffect_i2[1]);
  • Wait(0.016, Ignore Condition);
  • Event Player.skill_Gun_fire[1] = 0;
  • Event Player.skilleffect_i2[1] = 0;
  • Event Player.skill_Gun_shootBot[1] = 0;
  • Event Player.skill_Gun_face[1] = 0;
  • Event Player.skill_GunsLoc_i3[1] = 0;
  • Event Player.skill_Gun_hit[1] = 0;
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("——————Skill————————")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("——————equiment——————")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("闪避")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Altitude Of(Event Player) < 0.200;
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Invincible, 0.500);
  • Event Player.skill = 3;
  • Wait(0.016, Ignore Condition);
  • Allow Button(Event Player, Button(Jump));
  • Press Button(Event Player, Button(Jump));
  • Wait(0.100, Ignore Condition);
  • Apply Impulse(Event Player, Throttle Of(Event Player) == Vector(0, 0, 0) ? Vector(0, 0, -1) : Throttle Of(Event Player), 10,
  • To Player, Incorporate Contrary Motion);
  • Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0);
  • Press Button(Event Player, Button(Jump));
  • Disallow Button(Event Player, Button(Jump));
  • Wait Until(Is On Ground(Event Player), 0.550);
  • Start Rule(Playerstate, Restart Rule);
  • Wait(0.300, Restart When True);
  • Event Player.skill = 0;
  • }
  • }
  • rule("左拉力(新2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ultimate)) == True;
  • Has Status(Event Player, Stunned) == False;
  • Is Alive(Event Player) == True;
  • Event Player.skill != 1;
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • actions
  • {
  • Abort If(Event Player.skill_i1 != 0);
  • Destroy Effect(Event Player.eff_strings[0]);
  • Event Player.in_L = Global.A;
  • Event Player.in_L = Filtered Array(Event Player.in_L, Distance Between(Vector(X Component Of(Current Array Element),
  • Y Component Of(Current Array Element) == 0 ? Min(50, Y Component Of(Eye Position(Event Player))) : Y Component Of(
  • Current Array Element), Z Component Of(Current Array Element)), Eye Position(Event Player))
  • < 50 + Global.B[Index Of Array Value(Global.A, Current Array Element)]);
  • Skip If(Index Of Array Value(Event Player.in_L, First Of(Filtered Array(Event Player.in_L, Distance Between(Position Of(
  • Event Player), Vector(X Component Of(Current Array Element), Y Component Of(Current Array Element) == 0 ? Min(50,
  • Y Component Of(Position Of(Event Player))) : Y Component Of(Current Array Element), Z Component Of(Current Array Element)))
  • <= Global.B[Index Of Array Value(Global.A, Current Array Element)]))) == -1, 1);
  • Event Player.in_L[Index Of Array Value(Event Player.in_L, First Of(Filtered Array(Event Player.in_L, Distance Between(Position Of(
  • Event Player), Vector(X Component Of(Current Array Element), Y Component Of(Current Array Element) == 0 ? Min(50,
  • Y Component Of(Position Of(Event Player))) : Y Component Of(Current Array Element), Z Component Of(Current Array Element)))
  • <= Global.B[Index Of Array Value(Global.A, Current Array Element)])))] = Vector(1000, 0, 0);
  • Event Player.endPT_L = World Vector Of(Vector(0.500, 0.700, 0), Event Player, Rotation And Translation);
  • Event Player.rt_L = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 45, Null, Event Player, True);
  • If(Distance Between(Position Of(Event Player), Event Player.rt_L) < 44);
  • Event Player.ar_shoot[0] = True;
  • Else;
  • Event Player.ar_shoot[0] = False;
  • End;
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Wrecking Ball Piledriver Impact Sound, Color(White), Event Player.endPT_L, 20);
  • "左后"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Evaluate Once(World Vector Of(Vector(1, 0.800, 1), Event Player,
  • Rotation And Translation)), World Vector Of(Vector(0.700, 0.800, 0.400), Event Player, Rotation And Translation), Color(White),
  • Position and Radius);
  • Event Player.eff_strings[1] = Last Created Entity;
  • Wait(0.016, Ignore Condition);
  • "左前"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Evaluate Once(World Vector Of(Vector(1, 0.800, 1), Event Player,
  • Rotation And Translation)), Event Player.endPT_L, Color(White), Position and Radius);
  • Event Player.eff_strings[2] = Last Created Entity;
  • Event Player.dir_L = Facing Direction Of(Event Player) * 1.800;
  • Event Player.endPT_L += Event Player.dir_L;
  • Wait(0.016, Ignore Condition);
  • While((Is True For Any(Event Player.in_L, Distance Between(Vector(X Component Of(Current Array Element), Y Component Of(
  • Current Array Element) == 0 ? Min(50, Y Component Of(Event Player.endPT_L)) : Y Component Of(Current Array Element),
  • Z Component Of(Current Array Element)), Event Player.endPT_L) < Global.B[Index Of Array Value(Global.A, Current Array Element)
  • ]) || Ray Cast Hit Player(Event Player.endPT_L, Event Player.endPT_L + Event Player.dir_L * 1, All Players(Team 2),
  • Event Player, False) != 0) == False);
  • Wait(0.032, Ignore Condition);
  • Event Player.endPT_L += Event Player.dir_L;
  • Skip If(Distance Between(Position Of(Event Player), Event Player.endPT_L) > Distance Between(Position Of(Event Player),
  • Event Player.rt_L), 1);
  • End;
  • Destroy Effect(Event Player.eff_strings[1]);
  • Destroy Effect(Event Player.eff_strings[2]);
  • If(Is True For Any(Event Player.in_L, Distance Between(Vector(X Component Of(Current Array Element), Y Component Of(
  • Current Array Element) == 0 ? Min(50, Y Component Of(Event Player.endPT_L)) : Y Component Of(Current Array Element),
  • Z Component Of(Current Array Element)), Event Player.endPT_L) < Global.B[Index Of Array Value(Global.A, Current Array Element)
  • ]) == True);
  • Event Player.HL = Index Of Array Value(Global.A, First Of(Filtered Array(Event Player.in_L, Distance Between(Y Component Of(
  • Current Array Element) == 0 ? Vector(X Component Of(Current Array Element), Min(50, Y Component Of(Event Player.endPT_L)),
  • Z Component Of(Current Array Element)) : Current Array Element, Event Player.endPT_L) < Global.B[Index Of Array Value(Global.A,
  • Current Array Element)])));
  • Event Player.ar_shoot[0] = True;
  • Event Player.endPT_L = (Y Component Of(Global.A[Event Player.HL]) == 0 ? Vector(X Component Of(Global.A[Event Player.HL]),
  • Y Component Of(Event Player.endPT_L), Z Component Of(Global.A[Event Player.HL])) : Global.A[Event Player.HL])
  • + Direction Towards(Y Component Of(Global.A[Event Player.HL]) == 0 ? Vector(X Component Of(Global.A[Event Player.HL]),
  • Y Component Of(Event Player.endPT_L), Z Component Of(Global.A[Event Player.HL])) : Global.A[Event Player.HL],
  • Event Player.endPT_L) * Global.B[Event Player.HL];
  • End;
  • "勾中玩家"
  • If(Ray Cast Hit Player(Event Player.endPT_L, Event Player.endPT_L + Event Player.dir_L * 2, All Players(All Teams), Event Player,
  • False) != 0);
  • Event Player.tL = Ray Cast Hit Player(Event Player.endPT_L, Event Player.endPT_L + Event Player.dir_L * 2, All Players(All Teams),
  • Event Player, False);
  • Wait(0.016, Ignore Condition);
  • "左勾住人"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, World Vector Of(Vector(0.400, 1, 0), Event Player,
  • Rotation And Translation) + Direction Towards(Position Of(Event Player), Event Player.endPT_L) * 0.300, World Vector Of(
  • Evaluate Once(Local Vector Of(Event Player.endPT_L, Event Player.tL, Rotation And Translation)), Event Player.tL,
  • Rotation And Translation), Color(White), Position and Radius);
  • Event Player.eff_strings[3] = Last Created Entity;
  • Call Subroutine(LT);
  • Else If(Event Player.ar_shoot[0]);
  • Wait(0.016, Ignore Condition);
  • "左勾住"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, World Vector Of(Vector(0.400, 1, 0), Event Player,
  • Rotation And Translation) + Direction Towards(Position Of(Event Player), Event Player.endPT_L) * 0.300, Event Player.endPT_L,
  • Color(White), Position and Radius);
  • Event Player.eff_strings[3] = Last Created Entity;
  • Call Subroutine(LT);
  • Else;
  • Event Player.endPT_L = 0;
  • End;
  • Wait(0.016, Ignore Condition);
  • Destroy Effect(Event Player.eff_strings[3]);
  • "左"
  • Create Beam Effect(Event Player, Grapple Beam, World Vector Of(Vector(0.700, 0.800, 0.400), Event Player,
  • Rotation And Translation), World Vector Of(Vector(0.550, 0.700, -0.350), Event Player, Rotation And Translation), Color(White),
  • Position and Radius);
  • Event Player.eff_strings[0] = Last Created Entity;
  • Event Player.tL = 0;
  • Start Rule(tensionAll, Restart Rule);
  • Event Player.rt_L = 0;
  • Start Rule(Playerstate, Restart Rule);
  • Event Player.endPT_L = 0;
  • Wait(0.080, Ignore Condition);
  • }
  • }
  • rule("右拉力(新2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • Has Status(Event Player, Stunned) == False;
  • Is Alive(Event Player) == True;
  • Event Player.skill != 2;
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • actions
  • {
  • Abort If(Event Player.skill_i1 != 0);
  • Destroy Effect(Event Player.eff_strings[5]);
  • Event Player.in_R = Global.A;
  • Event Player.in_R = Filtered Array(Event Player.in_R, Distance Between(Vector(X Component Of(Current Array Element),
  • Y Component Of(Current Array Element) == 0 ? Min(50, Y Component Of(Eye Position(Event Player))) : Y Component Of(
  • Current Array Element), Z Component Of(Current Array Element)), Eye Position(Event Player))
  • < 50 + Global.B[Index Of Array Value(Global.A, Current Array Element)]);
  • Skip If(Index Of Array Value(Event Player.in_R, First Of(Filtered Array(Event Player.in_R, Distance Between(Position Of(
  • Event Player), Vector(X Component Of(Current Array Element), Y Component Of(Current Array Element) == 0 ? Min(50,
  • Y Component Of(Position Of(Event Player))) : Y Component Of(Current Array Element), Z Component Of(Current Array Element)))
  • <= Global.B[Index Of Array Value(Global.A, Current Array Element)]))) == -1, 1);
  • Event Player.in_R[Index Of Array Value(Event Player.in_R, First Of(Filtered Array(Event Player.in_R, Distance Between(Position Of(
  • Event Player), Vector(X Component Of(Current Array Element), Y Component Of(Current Array Element) == 0 ? Min(50,
  • Y Component Of(Position Of(Event Player))) : Y Component Of(Current Array Element), Z Component Of(Current Array Element)))
  • <= Global.B[Index Of Array Value(Global.A, Current Array Element)])))] = Vector(1000, 0, 0);
  • Event Player.endPT_R = World Vector Of(Vector(-0.500, 0.700, 0), Event Player, Rotation And Translation);
  • Event Player.rt_R = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 45, Null, Event Player, True);
  • If(Distance Between(Position Of(Event Player), Event Player.rt_R) < 44);
  • Event Player.ar_shoot[1] = True;
  • Else;
  • Event Player.ar_shoot[1] = False;
  • End;
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Wrecking Ball Piledriver Impact Sound, Color(White), Event Player.endPT_R, 20);
  • "右后"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Evaluate Once(World Vector Of(Vector(-1, 0.800, 1), Event Player,
  • Rotation And Translation)), World Vector Of(Vector(-0.700, 0.800, 0.400), Event Player, Rotation And Translation), Color(
  • White), Position and Radius);
  • Event Player.eff_strings[6] = Last Created Entity;
  • Wait(0.016, Ignore Condition);
  • "右前"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Evaluate Once(World Vector Of(Vector(-1, 0.800, 1), Event Player,
  • Rotation And Translation)), Event Player.endPT_R, Color(White), Position and Radius);
  • Event Player.eff_strings[7] = Last Created Entity;
  • Event Player.dir_R = Facing Direction Of(Event Player) * 1.800;
  • Event Player.endPT_R += Event Player.dir_R;
  • Wait(0.016, Ignore Condition);
  • While((Is True For Any(Event Player.in_R, Distance Between(Vector(X Component Of(Current Array Element), Y Component Of(
  • Current Array Element) == 0 ? Min(50, Y Component Of(Event Player.endPT_R)) : Y Component Of(Current Array Element),
  • Z Component Of(Current Array Element)), Event Player.endPT_R) < Global.B[Index Of Array Value(Global.A, Current Array Element)
  • ]) || Ray Cast Hit Player(Event Player.endPT_R, Event Player.endPT_R + Event Player.dir_R * 1, All Players(Team 2),
  • Event Player, False) != 0) == False);
  • Wait(0.032, Ignore Condition);
  • Event Player.endPT_R += Event Player.dir_R;
  • Skip If(Distance Between(Position Of(Event Player), Event Player.endPT_R) > Distance Between(Position Of(Event Player),
  • Event Player.rt_R), 1);
  • End;
  • Destroy Effect(Event Player.eff_strings[6]);
  • Destroy Effect(Event Player.eff_strings[7]);
  • If(Is True For Any(Event Player.in_R, Distance Between(Vector(X Component Of(Current Array Element), Y Component Of(
  • Current Array Element) == 0 ? Min(50, Y Component Of(Event Player.endPT_R)) : Y Component Of(Current Array Element),
  • Z Component Of(Current Array Element)), Event Player.endPT_R) < Global.B[Index Of Array Value(Global.A, Current Array Element)
  • ]) == True);
  • Event Player.HR = Index Of Array Value(Global.A, First Of(Filtered Array(Event Player.in_R, Distance Between(Y Component Of(
  • Current Array Element) == 0 ? Vector(X Component Of(Current Array Element), Min(50, Y Component Of(Event Player.endPT_R)),
  • Z Component Of(Current Array Element)) : Current Array Element, Event Player.endPT_R) < Global.B[Index Of Array Value(Global.A,
  • Current Array Element)])));
  • Event Player.ar_shoot[1] = True;
  • Event Player.endPT_R = (Y Component Of(Global.A[Event Player.HR]) == 0 ? Vector(X Component Of(Global.A[Event Player.HR]),
  • Y Component Of(Event Player.endPT_R), Z Component Of(Global.A[Event Player.HR])) : Global.A[Event Player.HR])
  • + Direction Towards(Y Component Of(Global.A[Event Player.HR]) == 0 ? Vector(X Component Of(Global.A[Event Player.HR]),
  • Y Component Of(Event Player.endPT_R), Z Component Of(Global.A[Event Player.HR])) : Global.A[Event Player.HR],
  • Event Player.endPT_R) * Global.B[Event Player.HR];
  • End;
  • "勾中玩家"
  • If(Ray Cast Hit Player(Event Player.endPT_R, Event Player.endPT_R + Event Player.dir_R * 2, All Players(All Teams), Event Player,
  • False) != 0);
  • Event Player.tR = Ray Cast Hit Player(Event Player.endPT_R, Event Player.endPT_R + Event Player.dir_R * 2, All Players(All Teams),
  • Event Player, False);
  • Wait(0.016, Ignore Condition);
  • "右勾住人"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, World Vector Of(Vector(-0.400, 1, 0), Event Player,
  • Rotation And Translation) + Direction Towards(Position Of(Event Player), Event Player.endPT_R) * 0.300, World Vector Of(
  • Evaluate Once(Local Vector Of(Event Player.endPT_R, Event Player.tR, Rotation And Translation)), Event Player.tR,
  • Rotation And Translation), Color(White), Position and Radius);
  • Event Player.eff_strings[8] = Last Created Entity;
  • Call Subroutine(RT);
  • Else If(Event Player.ar_shoot[1]);
  • Wait(0.016, Ignore Condition);
  • "右勾住"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, World Vector Of(Vector(-0.400, 1, 0), Event Player,
  • Rotation And Translation) + Direction Towards(Position Of(Event Player), Event Player.endPT_R) * 0.300, Event Player.endPT_R,
  • Color(White), Position and Radius);
  • Event Player.eff_strings[8] = Last Created Entity;
  • Call Subroutine(RT);
  • Else;
  • Event Player.endPT_R = 0;
  • End;
  • Wait(0.016, Ignore Condition);
  • Destroy Effect(Event Player.eff_strings[8]);
  • "右"
  • Create Beam Effect(Event Player, Grapple Beam, World Vector Of(Vector(-0.700, 0.800, 0.400), Event Player,
  • Rotation And Translation), World Vector Of(Vector(-0.550, 0.700, -0.350), Event Player, Rotation And Translation), Color(
  • White), Position and Radius);
  • Event Player.eff_strings[5] = Last Created Entity;
  • Event Player.tR = 0;
  • Start Rule(tensionAll, Restart Rule);
  • Event Player.rt_R = 0;
  • Start Rule(Playerstate, Restart Rule);
  • Event Player.endPT_R = 0;
  • Wait(0.080, Ignore Condition);
  • }
  • }
  • rule("LT")
  • {
  • event
  • {
  • Subroutine;
  • LT;
  • }
  • actions
  • {
  • Event Player.rt_L = Distance Between(Position Of(Event Player), Event Player.endPT_L);
  • While(Absolute Value(Angle Between Vectors(Velocity Of(Event Player), Direction Towards(Position Of(Event Player),
  • Event Player.endPT_L))) > 90);
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_L), 8, To World,
  • Incorporate Contrary Motion);
  • Wait(0.016, Ignore Condition);
  • End;
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Vector(0, 3, 0) + Event Player.endPT_L), Max(8,
  • Distance Between(Position Of(Event Player), Event Player.endPT_L) * 0.400 + 4), To World, Incorporate Contrary Motion);
  • Modify Player Variable(Event Player, root, Append To Array, 1);
  • Start Rule(tensionAll, Restart Rule);
  • Start Rule(Playerstate, Restart Rule);
  • Wait Until(Is Button Held(Event Player, Button(Ultimate)) == False || Has Status(Event Player, Stunned) || Is Dead(
  • Event Player.tL), 99999);
  • Modify Player Variable(Event Player, root, Remove From Array By Value, 1);
  • Event Player.endPT_L = 0;
  • Event Player.tL = 0;
  • }
  • }
  • rule("RT")
  • {
  • event
  • {
  • Subroutine;
  • RT;
  • }
  • actions
  • {
  • Event Player.rt_R = Distance Between(Position Of(Event Player), Event Player.endPT_R);
  • While(Absolute Value(Angle Between Vectors(Velocity Of(Event Player), Direction Towards(Position Of(Event Player),
  • Event Player.endPT_R))) > 90);
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_R), 8, To World,
  • Incorporate Contrary Motion);
  • Wait(0.016, Ignore Condition);
  • End;
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Vector(0, 3, 0) + Event Player.endPT_R), Max(8,
  • Distance Between(Position Of(Event Player), Event Player.endPT_R) * 0.400 + 4), To World, Incorporate Contrary Motion);
  • Modify Player Variable(Event Player, root, Append To Array, 2);
  • Start Rule(tensionAll, Restart Rule);
  • Start Rule(Playerstate, Restart Rule);
  • Wait Until((Is Button Held(Event Player, Button(Ability 2)) == False && Event Player.skill != 2) || (Has Status(Event Player,
  • Stunned) || Is Dead(Event Player.tR)), 99999);
  • Modify Player Variable(Event Player, root, Remove From Array By Value, 2);
  • Event Player.endPT_R = 0;
  • Event Player.tR = 0;
  • }
  • }
  • rule("L_L")
  • {
  • event
  • {
  • Subroutine;
  • length_L;
  • }
  • actions
  • {
  • If(Event Player.tL != 0);
  • While(Event Player.rt_L != 0);
  • If(Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_L, Event Player.tL, Rotation And Translation))
  • < Event Player.rt_L);
  • Event Player.rt_L = Max(1, Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_L, Event Player.tL,
  • Rotation And Translation)));
  • Else;
  • If(Is Button Held(Event Player, Button(Interact)) && Event Player.rt_L < 45);
  • Event Player.rt_L = Min(45, 5 + Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_L, Event Player.tL,
  • Rotation And Translation)));
  • Else;
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), World Vector Of(Event Player.dir_L, Event Player.tL,
  • Rotation And Translation)), Min(5, Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_L,
  • Event Player.tL, Rotation And Translation)) - Event Player.rt_L), To World, Incorporate Contrary Motion);
  • End;
  • End;
  • Wait(0.032, Ignore Condition);
  • End;
  • Else;
  • While(Event Player.rt_L != 0);
  • If(Distance Between(Position Of(Event Player), Event Player.endPT_L) < Event Player.rt_L);
  • Event Player.rt_L = Max(1, Distance Between(Position Of(Event Player), Event Player.endPT_L));
  • Else;
  • If(Is Button Held(Event Player, Button(Interact)) && Event Player.rt_L < 45);
  • Event Player.rt_L = Min(45, 5 + Distance Between(Position Of(Event Player), Event Player.endPT_L));
  • Else;
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_L), Min(5, Distance Between(
  • Position Of(Event Player), Event Player.endPT_L) - Event Player.rt_L), To World, Incorporate Contrary Motion);
  • End;
  • End;
  • Wait(0.032, Ignore Condition);
  • End;
  • End;
  • }
  • }
  • rule("L_R")
  • {
  • event
  • {
  • Subroutine;
  • length_R;
  • }
  • actions
  • {
  • If(Event Player.tR != 0);
  • While(Event Player.rt_R != 0);
  • If(Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_R, Event Player.tR, Rotation And Translation))
  • < Event Player.rt_R);
  • Event Player.rt_R = Max(1, Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_R, Event Player.tR,
  • Rotation And Translation)));
  • Else;
  • If(Is Button Held(Event Player, Button(Interact)) && Event Player.rt_R < 45);
  • Event Player.rt_R = Min(45, 5 + Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_R, Event Player.tR,
  • Rotation And Translation)));
  • Else;
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), World Vector Of(Event Player.dir_R, Event Player.tR,
  • Rotation And Translation)), Min(5, Distance Between(Position Of(Event Player), World Vector Of(Event Player.dir_R,
  • Event Player.tR, Rotation And Translation)) - Event Player.rt_R), To World, Incorporate Contrary Motion);
  • End;
  • End;
  • Wait(0.032, Ignore Condition);
  • End;
  • Else;
  • While(Event Player.rt_R != 0);
  • If(Distance Between(Position Of(Event Player), Event Player.endPT_R) < Event Player.rt_R);
  • Event Player.rt_R = Max(1, Distance Between(Position Of(Event Player), Event Player.endPT_R));
  • Else;
  • If(Is Button Held(Event Player, Button(Interact)) && Event Player.rt_R < 45);
  • Event Player.rt_R = Min(45, 5 + Distance Between(Position Of(Event Player), Event Player.endPT_R));
  • Else;
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_R), Min(5, Distance Between(
  • Position Of(Event Player), Event Player.endPT_R) - Event Player.rt_R), To World, Incorporate Contrary Motion);
  • End;
  • End;
  • Wait(0.032, Ignore Condition);
  • End;
  • End;
  • }
  • }
  • rule("拉力{tensionAll}")
  • {
  • event
  • {
  • Subroutine;
  • tensionAll;
  • }
  • actions
  • {
  • Stop Accelerating(Event Player);
  • Wait(0.016, Ignore Condition);
  • Skip If(Array Contains(Event Player.root, 3) == False, 2);
  • "喷气"
  • Start Accelerating(Event Player, Count Of(Event Player.root) == 1 ? Vector(1, 0, 1) * Facing Direction Of(Event Player) : Vector(1,
  • 0, 1) * Velocity Of(Event Player), 11, Event Player.gason, To World, Direction Rate and Max Speed);
  • Start Rule(GAS, Do Nothing);
  • If(Array Contains(Event Player.root, 1) == True);
  • If(Event Player.tL == 0);
  • If(Array Contains(Event Player.root, 3) == True);
  • "L圆周"
  • Start Accelerating(Event Player, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Event Player.endPT_L,
  • Position Of(Event Player))) + (Y Component Of(Cross Product(Velocity Of(Event Player), Direction Towards(Position Of(
  • Event Player), Event Player.endPT_L))) > 0 ? 90 : -90), 0), 8, (Absolute Value(Angle Difference(
  • Horizontal Angle From Direction(Velocity Of(Event Player)), Horizontal Angle From Direction(Direction Towards(Position Of(
  • Event Player), Event Player.endPT_L)))) > 85) * 30, To World, Direction Rate and Max Speed);
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_L), !Is Button Held(Event Player,
  • Button(Interact)) * 90, 1 + Speed Of(Event Player) * 0.040, To World, Direction Rate and Max Speed);
  • Else;
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_L), 12, (Absolute Value(
  • Angle Difference(Horizontal Angle From Direction(Velocity Of(Event Player)), Horizontal Angle From Direction(Direction Towards(
  • Position Of(Event Player), Event Player.endPT_L)))) < 85) * 20, To World, Direction Rate and Max Speed);
  • End;
  • Else;
  • Event Player.dir_L = Local Vector Of(Event Player.endPT_L, Event Player.tL, Rotation And Translation);
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), World Vector Of(Event Player.dir_L, Event Player.tL,
  • Rotation And Translation)), 12, 25, To World, Direction Rate and Max Speed);
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), World Vector Of(Evaluate Once(Event Player.dir_L),
  • Event Player.tL, Rotation And Translation)), !Is Button Held(Event Player, Button(Interact)) * 90, 1.500, To World,
  • Direction Rate and Max Speed);
  • End;
  • Start Rule(length_L, Restart Rule);
  • End;
  • If(Array Contains(Event Player.root, 2) == True);
  • If(Event Player.tR == 0);
  • If(Array Contains(Event Player.root, 3) == True);
  • "R圆周"
  • Start Accelerating(Event Player, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Event Player.endPT_R,
  • Position Of(Event Player))) + (Y Component Of(Cross Product(Velocity Of(Event Player), Direction Towards(Position Of(
  • Event Player), Event Player.endPT_R))) > 0 ? 90 : -90), 0), 8, (Absolute Value(Angle Difference(
  • Horizontal Angle From Direction(Velocity Of(Event Player)), Horizontal Angle From Direction(Direction Towards(Position Of(
  • Event Player), Event Player.endPT_R)))) > 85) * 30, To World, Direction Rate and Max Speed);
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_R), !Is Button Held(Event Player,
  • Button(Interact)) * 90, 1 + Speed Of(Event Player) * 0.040, To World, Direction Rate and Max Speed);
  • Else;
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), Event Player.endPT_R), 12, (Absolute Value(
  • Angle Difference(Horizontal Angle From Direction(Velocity Of(Event Player)), Horizontal Angle From Direction(Direction Towards(
  • Position Of(Event Player), Event Player.endPT_R)))) < 85) * 20, To World, Direction Rate and Max Speed);
  • End;
  • Else;
  • Event Player.dir_R = Local Vector Of(Event Player.endPT_R, Event Player.tR, Rotation And Translation);
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), World Vector Of(Evaluate Once(Local Vector Of(
  • Event Player.endPT_R, Event Player.tR, Rotation And Translation)), Event Player.tR, Rotation And Translation)), 12, 25,
  • To World, Direction Rate and Max Speed);
  • Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), World Vector Of(Evaluate Once(Local Vector Of(
  • Event Player.endPT_R, Event Player.tR, Rotation And Translation)), Event Player.tR, Rotation And Translation)),
  • !Is Button Held(Event Player, Button(Interact)) * 90, 1.500, To World, Direction Rate and Max Speed);
  • End;
  • Start Rule(length_R, Restart Rule);
  • End;
  • }
  • }
  • rule("收绳")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Reload)) == True;
  • }
  • actions
  • {
  • If(Event Player.endPT_L && Absolute Value(Angle Between Vectors(Velocity Of(Event Player), Direction Towards(Position Of(
  • Event Player), Event Player.tL != 0 ? World Vector Of(Event Player.dir_L, Event Player.tL, Rotation And Translation)
  • : Event Player.endPT_L))) > 70 && True);
  • : Event Player.endPT_L))) > 60 && True);
  • Event Player.rt_L *= 0.300;
  • Apply Impulse(Event Player, Velocity Of(Event Player) * -1, Speed Of(Event Player) * 0.400, To World, Incorporate Contrary Motion);
  • Else If(Event Player.endPT_R && Absolute Value(Angle Between Vectors(Velocity Of(Event Player), Direction Towards(Position Of(
  • Event Player), Event Player.tR != 0 ? World Vector Of(Event Player.dir_R, Event Player.tR, Rotation And Translation)
  • : Event Player.endPT_R))) > 70 && True);
  • : Event Player.endPT_R))) > 60 && True);
  • Event Player.rt_R *= 0.300;
  • Apply Impulse(Event Player, Velocity Of(Event Player) * -1, Speed Of(Event Player) * 0.400, To World, Incorporate Contrary Motion);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("喷气")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • (Is Button Held(Event Player, Button(Jump)) || Is Button Held(Event Player, Button(Ability 1))) == True;
  • Has Status(Event Player, Knocked Down) == False;
  • Event Player.skill != 3;
  • Has Status(Event Player, Stunned) == False;
  • Hero Of(Event Player) == Hero(Genji);
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • If(Custom String("LiWai") == Custom String("{0}", Event Player));
  • If(Array Contains(Array(Custom String("LiWai"), Custom String("ZeroGazuri")), Custom String("{0}", Event Player)) == True);
  • Event Player.color = Color(Rose);
  • Else If(Last Of(Sorted Array(All Players(Team 1), Player Stat(Current Array Element, Final Blows))) == Event Player);
  • Event Player.color = Color(Orange);
  • Else;
  • Event Player.color = Color(Team 1);
  • End;
  • Skip If(Altitude Of(Event Player) > 0.300, 2);
  • Apply Impulse(Event Player, Direction From Angles(Horizontal Angle From Direction(Velocity Of(Event Player) == Vector(0, 0, 0)
  • ? Facing Direction Of(Event Player) : Velocity Of(Event Player)), -80), 8, To World, Incorporate Contrary Motion);
  • Wait(0.200, Abort When False);
  • Modify Player Variable(Event Player, root, Append To Array, 3);
  • Start Rule(tensionAll, Restart Rule);
  • Start Rule(Playerstate, Restart Rule);
  • Wait(0.050, Ignore Condition);
  • Event Player.gason = 30;
  • Wait Until(Is On Ground(Event Player) || (Is Button Held(Event Player, Button(Jump)) == False && Is Button Held(Event Player,
  • Button(Ability 1)) == False), 99999);
  • Modify Player Variable(Event Player, root, Remove From Array By Value, 3);
  • Event Player.gason = 0;
  • Start Rule(tensionAll, Restart Rule);
  • Skip If(Is On Ground(Event Player) == True, 1);
  • Loop If Condition Is True;
  • Start Rule(Playerstate, Restart Rule);
  • }
  • }
  • rule("双喷")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Throttle Of(Event Player) != Vector(0, 0, 0);
  • Hero Of(Event Player) == Hero(Genji);
  • Event Player.skill != 3;
  • }
  • actions
  • {
  • If(Event Player.push_way == Throttle Of(Event Player));
  • Apply Impulse(Event Player, Throttle Of(Event Player), 30, To Player, Cancel Contrary Motion XYZ);
  • Play Effect(All Players(All Teams), Good Explosion, Event Player.color, World Vector Of(Vector(0, 0.700, 0), Event Player,
  • Rotation And Translation), 7);
  • Wait(1, Ignore Condition);
  • Else;
  • Event Player.push_way = Throttle Of(Event Player);
  • Wait(0.200, Restart When True);
  • End;
  • Event Player.push_way = 0;
  • }
  • }
  • rule("喷气效果")
  • {
  • event
  • {
  • Subroutine;
  • GAS;
  • }
  • actions
  • {
  • While(Array Contains(Event Player.root, 3) == True);
  • Play Effect(All Players(Team 1), Good Explosion, Event Player.color, World Vector Of(Vector(0, 0.300, -0.200), Event Player,
  • Rotation And Translation), 0.200);
  • Wait(0.100, Ignore Condition);
  • End;
  • }
  • }
  • rule("重生拉力")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • actions
  • {
  • Event Player.root = Empty Array;
  • Start Rule(tensionAll, Restart Rule);
  • }
  • }
  • rule("——————equiment——————")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("玩家重生")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Disable Movement Collision With Players(Event Player);
  • Set Status(Event Player, Null, Invincible, 7);
  • Skip If(Event Player.respond == 1, 1);
  • Start Forcing Player Position(Event Player, Vector(Random Real(-80, 80), 50, Random Real(-80, 80)), False);
  • Wait(0.500, Ignore Condition);
  • Start Forcing Throttle(Event Player, 0, 0.300, 0, 0.300, 0, 0.300);
  • Set Move Speed(Event Player, 200);
  • Disallow Button(Event Player, Button(Jump));
  • Wait(2, Ignore Condition);
  • Stop Forcing Player Position(Event Player);
  • }
  • }
  • rule("地图工坊变量")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Boss_Fight = Workshop Setting Toggle(Custom String("全局"), Custom String("仅限Boss战/Boss Fight Only"), False, 2);
  • Global.Language = Workshop Setting Combo(Custom String("全局"), Custom String("语言/Language"), 0, Array(Custom String("中文"),
  • Custom String("English")), 0);
  • Global.Difficulty = Workshop Setting Combo(Custom String("全局"), Custom String("难度/Difficulty"), 0, Array(Custom String(
  • "智障人机/Noob"), Custom String("新手训练/Easy"), Custom String("正常难度/Normal"), Custom String("困难模式/Hard"), Custom String(
  • "人间地狱/Hell")), 0);
  • "新手难度/Noob"), Custom String("简单难度/Easy"), Custom String("正常难度/Normal"), Custom String("困难难度/Hard"), Custom String(
  • "地狱难度/Hell")), 0);
  • Global.ai_adjustPerst = Array(0, 0.500, 1, 1.500, 2)[Global.Difficulty];
  • Global.Skill_name = Empty Array;
  • If(Global.Language == 0);
  • Global.ar_Difficult = Array(Custom String("智障人机"), Custom String("简单难度"), Custom String("正常难度"), Custom String("困难难度"),
  • Global.ar_Difficult = Array(Custom String("新手难度"), Custom String("简单难度"), Custom String("正常难度"), Custom String("困难难度"),
  • Custom String("地狱难度"));
  • Global.Skill_name[0] = Array(Ability Icon String(Hero(Genji), Button(Ultimate)), Custom String("螺旋斩"));
  • Global.Skill_name[1] = Array(Hero Icon String(Hero(Doomfist)), Custom String("巨人化[100%]"));
  • Global.Skill_name[2] = Array(Ability Icon String(Hero(D.Va), Button(Ability 2)), Custom String("雷枪[40%]"));
  • Create HUD Text(All Players(Team 1), Custom String("难度 【{0}】", Global.ar_Difficult[Global.Difficulty]), Custom String(
  • "Change Language/Difficulty in 【WorkshopSetting】"), Custom String("【地图工坊设置】可修改难度与语言"), Top, 0, Color(Yellow), Color(White),
  • Color(White), Visible To and String, Visible Always);
  • "Change Language/Difficulty in 【WorkshopSetting】"), Custom String("【地图工坊设置】可修改游戏难度"), Top, 0, Color(Yellow), Color(White),
  • Color(Orange), Visible To and String, Visible Always);
  • Create HUD Text(All Players(Team 1), Custom String("长按【{0}】3秒 开/关", Input Binding String(Button(Reload))), Null, Null, Right,
  • -2, Color(Gray), Color(White), Color(White), Visible To and String, Default Visibility);
  • Else If(Global.Language == 1);
  • Global.ar_Difficult = Array(Custom String("Noob"), Custom String("Easy"), Custom String("Normal"), Custom String("Hard"),
  • Custom String("Hell"));
  • Global.Skill_name[0] = Array(Ability Icon String(Hero(Genji), Button(Ultimate)), Custom String("Spiral Slash"));
  • Global.Skill_name[1] = Array(Hero Icon String(Hero(Doomfist)), Custom String("Giantization[100%]"));
  • Global.Skill_name[2] = Array(Ability Icon String(Hero(D.Va), Button(Ability 2)), Custom String("Thunder Spear[40%]"));
  • Create HUD Text(All Players(Team 1), Custom String("Difficulty 【{0}】", Global.ar_Difficult[Global.Difficulty]), Custom String(
  • "【地图工坊设置】可修改难度与语言"), Custom String("Change Difficulty in 【WorkshopSetting】"), Top, 0, Color(Yellow), Color(White), Color(
  • Orange), Visible To and String, Visible Always);
  • Create HUD Text(All Players(Team 1), Custom String("Difficulty [{0}]", Global.ar_Difficult[Global.Difficulty]), Null,
  • Custom String("Change Difficulty in [ WorkshopSetting ]"), Top, 0, Color(Yellow), Color(White), Color(Orange),
  • Visible To and String, Visible Always);
  • Create HUD Text(All Players(Team 1), Custom String("Hold R To on/off"), Null, Null, Right, -2, Color(Gray), Color(White), Color(
  • White), Visible To and String, Default Visibility);
  • End;
  • If(Global.Language == 0);
  • Create HUD Text(Filtered Array(All Players(Team 1), Current Array Element.rule == 0), Custom String("{0}\r\n{1}\r\n{2}",
  • Custom String("【Q】 发射左侧抓勾\r\n【E】 发射右侧抓勾\r\n【{0}】 放绳\r\n【R】 收绳", Input Binding String(Button(Interact))), Custom String(
  • "【左Shift】 喷射压缩气体\r\n【方向键X2】 暴气\r\n【左键】 攻击\r\n【右键】 特殊技能\r\n【近战】 切换技能"), Custom String(
  • "【蹲】 闪避 \r\n【长按蹲】 切换第一/第三人称\r\n在范围内攻击巨人的后颈以击杀巨人!\r\n有bug与意见在 workshop.codes 回复")), Null, Null, Right, -1, Color(White),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • Set Objective Description(All Players(All Teams), Custom String(
  • "代码: ZP1WW 作者:LonelyDwD 喜欢的话请在[workshop.codes] 点个赞吧"), Visible To and String);
  • "【蹲】 闪避 \r\n【长按蹲】 切换第一/第三人称\r\n在范围内攻击巨人的后颈以击杀巨人!\r\n有bug与意见在B站私信 [没人理会的逗逗]")), Null, Null, Right, -1, Color(White), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • Set Objective Description(All Players(All Teams), Custom String("代码: KAVGC 作者:逗逗 喜欢的话请在[Workshop.codes] 点个赞吧"),
  • Visible To and String);
  • Else If(Global.Language == 1);
  • Create HUD Text(Filtered Array(All Players(Team 1), Current Array Element.rule == 0), Custom String("{0}\r\n{1}\r\n{2}",
  • Custom String("Q/E :L / R Rope\r\n{0} :Loosen Rope\r\nR :Tighten Rope\r\nShift/Jump :Gas (Increase Speed)",
  • Input Binding String(Button(Interact))), Custom String("{0} :Attack\r\n{1} :Skill\r\n{2} :Skill Switch",
  • Input Binding String(Button(Primary Fire)), Input Binding String(Button(Secondary Fire)), Input Binding String(Button(Melee))),
  • Custom String(
  • "Crouch :Dodge\r\nCrouch(Hold) :1st / 3rd Camera\r\nAim for Titan's Nape To kill it!\r\nBug->leave comment at Workshop.codes",
  • Input Binding String(Button(Interact)))), Null, Null, Right, -1, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Set Objective Description(All Players(All Teams), Custom String(
  • "Code: ZP1WW Give a Like at [Workshop.codes] if U enjoy this Mode!"), Visible To and String);
  • "Code: KAVGC Give a Like at [Workshop.codes] if U enjoy this Mode!"), Visible To and String);
  • End;
  • }
  • }
  • rule("碰撞")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player), Vector(X Component Of(Global.A[Event Player.closest_tree]), Min(50, Y Component Of(
  • Position Of(Event Player))), Z Component Of(Global.A[Event Player.closest_tree]))) < Global.B[Event Player.closest_tree];
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Direction Towards(Vector(X Component Of(Global.A[Event Player.closest_tree]), Min(50, Y Component Of(
  • Position Of(Event Player))), Z Component Of(Global.A[Event Player.closest_tree])), Position Of(Event Player)), 1, To World,
  • Position Of(Event Player))), Z Component Of(Global.A[Event Player.closest_tree])), Position Of(Event Player)), 2, To World,
  • Cancel Contrary Motion);
  • Wait(0.050, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("碰撞")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.closest_tree = Index Of Array Value(Global.A, First Of(Sorted Array(Filtered Array(Filtered Array(Global.A,
  • Y Component Of(Current Array Element) == 0), Distance Between(Current Array Element, Position Of(Event Player) * Vector(1, 0,
  • 1)) < 30), Distance Between(Current Array Element, Position Of(Event Player) * Vector(1, 0, 1)))));
  • Wait(0.500, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("滑行铲地")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Altitude Of(Event Player) < 0.800;
  • Horizontal Speed Of(Event Player) > 10;
  • Y Component Of(Velocity Of(Event Player)) < 0;
  • Event Player.skill != 3;
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • actions
  • {
  • Set Gravity(Event Player, 0);
  • Apply Impulse(Event Player, Up, 0.010, To Player, Cancel Contrary Motion);
  • While(Altitude Of(Event Player) < 1 && Horizontal Speed Of(Event Player) > 8);
  • disabled Apply Impulse(Event Player, Velocity Of(Event Player) * Vector(-1, 0, -1), Max(1.500, Speed Of(Event Player) * 0.100), To World,
  • Incorporate Contrary Motion);
  • Apply Impulse(Event Player, Velocity Of(Event Player) * Vector(-1, 0, -1), Min(1.500, Speed Of(Event Player) * 0.200), To World,
  • Incorporate Contrary Motion);
  • Wait(0.050, Ignore Condition);
  • Skip If(Hero Of(Event Player) != Hero(Genji), 4);
  • End;
  • Start Rule(Playerstate, Restart Rule);
  • }
  • }
  • rule("Camera")
  • {
  • event
  • {
  • Subroutine;
  • Camera;
  • }
  • actions
  • {
  • If(Event Player.camera == 1);
  • If(Hero Of(Event Player) == Hero(Doomfist));
  • Start Camera(Event Player, Vector(0, 17, 0) + Position Of(Event Player) + Facing Direction Of(Event Player) * -8, Eye Position(
  • Event Player) + Facing Direction Of(Event Player) * 26, 33);
  • Else;
  • Start Camera(Event Player, World Vector Of(Vector(0, 3, 0), Event Player, Rotation And Translation) + Normalize(Velocity Of(
  • Event Player)) * Vector(-1, 0, -1) + Facing Direction Of(Event Player) * -4, Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 20, 35 + Speed Of(Event Player) * -0.300);
  • End;
  • Else;
  • Stop Camera(Event Player);
  • End;
  • }
  • }
  • rule("镜头")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Hero Of(Event Player) != Hero(Torbjörn);
  • }
  • actions
  • {
  • Wait(1, Abort When False);
  • Event Player.camera = (Event Player.camera + 1) % 2;
  • Start Rule(Camera, Restart Rule);
  • }
  • }
  • rule("PlayerState")
  • {
  • event
  • {
  • Subroutine;
  • Playerstate;
  • }
  • actions
  • {
  • Abort If(Hero Of(Event Player) != Hero(Genji));
  • "飞行速度"
  • If(Count Of(Event Player.root) > 0);
  • Set Move Speed(Event Player, 600);
  • Set Gravity(Event Player, 80);
  • Disallow Button(Event Player, Button(Jump));
  • Disallow Button(Event Player, Button(Crouch));
  • Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0);
  • Else If(Event Player.skill_i1 == 0);
  • Start Forcing Throttle(Event Player, 0, 0.300, 0, 0.300, 0, 0.300);
  • Set Move Speed(Event Player, 200);
  • Set Gravity(Event Player, 100);
  • End;
  • }
  • }
  • rule("玩家加入游戏")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • actions
  • {
  • Start Forcing Player Outlines(All Players(Team 2), All Players(Team 1), False, Color(White), Default);
  • Event Player.eff_strings = Empty Array;
  • "左"
  • Create Beam Effect(Event Player, Grapple Beam, World Vector Of(Vector(0.700, 0.800, 0.400), Event Player,
  • Rotation And Translation), World Vector Of(Vector(0.550, 0.700, -0.350), Event Player, Rotation And Translation), Color(White),
  • Visible To Position and Radius);
  • Event Player.eff_strings[0] = Last Created Entity;
  • Wait(0.016, Ignore Condition);
  • "右"
  • Create Beam Effect(Event Player, Grapple Beam, World Vector Of(Vector(-0.700, 0.800, 0.400), Event Player,
  • Rotation And Translation), World Vector Of(Vector(-0.550, 0.700, -0.350), Event Player, Rotation And Translation), Color(
  • White), Visible To Position and Radius);
  • Event Player.eff_strings[5] = Last Created Entity;
  • Create HUD Text(Event Player, Custom String("【{0}】Switch Skill: {1}{2}", Input Binding String(Button(Melee)),
  • Create HUD Text(Event Player, Custom String("[{0}] Skill Switch : {1}{2}", Input Binding String(Button(Melee)),
  • Global.Skill_name[Event Player.choose_skill][0], Global.Skill_name[Event Player.choose_skill][1]), Null, Null, Right, -0.900,
  • Color(Green), Color(White), Color(White), Visible To and String, Default Visibility);
  • Disallow Button(Event Player, Button(Ultimate));
  • Disallow Button(Event Player, Button(Ability 2));
  • Disallow Button(Event Player, Button(Ability 1));
  • Disallow Button(Event Player, Button(Jump));
  • Event Player.skill_GunsLoc_i3 = Empty Array;
  • If(Custom String("LiWai") == Custom String("{0}", Event Player));
  • If(Array Contains(Array(Custom String("LiWai")), Custom String("{0}", Event Player)) == True);
  • Create Icon(All Players(All Teams), Event Player, Fire, Visible To and Position, Color(Rose), False);
  • }
  • }
  • rule("玩家重生")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Disable Movement Collision With Players(Event Player);
  • Set Status(Event Player, Null, Phased Out, 9999);
  • Skip If(Event Player.respond == 1, 1);
  • Start Forcing Player Position(Event Player, Vector(Random Real(-80, 80), 50, Random Real(-80, 80)), False);
  • Wait(0.500, Ignore Condition);
  • Start Forcing Throttle(Event Player, 0, 0.300, 0, 0.300, 0, 0.300);
  • Set Move Speed(Event Player, 200);
  • Disallow Button(Event Player, Button(Jump));
  • Wait(2, Ignore Condition);
  • Stop Forcing Player Position(Event Player);
  • Clear Status(Event Player, Phased Out);
  • }
  • }
  • rule("可勾实体创建")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • Global.A = Empty Array;
  • Global.B = Empty Array;
  • For Global Variable(i, 0, 30, 1);
  • Global.wl_loc = Vector(Random Real(-150, 150), 0, Random Real(-150, 150));
  • Global.wl_size = Random Real(5, 12);
  • If(Is True For Any(Global.A, Distance Between(Current Array Element, Global.wl_loc) < 30) == False);
  • Modify Global Variable(A, Append To Array, Global.wl_loc);
  • Modify Global Variable(B, Append To Array, Global.wl_size);
  • Modify Global Variable(A, Append To Array, Global.wl_loc + Vector(0, 20 + 5 * Global.wl_size, 0));
  • Modify Global Variable(B, Append To Array, Global.wl_size * 4);
  • Else;
  • Global.i -= 1;
  • End;
  • Wait(0.016, Ignore Condition);
  • End;
  • For Global Variable(i, 0, Count Of(Global.A), 1);
  • If(Y Component Of(Global.A[Global.i]) == 0);
  • Create Effect(All Players(All Teams), Light Shaft, Color(Orange), Global.A[Global.i], Global.B[Global.i], Visible To);
  • Else;
  • Create Effect(All Players(All Teams), Sphere, Color(Green), Global.A[Global.i], Global.B[Global.i], Visible To);
  • End;
  • Wait(0.016, Ignore Condition);
  • End;
  • }
  • }
  • rule("规则开关")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Reload)) == True;
  • }
  • actions
  • {
  • Wait(3, Abort When False);
  • Event Player.rule = (Event Player.rule + 1) % 2;
  • }
  • }
  • rule("昏迷取消加速")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Status(Event Player, Stunned) == True;
  • }
  • actions
  • {
  • Stop Accelerating(Event Player);
  • Wait Until(Has Status(Event Player, Stunned) == False, 99999);
  • Start Rule(tensionAll, Restart Rule);
  • }
  • }
  • rule("源")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • Set Ultimate Charge(Event Player, 100);
  • Wait(2, Ignore Condition);
  • Event Player.skill = 1;
  • Allow Button(Event Player, Button(Ultimate));
  • Wait(0.016, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(0.016, Ignore Condition);
  • Disallow Button(Event Player, Button(Ultimate));
  • All Players(All Teams).skill = 0;
  • Loop If Condition Is True;
  • }
  • }
  • rule("自动重开")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Match Complete == True;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • Restart Match;
  • }
  • }
  • rule("集结英雄节约时间")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • }
  • actions
  • {
  • Set Match Time(5);
  • }
  • }
  • rule("Scoreboard")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Total Time Elapsed > First Of(Global.Score_time);
  • First Of(Global.Score_time) != 0;
  • }
  • actions
  • {
  • Destroy HUD Text(First Of(Global.Score_Hud));
  • Modify Global Variable(Score_time, Remove From Array By Index, 0);
  • Modify Global Variable(Score_Hud, Remove From Array By Index, 0);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("全局")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Completion;
  • Create HUD Text(Null, Custom String("{0} {1}", Server Load Peak, Server Load Average), Null, Null, Left, 0, Color(White), Color(
  • White), Color(White), Visible To and String, Visible Always);
  • Global.re_str = Empty Array;
  • Global.ready = Empty Array;
  • Global.gravity = 17.500;
  • Disable Inspector Recording;
  • disabled Disable Inspector Recording;
  • Create Icon(All Players(All Teams), Last Of(Sorted Array(All Players(Team 1), Player Stat(Current Array Element, Final Blows))),
  • Ring Thick, Visible To and Position, Color(Yellow), False);
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("\r\n\r\n\r\n\r\n\r\n\r\n"), Right, -3, Color(White), Color(
  • White), Color(White), Visible To, Default Visibility);
  • Global.Score_Hud = Empty Array;
  • Global.Score_time = Empty Array;
  • While(Is Match Complete == False);
  • Small Message(All Players(All Teams), Custom String("give a like at [workshop.codes] if U enjoy this code"));
  • Small Message(All Players(All Teams), Custom String("Give a Like at [Workshop.codes] if U enjoy this Mode!"));
  • Wait(30, Ignore Condition);
  • End;
  • }
  • }
  • rule("————Robot&Ai————")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("巨人机器人")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • disabled Create Dummy Bot(Hero(Brigitte), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Abort If(Global.Boss_Fight == True);
  • Create Dummy Bot(Hero(Wrecking Ball), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Zarya), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Winston), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Wrecking Ball), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Reinhardt), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Soldier: 76), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Create Dummy Bot(Hero(Genji), Team 1, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • disabled Wait(5, Ignore Condition);
  • disabled Create Dummy Bot(Hero(Doomfist), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • }
  • }
  • rule("巨人生成")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Array Contains(Array(Hero(Ana)), Hero Of(Event Player)) != True;
  • }
  • actions
  • {
  • Set Facing(Event Player, Direction From Angles(Random Real(-180, 180), Random Real(-40, 40)), To World);
  • If(Hero Of(Event Player) == Hero(Sigma));
  • Start Rule(giant_reset, Restart Rule);
  • Teleport(Event Player, Vector(Random Real(-150, 150), 100, Random Real(-150, 150)));
  • Else;
  • Teleport(Event Player, Vector(Random Real(-100, 100), 100, Random Real(-100, 100)));
  • If(Hero Of(Event Player) == Hero(Doomfist));
  • Teleport(Event Player, Vector(0, 100, 0) + Vector(1, 0, 1) * (Position Of(Players On Hero(Hero(Winston), Team 2)) + Normalize(
  • Position Of(Players On Hero(Hero(Winston), Team 2))) * Vector(-200, 0, -200)));
  • Else;
  • Teleport(Event Player, Vector(Random Real(-100, 100), 100, Random Real(-100, 100)));
  • End;
  • End;
  • Wait(0.016, Ignore Condition);
  • Set Status(Event Player, Null, Unkillable, 999999);
  • If(Event Player.bodysize == 0);
  • Start Forcing Dummy Bot Name(Event Player, Evaluate Once(Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player))][4]));
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • If(Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6] == 0);
  • Event Player.bodysize = Random Real(4, 8);
  • Else;
  • Event Player.bodysize = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6];
  • End;
  • Start Scaling Player(Event Player, Event Player.bodysize, False);
  • Start Forcing Dummy Bot Name(Event Player, Evaluate Once(Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player))][4]));
  • Add Health Pool To Player(Event Player, Health, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][5],
  • True, True);
  • True, False);
  • If(Hero Of(Event Player) != Hero(Sigma));
  • If(Hero Of(Event Player) == Hero(Junkrat));
  • Create Effect(All Players(All Teams), Sphere, Array(Null, Color(Red))[Event Player.life], World Vector Of(
  • Event Player.bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][Has Status(Event Player,
  • Knocked Down) == True ? Vector(0, 0, -1) : (Is Crouching(Event Player) ? 1 : (Throttle Of(Event Player) == Vector(0, 0, 0)
  • ? 0 : 12))], Event Player, Rotation And Translation), Event Player.bodysize * Global.ar_giant[Index Of Array Value(
  • Global.ar_hero, Hero Of(Event Player))][2] + 0.500 + Has Status(Local Player, Burning) * 0.200,
  • Visible To Position Radius and Color);
  • Else If(Hero Of(Event Player) == Hero(Doomfist));
  • Create Effect(All Players(All Teams), Sphere, Array(Null, Color(Red), Color(Red), Color(Yellow), Color(Yellow), Color(Sky Blue),
  • Color(Sky Blue), Color(Blue), Color(Blue), Color(White), Color(White))[Event Player.life], World Vector Of(
  • Event Player.bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][Is Using Ability 1(
  • Event Player) ? 11 : (Is Crouching(Event Player) ? 1 : (Throttle Of(Event Player) == Vector(0, 0, 0) ? 0 : 12))], Event Player,
  • Rotation And Translation), Event Player.bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))
  • ][2] + 0.500 + Has Status(Local Player, Burning) * 0.200, Visible To Position Radius and Color);
  • Else;
  • Create Effect(All Players(All Teams), Sphere, Array(Null, Color(Red), Color(Yellow), Color(Sky Blue), Color(Blue), Color(White))
  • [Event Player.life], World Vector Of(Event Player.bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player))][Is Using Ability 1(Event Player) ? 11 : (Is Crouching(Event Player) ? 1 : (Throttle Of(Event Player) == Vector(
  • 0, 0, 0) ? 0 : 12))], Event Player, Rotation And Translation), Event Player.bodysize * Global.ar_giant[Index Of Array Value(
  • Global.ar_hero, Hero Of(Event Player))][2] + 0.500 + Has Status(Local Player, Burning) * 0.200,
  • Visible To Position Radius and Color);
  • End;
  • End;
  • Disable Movement Collision With Players(Event Player);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • End;
  • Event Player.life = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3];
  • }
  • }
  • rule("巨人登场")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Skip If(Array Contains(Array(Hero(Sigma), Hero(Junkrat), Hero(Ana)), Hero Of(Event Player)) == True, 2);
  • Big Message(All Players(All Teams), Custom String("{0}{1} is Coming!", Hero Icon String(Hero Of(Event Player)),
  • Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][4]));
  • Create Icon(All Players(Team 1), Eye Position(Event Player) - Vector(0, 8, 0), Exclamation Mark, Visible To and Position, Color(
  • Red), True);
  • If(Hero Of(Event Player) == Hero(Wrecking Ball));
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(2, Ignore Condition);
  • Press Button(Event Player, Button(Crouch));
  • Else If(Hero Of(Event Player) == Hero(Soldier: 76));
  • Else If(Hero Of(Event Player) == Hero(Winston));
  • Else If(Hero Of(Event Player) == Hero(Reinhardt));
  • disabled Else If(Hero Of(Event Player) == Hero(Soldier: 76));
  • disabled Else If(Hero Of(Event Player) == Hero(Winston));
  • disabled Else If(Hero Of(Event Player) == Hero(Reinhardt));
  • Else If(Hero Of(Event Player) == Hero(Zarya));
  • Start Forcing Player Position(Event Player, Position Of(Event Player) * Vector(1, 0, 1) + Vector(0, 150, 0), True);
  • Wait(5, Ignore Condition);
  • Stop Forcing Player Position(Event Player);
  • Set Status(Event Player, Null, Knocked Down, 9999);
  • Wait Until(Is On Ground(Event Player), 99999);
  • Damage(Filtered Array(Players Within Radius(Position Of(Event Player), 50, All Teams, Off), Current Array Element != Event Player),
  • Event Player, 1000);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Yellow), Position Of(Event Player), 100);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), Position Of(Event Player), 50);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Effect, Color(White), Position Of(Event Player), 255);
  • End;
  • Wait(1, Ignore Condition);
  • Wait Until(Is On Ground(Event Player), 99999);
  • Clear Status(Event Player, Knocked Down);
  • Wait(1, Ignore Condition);
  • If(Array Contains(Array(Hero(Sigma), Hero(Wrecking Ball)), Hero Of(Event Player)) == True);
  • If(Hero Of(Event Player) == Hero(Sigma));
  • Start Rule(Giant_Ai_normal, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Soldier: 76));
  • Start Rule(Giant_Ai_solder76, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Winston));
  • Start Rule(Giant_Ai_Monkey, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Reinhardt));
  • Start Rule(Giant_Ai_DaChui, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Zarya));
  • Start Rule(Giant_Ai_Big, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Junkrat));
  • Start Rule(Giant_Ai_Special, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Echo));
  • Start Rule(Giant_Ai_Jaw, Do Nothing);
  • Start Rule(aiJaw_Fly, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Brigitte));
  • Start Rule(Giant_Ai_Hammer, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Wrecking Ball));
  • Start Rule(Giant_Ai_Cart, Do Nothing);
  • Else If(Hero Of(Event Player) == Hero(Doomfist));
  • Start Rule(Giant_Ai_AttackTitan, Do Nothing);
  • End;
  • }
  • }
  • rule("巨人死亡")
  • {
  • event
  • {
  • Player Died;
  • Team 2;
  • All;
  • }
  • actions
  • {
  • If(Team Score(Team 1) <= 50);
  • Stop Holding Button(Filtered Array(All Players(Team 1), Current Array Element.tL == Event Player), Button(Ultimate));
  • Stop Holding Button(Filtered Array(All Players(Team 1), Current Array Element.tR == Event Player), Button(Ability 2));
  • Press Button(Filtered Array(All Players(Team 1), Current Array Element.tL == Event Player), Button(Ultimate));
  • Press Button(Filtered Array(All Players(Team 1), Current Array Element.tR == Event Player), Button(Ability 2));
  • If(Global.Boss_Fight == False);
  • If(Hero Of(Event Player) != Hero(Sigma));
  • Modify Team Score(Team 1, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3]);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("{0}{1} 已被讨伐 分数额外+{2}", Hero Icon String(Hero Of(Event Player)),
  • Event Player, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3]));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("{0}{1} has been eliminated +{2} Bonus Score", Hero Icon String(Hero Of(
  • Event Player)), Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][4],
  • Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3]));
  • End;
  • Wait(3, Ignore Condition);
  • Skip If(Hero Of(Event Player) != Hero(Winston), 1);
  • Destroy Dummy Bot(Team 2, Slot Of(Players On Hero(Hero(Ana), Team 2)));
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • End;
  • If(Hero Of(Event Player) == Hero(Sigma));
  • Wait(2, Ignore Condition);
  • Abort If(Count Of(Filtered Array(All Players(Team 2), Hero Of(Current Array Element) != Hero(Sigma))) >= 2);
  • Global.Random = Random Integer(0, 50);
  • If(Global.Random == 1 && Count Of(Players On Hero(Hero(Wrecking Ball), Team 2)) < 1);
  • Create Dummy Bot(Hero(Wrecking Ball), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • If(Global.Random == 2 && Is Hero Being Played(Hero(Soldier: 76), Team 2) == False);
  • Create Dummy Bot(Hero(Soldier: 76), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • If(Global.Random == 3 && Is Hero Being Played(Hero(Winston), Team 2) == False);
  • Create Dummy Bot(Hero(Winston), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • If(Global.Random == 4 && Is Hero Being Played(Hero(Reinhardt), Team 2) == False);
  • Create Dummy Bot(Hero(Reinhardt), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • If(Global.Random == 5 && Is Hero Being Played(Hero(Zarya), Team 2) == False);
  • Create Dummy Bot(Hero(Zarya), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • If(Global.Random == 6 && Is Hero Being Played(Hero(Echo), Team 2) == False);
  • Create Dummy Bot(Hero(Echo), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • If(Global.Random == 7 && Is Hero Being Played(Hero(Brigitte), Team 2) == False);
  • Create Dummy Bot(Hero(Brigitte), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • If(Global.Random % 10 == 0 && True);
  • Create Dummy Bot(Hero(Junkrat), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Abort;
  • End;
  • End;
  • Else;
  • Stop Holding Button(Filtered Array(All Players(Team 1), Current Array Element.tL == Event Player), Button(Ultimate));
  • Stop Holding Button(Filtered Array(All Players(Team 1), Current Array Element.tR == Event Player), Button(Ability 2));
  • If(Hero Of(Event Player) != Hero(Sigma));
  • Modify Team Score(Team 1, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3]);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("{0}{1} 已被讨伐 分数额外+{2}", Hero Icon String(Hero Of(Event Player)),
  • Event Player, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3]));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("{0}{1} has been eliminated +{2}Bonus Score", Hero Icon String(Hero Of(
  • Event Player)), Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][4],
  • Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3]));
  • End;
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Wait(3, Ignore Condition);
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 100, 0), Vector(0, 0, 0));
  • Skip If(Hero Of(Event Player) != Hero(Winston), 1);
  • Destroy Dummy Bot(Team 2, Slot Of(Players On Hero(Hero(Ana), Team 2)));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • End;
  • }
  • }
  • rule("巨人受到伤害")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Team Of(Victim) == Team 2;
  • }
  • actions
  • {
  • If((Attacker.skill_Gun_shootBot[0] == Victim && Attacker.skill_Gun_fire[0] == True) || (
  • Attacker.skill_Gun_shootBot[1] == Victim && Attacker.skill_Gun_fire[1] == True));
  • Victim.ai_1 = Attacker;
  • Abort If(First Of(Filtered Array(Attacker.skill_Gun_hit, Attacker.skill_Gun_shootBot[Current Array Index] == Victim)) == 0);
  • Victim.life -= 2;
  • Skip(16);
  • End;
  • If(Has Status(Victim, Frozen) == True);
  • Heal(Victim, Null, Event Damage);
  • Abort;
  • End;
  • If(Hero Of(Attacker) == Hero(Doomfist));
  • Victim.ai_1 = Attacker;
  • Skip If(Health(Victim) > 10, 4);
  • Skip If(Health(Victim) > 10 || Victim.Founding_Titan == 0.500 || (Victim.Founding_Titan != 0.500 && Victim.life <= 0), 4);
  • Clear Status(Victim, Unkillable);
  • Wait(0.016, Ignore Condition);
  • Damage(Victim, Attacker, 100);
  • Wait(0.016, Ignore Condition);
  • Else;
  • If(Distance Between(World Vector Of(Vector(0, 1, 0), Attacker, Rotation And Translation), World Vector Of(
  • Victim.bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Victim))][Is Using Ability 1(Victim) ? 11 : (
  • Is Crouching(Victim) ? 1 : (Throttle Of(Victim) == Vector(0, 0, 0) ? 0 : 12))], Victim, Rotation And Translation))
  • <= Victim.bodysize * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Victim))][2] + Has Status(Attacker, Burning)
  • * 0.200 + 0.500);
  • Victim.life -= 1;
  • Victim.ai_1 = Attacker;
  • If(Victim.life <= 0);
  • If(Victim.life <= 0 && Victim.Founding_Titan != 0.500);
  • Clear Status(Victim, Unkillable);
  • Wait(0.016, Ignore Condition);
  • Damage(Victim, Attacker, 99999);
  • Kill(Victim, Attacker);
  • Else;
  • If(Hero Of(Victim) == Hero(Echo));
  • Set Status(Victim, Null, Frozen, 10);
  • Else;
  • Set Status(Victim, Null, Frozen, 1.500);
  • End;
  • End;
  • Set Ultimate Charge(Attacker, Ultimate Charge Percent(Attacker) + 20);
  • Event Player.hit_times = 0;
  • Wait(0.016, Ignore Condition);
  • Small Message(All Players(All Teams), Evaluate Once(Custom String("Rank {0}{1} 【{2}】", Hero Icon String(Hero Of(Attacker)),
  • Attacker, Speed Of(Attacker) < 3 ? Custom String(" D") : (Speed Of(Attacker) < 12 ? Custom String(" C") : (Speed Of(Attacker)
  • < 20 ? Custom String(" B") : (Speed Of(Attacker) < 27 ? Custom String(" A") : (Speed Of(Attacker) < 35 ? Custom String(" S")
  • : Custom String("SS"))))))));
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("┏━┓  {0}\r\n┃{1}\r\n┗━┛ Speed {2}m/s              ",
  • Evaluate Once(Is Dead(Victim) ? Custom String("Kill!") : Custom String("Hit")), Custom String("{0}   {1}", Speed Of(Attacker)
  • < 3 ? Custom String(" D") : (Speed Of(Attacker) < 12 ? Custom String(" C") : (Speed Of(Attacker) < 20 ? Custom String(" B") : (
  • Speed Of(Attacker) < 27 ? Custom String(" A") : (Speed Of(Attacker) < 35 ? Custom String(" S") : Custom String("SS"))))),
  • Custom String("{0}{1} ——> {2}", Hero Icon String(Hero Of(Attacker)), Attacker, Custom String("{0}{1}", Hero Icon String(
  • Hero Of(Victim)), Victim))), Speed Of(Attacker)), Right, -0.500, Color(White), Color(White), Speed Of(Attacker) < 3 ? Color(
  • Gray) : (Speed Of(Attacker) < 12 ? Color(Green) : (Speed Of(Attacker) < 20 ? Color(Sky Blue) : (Speed Of(Attacker)
  • < 27 ? Color(Yellow) : (Speed Of(Attacker) < 35 ? Color(Orange) : Color(Red))))), Sort Order, Default Visibility);
  • If(Speed Of(Attacker) >= 50);
  • Small Message(All Players(All Teams), Evaluate Once(Custom String("Rank {0}{1} [{2}]", Hero Icon String(Hero Of(Attacker)),
  • Attacker, Custom String("SSS"))));
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("┏━┓  {0}\r\n┃{1}\r\n┗━┛ Speed {2}m/s              ",
  • Evaluate Once(Is Dead(Victim) ? Custom String("Kill!") : Custom String("Hit")), Custom String("{0}  {1}", Custom String("SSS"),
  • Custom String("{0}{1} ----> {2}", Hero Icon String(Hero Of(Attacker)), Attacker, Custom String("{0}{1}", Hero Icon String(
  • Hero Of(Victim)), Victim))), Speed Of(Attacker)), Right, -0.500, Color(White), Color(White), Array(Color(Red), Color(Orange),
  • Color(Yellow), Color(Turquoise), Color(Sky Blue), Color(Blue), Color(Violet))[Round To Integer(Total Time Elapsed * 4 % 7,
  • Down)], Sort Order and Color, Default Visibility);
  • Else;
  • Small Message(All Players(All Teams), Evaluate Once(Custom String("Rank {0}{1} [{2}]", Hero Icon String(Hero Of(Attacker)),
  • Attacker, Speed Of(Attacker) < 3 ? Custom String(" D") : (Speed Of(Attacker) < 12 ? Custom String(" C") : (Speed Of(Attacker)
  • < 20 ? Custom String(" B") : (Speed Of(Attacker) < 27 ? Custom String(" A") : (Speed Of(Attacker) < 35 ? Custom String(" S")
  • : Custom String("SS"))))))));
  • Create HUD Text(All Players(All Teams), Null, Null, Custom String("┏━┓  {0}\r\n┃{1}\r\n┗━┛ Speed {2}m/s              ",
  • Evaluate Once(Is Dead(Victim) ? Custom String("Kill!") : Custom String("Hit")), Custom String("{0}   {1}", Speed Of(Attacker)
  • < 3 ? Custom String(" D") : (Speed Of(Attacker) < 12 ? Custom String(" C") : (Speed Of(Attacker) < 20 ? Custom String(" B") : (
  • Speed Of(Attacker) < 27 ? Custom String(" A") : (Speed Of(Attacker) < 35 ? Custom String(" S") : Custom String("SS"))))),
  • Custom String("{0}{1} ----> {2}", Hero Icon String(Hero Of(Attacker)), Attacker, Custom String("{0}{1}", Hero Icon String(
  • Hero Of(Victim)), Victim))), Speed Of(Attacker)), Right, -0.500, Color(White), Color(White), Speed Of(Attacker) < 3 ? Color(
  • Gray) : (Speed Of(Attacker) < 12 ? Color(Green) : (Speed Of(Attacker) < 20 ? Color(Sky Blue) : (Speed Of(Attacker)
  • < 27 ? Color(Yellow) : (Speed Of(Attacker) < 35 ? Color(Orange) : Color(Red))))), Sort Order, Default Visibility);
  • End;
  • Modify Global Variable(Score_Hud, Append To Array, Last Text ID);
  • Modify Global Variable(Score_time, Append To Array, 15 + Total Time Elapsed);
  • Heal(Victim, Null, 100);
  • If(Victim.Founding_Titan != 0 && Victim.life <= 0);
  • Set Status(Victim, Attacker, Knocked Down, 9999);
  • End;
  • Else;
  • Attacker.hit_times += 1;
  • If(Attacker.hit_times % 4 == 0);
  • If(Global.Language == 0);
  • Small Message(Attacker, Custom String("攻击巨人的后颈从而杀死他们"));
  • Small Message(Attacker, Custom String("在脖子附近攻击巨人的后颈以击杀巨人"));
  • Else If(Global.Language == 1);
  • Small Message(Attacker, Custom String("Aim for Titan's Nape To kill it"));
  • End;
  • End;
  • Heal(Victim, Null, Event Damage);
  • End;
  • End;
  • If(Has Status(Victim, Frozen) && Hero Of(Victim) == Hero(Echo));
  • Detach Players(Victim.ai_3);
  • Victim.ai_3 = 0;
  • Wait Until(Is On Ground(Victim), 9);
  • Clear Status(Victim, Frozen);
  • End;
  • }
  • }
  • rule("ar_giant [0]neck [1]sit_neck [2]neck_size [3]生命 [4]name [5]生命值 [6]size [7]speed[8]damage[9][10][11]skill1_neck[12]moving_neck")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.ar_hero = Array(Hero(Sigma), Hero(Wrecking Ball), Hero(Soldier: 76), Hero(Winston), Hero(Reinhardt), Hero(Zarya), Hero(
  • Junkrat), Hero(Echo), Hero(Brigitte));
  • Junkrat), Hero(Echo), Hero(Brigitte), Hero(Doomfist), Hero(Baptiste));
  • Global.ar_giant = Empty Array;
  • Wait(0.250, Ignore Condition);
  • If(Global.Language == 0);
  • "西格玛"
  • Global.ar_giant[0] = Array(Vector(-0.180, 2.250, -0.450), Vector(-0.180, 1.900, -0.420), 0.400, 1, Custom String("无垢巨人"), 1000,
  • Null, 60, 1000, Null, Null, Null, Vector(-0.180, 2.250, -0.450));
  • "破坏球"
  • Global.ar_giant[1] = Array(Vector(0, 1.850, 0), Vector(0, 1.850, 0), 0.330, 3, Custom String("车力巨人"), 3000, 6, 70, 700, Null, Null,
  • Null, Vector(0, 1.850, 0));
  • "76"
  • Global.ar_giant[2] = Array(Vector(0.100, 1.600, -0.150), Vector(0.050, 1.050, -0.100), 0.220, 4, Custom String("男妈妈巨人"), 5000, 7,
  • 120, 4000, Null, Null, Vector(0, 1.400, 0.300), Vector(0, 1.600, -0.200));
  • "猩猩"
  • Global.ar_giant[3] = Array(Vector(0, 1.700, 0.100), Vector(0, 1.350, 0.250), 0.250, 3, Custom String("兽之巨人"), 3000, 7, 100, 9999,
  • Null, Null, Vector(0, 1.400, 0.300), Vector(0, 1.700, 0.100));
  • "莱因哈特"
  • Global.ar_giant[4] = Array(Vector(0, 2.200, 0), Vector(0, 1.700, 0), 0.250, 5, Custom String("铠之巨人"), 7000, 7, 70, 700, Null, Null,
  • Vector(0.100, 1.500, -0.200), Vector(0, 2.100, 0.300));
  • "毛妹"
  • Global.ar_giant[5] = Array(Vector(0.240, 1.610, -0.250), Vector(0, 1.800, 0), 0.120, 2, Custom String("超大型巨人"), 8000, 20, 50, 1000,
  • Null, Null, Vector(0.240, 1.610, -0.250), Vector(0.240, 1.610, -0.250));
  • "狂鼠"
  • Global.ar_giant[6] = Array(Vector(0, 1.400, 0.200), Vector(0, 1.200, 0.200), 0.260, 1, Custom String("奇行种"), 1000, Null, 200, 1000,
  • Null, Null, Vector(0, 0, -1.300), Vector(0, 1.650, 0.380));
  • "回声"
  • Global.ar_giant[7] = Array(Vector(0, 1.850, -0.200), Vector(0, 1.600, -0.200), 0.250, 2, Custom String("鄂之巨人"), 2000, 7, 100, 2000,
  • Null, Null, Vector(0, 1.830, 0.050), Vector(0, 1.840, -0.100));
  • "布丽吉塔"
  • Global.ar_giant[8] = Array(Vector(0.150, 1.550, -0.200), Vector(0.150, 1.300, -0.150), 0.220, 5, Custom String("战锤巨人"), 3000, 7,
  • Global.ar_giant[8] = Array(Vector(0.150, 1.550, -0.200), Vector(0.150, 1.300, -0.150), 0.220, 4, Custom String("战锤巨人"), 3000, 7,
  • 35, 1500, Null, Null, Vector(0.150, 1.550, -0.150), Vector(0.150, 1.500, -0.150));
  • "末日铁拳"
  • Global.ar_giant[9] = Array(Vector(0.100, 1.600, -0.100), Null, 0.220, 3, Custom String("进击的巨人"), 4000, 7, 100, 10, Null, Null,
  • Vector(0.100, 1.600, -0.100), Vector(0.150, 1.700, 0.100));
  • "巴蒂斯特"
  • Global.ar_giant[10] = Array(Vector(0.100, 1.550, 0.100), Vector(0.100, 1.350, 0.100), 0.200, 10, Custom String("始祖巨人"), 20000, 13,
  • 0, 3000, Null, Null, Vector(0.100, 1.550, 0.100), Null);
  • Else If(Global.Language == 1);
  • "西格玛"
  • Global.ar_giant[0] = Array(Vector(-0.180, 2.250, -0.450), Vector(-0.180, 1.900, -0.420), 0.400, 1, Custom String("Pure Titan"),
  • 1000, Null, 60, 1000, Null, Null, Null, Vector(-0.180, 2.250, -0.450));
  • "破坏球"
  • Global.ar_giant[1] = Array(Vector(0, 1.850, 0), Vector(0, 1.850, 0), 0.330, 3, Custom String("Cart Titan"), 3000, 6, 70, 700, Null,
  • Null, Null, Vector(0, 1.850, 0));
  • "76"
  • Global.ar_giant[2] = Array(Vector(0.100, 1.600, -0.150), Vector(0.050, 1.050, -0.100), 0.220, 4, Custom String("Male Titan"), 5000,
  • 7, 120, 4000, Null, Null, Vector(0, 1.400, 0.300), Vector(0, 1.600, -0.200));
  • "猩猩"
  • Global.ar_giant[3] = Array(Vector(0, 1.700, 0.100), Vector(0, 1.350, 0.250), 0.250, 3, Custom String("Beast Titan"), 3000, 7, 100,
  • 9999, Null, Null, Vector(0, 1.400, 0.300), Vector(0, 1.700, 0.100));
  • "莱因哈特"
  • Global.ar_giant[4] = Array(Vector(0, 2.200, 0), Vector(0, 1.700, 0), 0.250, 5, Custom String("Armored Titan"), 7000, 7, 70, 700,
  • Null, Null, Vector(0.100, 1.500, -0.200), Vector(0, 2.100, 0.300));
  • "毛妹"
  • Global.ar_giant[5] = Array(Vector(0.240, 1.610, -0.250), Vector(0, 1.800, 0), 0.120, 2, Custom String("Colossal Titan"), 8000, 20,
  • 50, 1000, Null, Null, Vector(0.240, 1.610, -0.250), Vector(0.240, 1.610, -0.250));
  • "狂鼠"
  • Global.ar_giant[6] = Array(Vector(0, 1.400, 0.200), Vector(0, 1.200, 0.200), 0.260, 1, Custom String("Abnormal Titan"), 1000, Null,
  • 200, 1000, Null, Null, Vector(0, 0, -1.300), Vector(0, 1.650, 0.380));
  • "回声"
  • Global.ar_giant[7] = Array(Vector(0, 1.850, -0.200), Vector(0, 1.600, -0.200), 0.250, 2, Custom String("Jaw Titan"), 2000, 7, 100,
  • 2000, Null, Null, Vector(0, 1.830, 0.050), Vector(0, 1.840, -0.100));
  • "布丽吉塔"
  • Global.ar_giant[8] = Array(Vector(0.150, 1.550, -0.200), Vector(0.150, 1.300, -0.150), 0.220, 5, Custom String("War Hammer Titan"),
  • Global.ar_giant[8] = Array(Vector(0.150, 1.550, -0.200), Vector(0.150, 1.300, -0.150), 0.220, 4, Custom String("War Hammer Titan"),
  • 3000, 7, 35, 1500, Null, Null, Vector(0.150, 1.550, -0.150), Vector(0.150, 1.500, -0.150));
  • "末日铁拳"
  • Global.ar_giant[9] = Array(Vector(0.100, 1.600, -0.100), Null, 0.220, 3, Custom String("Attack Titan"), 4000, 7, 100, 10, Null,
  • Null, Vector(0.100, 1.600, -0.100), Vector(0.150, 1.700, 0.100));
  • "巴蒂斯特"
  • Global.ar_giant[10] = Array(Vector(0.100, 1.550, 0.100), Vector(0.100, 1.350, 0.100), 0.200, 10, Custom String("Founding Titan"),
  • 20000, 13, 0, 3000, Null, Null, Vector(0.100, 1.550, 0.100), Null);
  • End;
  • }
  • }
  • rule("最终boss战")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Team Score(Team 1) >= 50;
  • disabled Team Score(Team 1) >= 50;
  • Global.Boss_Fight == True;
  • }
  • actions
  • {
  • Destroy All Dummy Bots;
  • Wait(3, Ignore Condition);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("警告!智慧巨人来袭"));
  • Big Message(All Players(All Teams), Custom String("警告!智慧巨人来袭"));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("Warning!Bosses are Coming"));
  • Big Message(All Players(All Teams), Custom String("Warning!Bosses are Coming"));
  • End;
  • Call Subroutine(Create_boss);
  • While(Count Of(All Players(Team 2)) < 9);
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Wait(5, Ignore Condition);
  • Wait(2, Ignore Condition);
  • End;
  • Wait(1, Ignore Condition);
  • If(Global.Language == 0);
  • Create HUD Text(All Players(All Teams), Custom String("┏ ━━━━━━━━━━━━━━━━━ ┓\r\n┃击败六大巨人/达到80分以取得最终胜利┃\r\n┗ ━━━━━━━━━━━━━━━━━ ┛"),
  • Null, Null, Top, 10, Color(Red), Color(White), Color(White), Visible To and String, Default Visibility);
  • Else If(Global.Language == 1);
  • Create HUD Text(All Players(All Teams), Custom String(
  • "┏ ━━━━━━━━━━━━━━━━━ ┓\r\n┃Kill All Bosses/Get 80pt to win┃\r\n┗ ━━━━━━━━━━━━━━━━━ ┛"), Null, Null, Top, 10, Color(Red), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • End;
  • Wait Until(Count Of(Filtered Array(All Players(Team 2), Hero Of(Current Array Element) != Hero(Ana) && Hero Of(
  • Wait Until(Count Of(Filtered Array(All Living Players(Team 2), Hero Of(Current Array Element) != Hero(Ana) && Hero Of(
  • Current Array Element) != Hero(Sigma))) == 0, 99999);
  • Set Damage Dealt(All Players(All Teams), 0);
  • If(Count Of(Filtered Array(All Living Players(Team 2), Array Contains(Array(Hero(Sigma), Hero(Ana)), Hero Of(
  • Current Array Element)) == False)) == 0);
  • If(Global.Language == 0);
  • Big Message(All Players(All Teams), Custom String("所有智慧巨人已被驱逐"));
  • Small Message(All Players(All Teams), Custom String("所有智慧巨人已被驱逐"));
  • Else If(Global.Language == 1);
  • Big Message(All Players(All Teams), Custom String("All of the Bosses had been eliminated"));
  • Small Message(All Players(All Teams), Custom String("All of the Bosses had been eliminated"));
  • End;
  • End;
  • Disable Hero HUD(All Players(All Teams));
  • Destroy All HUD Text;
  • Set Slow Motion(30);
  • Start Camera(All Players(All Teams), Eye Position(Global.End_kill_player) + Direction Towards(Eye Position(Global.End_kill_Titan),
  • Eye Position(Global.End_kill_player)) * 8, Eye Position(Global.End_kill_player), 30);
  • Wait(1, Ignore Condition);
  • Set Slow Motion(100);
  • Stop Camera(All Players(All Teams));
  • Wait(2, Ignore Condition);
  • Declare Team Victory(Team 1);
  • }
  • }
  • rule("Create_Boss")
  • {
  • event
  • {
  • Subroutine;
  • Create_boss;
  • }
  • actions
  • {
  • If(Global.Difficulty <= 1);
  • Global.create_1 = 4;
  • Else If(Global.Difficulty == 2);
  • Global.create_1 = 5;
  • Else If(Global.Difficulty == 3);
  • Global.create_1 = 6;
  • Else;
  • Global.create_1 = 7;
  • End;
  • Global.ar_bosses = Array Slice(Randomized Array(Array(Hero(Echo), Hero(Soldier: 76), Hero(Zarya), Hero(Winston), Hero(
  • Wrecking Ball), Hero(Reinhardt), Hero(Brigitte))), 0, Global.create_1);
  • While(Global.ar_bosses != Empty Array);
  • Wait(3, Ignore Condition);
  • Create Dummy Bot(First Of(Global.ar_bosses), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Modify Global Variable(ar_bosses, Remove From Array By Index, 0);
  • Wait(3, Ignore Condition);
  • End;
  • If(Players On Hero(Hero(Winston), Team 2) != Empty Array);
  • Global.create_1 = Random Integer(0, Max(0, 4 - Global.Difficulty));
  • If(Global.create_1 == 0);
  • Wait(3, Ignore Condition);
  • Create Dummy Bot(Hero(Doomfist), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Modify Global Variable(ar_bosses, Remove From Array By Index, 0);
  • End;
  • End;
  • If(Global.Language == 0);
  • Create HUD Text(All Players(All Teams), Custom String("┏ ━━━━━━━━━━━━━━━━━━━ ┓\r\n┃击败所有智慧巨人/{0}\r\n┗ ━━━━━━━━━━━━━━━━━━━ ┛",
  • Global.HACK ? Custom String("▓▓▓▓▓▓▓▓▓▓▓") : Custom String("达到80分以取得最终胜利┃")), Null, Null, Top, 10, Color(Red), Color(White),
  • Color(White), Visible To and String, Default Visibility);
  • Else If(Global.Language == 1);
  • Create HUD Text(All Players(All Teams), Custom String("┏ ━━━━━━━━━━━━━━━━━ ┓\r\n┃Kill All Bosses/{0}\r\n┗ ━━━━━━━━━━━━━━━━━ ┛",
  • Global.HACK ? Custom String("比较输入çš") : Custom String("Get 80 score to win")), Null, Null, Top, 10, Color(Red), Color(
  • White), Color(White), Visible To and String, Default Visibility);
  • End;
  • Wait(3, Ignore Condition);
  • }
  • }
  • rule("玩家与巨人碰撞")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Ray Cast Hit Player(Eye Position(Event Player), Position Of(Event Player), All Players(Team 2), Event Player, True) == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Direction Towards(Position Of(Ray Cast Hit Player(Eye Position(Event Player), Position Of(
  • Event Player), All Players(Team 2), Event Player, True)) * Vector(1, 0, 1) + Vector(0, Y Component Of(Position Of(
  • Event Player)), 0), World Vector Of(Vector(0, 1, 0), Event Player, Rotation And Translation)), 1, To World,
  • Cancel Contrary Motion);
  • Wait(0.032, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("巨人正常ai")
  • rule("无垢巨人AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_normal;
  • }
  • actions
  • {
  • Start Rule(giant_reset, Do Nothing);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 50 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Throttle In Direction(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 50, Team 1, Off));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + 30 * Global.ai_adjustPerst, To World, Direction and Turn Rate);
  • Start Throttle In Direction(Event Player, Vector(0, 0, 1), 1, To Player, Replace existing throttle, Direction and Magnitude);
  • End;
  • If(Altitude Of(Closest Player To(Position Of(Event Player), Team 1)) < 3 && Filtered Array(Players Within Radius(Position Of(
  • Event Player), Event Player.bodysize, Team 1, Off), Is Alive(Current Array Element)) != Empty Array);
  • Call Subroutine(AiJump_attack);
  • Else If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), Eye Position(Event Player) + Facing Direction Of(Event Player) * Event Player.bodysize)
  • < Event Player.bodysize * 0.700));
  • Call Subroutine(Aipunch);
  • Wait(1, Ignore Condition);
  • End;
  • Wait(0.300, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("giant_reset")
  • {
  • event
  • {
  • Subroutine;
  • giant_reset;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Stop Throttle In Direction(Event Player);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 50 || Entity Exists(Event Player.ai_1) == False);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 50, Team 1, Off));
  • Else;
  • If(Hero Of(Event Player) == Hero(Sigma));
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + 30 * Global.ai_adjustPerst, To World, Direction and Turn Rate);
  • Start Throttle In Direction(Event Player, Vector(0, 0, 1), 1, To Player, Replace existing throttle, Direction and Magnitude);
  • Else If(Hero Of(Event Player) == Hero(Wrecking Ball));
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Position Of(Event Player.ai_1)), 1,
  • To Player, Replace existing throttle, Direction and Magnitude);
  • End;
  • End;
  • }
  • }
  • rule("Ai jump")
  • {
  • event
  • {
  • Subroutine;
  • AiJump_attack;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0);
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Jump));
  • Set Gravity(Event Player, 50);
  • Wait(1, Ignore Condition);
  • Wait Until(Is On Ground(Event Player), 999);
  • Skip If(Is Dead(Event Player) == True, 3);
  • Play Effect(All Players(All Teams), Winston Jump Pack Landing Effect, Color(White), Position Of(Event Player), 1);
  • Play Effect(All Players(All Teams), Winston Jump Pack Landing Sound, Color(White), Position Of(Event Player), 100);
  • Damage(Players Within Radius(Position Of(Event Player) - Vector(0, 5, 0), 3 + Event Player.bodysize, Team 1, Off), Event Player,
  • 200);
  • Wait(2, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Wait(1, Ignore Condition);
  • Stop Forcing Throttle(Event Player);
  • Set Gravity(Event Player, 100);
  • Start Rule(giant_reset, Restart Rule);
  • }
  • }
  • rule("Ai punch")
  • {
  • event
  • {
  • Subroutine;
  • Aipunch;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0);
  • Set Status(Event Player, Null, Burning, 9999);
  • Wait(2 - Global.ai_adjustPerst * 1, Ignore Condition);
  • Wait Until(Has Status(Event Player, Frozen), 2 - Global.ai_adjustPerst * 1);
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Abort;
  • End;
  • Press Button(Event Player, Button(Melee));
  • Wait Until(Is Meleeing(Event Player) == False, 99999);
  • Clear Status(Event Player, Burning);
  • Wait(0.500, Ignore Condition);
  • Stop Forcing Throttle(Event Player);
  • }
  • }
  • rule("男妈妈巨人AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_solder76;
  • }
  • actions
  • {
  • Skip If(Event Player.ai_1 == 0, 1);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 60 || Entity Exists(Event Player.ai_1) == False);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 60, Team 1, Off));
  • Else;
  • Skip If(Is In View Angle(Event Player, Eye Position(Event Player.ai_1), 70) == True, 1);
  • Call Subroutine(ai76_targetRefresh);
  • If(Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Eye Position(Event Player.ai_1) * Vector(1, 0, 1)) > 15);
  • Call Subroutine(ai76_runAttack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.700));
  • Call Subroutine(Aipunch);
  • Event Player.ai_1 = 0;
  • End;
  • If(Filtered Array(Players Within Radius(Position Of(Event Player), 9, Team 1, Off), Is Alive(Current Array Element) == True)
  • != Empty Array);
  • Call Subroutine(ai76_circleAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("男妈妈AI 冲刺攻击")
  • {
  • event
  • {
  • Subroutine;
  • ai76_runAttack;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 40 + Global.ai_adjustPerst * 50, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Start Holding Button(Event Player, Button(Ability 1));
  • Wait Until(Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Eye Position(Event Player.ai_1) * Vector(1, 0, 1)) < 15,
  • 6);
  • Wait Until(Has Status(Event Player, Frozen) || Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Eye Position(
  • Event Player.ai_1) * Vector(1, 0, 1)) < 15, 6);
  • Stop Holding Button(Event Player, Button(Ability 1));
  • If(Has Status(Event Player, Frozen) == True);
  • Abort;
  • End;
  • Stop Forcing Throttle(Event Player);
  • If(Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Eye Position(Event Player.ai_1) * Vector(1, 0, 1)) < 15);
  • Set Status(Event Player, Null, Burning, 1.500);
  • Wait(0.300, Ignore Condition);
  • Stop Facing(Event Player);
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Eye Position(Event Player.ai_1)), Min(50,
  • Distance Between(Eye Position(Event Player), Event Player.ai_1)), To World, Cancel Contrary Motion);
  • Wait(0.600, Ignore Condition);
  • Press Button(Event Player, Button(Melee));
  • End;
  • Stop Facing(Event Player);
  • Wait(0.300, Ignore Condition);
  • Clear Status(Event Player, Burning);
  • Wait Until(Is On Ground(Event Player), 10);
  • Event Player.ai_1 = 0;
  • }
  • }
  • rule("男妈妈AI 回旋攻击")
  • {
  • event
  • {
  • Subroutine;
  • ai76_circleAttack;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Burning, 5);
  • Set Facing(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), 0), To World);
  • Wait(0.600, Ignore Condition);
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Abort;
  • End;
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(1.500 - Global.ai_adjustPerst * 0.700, Ignore Condition);
  • Wait(Has Status(Event Player, Frozen) || 1.500 - Global.ai_adjustPerst * 0.700, Ignore Condition);
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Abort;
  • End;
  • Press Button(Event Player, Button(Melee));
  • Start Facing(Event Player, Vector(1, -0.500, 0), 720, To Player, Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Clear Status(Event Player, Burning);
  • Stop Facing(Event Player);
  • Wait(0.200, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • }
  • }
  • rule("男妈妈AI 转身")
  • {
  • event
  • {
  • Subroutine;
  • ai76_targetRefresh;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player.ai_1), Position Of(Event Player)), 0.500,
  • To World, Replace existing throttle, Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)) * Vector(1, 1, 1),
  • 80 + Global.ai_adjustPerst * 50, To World, Direction and Turn Rate);
  • Wait(1.200, Ignore Condition);
  • Stop Throttle In Direction(Event Player);
  • Stop Facing(Event Player);
  • Wait(0.300, Ignore Condition);
  • }
  • }
  • rule("兽之巨人AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_Monkey;
  • }
  • actions
  • {
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 60 || Entity Exists(Event Player.ai_1) == False);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 60, Team 1, Off));
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 40 + 40 * Global.ai_adjustPerst, To World, Direction and Turn Rate);
  • Else;
  • If(Players Within Radius(Eye Position(Event Player), 9, Team 1, Off) != Empty Array && Ability Cooldown(Event Player, Button(
  • Ability 1)) == 0);
  • Call Subroutine(aiMonkey_jumpAttack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.700));
  • Call Subroutine(Aipunch);
  • Wait(0.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 40 + 40 * Global.ai_adjustPerst, To World, Direction and Turn Rate);
  • Else If(Is True For Any(All Living Players(Team 1), Distance Between(Eye Position(Event Player), Eye Position(
  • Current Array Element)) < 60 && Has Spawned(Event Player) && Is In View Angle(Event Player, Eye Position(
  • Current Array Element), 45)) == True);
  • Start Rule(aiMonkey_stoneAttack, Do Nothing);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Skip If(Event Player.life <= 0, 1);
  • Loop;
  • Stop Facing(Event Player);
  • Abort If(Event Player.Founding_Titan == 0);
  • Wait Until(Has Status(Players On Hero(Hero(Doomfist), Team 2), Knocked Down) == True, 99999);
  • Clear Status(Event Player, Unkillable);
  • Wait(0.016, Ignore Condition);
  • Kill(Event Player, Event Player);
  • }
  • }
  • rule("兽之巨人AI 跑路")
  • {
  • event
  • {
  • Subroutine;
  • aiMonkey_jumpAttack;
  • }
  • actions
  • {
  • If(Event Player.life > 1);
  • Set Move Speed(Event Player, 200);
  • Stop Facing(Event Player);
  • Start Holding Button(Event Player, Button(Crouch));
  • Set Jump Vertical Speed(Event Player, 500);
  • Set Facing(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), -45), To World);
  • Set Status(Event Player, Null, Burning, 5);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("{0}溜了溜了", Hero Icon String(Hero(Winston))));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("{0}byebye~", Hero Icon String(Hero(Winston))));
  • End;
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.100, Ignore Condition);
  • Wait Until(Is On Ground(Event Player), 99999);
  • Clear Status(Event Player, Burning);
  • Wait(0.700, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Set Move Speed(Event Player, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][7]);
  • Else;
  • Set Ultimate Charge(Event Player, 100);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("{0}这就是为了活下去的…我的挣扎!", Hero Icon String(Hero(Winston))));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("{0}I won't want to die!", Hero Icon String(Hero(Winston))));
  • End;
  • Set Status(Event Player, Null, Burning, 20);
  • Wait(1.500 - 0.750 * Global.ai_adjustPerst, Ignore Condition);
  • Event Player.ai_2 = 0;
  • Chase Player Variable Over Time(Event Player, ai_2, 360, 1.500, None);
  • Start Facing(Event Player, Vector(1, 0, 0), Event Player.ai_2, To Player, Direction and Turn Rate);
  • Wait(0.500, Ignore Condition);
  • Start Rule(aiMonkey_stoneAttack, Restart Rule);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(1, Ignore Condition);
  • Start Rule(aiMonkey_stoneAttack, Restart Rule);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait Until(Is Using Ultimate(Event Player) == False, 9999);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Clear Status(Event Player, Burning);
  • Chase Player Variable Over Time(Event Player, ai_2, 0, 1, Destination and Duration);
  • Wait(1, Ignore Condition);
  • Stop Facing(Event Player);
  • Wait(3, Ignore Condition);
  • End;
  • Event Player.ai_1 = 0;
  • }
  • }
  • rule("兽之巨人AI 丢石头")
  • {
  • event
  • {
  • Subroutine;
  • aiMonkey_stoneAttack;
  • }
  • actions
  • {
  • Skip If(Entity Exists(Players On Hero(Hero(Ana), Team 2)) == True, 5);
  • Skip If(Entity Exists(Players On Hero(Hero(Ana), Team 2)) == True, 8);
  • Create Dummy Bot(Hero(Ana), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • If(Global.Language == 0);
  • Start Forcing Dummy Bot Name(Players On Hero(Hero(Ana), Team 2), Custom String("碎石"));
  • Else If(Global.Language == 1);
  • Start Forcing Dummy Bot Name(Players On Hero(Hero(Ana), Team 2), Custom String("Stone"));
  • End;
  • Set Invisible(Players On Hero(Hero(Ana), Team 2), All);
  • Set Status(Players On Hero(Hero(Ana), Team 2), Null, Phased Out, 9999);
  • Skip If(Is Using Ultimate(Event Player) == True, 1);
  • Set Status(Event Player, Null, Burning, 2 + Global.ai_adjustPerst * 0.700);
  • Wait(0.800, Ignore Condition);
  • Start Forcing Player Position(Players On Hero(Hero(Ana), Team 2), World Vector Of(Vector(2, 6, 8), Event Player,
  • Rotation And Translation), True);
  • Communicate(Event Player, Hello);
  • While(Has Status(Event Player, Burning) == True);
  • Set Facing(Players On Hero(Hero(Ana), Team 2), Direction From Angles(Horizontal Facing Angle Of(Event Player) + Random Real(-30,
  • 30), Vertical Facing Angle Of(Event Player) + Random Real(-30, 10)), To World);
  • Press Button(Players On Hero(Hero(Ana), Team 2), Button(Ability 2));
  • disabled Wait(0.016, Ignore Condition);
  • Set Ability Cooldown(Players On Hero(Hero(Ana), Team 2), Button(Ability 2), 0);
  • Cancel Primary Action(Players On Hero(Hero(Ana), Team 2));
  • Wait(0.016, Ignore Condition);
  • End;
  • Wait(3 - 1.200 * Global.ai_adjustPerst, Ignore Condition);
  • Skip If(Is Using Ultimate(Event Player) == True, 1);
  • Destroy Dummy Bot(Team 2, Slot Of(Players On Hero(Hero(Ana), Team 2)));
  • }
  • }
  • rule("凯巨AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_DaChui;
  • }
  • actions
  • {
  • If(Is Dead(Event Player.ai_1) || Y Component Of(Position Of(Event Player.ai_1)) > 30 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Filtered Array(Players Within Radius(Position Of(Event Player), 50, Team 1, Off), Y Component Of(
  • Position Of(Current Array Element)) < 30));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 20 + Global.ai_adjustPerst * 15, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Else;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.800));
  • Call Subroutine(aiDaChui_normalAttack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 1.200));
  • Call Subroutine(aiDaChui_3normalAttack);
  • End;
  • If(Is In View Angle(Event Player, Eye Position(Event Player.ai_1), 40) && Distance Between(Position Of(Event Player) * Vector(1, 0,
  • 1), Eye Position(Event Player.ai_1) * Vector(1, 0, 1)) > 15);
  • Call Subroutine(aiDaChui_rushAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("铠之巨人AI 正常攻击")
  • {
  • event
  • {
  • Subroutine;
  • aiDaChui_normalAttack;
  • }
  • actions
  • {
  • Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0);
  • Set Status(Event Player, Null, Burning, 3);
  • Wait(1.500, Ignore Condition);
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Abort;
  • End;
  • Stop Facing(Event Player);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Wait Until(Is Firing Primary(Event Player) == False, 99999);
  • Clear Status(Event Player, Burning);
  • Wait(0.800, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)), 40, To World,
  • Direction and Turn Rate);
  • Stop Forcing Throttle(Event Player);
  • }
  • }
  • rule("铠之巨人AI 3连正常攻击")
  • {
  • event
  • {
  • Subroutine;
  • aiDaChui_3normalAttack;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Burning, 9999);
  • Wait(2, Ignore Condition);
  • If(Has Status(Event Player, Frozen) == True);
  • Abort;
  • End;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(4, Ignore Condition);
  • Wait Until(Has Status(Event Player, Frozen), 4);
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Abort;
  • End;
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait Until(Is Firing Primary(Event Player) == False, 99999);
  • Clear Status(Event Player, Burning);
  • Start Forcing Throttle(Event Player, 0, 0, 0, 0, 0, 0);
  • Stop Facing(Event Player);
  • Wait(1.500, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)), 40, To World,
  • Direction and Turn Rate);
  • Stop Forcing Throttle(Event Player);
  • }
  • }
  • rule("铠之巨人AI 冲锋攻击")
  • {
  • event
  • {
  • Subroutine;
  • aiDaChui_rushAttack;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Burning, 99);
  • Wait(1, Ignore Condition);
  • Start Throttle In Direction(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)), 1,
  • To World, Replace existing throttle, Direction and Magnitude);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.100, Ignore Condition);
  • While(Is Using Ability 1(Event Player) == True);
  • Damage(Players Within Radius(World Vector Of(Vector(0, 6, 4), Event Player, Rotation And Translation), 8, Team 1, Off),
  • Event Player, 5);
  • Wait(0.100, Ignore Condition);
  • End;
  • Clear Status(Event Player, Burning);
  • Stop Throttle In Direction(Event Player);
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("超大巨AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_Big;
  • }
  • actions
  • {
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 80 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 80, Team 1, Off));
  • Skip If(Event Player.ai_1 == 0, 3);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 30 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Else;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.700));
  • Start Rule(aiBig_punchAttack, Do Nothing);
  • Else If(Filtered Array(Players Within Radius(World Vector Of(Vector(0, 30, 0), Event Player, Rotation And Translation), 25, Team 1,
  • Off), Is Alive(Current Array Element) && Has Spawned(Current Array Element)) != Empty Array);
  • Call Subroutine(aiBig_SteamAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("超大巨AI 冲拳攻击")
  • {
  • event
  • {
  • Subroutine;
  • aiBig_punchAttack;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Set Status(Event Player, Null, Burning, 5);
  • Wait(2, Ignore Condition);
  • Press Button(Event Player, Button(Melee));
  • Wait Until(Is Meleeing(Event Player) == False, 99999);
  • Abort If(Event Player.ai_3 != Empty Array);
  • Clear Status(Event Player, Burning);
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)), 50, To World,
  • Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Start Rule(aiBig_walkingAttack, Restart Rule);
  • }
  • }
  • rule("超大巨AI 蒸汽攻击")
  • {
  • event
  • {
  • Subroutine;
  • aiBig_SteamAttack;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Set Status(Event Player, Null, Burning, 9999);
  • Wait(0.500, Ignore Condition);
  • If(Has Status(Event Player, Frozen) == True);
  • Abort;
  • End;
  • Set Status(Event Player, Null, Invincible, 9999);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.100, Ignore Condition);
  • Set Status(Event Player, Null, Invincible, 9999);
  • Wait Until(Is Using Ability 1(Event Player) == False, 99999);
  • Event Player.ai_2 = Total Time Elapsed;
  • While(Is Alive(Event Player) && Total Time Elapsed < Event Player.ai_2 + 4);
  • Press Button(Event Player, Button(Ability 1));
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), World Vector Of(Vector(0, 20, 0), Event Player,
  • Rotation And Translation), 35);
  • Wait(0.100, Ignore Condition);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), World Vector Of(Vector(0, 20, 0), Event Player,
  • Rotation And Translation), 25);
  • Wait(0.100, Ignore Condition);
  • Damage(Players Within Radius(World Vector Of(Vector(0, 20, 0), Event Player, Rotation And Translation), 25, Team 1, Off),
  • Event Player, 5);
  • End;
  • Clear Status(Event Player, Invincible);
  • Event Player.ai_3[0] = Empty Array;
  • Clear Status(Event Player, Burning);
  • Wait(4 - Global.ai_adjustPerst * 1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)), 50, To World,
  • Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • }
  • }
  • rule("奇行种AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_Special;
  • }
  • actions
  • {
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 60, Team 1, Off));
  • If(Event Player.ai_1 == 0);
  • Wait(2, Ignore Condition);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Start Facing(Event Player, Vector(Evaluate Once(Random Value In Array(Array(-1, 1))), 0, 0), Evaluate Once(Random Real(50, 300)),
  • To Player, Direction and Turn Rate);
  • Wait(1.500, Ignore Condition);
  • Stop Forcing Throttle(Event Player);
  • Stop Facing(Event Player);
  • Else;
  • Call Subroutine(aiSpecial_Chasing);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("奇行种AI 追击")
  • {
  • event
  • {
  • Subroutine;
  • aiSpecial_Chasing;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Abort If(Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1)) > 60);
  • Start Forcing Throttle(Event Player, Random Real(0.800, 1), 1, 0, 1, 0, 1);
  • Start Facing(Event Player, Direction From Angles(Random Integer(-60, 60) + Horizontal Angle From Direction(Direction Towards(
  • Eye Position(Event Player), Eye Position(Event Player.ai_1))), Vertical Angle From Direction(Direction Towards(Eye Position(
  • Event Player), Eye Position(Event Player.ai_1)))), Random Integer(50, 150), To World, None);
  • Start Holding Button(Event Player, Array(Button(Jump), Button(Crouch))[Random Integer(0, 4)]);
  • Wait(0.750, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Stop Holding Button(Event Player, Button(Jump));
  • If(Filtered Array(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Current Array Element,
  • Position Of(Event Player)) < Event Player.bodysize * 2) != Empty Array);
  • Call Subroutine(aiSpecial_attack);
  • Event Player.ai_1 = 0;
  • End;
  • Loop If(Entity Exists(Event Player.ai_1) && Is Alive(Event Player.ai_1));
  • Event Player.ai_1 = 0;
  • }
  • }
  • rule("奇行种AI 水溅跃!")
  • {
  • event
  • {
  • Subroutine;
  • aiSpecial_attack;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Crouch));
  • Set Status(Event Player, Null, Burning, 999);
  • Wait(1, Ignore Condition);
  • Stop Forcing Throttle(Event Player);
  • Stop Facing(Event Player);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Start Facing(Event Player, Vector(1, 0, 0), 500, To Player, Direction and Turn Rate);
  • Set Status(Event Player, Null, Knocked Down, Random Real(1.500, 5));
  • While(Has Status(Event Player, Knocked Down) == True);
  • Apply Impulse(Event Player, Up, 18, To Player, Cancel Contrary Motion);
  • Apply Impulse(Event Player, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Position Of(Event Player),
  • Position Of(Closest Player To(Position Of(Event Player), Team 1)))), 0), 10, To World, Cancel Contrary Motion);
  • Wait(0.100, Ignore Condition);
  • Wait Until(Is On Ground(Event Player), 99999);
  • Damage(Filtered Array(Players Within Radius(Position Of(Event Player), Event Player.bodysize * 2, Team 1, Off),
  • Current Array Element != Event Player), Event Player, 50);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Yellow), Position Of(Event Player), Event Player.bodysize * 2);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), Position Of(Event Player), Event Player.bodysize * 3);
  • End;
  • Stop Facing(Event Player);
  • Clear Status(Event Player, Burning);
  • Set Status(Event Player, Null, Stunned, 1);
  • Wait(2.800, Ignore Condition);
  • }
  • }
  • rule("鄂之巨人AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_Jaw;
  • }
  • actions
  • {
  • If(Event Player.ai_3 == 0 && Count Of(Players On Hero(Hero(Wrecking Ball), Team 2)) > 0);
  • Event Player.ai_1 = First Of(Sorted Array(Players On Hero(Hero(Wrecking Ball), Team 2), Distance Between(Position Of(
  • Current Array Element), Position Of(Event Player))));
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Start Facing(Event Player, Direction Towards(Position Of(Event Player), Position Of(Event Player.ai_1)) * Vector(1, 0, 1),
  • 30 + Global.ai_adjustPerst * 50, To World, Direction and Turn Rate);
  • If(Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Position Of(Event Player.ai_1) * Vector(1, 0, 1)) <= 10);
  • Event Player.ai_2 = 1;
  • Call Subroutine(aiJaw_Attack);
  • Event Player.ai_2 = 0;
  • End;
  • Else;
  • Skip If(Event Player.ai_1 == 0, 1);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Vector(1, 0, 1) * Position Of(Event Player), Eye Position(Event Player.ai_1))
  • > Y Component Of(Position Of(Event Player)) || Entity Exists(Event Player.ai_1) == False);
  • Event Player.ai_1 = 0;
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Vector(1, 0, 1) * Position Of(Event Player), Y Component Of(Position Of(
  • Event Player)), Team 1, Off));
  • If(Event Player.ai_1 == 0);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Vector(0, 0, 0)) * Vector(1, 0, 1), 30, To World,
  • Direction and Turn Rate);
  • Else;
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Start Facing(Event Player, Vector(1, 0, 1) * Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 30 + Global.ai_adjustPerst * 50, To World, Direction and Turn Rate);
  • End;
  • End;
  • End;
  • If(Y Component Of(Position Of(Event Player)) > 25);
  • If(Filtered Array(All Players(Team 1), Y Component Of(Position Of(Event Player)) > Y Component Of(Position Of(
  • Current Array Element)) && Distance Between(Vector(1, 0, 1) * Eye Position(Event Player), Vector(1, 0, 1) * Eye Position(
  • Current Array Element)) < 8) != Empty Array);
  • Event Player.ai_2 = 1;
  • Call Subroutine(aiJaw_Attack);
  • Event Player.ai_2 = 0;
  • End;
  • End;
  • Wait Until(Has Status(Event Player, Frozen) == False, 99999);
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("鄂之巨人AI 飞行")
  • {
  • event
  • {
  • Subroutine;
  • aiJaw_Fly;
  • }
  • actions
  • {
  • Skip If(Is Using Ability 1(Event Player) == True, 4);
  • If(Y Component Of(Position Of(Event Player)) < 60 - (Event Player.ai_3 != 0) * 35 && Has Status(Event Player, Frozen)
  • == False && Event Player.ai_2 == 0);
  • Press Button(Event Player, Button(Ability 1));
  • Start Holding Button(Event Player, Button(Jump));
  • End;
  • Wait(2, Ignore Condition);
  • Loop;
  • Loop If(Hero Of(Event Player) == Hero(Echo));
  • }
  • }
  • rule("鄂之巨人AI 俯冲攻击!")
  • {
  • event
  • {
  • Subroutine;
  • aiJaw_Attack;
  • }
  • actions
  • {
  • Detach Players(Event Player.ai_3);
  • Event Player.ai_3 = 0;
  • Stop Forcing Throttle(Event Player);
  • Stop Facing(Event Player);
  • Cancel Primary Action(Event Player);
  • Start Forcing Player Position(Event Player, Position Of(Event Player), False);
  • Set Status(Event Player, Null, Burning, 10);
  • Wait(2 - Global.ai_adjustPerst, Ignore Condition);
  • Wait Until(Has Status(Event Player, Frozen), 2 - Global.ai_adjustPerst);
  • Stop Forcing Player Position(Event Player);
  • Abort If(Has Status(Event Player, Frozen) == True);
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Abort;
  • End;
  • Stop Holding Button(Event Player, Button(Jump));
  • Set Facing(Event Player, Down, To World);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Wait(0.016, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Set Move Speed(Event Player, 7000);
  • Wait(0.016, Ignore Condition);
  • While(Y Component Of(Position Of(Event Player)) > 20);
  • Wait(0.100, Ignore Condition);
  • While(Y Component Of(Position Of(Event Player)) > 20 && !Has Status(Event Player, Frozen));
  • Damage(Players Within Radius(Position Of(Event Player), 10, Team 1, Off), Event Player, 2);
  • Wait(0.032, Ignore Condition);
  • End;
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Start Holding Button(Event Player, Button(Jump));
  • Set Facing(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), 0), To World);
  • Abort;
  • End;
  • Press Button(Event Player, Button(Melee));
  • Wait Until(Y Component Of(Velocity Of(Event Player)) == 0, 3);
  • Clear Status(Event Player, Burning);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Start Holding Button(Event Player, Button(Jump));
  • Damage(Filtered Array(All Players(Team 1), Distance Between(Position Of(Current Array Element), Position Of(Event Player) * Vector(
  • 1, 0, 1)) < 18), Event Player, 60);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Sound, Color(White), Position Of(Event Player), 100);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(White), Vector(0, 0.500, 0) + Position Of(Event Player) * Vector(1, 0,
  • 1), 20);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(White), Vector(0, 0.500, 0) + Position Of(Event Player) * Vector(1, 0,
  • 1), 30);
  • Wait(0.100, Ignore Condition);
  • Set Facing(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), 0), To World);
  • Skip If(Distance Between(Position Of(Event Player), Position Of(Event Player.ai_1)) > 10, 2);
  • Event Player.ai_3 = Event Player.ai_1;
  • Attach Players(Event Player.ai_3, Event Player, Vector(0, -5, 0));
  • }
  • }
  • rule("————Robot&Ai————")
  • {
  • event
  • {
  • Ongoing - Global;
  • If(Team Of(Event Player.ai_1) == Team 2);
  • Skip If(Distance Between(Position Of(Event Player), Position Of(Event Player.ai_1)) > 15, 2);
  • Event Player.ai_3 = Event Player.ai_1;
  • Attach Players(Event Player.ai_3, Event Player, Vector(0, -5, 0));
  • End;
  • }
  • }
  • rule("战锤巨人AI")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_Hammer;
  • }
  • actions
  • {
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player.ai_1), Eye Position(Event Player))
  • > 60 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 60, Team 1, Off));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 20 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • 20 + Global.ai_adjustPerst * 15, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Else;
  • If(Is In View Angle(Event Player, Eye Position(Event Player.ai_1), 25) == True);
  • Call Subroutine(aiHammer_attack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 1));
  • Call Subroutine(aiHammer_ShieldAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("战锤巨人AI 远距离攻击")
  • {
  • event
  • {
  • Subroutine;
  • aiHammer_attack;
  • }
  • actions
  • {
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Set Status(Event Player, Null, Burning, 10);
  • Wait(3 - Global.ai_adjustPerst, Ignore Condition);
  • Wait Until(Has Status(Event Player, Frozen), 3 - Global.ai_adjustPerst);
  • If(Has Status(Event Player, Frozen) == True);
  • Abort;
  • End;
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.200, Ignore Condition);
  • Clear Status(Event Player, Burning);
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("战锤巨人AI 盾击")
  • {
  • event
  • {
  • Subroutine;
  • aiHammer_ShieldAttack;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Burning, 3);
  • Event Player.ai_1 = First Of(Filtered Array(All Living Players(Team 1), Distance Between(Eye Position(Current Array Element),
  • World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation) + Facing Direction Of(
  • Event Player) * Event Player.bodysize) <= Event Player.bodysize * 1));
  • Stop Forcing Throttle(Event Player);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Start Holding Button(Event Player, Button(Crouch));
  • Set Damage Dealt(Event Player, 20 * (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Wait(2.500 - Global.ai_adjustPerst, Ignore Condition);
  • Wait Until(Has Status(Event Player, Frozen), 2.500 - Global.ai_adjustPerst);
  • Clear Status(Event Player, Burning);
  • If(Has Status(Event Player, Frozen) == True);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Stop Holding Button(Event Player, Button(Crouch));
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 20 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Abort;
  • End;
  • Stop Facing(Event Player);
  • If((Is Firing Secondary(Event Player) && Is Crouching(Event Player)) == True);
  • Press Button(Event Player, Button(Primary Fire));
  • End;
  • Clear Status(Event Player, Burning);
  • Wait(1, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Stop Holding Button(Event Player, Button(Crouch));
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 20 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • }
  • }
  • rule("战锤巨人Ai 水晶化")
  • {
  • event
  • {
  • Subroutine;
  • aiHammer_Crystallize;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.ai_2);
  • Set Status(Event Player, Null, Invincible, 9999);
  • Create Effect(All Players(Team 1), Echo Cloning Effect, Color(White), Event Player, 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Echo Cloning Effect, Color(White), Event Player, 1, Visible To Position and Radius);
  • Event Player.ai_2 = Last Created Entity;
  • While(Has Status(Event Player, Invincible) == True);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("{0}被水晶包覆了 ! 利用雷枪炸开防御", Hero Icon String(Hero(Brigitte))));
  • Small Message(All Players(All Teams), Custom String("{0}被水晶包覆了 , 利用雷枪炸开后颈吧!", Hero Icon String(Hero(Brigitte))));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("{0} crystallized herself. Use Thunder Spear To Breakdown the crystal !",
  • Small Message(All Players(All Teams), Custom String("{0} crystallized herself. Use Thunder Spear To Breakdown Her Nape !",
  • Hero Icon String(Hero(Brigitte))));
  • End;
  • Wait(5, Ignore Condition);
  • End;
  • Wait(4 - Global.ai_adjustPerst * 2, Ignore Condition);
  • Wait(6 - Global.ai_adjustPerst * 2, Ignore Condition);
  • Abort If(Hero Of(Event Player) != Hero(Brigitte));
  • Loop;
  • }
  • }
  • rule("战锤巨人Ai 被攻击水晶化")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • Brigitte;
  • }
  • actions
  • {
  • Start Rule(aiHammer_Crystallize, Do Nothing);
  • }
  • }
  • rule("车力巨人Ai")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_Cart;
  • }
  • actions
  • {
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 80 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 80, Team 1, Off));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 0.200, 1, 0, 1, 1, 1);
  • Else;
  • If(Y Component Of(Position Of(Event Player)) == 0 && Magnitude Of(Vector(1, 0, 1) * Vector Towards(Position Of(Event Player),
  • Position Of(Event Player.ai_1))) > 50);
  • Call Subroutine(aiCart_run);
  • End;
  • If(Altitude Of(Closest Player To(Position Of(Event Player), Team 1)) < 3 && Filtered Array(Players Within Radius(Position Of(
  • Event Player), Event Player.bodysize, Team 1, Off), Is Alive(Current Array Element)) != Empty Array);
  • Call Subroutine(AiJump_attack);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 0.200, 1, 0, 1, 1, 1);
  • Else If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), Eye Position(Event Player) + Facing Direction Of(Event Player) * Event Player.bodysize)
  • < Event Player.bodysize * 0.700));
  • Call Subroutine(Aipunch);
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 0.200, 1, 0, 1, 1, 1);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("车力巨人Ai 跑路")
  • {
  • event
  • {
  • Subroutine;
  • aiCart_run;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Stop Forcing Throttle(Event Player);
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Wait(1, Ignore Condition);
  • Wait Until(Magnitude Of(Vector(1, 0, 1) * Vector Towards(Position Of(Event Player), Position Of(Event Player.ai_1))) < 40, 8);
  • Stop Forcing Throttle(Event Player);
  • Start Forcing Throttle(Event Player, 0.200, 1, 0, 1, 1, 1);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("————Robot&Ai————")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("最后一击判定")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • actions
  • {
  • If(Team Of(Victim) == Team 2 && Hero Of(Victim) != Hero(Sigma));
  • Modify Team Score(Team 1, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3]);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("{0}{1} 已被讨伐 分数额外+{2}", Hero Icon String(Hero Of(Victim)), Victim,
  • Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Victim))][3]));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("{0}{1} has been eliminated +{2} Bonus Score", Hero Icon String(Hero Of(
  • Victim)), Victim, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Victim))][3]));
  • End;
  • End;
  • Global.End_kill_player = Attacker;
  • Global.End_kill_Titan = Victim;
  • If(Team Score(Team Of(Event Player)) >= 50);
  • Global.Boss_Fight = True;
  • End;
  • Abort If(Global.HACK == 1 && Team Of(Event Player) == Team 1);
  • If(Team Score(Team 1) >= 80 || Team Score(Team 2) >= 60);
  • Set Damage Received(All Players(All Teams), 0);
  • Set Damage Dealt(All Players(All Teams), 0);
  • Disable Hero HUD(All Players(All Teams));
  • Destroy All HUD Text;
  • Set Slow Motion(30);
  • Start Camera(All Players(All Teams), Eye Position(Global.End_kill_player) + Direction Towards(Eye Position(Global.End_kill_Titan),
  • Eye Position(Global.End_kill_player)) * 8, Eye Position(Global.End_kill_player), 30);
  • Wait(1, Ignore Condition);
  • Set Slow Motion(100);
  • Stop Camera(All Players(All Teams));
  • Wait(2, Ignore Condition);
  • Declare Team Victory(Team Of(Global.End_kill_player));
  • End;
  • }
  • }
  • rule("smoke_effect")
  • {
  • event
  • {
  • Subroutine;
  • Smoke_effect;
  • }
  • actions
  • {
  • Set Invisible(Event Player, All);
  • For Player Variable(Event Player, i, 0, 5, 1);
  • Play Effect(All Players(All Teams), Bad Explosion, Random Value In Array(Array(Color(White), Color(Yellow), Color(Red), Color(
  • Orange))), Vector(X Component Of(Position Of(Event Player)), (Y Component Of(Eye Position(Event Player)) + Y Component Of(
  • Position Of(Event Player))) / 2, Z Component Of(Position Of(Event Player))), 40);
  • Wait(0.100, Ignore Condition);
  • End;
  • Set Invisible(Event Player, None);
  • }
  • }
  • rule("进击的巨人Ai")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_AttackTitan;
  • }
  • actions
  • {
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("阻止 {0} 接触 {1} !", Hero Icon String(Hero(Doomfist)), Hero Icon String(Hero(
  • Winston))));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("Stop {0} From Touching {1} !", Hero Icon String(Hero(Doomfist)),
  • Hero Icon String(Hero(Winston))));
  • End;
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Players On Hero(Hero(Winston), Team 2))), 80,
  • To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Event Player.Founding_Titan = 0.500;
  • Players On Hero(Hero(Winston), Team 2).Founding_Titan = 0.500;
  • While(Event Player.life > 0 && Distance Between(Eye Position(Event Player), Eye Position(Players On Hero(Hero(Winston), Team 2)))
  • > 15);
  • Wait(0.300, Ignore Condition);
  • If(Is True For Any(All Living Players(Team 1),
  • Current Array Element.tL == Event Player || Current Array Element.tR == Event Player));
  • Call Subroutine(aiAttackTitan_attack);
  • End;
  • End;
  • Players On Hero(Hero(Winston), Team 2).Founding_Titan = 0;
  • If(Event Player.life <= 0);
  • Set Status(Event Player, Null, Knocked Down, 5);
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("已成功阻止 {0} 接触 {1}", Hero Icon String(Hero(Doomfist)), Hero Icon String(Hero(
  • Winston))));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("Stop {0} From Touching {1} successfully", Hero Icon String(Hero(Doomfist)),
  • Hero Icon String(Hero(Winston))));
  • End;
  • Wait(5, Ignore Condition);
  • Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • Destroy Dummy Bot(Team 2, Slot Of(Event Player));
  • Else;
  • Press Button(Event Player, Button(Ultimate));
  • If(Global.Language == 0);
  • Small Message(All Players(All Teams), Custom String("{0} 已进入坐标", Hero Icon String(Hero(Doomfist))));
  • Big Message(All Players(All Teams), Custom String("{0} 已进入坐标", Hero Icon String(Hero(Doomfist))));
  • Else If(Global.Language == 1);
  • Small Message(All Players(All Teams), Custom String("{0} Enter the Coordinate", Hero Icon String(Hero(Doomfist))));
  • Big Message(All Players(All Teams), Custom String("{0} Enter the Coordinate", Hero Icon String(Hero(Doomfist))));
  • End;
  • Preload Hero(Event Player, Hero(Baptiste));
  • Stop Facing(Event Player);
  • Global.HACK = 1;
  • Stop Forcing Throttle(Event Player);
  • Wait(4, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(1, Ignore Condition);
  • Start Forcing Player To Be Hero(Event Player, Hero(Baptiste));
  • Wait(0.500, Ignore Condition);
  • Event Player.life = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][3];
  • Start Forcing Dummy Bot Name(Event Player, Evaluate Once(Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(
  • Event Player))][4]));
  • Remove All Health Pools From Player(Event Player);
  • Add Health Pool To Player(Event Player, Health, 0.500 * Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))
  • ][5], True, True);
  • Start Scaling Player(Event Player, Event Player.bodysize, True);
  • Start Rule(Giant_Ai_FoundingTitan, Do Nothing);
  • }
  • }
  • rule("进击的巨人Ai 赶人")
  • {
  • event
  • {
  • Subroutine;
  • aiAttackTitan_attack;
  • }
  • actions
  • {
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Set Status(Event Player, Null, Burning, 3);
  • Wait(2.500 - Global.ai_adjustPerst, Ignore Condition);
  • Stop Forcing Throttle(Event Player);
  • Stop Facing(Event Player);
  • Set Facing(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), 0), To World);
  • Press Button(Event Player, Button(Ability 1));
  • Start Forcing Player Position(Event Player, Position Of(Event Player) + Vector(0, 0.500, 0), False);
  • Press Button(Filtered Array(All Players(Team 1), Current Array Element.tL == Event Player), Button(Ultimate));
  • Press Button(Filtered Array(All Players(Team 1), Current Array Element.tR == Event Player), Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • Stop Facing(Event Player);
  • Clear Status(Event Player, Burning);
  • Stop Forcing Player Position(Event Player);
  • Wait Until(Is On Ground(Event Player), 2);
  • Wait(1 - Global.ai_adjustPerst, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Players On Hero(Hero(Winston), Team 2))), 80,
  • To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • }
  • }
  • rule("始祖巨人 Ai")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_FoundingTitan;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Unkillable, 999999);
  • Event Player.bodysize = 13;
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Heal(Event Player, Null, 99999);
  • Wait Until(Is On Ground(Event Player), 99999);
  • Event Player.Founding_Titan = 1;
  • If(Count Of(Players Within Radius(Position Of(Event Player), 70, Team 2, Off)) < 5);
  • Call Subroutine(aiFoundingTitan_Telep);
  • End;
  • Event Player.Founding_Titan = Random Integer(2, 7);
  • Preload Hero(Event Player, Array(Null, Hero(Baptiste), Hero(Wrecking Ball), Hero(Brigitte), Hero(Zarya), Hero(Reinhardt), Hero(
  • Echo), Hero(Soldier: 76))[Event Player.Founding_Titan]);
  • If(Array Contains(Array(4, 6), Event Player.Founding_Titan) == True);
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(0.300, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Press Button(Event Player, Button(Jump));
  • Apply Impulse(Event Player, Up, 50, To World, Cancel Contrary Motion);
  • Wait(2, Ignore Condition);
  • Else;
  • Stop Facing(Event Player);
  • Start Holding Button(Event Player, Button(Crouch));
  • Start Facing(Event Player, Vector(1, 0, 0), 720, To Player, Direction and Turn Rate);
  • Wait(1, Ignore Condition);
  • Stop Facing(Event Player);
  • Stop Holding Button(Event Player, Button(Crouch));
  • End;
  • Start Rule(Smoke_effect, Do Nothing);
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Player To Be Hero(Event Player, Array(Null, Hero(Baptiste), Hero(Wrecking Ball), Hero(Brigitte), Hero(Zarya), Hero(
  • Reinhardt), Hero(Echo), Hero(Soldier: 76))[Event Player.Founding_Titan]);
  • If(Event Player.Founding_Titan == 2);
  • Call Subroutine(aiFoundingTitan_cart);
  • Else If(Event Player.Founding_Titan == 3);
  • Call Subroutine(aiFoundingTitan_hammer);
  • Else If(Event Player.Founding_Titan == 4);
  • Call Subroutine(aiFoundingTitan_Colossal);
  • Else If(Event Player.Founding_Titan == 5);
  • Call Subroutine(aiFoundingTitan_Armor);
  • Else If(Event Player.Founding_Titan == 6);
  • Call Subroutine(aiFoundingTitan_raw);
  • Else If(Event Player.Founding_Titan == 7);
  • Call Subroutine(aiFoundingTitan_male);
  • End;
  • Wait(6 - Global.ai_adjustPerst * 2, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("始祖巨人 Ai 召唤巨人")
  • {
  • event
  • {
  • Subroutine;
  • aiFoundingTitan_Telep;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Burning, 5);
  • Wait Until(Has Status(Event Player, Frozen), 3.500 - Global.ai_adjustPerst);
  • If(Has Status(Event Player, Frozen) == True);
  • Clear Status(Event Player, Burning);
  • Abort;
  • Else;
  • Play Effect(All Players(All Teams), Ring Explosion, Color(White), Position Of(Event Player) + Vector(0, 5, 0), 60);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(White), Position Of(Event Player) + Vector(0, 0.500, 0), 80);
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Press Button(Event Player, Button(Ability 1));
  • Event Player.ai_2 = Filtered Array(All Living Players(Team 2), Current Array Element != Event Player);
  • While(Event Player.ai_2 != Empty Array);
  • Teleport(First Of(Event Player.ai_2), Position Of(Event Player) + Direction From Angles(Slot Of(First Of(Event Player.ai_2)) * 40,
  • 0) * 30);
  • Play Effect(All Players(All Teams), Bad Explosion, Random Value In Array(Array(Color(White), Color(Yellow), Color(Red), Color(
  • Orange))), Vector(X Component Of(Position Of(First Of(Event Player.ai_2))), (Y Component Of(Eye Position(First Of(
  • Event Player.ai_2))) + Y Component Of(Position Of(First Of(Event Player.ai_2)))) / 2, Z Component Of(Position Of(First Of(
  • Event Player.ai_2)))), 40);
  • Play Effect(All Players(All Teams), Bad Explosion, Random Value In Array(Array(Color(White), Color(Yellow), Color(Red), Color(
  • Orange))), Vector(X Component Of(Position Of(First Of(Event Player.ai_2))), (Y Component Of(Eye Position(First Of(
  • Event Player.ai_2))) + Y Component Of(Position Of(First Of(Event Player.ai_2)))) / 2, Z Component Of(Position Of(First Of(
  • Event Player.ai_2)))), 40);
  • Set Facing(First Of(Event Player.ai_2), Direction Towards(Position Of(Event Player), Position Of(First Of(Event Player.ai_2))),
  • To World);
  • Modify Player Variable(Event Player, ai_2, Remove From Array By Index, 0);
  • Wait(0.100, Ignore Condition);
  • End;
  • Clear Status(Event Player, Burning);
  • Wait(0.500, Ignore Condition);
  • Event Player.ai_2 = 0;
  • End;
  • }
  • }
  • rule("始祖巨人 Ai 车巨化")
  • {
  • event
  • {
  • Subroutine;
  • aiFoundingTitan_cart;
  • }
  • actions
  • {
  • Event Player.bodysize = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6];
  • Heal(Event Player, Null, 99999);
  • Wait(1, Ignore Condition);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Clear Status(Event Player, Frozen);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Preload Hero(Event Player, Hero(Baptiste));
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Heal(Event Player, Null, 99999);
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • While(Health(Event Player) > 10 && Has Status(Event Player, Frozen) == False);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 80 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 80, Team 1, Off));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 0.200, 1, 0, 1, 1, 1);
  • Else;
  • If(Y Component Of(Position Of(Event Player)) == 0 && Magnitude Of(Vector(1, 0, 1) * Vector Towards(Position Of(Event Player),
  • Position Of(Event Player.ai_1))) > 50);
  • Call Subroutine(aiCart_run);
  • End;
  • If(Altitude Of(Closest Player To(Position Of(Event Player), Team 1)) < 3 && Filtered Array(Players Within Radius(Position Of(
  • Event Player), Event Player.bodysize, Team 1, Off), Is Alive(Current Array Element)) != Empty Array);
  • Call Subroutine(AiJump_attack);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 0.200, 1, 0, 1, 1, 1);
  • Else If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), Eye Position(Event Player) + Facing Direction Of(Event Player) * Event Player.bodysize)
  • < Event Player.bodysize * 0.700));
  • Call Subroutine(Aipunch);
  • Wait(1, Ignore Condition);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 10 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 0.200, 1, 0, 1, 1, 1);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • End;
  • If(Health(Event Player) < 10);
  • Event Player.life -= 1;
  • End;
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Start Rule(Smoke_effect, Restart Rule);
  • Event Player.bodysize = 13;
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Player To Be Hero(Event Player, Hero(Baptiste));
  • Wait(0.500, Ignore Condition);
  • Abort If(Is Dead(Event Player));
  • }
  • }
  • rule("始祖巨人 Ai 战锤化")
  • {
  • event
  • {
  • Subroutine;
  • aiFoundingTitan_hammer;
  • }
  • actions
  • {
  • Event Player.bodysize = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6];
  • Heal(Event Player, Null, 99999);
  • Wait(1, Ignore Condition);
  • Start Rule(aiHammer_Crystallize, Do Nothing);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Clear Status(Event Player, Frozen);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Preload Hero(Event Player, Hero(Baptiste));
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Heal(Event Player, Null, 99999);
  • Wait(0.100, Ignore Condition);
  • While(Health(Event Player) > 10 && Has Status(Event Player, Frozen) == False);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player.ai_1), Eye Position(Event Player))
  • > 60 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 60, Team 1, Off));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 20 + Global.ai_adjustPerst * 15, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Else;
  • If(Is In View Angle(Event Player, Eye Position(Event Player.ai_1), 25) == True);
  • Call Subroutine(aiHammer_attack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 1));
  • Call Subroutine(aiHammer_ShieldAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • End;
  • If(Health(Event Player) < 10);
  • Event Player.life -= 1;
  • End;
  • Start Rule(Smoke_effect, Restart Rule);
  • Event Player.bodysize = 13;
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Player To Be Hero(Event Player, Hero(Baptiste));
  • Wait(0.500, Ignore Condition);
  • Abort If(Is Dead(Event Player));
  • }
  • }
  • rule("始祖巨人 Ai 超大巨化")
  • {
  • event
  • {
  • Subroutine;
  • aiFoundingTitan_Colossal;
  • }
  • actions
  • {
  • Event Player.bodysize = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6];
  • Heal(Event Player, Null, 99999);
  • Wait(1, Ignore Condition);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Clear Status(Event Player, Frozen);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Preload Hero(Event Player, Hero(Baptiste));
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Heal(Event Player, Null, 99999);
  • Set Status(Event Player, Null, Knocked Down, 9999);
  • Wait Until(Is On Ground(Event Player), 99999);
  • Damage(Filtered Array(Players Within Radius(Position Of(Event Player), 50, Team 1, Off), Current Array Element != Event Player),
  • Event Player, 1000);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(Yellow), Position Of(Event Player), 100);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), Position Of(Event Player), 50);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Effect, Color(White), Position Of(Event Player), 255);
  • Wait(0.100, Ignore Condition);
  • Clear Status(Event Player, Knocked Down);
  • While(Health(Event Player) > 10 && Has Status(Event Player, Frozen) == False);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 80 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 80, Team 1, Off));
  • Skip If(Event Player.ai_1 == 0, 3);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 30 + Global.ai_adjustPerst * 20, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Else;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.700));
  • Start Rule(aiBig_punchAttack, Do Nothing);
  • Else If(Filtered Array(Players Within Radius(World Vector Of(Vector(0, 30, 0), Event Player, Rotation And Translation), 25, Team 1,
  • Off), Is Alive(Current Array Element) && Has Spawned(Current Array Element)) != Empty Array);
  • Call Subroutine(aiBig_SteamAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • End;
  • If(Health(Event Player) < 10);
  • Event Player.life -= 1;
  • End;
  • Start Rule(Smoke_effect, Restart Rule);
  • Event Player.bodysize = 13;
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Player To Be Hero(Event Player, Hero(Baptiste));
  • Wait(0.500, Ignore Condition);
  • Abort If(Is Dead(Event Player));
  • }
  • }
  • rule("始祖巨人 Ai 铠巨化")
  • {
  • event
  • {
  • Subroutine;
  • aiFoundingTitan_Armor;
  • }
  • actions
  • {
  • Event Player.bodysize = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6];
  • Heal(Event Player, Null, 99999);
  • Wait(1, Ignore Condition);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Clear Status(Event Player, Frozen);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Preload Hero(Event Player, Hero(Baptiste));
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Heal(Event Player, Null, 99999);
  • Wait(0.100, Ignore Condition);
  • While(Health(Event Player) > 10 && Has Status(Event Player, Frozen) == False);
  • If(Is Dead(Event Player.ai_1) || Y Component Of(Position Of(Event Player.ai_1)) > 30 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Filtered Array(Players Within Radius(Position Of(Event Player), 50, Team 1, Off), Y Component Of(
  • Position Of(Current Array Element)) < 30));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 20 + Global.ai_adjustPerst * 15, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Else;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.800));
  • Call Subroutine(aiDaChui_normalAttack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 1.200));
  • Call Subroutine(aiDaChui_3normalAttack);
  • End;
  • If(Is In View Angle(Event Player, Eye Position(Event Player.ai_1), 40) && Distance Between(Position Of(Event Player) * Vector(1, 0,
  • 1), Eye Position(Event Player.ai_1) * Vector(1, 0, 1)) > 15);
  • Call Subroutine(aiDaChui_rushAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • End;
  • If(Health(Event Player) < 10);
  • Event Player.life -= 2;
  • Else;
  • Wait(0.500, Ignore Condition);
  • Clear Status(Event Player, Frozen);
  • While(Health(Event Player) > 10 && Has Status(Event Player, Frozen) == False);
  • If(Is Dead(Event Player.ai_1) || Y Component Of(Position Of(Event Player.ai_1)) > 30 || Entity Exists(Event Player.ai_1) == False);
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Filtered Array(Players Within Radius(Position Of(Event Player), 50, Team 1, Off), Y Component Of(
  • Position Of(Current Array Element)) < 30));
  • Skip If(Event Player.ai_1 == 0, 2);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 20 + Global.ai_adjustPerst * 15, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Else;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.800));
  • Call Subroutine(aiDaChui_normalAttack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 1.200));
  • Call Subroutine(aiDaChui_3normalAttack);
  • End;
  • If(Is In View Angle(Event Player, Eye Position(Event Player.ai_1), 40) && Distance Between(Position Of(Event Player) * Vector(1, 0,
  • 1), Eye Position(Event Player.ai_1) * Vector(1, 0, 1)) > 15);
  • Call Subroutine(aiDaChui_rushAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • End;
  • End;
  • If(Health(Event Player) < 10);
  • Event Player.life -= 1;
  • End;
  • Start Rule(Smoke_effect, Restart Rule);
  • Event Player.bodysize = 13;
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Player To Be Hero(Event Player, Hero(Baptiste));
  • Wait(0.500, Ignore Condition);
  • Abort If(Is Dead(Event Player));
  • }
  • }
  • rule("始祖巨人 Ai 鄂巨化")
  • {
  • event
  • {
  • Subroutine;
  • aiFoundingTitan_raw;
  • }
  • actions
  • {
  • Event Player.bodysize = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6];
  • Heal(Event Player, Null, 99999);
  • Wait(1, Ignore Condition);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Clear Status(Event Player, Frozen);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Preload Hero(Event Player, Hero(Baptiste));
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Heal(Event Player, Null, 99999);
  • Wait(0.100, Ignore Condition);
  • Start Rule(aiJaw_Fly, Do Nothing);
  • While(Health(Event Player) > 10 && Has Status(Event Player, Frozen) == False);
  • If(Event Player.ai_3 == 0 && Count Of(Players On Hero(Hero(Wrecking Ball), Team 2)) > 0);
  • Event Player.ai_1 = First Of(Sorted Array(Players On Hero(Hero(Wrecking Ball), Team 2), Distance Between(Position Of(
  • Current Array Element), Position Of(Event Player))));
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Start Facing(Event Player, Direction Towards(Position Of(Event Player), Position Of(Event Player.ai_1)) * Vector(1, 0, 1),
  • 30 + Global.ai_adjustPerst * 50, To World, Direction and Turn Rate);
  • If(Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Position Of(Event Player.ai_1) * Vector(1, 0, 1)) <= 10);
  • Event Player.ai_2 = 1;
  • Call Subroutine(aiJaw_Attack);
  • Event Player.ai_2 = 0;
  • End;
  • Else;
  • Skip If(Event Player.ai_1 == 0, 1);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Vector(1, 0, 1) * Position Of(Event Player), Eye Position(Event Player.ai_1))
  • > Y Component Of(Position Of(Event Player)) || Entity Exists(Event Player.ai_1) == False);
  • Event Player.ai_1 = 0;
  • Stop Facing(Event Player);
  • Stop Forcing Throttle(Event Player);
  • Event Player.ai_1 = First Of(Players Within Radius(Vector(1, 0, 1) * Position Of(Event Player), Y Component Of(Position Of(
  • Event Player)), Team 1, Off));
  • If(Event Player.ai_1 == 0);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Vector(0, 0, 0)) * Vector(1, 0, 1), 30, To World,
  • Direction and Turn Rate);
  • Else;
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • Start Facing(Event Player, Vector(1, 0, 1) * Direction Towards(Eye Position(Event Player), Eye Position(Event Player.ai_1)),
  • 30 + Global.ai_adjustPerst * 50, To World, Direction and Turn Rate);
  • End;
  • End;
  • End;
  • If(Y Component Of(Position Of(Event Player)) > 25);
  • If(Filtered Array(All Players(Team 1), Y Component Of(Position Of(Event Player)) > Y Component Of(Position Of(
  • Current Array Element)) && Distance Between(Vector(1, 0, 1) * Eye Position(Event Player), Vector(1, 0, 1) * Eye Position(
  • Current Array Element)) < 8) != Empty Array);
  • Event Player.ai_2 = 1;
  • Call Subroutine(aiJaw_Attack);
  • Event Player.ai_2 = 0;
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • End;
  • If(Health(Event Player) < 10);
  • Event Player.life -= 1;
  • End;
  • Start Rule(Smoke_effect, Restart Rule);
  • Clear Status(Event Player, Frozen);
  • Event Player.bodysize = 13;
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Player To Be Hero(Event Player, Hero(Baptiste));
  • Stop Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Abort If(Is Dead(Event Player));
  • }
  • }
  • rule("始祖巨人 Ai 男巨化")
  • {
  • event
  • {
  • Subroutine;
  • aiFoundingTitan_male;
  • }
  • actions
  • {
  • Event Player.bodysize = Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][6];
  • Heal(Event Player, Null, 99999);
  • Wait(1, Ignore Condition);
  • Set Move Speed(Event Player, (0.500 + Global.ai_adjustPerst * 0.500) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][7]);
  • Clear Status(Event Player, Frozen);
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Preload Hero(Event Player, Hero(Baptiste));
  • Set Damage Dealt(Event Player, (0.100 + Global.ai_adjustPerst * 0.700) * Global.ar_giant[Index Of Array Value(Global.ar_hero,
  • Hero Of(Event Player))][8]);
  • Heal(Event Player, Null, 99999);
  • Wait(0.100, Ignore Condition);
  • While(Health(Event Player) > 10 && Has Status(Event Player, Frozen) == False);
  • Skip If(Event Player.ai_1 == 0, 1);
  • If(Is Dead(Event Player.ai_1) || Distance Between(Eye Position(Event Player), Eye Position(Event Player.ai_1))
  • > 60 || Entity Exists(Event Player.ai_1) == False);
  • Event Player.ai_1 = First Of(Players Within Radius(Eye Position(Event Player), 60, Team 1, Off));
  • Else;
  • Skip If(Is In View Angle(Event Player, Eye Position(Event Player.ai_1), 70) == True, 1);
  • Call Subroutine(ai76_targetRefresh);
  • If(Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Eye Position(Event Player.ai_1) * Vector(1, 0, 1)) > 15);
  • Call Subroutine(ai76_runAttack);
  • End;
  • If(Is True For Any(All Living Players(Team 1), Has Spawned(Current Array Element) && Distance Between(Eye Position(
  • Current Array Element), World Vector Of(Vector(0, Event Player.bodysize, 0), Event Player, Rotation And Translation)
  • + Facing Direction Of(Event Player) * Event Player.bodysize) < Event Player.bodysize * 0.700));
  • Call Subroutine(Aipunch);
  • Event Player.ai_1 = 0;
  • End;
  • If(Filtered Array(Players Within Radius(Position Of(Event Player), 9, Team 1, Off), Is Alive(Current Array Element) == True)
  • != Empty Array);
  • Call Subroutine(ai76_circleAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • End;
  • If(Health(Event Player) < 10);
  • Event Player.life -= 1;
  • End;
  • Start Rule(Smoke_effect, Restart Rule);
  • Event Player.bodysize = 13;
  • Set Status(Event Player, Null, Invincible, 2);
  • Start Forcing Player To Be Hero(Event Player, Hero(Baptiste));
  • Wait(0.500, Ignore Condition);
  • Abort If(Is Dead(Event Player));
  • }
  • }
Join the Workshop.codes Discord