请选择 进入手机版 | 继续访问电脑版
查看: 194|回复: 6

[命令方块] 1.12防作弊飞行以及各种作弊站着的命令

[复制链接]

3

主题

15

帖子

8

积分

Lv.1 新手木匠

UID
76144
小麦
1
金锭
62
下界之星
0
发表于 2020-5-24 13:18:05 | 显示全部楼层 |阅读模式
以前做过飞行检测,可效果并不如意,能检测出普通的外挂,但是100%防御还是有点欠缺。
经过昨晚的一夜思考和早上的实践,最终得出了最有效的版本,仅仅只需6个命令方块就能防御很多的外挂手段
首先先介绍外挂的飞行作弊模式:通过不断的修改自身 OnGround的nbt标签,来达到在空中站着的姿态。应用范围有no fall、水上行走 等一系列在空中姿态的作弊模式 (我研究了半天才得出这个结论)
稍微讲一下为何做这个:我自己的租聘服服务器常常被这种高速移动跑图的外挂炸服。最后玩家不断流失,我当时就先忍着,毕竟服务器还没做完(处于边做边开发的过程中)。外挂过于猖狂,想必很多服务器腐竹和op都恨得咬牙切齿,抓你开挂说是科学家,做孔乙己?      黑人抬棺直接抬走
长话短说 接下来附上代码
  1. scoreboard players tag @a[tag=!地面] add 地面 {OnGround:1b}
  2. /execute @a[tag=地面] ~ ~ ~ detect ~ ~-1 ~ air 0 execute @s ~ ~ ~ detect ~1 ~-1 ~1 air 0 execute @s ~ ~ ~ detect ~1 ~-1 ~-1 air 0 execute @s ~ ~ ~ detect ~-1 ~-1 ~-1 air 0 execute @s ~ ~ ~ detect ~-1 ~-1 ~1 air 0 execute @s ~ ~ ~ detect ~1 ~-1 ~ air 0 execute @s ~ ~ ~ detect ~ ~-1 ~1 air 0 execute @s ~ ~ ~ detect ~-1 ~-1 ~ air 0 execute @s ~ ~ ~ detect ~ ~-1 ~-1 air 0 kill @s
  3. scoreboard players set @a[score_飞行_min=200] 飞行 0 {OnGround:1b}
  4. scoreboard players set @a[score_飞行_min=200] 飞行 0 {ActiveEffects:[{Id:25b}]}
  5. kill @a[score_飞行_min=3000]
  6. scoreboard players set @a[score_飞行_min=3000] 飞行 0
复制代码
这里飞行的计分是stat.flyOneCm
它的原理是记录在空中玩家移动的距离(不会检测骑马,矿车,鞘翅飞行),而普遍的外挂皆是高速站着的移动,同时开着nofall(不然到地面上就摔死了)
但是flyonecm又因为玩家的noground的nbt标签是否为0b才会加分,所以如果只是普通的 则会出现外挂玩家在飞却不加分的情况。
在玩家还在地面上的时候会拥有一个tag:地面,离开地面就会被移除,  当然外挂在空中也会拥有地面的标签,所以检测地面的玩家脚下的空气方块然后kill @s    不用担心普通玩家的误判,而是要注意哪些玩家在和你说突然死了
当然你可能还要说 如果是限制飞船呢?,当然kill @e[type=boat]了    hhhh这也太逊了
针对船     当然和这个也差不多,检测它下面的空气方块呗,让船飞得nbt我估计也是和这个no fall差不多    暂时我还没去想   懒!






3

主题

15

帖子

8

积分

Lv.1 新手木匠

UID
76144
小麦
1
金锭
62
下界之星
0
 楼主| 发表于 2020-5-24 16:10:06 | 显示全部楼层
有一个代码忘记打了  插在1后面
  1. scoreboard players tag @a[tag=地面] remove 地面 {OnGround:0b}
复制代码

另外提示:如果说要检测水上行走的话,只需把air换成water 即可 后面的nbt属性1还是0就不清楚了,自己试一试嘿嘿嘿

8

主题

103

帖子

39

积分

Lv.2 石器学徒

UID
5752464
小麦
5
金锭
194
下界之星
0
发表于 2020-5-25 13:42:34 来自手机 | 显示全部楼层
检测飞行的那个检测不到比较好的挂的,而且普通玩家边疾跑边跳也会进行加分的

3

主题

15

帖子

8

积分

Lv.1 新手木匠

UID
76144
小麦
1
金锭
62
下界之星
0
 楼主| 发表于 2020-5-25 15:36:01 来自手机 | 显示全部楼层
墨苼x笙溪 发表于 2020-5-25 13:42
检测飞行的那个检测不到比较好的挂的,而且普通玩家边疾跑边跳也会进行加分的

你可能没看完,你说的监测飞行的确很不灵敏且容易误判。
但是我仔细研究了外挂的飞行原理,如果不开nofall ,飞行同样会加分,开了nofall则空中的玩家会有onground:1b的标签(即服务器认为你还在地面上)
所以我在原基础上增加了检测玩家onground标签的指令
实验效果是
1.开了nofall,刚起跳就会被kill
2.不开nofall,只开飞行,会被检测到飞行的分数被kill
3.正常玩家的操作会被清零

你所说的边疾跑边跳的确会被加分,但是会被scoreboard players set @a[score_飞行_min=100] 0 {OnGround:1b} 检测到而被清零分数

从255高度疾跑跳落的分数在2800左右, 但是外挂飞行的加分可是一秒上千,可以设置这个再高一些

3

主题

15

帖子

8

积分

Lv.1 新手木匠

UID
76144
小麦
1
金锭
62
下界之星
0
 楼主| 发表于 2020-5-25 17:25:24 来自手机 | 显示全部楼层
可能这里看的不是很明白,我发一个biilbili专栏的链接
https://www.bilibili.com/read/cv6185006

3

主题

15

帖子

8

积分

Lv.1 新手木匠

UID
76144
小麦
1
金锭
62
下界之星
0
 楼主| 发表于 2020-5-26 11:38:28 来自手机 | 显示全部楼层
建议所有生存和pvp纯净服装一个这个,当tps非常低的时候开启,检测哪些玩家正在作弊游玩。
如果只是想提示管理员而不是kill,只需把kill换成tellraw或者加一个tag(比如:作弊),然后tp @a[tag=作弊] ~ ~ ~   来查看是谁在作弊

3

主题

15

帖子

8

积分

Lv.1 新手木匠

UID
76144
小麦
1
金锭
62
下界之星
0
 楼主| 发表于 2020-5-27 11:23:34 | 显示全部楼层
没人吗.......
还以为我这个会有挺多人需要的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部