Minecraft(我的世界)中文论坛

标题: 让雪球威力随便调,PVP和单人均可以用(已更新,更容易)

作者: RedStoneMC    时间: 2015-2-24 11:23
标题: 让雪球威力随便调,PVP和单人均可以用(已更新,更容易)
本帖最后由 RedStoneMC 于 2015-7-30 19:41 编辑

Hello,大家好我是最强灬神话,上一次我讲述了如何用雪球制作单人RPG枪战,但是那种方法是随机判断,还是有一定缺陷的,因此我又研究出了另外一种方法,在多人枪战以及单人枪战均可使用哦。
首先还是L4D2中的坑爹图片。。。
然后又是一堆僵尸。。。
注意发射出去的雪球,上面有火哦
但是这并不是重点,火球只是画面渲染,并没有加大威力。
不一会就杀了一只僵尸。
终于它们被消灭了。
1.思路分析
我们知道雪球发射是没有威力的,所以我们需要让雪球有威力。
首先我们要了解雪球的NBT标签,很简单
  1. /entitydata @e[type=Snowball] {}
复制代码
这样我们就知道雪球NBT标签了。(注意{}必须打,代表一个空虚的NBT)
然后会出现这样一段话:
  1. [10:24:05] 数据标签未更改:{yTile:-1s,ownerName:"最强灬神话",UUIDLeast:-8738845387748348414L,Motion:[0:0.004025829317039583d,1:-1.5212842662955777d,2:-0.0030549332223299202d,],OnGround:0b,UUIDMost:-120784408820759814L,inGround:0b,shake:0b,Dimension:0,inTile:"",Air:300s,Pos:[0:-292.48389513720934d,1:4.013652273378782d,2:-859.6490612954307d,],PortalCooldown:0,Fire:0s,xTile:-1s,zTile:-1s,FallDistance:0.0f,Rotation:[0:127.192535f,1:-89.80579f,],Invulnerable:0b,}
复制代码
但是我们无法找到有关于威力的NBT标签,只有一个“Fire:0s”可能可以改变威力,但是不行。这只能让雪球附上一团火,更加好看。
所以得出结论:雪球的威力并不是0,而是没有威力,我们无法直接改变雪球的威力,因此要从怪物/玩家身上考虑。
首先了解怪物NBT(玩家无法entitydata)
出现这样一段话:
  1. [10:36:33] 数据标签未更改:{ConversionTime:-1,DropChances:[0:0.085f,1:0.085f,2:0.085f,3:0.085f,4:0.085f,],UUIDLeast:-4641943380614696668L,Attributes:[0:{Name:"generic.maxHealth",Base:20.0d,},1:{Name:"generic.knockbackResistance",Base:0.0d,Modifiers:[0:{Name:"Random spawn bonus",UUIDLeast:-4825598797627943558L,Operation:0,Amount:0.037188375191764766d,UUIDMost:-3321992349518967195L,},],},2:{Name:"generic.movementSpeed",Base:0.23000000417232513d,},3:{Name:"generic.followRange",Base:35.0d,Modifiers:[0:{Name:"Random spawn bonus",UUIDLeast:-7437413352283232182L,Operation:1,Amount:0.006604130929424228d,UUIDMost:-7826899445975594729L,},],},4:{Name:"generic.attackDamage",Base:3.0d,},5:{Name:"zombie.spawnReinforcements",Base:0.056160382254570276d,},],Motion:[0:0.0d,1:-0.0784000015258789d,2:0.0d,],Health:20s,HealF:20.0f,Fire:-1s,Invulnerable:0b,DeathTime:0s,CanBreakDoors:0b,AbsorptionAmount:0.0f,Equipment:[0:{},1:{},2:{},3:{},4:{},],OnGround:1b,HurtTime:0s,UUIDMost:847228973238405126L,HurtByTimestamp:0,Dimension:0,Air:300s,Pos:[0:-292.69999998807907d,1:1.0d,2:-859.6999999880791d,],CanPickUpLoot:0b,PortalCooldown:0,PersistenceRequired:0b,Leashed:0b,FallDistance:0.0f,Rotation:[0:17.772747f,1:0.0f,],}
复制代码
其中有个地方:“HurtTime:0s”
这个NBT意思是受攻击变红的时间,0s代表最近没有被攻击(引自MinecraftWiki)
所以从这里下手。
  1. scoreboard objectives add 1 dummy
复制代码
首先创建高频和dummy变量1
  1. scoreboard players add @e[type=Zombie] 1 1 {HurtTime:10s}
复制代码
把受伤的僵尸分数不断+1,这样的话每受伤一次就加一分。
  1. kill @e[type=Zombie,score_1_min=2]
复制代码
杀死分数为2的僵尸(也就是打了两次的),如果更难那就更高。
如果要让雪球带火的话:
  1. entitydata @e[type=Snowball] {Fire:20s}
