305822437
本帖最后由 305822437 于 2018-2-26 17:49 编辑

关于检测玩家是否结束潜行
作为萌新可能写的不太好,请见谅.请问还有没有更好的解决方法?

创建计分板
  1. scoreboard objectives add Ram dummy
  2. scoreboard objectives add M dummy
  3. scoreboard objectives add sneakT stat.sneakTime
复制代码
fill高频
  1. <font color="#ff0000">fill ~ ~-1 ~ ~ ~-1 ~-2 redstone_block
  2. fill ~ ~1 ~ ~ ~1 ~-2 air</font>
复制代码


进行检测
  1. scoreboard players add @a[score_sneakT_min=1] M 1
  2. scoreboard players operation @a[score_Ram_min=0] Ram = @a[score_Ram_min=0] sneakT
  3. scoreboard players operation @a Ram -= @a M
  4. scoreboard players set @a[score_Ram=-1] M -1
复制代码

解析:
  1. scoreboard players add @a[score_sneakT_min=1] M 1
复制代码
用于模拟潜行加分

  1. scoreboard players operation @a[score_Ram_min=0] Ram = @a[score_Ram_min=0] sneakT
复制代码
Ram作为临时存储器

  1. scoreboard players operation @a Ram -= @a M
复制代码


不停地比较Ram[sneakT]与模拟潜行的大小,判断潜行是否结束
  1. <font color="black">scoreboard players set @a[score_Ram=-1] M -1</font>
复制代码


[增强容错]


  1. testfor @a[score_Ram=-1]
  2. scoreboard players test ……
复制代码

输出


  1. scoreboard players set @a sneakT 0
复制代码


归零





305822437
本帖最后由 305822437 于 2018-2-26 17:54 编辑



乱码修复好了,不过这排版简直不忍直视

305822437
305822437 发表于 2018-2-26 16:22
输出那段好像乱码了
想了一天,脑袋疼

见谅后面的?请无视,不知道哪来的

⊙v⊙
本帖最后由 ⊙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还模拟,基本是多余的。

看后面的楼层...

305822437
⊙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
本帖最后由 305822437 于 2018-2-26 17:33 编辑
⊙v⊙ 发表于 2018-2-26 16:47
好像看懂了...
/scoreboard objectives add ifsneak stat.sneakTime
/scoreboard objectives setdisplay si ...
好像不行,试了下绿CB会不停的触发


305822437
⊙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还是相当与把未结束潜行的玩家涵括进去了呀
后面再检测几乎就无意义了呀

⊙v⊙
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了...
这次应没错了



305822437
⊙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
本帖最后由 305822437 于 2018-2-26 19:46 编辑
⊙v⊙ 发表于 2018-2-26 18:31
是吗...那就这样
if sneak>=1, tag add s
if sneak=0 tag=s, say 输出

function能用if...else...吗,能用的话好像有个很简单的方法

⊙v⊙
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,相减,复杂了

kongbaiyo
这个版本里已经不用fill高频了
紫色命令方块就是高频了

第一页 上一页 下一页 最后一页