2000
接tp? 这不是为咱后面做准备嘛
execute store result entity @e[tag=marker,limit=1] Pos[0] double 0.001 run scoreboard players get @p[tag=hacker] xMarker
execute store result entity @e[tag=marker,limit=1] Pos[1] double 0.001 run scoreboard players get @p[tag=hacker] yMarker
execute store result entity @e[tag=marker,limit=1] Pos[2] double 0.001 run scoreboard players get @p[tag=hacker] zMarker
# 让hacker锁定marker
execute as @p[tag=hacker] at @s anchored eyes if entity @e[tag=target,sort=nearest,limit=1] run tp @s ~ ~ ~ facing entity @e[tag=marker,limit=1] eyes
复制代码
reload,然后使用/tag add @s hacker把自己变成神仙,弄几只动物,你就发现准心会锁着离你最近的target了。但现在这个辅助瞄准只适合即时命中且无重力的这类武器,可惜mc vanilla里并没有这种东西存在。远距离我们的辅助瞄准根本没用,因此我们做一些更改。
首先使其能够预判弹道下坠。原理:根据target与hacker之间的距离,改变marker的y坐标,达到玩家准心提高的效果。
- # 添加以下命令
- # 获取hacker的坐标,放大1000倍
- execute store result score @p[tag=hacker] xHacker run data get entity @p[tag=hacker] Pos[0] 1000
- execute store result score @p[tag=hacker] yHacker run data get entity @p[tag=hacker] Pos[1] 1000
- execute store result score @p[tag=hacker] zHacker run data get entity @p[tag=hacker] Pos[2] 1000
- # 计算target与hacker的水平距离(垂直距离呢?那抛物线太玄学了,我们不考虑。假设玩家和目标接近同一水平面。)
- # 计算原理:d=√[(x ^2-x^2)^2+(z^2-z^2)^2]
- # 下面是计算xDistance^2
- scoreboard players operation @p[tag=hacker] xDistance = @p[tag=hacker] xTarget
- scoreboard players operation @p[tag=hacker] xDistance -= @p[tag=hacker] xHacker
- scoreboard players operation @p[tag=hacker] xDistance *= @p[tag=hacker] xDistance
- # 下面计算zDistance^2
- scoreboard players operation @p[tag=hacker] zDistance = @p[tag=hacker] zTarget
- scoreboard players operation @p[tag=hacker] zDistance -= @p[tag=hacker] zHacker
- scoreboard players operation @p[tag=hacker] zDistance *= @p[tag=hacker] zDistance
- # 下面算出d
- scoreboard players operation @p[tag=hacker] d = @p[tag=hacker] xDistance
- scoreboard players operation @p[tag=hacker] d += @p[tag=hacker] zDistance
- # 开根号与今天的教程无关,所以spgoding_hacker:sqrt/calculate的
- # 内容就不放了,开根号部分大家可以看chyx dalao的讲解,很详细XD:www.bilibili.com/av17932394
- # 不知有没有不用开根号的方法?或许我做得太麻烦了,求指点~
- scoreboard players operation @p[tag=hacker] sqrtInput = @p[tag=hacker] d
- execute as @p[tag=hacker] run function spgoding_hacker:sqrt/calculate
- scoreboard players operation @p[tag=hacker] d = @p[tag=hacker] sqrtOutput
- # 根据d我们可以算出准心要抬高的距离
- # 根据测试,大约每20格,需要抬高准心1格,即
- # deltaY = d / 20 * 1 (这其实不很准确,你有更精确的数值/方法可以替换)
- # cXX 是玩家假名,其值在_init/init里已经设置为XX
- # 所以为什么是c200?我也不知道啊(摊手)瞎加零试出来的#run反正能用
- scoreboard players operation @p[tag=hacker] yDelta = @p[tag=hacker] d
- scoreboard players operation @p[tag=hacker] yDelta /= c200 value
- scoreboard players operation @p[tag=hacker] yDelta *= c1 value
- # 计算出marker的位置
- # x, z坐标不变,y坐标:
- scoreboard players operation @p[tag=hacker] yMarker = @p[tag=hacker] yTarget
- scoreboard players operation @p[tag=hacker] yMarker += @p[tag=hacker] deltaY
- # “改变marker位置”开始命令不变,不再赘述
复制代码
现在,我们的准心会根据hacker与target的位置而预