本帖最后由 tineseack_bk 于 2020-2-9 22:21 编辑




  原本是 pca 在打算复刻 Robomaster,但是由于不可控因素坑暂时被搁置了(pca 出来挨打),就把目前写好的一个射击系统修改了一下作为一个前置发布。大家可以参考或者用于自己坑里的射击检测。



安装方法

  这里下载数据包(提取码: rc62),然后丢到存档的 datapack 文件夹中,进入后 /reload 即可。兼容多人。编写版本 1.15.2,但是理论上 1.13+ 版本都可以用。

  



食用方法

  子弹及速度

  本系统默认使用雪球作为子弹,发射方法是右键。射出后的雪球自动继承玩家序号(计分板名 number),可用于检测射出者。本系统中的雪球默认无重力(NoGravity:1b)以及 1.5x Motion,如果需要修改可以进入 data\bullet\functions\speed.mcfunction 修改 execute store 的倍率即可。例如目前默认是:

  1. 0.0000000015
复制代码
如果要修改成 1.2x Motion:

  1. 0.0000000012
复制代码
(这个只是粗略计算,如果 2x 或以上精度就会跟不上。而且 Motion 较高的话游戏里表现的也会很鬼畜。慎用。)


  目标检测及击中处理

  本系统默认目标具有 tag=player,并且以 hitbox 的底部也就是脚底作为判断目标。请注意,一般的生物会在被雪球击中之后变红,且雪球会碎掉,这种情况下是不会被本系统判为击中的(这种也可以直接检测生物受伤)。


  本系统默认给予了实体虚拟血量,记分板名称为 health。当目标被判击中后,health 分数将会 -1。如需增加对目标或者射出者的执行(比如给射出者加分)可以进入 data\detect\functions\hit.mcfunction 进行自行添加。

  1. execute as @e[tag=hit] run scoreboard players remove @s health 1
复制代码


  数据化自动补给

  这里写了一个很简单的数据补给。简要来说就是只需要给玩家 ammo 这个记分板赋予一定的值,就可以根据这个补给玩家的雪球数量。需要注意的是,补给数量会比实际数量少 1,所以请多写一个。(比如补给 200 发请写 add @s ammo 201)


  可以看到,actionbar 处显示了目前的剩余子弹数量,当玩家射出一个雪球后就默认在物品栏第一个格子 replaceitem 雪球。这里有个小 bug 是玩家可以把雪球移到别的格子,虽然这不影响数据的变化以及重新补给,可以考虑禁用其他格子。

  当 ammo 为 0 的时候停止补给。





  过热和冷却

  当玩家每射出一颗雪球时,玩家的 heat 分数就会加上一定的值 Q0。当 heat 达到设定好的热量上限 heat0 时则会检测到过热,停止子弹补给,并且给予短暂失明效果。


  但是由于冷却系统的存在,你仍然可以恢复正常。冷却系统每 gt 减少 cooling0 个热量。所以当数据在某些范围的时候,玩家过热时还是可以做到“射出雪球”,但是会“间隔大大增大”。


  数据自定义

  以下涉及到的一些计分板数据本系统都是没有写好的,需要玩家初始化

  • heat0 #热量上限 例:100
  • Q0 #每个雪球增加的热量 例:20
  • cooling0 #每 gt 减少的热量 例:2
  • number #玩家的序号[可选]


  兼容性

  本系统使用了如下的命名空间:
  计分板名称:
  tag 名称:
  假名:


  下载

  在上面哦。



  作者

  • 检测部分 @pca006132
  • 装填、过热、冷却部分 @tineseack_bk




元宵快乐!