复制代码
Fire打多少无所谓但是填1,2什么的无效要大一点。
拓展:既然是HurtTime那么如果近距离攻击用手撸的话一样可以,就像L4D2中的主武器逼退一样,如果要实现逼退可以将半径为n的僵尸扣血即可,加大游戏的可玩性,如果不想这样的话可以创建damageTaken变量,用手撸这个变量会加分,这样就可以防止玩家手撸了。
2.多人PVP
用一样的方法,HurtTime是可以探测玩家的,仍然可以实现攻击。用之前讲的方法即可。
最后是title标题:
  1. 01.title @p title {text:"!",color:yellow,extra:[{text:"最强灬神话警报僵尸群",color:red}]}
  2. 02.title @p subtitle {text:"!",color:yellow,extra:[{text:"它们来了...",color:red}]}
复制代码
@贰逼
@End-Enderman
@zwh007
@kongbaiyo




2015-02-24_10.05.46.png (225.72 KB, 下载次数: 39)

2015-02-24_10.05.46.png

2015-02-24_10.05.50.png (213.54 KB, 下载次数: 39)

2015-02-24_10.05.50.png

作者: Doby12138    时间: 2015-2-24 11:35
6666666{:10_509:}
作者: 星E君    时间: 2015-2-24 11:43
有办法加上击退么→_→
作者: End-Enderman    时间: 2015-2-24 11:51
{:10_503:}积分板渣渣,还是看不懂积分板...
作者: RedStoneMC    时间: 2015-2-24 11:58
天迹灬战狂神 发表于 2015-2-24 11:43
有办法加上击退么→_→

我的表达有问题。。。击退就是让周围的僵尸扣血而已,在MC实现击退可能会判断不准确,但是是可以的,就是以玩家为中心把X和-X轴Z和-Z轴僵尸后退。。。
作者: kqn2    时间: 2015-2-24 12:03
大触我们做朋友吧
作者: qxdnfsy    时间: 2015-2-24 12:13
{:10_493:}命令渣渣路过此地
作者: :spgbigfan:    时间: 2015-2-24 12:27
HurtTime不错啊!
作者: ⭐✔️    时间: 2015-2-24 14:26
火球主要没抛物线

作者: RedStoneMC    时间: 2015-2-24 15:55
贰逼 发表于 2015-2-24 14:26
火球主要没抛物线

的确,但是在你火球发射的时候玩家就已经跑了。。。胜负之机不能错过,大概是我们专注的地方不同吧。
作者: Vic维度剪影    时间: 2015-2-24 17:20
PVE的话可能会很复杂,但是pvp的话我的思路是:(检测@a[r=0.5]有没有雪球)→[→代表假设成立,可以理解为红石比较器](给与%player瞬间伤害)
作者: RedStoneMC    时间: 2015-2-24 18:59
Vic维度剪影 发表于 2015-2-24 17:20
PVE的话可能会很复杂,但是pvp的话我的思路是:(检测@a[r=0.5]有没有雪球)→[→代表假设成立,可以理解为红石 ...

http://www.mcbbs.net/thread-410036-1-1.html
本人在此帖有详细讲解,就是用这种方法,但是比较鸡肋。
r=n,n必须是整数,小数不行!如果一堆人在的话岂不是全部死?如果添加c=1也有可能误伤哦。
作者: kongbaiyo    时间: 2015-2-27 14:08
好方法恩√
不过伤害必须得是伤害药水能造成的伤害
如果要减一滴血就不好做了
作者: RedStoneMC    时间: 2015-2-27 20:40
kongbaiyo 发表于 2015-2-27 14:08
好方法恩√
不过伤害必须得是伤害药水能造成的伤害
如果要减一滴血就不好做了 ...

顺伤加中毒,中毒应该可以(亡灵不知道行不行,或者fire)
作者: kongbaiyo    时间: 2015-2-27 23:49
RedStoneMC 发表于 2015-2-27 20:40
顺伤加中毒,中毒应该可以(亡灵不知道行不行,或者fire)

减一滴血做出来了减两滴血还是做不出= =
减一滴血可以用凋零一秒!
作者: RedStoneMC    时间: 2015-2-28 09:28
kongbaiyo 发表于 2015-2-27 23:49
减一滴血做出来了减两滴血还是做不出= =
减一滴血可以用凋零一秒!

瞬间伤害一级是3滴血,在来一个瞬间回血。。。
可以穿上装备的
作者: 腐肉大爱    时间: 2015-7-30 18:59
求存档求存档!!!!,
作者: 腐肉大爱    时间: 2015-7-30 19:01
求存档,我理解能力差,没看懂,求存档来学习
作者: zt2286358700    时间: 2015-7-31 12:19
好厉害。
作者: Sao_N    时间: 2015-7-31 17:18
lz为何我不能艾特人啊
作者: Sao_N    时间: 2015-8-1 00:40
Sao_N 发表于 2015-7-31 17:18
lz为何我不能艾特人啊

搜噶,3Q