Return to post
- 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));
- }
- }