# 2D横版格斗

仅解析核心规则,不解析平衡等其他规则

# 规则1:限制玩家的移动方向

事件

  • 持续 - 每名玩家
  • 队伍 双方 全部

条件

  • 已重生(事件玩家) == 真

动作

  • 开始限制速度(事件玩家, 0, 1, 0, 1, 0, 0)

解析

  • 通过“开始限制速度”,让玩家只能向前和向后移动,不能左右移动

# 规则2:调整摄像头位置

事件

  • 持续 - 每名玩家
  • 队伍 双方 全部

条件

  • 存活(事件玩家) == 真
  • 在重生室中(事件玩家) == 假

动作

  • 开始镜头(事件玩家, 矢量(加(除(X方向分量(位置(事件玩家)), 2), -164.250), 加(除(Y方向分量(位置(事件玩家)), 4), 12), 200.600), 矢量(加(除(X方向分量(位置(事件玩家)), 2), -164.250), 加(除(Y方向分量(位置(事件玩家)), 4), 12), 180.600), 10)

解析

  • 眼睛位置的X,Y,Z坐标计算:
    • X:(英雄的位置 / 2) - 164.25
    • Y:(英雄的位置 / 4) + 12
    • Z:200.6
  • 望向位置的X,Y,Z坐标计算:
    • X:(英雄的位置 / 2) - 164.25
    • Y:(英雄的位置 / 4) + 12
    • 180.6
  • 这两个数是怎么得出来的?当然是在游戏里找出来的。没有什么特别的理由,只是这个角度比较舒服。不同地图数值不一样,你也可以自己找其他更舒服的数值

# 规则3:强制英雄Z坐标

事件

  • 持续 - 每名玩家
  • 队伍 双方 全部

条件

  • 绝对值(减(180.6, Z方向分量(位置(事件玩家)))) > 0.250
  • 存活(事件玩家) == 真
  • 已重生(事件玩家) == 真
  • 在重生室中(事件玩家) == 假

动作

  • 传送(事件玩家, 矢量(X方向分量(位置(事件玩家)), Y方向分量(位置(事件玩家)), 180.600))
  • 等待(0.250, 无视条件)
  • 如果条件为“真”则循环

解析

  • 上面我们已经设置了强制移动,为什么这里还要来一条?因为我们要考虑到一些位移技能,例如狂鼠的炸弹。
  • 这条规则便是每隔0.25秒,就检测英雄的Z坐标是否与180.6差别过大,如果过大,则强制移动回这个坐标
  • 180.6这个坐标是根据地图测量出的

# 规则4:强制英雄朝向

事件

  • 持续 - 每名玩家
  • 队伍 双方 全部

条件

  • 绝对值(Z方向分量(面朝方向(事件玩家)))) > 0.050
  • 存活(事件玩家) == 真
  • 已重生(事件玩家) == 真
  • 在重生室中(事件玩家) == 假

动作

  • 设置朝向(事件玩家, 乘(矢量(1, 1, 0), 面朝方向(事件玩家)), 至地图)
  • 等待(0.250, 无视条件)
  • 如果条件为“真”则循环

解析

  • 和上面类似,这也是为了防止意外的英雄镜头改变
  • 这条规则便是每隔0.25秒,就检测英雄面向的Z坐标是否与0差别过大(0是刚好垂直于X/Y平面),如果过大,则强制朝向这个坐标
  • 这里有一个取巧的地方:使用了矢量乘法,取得了(英雄面向X, 英雄面向Y, 0)这个矢量

# 规则5:重生传送

事件

  • 持续 - 每名玩家
  • 队伍 队伍1 全部

条件

  • 存活(事件玩家) == 真
  • 已重生(事件玩家) == 真
  • 在重生室中(事件玩家) == 真

动作

  • 传送(事件玩家, 矢量(加(-350.000, 随机实数(0, 5)), 11.800, 180.600))
  • 设置朝向(事件玩家, 矢量(1, 0, 0), 至地图)

解析

  • 传送英雄到相应位置
  • 设置英雄朝向