本帖最后由 305822437 于 2018-2-26 17:49 编辑
进行检测
复制代码用于模拟潜行加分
关于检测玩家是否结束潜行
作为萌新可能写的不太好,请见谅.请问还有没有更好的解决方法?
fill高频复制代码
- scoreboard objectives add Ram dummy
- scoreboard objectives add M dummy
- scoreboard objectives add sneakT stat.sneakTime
复制代码
- <font color="#ff0000">fill ~ ~-1 ~ ~ ~-1 ~-2 redstone_block
- fill ~ ~1 ~ ~ ~1 ~-2 air</font>
复制代码
- scoreboard players add @a[score_sneakT_min=1] M 1
- scoreboard players operation @a[score_Ram_min=0] Ram = @a[score_Ram_min=0] sneakT
- scoreboard players operation @a Ram -= @a M
- scoreboard players set @a[score_Ram=-1] M -1
解析:
- scoreboard players add @a[score_sneakT_min=1] M 1
复制代码
- scoreboard players operation @a[score_Ram_min=0] Ram = @a[score_Ram_min=0] sneakT
Ram作为临时存储器
复制代码
- scoreboard players operation @a Ram -= @a M
不停地比较Ram[sneakT]与模拟潜行的大小,判断潜行是否结束
复制代码
- <font color="black">scoreboard players set @a[score_Ram=-1] M -1</font>
[增强容错]
复制代码
- testfor @a[score_Ram=-1]
- scoreboard players test ……
输出
复制代码
- scoreboard players set @a sneakT 0
归零
本帖最后由 305822437 于 2018-2-26 17:54 编辑
乱码修复好了,不过这排版简直不忍直视
乱码修复好了,不过这排版简直不忍直视
305822437 发表于 2018-2-26 16:22
输出那段好像乱码了
想了一天,脑袋疼
见谅后面的?请无视,不知道哪来的
本帖最后由 ⊙v⊙ 于 2018-2-26 17:19 编辑
/scoreboard objectives add ifsneak stat.sneakTime
/scoreboard objectives setdisplay sidebar ifsneak
下面这条紫cb高频
/scoreboard players set @a[score_ifsneak_min=1] ifsneak 0刚才没写完...
紫色cb后面接个绿cb,条件约束,用于给玩家+Tag
放另一个紫cb,检测ifsneak=0且有Tag的玩家,使其执行去Tag。后接一个条件绿。
只用到一个stat.sneakTime板,和一个Tag
3个cb和一个输出用的绿cb...
反正无论怎么想,你用dummy检测sneakTime还模拟,基本是多余的。
看后面的楼层...
好像看懂了...
/scoreboard objectives setdisplay sidebar ifsneak
下面这条紫cb高频
/scoreboard players set @a[score_ifsneak_min=1] ifsneak 0刚才没写完...
紫色cb后面接个绿cb,条件约束,用于给玩家+Tag
放另一个紫cb,检测ifsneak=0且有Tag的玩家,使其执行去Tag。后接一个条件绿。
只用到一个stat.sneakTime板,和一个Tag
3个cb和一个输出用的绿cb...
反正无论怎么想,你用dummy检测sneakTime还模拟,基本是多余的。
看后面的楼层...
⊙v⊙ 发表于 2018-2-26 16:47
M(dummy)=stat.sneakTime
Ram(dummy)=stat.sneakTime
M(dummy)-Ram(dummy)=0
嗯,归〇忘写了。
但是stat.sneakTime不会主动归0呀,必须主动归0为下一次检测做准备
但是主动归0就必须知道你有没有退出潜行
这几条命令的作用就在这
本帖最后由 305822437 于 2018-2-26 17:33 编辑
好像不行,试了下绿CB会不停的触发
⊙v⊙ 发表于 2018-2-26 16:47
好像看懂了...
/scoreboard objectives add ifsneak stat.sneakTime
/scoreboard objectives setdisplay si ...
⊙v⊙ 发表于 2018-2-26 16:47
好像看懂了...
/scoreboard objectives add ifsneak stat.sneakTime
/scoreboard objectives setdisplay si ...
但是这样不还是潜行中就有输出了吗,
/scoreboard players set @a[score_ifsneak_min=1] ifsneak 0
只要ifsneak≥1【在潜行中】。ifsneak就会在0、1不停的波动
给玩家+Tag还是相当与把未结束潜行的玩家涵括进去了呀
后面再检测几乎就无意义了呀
305822437 发表于 2018-2-25 23:34
但是这样不还是潜行中就有输出了吗,
/scoreboard players set @a[score_ifsneak_min=1] ifsneak 0
只要if ...
是吗...那就这样
if sneak>=1, tag add s
if sneak=0 tag=s, say 输出
if sneak=0 tag=s, tag remove s
set sneak 0
这个顺序...
写在function里吧,已经不会用cb了...
这次应没错了
⊙v⊙ 发表于 2018-2-26 18:31
是吗...那就这样
if sneak>=1, tag add s
if sneak=0 tag=s, say 输出
sneak不会主动归零是最大的问题,这个问题不解决
if sneak=0这个条件就行不通了
顺便问下为啥会显示函数错误,格式已经是UTF-8无BOM了,函数也用/reload更新了
本帖最后由 305822437 于 2018-2-26 19:46 编辑
function能用if...else...吗,能用的话好像有个很简单的方法
⊙v⊙ 发表于 2018-2-26 18:31
是吗...那就这样
if sneak>=1, tag add s
if sneak=0 tag=s, say 输出
function能用if...else...吗,能用的话好像有个很简单的方法
305822437 发表于 2018-2-26 01:20
sneak不会主动归零是最大的问题,这个问题不解决
if sneak=0这个条件就行不通了
你自己开后台看,估计是哪条命令写错,整个mcfunction就当了...
此t不潜行,没有标签。
潜行时获得标签,此t末尾分数归0。
下一t
依然潜行时sneak依然大于0,跳过输出,分数归0。但如果停止潜行了,由于上t被设0,这t也是0,
输出,去tag。
应该是这样...具体行不行得通,我明天试完告诉你...
其实除了tag我想到了个更省脑的办法...sneak时设玩家dummy记分板3分。持续高频此dummy减1分。没有sneak时此dummy减至0分,0分输出...。要只执行一次的就减至-1分,0分输出...
说到底只是想告诉你...用dummy仿stat.sneakTime,相减,复杂了
这个版本里已经不用fill高频了
紫色命令方块就是高频了
紫色命令方块就是高频了
⊙v⊙ 发表于 2018-2-26 19:49
你自己开后台看,估计是哪条命令写错,整个mcfunction就当了...
此t不潜行,没有标签。
我也知道复杂了,想的我脑袋疼
但我昨天只想出来这个思路,就着手试了下。
function今天才接触到
⊙v⊙ 发表于 2018-2-26 19:49
你自己开后台看,估计是哪条命令写错,整个mcfunction就当了...
此t不潜行,没有标签。
execute @a[score_sneakT_min=1] ~ ~ ~ scoreboard players set @s sneakT 0
execute @a[score_sneakT_min=1] ~ ~ ~ scoreboard players tag @s add s
execute @a[score_sneakT=0,tag=s] ~ ~ ~ say 输出
execute @a[score_sneakT=0,tag=s] ~ ~ ~ scoreboard players tag @s remove s
是这么书写吗
现在1.9以上可以不需要fill高频了
有更快的高频
有更快的高频
Sssss... 发表于 2018-2-26 23:12
现在1.9以上可以不需要fill高频了
有更快的高频
更快的高频是什么?
本帖最后由 ⊙v⊙ 于 2018-2-26 17:37 编辑
运行一次
复制代码
让玩家执行,高频以下function内容...
复制代码原谅我太懒直接用1.13命令格式...
1.12的...
复制代码



左到右分别是
复制代码
运行一次
- scoreboard objectives add ifsneak minecraft.custom:minecraft.sneak_time
让玩家执行,高频以下function内容...
- execute if entity @s[scores={ifsneak=1..}] run tag @s add s
- execute if entity @s[scores={ifsneak=0},tag=s] run say 输出
- execute if entity @s[scores={ifsneak=0},tag=s] run tag @s remove s
- scoreboard players set @s ifsneak 0
1.12的...
- scoreboard objectives add ifsneak stat.sneakTime




左到右分别是
- execute @p[score_ifsneak_min=1] ~ ~ ~ scoreboard players tag @s add s
- execute @p[score_ifsneak_min=0,score_ifsneak=0,tag=s] ~ ~ ~ say 输出
- execute @p[score_ifsneak_min=0,score_ifsneak=0,tag=s] ~ ~ ~ scoreboard players tag @s remove s
- scoreboard players set @p ifsneak 0
赞 赞
刚刚需要用到这个,就在论坛看到了,谢谢
夏君竹 发表于 2019-3-18 22:39
刚刚需要用到这个,就在论坛看到了,谢谢
不用谢呐,我也是找了好久找不到,然后自己想。想出来就发出来了,顺便交流下有没有更好的思路。