t1546542
本帖最后由 t1546542 于 2019-8-23 13:58 编辑

只使用原版命令!
版本:1.12.2
如题
我想让玩家达到服务器里面的tpa效果
有玩家接受和玩家拒绝功能
求大佬解答!!!
@CHElover_C60

sgoye
这个真的做不到呢……
倒是可以做到随机传送和强制传送

一只小残梦
在ESS插件配置中添加玩家tpa的默认权限即可

1234554321999
可以自己装插件

1771475094
正常服务器加装ess插件都可以达到tpa
没有插件模组单靠命令方块的话是办不到的

t1546542
1771475094 发表于 2019-8-22 12:03
正常服务器加装ess插件都可以达到tpa
没有插件模组单靠命令方块的话是办不到的 ...

办得到,之前我进别人房间时看到的

xmdhs
t1546542 发表于 2019-8-22 13:10
办得到,之前我进别人房间时看到的

能说说他是怎么实现的吗。

/trigger 还是怎么的


QWQQAQ1
咱下个插件不好吗

t1546542
xmdhs 发表于 2019-8-22 13:31
能说说他是怎么实现的吗。

/trigger 还是怎么的

我看到他用了uid分配
用/trigger指定玩家uid,然后发出邀请

ZhiBuMiao
给玩家加UID吧,按照领取新手礼包顺序每个玩家一个编号,然后就好做了

Chelover_C60
本帖最后由 CHElover_C60 于 2019-8-23 19:49 编辑

既然楼主邀请我答了,那我就试着写一下吧。
以下命令基于假设同时只有一个玩家尝试tpa的情况下,因为怎么防多人冲突我一直想不好



事先准备
建立计分板
  1. /scoreboard objectives add tpa trigger
  2. /scoreboard objectives add tpaccept trigger
  3. /scoreboard objectives add tpaid dummy
  4. /scoreboard objectives add tpassist dummy
复制代码
然后指定一个虚拟玩家#id,让他在tpaid上拥有1分
  1. /scoreboard players set #id tpaid 1
复制代码




生成tpaid
当一名新玩家加入后,执行以下命令,为其分配tpaid
  1. /scoreboard players tag @a[tag=!tpaid_set,c=1] add tpaid_setting
  2. /scoreboard players operation @a[tag=tpaid_setting] tpaid = #id tpaid
  3. /scoreboard players add #id tpaid 1
  4. /scoreboard players tag @a[tag=tpaid_setting] add tpaid_set
  5. /tellraw @a[tag=tpaid_setting] [{"text":"你的tpaid为:"},{"score":{"name":"*","objective":"tpaid"}}]
  6. /scoreboard players enable @a[tag=tpaid_setting] tpa
  7. /scoreboard players tag @a[tag=tpaid_setting,c=1] remove tpaid_setting
复制代码
或者,如果会写函数,可以直接execute该玩家执行函数,此时可省去防止多人冲突而做的标签处理
  1. /execute @a[tag=!tpaid_set] ~ ~ ~ function set_tpaid
复制代码
set_tpaid.mcfunction
  1. scoreboard players operation @s tpaid = #id tpaid
  2. scoreboard players add #id tpaid 1
  3. scoreboard players tag @s add tpaid_set
  4. tellraw @s [{"text":"你的tpaid为:"},{"score":{"name":"*","objective":"tpaid"}}]
  5. scoreboard players enable @s tpa
复制代码



寻找tpa目标
首先,让玩家输入被tpa玩家的tpaid,格式为:/trigger tpa set <被tpa玩家tpaid>
然后开始寻找在计分板tpaid上拥有分数与该玩家的tpa分数相同的玩家,并加标签做标记,后提醒该玩家是否接受tpa。这一部分和下一部分我不知道怎么防止多人冲突,希望有人能解决
  1. /scoreboard players tag @a[score_tpa_min=1] add tpaexecute
  2. /execute @a ~ ~ ~ scoreboard players operation @s tpassist = @s tpaid
  3. /execute @a ~ ~ ~ scoreboard players operation @s tpassist -= @a[tag=tpaexecute,c=1] tpa
  4. /scoreboard players tag @a[score_tpassist_min=0,score_tpassist=0] add tpatarget
  5. /tellraw @a[tag=tpatarget] [{"selector":"@a[tag=tpaexecute]"},{"text":"想要tpa至你所在的位置,输入/trigger tpaccept set 1以接受,或输入/trigger tpaccept set 0以拒绝"}]
  6. /scoreboard players enable @a[tag=tpatarget] tpaccept
  7. /scoreboard players reset @a[tag=tpaexecute] tpa
复制代码



判断玩家是否接受
此处需要检测拥有tpatarget标签玩家的tpaccept的分数,然后执行不同命令,故需要将命令方块设置为条件激活。
若玩家接受
  1. /testfor @a[tag=tpatarget,score_tpaccept_min=1]
  2. /tp @a[tag=tpaexecute] @a[tag=tpatarget]
  3. /scoreboard players reset @a[tag=tpatarget] tpaccept
  4. /scoreboard players enable @a[tag=tpaexecute] tpa
  5. /scoreboard players tag @a [tag=tpaexecute] tpaexecute
  6. /scoreboard players tag @a [tag=tpatarget] tpatarget
复制代码
若玩家拒绝
  1. /testfor @a[tag=tpatarget,score_tpaccept=0]
  2. /tellraw @a[tag=tpaexecute] {"text":"对方拒绝了你的tpa请求"}
  3. /scoreboard players reset @a[tag=tpatarget] tpaccept
  4. /scoreboard players enable @a[tag=tpaexecute] tpa
  5. /scoreboard players tag @a [tag=tpaexecute] tpaexecute
  6. /scoreboard players tag @a [tag=tpatarget] tpatarget
复制代码
如果用函数,就可以省去testfor,直接execute在tpaccept计分板上有分数的玩家执行函数即可,此时部分目标选择器可以换成@s



查询自己的tpaid
考虑到可能会有玩家忘记自己的tpaid,我想了一个可以让玩家查询自己的tpaid的方法,玩家手动输入/trigger tpa set 0即可。此情况多人模式下不会冲突。
  1. /tellraw @a[score_tpa=0] [{"text":"你的tpaid为:"},{"score":{"name":"*","objective":"tpaid"}}]
  2. /scoreboard players enable @a[score_tpa=0] tpa
  3. /scoreboard players reset @a[score_tpa=0] tpa
复制代码

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