Create
Return to post

Comparing difference between and

View raw
  • settings
  • 设置
  • {
  • main
  • 主程序
  • {
  • Description: "Attack on Titan:Forest of big tree's Fight with 9 TitanBoss in the forest! International Edition v4.11 by LonelyDwD Code:ZP1WW"
  • 描述: "进击の巨人:巨木森林讨伐战(Attack on Titan:Forest of big tree's) International Edition v2.97 by LonelyD.D 代码/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
  • 地图轮换: 暂停轮换
  • 比赛语音聊天: 启用
  • 玩家上限 队伍1: 9
  • 玩家上限 队伍2: 0
  • 观战者人数上限: 12
  • 返回大厅: 从不
  • 队列中的玩家可以加入: 是
  • }
  • 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
  • 无目标点决胜机制时平局时限: 150
  • 显示英雄位置: 开启
  • 目标点决胜机制: 关闭
  • 英雄池上限: 队伍人数+3
  • 获胜得分: 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
  • 双方队伍获胜得分差异: 开启
  • 比赛时长(分钟): 15
  • 获胜得分: 15
  • 队伍1获胜所需分数: 80
  • 队伍2获胜所需分数: 60
  • enabled maps
  • 启用地图
  • {
  • Workshop Expanse Night
  • 地图工坊空地(夜间)
  • }
  • }
  • General
  • 综合
  • {
  • Game Mode Start: Immediately
  • Hero Limit: Off
  • Respawn Time Scalar: 30%
  • Skins: Off
  • 复活时间: 30%
  • 比赛模式开始: 即时
  • 皮肤: 关闭
  • 英雄限制: 关闭
  • }
  • }
  • heroes
  • 英雄
  • {
  • Team 1
  • 队伍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
  • }
  • }
  • 投射物重力: 10%
  • 重生时终极技能充能完毕: 开启
  • 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
  • 伤害量: 300%
  • 守护天使: 关闭
  • 弹道速度: 300%
  • 无需装弹: 开启
  • 自动恢复: 关闭
  • 重生 冷却时间: 80%
  • }
  • Baptiste
  • 安娜
  • {
  • Jump Vertical Speed: 25%
  • 伤害量: 350%
  • 治疗量: 10%
  • }
  • Brigitte
  • 托比昂
  • {
  • Barrier Shield Cooldown Time: 0%
  • Barrier Shield Recharge Rate: 500%
  • Shield Bash Cooldown Time: 0%
  • 主要攻击模式: 关闭
  • 伤害量: 10%
  • 受到伤害量: 10%
  • 辅助攻击模式: 关闭
  • 近身攻击: 关闭
  • }
  • Echo
  • 末日铁拳
  • {
  • Flight Cooldown Time: 0%
  • 上勾重拳 冷却时间: 50%
  • 上勾重拳击退倍率: 10%
  • 火箭重拳击退倍率: 20%
  • 移动速度: 200%
  • 裂地重拳: 关闭
  • }
  • 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%
  • 粒子屏障 冷却时间: 1%
  • }
  • Junkrat
  • 温斯顿
  • {
  • Jump Vertical Speed: 150%
  • Primary Fire: Off
  • 喷射背包 冷却时间: 250%
  • 重生时终极技能充能完毕: 开启
  • }
  • McCree
  • 源氏
  • {
  • Ammunition Clip Size Scalar: 200%
  • Combat Roll: Off
  • Damage Dealt: 150%
  • Projectile Speed: 500%
  • Secondary Fire: Off
  • 垂直跳跃速度: 70%
  • 弹夹容量倍率: 25%
  • 影: 关闭
  • 战斗时终极技能充能速度 斩: 0%
  • 终极技能持续时间无限: 开启
  • 终极技能自动充能速度 斩: 0%
  • 重生时终极技能充能完毕: 开启
  • 闪 冷却时间: 500%
  • }
  • Mercy
  • 狂鼠
  • {
  • Damage Dealt: 300%
  • Guardian Angel: Off
  • No Ammunition Requirement: On
  • Projectile Speed: 300%
  • Regeneration: Off
  • Resurrect Cooldown Time: 80%
  • 主要攻击模式: 关闭
  • 垂直跳跃速度: 150%
  • }
  • Reinhardt
  • 破坏球
  • {
  • Charge Cooldown Time: 0%
  • 伤害量: 50%
  • 生命值: 10%
  • }
  • Sigma
  • 艾什
  • {
  • Health: 10%
  • 伤害量: 150%
  • 延时雷管: 关闭
  • 短筒猎枪: 关闭
  • }
  • Sombra
  • 莱因哈特
  • {
  • Damage Dealt: 220%
  • Hack: Off
  • Translocator: Off
  • 冲锋 冷却时间: 0%
  • }
  • Torbjörn
  • 西格玛
  • {
  • Damage Dealt: 10%
  • Damage Received: 10%
  • Primary Fire: Off
  • Quick Melee: Off
  • Secondary Fire: Off
  • 生命值: 10%
  • }
  • Widowmaker
  • 麦克雷
  • {
  • Ammunition Clip Size Scalar: 80%
  • Damage Dealt: 165%
  • Grappling Hook: Off
  • Venom Mine: Off
  • 伤害量: 150%
  • 弹夹容量倍率: 200%
  • 弹道速度: 500%
  • 战术翻滚: 关闭
  • 辅助攻击模式: 关闭
  • }
  • Winston
  • 黑影
  • {
  • Jump Pack Cooldown Time: 250%
  • Spawn With Ultimate Ready: On
  • 伤害量: 220%
  • 位移传动: 关闭
  • 黑客入侵: 关闭
  • }
  • Wrecking Ball
  • 黑百合
  • {
  • Damage Dealt: 50%
  • Health: 10%
  • }
  • Zarya
  • {
  • Particle Barrier Cooldown Time: 1%
  • 伤害量: 165%
  • 剧毒诡雷: 关闭
  • 弹夹容量倍率: 80%
  • 抓钩: 关闭
  • }
  • }
  • }
  • 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);
  • }
  • 规则("——————Skill————————")
  • {
  • 事件
  • {
  • 持续 - 全局;
  • }
  • }
  • rule("circle_effect")
  • 规则("蓄力")
  • {
  • event
  • 事件
  • {
  • 持续 - 每名玩家;
  • 队伍1;
  • 源氏;
  • }
  • 条件
  • {
  • 按钮被按下(事件玩家, 按钮(主要攻击模式)) == 真;
  • 具有状态(事件玩家, 点燃) == 假;
  • }
  • 动作
  • {
  • Subroutine;
  • 等待(0.200, 当为“假”时中止);
  • 禁用按钮(事件玩家, 按钮(主要攻击模式));
  • 小字体信息(事件玩家, 数组(自定义字符串("松开左键释放蓄力攻击"), 自定义字符串("Release for charged attack "))[全局.Language]);
  • 取消主要动作(事件玩家);
  • 设置状态(事件玩家, 无, 点燃, 9999);
  • 等待直到 (按钮被按下(事件玩家, 按钮(主要攻击模式)) == 假, 99999);
  • 可用按钮(事件玩家, 按钮(主要攻击模式));
  • 按下按键(事件玩家, 按钮(主要攻击模式));
  • 等待(0.400, 无视条件);
  • 根据条件中止(正在使用技能 2(事件玩家) == 真);
  • 清除状态(事件玩家, 点燃);
  • }
  • }
  • 规则("特殊技能 大陀螺")
  • {
  • 事件
  • {
  • 持续 - 每名玩家;
  • 队伍1;
  • 源氏;
  • }
  • 条件
  • {
  • 按钮被按下(事件玩家, 按钮(辅助攻击模式)) == 真;
  • 技能冷却时间(事件玩家, 按钮(技能2)) == 0;
  • 正在使用技能 2(事件玩家) == 假;
  • 存活(事件玩家) == 真;
  • 事件玩家.choose_skill == 0;
  • }
  • 动作
  • {
  • 开始限制阈值(事件玩家, 0, 0, 0, 0, 0, 0);
  • 禁用按钮(事件玩家, 按钮(主要攻击模式));
  • 事件玩家.skill = 2;
  • 可用按钮(事件玩家, 按钮(技能2));
  • 按下按键(事件玩家, 按钮(技能2));
  • 禁用按钮(事件玩家, 按钮(技能2));
  • 停止按下按钮(事件玩家, 按钮(技能2));
  • 事件玩家.skill_i1 = 1;
  • 施加推力(事件玩家, 面朝方向(事件玩家), 8, 至地图, 合并相反运动);
  • 开始镜头(事件玩家, 矢量(0, 2, 0) + 所选位置(事件玩家) + 归一化(速率(事件玩家)) * -3, 眼睛位置(事件玩家) + 归一化(速率(事件玩家)) * 20, 33);
  • 事件玩家.skill = 0;
  • 开始朝向(事件玩家, 矢量(1, 0, 0), 1200, 至玩家, 方向及角速率);
  • 等待(0.100, 无视条件);
  • 设置状态(事件玩家, 无, 点燃, 9999);
  • 设置引力(事件玩家, 20);
  • 创建光束效果(所有玩家(所有队伍), 智械切割者光束, 地图矢量(矢量(1, 0.800, -0.100), 事件玩家, 旋转并转换), 地图矢量(矢量(-0.200, 0.800, 2.500), 事件玩家, 旋转并转换), 颜色(白色),
  • 可见,位置和半径);
  • 事件玩家.skilleffect_i2[0] = 最后创建的实体;
  • 创建光束效果(所有玩家(所有队伍), “回声”聚焦光线光束, 地图矢量(矢量(-1, 0.800, 0.100), 事件玩家, 旋转并转换), 地图矢量(矢量(0.200, 0.800, -2.700), 事件玩家, 旋转并转换), 颜色(白色),
  • 可见,位置和半径);
  • 事件玩家.skilleffect_i2[1] = 最后创建的实体;
  • 开始规则(circle_effect, 重新开始规则);
  • 开始规则(circle_attack, 重新开始规则);
  • 等待(0.500, 无视条件);
  • 等待直到 (死亡(事件玩家) || 具有状态(事件玩家, 击晕) || 按钮被按下(事件玩家, 按钮(辅助攻击模式)) == 假, 1.700);
  • 清除状态(事件玩家, 点燃);
  • 停止朝向(事件玩家);
  • 消除效果(事件玩家.skilleffect_i2[0]);
  • 消除效果(事件玩家.skilleffect_i2[1]);
  • 设置引力(事件玩家, 50);
  • 设置朝向(事件玩家, 速率(事件玩家), 至地图);
  • 取消主要动作(事件玩家);
  • 可用按钮(事件玩家, 按钮(主要攻击模式));
  • 事件玩家.skill_i1 = 0;
  • 开始规则(Camera, 重新开始规则);
  • 开始规则(Playerstate, 重新开始规则);
  • 等待(0.500, 无视条件);
  • 设置技能冷却(事件玩家, 按钮(技能2), 2.500);
  • }
  • }
  • 规则("circle_effect")
  • {
  • 事件
  • {
  • 子程序;
  • 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);
  • While(具有状态(事件玩家, 点燃));
  • 播放效果(所有玩家(队伍1), “西格玛”超能之球内爆效果, 颜色(白色), 地图矢量(矢量(0, 1, 0), 事件玩家, 旋转并转换), 1);
  • 等待(0.200, 无视条件);
  • End;
  • }
  • }
  • rule("circle_attack")
  • 规则("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);
  • While(具有状态(事件玩家, 点燃));
  • 伤害(射线命中玩家(地图矢量(矢量(5, 1, 0), 事件玩家, 旋转并转换), 地图矢量(矢量(-5, 0, 0), 事件玩家, 旋转并转换), 所有玩家(队伍2), 事件玩家, 真), 事件玩家, 100);
  • 伤害(射线命中玩家(地图矢量(矢量(0, 1, 5), 事件玩家, 旋转并转换), 地图矢量(矢量(0, 0, -5), 事件玩家, 旋转并转换), 所有玩家(队伍2), 事件玩家, 真), 事件玩家, 100);
  • 等待(0.070, 无视条件);
  • End;
  • }
  • }
  • rule("特殊技能 巨人化")
  • 规则("特殊技能 巨人化")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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;
  • 按钮被按下(事件玩家, 按钮(辅助攻击模式)) == 真;
  • 存活(事件玩家) == 真;
  • 事件玩家.choose_skill == 1;
  • 正在使用终极技能(事件玩家) == 真;
  • }
  • actions
  • 动作
  • {
  • If(Ultimate Charge Percent(Event Player) < 100);
  • Small Message(Event Player, Custom String("Insufficient Ultimate Charge"));
  • If(终极技能充能百分比(事件玩家) < 100);
  • 小字体信息(事件玩家, 字符串("{0} {1} {2}", 字符串("终极技能"), 字符串("能量"), 字符串("受限")));
  • 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);
  • 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;
  • 停止按下按钮(事件玩家, 按钮(技能1));
  • 停止按下按钮(事件玩家, 按钮(技能2));
  • 停止按下按钮(事件玩家, 按钮(终极技能));
  • 事件玩家.root = 空数组;
  • 设置状态(事件玩家, 无, 击晕, 0.800);
  • 播放效果(所有玩家(所有队伍), 有害爆炸, 颜色(黄色), 事件玩家, 20);
  • 播放效果(所有玩家(所有队伍), 有益爆炸, 颜色(白色), 事件玩家, 30);
  • 为玩家添加生命池(事件玩家, 护甲, 5000, 真, 真);
  • 等待(0.500, 无视条件);
  • 停止限制阈值(事件玩家);
  • 开始强制玩家选择英雄(事件玩家, 英雄(末日铁拳));
  • 设置造成伤害(事件玩家, 17000);
  • 可用按钮(事件玩家, 按钮(跳跃));
  • 可用按钮(事件玩家, 按钮(技能1));
  • 可用按钮(事件玩家, 按钮(技能2));
  • 禁用按钮(事件玩家, 按钮(主要攻击模式));
  • 设置移动速度(事件玩家, 100);
  • 开始调整玩家大小(事件玩家, 7, 真);
  • 开始规则(Camera, 重新开始规则);
  • 等待直到 (死亡(事件玩家), 30);
  • 击杀(事件玩家, 无);
  • 等待(0.200, 无视条件);
  • 停止调整玩家大小(事件玩家);
  • 开始强制玩家选择英雄(事件玩家, 英雄(源氏));
  • 事件玩家.respond = 1;
  • 重生(事件玩家);
  • 设置终极技能充能(事件玩家, 0);
  • 设置造成伤害(事件玩家, 100);
  • 移除玩家的所有生命值(事件玩家);
  • 禁用按钮(事件玩家, 按钮(技能1));
  • 禁用按钮(事件玩家, 按钮(技能2));
  • 禁用按钮(事件玩家, 按钮(跳跃));
  • 可用按钮(事件玩家, 按钮(主要攻击模式));
  • 禁用 取消与玩家的移动碰撞(事件玩家);
  • 设置终极技能充能(事件玩家, 100);
  • 等待(0.016, 无视条件);
  • 传送(事件玩家, 所选位置(事件玩家) + 矢量(0, 10, 0));
  • 开始规则(Camera, 重新开始规则);
  • 事件玩家.respond = 0;
  • End;
  • }
  • }
  • rule("技能切换")
  • 规则("技能切换")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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;
  • 消除效果(事件玩家.skilleffect_i2[0]);
  • 消除效果(事件玩家.skilleffect_i2[1]);
  • 禁用 等待(0.500, 当为“假”时中止);
  • 禁用 设置终极技能充能(事件玩家, 0);
  • 事件玩家.choose_skill = (事件玩家.choose_skill + 1) % 3;
  • 小字体信息(事件玩家, 自定义字符串("{2}【{0}{1}】", 全局.Skill_name[事件玩家.choose_skill][0], 全局.Skill_name[事件玩家.choose_skill][1], 数组(自定义字符串("切换至"),
  • 自定义字符串("Change to"))[全局.Language]));
  • 禁用 如条件为”真“则循环;
  • }
  • }
  • rule("巨人化 左键变近战")
  • 规则("巨人化 左键变近战")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Doomfist;
  • 持续 - 每名玩家;
  • 队伍1;
  • 末日铁拳;
  • }
  • 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;
  • 按钮被按下(事件玩家, 按钮(辅助攻击模式)) == 真;
  • 事件玩家.choose_skill == 2;
  • 已过滤的数组(事件玩家.skill_GunsLoc_i3, 当前数组元素 != 0) < 2;
  • }
  • actions
  • 动作
  • {
  • If(Ultimate Charge Percent(Event Player) < 40);
  • Small Message(Event Player, Custom String("Insufficient Ultimate Charge"));
  • Abort;
  • If(终极技能充能百分比(事件玩家) < 40);
  • 小字体信息(事件玩家, 字符串("{0} {1} {2}", 字符串("终极技能"), 字符串("能量"), 字符串("受限")));
  • 中止;
  • 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);
  • If(事件玩家.skill_GunsLoc_i3[0] == 0);
  • 开始规则(skill_Lgun, 无动作);
  • Else If(事件玩家.skill_GunsLoc_i3[1] == 0);
  • 开始规则(skill_Rgun, 无动作);
  • End;
  • End;
  • Wait(0.200, Abort When False);
  • Loop If Condition Is True;
  • 等待(0.200, 当为“假”时中止);
  • 如条件为”真“则循环;
  • }
  • }
  • rule("Gun_L")
  • 规则("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);
  • 设置终极技能充能(事件玩家, 终极技能充能百分比(事件玩家) - 40);
  • 事件玩家.skill_GunsLoc_i3[0] = 地图矢量(矢量(0.800, 1, 0), 事件玩家, 旋转并转换);
  • 事件玩家.skill_Gun_face[0] = 面朝方向(事件玩家);
  • 播放效果(所有玩家(所有队伍), “破坏球”重力坠击击中声音, 颜色(白色), 事件玩家.skill_GunsLoc_i3[0], 40);
  • 创建光束效果(所有玩家(所有队伍), “秩序之光”哨戒炮光束, 事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_GunsLoc_i3[0] + 事件玩家.skill_Gun_face[0] * -2, 颜色(队伍1),
  • 可见,位置和半径);
  • 事件玩家.skilleffect_i2[0] = 最后创建的实体;
  • 等待(0.016, 无视条件);
  • While(相距距离(事件玩家.skill_GunsLoc_i3[0], 眼睛位置(事件玩家)) < 20 && 射线命中玩家(事件玩家.skill_GunsLoc_i3[0],
  • 事件玩家.skill_GunsLoc_i3[0] + -2 * 事件玩家.skill_Gun_face[0], 所有玩家(队伍2), 事件玩家, 真) == 0);
  • 事件玩家.skill_GunsLoc_i3[0] += 事件玩家.skill_Gun_face[0];
  • 播放效果(所有玩家(所有队伍), 有益爆炸, 颜色(白色), 事件玩家.skill_GunsLoc_i3[0], 0.100);
  • 等待(0.032, 无视条件);
  • End;
  • If(射线命中玩家(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_GunsLoc_i3[0] + -2 * 事件玩家.skill_Gun_face[0], 所有玩家(队伍2), 事件玩家, 真) != 0);
  • 事件玩家.skill_Gun_shootBot[0] = 射线命中玩家(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_GunsLoc_i3[0] + -2 * 事件玩家.skill_Gun_face[0], 所有玩家(队伍2),
  • 事件玩家, 真);
  • If(相距距离(事件玩家.skill_GunsLoc_i3[0], 地图矢量(事件玩家.skill_Gun_shootBot[0].bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(
  • 事件玩家.skill_Gun_shootBot[0]))][在地面上(事件玩家.skill_Gun_shootBot[0]) && 正在蹲下(事件玩家.skill_Gun_shootBot[0]) ? 1 : (正在使用技能 1(
  • 事件玩家.skill_Gun_shootBot[0]) ? 11 : (阈值(事件玩家.skill_Gun_shootBot[0]) != 矢量(0, 0, 0) ? 12 : 0))], 事件玩家.skill_Gun_shootBot[0],
  • 旋转并转换)) <= 事件玩家.skill_Gun_shootBot[0].bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家.skill_Gun_shootBot[0]))][2] + 0.600);
  • 事件玩家.skill_Gun_hit[0] = 1;
  • End;
  • 伤害(事件玩家.skill_Gun_shootBot[0], 事件玩家, 50);
  • 事件玩家.skill_GunsLoc_i3[0] = 本地矢量(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_Gun_shootBot[0], 旋转并转换);
  • 事件玩家.skill_Gun_face[0] = 本地矢量(事件玩家.skill_Gun_face[0], 事件玩家.skill_Gun_shootBot[0], 旋转);
  • 消除效果(事件玩家.skilleffect_i2[0]);
  • 创建光束效果(所有玩家(所有队伍), “秩序之光”光子发射器光束, 地图矢量(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_Gun_shootBot[0], 旋转并转换), 地图矢量(事件玩家.skill_GunsLoc_i3[0],
  • 事件玩家.skill_Gun_shootBot[0], 旋转并转换) + -2 * 地图矢量(事件玩家.skill_Gun_face[0], 事件玩家.skill_Gun_shootBot[0], 旋转), 颜色(队伍1), 可见,位置和半径);
  • 事件玩家.skilleffect_i2[0] = 最后创建的实体;
  • Else;
  • 消除效果(事件玩家.skilleffect_i2[0]);
  • 事件玩家.skill_Gun_fire[0] = 0;
  • 事件玩家.skilleffect_i2[0] = 0;
  • 事件玩家.skill_Gun_shootBot[0] = 0;
  • 事件玩家.skill_Gun_face[0] = 0;
  • 事件玩家.skill_GunsLoc_i3[0] = 0;
  • 事件玩家.skill_Gun_hit[0] = 0;
  • 设置终极技能充能(事件玩家, 终极技能充能百分比(事件玩家) + 25);
  • 等待(0.500, 无视条件);
  • 中止;
  • End;
  • 根据条件跳过(事件玩家.skill_Gun_hit[0] == 0, 1);
  • 小字体信息(事件玩家, 字符串("{0}!", 字符串("击中")));
  • While(相距距离(眼睛位置(事件玩家), 事件玩家.skill_Gun_shootBot[0] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_Gun_shootBot[0], 旋转并转换)
  • : 事件玩家.skill_GunsLoc_i3[0]) < 12 && 事件玩家.choose_skill == 2);
  • 等待(0.100, 无视条件);
  • End;
  • 设置状态(事件玩家, 无, 点燃, 0.200);
  • 事件玩家.skill_Gun_fire[0] = 1;
  • 等待(0.016, 无视条件);
  • 伤害(事件玩家.skill_Gun_shootBot[0], 事件玩家, 400);
  • 伤害(已过滤的数组(范围内玩家(事件玩家.skill_Gun_shootBot[0] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_Gun_shootBot[0], 旋转并转换)
  • : 事件玩家.skill_GunsLoc_i3[0], 10, 所有队伍, 关闭), 当前数组元素 != 事件玩家.skill_Gun_shootBot[0]), 事件玩家, 100);
  • 播放效果(所有玩家(所有队伍), D.Va自毁爆炸声音, 颜色(白色), 事件玩家.skill_Gun_shootBot[0] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_Gun_shootBot[0],
  • 旋转并转换) : 事件玩家.skill_GunsLoc_i3[0], 80);
  • 播放效果(所有玩家(所有队伍), D.Va自毁爆炸效果, 颜色(白色), 事件玩家.skill_Gun_shootBot[0] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_Gun_shootBot[0],
  • 旋转并转换) : 事件玩家.skill_GunsLoc_i3[0], 1);
  • 施加推力(范围内玩家(事件玩家.skill_Gun_shootBot[0] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[0], 事件玩家.skill_Gun_shootBot[0], 旋转并转换)
  • : 事件玩家.skill_GunsLoc_i3[0], 8, 所有队伍, 关闭), 方向(事件玩家.skill_Gun_shootBot[0] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[0],
  • 事件玩家.skill_Gun_shootBot[0], 旋转并转换) : 事件玩家.skill_GunsLoc_i3[0], 眼睛位置(本地玩家)), 15, 至地图, 取消相反运动);
  • 消除效果(事件玩家.skilleffect_i2[0]);
  • 等待(0.016, 无视条件);
  • 事件玩家.skill_Gun_fire[0] = 0;
  • 事件玩家.skilleffect_i2[0] = 0;
  • 事件玩家.skill_Gun_shootBot[0] = 0;
  • 事件玩家.skill_Gun_face[0] = 0;
  • 事件玩家.skill_GunsLoc_i3[0] = 0;
  • 事件玩家.skill_Gun_hit[0] = 0;
  • 等待(0.500, 无视条件);
  • }
  • }
  • rule("Gun_R")
  • 规则("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;
  • 设置终极技能充能(事件玩家, 终极技能充能百分比(事件玩家) - 40);
  • 事件玩家.skill_GunsLoc_i3[1] = 地图矢量(矢量(-0.800, 1, 0), 事件玩家, 旋转并转换);
  • 事件玩家.skill_Gun_face[1] = 面朝方向(事件玩家);
  • 播放效果(所有玩家(所有队伍), “破坏球”重力坠击击中声音, 颜色(白色), 事件玩家.skill_GunsLoc_i3[1], 40);
  • 创建光束效果(所有玩家(所有队伍), “秩序之光”哨戒炮光束, 事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_GunsLoc_i3[1] + 事件玩家.skill_Gun_face[1] * -2, 颜色(队伍1),
  • 可见,位置和半径);
  • 事件玩家.skilleffect_i2[1] = 最后创建的实体;
  • 等待(0.016, 无视条件);
  • While(相距距离(事件玩家.skill_GunsLoc_i3[1], 眼睛位置(事件玩家)) < 20 && 射线命中玩家(事件玩家.skill_GunsLoc_i3[1],
  • 事件玩家.skill_GunsLoc_i3[1] + -2 * 事件玩家.skill_Gun_face[1], 所有玩家(队伍2), 事件玩家, 真) == 0);
  • 事件玩家.skill_GunsLoc_i3[1] += 事件玩家.skill_Gun_face[1];
  • 播放效果(所有玩家(所有队伍), 有益爆炸, 颜色(白色), 事件玩家.skill_GunsLoc_i3[1], 0.100);
  • 等待(0.032, 无视条件);
  • End;
  • If(射线命中玩家(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_GunsLoc_i3[1] + -2 * 事件玩家.skill_Gun_face[1], 所有玩家(队伍2), 事件玩家, 真) != 0);
  • 事件玩家.skill_Gun_shootBot[1] = 射线命中玩家(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_GunsLoc_i3[1] + -2 * 事件玩家.skill_Gun_face[1], 所有玩家(队伍2),
  • 事件玩家, 真);
  • If(相距距离(事件玩家.skill_GunsLoc_i3[1], 地图矢量(事件玩家.skill_Gun_shootBot[1].bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(
  • 事件玩家.skill_Gun_shootBot[1]))][在地面上(事件玩家.skill_Gun_shootBot[1]) && 正在蹲下(事件玩家.skill_Gun_shootBot[1]) ? 1 : (正在使用技能 1(
  • 事件玩家.skill_Gun_shootBot[1]) ? 11 : (阈值(事件玩家.skill_Gun_shootBot[1]) != 矢量(0, 0, 0) ? 12 : 0))], 事件玩家.skill_Gun_shootBot[1],
  • 旋转并转换)) <= 事件玩家.skill_Gun_shootBot[1].bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家.skill_Gun_shootBot[1]))][2] + 0.600);
  • 事件玩家.skill_Gun_hit[1] = 1;
  • End;
  • 伤害(事件玩家.skill_Gun_shootBot[1], 事件玩家, 50);
  • 事件玩家.skill_GunsLoc_i3[1] = 本地矢量(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_Gun_shootBot[1], 旋转并转换);
  • 事件玩家.skill_Gun_face[1] = 本地矢量(事件玩家.skill_Gun_face[1], 事件玩家.skill_Gun_shootBot[1], 旋转);
  • 消除效果(事件玩家.skilleffect_i2[1]);
  • 创建光束效果(所有玩家(所有队伍), “秩序之光”光子发射器光束, 地图矢量(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_Gun_shootBot[1], 旋转并转换), 地图矢量(事件玩家.skill_GunsLoc_i3[1],
  • 事件玩家.skill_Gun_shootBot[1], 旋转并转换) + -2 * 地图矢量(事件玩家.skill_Gun_face[1], 事件玩家.skill_Gun_shootBot[1], 旋转), 颜色(队伍1), 可见,位置和半径);
  • 事件玩家.skilleffect_i2[1] = 最后创建的实体;
  • Else;
  • 消除效果(事件玩家.skilleffect_i2[1]);
  • 事件玩家.skill_Gun_fire[1] = 0;
  • 事件玩家.skilleffect_i2[1] = 0;
  • 事件玩家.skill_Gun_shootBot[1] = 0;
  • 事件玩家.skill_Gun_face[1] = 0;
  • 事件玩家.skill_GunsLoc_i3[1] = 0;
  • 事件玩家.skill_Gun_hit[1] = 0;
  • 设置终极技能充能(事件玩家, 终极技能充能百分比(事件玩家) + 25);
  • 等待(0.500, 无视条件);
  • 中止;
  • End;
  • 根据条件跳过(事件玩家.skill_Gun_hit[1] == 0, 1);
  • 小字体信息(事件玩家, 字符串("{0}!", 字符串("击中")));
  • While(相距距离(眼睛位置(事件玩家), 事件玩家.skill_Gun_shootBot[1] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_Gun_shootBot[1], 旋转并转换)
  • : 事件玩家.skill_GunsLoc_i3[1]) < 12 && 事件玩家.choose_skill == 2);
  • 等待(0.100, 无视条件);
  • End;
  • 设置状态(事件玩家, 无, 点燃, 0.200);
  • 事件玩家.skill_Gun_fire[1] = 1;
  • 等待(0.016, 无视条件);
  • 伤害(事件玩家.skill_Gun_shootBot[1], 事件玩家, 700);
  • 伤害(已过滤的数组(范围内玩家(事件玩家.skill_Gun_shootBot[1] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_Gun_shootBot[1], 旋转并转换)
  • : 事件玩家.skill_GunsLoc_i3[1], 10, 所有队伍, 关闭), 当前数组元素 != 事件玩家.skill_Gun_shootBot[1]), 事件玩家, 100);
  • 播放效果(所有玩家(所有队伍), D.Va自毁爆炸声音, 颜色(白色), 事件玩家.skill_Gun_shootBot[1] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_Gun_shootBot[1],
  • 旋转并转换) : 事件玩家.skill_GunsLoc_i3[1], 80);
  • 播放效果(所有玩家(所有队伍), D.Va自毁爆炸效果, 颜色(白色), 事件玩家.skill_Gun_shootBot[1] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_Gun_shootBot[1],
  • 旋转并转换) : 事件玩家.skill_GunsLoc_i3[1], 1);
  • 施加推力(范围内玩家(事件玩家.skill_Gun_shootBot[1] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[1], 事件玩家.skill_Gun_shootBot[1], 旋转并转换)
  • : 事件玩家.skill_GunsLoc_i3[1], 8, 所有队伍, 关闭), 方向(事件玩家.skill_Gun_shootBot[1] != 0 ? 地图矢量(事件玩家.skill_GunsLoc_i3[1],
  • 事件玩家.skill_Gun_shootBot[1], 旋转并转换) : 事件玩家.skill_GunsLoc_i3[1], 眼睛位置(本地玩家)), 15, 至地图, 取消相反运动);
  • 消除效果(事件玩家.skilleffect_i2[1]);
  • 等待(0.016, 无视条件);
  • 事件玩家.skill_Gun_fire[1] = 0;
  • 事件玩家.skilleffect_i2[1] = 0;
  • 事件玩家.skill_Gun_shootBot[1] = 0;
  • 事件玩家.skill_Gun_face[1] = 0;
  • 事件玩家.skill_GunsLoc_i3[1] = 0;
  • 事件玩家.skill_Gun_hit[1] = 0;
  • 等待(0.500, 无视条件);
  • }
  • }
  • 规则("——————Skill————————")
  • {
  • 事件
  • {
  • 持续 - 全局;
  • }
  • }
  • 规则("——————equiment——————")
  • {
  • 事件
  • {
  • 持续 - 全局;
  • }
  • }
  • 规则("闪避")
  • {
  • 事件
  • {
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 条件
  • {
  • 按钮被按下(事件玩家, 按钮(蹲下)) == 真;
  • 高度(事件玩家) < 0.200;
  • 所用英雄(事件玩家) == 英雄(源氏);
  • }
  • 动作
  • {
  • 事件玩家.skill = 3;
  • 等待(0.016, 无视条件);
  • 可用按钮(事件玩家, 按钮(跳跃));
  • 按下按键(事件玩家, 按钮(跳跃));
  • 等待(0.100, 无视条件);
  • 施加推力(事件玩家, 阈值(事件玩家) == 矢量(0, 0, 0) ? 矢量(0, 0, -1) : 阈值(事件玩家), 10, 至玩家, 合并相反运动);
  • 开始限制阈值(事件玩家, 0, 0, 0, 0, 0, 0);
  • 按下按键(事件玩家, 按钮(跳跃));
  • 禁用按钮(事件玩家, 按钮(跳跃));
  • 等待(0.600, 无视条件);
  • 开始规则(Playerstate, 重新开始规则);
  • 等待(0.300, 当为“真”时重新开始);
  • 事件玩家.skill = 0;
  • }
  • }
  • 规则("左拉力(新2")
  • {
  • 事件
  • {
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 条件
  • {
  • 按钮被按下(事件玩家, 按钮(终极技能)) == 真;
  • 具有状态(事件玩家, 击晕) == 假;
  • 存活(事件玩家) == 真;
  • 事件玩家.skill != 1;
  • 所用英雄(事件玩家) == 英雄(源氏);
  • }
  • 动作
  • {
  • 根据条件中止(事件玩家.skill_i1 != 0);
  • 消除效果(事件玩家.eff_strings[0]);
  • 事件玩家.in_L = 全局.A;
  • 事件玩家.in_L = 已过滤的数组(事件玩家.in_L, 相距距离(矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(眼睛位置(事件玩家))) : Y方向分量(当前数组元素), Z方向分量(
  • 当前数组元素)), 眼睛位置(事件玩家)) < 50 + 全局.B[数组值的索引(全局.A, 当前数组元素)]);
  • 根据条件跳过(数组值的索引(事件玩家.in_L, 首个(已过滤的数组(事件玩家.in_L, 相距距离(所选位置(事件玩家), 矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(所选位置(事件玩家)))
  • : Y方向分量(当前数组元素), Z方向分量(当前数组元素))) <= 全局.B[数组值的索引(全局.A, 当前数组元素)]))) == -1, 1);
  • 事件玩家.in_L[数组值的索引(事件玩家.in_L, 首个(已过滤的数组(事件玩家.in_L, 相距距离(所选位置(事件玩家), 矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(所选位置(事件玩家)))
  • : Y方向分量(当前数组元素), Z方向分量(当前数组元素))) <= 全局.B[数组值的索引(全局.A, 当前数组元素)])))] = 矢量(1000, 0, 0);
  • 事件玩家.endPT_L = 地图矢量(矢量(0.500, 0.700, 0), 事件玩家, 旋转并转换);
  • 事件玩家.rt_L = 射线命中位置(眼睛位置(事件玩家), 眼睛位置(事件玩家) + 面朝方向(事件玩家) * 45, 无, 事件玩家, 真);
  • If(相距距离(所选位置(事件玩家), 事件玩家.rt_L) < 44);
  • 事件玩家.ar_shoot[0] = 真;
  • Else;
  • Event Player.ar_shoot[0] = False;
  • 事件玩家.ar_shoot[0] = 假;
  • End;
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Wrecking Ball Piledriver Impact Sound, Color(White), Event Player.endPT_L, 20);
  • 等待(0.016, 无视条件);
  • 播放效果(所有玩家(所有队伍), “破坏球”重力坠击击中声音, 颜色(白色), 事件玩家.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);
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 单次赋值(地图矢量(矢量(1, 0.800, 1), 事件玩家, 旋转并转换)), 地图矢量(矢量(0.700, 0.800, 0.400), 事件玩家, 旋转并转换), 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[1] = 最后创建的实体;
  • 等待(0.016, 无视条件);
  • "左前"
  • 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];
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 单次赋值(地图矢量(矢量(1, 0.800, 1), 事件玩家, 旋转并转换)), 事件玩家.endPT_L, 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[2] = 最后创建的实体;
  • 事件玩家.dir_L = 面朝方向(事件玩家) * 1.800;
  • 事件玩家.endPT_L += 事件玩家.dir_L;
  • 等待(0.016, 无视条件);
  • While((对任意为”真“(事件玩家.in_L, 相距距离(矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(事件玩家.endPT_L)) : Y方向分量(当前数组元素), Z方向分量(当前数组元素)),
  • 事件玩家.endPT_L) < 全局.B[数组值的索引(全局.A, 当前数组元素)]) || 射线命中玩家(事件玩家.endPT_L, 事件玩家.endPT_L + 事件玩家.dir_L * 1, 所有玩家(队伍2), 事件玩家, 假) != 0)
  • == 假);
  • 等待(0.032, 无视条件);
  • 事件玩家.endPT_L += 事件玩家.dir_L;
  • 根据条件跳过(相距距离(所选位置(事件玩家), 事件玩家.endPT_L) > 相距距离(所选位置(事件玩家), 事件玩家.rt_L), 1);
  • End;
  • 消除效果(事件玩家.eff_strings[1]);
  • 消除效果(事件玩家.eff_strings[2]);
  • If(对任意为”真“(事件玩家.in_L, 相距距离(矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(事件玩家.endPT_L)) : Y方向分量(当前数组元素), Z方向分量(当前数组元素)),
  • 事件玩家.endPT_L) < 全局.B[数组值的索引(全局.A, 当前数组元素)]) == 真);
  • 事件玩家.HL = 数组值的索引(全局.A, 首个(已过滤的数组(事件玩家.in_L, 相距距离(Y方向分量(当前数组元素) == 0 ? 矢量(X方向分量(当前数组元素), 较小(50, Y方向分量(事件玩家.endPT_L)), Z方向分量(当前数组元素))
  • : 当前数组元素, 事件玩家.endPT_L) < 全局.B[数组值的索引(全局.A, 当前数组元素)])));
  • 事件玩家.ar_shoot[0] = 真;
  • 事件玩家.endPT_L = (Y方向分量(全局.A[事件玩家.HL]) == 0 ? 矢量(X方向分量(全局.A[事件玩家.HL]), Y方向分量(事件玩家.endPT_L), Z方向分量(全局.A[事件玩家.HL])) : 全局.A[事件玩家.HL])
  • + 方向(Y方向分量(全局.A[事件玩家.HL]) == 0 ? 矢量(X方向分量(全局.A[事件玩家.HL]), Y方向分量(事件玩家.endPT_L), Z方向分量(全局.A[事件玩家.HL])) : 全局.A[事件玩家.HL],
  • 事件玩家.endPT_L) * 全局.B[事件玩家.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);
  • If(射线命中玩家(事件玩家.endPT_L, 事件玩家.endPT_L + 事件玩家.dir_L * 2, 所有玩家(所有队伍), 事件玩家, 假) != 0);
  • 事件玩家.tL = 射线命中玩家(事件玩家.endPT_L, 事件玩家.endPT_L + 事件玩家.dir_L * 2, 所有玩家(所有队伍), 事件玩家, 假);
  • 等待(0.016, 无视条件);
  • "左勾住人"
  • 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);
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 地图矢量(矢量(0.400, 1, 0), 事件玩家, 旋转并转换) + 方向(所选位置(事件玩家), 事件玩家.endPT_L) * 0.300, 地图矢量(单次赋值(本地矢量(事件玩家.endPT_L,
  • 事件玩家.tL, 旋转并转换)), 事件玩家.tL, 旋转并转换), 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[3] = 最后创建的实体;
  • 调用子程序(LT);
  • Else If(事件玩家.ar_shoot[0]);
  • 等待(0.016, 无视条件);
  • "左勾住"
  • 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);
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 地图矢量(矢量(0.400, 1, 0), 事件玩家, 旋转并转换) + 方向(所选位置(事件玩家), 事件玩家.endPT_L) * 0.300, 事件玩家.endPT_L, 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[3] = 最后创建的实体;
  • 调用子程序(LT);
  • Else;
  • Event Player.endPT_L = 0;
  • 事件玩家.endPT_L = 0;
  • End;
  • Wait(0.016, Ignore Condition);
  • Destroy Effect(Event Player.eff_strings[3]);
  • 等待(0.016, 无视条件);
  • 消除效果(事件玩家.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);
  • 创建光束效果(事件玩家, 抓钩光束, 地图矢量(矢量(0.700, 0.800, 0.400), 事件玩家, 旋转并转换), 地图矢量(矢量(0.550, 0.700, -0.350), 事件玩家, 旋转并转换), 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[0] = 最后创建的实体;
  • 事件玩家.tL = 0;
  • 开始规则(tensionAll, 重新开始规则);
  • 事件玩家.rt_L = 0;
  • 开始规则(Playerstate, 重新开始规则);
  • 事件玩家.endPT_L = 0;
  • 等待(0.080, 无视条件);
  • }
  • }
  • 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;
  • 规则("右拉力(新2")
  • {
  • 事件
  • {
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 条件
  • {
  • 按钮被按下(事件玩家, 按钮(技能2)) == 真;
  • 具有状态(事件玩家, 击晕) == 假;
  • 存活(事件玩家) == 真;
  • 事件玩家.skill != 2;
  • 所用英雄(事件玩家) == 英雄(源氏);
  • }
  • 动作
  • {
  • 根据条件中止(事件玩家.skill_i1 != 0);
  • 消除效果(事件玩家.eff_strings[5]);
  • 事件玩家.in_R = 全局.A;
  • 事件玩家.in_R = 已过滤的数组(事件玩家.in_R, 相距距离(矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(眼睛位置(事件玩家))) : Y方向分量(当前数组元素), Z方向分量(
  • 当前数组元素)), 眼睛位置(事件玩家)) < 50 + 全局.B[数组值的索引(全局.A, 当前数组元素)]);
  • 根据条件跳过(数组值的索引(事件玩家.in_R, 首个(已过滤的数组(事件玩家.in_R, 相距距离(所选位置(事件玩家), 矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(所选位置(事件玩家)))
  • : Y方向分量(当前数组元素), Z方向分量(当前数组元素))) <= 全局.B[数组值的索引(全局.A, 当前数组元素)]))) == -1, 1);
  • 事件玩家.in_R[数组值的索引(事件玩家.in_R, 首个(已过滤的数组(事件玩家.in_R, 相距距离(所选位置(事件玩家), 矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(所选位置(事件玩家)))
  • : Y方向分量(当前数组元素), Z方向分量(当前数组元素))) <= 全局.B[数组值的索引(全局.A, 当前数组元素)])))] = 矢量(1000, 0, 0);
  • 事件玩家.endPT_R = 地图矢量(矢量(-0.500, 0.700, 0), 事件玩家, 旋转并转换);
  • 事件玩家.rt_R = 射线命中位置(眼睛位置(事件玩家), 眼睛位置(事件玩家) + 面朝方向(事件玩家) * 45, 无, 事件玩家, 真);
  • If(相距距离(所选位置(事件玩家), 事件玩家.rt_R) < 44);
  • 事件玩家.ar_shoot[1] = 真;
  • Else;
  • Event Player.ar_shoot[1] = False;
  • 事件玩家.ar_shoot[1] = 假;
  • End;
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Wrecking Ball Piledriver Impact Sound, Color(White), Event Player.endPT_R, 20);
  • 等待(0.016, 无视条件);
  • 播放效果(所有玩家(所有队伍), “破坏球”重力坠击击中声音, 颜色(白色), 事件玩家.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);
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 单次赋值(地图矢量(矢量(-1, 0.800, 1), 事件玩家, 旋转并转换)), 地图矢量(矢量(-0.700, 0.800, 0.400), 事件玩家, 旋转并转换), 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[6] = 最后创建的实体;
  • 等待(0.016, 无视条件);
  • "右前"
  • 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];
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 单次赋值(地图矢量(矢量(-1, 0.800, 1), 事件玩家, 旋转并转换)), 事件玩家.endPT_R, 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[7] = 最后创建的实体;
  • 事件玩家.dir_R = 面朝方向(事件玩家) * 1.800;
  • 事件玩家.endPT_R += 事件玩家.dir_R;
  • 等待(0.016, 无视条件);
  • While((对任意为”真“(事件玩家.in_R, 相距距离(矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(事件玩家.endPT_R)) : Y方向分量(当前数组元素), Z方向分量(当前数组元素)),
  • 事件玩家.endPT_R) < 全局.B[数组值的索引(全局.A, 当前数组元素)]) || 射线命中玩家(事件玩家.endPT_R, 事件玩家.endPT_R + 事件玩家.dir_R * 1, 所有玩家(队伍2), 事件玩家, 假) != 0)
  • == 假);
  • 等待(0.032, 无视条件);
  • 事件玩家.endPT_R += 事件玩家.dir_R;
  • 根据条件跳过(相距距离(所选位置(事件玩家), 事件玩家.endPT_R) > 相距距离(所选位置(事件玩家), 事件玩家.rt_R), 1);
  • End;
  • 消除效果(事件玩家.eff_strings[6]);
  • 消除效果(事件玩家.eff_strings[7]);
  • If(对任意为”真“(事件玩家.in_R, 相距距离(矢量(X方向分量(当前数组元素), Y方向分量(当前数组元素) == 0 ? 较小(50, Y方向分量(事件玩家.endPT_R)) : Y方向分量(当前数组元素), Z方向分量(当前数组元素)),
  • 事件玩家.endPT_R) < 全局.B[数组值的索引(全局.A, 当前数组元素)]) == 真);
  • 事件玩家.HR = 数组值的索引(全局.A, 首个(已过滤的数组(事件玩家.in_R, 相距距离(Y方向分量(当前数组元素) == 0 ? 矢量(X方向分量(当前数组元素), 较小(50, Y方向分量(事件玩家.endPT_R)), Z方向分量(当前数组元素))
  • : 当前数组元素, 事件玩家.endPT_R) < 全局.B[数组值的索引(全局.A, 当前数组元素)])));
  • 事件玩家.ar_shoot[1] = 真;
  • 事件玩家.endPT_R = (Y方向分量(全局.A[事件玩家.HR]) == 0 ? 矢量(X方向分量(全局.A[事件玩家.HR]), Y方向分量(事件玩家.endPT_R), Z方向分量(全局.A[事件玩家.HR])) : 全局.A[事件玩家.HR])
  • + 方向(Y方向分量(全局.A[事件玩家.HR]) == 0 ? 矢量(X方向分量(全局.A[事件玩家.HR]), Y方向分量(事件玩家.endPT_R), Z方向分量(全局.A[事件玩家.HR])) : 全局.A[事件玩家.HR],
  • 事件玩家.endPT_R) * 全局.B[事件玩家.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);
  • If(射线命中玩家(事件玩家.endPT_R, 事件玩家.endPT_R + 事件玩家.dir_R * 2, 所有玩家(所有队伍), 事件玩家, 假) != 0);
  • 事件玩家.tR = 射线命中玩家(事件玩家.endPT_R, 事件玩家.endPT_R + 事件玩家.dir_R * 2, 所有玩家(所有队伍), 事件玩家, 假);
  • 等待(0.016, 无视条件);
  • "右勾住人"
  • 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);
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 地图矢量(矢量(-0.400, 1, 0), 事件玩家, 旋转并转换) + 方向(所选位置(事件玩家), 事件玩家.endPT_R) * 0.300, 地图矢量(单次赋值(本地矢量(事件玩家.endPT_R,
  • 事件玩家.tR, 旋转并转换)), 事件玩家.tR, 旋转并转换), 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[8] = 最后创建的实体;
  • 调用子程序(RT);
  • Else If(事件玩家.ar_shoot[1]);
  • 等待(0.016, 无视条件);
  • "右勾住"
  • 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);
  • 创建光束效果(所有玩家(所有队伍), 抓钩光束, 地图矢量(矢量(-0.400, 1, 0), 事件玩家, 旋转并转换) + 方向(所选位置(事件玩家), 事件玩家.endPT_R) * 0.300, 事件玩家.endPT_R, 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[8] = 最后创建的实体;
  • 调用子程序(RT);
  • Else;
  • Event Player.endPT_R = 0;
  • 事件玩家.endPT_R = 0;
  • End;
  • Wait(0.016, Ignore Condition);
  • Destroy Effect(Event Player.eff_strings[8]);
  • 等待(0.016, 无视条件);
  • 消除效果(事件玩家.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);
  • 创建光束效果(事件玩家, 抓钩光束, 地图矢量(矢量(-0.700, 0.800, 0.400), 事件玩家, 旋转并转换), 地图矢量(矢量(-0.550, 0.700, -0.350), 事件玩家, 旋转并转换), 颜色(白色), 位置和半径);
  • 事件玩家.eff_strings[5] = 最后创建的实体;
  • 事件玩家.tR = 0;
  • 开始规则(tensionAll, 重新开始规则);
  • 事件玩家.rt_R = 0;
  • 开始规则(Playerstate, 重新开始规则);
  • 事件玩家.endPT_R = 0;
  • 等待(0.080, 无视条件);
  • }
  • }
  • rule("LT")
  • 规则("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);
  • 事件玩家.rt_L = 相距距离(所选位置(事件玩家), 事件玩家.endPT_L);
  • While(绝对值(矢量间夹角(速率(事件玩家), 方向(所选位置(事件玩家), 事件玩家.endPT_L))) > 90);
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_L), 8, 至地图, 合并相反运动);
  • 等待(0.016, 无视条件);
  • 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;
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 矢量(0, 3, 0) + 事件玩家.endPT_L), 较大(8, 相距距离(所选位置(事件玩家), 事件玩家.endPT_L) * 0.400 + 4), 至地图, 合并相反运动);
  • 修改玩家变量(事件玩家, root, 添加至数组, 1);
  • 开始规则(tensionAll, 重新开始规则);
  • 开始规则(Playerstate, 重新开始规则);
  • 等待直到 (按钮被按下(事件玩家, 按钮(终极技能)) == 假 || 具有状态(事件玩家, 击晕) || 死亡(事件玩家.tL), 99999);
  • 修改玩家变量(事件玩家, root, 根据值从数组中移除, 1);
  • 事件玩家.endPT_L = 0;
  • 事件玩家.tL = 0;
  • }
  • }
  • rule("RT")
  • 规则("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);
  • 事件玩家.rt_R = 相距距离(所选位置(事件玩家), 事件玩家.endPT_R);
  • While(绝对值(矢量间夹角(速率(事件玩家), 方向(所选位置(事件玩家), 事件玩家.endPT_R))) > 90);
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_R), 8, 至地图, 合并相反运动);
  • 等待(0.016, 无视条件);
  • 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;
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 矢量(0, 3, 0) + 事件玩家.endPT_R), 较大(8, 相距距离(所选位置(事件玩家), 事件玩家.endPT_R) * 0.400 + 4), 至地图, 合并相反运动);
  • 修改玩家变量(事件玩家, root, 添加至数组, 2);
  • 开始规则(tensionAll, 重新开始规则);
  • 开始规则(Playerstate, 重新开始规则);
  • 等待直到 ((按钮被按下(事件玩家, 按钮(技能2)) == 假 && 事件玩家.skill != 2) || (具有状态(事件玩家, 击晕) || 死亡(事件玩家.tR)), 99999);
  • 修改玩家变量(事件玩家, root, 根据值从数组中移除, 2);
  • 事件玩家.endPT_R = 0;
  • 事件玩家.tR = 0;
  • }
  • }
  • rule("L_L")
  • 规则("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)));
  • If(事件玩家.tL != 0);
  • While(事件玩家.rt_L != 0);
  • If(相距距离(所选位置(事件玩家), 地图矢量(事件玩家.dir_L, 事件玩家.tL, 旋转并转换)) < 事件玩家.rt_L);
  • 事件玩家.rt_L = 较大(1, 相距距离(所选位置(事件玩家), 地图矢量(事件玩家.dir_L, 事件玩家.tL, 旋转并转换)));
  • 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;
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 地图矢量(事件玩家.dir_L, 事件玩家.tL, 旋转并转换)), 较小(5, 相距距离(所选位置(事件玩家), 地图矢量(事件玩家.dir_L, 事件玩家.tL, 旋转并转换)) - 事件玩家.rt_L),
  • 至地图, 合并相反运动);
  • End;
  • Wait(0.032, Ignore Condition);
  • 等待(0.032, 无视条件);
  • 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));
  • While(事件玩家.rt_L != 0);
  • If(相距距离(所选位置(事件玩家), 事件玩家.endPT_L) < 事件玩家.rt_L);
  • 事件玩家.rt_L = 较大(1, 相距距离(所选位置(事件玩家), 事件玩家.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;
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_L), 较小(5, 相距距离(所选位置(事件玩家), 事件玩家.endPT_L) - 事件玩家.rt_L), 至地图, 合并相反运动);
  • End;
  • Wait(0.032, Ignore Condition);
  • 等待(0.032, 无视条件);
  • End;
  • End;
  • }
  • }
  • rule("L_R")
  • 规则("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)));
  • If(事件玩家.tR != 0);
  • While(事件玩家.rt_R != 0);
  • If(相距距离(所选位置(事件玩家), 地图矢量(事件玩家.dir_R, 事件玩家.tR, 旋转并转换)) < 事件玩家.rt_R);
  • 事件玩家.rt_R = 较大(1, 相距距离(所选位置(事件玩家), 地图矢量(事件玩家.dir_R, 事件玩家.tR, 旋转并转换)));
  • 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;
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 地图矢量(事件玩家.dir_R, 事件玩家.tR, 旋转并转换)), 较小(5, 相距距离(所选位置(事件玩家), 地图矢量(事件玩家.dir_R, 事件玩家.tR, 旋转并转换)) - 事件玩家.rt_R),
  • 至地图, 合并相反运动);
  • End;
  • Wait(0.032, Ignore Condition);
  • 等待(0.032, 无视条件);
  • 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));
  • While(事件玩家.rt_R != 0);
  • If(相距距离(所选位置(事件玩家), 事件玩家.endPT_R) < 事件玩家.rt_R);
  • 事件玩家.rt_R = 较大(1, 相距距离(所选位置(事件玩家), 事件玩家.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;
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_R), 较小(5, 相距距离(所选位置(事件玩家), 事件玩家.endPT_R) - 事件玩家.rt_R), 至地图, 合并相反运动);
  • End;
  • Wait(0.032, Ignore Condition);
  • 等待(0.032, 无视条件);
  • End;
  • End;
  • }
  • }
  • rule("拉力{tensionAll}")
  • 规则("拉力{tensionAll}")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • 子程序;
  • tensionAll;
  • }
  • actions
  • 动作
  • {
  • Stop Accelerating(Event Player);
  • Wait(0.016, Ignore Condition);
  • Skip If(Array Contains(Event Player.root, 3) == False, 2);
  • 停止加速(事件玩家);
  • 等待(0.016, 无视条件);
  • 根据条件跳过(数组包含(事件玩家.root, 3) == 假, 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);
  • 开始加速(事件玩家, 数量(事件玩家.root) == 1 ? 矢量(1, 0, 1) * 面朝方向(事件玩家) : 矢量(1, 0, 1) * 速率(事件玩家), 11, 事件玩家.gason, 至地图, 方向,速率,及最大速度);
  • 开始规则(GAS, 无动作);
  • If(数组包含(事件玩家.root, 1) == 真);
  • If(事件玩家.tL == 0);
  • If(数组包含(事件玩家.root, 3) == 真);
  • "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);
  • 开始加速(事件玩家, 与此角度的相对方向(与此方向的水平角度(方向(事件玩家.endPT_L, 所选位置(事件玩家))) + (Y方向分量(矢量积(速率(事件玩家), 方向(所选位置(事件玩家), 事件玩家.endPT_L))) > 0 ? 90 : -90),
  • 0), 8, (绝对值(角度差(与此方向的水平角度(速率(事件玩家)), 与此方向的水平角度(方向(所选位置(事件玩家), 事件玩家.endPT_L)))) > 85) * 30, 至地图, 方向,速率,及最大速度);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_L), 90, 1 + 速度(事件玩家) * 0.040, 至地图, 方向,速率,及最大速度);
  • 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);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_L), 12, (绝对值(角度差(与此方向的水平角度(速率(事件玩家)), 与此方向的水平角度(方向(所选位置(事件玩家), 事件玩家.endPT_L)))) < 85) * 20,
  • 至地图, 方向,速率,及最大速度);
  • 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);
  • 事件玩家.dir_L = 本地矢量(事件玩家.endPT_L, 事件玩家.tL, 旋转并转换);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 地图矢量(事件玩家.dir_L, 事件玩家.tL, 旋转并转换)), 12, 25, 至地图, 方向,速率,及最大速度);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 地图矢量(单次赋值(事件玩家.dir_L), 事件玩家.tL, 旋转并转换)), 90, 1.500, 至地图, 方向,速率,及最大速度);
  • End;
  • 开始规则(length_L, 重新开始规则);
  • End;
  • If(数组包含(事件玩家.root, 2) == 真);
  • If(事件玩家.tR == 0);
  • If(数组包含(事件玩家.root, 3) == 真);
  • "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);
  • 开始加速(事件玩家, 与此角度的相对方向(与此方向的水平角度(方向(事件玩家.endPT_R, 所选位置(事件玩家))) + (Y方向分量(矢量积(速率(事件玩家), 方向(所选位置(事件玩家), 事件玩家.endPT_R))) > 0 ? 90 : -90),
  • 0), 8, (绝对值(角度差(与此方向的水平角度(速率(事件玩家)), 与此方向的水平角度(方向(所选位置(事件玩家), 事件玩家.endPT_R)))) > 85) * 30, 至地图, 方向,速率,及最大速度);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_R), 90, 1 + 速度(事件玩家) * 0.040, 至地图, 方向,速率,及最大速度);
  • 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);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 事件玩家.endPT_R), 12, (绝对值(角度差(与此方向的水平角度(速率(事件玩家)), 与此方向的水平角度(方向(所选位置(事件玩家), 事件玩家.endPT_R)))) < 85) * 20,
  • 至地图, 方向,速率,及最大速度);
  • 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);
  • 事件玩家.dir_R = 本地矢量(事件玩家.endPT_R, 事件玩家.tR, 旋转并转换);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 地图矢量(单次赋值(本地矢量(事件玩家.endPT_R, 事件玩家.tR, 旋转并转换)), 事件玩家.tR, 旋转并转换)), 12, 25, 至地图, 方向,速率,及最大速度);
  • 开始加速(事件玩家, 方向(所选位置(事件玩家), 地图矢量(单次赋值(本地矢量(事件玩家.endPT_R, 事件玩家.tR, 旋转并转换)), 事件玩家.tR, 旋转并转换)), 90, 1.500, 至地图, 方向,速率,及最大速度);
  • End;
  • Start Rule(length_R, Restart Rule);
  • 开始规则(length_R, 重新开始规则);
  • 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))) > 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))) > 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);
  • If(事件玩家.endPT_L && 绝对值(矢量间夹角(速率(事件玩家), 方向(所选位置(事件玩家), 事件玩家.tL != 0 ? 地图矢量(事件玩家.dir_L, 事件玩家.tL, 旋转并转换) : 事件玩家.endPT_L))) > 70 && 真);
  • 事件玩家.rt_L *= 0.300;
  • 施加推力(事件玩家, 速率(事件玩家) * -1, 速度(事件玩家) * 0.400, 至地图, 合并相反运动);
  • Else If(事件玩家.endPT_R && 绝对值(矢量间夹角(速率(事件玩家), 方向(所选位置(事件玩家), 事件玩家.tR != 0 ? 地图矢量(事件玩家.dir_R, 事件玩家.tR, 旋转并转换) : 事件玩家.endPT_R)))
  • > 70 && 真);
  • 事件玩家.rt_R *= 0.300;
  • 施加推力(事件玩家, 速率(事件玩家) * -1, 速度(事件玩家) * 0.400, 至地图, 合并相反运动);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • 等待(0.250, 无视条件);
  • 如条件为”真“则循环;
  • }
  • }
  • rule("喷气")
  • 规则("喷气")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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;
  • (按钮被按下(事件玩家, 按钮(跳跃)) || 按钮被按下(事件玩家, 按钮(技能1))) == 真;
  • 具有状态(事件玩家, 击倒) == 假;
  • 事件玩家.skill != 3;
  • 具有状态(事件玩家, 击晕) == 假;
  • 所用英雄(事件玩家) == 英雄(源氏);
  • 存活(事件玩家) == 真;
  • }
  • actions
  • 动作
  • {
  • 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);
  • 根据条件跳过(高度(事件玩家) > 0.300, 2);
  • 施加推力(事件玩家, 与此角度的相对方向(与此方向的水平角度(速率(事件玩家) == 矢量(0, 0, 0) ? 面朝方向(事件玩家) : 速率(事件玩家)), -80), 8, 至地图, 合并相反运动);
  • 等待(0.200, 当为“假”时中止);
  • 修改玩家变量(事件玩家, root, 添加至数组, 3);
  • 开始规则(tensionAll, 重新开始规则);
  • 开始规则(Playerstate, 重新开始规则);
  • 等待(0.050, 无视条件);
  • 事件玩家.gason = 30;
  • 等待直到 (在地面上(事件玩家) || (按钮被按下(事件玩家, 按钮(跳跃)) == 假 && 按钮被按下(事件玩家, 按钮(技能1)) == 假), 99999);
  • 修改玩家变量(事件玩家, root, 根据值从数组中移除, 3);
  • 事件玩家.gason = 0;
  • 开始规则(tensionAll, 重新开始规则);
  • 根据条件跳过(在地面上(事件玩家) == 真, 1);
  • 如条件为”真“则循环;
  • 开始规则(Playerstate, 重新开始规则);
  • }
  • }
  • rule("双喷")
  • 规则("双喷")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • conditions
  • 条件
  • {
  • Throttle Of(Event Player) != Vector(0, 0, 0);
  • Hero Of(Event Player) == Hero(Genji);
  • Event Player.skill != 3;
  • 阈值(事件玩家) != 矢量(0, 0, 0);
  • 所用英雄(事件玩家) == 英雄(源氏);
  • 事件玩家.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);
  • If(事件玩家.push_way == 阈值(事件玩家));
  • 施加推力(事件玩家, 阈值(事件玩家), 30, 至玩家, 取消相反运动XYZ);
  • 播放效果(所有玩家(所有队伍), 有益爆炸, 颜色(白色), 地图矢量(矢量(0, 0.700, 0), 事件玩家, 旋转并转换), 7);
  • 等待(1, 无视条件);
  • Else;
  • Event Player.push_way = Throttle Of(Event Player);
  • Wait(0.200, Restart When True);
  • 事件玩家.push_way = 阈值(事件玩家);
  • 等待(0.200, 当为“真”时重新开始);
  • End;
  • Event Player.push_way = 0;
  • 事件玩家.push_way = 0;
  • }
  • }
  • rule("喷气效果")
  • 规则("重生拉力")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • GAS;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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;
  • 事件玩家.root = 空数组;
  • 开始规则(tensionAll, 重新开始规则);
  • }
  • }
  • conditions
  • 规则("喷气效果")
  • {
  • 事件
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Hero Of(Event Player) == Hero(Genji);
  • 子程序;
  • GAS;
  • }
  • actions
  • 动作
  • {
  • Event Player.root = Empty Array;
  • Start Rule(tensionAll, Restart Rule);
  • While(数组包含(事件玩家.root, 3) == 真);
  • 播放效果(所有玩家(队伍1), 有益爆炸, 颜色(队伍1), 地图矢量(矢量(0, 0.300, -0.200), 事件玩家, 旋转并转换), 0.200);
  • 等待(0.100, 无视条件);
  • End;
  • }
  • }
  • rule("——————equiment——————")
  • 规则("——————equiment——————")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 持续 - 全局;
  • }
  • }
  • rule("玩家重生")
  • 规则("滑行铲地")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • conditions
  • 条件
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • 高度(事件玩家) < 0.800;
  • 水平速度(事件玩家) > 10;
  • Y方向分量(速率(事件玩家)) < 0;
  • 事件玩家.skill != 3;
  • 所用英雄(事件玩家) == 英雄(源氏);
  • }
  • 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);
  • 设置引力(事件玩家, 0);
  • 施加推力(事件玩家, 上, 0.010, 至玩家, 取消相反运动);
  • While(高度(事件玩家) < 1 && 水平速度(事件玩家) > 8);
  • 禁用 施加推力(事件玩家, 速率(事件玩家) * 矢量(-1, 0, -1), 较大(1.500, 速度(事件玩家) * 0.100), 至地图, 合并相反运动);
  • 施加推力(事件玩家, 速率(事件玩家) * 矢量(-1, 0, -1), 较小(1.500, 速度(事件玩家) * 0.200), 至地图, 合并相反运动);
  • 等待(0.050, 无视条件);
  • 根据条件跳过(所用英雄(事件玩家) != 英雄(源氏), 4);
  • End;
  • 开始规则(Playerstate, 重新开始规则);
  • }
  • }
  • rule("地图工坊变量")
  • 规则("Camera")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 子程序;
  • Camera;
  • }
  • 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);
  • 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("困难难度"),
  • 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(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]), 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与意见在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: KAVGC Give a Like at [Workshop.codes] if U enjoy this Mode!"), Visible To and String);
  • If(事件玩家.camera == 1);
  • If(所用英雄(事件玩家) == 英雄(末日铁拳));
  • 开始镜头(事件玩家, 矢量(0, 17, 0) + 所选位置(事件玩家) + 面朝方向(事件玩家) * -8, 眼睛位置(事件玩家) + 面朝方向(事件玩家) * 26, 33);
  • Else;
  • 开始镜头(事件玩家, 地图矢量(矢量(0, 3, 0), 事件玩家, 旋转并转换) + 归一化(速率(事件玩家)) * 矢量(-1, 0, -1) + 面朝方向(事件玩家) * -4, 眼睛位置(事件玩家) + 面朝方向(事件玩家) * 20, 35 + 速度(
  • 事件玩家) * -0.300);
  • End;
  • Else;
  • 停止镜头(事件玩家);
  • End;
  • }
  • }
  • rule("碰撞")
  • 规则("PlayerState")
  • {
  • event
  • 事件
  • {
  • 子程序;
  • Playerstate;
  • }
  • 动作
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • 根据条件中止(所用英雄(事件玩家) != 英雄(源氏));
  • "飞行速度"
  • If(数量(事件玩家.root) > 0);
  • 设置移动速度(事件玩家, 600);
  • 设置引力(事件玩家, 80);
  • 禁用按钮(事件玩家, 按钮(跳跃));
  • 禁用按钮(事件玩家, 按钮(蹲下));
  • 开始限制阈值(事件玩家, 0, 0, 0, 0, 0, 0);
  • Else If(事件玩家.skill_i1 == 0);
  • 开始限制阈值(事件玩家, 0, 0.300, 0, 0.300, 0, 0.300);
  • 设置移动速度(事件玩家, 200);
  • 设置引力(事件玩家, 100);
  • End;
  • }
  • }
  • 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;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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)), 2, To World,
  • Cancel Contrary Motion);
  • Wait(0.050, Ignore Condition);
  • Loop If Condition Is True;
  • 事件玩家.eff_strings = 空数组;
  • "左"
  • 创建光束效果(事件玩家, 抓钩光束, 地图矢量(矢量(0.700, 0.800, 0.400), 事件玩家, 旋转并转换), 地图矢量(矢量(0.550, 0.700, -0.350), 事件玩家, 旋转并转换), 颜色(白色), 可见,位置和半径);
  • 事件玩家.eff_strings[0] = 最后创建的实体;
  • 等待(0.016, 无视条件);
  • "右"
  • 创建光束效果(事件玩家, 抓钩光束, 地图矢量(矢量(-0.700, 0.800, 0.400), 事件玩家, 旋转并转换), 地图矢量(矢量(-0.550, 0.700, -0.350), 事件玩家, 旋转并转换), 颜色(白色), 可见,位置和半径);
  • 事件玩家.eff_strings[5] = 最后创建的实体;
  • 创建HUD文本(事件玩家, 自定义字符串("【{0}】切换/Switch: {1}{2}", 输入绑定字符串(按钮(近身攻击)), 全局.Skill_name[事件玩家.choose_skill][0],
  • 全局.Skill_name[事件玩家.choose_skill][1]), 无, 无, 右边, -0.900, 颜色(绿色), 颜色(白色), 颜色(白色), 可见和字符串, 默认可见度);
  • 禁用按钮(事件玩家, 按钮(终极技能));
  • 禁用按钮(事件玩家, 按钮(技能2));
  • 禁用按钮(事件玩家, 按钮(技能1));
  • 禁用按钮(事件玩家, 按钮(跳跃));
  • 事件玩家.skill_GunsLoc_i3 = 空数组;
  • }
  • }
  • rule("碰撞")
  • 规则("玩家重生")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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;
  • 取消与玩家的移动碰撞(事件玩家);
  • 设置状态(事件玩家, 无, 消散, 9999);
  • 根据条件跳过(事件玩家.respond == 1, 1);
  • 开始强制设置玩家位置(事件玩家, 矢量(随机实数(-80, 80), 50, 随机实数(-80, 80)), 假);
  • 等待(0.500, 无视条件);
  • 开始限制阈值(事件玩家, 0, 0.300, 0, 0.300, 0, 0.300);
  • 设置移动速度(事件玩家, 200);
  • 禁用按钮(事件玩家, 按钮(跳跃));
  • 等待(2, 无视条件);
  • 停止强制设置玩家位置(事件玩家);
  • 清除状态(事件玩家, 消散);
  • }
  • }
  • rule("滑行铲地")
  • 规则("镜头")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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);
  • 事件玩家.camera = (事件玩家.camera + 1) % 2;
  • 开始规则(Camera, 重新开始规则);
  • }
  • }
  • 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);
  • 全局.A = 空数组;
  • 全局.B = 空数组;
  • For 全局变量(i, 0, 30, 1);
  • 全局.wl_loc = 矢量(随机实数(-150, 150), 0, 随机实数(-150, 150));
  • 全局.wl_size = 随机实数(5, 12);
  • If(对任意为”真“(全局.A, 相距距离(当前数组元素, 全局.wl_loc) < 30) == 假);
  • 修改全局变量(A, 添加至数组, 全局.wl_loc);
  • 修改全局变量(B, 添加至数组, 全局.wl_size);
  • 修改全局变量(A, 添加至数组, 全局.wl_loc + 矢量(0, 20 + 5 * 全局.wl_size, 0));
  • 修改全局变量(B, 添加至数组, 全局.wl_size * 4);
  • 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);
  • 全局.i -= 1;
  • End;
  • Else;
  • Stop Camera(Event Player);
  • 等待(0.016, 无视条件);
  • End;
  • For 全局变量(i, 0, 数量(全局.A), 1);
  • If(Y方向分量(全局.A[全局.i]) == 0);
  • 创建效果(所有玩家(所有队伍), 光柱, 颜色(橙色), 全局.A[全局.i], 全局.B[全局.i], 可见);
  • Else;
  • 创建效果(所有玩家(所有队伍), 球体, 颜色(绿色), 全局.A[全局.i], 全局.B[全局.i], 可见);
  • End;
  • 等待(0.016, 无视条件);
  • End;
  • }
  • }
  • rule("镜头")
  • 规则("规则开关")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • 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);
  • 等待(3, 当为“假”时中止);
  • 小字体信息(事件玩家, 自定义字符串("正在开/关规则"));
  • 等待(0.500, 当为“假”时中止);
  • 事件玩家.rule = (事件玩家.rule + 1) % 2;
  • }
  • }
  • 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;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • }
  • 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}] 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(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);
  • 停止加速(事件玩家);
  • 等待直到 (具有状态(事件玩家, 击晕) == 假, 99999);
  • 开始规则(tensionAll, 重新开始规则);
  • }
  • }
  • rule("玩家重生")
  • 规则("源")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 每名玩家;
  • 队伍1;
  • 源氏;
  • }
  • 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);
  • 设置终极技能充能(事件玩家, 100);
  • 等待(2, 无视条件);
  • 事件玩家.skill = 1;
  • 可用按钮(事件玩家, 按钮(终极技能));
  • 等待(0.016, 无视条件);
  • 按下按键(事件玩家, 按钮(终极技能));
  • 等待(0.016, 无视条件);
  • 禁用按钮(事件玩家, 按钮(终极技能));
  • 所有玩家(所有队伍).skill = 0;
  • 如条件为”真“则循环;
  • }
  • }
  • 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;
  • 比赛结束 == 真;
  • }
  • 动作
  • {
  • 等待(3, 无视条件);
  • 重新开始比赛;
  • }
  • }
  • 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;
  • 设置比赛时间(5);
  • }
  • }
  • rule("昏迷取消加速")
  • 规则("Scoreboard")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • 持续 - 全局;
  • }
  • conditions
  • 条件
  • {
  • Has Status(Event Player, Stunned) == True;
  • 总计消耗时间 > 首个(全局.Score_time);
  • 首个(全局.Score_time) != 0;
  • }
  • actions
  • 动作
  • {
  • Stop Accelerating(Event Player);
  • Wait Until(Has Status(Event Player, Stunned) == False, 99999);
  • Start Rule(tensionAll, Restart Rule);
  • 消除HUD文本(首个(全局.Score_Hud));
  • 修改全局变量(Score_time, 根据索引从数组中移除, 0);
  • 修改全局变量(Score_Hud, 根据索引从数组中移除, 0);
  • 等待(0.100, 无视条件);
  • 如条件为”真“则循环;
  • }
  • }
  • 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;
  • 全局.re_str = 空数组;
  • 全局.ready = 空数组;
  • 全局.gravity = 17.500;
  • 禁用查看器录制;
  • 创建HUD文本(所有玩家(所有队伍), 无, 无, 自定义字符串("\r\n\r\n\r\n\r\n\r\n\r\n"), 右边, -3, 颜色(白色), 颜色(白色), 颜色(白色), 可见, 默认可见度);
  • 全局.Score_Hud = 空数组;
  • 全局.Score_time = 空数组;
  • }
  • }
  • rule("自动重开")
  • 规则("————Robot&Ai————")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 持续 - 全局;
  • }
  • }
  • conditions
  • 规则("巨人机器人")
  • {
  • 事件
  • {
  • Is Match Complete == True;
  • 持续 - 全局;
  • }
  • actions
  • 动作
  • {
  • Wait(2, Ignore Condition);
  • Restart Match;
  • 禁用 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(查莉娅), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(温斯顿), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(狂鼠), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(破坏球), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(莱因哈特), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(士兵:76), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 禁用 生成机器人(英雄(源氏), 队伍1, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • }
  • }
  • rule("集结英雄节约时间")
  • 规则("巨人生成")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 持续 - 每名玩家;
  • 队伍2;
  • 全部;
  • }
  • conditions
  • 条件
  • {
  • Is Assembling Heroes == True;
  • 已重生(事件玩家) == 真;
  • 存活(事件玩家) == 真;
  • 数组包含(数组(英雄(安娜)), 所用英雄(事件玩家)) != 真;
  • }
  • actions
  • 动作
  • {
  • Set Match Time(5);
  • If(所用英雄(事件玩家) == 英雄(西格玛));
  • 传送(事件玩家, 矢量(随机实数(-150, 150), 100, 随机实数(-150, 150)));
  • Else;
  • 传送(事件玩家, 矢量(随机实数(-100, 100), 100, 随机实数(-100, 100)));
  • End;
  • 开始强制设置玩家轮廓(事件玩家, 所有玩家(队伍1), 假, 颜色(白色), 默认);
  • 等待(0.016, 无视条件);
  • 设置状态(事件玩家, 无, 无法杀死, 999999);
  • If(事件玩家.bodysize == 0);
  • 设置移动速度(事件玩家, (0.500 + 全局.ai_adjustPerst * 0.500) * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][7]);
  • If(全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][6] == 0);
  • 事件玩家.bodysize = 随机实数(3, 8);
  • Else;
  • 事件玩家.bodysize = 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][6];
  • End;
  • 开始调整玩家大小(事件玩家, 事件玩家.bodysize, 假);
  • 开始为机器人强制设置名称(事件玩家, 单次赋值(全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][4]));
  • 为玩家添加生命池(事件玩家, 生命值, 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][5], 真, 真);
  • If(所用英雄(事件玩家) != 英雄(西格玛));
  • If(所用英雄(事件玩家) == 英雄(狂鼠));
  • 创建效果(所有玩家(所有队伍), 球体, 数组(无, 颜色(红色))[事件玩家.life], 地图矢量(事件玩家.bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][具有状态(事件玩家, 击倒)
  • == 真 ? 矢量(0, 0, -1) : (正在蹲下(事件玩家) ? 1 : (阈值(事件玩家) == 矢量(0, 0, 0) ? 0 : 12))], 事件玩家, 旋转并转换), 事件玩家.bodysize * 全局.ar_giant[数组值的索引(
  • 全局.ar_hero, 所用英雄(事件玩家))][2] + 0.600 * 具有状态(本地玩家, 点燃), 可见,位置,半径和颜色);
  • Else;
  • 创建效果(所有玩家(所有队伍), 球体, 数组(无, 颜色(红色), 颜色(黄色), 颜色(天蓝色), 颜色(蓝色), 颜色(白色))[事件玩家.life], 地图矢量(事件玩家.bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero,
  • 所用英雄(事件玩家))][正在使用技能 1(事件玩家) ? 11 : (正在蹲下(事件玩家) ? 1 : (阈值(事件玩家) == 矢量(0, 0, 0) ? 0 : 12))], 事件玩家, 旋转并转换),
  • 事件玩家.bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][2] + 0.600 * 具有状态(本地玩家, 点燃), 可见,位置,半径和颜色);
  • End;
  • End;
  • 取消与玩家的移动碰撞(事件玩家);
  • 设置造成伤害(事件玩家, (0.100 + 全局.ai_adjustPerst * 0.700) * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][8]);
  • End;
  • 开始规则(giant_reset, 重新开始规则);
  • 事件玩家.life = 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][3];
  • }
  • }
  • rule("Scoreboard")
  • 规则("玩家与巨人碰撞")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 持续 - 每名玩家;
  • 队伍1;
  • 全部;
  • }
  • conditions
  • 条件
  • {
  • Total Time Elapsed > First Of(Global.Score_time);
  • First Of(Global.Score_time) != 0;
  • 已重生(事件玩家) == 真;
  • 存活(事件玩家) == 真;
  • 射线命中玩家(眼睛位置(事件玩家), 所选位置(事件玩家), 所有玩家(队伍2), 事件玩家, 真) == 真;
  • }
  • 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;
  • 施加推力(事件玩家, 方向(所选位置(射线命中玩家(眼睛位置(事件玩家), 所选位置(事件玩家), 所有玩家(队伍2), 事件玩家, 真)) * 矢量(1, 0, 1) + 矢量(0, Y方向分量(所选位置(事件玩家)), 0), 地图矢量(矢量(0, 1,
  • 0), 事件玩家, 旋转并转换)), 1, 至地图, 取消相反运动);
  • 等待(0.032, 无视条件);
  • 如条件为”真“则循环;
  • }
  • }
  • rule("全局")
  • 规则("巨人正常ai")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 子程序;
  • Giant_Ai_normal;
  • }
  • 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;
  • 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 Mode!"));
  • Wait(30, Ignore Condition);
  • 开始规则(giant_reset, 无动作);
  • If(高度(距离最近的玩家(所选位置(事件玩家), 队伍1)) < 3 && 已过滤的数组(范围内玩家(所选位置(事件玩家), 事件玩家.bodysize, 队伍1, 关闭), 存活(当前数组元素)) != 空数组);
  • 调用子程序(AiJump_attack);
  • Else If(对任意为”真“(所有存活玩家(队伍1), 已重生(当前数组元素) && 相距距离(眼睛位置(当前数组元素), 眼睛位置(事件玩家) + 面朝方向(事件玩家) * 事件玩家.bodysize) < 事件玩家.bodysize * 0.700));
  • 调用子程序(Aipunch);
  • 等待(1, 无视条件);
  • End;
  • 等待(0.300, 无视条件);
  • 循环;
  • }
  • }
  • rule("————Robot&Ai————")
  • 规则("giant_reset")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 子程序;
  • giant_reset;
  • }
  • 动作
  • {
  • 停止朝向(事件玩家);
  • 停止定向阈值(事件玩家);
  • If(死亡(事件玩家.ai_1) || 相距距离(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)) > 50 || 实体存在(事件玩家.ai_1) == 假);
  • 事件玩家.ai_1 = 首个(范围内玩家(眼睛位置(事件玩家), 50, 队伍1, 关闭));
  • Else;
  • If(所用英雄(事件玩家) == 英雄(西格玛));
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 10 + 30 * 全局.ai_adjustPerst, 至地图, 方向及角速率);
  • 开始定向阈值(事件玩家, 矢量(0, 0, 1), 1, 至玩家, 替换现有阈值, 方向和幅度);
  • Else If(所用英雄(事件玩家) == 英雄(破坏球));
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 10 + 全局.ai_adjustPerst * 20, 至地图, 方向及角速率);
  • 开始定向阈值(事件玩家, 方向(所选位置(事件玩家), 所选位置(事件玩家.ai_1)), 1, 至玩家, 替换现有阈值, 方向和幅度);
  • End;
  • End;
  • }
  • }
  • rule("巨人机器人")
  • 规则("Ai jump")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 子程序;
  • AiJump_attack;
  • }
  • actions
  • 动作
  • {
  • Wait(5, Ignore Condition);
  • 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 Wait(5, Ignore Condition);
  • disabled Create Dummy Bot(Hero(Doomfist), Team 2, -1, Vector(0, 0, 0), Vector(0, 0, 0));
  • 停止朝向(事件玩家);
  • 开始限制阈值(事件玩家, 0, 0, 0, 0, 0, 0);
  • 开始按下按钮(事件玩家, 按钮(蹲下));
  • 等待(0.500, 无视条件);
  • 按下按键(事件玩家, 按钮(跳跃));
  • 设置引力(事件玩家, 50);
  • 等待(1, 无视条件);
  • 等待直到 (在地面上(事件玩家), 999);
  • 根据条件跳过(死亡(事件玩家) == 真, 3);
  • 播放效果(所有玩家(所有队伍), 温斯顿喷射背包着陆效果, 颜色(白色), 所选位置(事件玩家), 1);
  • 播放效果(所有玩家(所有队伍), 温斯顿喷射背包着陆声音, 颜色(白色), 所选位置(事件玩家), 100);
  • 伤害(范围内玩家(所选位置(事件玩家) - 矢量(0, 5, 0), 3 + 事件玩家.bodysize, 队伍1, 关闭), 事件玩家, 200);
  • 等待(2, 无视条件);
  • 停止按下按钮(事件玩家, 按钮(蹲下));
  • 等待(1, 无视条件);
  • 停止限制阈值(事件玩家);
  • 设置引力(事件玩家, 100);
  • 开始规则(giant_reset, 重新开始规则);
  • }
  • }
  • rule("巨人生成")
  • 规则("Ai punch")
  • {
  • event
  • 事件
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • 子程序;
  • Aipunch;
  • }
  • conditions
  • 动作
  • {
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Array Contains(Array(Hero(Ana)), Hero Of(Event Player)) != True;
  • 停止朝向(事件玩家);
  • 开始限制阈值(事件玩家, 0, 0, 0, 0, 0, 0);
  • 设置状态(事件玩家, 无, 点燃, 9999);
  • 等待(2 - 全局.ai_adjustPerst * 1, 无视条件);
  • 按下按键(事件玩家, 按钮(近身攻击));
  • 等待直到 (正在近战攻击(事件玩家) == 假, 99999);
  • 清除状态(事件玩家, 点燃);
  • 等待(0.500, 无视条件);
  • 停止限制阈值(事件玩家);
  • }
  • }
  • 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));
  • Teleport(Event Player, Vector(Random Real(-150, 150), 100, Random Real(-150, 150)));
  • Else;
  • 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);
  • Add Health Pool To Player(Event Player, Health, Global.ar_giant[Index Of Array Value(Global.ar_hero, Hero Of(Event Player))][5],
  • 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));
  • 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);
  • 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
  • {
  • 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));
  • 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));
  • 玩家阵亡;
  • 队伍2;
  • 全部;
  • }
  • 动作
  • {
  • If(团队得分(队伍1) <= 50);
  • 停止按下按钮(已过滤的数组(所有玩家(队伍1), 当前数组元素.tL == 事件玩家), 按钮(终极技能));
  • 停止按下按钮(已过滤的数组(所有玩家(队伍1), 当前数组元素.tR == 事件玩家), 按钮(技能2));
  • If(所用英雄(事件玩家) != 英雄(西格玛));
  • 修改队伍分数(队伍1, 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][3]);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("{0}{1} 已被讨伐 分数额外+{2}", 英雄图标字符串(所用英雄(事件玩家)), 事件玩家, 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][3]));
  • 等待(3, 无视条件);
  • 根据条件跳过(所用英雄(事件玩家) != 英雄(温斯顿), 1);
  • 移除机器人(队伍2, 栏位(选择英雄的玩家(英雄(安娜), 队伍2)));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • 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;
  • If(所用英雄(事件玩家) == 英雄(西格玛));
  • 等待(2, 无视条件);
  • 根据条件中止(数量(已过滤的数组(所有玩家(队伍2), 所用英雄(当前数组元素) != 英雄(西格玛))) > 2);
  • 全局.Random = 随机整数(0, 50);
  • If(全局.Random == 1 && 数量(选择英雄的玩家(英雄(破坏球), 队伍2)) < 1);
  • 生成机器人(英雄(破坏球), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • 中止;
  • 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;
  • If(全局.Random == 10 && 正在使用英雄(英雄(士兵:76), 队伍2) == 假);
  • 生成机器人(英雄(士兵:76), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • 中止;
  • 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;
  • If(全局.Random == 20 && 正在使用英雄(英雄(温斯顿), 队伍2) == 假);
  • 生成机器人(英雄(温斯顿), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • 中止;
  • 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;
  • If(全局.Random == 24 && 正在使用英雄(英雄(莱因哈特), 队伍2) == 假);
  • 生成机器人(英雄(莱因哈特), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • 中止;
  • 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;
  • If(全局.Random == 19 && 正在使用英雄(英雄(查莉娅), 队伍2) == 假);
  • 生成机器人(英雄(查莉娅), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • 中止;
  • 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;
  • If(全局.Random % 10 == 0 && 真);
  • 生成机器人(英雄(狂鼠), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • 中止;
  • End;
  • End;
  • Else;
  • If(Hero Of(Event Player) != Hero(Sigma));
  • 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));
  • 停止按下按钮(已过滤的数组(所有玩家(队伍1), 当前数组元素.tL == 事件玩家), 按钮(终极技能));
  • 停止按下按钮(已过滤的数组(所有玩家(队伍1), 当前数组元素.tR == 事件玩家), 按钮(技能2));
  • If(所用英雄(事件玩家) != 英雄(西格玛));
  • 修改队伍分数(队伍1, 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][3]);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("{0}{1} 已被讨伐 分数额外+{2}", 英雄图标字符串(所用英雄(事件玩家)), 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][4],
  • 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][3]));
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 100, 0), 矢量(0, 0, 0));
  • 等待(3, 无视条件);
  • 根据条件跳过(所用英雄(事件玩家) != 英雄(温斯顿), 1);
  • 移除机器人(队伍2, 栏位(选择英雄的玩家(英雄(安娜), 队伍2)));
  • 移除机器人(队伍2, 栏位(事件玩家));
  • End;
  • }
  • }
  • rule("巨人受到伤害")
  • 规则("巨人受到伤害")
  • {
  • event
  • 事件
  • {
  • Player Dealt Damage;
  • Team 1;
  • All;
  • 玩家造成伤害;
  • 队伍1;
  • 全部;
  • }
  • conditions
  • 条件
  • {
  • Team Of(Victim) == Team 2;
  • 所在队伍(被攻击方) == 队伍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;
  • If((攻击方.skill_Gun_shootBot[0] == 被攻击方 && 攻击方.skill_Gun_fire[0] == 真) || (
  • 攻击方.skill_Gun_shootBot[1] == 被攻击方 && 攻击方.skill_Gun_fire[1] == 真));
  • 被攻击方.ai_1 = 攻击方;
  • 根据条件中止(首个(已过滤的数组(攻击方.skill_Gun_hit, 攻击方.skill_Gun_shootBot[当前数组索引] == 被攻击方)) == 0);
  • 被攻击方.life -= 2;
  • If(被攻击方.life <= 0);
  • 清除状态(被攻击方, 无法杀死);
  • 等待(0.016, 无视条件);
  • 伤害(被攻击方, 攻击方, 99999);
  • Else;
  • 设置状态(被攻击方, 无, 冰冻, 1.500);
  • End;
  • 跳过(23);
  • End;
  • If(Hero Of(Attacker) == Hero(Doomfist));
  • Victim.ai_1 = Attacker;
  • 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 && Victim.Founding_Titan != 0.500);
  • Clear Status(Victim, Unkillable);
  • Wait(0.016, Ignore Condition);
  • Kill(Victim, Attacker);
  • If(具有状态(被攻击方, 冰冻) == 真);
  • 治疗(被攻击方, 无, 事件伤害);
  • 中止;
  • End;
  • If(所用英雄(攻击方) == 英雄(末日铁拳));
  • 被攻击方.ai_1 = 攻击方;
  • 根据条件跳过(生命值(被攻击方) > 10, 4);
  • 清除状态(被攻击方, 无法杀死);
  • 等待(0.016, 无视条件);
  • 伤害(被攻击方, 攻击方, 100);
  • 等待(0.016, 无视条件);
  • Else;
  • If(相距距离(地图矢量(矢量(0, 1, 0), 攻击方, 旋转并转换), 地图矢量(被攻击方.bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(被攻击方))][正在使用技能 1(事件玩家) ? 11 : (
  • 正在蹲下(事件玩家) ? 1 : (阈值(被攻击方) == 矢量(0, 0, 0) ? 0 : 12))], 被攻击方, 旋转并转换)) <= 被攻击方.bodysize * 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(
  • 被攻击方))][2] + 具有状态(攻击方, 点燃) * 0.300 + 0.300);
  • 被攻击方.life -= 1;
  • 被攻击方.ai_1 = 攻击方;
  • If(被攻击方.life <= 0);
  • 清除状态(被攻击方, 无法杀死);
  • 等待(0.016, 无视条件);
  • 伤害(被攻击方, 攻击方, 99999);
  • 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);
  • 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);
  • 设置状态(被攻击方, 无, 冰冻, 1.500);
  • End;
  • 设置终极技能充能(攻击方, 终极技能充能百分比(攻击方) + 20);
  • 等待(0.016, 无视条件);
  • 小字体信息(所有玩家(所有队伍), 单次赋值(自定义字符串("攻击评分/Rank {0}{1} 【{2}】", 英雄图标字符串(所用英雄(攻击方)), 攻击方, 速度(攻击方) < 3 ? 自定义字符串(" D") : (速度(攻击方)
  • < 12 ? 自定义字符串(" C") : (速度(攻击方) < 20 ? 自定义字符串(" B") : (速度(攻击方) < 27 ? 自定义字符串(" A") : (速度(攻击方) < 35 ? 自定义字符串(" S") : 自定义字符串(
  • "SS"))))))));
  • 创建HUD文本(所有玩家(所有队伍), 无, 无, 自定义字符串("┏━┓  {0}\r\n┃{1}\r\n┗━┛ 速度 {2}m/s              ", 单次赋值(死亡(被攻击方) ? 自定义字符串("【致命一击/Kill!】")
  • : 自定义字符串("【伤害/Hit】")), 自定义字符串("{0}   {1}", 速度(攻击方) < 3 ? 自定义字符串(" D") : (速度(攻击方) < 12 ? 自定义字符串(" C") : (速度(攻击方) < 20 ? 自定义字符串(
  • " B") : (速度(攻击方) < 27 ? 自定义字符串(" A") : (速度(攻击方) < 35 ? 自定义字符串(" S") : 自定义字符串("SS"))))), 自定义字符串("{0}{1} ——> {2}", 英雄图标字符串(
  • 所用英雄(攻击方)), 攻击方, 自定义字符串("{0}{1}", 英雄图标字符串(所用英雄(被攻击方)), 被攻击方))), 速度(攻击方)), 右边, -0.500, 颜色(白色), 颜色(白色), 速度(攻击方) < 3 ? 颜色(灰色) : (
  • 速度(攻击方) < 12 ? 颜色(绿色) : (速度(攻击方) < 20 ? 颜色(天蓝色) : (速度(攻击方) < 27 ? 颜色(黄色) : (速度(攻击方) < 35 ? 颜色(橙色) : 颜色(红色))))), 排序, 默认可见度);
  • 修改全局变量(Score_Hud, 添加至数组, 上一个文本ID);
  • 修改全局变量(Score_time, 添加至数组, 15 + 总计消耗时间);
  • 治疗(被攻击方, 无, 100);
  • Else;
  • Attacker.hit_times += 1;
  • If(Attacker.hit_times % 4 == 0);
  • If(Global.Language == 0);
  • 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")
  • 规则("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), Hero(Doomfist), Hero(Baptiste));
  • Global.ar_giant = Empty Array;
  • Wait(0.250, Ignore Condition);
  • If(Global.Language == 0);
  • 全局.ar_hero = 数组(英雄(西格玛), 英雄(破坏球), 英雄(士兵:76), 英雄(温斯顿), 英雄(莱因哈特), 英雄(查莉娅), 英雄(狂鼠));
  • 全局.ar_giant = 空数组;
  • 等待(0.250, 无视条件);
  • If(全局.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));
  • 全局.ar_giant[0] = 数组(矢量(-0.180, 2.250, -0.450), 矢量(-0.180, 1.900, -0.420), 0.400, 1, 自定义字符串("无垢巨人"), 1000, 无, 60, 1000, 无, 无, 无, 矢量(
  • -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));
  • 全局.ar_giant[1] = 数组(矢量(0, 1.850, 0), 矢量(0, 1.850, 0), 0.330, 3, 自定义字符串("车力巨人(笑)"), 3000, 0, 70, 700, 无, 无, 无, 矢量(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));
  • 全局.ar_giant[2] = 数组(矢量(0.100, 1.600, -0.150), 矢量(0.050, 1.050, -0.100), 0.220, 4, 自定义字符串("男妈妈巨人"), 5000, 7, 120, 7000, 无, 无, 矢量(0,
  • 1.400, 0.300), 矢量(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));
  • 全局.ar_giant[3] = 数组(矢量(0, 1.700, 0.100), 矢量(0, 1.350, 0.250), 0.250, 3, 自定义字符串("兽之巨人"), 3000, 7, 100, 9999, 无, 无, 矢量(0, 1.400,
  • 0.300), 矢量(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));
  • 全局.ar_giant[4] = 数组(矢量(0, 2.200, 0), 矢量(0, 1.700, 0), 0.250, 5, 自定义字符串("铠之巨人"), 7000, 7, 70, 700, 无, 无, 矢量(0.100, 1.500, -0.200),
  • 矢量(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));
  • 全局.ar_giant[5] = 数组(矢量(0.240, 1.610, -0.250), 矢量(0, 1.800, 0), 0.120, 2, 自定义字符串("超大型巨人"), 10000, 20, 50, 1000, 无, 无, 矢量(0.240,
  • 1.610, -0.250), 矢量(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, 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);
  • 全局.ar_giant[6] = 数组(矢量(0, 1.400, 0.200), 矢量(0, 1.200, 0.200), 0.260, 1, 自定义字符串("奇行种"), 1000, 无, 200, 1000, 无, 无, 矢量(0, 0, -1.300),
  • 矢量(0, 1.650, 0.380));
  • Else If(全局.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));
  • 全局.ar_giant[0] = 数组(矢量(-0.180, 2.250, -0.450), 矢量(-0.180, 1.900, -0.420), 0.400, 1, 自定义字符串("Pure Titan"), 1000, 无, 60, 1000, 无, 无,
  • 无, 矢量(-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));
  • 全局.ar_giant[1] = 数组(矢量(0, 1.850, 0), 矢量(0, 1.850, 0), 0.330, 3, 自定义字符串("Cart Titan"), 3000, 0, 70, 700, 无, 无, 无, 矢量(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));
  • 全局.ar_giant[2] = 数组(矢量(0.100, 1.600, -0.150), 矢量(0.050, 1.050, -0.100), 0.220, 4, 自定义字符串("Male Titan"), 5000, 7, 120, 7000, 无, 无,
  • 矢量(0, 1.400, 0.300), 矢量(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));
  • 全局.ar_giant[3] = 数组(矢量(0, 1.700, 0.100), 矢量(0, 1.350, 0.250), 0.250, 3, 自定义字符串("Beast Titan"), 3000, 7, 100, 9999, 无, 无, 矢量(0,
  • 1.400, 0.300), 矢量(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));
  • 全局.ar_giant[4] = 数组(矢量(0, 2.200, 0), 矢量(0, 1.700, 0), 0.250, 5, 自定义字符串("Armored Titan"), 7000, 7, 70, 700, 无, 无, 矢量(0.100, 1.500,
  • -0.200), 矢量(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));
  • 全局.ar_giant[5] = 数组(矢量(0.240, 1.610, -0.250), 矢量(0, 1.800, 0), 0.120, 2, 自定义字符串("Colossal Titan"), 10000, 20, 50, 1000, 无, 无, 矢量(
  • 0.240, 1.610, -0.250), 矢量(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, 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
  • {
  • 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(2, Ignore Condition);
  • End;
  • Wait(1, Ignore Condition);
  • 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);
  • 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")
  • {
  • event
  • {
  • Subroutine;
  • Giant_Ai_normal;
  • }
  • actions
  • {
  • 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);
  • 全局.ar_giant[6] = 数组(矢量(0, 1.400, 0.200), 矢量(0, 1.200, 0.200), 0.260, 1, 自定义字符串("Abnormal Titan"), 1000, 无, 200, 1000, 无, 无, 矢量(0,
  • 0, -1.300), 矢量(0, 1.650, 0.380));
  • End;
  • Wait(0.300, Ignore Condition);
  • Loop;
  • }
  • }
  • rule("Ai jump")
  • 规则("男妈妈巨人AI")
  • {
  • 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 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));
  • 根据条件跳过(事件玩家.ai_1 == 0, 1);
  • If(死亡(事件玩家.ai_1) || 相距距离(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)) > 60 || 实体存在(事件玩家.ai_1) == 假);
  • 事件玩家.ai_1 = 首个(范围内玩家(眼睛位置(事件玩家), 60, 队伍1, 关闭));
  • 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);
  • 根据条件跳过(在视野内(事件玩家, 眼睛位置(事件玩家.ai_1), 70) == 真, 1);
  • 调用子程序(ai76_targetRefresh);
  • If(相距距离(所选位置(事件玩家) * 矢量(1, 0, 1), 眼睛位置(事件玩家.ai_1) * 矢量(1, 0, 1)) > 15);
  • 调用子程序(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;
  • If(对任意为”真“(所有存活玩家(队伍1), 已重生(当前数组元素) && 相距距离(眼睛位置(当前数组元素), 地图矢量(矢量(0, 事件玩家.bodysize, 0), 事件玩家, 旋转并转换) + 面朝方向(事件玩家) * 事件玩家.bodysize)
  • < 事件玩家.bodysize * 0.700));
  • 调用子程序(Aipunch);
  • 事件玩家.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);
  • If(已过滤的数组(范围内玩家(所选位置(事件玩家), 9, 队伍1, 关闭), 存活(当前数组元素) == 真) != 空数组);
  • 调用子程序(ai76_circleAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • 等待(0.250, 无视条件);
  • 循环;
  • }
  • }
  • rule("男妈妈AI 冲刺攻击")
  • 规则("男妈妈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(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;
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 40 + 全局.ai_adjustPerst * 50, 至地图, 方向及角速率);
  • 开始限制阈值(事件玩家, 1, 1, 0, 1, 0, 1);
  • 开始按下按钮(事件玩家, 按钮(技能1));
  • 等待直到 (相距距离(所选位置(事件玩家) * 矢量(1, 0, 1), 眼睛位置(事件玩家.ai_1) * 矢量(1, 0, 1)) < 15, 6);
  • 停止按下按钮(事件玩家, 按钮(技能1));
  • 停止限制阈值(事件玩家);
  • If(相距距离(所选位置(事件玩家) * 矢量(1, 0, 1), 眼睛位置(事件玩家.ai_1) * 矢量(1, 0, 1)) < 15);
  • 设置状态(事件玩家, 无, 点燃, 1.500);
  • 等待(0.300, 无视条件);
  • 停止朝向(事件玩家);
  • 施加推力(事件玩家, 方向(所选位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 较小(50, 相距距离(眼睛位置(事件玩家), 事件玩家.ai_1)), 至地图, 取消相反运动);
  • 等待(0.600, 无视条件);
  • 按下按键(事件玩家, 按钮(近身攻击));
  • End;
  • 停止朝向(事件玩家);
  • 等待(0.300, 无视条件);
  • 清除状态(事件玩家, 点燃);
  • 等待直到 (在地面上(事件玩家), 10);
  • 事件玩家.ai_1 = 0;
  • }
  • }
  • rule("男妈妈AI 回旋攻击")
  • 规则("男妈妈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(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));
  • 设置状态(事件玩家, 无, 点燃, 5);
  • 设置朝向(事件玩家, 与此角度的相对方向(水平朝向角度(事件玩家), 0), 至地图);
  • 等待(0.600, 无视条件);
  • 开始按下按钮(事件玩家, 按钮(蹲下));
  • 等待(1.500 - 全局.ai_adjustPerst * 0.700, 无视条件);
  • 按下按键(事件玩家, 按钮(近身攻击));
  • 开始朝向(事件玩家, 矢量(1, -0.500, 0), 720, 至玩家, 方向及角速率);
  • 等待(0.500, 无视条件);
  • 清除状态(事件玩家, 点燃);
  • 停止朝向(事件玩家);
  • 等待(0.200, 无视条件);
  • 停止按下按钮(事件玩家, 按钮(蹲下));
  • }
  • }
  • rule("男妈妈AI 转身")
  • 规则("男妈妈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);
  • 开始定向阈值(事件玩家, 方向(所选位置(事件玩家.ai_1), 所选位置(事件玩家)), 0.500, 至地图, 替换现有阈值, 方向和幅度);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)) * 矢量(1, 1, 1), 80 + 全局.ai_adjustPerst * 50, 至地图, 方向及角速率);
  • 等待(1.200, 无视条件);
  • 停止定向阈值(事件玩家);
  • 停止朝向(事件玩家);
  • 等待(0.300, 无视条件);
  • }
  • }
  • rule("兽之巨人AI")
  • 规则("兽之巨人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);
  • If(死亡(事件玩家.ai_1) || 相距距离(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)) > 60 || 实体存在(事件玩家.ai_1) == 假);
  • 事件玩家.ai_1 = 首个(范围内玩家(眼睛位置(事件玩家), 60, 队伍1, 关闭));
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 40 + 40 * 全局.ai_adjustPerst, 至地图, 方向及角速率);
  • 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);
  • If(范围内玩家(眼睛位置(事件玩家), 9, 队伍1, 关闭) != 空数组 && 技能冷却时间(事件玩家, 按钮(技能1)) == 0);
  • 调用子程序(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);
  • If(对任意为”真“(所有存活玩家(队伍1), 已重生(当前数组元素) && 相距距离(眼睛位置(当前数组元素), 地图矢量(矢量(0, 事件玩家.bodysize, 0), 事件玩家, 旋转并转换) + 面朝方向(事件玩家) * 事件玩家.bodysize)
  • < 事件玩家.bodysize * 0.700));
  • 调用子程序(Aipunch);
  • 等待(0.500, 无视条件);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 40 + 40 * 全局.ai_adjustPerst, 至地图, 方向及角速率);
  • Else If(对任意为”真“(所有存活玩家(队伍1), 相距距离(眼睛位置(事件玩家), 眼睛位置(当前数组元素)) < 60 && 已重生(事件玩家) && 在视野内(事件玩家, 眼睛位置(当前数组元素), 45)) == 真);
  • 开始规则(aiMonkey_stoneAttack, 无动作);
  • 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);
  • 等待(0.250, 无视条件);
  • 循环;
  • }
  • }
  • rule("兽之巨人AI 跑路")
  • 规则("兽之巨人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);
  • 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);
  • 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);
  • 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;
  • If(事件玩家.life > 1);
  • 设置移动速度(事件玩家, 200);
  • 停止朝向(事件玩家);
  • 开始按下按钮(事件玩家, 按钮(蹲下));
  • 设置跳跃垂直速度(事件玩家, 500);
  • 设置朝向(事件玩家, 与此角度的相对方向(水平朝向角度(事件玩家), -45), 至地图);
  • 设置状态(事件玩家, 无, 点燃, 5);
  • If(全局.Language == 0);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("{0}溜了溜了", 英雄图标字符串(英雄(温斯顿))));
  • Else If(全局.Language == 1);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("{0}byebye~", 英雄图标字符串(英雄(温斯顿))));
  • End;
  • 按下按键(事件玩家, 按钮(技能1));
  • 等待(0.100, 无视条件);
  • 等待直到 (在地面上(事件玩家), 99999);
  • 清除状态(事件玩家, 点燃);
  • 等待(0.700, 无视条件);
  • 停止按下按钮(事件玩家, 按钮(蹲下));
  • 设置移动速度(事件玩家, 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][7]);
  • Else;
  • 设置终极技能充能(事件玩家, 100);
  • If(全局.Language == 0);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("{0}这就是为了活下去的…我的挣扎!", 英雄图标字符串(英雄(温斯顿))));
  • Else If(全局.Language == 1);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("{0}I won't want to die!", 英雄图标字符串(英雄(温斯顿))));
  • End;
  • 设置状态(事件玩家, 无, 点燃, 20);
  • 等待(1.500 - 0.750 * 全局.ai_adjustPerst, 无视条件);
  • 事件玩家.ai_2 = 0;
  • 持续追踪玩家变量(事件玩家, ai_2, 360, 1.500, 无);
  • 开始朝向(事件玩家, 矢量(1, 0, 0), 事件玩家.ai_2, 至玩家, 方向及角速率);
  • 等待(0.500, 无视条件);
  • 开始规则(aiMonkey_stoneAttack, 重新开始规则);
  • 按下按键(事件玩家, 按钮(终极技能));
  • 等待(1, 无视条件);
  • 开始按下按钮(事件玩家, 按钮(主要攻击模式));
  • 等待直到 (正在使用终极技能(事件玩家) == 假, 9999);
  • 停止按下按钮(事件玩家, 按钮(主要攻击模式));
  • 清除状态(事件玩家, 点燃);
  • 持续追踪玩家变量(事件玩家, ai_2, 0, 1, 终点及持续时间);
  • 等待(1, 无视条件);
  • 停止朝向(事件玩家);
  • 等待(3, 无视条件);
  • End;
  • 事件玩家.ai_1 = 0;
  • }
  • }
  • rule("兽之巨人AI 丢石头")
  • 规则("兽之巨人AI 丢石头")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • 子程序;
  • aiMonkey_stoneAttack;
  • }
  • actions
  • 动作
  • {
  • 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)));
  • 根据条件跳过(实体存在(选择英雄的玩家(英雄(安娜), 队伍2)) == 真, 5);
  • 生成机器人(英雄(安娜), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • If(全局.Language == 0);
  • 开始为机器人强制设置名称(选择英雄的玩家(英雄(安娜), 队伍2), 自定义字符串("碎石"));
  • Else If(全局.Language == 1);
  • 开始为机器人强制设置名称(选择英雄的玩家(英雄(安娜), 队伍2), 自定义字符串("Stone"));
  • End;
  • 设置不可见(选择英雄的玩家(英雄(安娜), 队伍2), 全部);
  • 设置状态(选择英雄的玩家(英雄(安娜), 队伍2), 无, 消散, 9999);
  • 设置状态(事件玩家, 无, 点燃, 2 + 全局.ai_adjustPerst * 0.700);
  • 等待(0.800, 无视条件);
  • 开始强制设置玩家位置(选择英雄的玩家(英雄(安娜), 队伍2), 地图矢量(矢量(2, 6, 8), 事件玩家, 旋转并转换), 真);
  • 交流(事件玩家, 问候);
  • While(具有状态(事件玩家, 点燃) == 真);
  • 设置朝向(选择英雄的玩家(英雄(安娜), 队伍2), 与此角度的相对方向(水平朝向角度(事件玩家) + 随机实数(-30, 30), 垂直朝向角度(事件玩家) + 随机实数(-30, 10)), 至地图);
  • 按下按键(选择英雄的玩家(英雄(安娜), 队伍2), 按钮(技能2));
  • 禁用 等待(0.016, 无视条件);
  • 设置技能冷却(选择英雄的玩家(英雄(安娜), 队伍2), 按钮(技能2), 0);
  • 取消主要动作(选择英雄的玩家(英雄(安娜), 队伍2));
  • 等待(0.016, 无视条件);
  • End;
  • 等待(3 - 1.200 * 全局.ai_adjustPerst, 无视条件);
  • 根据条件跳过(正在使用终极技能(事件玩家) == 真, 1);
  • 移除机器人(队伍2, 栏位(选择英雄的玩家(英雄(安娜), 队伍2)));
  • }
  • }
  • rule("凯巨AI")
  • 规则("凯巨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);
  • If(死亡(事件玩家.ai_1) || Y方向分量(所选位置(事件玩家.ai_1)) > 30 || 实体存在(事件玩家.ai_1) == 假);
  • 停止朝向(事件玩家);
  • 停止定向阈值(事件玩家);
  • 事件玩家.ai_1 = 首个(已过滤的数组(范围内玩家(所选位置(事件玩家), 50, 队伍1, 关闭), Y方向分量(所选位置(当前数组元素)) < 30));
  • 根据条件跳过(事件玩家.ai_1 == 0, 2);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 20 + 全局.ai_adjustPerst * 15, 至地图, 方向及角速率);
  • 开始定向阈值(事件玩家, 方向(所选位置(事件玩家), 所选位置(事件玩家.ai_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), 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);
  • If(对任意为”真“(所有存活玩家(队伍1), 已重生(当前数组元素) && 相距距离(眼睛位置(当前数组元素), 地图矢量(矢量(0, 事件玩家.bodysize, 0), 事件玩家, 旋转并转换) + 面朝方向(事件玩家) * 事件玩家.bodysize)
  • < 事件玩家.bodysize * 0.800));
  • 调用子程序(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);
  • If(对任意为”真“(所有存活玩家(队伍1), 已重生(当前数组元素) && 相距距离(眼睛位置(当前数组元素), 地图矢量(矢量(0, 事件玩家.bodysize, 0), 事件玩家, 旋转并转换) + 面朝方向(事件玩家) * 事件玩家.bodysize)
  • < 事件玩家.bodysize * 1.200));
  • 调用子程序(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);
  • If(在视野内(事件玩家, 眼睛位置(事件玩家.ai_1), 40) && 相距距离(所选位置(事件玩家) * 矢量(1, 0, 1), 眼睛位置(事件玩家.ai_1) * 矢量(1, 0, 1)) > 15);
  • 调用子程序(aiDaChui_rushAttack);
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • 等待(0.250, 无视条件);
  • 循环;
  • }
  • }
  • rule("铠之巨人AI 正常攻击")
  • 规则("铠之巨人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);
  • 开始限制阈值(事件玩家, 0, 0, 0, 0, 0, 0);
  • 设置状态(事件玩家, 无, 点燃, 3);
  • 等待(1.500, 无视条件);
  • 停止朝向(事件玩家);
  • 按下按键(事件玩家, 按钮(主要攻击模式));
  • 等待(0.100, 无视条件);
  • 等待直到 (正在使用主要武器(事件玩家) == 假, 99999);
  • 清除状态(事件玩家, 点燃);
  • 等待(0.800, 无视条件);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 40, 至地图, 方向及角速率);
  • 停止限制阈值(事件玩家);
  • }
  • }
  • rule("铠之巨人AI 3连正常攻击")
  • 规则("铠之巨人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 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);
  • 设置状态(事件玩家, 无, 点燃, 9999);
  • 等待(2, 无视条件);
  • 开始按下按钮(事件玩家, 按钮(主要攻击模式));
  • 等待(4, 无视条件);
  • 停止按下按钮(事件玩家, 按钮(主要攻击模式));
  • 等待直到 (正在使用主要武器(事件玩家) == 假, 99999);
  • 清除状态(事件玩家, 点燃);
  • 开始限制阈值(事件玩家, 0, 0, 0, 0, 0, 0);
  • 停止朝向(事件玩家);
  • 等待(1.500, 无视条件);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 40, 至地图, 方向及角速率);
  • 停止限制阈值(事件玩家);
  • }
  • }
  • rule("铠之巨人AI 冲锋攻击")
  • 规则("铠之巨人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;
  • 设置状态(事件玩家, 无, 点燃, 99);
  • 等待(1, 无视条件);
  • 按下按键(事件玩家, 按钮(技能1));
  • 等待(0.100, 无视条件);
  • While(正在使用技能 1(事件玩家) == 真);
  • 伤害(范围内玩家(地图矢量(矢量(0, 6, 4), 事件玩家, 旋转并转换), 8, 队伍1, 关闭), 事件玩家, 5);
  • 等待(0.100, 无视条件);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • 清除状态(事件玩家, 点燃);
  • 等待(0.500, 无视条件);
  • }
  • }
  • 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);
  • 持续 - 每名玩家;
  • 队伍2;
  • 全部;
  • }
  • }
  • 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);
  • 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);
  • 根据条件跳过(数组包含(数组(英雄(西格玛), 英雄(狂鼠), 英雄(安娜)), 所用英雄(事件玩家)) == 真, 1);
  • 大字体信息(所有玩家(所有队伍), 自定义字符串("{0}{1} 登场/Appear!", 英雄图标字符串(所用英雄(事件玩家)), 全局.ar_giant[数组值的索引(全局.ar_hero, 所用英雄(事件玩家))][4]));
  • If(所用英雄(事件玩家) == 英雄(破坏球));
  • 开始按下按钮(事件玩家, 按钮(主要攻击模式));
  • 等待(2, 无视条件);
  • 按下按键(事件玩家, 按钮(蹲下));
  • Else If(所用英雄(事件玩家) == 英雄(士兵:76));
  • Else If(所用英雄(事件玩家) == 英雄(温斯顿));
  • Else If(所用英雄(事件玩家) == 英雄(莱因哈特));
  • Else If(所用英雄(事件玩家) == 英雄(查莉娅));
  • 开始强制设置玩家位置(事件玩家, 所选位置(事件玩家) * 矢量(1, 0, 1) + 矢量(0, 150, 0), 真);
  • 等待(5, 无视条件);
  • 停止强制设置玩家位置(事件玩家);
  • 设置状态(事件玩家, 无, 击倒, 9999);
  • 等待直到 (在地面上(事件玩家), 99999);
  • 伤害(已过滤的数组(范围内玩家(所选位置(事件玩家), 50, 所有队伍, 关闭), 当前数组元素 != 事件玩家), 事件玩家, 1000);
  • 播放效果(所有玩家(所有队伍), 环状爆炸, 颜色(黄色), 所选位置(事件玩家), 100);
  • 播放效果(所有玩家(所有队伍), 有益爆炸, 颜色(黄色), 所选位置(事件玩家), 50);
  • 播放效果(所有玩家(所有队伍), D.Va自毁爆炸效果, 颜色(白色), 所选位置(事件玩家), 255);
  • End;
  • 等待直到 (在地面上(事件玩家), 99999);
  • 清除状态(事件玩家, 击倒);
  • 等待(1, 无视条件);
  • If(数组包含(数组(英雄(西格玛), 英雄(破坏球)), 所用英雄(事件玩家)) == 真);
  • 开始规则(Giant_Ai_normal, 无动作);
  • Else If(所用英雄(事件玩家) == 英雄(士兵:76));
  • 开始规则(Giant_Ai_solder76, 无动作);
  • Else If(所用英雄(事件玩家) == 英雄(温斯顿));
  • 开始规则(Giant_Ai_Monkey, 无动作);
  • Else If(所用英雄(事件玩家) == 英雄(莱因哈特));
  • 开始规则(Giant_Ai_DaChui, 无动作);
  • Else If(所用英雄(事件玩家) == 英雄(查莉娅));
  • 开始规则(Giant_Ai_Big, 无动作);
  • Else If(所用英雄(事件玩家) == 英雄(狂鼠));
  • 开始规则(Giant_Ai_Special, 无动作);
  • 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 水溅跃!")
  • 规则("超大巨AI")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • aiSpecial_attack;
  • 子程序;
  • Giant_Ai_Big;
  • }
  • 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;
  • If(死亡(事件玩家.ai_1) || 相距距离(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)) > 80 || 实体存在(事件玩家.ai_1) == 假);
  • 停止朝向(事件玩家);
  • 停止限制阈值(事件玩家);
  • 事件玩家.ai_1 = 首个(范围内玩家(眼睛位置(事件玩家), 80, 队伍1, 关闭));
  • 根据条件跳过(事件玩家.ai_1 == 0, 3);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 30 + 全局.ai_adjustPerst * 20, 至地图, 方向及角速率);
  • 开始限制阈值(事件玩家, 1, 1, 0, 1, 0, 1);
  • 开始规则(aiBig_walkingAttack, 重新开始规则);
  • 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;
  • If(对任意为”真“(所有存活玩家(队伍1), 已重生(当前数组元素) && 相距距离(眼睛位置(当前数组元素), 地图矢量(矢量(0, 事件玩家.bodysize, 0), 事件玩家, 旋转并转换) + 面朝方向(事件玩家) * 事件玩家.bodysize)
  • < 事件玩家.bodysize * 0.700));
  • 开始规则(aiBig_punchAttack, 无动作);
  • Else If(已过滤的数组(范围内玩家(地图矢量(矢量(0, 30, 0), 事件玩家, 旋转并转换), 25, 队伍1, 关闭), 存活(当前数组元素) && 已重生(当前数组元素)) != 空数组);
  • 调用子程序(aiBig_SteamAttack);
  • End;
  • End;
  • Wait Until(Has Status(Event Player, Frozen) == False, 99999);
  • Wait(0.250, Ignore Condition);
  • Loop;
  • 等待(0.250, 无视条件);
  • 循环;
  • }
  • }
  • rule("鄂之巨人AI 飞行")
  • 规则("超大巨AI 冲拳攻击")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • aiJaw_Fly;
  • 子程序;
  • aiBig_punchAttack;
  • }
  • 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 If(Hero Of(Event Player) == Hero(Echo));
  • 停止朝向(事件玩家);
  • 停止限制阈值(事件玩家);
  • 设置状态(事件玩家, 无, 点燃, 5);
  • 等待(2, 无视条件);
  • 按下按键(事件玩家, 按钮(近身攻击));
  • 等待直到 (正在近战攻击(事件玩家) == 假, 99999);
  • 根据条件中止(事件玩家.ai_3 != 空数组);
  • 清除状态(事件玩家, 点燃);
  • 等待(1, 无视条件);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 50, 至地图, 方向及角速率);
  • 开始限制阈值(事件玩家, 1, 1, 0, 1, 0, 1);
  • 开始规则(aiBig_walkingAttack, 重新开始规则);
  • }
  • }
  • rule("鄂之巨人AI 俯冲攻击!")
  • 规则("超大巨AI 蒸汽攻击")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • aiJaw_Attack;
  • 子程序;
  • aiBig_SteamAttack;
  • }
  • 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 Until(Has Status(Event Player, Frozen), 2 - Global.ai_adjustPerst);
  • Stop Forcing Player Position(Event Player);
  • 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.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);
  • 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));
  • 停止朝向(事件玩家);
  • 停止限制阈值(事件玩家);
  • 设置状态(事件玩家, 无, 点燃, 9999);
  • 等待(0.500, 无视条件);
  • 按下按键(事件玩家, 按钮(技能1));
  • 设置状态(事件玩家, 无, 无敌, 9999);
  • 等待(0.100, 无视条件);
  • 等待直到 (正在使用技能 1(事件玩家) == 假, 99999);
  • 事件玩家.ai_2 = 总计消耗时间;
  • 创建效果(所有玩家(所有队伍), “回声”复制效果, 颜色(队伍2), 事件玩家, 1, 可见,位置和半径);
  • 事件玩家.ai_3[0] = 最后创建的实体;
  • While(存活(事件玩家) && 总计消耗时间 < 事件玩家.ai_2 + 4);
  • 按下按键(事件玩家, 按钮(技能1));
  • 播放效果(所有玩家(所有队伍), 有益爆炸, 颜色(黄色), 地图矢量(矢量(0, 20, 0), 事件玩家, 旋转并转换), 35);
  • 等待(0.100, 无视条件);
  • 播放效果(所有玩家(所有队伍), 有害爆炸, 颜色(红色), 地图矢量(矢量(0, 20, 0), 事件玩家, 旋转并转换), 25);
  • 等待(0.100, 无视条件);
  • 伤害(范围内玩家(地图矢量(矢量(0, 20, 0), 事件玩家, 旋转并转换), 25, 队伍1, 关闭), 事件玩家, 5);
  • End;
  • 清除状态(事件玩家, 无敌);
  • 消除效果(事件玩家.ai_3[0]);
  • 事件玩家.ai_3[0] = 空数组;
  • 清除状态(事件玩家, 点燃);
  • 等待(4 - 全局.ai_adjustPerst * 1, 无视条件);
  • 开始朝向(事件玩家, 方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)), 50, 至地图, 方向及角速率);
  • 开始限制阈值(事件玩家, 1, 1, 0, 1, 0, 1);
  • 开始规则(aiBig_walkingAttack, 重新开始规则);
  • }
  • }
  • 规则("超大巨AI 走路攻击")
  • {
  • 事件
  • {
  • 子程序;
  • aiBig_walkingAttack;
  • }
  • 动作
  • {
  • 等待(0.016, 无视条件);
  • 等待直到 (阈值(事件玩家) == 矢量(0, 0, 0), 12);
  • 根据条件中止(阈值(事件玩家) == 矢量(0, 0, 0));
  • 播放效果(所有玩家(所有队伍), 环状爆炸, 颜色(白色), 所选位置(事件玩家) + 矢量(0, 0.300, 0), 20);
  • 播放效果(所有玩家(所有队伍), 爆炸声音, 颜色(白色), 所选位置(事件玩家), 150);
  • 伤害(范围内玩家(所选位置(事件玩家) - 矢量(0, 5, 0), 15, 队伍1, 关闭), 事件玩家, 100);
  • While(阈值(事件玩家) != 矢量(0, 0, 0));
  • 等待直到 (阈值(事件玩家) == 矢量(0, 0, 0), 17);
  • 根据条件中止(阈值(事件玩家) == 矢量(0, 0, 0));
  • 播放效果(所有玩家(所有队伍), 环状爆炸, 颜色(白色), 所选位置(事件玩家) + 矢量(0, 0.300, 0), 20);
  • 播放效果(所有玩家(所有队伍), 爆炸声音, 颜色(白色), 所选位置(事件玩家), 150);
  • 伤害(范围内玩家(所选位置(事件玩家) - 矢量(0, 5, 0), 15, 队伍1, 关闭), 事件玩家, 100);
  • 等待直到 (阈值(事件玩家) == 矢量(0, 0, 0), 14);
  • 根据条件中止(阈值(事件玩家) == 矢量(0, 0, 0));
  • 播放效果(所有玩家(所有队伍), 环状爆炸, 颜色(白色), 所选位置(事件玩家) + 矢量(0, 0.300, 0), 20);
  • 播放效果(所有玩家(所有队伍), 爆炸声音, 颜色(白色), 所选位置(事件玩家), 150);
  • 伤害(范围内玩家(所选位置(事件玩家) - 矢量(0, 5, 0), 15, 队伍1, 关闭), 事件玩家, 100);
  • End;
  • }
  • }
  • rule("战锤巨人AI")
  • 规则("奇行种AI")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • Giant_Ai_Hammer;
  • 子程序;
  • Giant_Ai_Special;
  • }
  • 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 * 15, To World, Direction and Turn Rate);
  • Start Forcing Throttle(Event Player, 1, 1, 0, 1, 0, 1);
  • 事件玩家.ai_1 = 首个(范围内玩家(眼睛位置(事件玩家), 60, 队伍1, 关闭));
  • If(事件玩家.ai_1 == 0);
  • 等待(2, 无视条件);
  • 开始限制阈值(事件玩家, 1, 1, 0, 1, 0, 1);
  • 开始朝向(事件玩家, 矢量(单次赋值(数组随机取值(数组(-1, 1))), 0, 0), 单次赋值(随机实数(50, 300)), 至玩家, 方向及角速率);
  • 等待(1.500, 无视条件);
  • 停止限制阈值(事件玩家);
  • 停止朝向(事件玩家);
  • 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;
  • 调用子程序(aiSpecial_Chasing);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • 等待(0.250, 无视条件);
  • 循环;
  • }
  • }
  • rule("战锤巨人AI 远距离攻击")
  • 规则("奇行种AI 追击")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • aiHammer_attack;
  • 子程序;
  • aiSpecial_Chasing;
  • }
  • actions
  • 动作
  • {
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Set Status(Event Player, Null, Burning, 10);
  • Wait Until(Has Status(Event Player, Frozen), 3 - Global.ai_adjustPerst);
  • If(Has Status(Event Player, Frozen) == True);
  • Abort;
  • 停止朝向(事件玩家);
  • 停止限制阈值(事件玩家);
  • 根据条件中止(相距距离(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)) > 60);
  • 开始限制阈值(事件玩家, 随机实数(0.800, 1), 1, 0, 1, 0, 1);
  • 开始朝向(事件玩家, 与此角度的相对方向(随机整数(-60, 60) + 与此方向的水平角度(方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1))), 与此方向的垂直角度(方向(眼睛位置(事件玩家), 眼睛位置(事件玩家.ai_1)))), 随机整数(
  • 50, 150), 至地图, 无);
  • 开始按下按钮(事件玩家, 数组(按钮(跳跃), 按钮(蹲下))[随机整数(0, 4)]);
  • 等待(0.750, 无视条件);
  • 停止按下按钮(事件玩家, 按钮(蹲下));
  • 停止按下按钮(事件玩家, 按钮(跳跃));
  • If(已过滤的数组(所有存活玩家(队伍1), 已重生(当前数组元素) && 相距距离(当前数组元素, 所选位置(事件玩家)) < 事件玩家.bodysize * 2) != 空数组);
  • 调用子程序(aiSpecial_attack);
  • 事件玩家.ai_1 = 0;
  • End;
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.200, Ignore Condition);
  • Clear Status(Event Player, Burning);
  • Wait(1, Ignore Condition);
  • 根据条件循环(实体存在(事件玩家.ai_1) && 存活(事件玩家.ai_1));
  • 事件玩家.ai_1 = 0;
  • }
  • }
  • rule("战锤巨人AI 盾击")
  • 规则("奇行种AI 水溅跃!")
  • {
  • event
  • 事件
  • {
  • Subroutine;
  • aiHammer_ShieldAttack;
  • 子程序;
  • aiSpecial_attack;
  • }
  • 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 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));
  • 开始按下按钮(事件玩家, 按钮(蹲下));
  • 设置状态(事件玩家, 无, 点燃, 999);
  • 等待(1, 无视条件);
  • 停止限制阈值(事件玩家);
  • 停止朝向(事件玩家);
  • 停止按下按钮(事件玩家, 按钮(蹲下));
  • 开始朝向(事件玩家, 矢量(1, 0, 0), 500, 至玩家, 方向及角速率);
  • 设置状态(事件玩家, 无, 击倒, 随机实数(1.500, 5));
  • While(具有状态(事件玩家, 击倒) == 真);
  • 施加推力(事件玩家, 上, 18, 至玩家, 取消相反运动);
  • 施加推力(事件玩家, 与此角度的相对方向(与此方向的水平角度(方向(所选位置(事件玩家), 所选位置(距离最近的玩家(所选位置(事件玩家), 队伍1)))), 0), 10, 至地图, 取消相反运动);
  • 等待(0.100, 无视条件);
  • 等待直到 (在地面上(事件玩家), 99999);
  • 伤害(已过滤的数组(范围内玩家(所选位置(事件玩家), 事件玩家.bodysize * 2, 队伍1, 关闭), 当前数组元素 != 事件玩家), 事件玩家, 50);
  • 播放效果(所有玩家(所有队伍), 环状爆炸, 颜色(黄色), 所选位置(事件玩家), 事件玩家.bodysize * 2);
  • 播放效果(所有玩家(所有队伍), 有益爆炸, 颜色(黄色), 所选位置(事件玩家), 事件玩家.bodysize * 3);
  • End;
  • 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);
  • 停止朝向(事件玩家);
  • 清除状态(事件玩家, 点燃);
  • 设置状态(事件玩家, 无, 击晕, 1);
  • 等待(2.800, 无视条件);
  • }
  • }
  • rule("战锤巨人Ai 水晶化")
  • 规则("————Robot&Ai————")
  • {
  • event
  • {
  • Subroutine;
  • aiHammer_Crystallize;
  • }
  • actions
  • 事件
  • {
  • Destroy Effect(Event Player.ai_2);
  • Set Status(Event Player, Null, Invincible, 9999);
  • 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))));
  • Else If(Global.Language == 1);
  • 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(6 - Global.ai_adjustPerst * 2, Ignore Condition);
  • Abort If(Hero Of(Event Player) != Hero(Brigitte));
  • Loop;
  • 持续 - 全局;
  • }
  • }
  • rule("战锤巨人Ai 被攻击水晶化")
  • 规则("最终boss战")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • Brigitte;
  • }
  • actions
  • 事件
  • {
  • Start Rule(aiHammer_Crystallize, Do Nothing);
  • 持续 - 全局;
  • }
  • }
  • rule("车力巨人Ai")
  • {
  • event
  • 条件
  • {
  • Subroutine;
  • Giant_Ai_Cart;
  • 团队得分(队伍1) >= 50;
  • }
  • 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;
  • While(数量(已过滤的数组(所有玩家(队伍2), 所用英雄(当前数组元素) != 英雄(西格玛))) > 0);
  • 移除机器人(队伍2, 栏位(首个(已过滤的数组(所有玩家(队伍2), 所用英雄(当前数组元素) != 英雄(西格玛)))));
  • 等待(0.016, 无视条件);
  • End;
  • While(数量(所有玩家(队伍2)) > 4);
  • 移除机器人(队伍2, 栏位(首个(已过滤的数组(所有玩家(队伍2), 所用英雄(当前数组元素) == 英雄(西格玛)))));
  • 等待(0.016, 无视条件);
  • End;
  • If(全局.Language == 0);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("警告!五大巨人来袭"));
  • 大字体信息(所有玩家(所有队伍), 自定义字符串("警告!五大巨人来袭"));
  • Else If(全局.Language == 1);
  • 小字体信息(所有玩家(所有队伍), 自定义字符串("Warning!Boss Coming"));
  • 大字体信息(所有玩家(所有队伍), 自定义字符串("Warning!Boss Coming"));
  • End;
  • 等待(3, 无视条件);
  • 生成机器人(英雄(士兵:76), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 等待(2, 无视条件);
  • 生成机器人(英雄(查莉娅), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 等待(2, 无视条件);
  • 生成机器人(英雄(温斯顿), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 等待(2, 无视条件);
  • 生成机器人(英雄(破坏球), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 等待(2, 无视条件);
  • 生成机器人(英雄(莱因哈特), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 等待(3, 无视条件);
  • While(数量(所有玩家(队伍2)) < 9);
  • 生成机器人(英雄(西格玛), 队伍2, -1, 矢量(0, 0, 0), 矢量(0, 0, 0));
  • 等待(5, 无视条件);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop;
  • 等待(1, 无视条件);
  • If(全局.Language == 0);
  • 创建HUD文本(所有玩家(所有队伍), 自定义字符串("┏ ━━━━━━━━━━━━━━━━━ ┓\r\n┃击败五大巨人/达到80分以取得最终胜利┃\r\n┗ ━━━━━━━━━━━━━━━━━ ┛"), 无, 无, 顶部, 10, 颜色(红色), 颜色(
  • 白色), 颜色(白色), 可见和字符串, 默认可见度);
  • Else If(全局.Language == 1);
  • 创建HUD文本(所有玩家(所有队伍), 自定义字符串("┏ ━━━━━━━━━━━━━━━━━ ┓\r\n┃Kill All Bosses/Get 80pt to win┃\r\n┗ ━━━━━━━━━━━━━━━━━ ┛"), 无, 无, 顶部, 10,
  • 颜色(红色), 颜色(白色), 颜色(白色), 可见和字符串, 默认可见度);
  • End;
  • 等待直到 (数量(已过滤的数组(所有玩家(队伍2), 所用英雄(当前数组元素) != 英雄(安娜) && 所用英雄(当前数组元素) != 英雄(西格玛))) == 0, 99999);
  • 宣告队伍胜利(队伍1);
  • }
  • }
  • 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));
  • 全局.Language = 地图工坊设置组合(自定义字符串("全局"), 自定义字符串("语言/Language"), 0, 数组(自定义字符串("中文"), 自定义字符串("English")), 0);
  • 全局.Difficulty = 地图工坊设置组合(自定义字符串("全局"), 自定义字符串("难度/Difficulty"), 0, 数组(自定义字符串("智障Ai/Stupid Ai"), 自定义字符串("新手训练/Easy"), 自定义字符串(
  • "正常难度/Normal"), 自定义字符串("困难模式/Hard"), 自定义字符串("人间地狱/Hell")), 0);
  • 全局.ar_Difficult = 数组(自定义字符串("智障Ai/Stupid Ai"), 自定义字符串("新手训练/Easy"), 自定义字符串("正常难度/Normal"), 自定义字符串("困难模式/Hard"), 自定义字符串(
  • "人间地狱/Hell"));
  • 全局.ai_adjustPerst = 数组(0, 0.500, 1, 1.500, 2)[全局.Difficulty];
  • 全局.Skill_name = 空数组;
  • If(全局.Language == 0);
  • 全局.Skill_name[0] = 数组(技能图标字符串(英雄(源氏), 按钮(终极技能)), 自定义字符串("螺旋斩"));
  • 全局.Skill_name[1] = 数组(英雄图标字符串(英雄(末日铁拳)), 自定义字符串("巨人化[100%]"));
  • 全局.Skill_name[2] = 数组(技能图标字符串(英雄(D.Va), 按钮(技能2)), 自定义字符串("雷枪[40%]"));
  • Else If(全局.Language == 1);
  • 全局.Skill_name[0] = 数组(技能图标字符串(英雄(源氏), 按钮(终极技能)), 自定义字符串("Spiral Slash"));
  • 全局.Skill_name[1] = 数组(英雄图标字符串(英雄(末日铁拳)), 自定义字符串("Giantization[100%]"));
  • 全局.Skill_name[2] = 数组(技能图标字符串(英雄(D.Va), 按钮(技能2)), 自定义字符串("Thunder Spear[40%]"));
  • End;
  • 创建HUD文本(所有玩家(队伍1), 自定义字符串("难度/Difficulty 【{0}】", 全局.ar_Difficult[全局.Difficulty]), 自定义字符串(
  • "Change Language/Difficulty in 【WorkshopSetting】"), 自定义字符串("【地图工坊设置】可修改难度与语言"), 顶部, 0, 颜色(黄色), 颜色(白色), 颜色(白色), 可见和字符串, 默认可见度);
  • 设置目标点描述(所有玩家(所有队伍), 自定义字符串("代码/Code: ZP1WW 作者/Coder:LonelyD.D"), 可见和字符串);
  • 创建HUD文本(所有玩家(队伍1), 自定义字符串("长按/Press【{0}】3s on/off", 输入绑定字符串(按钮(装填))), 无, 无, 右边, -2, 颜色(灰色), 颜色(白色), 颜色(白色), 可见和字符串, 默认可见度);
  • If(全局.Language == 0);
  • 创建HUD文本(已过滤的数组(所有玩家(队伍1), 当前数组元素.rule == 0), 自定义字符串("{0}\r\n{1}\r\n{2}", 自定义字符串("【长按Q/E】 左/右抓勾\r\n【{2}/跳跃】 喷射气体(加速)", 无, 无,
  • 输入绑定字符串(按钮(技能1))), 自定义字符串("【左键】点/长按: 普通/蓄力攻击\r\n【{1}】 特殊技能\r\n【{蹲下】 地面闪避", 无, 输入绑定字符串(按钮(辅助攻击模式))), 自定义字符串(
  • "【{0}】切换镜头\r\n【换弹】收绳\r\n连按两下 【喷气】 暴气\r\n(ps 方向键 在空中机动时为无效操作)\r\n使用钩索勾球/柱 砍下巨人的后颈吧!\r\n有bug与意见请到扣群288478465 @逗逗", 输入绑定字符串(按钮(
  • 互动)))), 无, 无, 右边, -1, 颜色(白色), 颜色(白色), 颜色(白色), 可见和字符串, 默认可见度);
  • Else If(全局.Language == 1);
  • 创建HUD文本(已过滤的数组(所有玩家(队伍1), 当前数组元素.rule == 0), 自定义字符串("{0}\r\n{1}\r\n{2}", 自定义字符串("【Q/E】 L/R string\r\n【{2}/Jump】 Gas(speedUP)", 无,
  • 无, 输入绑定字符串(按钮(技能1))), 自定义字符串("【LeftClick】 attack\r\n【{1}】 skill\r\n【sit】 Dodge ", 无, 输入绑定字符串(按钮(辅助攻击模式))), 自定义字符串(
  • "【{0}】Camera\r\n【reLoad】shrink String\r\nDouble 【WASD】EX_Propulsion \r\nAttack Titan's Nape To kill them!\r\nAny bug 2 [email protected]",
  • 输入绑定字符串(按钮(互动)))), 无, 无, 右边, -1, 颜色(白色), 颜色(白色), 颜色(白色), 可见和字符串, 默认可见度);
  • End;
  • }
  • }
  • rule("————Robot&Ai————")
  • 规则("碰撞")
  • {
  • event
  • 事件
  • {
  • Ongoing - Global;
  • 持续 - 每名玩家;
  • 双方;
  • 全部;
  • }
  • }
  • rule("最后一击判定")
  • {
  • event
  • 条件
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • 相距距离(所选位置(事件玩家), 矢量(X方向分量(全局.A[事件玩家.closest_tree]), 较小(50, Y方向分量(所选位置(事件玩家))), Z方向分量(全局.A[事件玩家.closest_tree])))
  • < 全局.B[事件玩家.closest_tree];
  • 已重生(事件玩家) == 真;
  • 存活(事件玩家) == 真;
  • }
  • 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;
  • 施加推力(事件玩家, 方向(矢量(X方向分量(全局.A[事件玩家.closest_tree]), 较小(50, Y方向分量(所选位置(事件玩家))), Z方向分量(全局.A[事件玩家.closest_tree])), 所选位置(事件玩家)), 1, 至地图,
  • 取消相反运动);
  • 等待(0.050, 无视条件);
  • 如条件为”真“则循环;
  • }
  • }
  • 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));
  • 事件玩家.closest_tree = 数组值的索引(全局.A, 首个(已排序的数组(已过滤的数组(已过滤的数组(全局.A, Y方向分量(当前数组元素) == 0), 相距距离(当前数组元素, 所选位置(事件玩家) * 矢量(1, 0, 1)) < 30),
  • 相距距离(当前数组元素, 所选位置(事件玩家) * 矢量(1, 0, 1)))));
  • 等待(0.500, 无视条件);
  • 循环;
  • }
  • }
Join the Workshop.codes Discord