# 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), 至地图)
解析
- 传送英雄到相应位置
- 设置英雄朝向