随机刷怪系统教程

By MCSugar_cane    2017/10/14

一个做RPG,生存等地图会用到的怪物随机生成系统,代码运行环境版本v1.11.2,思路全版本适用。


整体思路:

说到随机生成,首先想到的就是spreadplayers了,在游戏里,可以用spreadplayers实现随机传送,同样的,将范围限制后,根据玩家位置执行扩散实体(僵尸),岂不是就能达到随机生成的效果了呢?所以实现步骤是:每隔一段时间,在玩家头顶生成特定的实体(僵尸),并立马在玩家位置进行小范围扩散,进而达到随机生成的目的。代码操作部分如下:


每隔一段时间执行:

  1. /execute @a[m=2] ~ ~ ~ summon Zombie ~ ~2 ~ {CustomName:"一只随机生成的可爱的僵尸酱"}
  2. /execute @a[m=2] ~ ~2 ~ spreadplayers ~ ~ 6 30 false @e[type=zombie,r=1]


拓展:

以上代码会有一些小缺陷,例如任何一只僵尸来到玩家头顶,并且恰好到上诉指令执行时,那么那只僵尸就会和新生成的一起被传送。这里,我用一个标签来解决这个问题。

  1. /execute @a[m=2] ~ ~ ~ summon Zombie ~ ~2 ~ {CustomName:"一只随机生成的可爱的僵尸酱",Tags:["newz"]}
  2. /execute @a[m=2] ~ ~2 ~ spreadplayers ~ ~ 6 30 false @e[type=zombie,r=1,tag=newz]
  3. /scoreboard players tag @e[type=zombie,tag=newz] remove newz

如果你使用的版本不支持{Tags:[""]},则可以用下面的方法(此方法有极小极小极小几率不会选中新生成僵尸)。

  1. /execute @a[m=2] ~ ~ ~ summon Zombie ~ ~2 ~ {CustomName:"一只随机生成的可爱的僵尸酱"}
  2. /execute @a[m=2] ~ ~2 ~ scoreboard players tag @e[type=zombie,r=1,c=1] add newz
  3. /execute @a[m=2] ~ ~2 ~ spreadplayers ~ ~ 6 30 false @e[type=zombie,r=1,tag=newz]
  4. /scoreboard players tag @e[type=zombie,tag=newz] remove newz

拓拓展:

当此命令被过多执行时,僵尸就会变得很多,所以我们只需要在僵尸数量没有超过一定值时随机生成。只需要在生成是检测一下玩家附近僵尸数量即可。指令如下:

创建变量:

  1. /scoreboard objectives add ZombieCount dummy

(定时执行)检测僵尸数量:

  1. /scoreboard players set @a ZombieCount 0
  2. /execute @a ~ ~ ~ execute @e[type=Zombie,r=45] ~ ~ ~ scoreboard players add @p ZombieCount 1

(定时执行)僵尸随机生成:

  1. /execute @a[score_ZombieCount=15,m=2] ~ ~ ~ summon Zombie ~ ~2 ~ {CustomName:"一只随机生成的可爱的僵尸酱",Tags:["newz"]}
  2. /execute @a[score_ZombieCount=15,m=2] ~ ~2 ~ spreadplayers ~ ~ 6 30 false @e[type=zombie,r=1,tag=newz]
  3. /scoreboard players tag @e[type=zombie,tag=newz] remove newz

欢迎加群交流划水:481528679