【TML丨104】用命令方块还原守望先锋——猎空的技能!





1L先放个介绍的视频233希望大家能砸个硬币什么的
http://www.bilibili.com/video/av5743016/

楼主 1041159637  发布于 2016-08-10 23:25:00 +0800 CST  
前言:
由于嘛本人暑假事情还是比较多的,断断续续做了有将近两个星期的样子……(包括优化什么的)总算是把它做出来了!但说实话有效率的CBer用两个星期早就能搞个更大的新闻出来了。主要原因还是以为在一些比较智障的问题上卡壳所导致。所以以前有些人说我是大触的话……我呢还是不够格的。
那么话又说回来了,这是一个复原猎空技能的原版模组。并没有使用资源包之类的,所以的话猎空的双枪我并没有考虑去做(否则违和感满满233)。我则尽量将游戏中猎空的技能给它还原了,但是因为一些小细节由于技术上的原因或者穷举量过大而没有实现,不过我个人认为也无伤大雅(虽然需要一点时间适应)。
以及现在暂时只是把作品发出来~原理的话我有可能明后几天会更新!
最后,希望大家喜欢。

TML 104 敬上
------------------------


另:视频中的皮肤为上古之石团队所制作的守望先锋系列皮肤,原作者保留所有权力(http://www.mcbbs.net/forum.php?mod=viewthread&tid=598769&extra=page%3D1)

楼主 1041159637  发布于 2016-08-10 23:33:00 +0800 CST  
食用方式(版本至少1.9.4+,推荐版本1.10.2):
【在视频的最后有具体安装演示】
1、请确保您是处在创造模式中的管理员

2、在聊天框中输入/give@pcommand_block以取得命令方块


3、在你认为合适的地方放置命令方块,并复制第一段指令进入命令方块中并激活



4、复制第二段指令进入同一个命令方块中,并再次激活该命令方块


如果在聊天框中出现了该排简介,则说明已经安装完成。

楼主 1041159637  发布于 2016-08-10 23:47:00 +0800 CST  
如何使用?
一、
1、将两个黄色染色玻璃板与一个金头盔扔在同一个地点,来合成“猎空护目镜”





2、戴上即可成为“猎空”


二、
UI界面如下:


1、闪现:
猎空每3秒可以获得一个闪现技能的使用次数,最多可以获得三次。
按下左Shift(默认的下蹲键),即可向前闪现并消耗一次次数【注1】
2、闪回:




将手中的“闪回(E)”丢弃,就可以使用闪回技能(冷却时间为12秒)
使用后,将会回到你三秒之前的位置并将你的生命值恢复至三秒以前的值【注2】
3、脉冲炸弹
当右方的“终极技能(%)”显示为100%时,你的一号槽位的物品将会变为“脉冲炸弹(Q)”
将其扔出落地后,便会开始倒计时(约1s),然后发生爆炸


如果你成功将其扔至生物、怪物与玩家身上,脉冲炸弹会吸附在其身上,倒计时后便发生爆炸


楼主 1041159637  发布于 2016-08-11 00:15:00 +0800 CST  
(接上)


你可以通过以下两种方式来为你的终极技能充能:
a.近身攻击目标(杀死一个血量为20【即10颗心】的目标大约可以为你的终极技能充能20%)
b.等待时间流逝(约每5至8秒充能1%)
-------------------------------------------------------------------
【注1】:真正的守望先锋中的猎空是可以根据你的移动方位来进行闪现的。此处由于技术原因而没能够实现。如果你有实现的思路的话欢迎探讨233
【注2】:守望先锋中对于猎空的介绍并未提及闪回至哪一相对时刻。此处“3秒以前的位置与血量”是来源于百度百科对猎空的介绍,并且经过本人实验也确实是如此:
"
闪回:“猎空”可以倒回时间,她的生命值、弹药和所处位置都会回到几秒前的状态。
....

4、时刻注意自己的位置,因为闪回的时间点是3秒前,如果你在原地过多的时间不动,闪回的位置也只能是原地。
....

"

楼主 1041159637  发布于 2016-08-11 00:26:00 +0800 CST  
三、
最后,如果你想移除该ooc,请右击装置上的木牌


=========================================
嘛今天先更到这……明天(其实已经是今天了)大概会继续讲解原理233
先不at人了吧,早上再at

楼主 1041159637  发布于 2016-08-11 00:30:00 +0800 CST  
先at一拨人准备开更原理
@651547166@乾坤轩辕1@爱吐槽喵星人@MsYqgzt_nick@魔修尔4
@虾米黄Sammy @34105401s @神隐317 @丶H2F2 @GoldJo金佐

楼主 1041159637  发布于 2016-08-11 23:14:00 +0800 CST  
讲解之前先说一下吧……其实呢我今天并没有码完所有原理今天先更新一部分吧,明后几天我会更新掉
---------------------------------------------
MinecraftWiki 命令条目:http://minecraft.gamepedia.com/Commands
MinecraftWiki 记分板条目:http://minecraft.gamepedia.com/Scoreboard


下文中可能会出现的名词与缩写解释:
RCB:(Repeating Command Block)循环性命令方块
CCB:(Chain Command Block)连锁性命令方块
Init:(initial adj. 最初的,开始的。)简单而言就是在一个命令方块装置开始循环工作之前需要执行的前置指令,例如创建记分板。“init”也经常被用于在PCB中使用
Gametick:游戏刻。Minecraft中的最小时间单位。1秒=20Gametick
AEC:(AreaEffectCloud)药水云
AS:(ArmorStand)盔甲架
----------------------------------------------
原理讲解:
惯例先讲解思路~
其实呢这一整个作品当中闪现和脉冲炸弹的思路都不怎么难。对于闪现,穷举玩家的朝向然后tp即可(我还不知道有什么不需要穷举的实现方法,但是应该是没有的)。对于脉冲炸弹,我们需要实现的就是在扔出的物品落地后召唤一个AS模型,用记分板进行计时,然后召唤一只马上爆炸的Creeper。
难点是闪回这个技能的实现。闪回需要达到两个效果:1、回到3s前的位置;2、恢复至3s之前的血量。那么思路便是每一秒钟都记录玩家当前的位置与血量,当使用闪回时,便将玩家tp回3s前的位置,同时“调取”当时的血量与此时比较,如果当前的血量与当时相比要少,则恢复玩家的生命值直到等于那一时刻的血量为止。

楼主 1041159637  发布于 2016-08-11 23:35:00 +0800 CST  
(注1:下文的指令原理讲解将分组进行,因此创建记分板的步骤会在每一组指令的开始讲解)
(注2:在指令前有(init)标识的指令代表它将只会执行一次,一般而言是创建记分板等一次性步骤,它不属于需要高频执行的指令。(cond)标识的指令意味着其所在命令方块需要调整为conditional模式。(rcb)代表它所在的命令方块需要调整为循环型命令方块【RCB】。i没有上述标识的指令代表其需要在一般的连锁型命令方块【CCB】中)
(注3:在同一组中所有需要高频执行的指令均按照从上至下的时序执行。对于每一组的指令需要按照标题数字顺序“拼接”后按照从上至下的时序执行)
一、合成与判定
首先我们要给玩家一个成为猎空的方式。这里我使用的是让玩家戴上一个名为“猎空护目镜”的金头盔来成为猎空。
首先让玩家将两个黄色染色玻璃板与一个金头盔扔在地上,那么就有:


(rcb)1: /scoreboard players tag @e[type=Item] add CraftingA {Item:{id:"minecraft:golden_helmet",Damage:0s}}
2: /scoreboard players tag @e[type=Item] add CraftingB {Item:{id:"minecraft:stained_glass_pane",Damage:4s,Count:2b}}


分别给掉落物形式的黄色染色玻璃板与金头盔CraftingA与CraftingB的标签
然后判断它们是否是处在同一位置。如果是则召唤上文提到的猎空护目镜:


3: /execute @e[type=Item,tag=CraftingA] ~ ~ ~ execute @e[type=Item,tag=CraftingB,r=1] ~ ~ ~ /summon Item ~ ~1 ~ {Item:{id:"minecraft:golden_helmet",Count:1b,Damage:0b,tag:{ench:[],Unbreakable:1b,display:{Name:"猎空护目镜",Lore:["戴上来获得猎空的技能"]}}}}


最后合成成功时,将合成物kill掉:
4: /execute @e[type=Item,tag=CraftingA] ~ ~ ~ execute @e[type=Item,tag=CraftingB,r=1] ~ ~ ~ kill @e[type=Item,r=1,tag=CraftingA]
(cond)5:/execute @e[tag=CraftingB,type=Item] ~ ~ ~ kill @e[tag=CraftingB,type=Item]
然后判断玩家是否戴上了该帽子,如果是则给其添加Tracer标签,否则移除他的Tracer标签:
6: /scoreboard players tag@aremove Tracer
7: /scoreboard players tag @a add Tracer {Inventory:[{Slot:103b,id:"minecraft:golden_helmet",Count:1b,tag:{display:{Name:"猎空护目镜",Lore:["戴上来获得猎空的技能"]}}}]}
之后的指令都将会围绕此标签进行执行。

楼主 1041159637  发布于 2016-08-11 23:55:00 +0800 CST  
二、控制相对方向
为了能使得猎空向前瞬移,这里呢我召唤了一个AEC,然后使得AEC始终处在相对于玩家前方的位置,当需要使用时则将玩家tp到AEC的位置。当然这里我用了一个麻烦一点的方法。其实也可以直接把玩家tp到相对与他朝向的位置的。
不过我懒得改了(误)
那么首先我们召唤一个AEC:
(init)8: /summon AreaEffectCloud ~ ~ ~ {Duration:2100000000,Tags:["A"]}
召唤一个能够存活2.1e9 Gametick的tag为A的AEC,换句话说这个AEC要自然消失需要三年多的时间,所以基本可以无视时间对其的影响了。
然后便是穷举玩家的朝向,一共24个指令。把玩家的朝向想象成一个球形,上半部分分割成8份,中间8份,下半部分8份,于是便有这24个命令方块了。
9:execute @a[rx=90,rxm=16,rym=-66,ry=-22,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3.1 ~-1 ~3.1
10:execute @a[rx=90,rxm=16,rym=-111,ry=-67,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3.8 ~-1 ~
11:execute @a[rx=90,rxm=16,rym=-156,ry=-112,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3.1 ~-1 ~-3.1
12:execute @a[rx=90,rxm=16,rym=157,ry=-157,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~ ~-1 ~-3.8
13:execute @a[rx=90,rxm=16,rym=112,ry=152,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3.1 ~-1 ~-3.1
14:execute @a[rx=90,rxm=16,rym=67,ry=111,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3.8 ~-1 ~
15:execute @a[rx=90,rxm=16,rym=22,ry=66,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3.1 ~-1 ~3.1
16:execute @a[rx=90,rxm=16,rym=-21,ry=21,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~ ~-1 ~3.8
17:execute @a[rx=-16,rxm=-90,rym=-66,ry=-22,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3 ~3 ~3
18:execute @a[rx=-16,rxm=-90,rym=-111,ry=-67,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3.5 ~3 ~
19:execute @a[rx=-16,rxm=-90,rym=-156,ry=-112,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3 ~3 ~-3
20:execute @a[rx=-16,rxm=-90,rym=157,ry=-157,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~ ~3 ~-3.5
21:execute @a[rx=-16,rxm=-90,rym=112,ry=152,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3 ~3 ~-3
22:execute @a[rx=-16,rxm=-90,rym=67,ry=111,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3.5 ~3 ~
23:execute @a[rx=-16,rxm=-90,rym=22,ry=66,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3 ~3 ~3
24:execute @a[rx=-16,rxm=-90,rym=-21,ry=21,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~ ~3 ~3.5
25:execute @a[rx=15,rxm=-15,rym=-66,ry=-22,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3.3 ~1 ~3.3
26:execute @a[rx=15,rxm=-15,rym=-111,ry=-67,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~4 ~1 ~
27:execute @a[rx=15,rxm=-15,rym=-156,ry=-112,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~3.3 ~1 ~-3.3
28:execute @a[rx=15,rxm=-15,rym=157,ry=-157,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~ ~1 ~-4
29:execute @a[rx=15,rxm=-15,rym=112,ry=157,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3.3 ~1 ~-3.3
30:execute @a[rx=15,rxm=-15,rym=67,ry=111,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-4 ~1 ~
31:execute @a[rx=15,rxm=-15,rym=22,ry=66,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~-3.3 ~1 ~3.3
32:execute @a[rx=15,rxm=-15,rym=-21,ry=21,tag=Tracer] ~ ~ ~ /tp @e[tag=A] ~ ~1 ~4
(PS:老实讲这是我看的最舒爽的一段指令233)

楼主 1041159637  发布于 2016-08-12 00:11:00 +0800 CST  
ok继续更新
三、闪现系统
为了实现玩家按下左Shift就能进行闪现,首先需要创建几个记分板:


(init)33: /scoreboard objectives add Shift stat.sneakTime Shift
(init)34: /scoreboard objectives add CD dummy 闪现CD时间
(init)35: /scoreboard objectives add number dummy 可使用次数


33号指令添加了一个判据为sneakTime的记分板,当玩家潜行时,也就是按下Shift的时候,该记分板的分数会自动增加。
34号指令和35号指令分别是用于猎空的闪现冷却时间和使用次数的控制。CD这个记分板用于计算冷却,number这个记分板用来计算猎空的使用次数。


接下来让猎空在闪现技能的可使用次数未达上限之前给CD每一个Gametick添加1分
那么当分数达到60时,也就是已经过去了三秒,给number记分板加一分,然后清空CD。
注意当猎空的可使用次数达到最大上限,也就是3时就不要继续加分了,所以这里的选择器是选择number在2分及以下的猎空才会给CD记分板加分
36:/scoreboard players add @a[score_number=2,tag=Tracer] CD 1
37:/scoreboard players add @a[score_CD_min=60,tag=Tracer] number 1
38:/scoreboard players set @a[score_CD_min=60,tag=Tracer] CD 0


然后,当探测到玩家按下Shift时,其实也就是当玩家Shift的分数大于等于1时,就把玩家tp至tag为A的AEC处,也就是上文中24个命令方块所穷举的的朝向。同时减少猎空的闪现可使用次数。最后把Shift记分板清零,否则就会不断tp了
39: /tp @a[score_Shift_min=1,score_number_min=1,score_number=3,tag=Tracer] @e[tag=A]
40: /execute @a[score_Shift_min=1,score_number_min=1,score_number=3,tag=Tracer] ~ ~ ~ /playsound minecraft:entity.endermen.teleport block @a[r=10] ~ ~ ~
41: /scoreboard players remove @a[score_Shift_min=1,score_number_min=1,score_number=3,tag=Tracer] number 1
42: /scoreboard players set @a[score_Shift_min=1] Shift 0
41号指令只是给闪现技能使用时执行一个末影人瞬移的音效。
至此闪现技能已经可以使用了

楼主 1041159637  发布于 2016-08-12 20:15:00 +0800 CST  
四、视觉效果
为了让玩家的屏幕中间有类似于守望先锋中猎空闪现剩余次数的标识,这里需要用到title指令
42: /title @a[tag=Tracer] title ["",{"text":" "}]
43: /title @a[score_number_min=0,score_number=0,tag=Tracer] subtitle ["",{"text":"□ □ □"}]
44: /title @a[score_number_min=1,score_number=1,tag=Tracer] subtitle ["",{"text":"■ □ □"}]
45: /title @a[score_number_min=2,score_number=2,tag=Tracer] subtitle ["",{"text":"■ ■ □"}]
46: /title @a[score_number_min=3,score_number=3,tag=Tracer] subtitle ["",{"text":"■ ■ ■"}]
47: /title @a[tag=Tracer] times 0 5 0
首先给猎空玩家显示一个空标题,然后在副标题处给number记分板相应分数的玩家显示标识。剩余三次,也就是number为3分时就是三个黑框,以此类推。
最后设置标题的显示时间,没什么好说的。

楼主 1041159637  发布于 2016-08-12 20:23:00 +0800 CST  
好了接下来到最难实现的闪回了,为了便于讲解,这里把闪回系统分为移动和恢复生命值两部分。
五、闪回的移动部分
首先得创建一堆记分板:
(init)48:/summon AreaEffectCloud ~ ~ ~ {CustomName:"T",Duration:2100000000,Tags:["T"]}
(init)49:/scoreboard objectives add ETime dummy 技能E的时间探测
(init)50:/scoreboard objectives add ETime2 dummy 技能E的秒数次序
(init)51:/scoreboard objectives add 4 dummy 4
(init)52:/scoreboard players set @e[tag=T] 4 4

(init)53:/scoreboard objectives add ECD dummy 技能E的CD
这里呢我又召唤了一个tag为T的AEC。事实上是没有必要的,直接用假名即可。

这里讲一下各个计分板的用途:
由于上文中提到需要保存玩家在各个时间点的位置,所以我们需要一个计时系统。因此我创建了ETime与ETime2这两个记分板,ETime负责使得ETime2的分数每秒+1,根据ETime2的数值来保存和读取位置信息。

由于是返回到三秒以前的位置,因此我们需要4个不同的数值。因此我需要导入一个常数来对ETime2的数值进行求余。最后的ECD才是对闪回的冷却计算。
54:/scoreboard players add @a[tag=Tracer] ETime 1
55:/scoreboard players add @a[score_ETime_min=20,tag=Tracer] ETime2 1
56:/scoreboard players set @a[score_ETime_min=20,tag=Tracer] ETime 0
57:/scoreboard players operation * ETime2 %= @e[tag=T] 4
这里与上文的闪现冷却原理类似,但是多了个求余。这个时候如果循环执行此四条指令,ETime2的分数就会在0到3之间以每秒+1s的速度循环。


接下来就是保存玩家的位置。
58:/execute @a[score_ETime2_min=1,score_ETime2=1,tag=Tracer] ~ ~ ~ kill @e[tag=Alpha]
59:/execute @a[score_ETime2_min=1,score_ETime2=1,tag=Tracer] ~ ~ ~ /summon AreaEffectCloud ~ ~ ~ {Duration:2100000000,Tags:["Alpha"]}
60:/execute @a[score_ETime2_min=1,score_ETime2=1,tag=Tracer] ~ ~ ~ tp @e[tag=Alpha] @a[tag=Tracer]
在ETime为1时,先kill掉在场上的标签为Alpha的AEC,然后再在玩家处召唤一个tag为Alpha的AEC,最后把它向玩家处tp一下。
这样在ETime2进入下一秒时,tag为Alpha的AEC就将会定格在此玩家在第一秒时的最后位置。直到进入下一组第一秒时,该位置才会更新。每一组循环的间隔为4秒,而我们只需要让玩家回到3秒前的位置,因此这已经足够了。
最后tp玩家那一下,是为了让玩家被tp回该AEC处时朝向也是那一时刻的朝向。否则玩家被tp回去后会始终面向同一方向。
下面3组指令也与上面三条指令一样。我就不多解释了。
61: /execute @a[score_ETime2_min=2,score_ETime2=2,tag=Tracer] ~ ~ ~ kill @e[tag=Beta]
62:/execute @a[score_ETime2_min=2,score_ETime2=2,tag=Tracer] ~ ~ ~ /summon AreaEffectCloud ~ ~ ~ {Duration:2100000000,Tags:["Beta"]}
63:/execute @a[score_ETime2_min=2,score_ETime2=2,tag=Tracer] ~ ~ ~ tp @e[tag=Beta] @a[tag=Tracer]

64:/execute @a[score_ETime2_min=3,score_ETime2=3,tag=Tracer] ~ ~ ~ kill @e[tag=Gamma]
65:/execute @a[score_ETime2_min=3,score_ETime2=3,tag=Tracer] ~ ~ ~ /summon AreaEffectCloud ~ ~ ~ {Duration:2100000000,Tags:["Gamma"]}
66:/execute @a[score_ETime2_min=3,score_ETime2=3,tag=Tracer] ~ ~ ~ tp @e[tag=Gamma] @a[tag=Tracer]

67:/execute @a[score_ETime2_min=0,score_ETime2=0,tag=Tracer] ~ ~ ~ kill @e[tag=Delta]
68:/execute @a[score_ETime2_min=0,score_ETime2=0,tag=Tracer] ~ ~ ~ /summon AreaEffectCloud ~ ~ ~ {Duration:2100000000,Tags:["Delta"]}
69:/execute @a[score_ETime2_min=0,score_ETime2=0,tag=Tracer] ~ ~ ~ tp @e[tag=Delta] @a[tag=Tracer]


然后探测玩家是否把手中的物品扔出。首先移除所有玩家身上的UseE标签,然后给在第三个槽位有对应物品的猎空玩家一个UseE标签。然后再给不是猎空的所有玩家一个UseE标签。这个时候如果猎空把该物品扔出了,那么猎空将会是惟一一个不拥有UseE标签的玩家
70:/scoreboard players tag @a remove UseE
71:/scoreboard players tag @a[tag=Tracer] add UseE {Inventory:[{Slot:2b,id:"minecraft:nether_star",Count:1b,tag:{display:{Name:"闪回(E)",Lore:["扔出来施放"]}}}]}
72:/scoreboard players tag @a[tag=!Tracer] add UseE


然后增加冷却剩余时间
73:/execute @a[tag=!UseE] ~ ~ ~ scoreboard players add @a[tag=!UseE] ECD 1


再然后是在给使用了闪回技能的猎空的物品栏中用物品形式显示剩余的CD时间
74:/replaceitem entity @a[tag=!UseE,score_ECD_min=1,score_ECD=20] slot.hotbar.2 gunpowder 12 0 {display:{Name:"冷却中(剩余12秒)",Lore:["技能正在冷却"]}}
75:/replaceitem entity @a[tag=!UseE,score_ECD_min=21,score_ECD=40] slot.hotbar.2 gunpowder 11 0 {display:{Name:"冷却中(剩余11秒)",Lore:["技能正在冷却"]}}
76:/replaceitem entity @a[tag=!UseE,score_ECD_min=41,score_ECD=60] slot.hotbar.2 gunpowder 10 0 {display:{Name:"冷却中(剩余10秒)",Lore:["技能正在冷却"]}}
77:/replaceitem entity @a[tag=!UseE,score_ECD_min=61,score_ECD=80] slot.hotbar.2 gunpowder 9 0 {display:{Name:"冷却中(剩余9秒)",Lore:["技能正在冷却"]}}
78:/replaceitem entity @a[tag=!UseE,score_ECD_min=81,score_ECD=100] slot.hotbar.2 gunpowder 8 0 {display:{Name:"冷却中(剩余8秒)",Lore:["技能正在冷却"]}}
79:/replaceitem entity @a[tag=!UseE,score_ECD_min=101,score_ECD=120] slot.hotbar.2 gunpowder 7 0 {display:{Name:"冷却中(剩余7秒)",Lore:["技能正在冷却"]}}
80:/replaceitem entity @a[tag=!UseE,score_ECD_min=121,score_ECD=140] slot.hotbar.2 gunpowder 6 0 {display:{Name:"冷却中(剩余6秒)",Lore:["技能正在冷却"]}}
81:/replaceitem entity @a[tag=!UseE,score_ECD_min=141,score_ECD=160] slot.hotbar.2 gunpowder 5 0 {display:{Name:"冷却中(剩余5秒)",Lore:["技能正在冷却"]}}
82:/replaceitem entity @a[tag=!UseE,score_ECD_min=161,score_ECD=180] slot.hotbar.2 gunpowder 4 0 {display:{Name:"冷却中(剩余4秒)",Lore:["技能正在冷却"]}}
83:/replaceitem entity @a[tag=!UseE,score_ECD_min=181,score_ECD=200] slot.hotbar.2 gunpowder 3 0 {display:{Name:"冷却中(剩余3秒)",Lore:["技能正在冷却"]}}
84:/replaceitem entity @a[tag=!UseE,score_ECD_min=201,score_ECD=220] slot.hotbar.2 gunpowder 2 0 {display:{Name:"冷却中(剩余2秒)",Lore:["技能正在冷却"]}}
85:/replaceitem entity @a[tag=!UseE,score_ECD_min=221,score_ECD=240] slot.hotbar.2 gunpowder 1 0 {display:{Name:"冷却中(剩余1秒)",Lore:["技能正在冷却"]}}


当CD时间到时以后,也就是当ECD的分数为240的时候(因为冷却时间为12秒=240Gametick),给玩家的第三槽位上得到技能物品
86:/replaceitem entity @a[tag=!UseE,score_ECD_min=241] slot.hotbar.2 nether_star 1 0 {display:{Name:"闪回(E)",Lore:["扔出来施放"]}}


然后把玩家可能会扔出的物品添加BeKilled标签,然后一起kill掉。
87: /scoreboard players tag @e[type=Item] add BeKilled {Item:{id:"minecraft:nether_star",Count:1b,tag:{display:{Lore:[0:"扔出来施放"],Name:"闪回(E)"}},Damage:0s}}
88:/scoreboard players tag @e[type=Item] add BeKilled {Item:{id:"minecraft:gunpowder",tag:{display:{Lore:["技能正在冷却"]}},Damage:0s}}
89:/kill @e[tag=BeKilled]
值得注意的是88号指令,我只通过Lore来选择相应的物品。这样就能使得只用一个指令就选取了上面十二个不同名称的物品。


最后是把使用技能的玩家tp到三秒前的位置。
当ETime2=1时,则依次tp Delta、Gamma、Beta。相当于依次回到1s前、2s前、3s前的位置。
其他的三组指令也同理。这么做的主要目的是为了使得其闪回回去时有一个动画感。
90: /execute @a[tag=!UseE,score_ETime2_min=1,score_ETime2=1,score_ECD_min=1,score_ECD=1] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Delta]
91:/execute @a[tag=!UseE,score_ETime2_min=1,score_ETime2=1,score_ECD_min=3,score_ECD=3] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Gamma]
92:/execute @a[tag=!UseE,score_ETime2_min=1,score_ETime2=1,score_ECD_min=6,score_ECD=6] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Beta]


93:/execute @a[tag=!UseE,score_ETime2_min=2,score_ETime2=2,score_ECD_min=1,score_ECD=1] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Alpha]
94:/execute @a[tag=!UseE,score_ETime2_min=2,score_ETime2=2,score_ECD_min=3,score_ECD=3] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Delta]
95:/execute @a[tag=!UseE,score_ETime2_min=2,score_ETime2=2,score_ECD_min=6,score_ECD=6] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Gamma]

96:/execute @a[tag=!UseE,score_ETime2_min=3,score_ETime2=3,score_ECD_min=1,score_ECD=1] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Beta]
97:/execute @a[tag=!UseE,score_ETime2_min=3,score_ETime2=3,score_ECD_min=3,score_ECD=3] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Alpha]
98:/execute @a[tag=!UseE,score_ETime2_min=3,score_ETime2=3,score_ECD_min=6,score_ECD=6] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Delta]

99:/execute @a[tag=!UseE,score_ETime2_min=0,score_ETime2=0,score_ECD_min=1,score_ECD=1] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Gamma]
100:/execute @a[tag=!UseE,score_ETime2_min=0,score_ETime2=0,score_ECD_min=3,score_ECD=3] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Beta]
101:/execute @a[tag=!UseE,score_ETime2_min=0,score_ETime2=0,score_ECD_min=6,score_ECD=6] ~ ~ ~ tp @a[tag=!UseE] @e[tag=Alpha]

楼主 1041159637  发布于 2016-08-12 23:20:00 +0800 CST  
六、闪回的生命恢复部分
与上文一样的原理。我们需要保存玩家在各个时刻时的血量。当使用时,调取该时刻的血量与当前血量比对即可。如果当前血量小于对应时刻血量则恢复玩家的生命值。
惯例先创建记分板:
(init)102:/scoreboard objectives add Alpha dummy Alpha
(init)103:/scoreboard objectives add Beta dummy Beta
(init)104:/scoreboard objectives add Gamma dummy Gamma
(init)105:/scoreboard objectives add Delta dummy Delta
(init)106:/scoreboard objectives add Alpha2 dummy
(init)107:/scoreboard objectives add Beta2 dummy
(init)108:/scoreboard objectives add Gamma2 dummy
(init)109:/scoreboard objectives add Delta2 dummy
(init)110:/scoreboard objectives add Alpha3 dummy
(init)111:/scoreboard objectives add Beta3 dummy
(init)112:/scoreboard objectives add Gamma3 dummy
(init)113:/scoreboard objectives add Delta3 dummy
(init)114:/scoreboard objectives add Health health 当前生命值
(init)115:/scoreboard objectives add ETime3 dummy 用于E的生命恢复
其中Alpha、beta、gamma、delta都是用来保存血量的、其他2号3号记分板会被用于计算


首先保存各个时刻的血量:

102:/execute @a[score_ETime2_min=1,score_ETime2=1,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime2_min=1,score_ETime2=1,tag=Tracer] Alpha = @a[score_ETime2_min=1,score_ETime2=1,tag=Tracer] Health
103:/execute @a[score_ETime2_min=2,score_ETime2=2,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime2_min=2,score_ETime2=2,tag=Tracer] Beta = @a[score_ETime2_min=2,score_ETime2=2,tag=Tracer] Health
104:/execute @a[score_ETime2_min=3,score_ETime2=3,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime2_min=3,score_ETime2=3,tag=Tracer] Gamma = @a[score_ETime2_min=3,score_ETime2=3,tag=Tracer] Health
105:/execute @a[score_ETime2_min=0,score_ETime2=0,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime2_min=0,score_ETime2=0,tag=Tracer] Delta = @a[score_ETime2_min=0,score_ETime2=0,tag=Tracer] Health
由于反复执行的缘故,新的血量会覆盖旧的血量。


为了不使得后面判断大小时影响上述记分板的分数,我们需要把这些分数在需要使用的时候导入到另一组记分板中。
由于时刻是在走的,所以首先需要获取现在的时刻,这个时刻只会在使用时获取一次,因此它是不会动的。我们需要用这个时刻来进行对应的计算。
106:/execute @a[tag=!UseE,score_ECD_min=1,score_ECD=1] ~ ~ ~ scoreboard players operation @a[tag=!UseE,score_ECD_min=1,score_ECD=1] ETime3 = @a[tag=!UseE,score_ECD_min=1,score_ECD=1] ETime2


然后一直把第一批记分板的数赋值给第二批记分板。
107: /execute @a[tag=!UseE,score_ETime3_min=1,score_ETime3=1,score_ECD_min=1,score_ECD=1] ~ ~ ~ scoreboard players operation @a[tag=!UseE,score_ETime3_min=1,score_ETime3=1,score_ECD_min=1,score_ECD=1] Beta2 = @a[tag=!UseE,score_ETime3_min=1,score_ETime3=1,score_ECD_min=1,score_ECD=1] Beta
108:/execute @a[tag=!UseE,score_ETime3_min=2,score_ETime3=2,score_ECD_min=1,score_ECD=1] ~ ~ ~ scoreboard players operation @a[tag=!UseE,score_ETime3_min=2,score_ETime3=2,score_ECD_min=1,score_ECD=1] Gamma2 = @a[tag=!UseE,score_ETime3_min=2,score_ETime3=2,score_ECD_min=1,score_ECD=1] Gamma
109:/execute @a[tag=!UseE,score_ETime3_min=3,score_ETime3=3,score_ECD_min=1,score_ECD=1] ~ ~ ~ scoreboard players operation @a[tag=!UseE,score_ETime3_min=3,score_ETime3=3,score_ECD_min=1,score_ECD=1] Delta2 = @a[tag=!UseE,score_ETime3_min=3,score_ETime3=3,score_ECD_min=1,score_ECD=1] Delta
110:/execute @a[tag=!UseE,score_ETime3_min=0,score_ETime3=0,score_ECD_min=1,score_ECD=1] ~ ~ ~ scoreboard players operation @a[tag=!UseE,score_ETime3_min=0,score_ETime3=0,score_ECD_min=1,score_ECD=1] Alpha2 = @a[tag=!UseE,score_ETime3_min=0,score_ETime3=0,score_ECD_min=1,score_ECD=1] Alpha


然后赋值到第三批记分板。第三批记分板会被用于计算,所以它的数值是会改变的。如果这里直接用第二批记分板计算会导致后面判断加血完毕时出现问题。所以我使用了第三批记分板。
111: /execute @a[score_ETime3_min=1,score_ETime3=1,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime3_min=1,score_ETime3=1,tag=Tracer] Beta3 = @a[score_ETime3_min=1,score_ETime3=1,tag=Tracer] Beta2
112:/execute @a[score_ETime3_min=2,score_ETime3=2,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime3_min=2,score_ETime3=2,tag=Tracer] Gamma3 = @a[score_ETime3_min=2,score_ETime3=2,tag=Tracer] Gamma2
113:/execute @a[score_ETime3_min=3,score_ETime3=3,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime3_min=3,score_ETime3=3,tag=Tracer] Delta3 = @a[score_ETime3_min=3,score_ETime3=3,tag=Tracer] Delta2
114:/execute @a[score_ETime3_min=0,score_ETime3=0,tag=Tracer] ~ ~ ~ scoreboard players operation @a[score_ETime3_min=0,score_ETime3=0,tag=Tracer] Alpha3 = @a[score_ETime3_min=0,score_ETime3=0,tag=Tracer] Alpha2


然后是通过用这个数减去当前血量的数值。如果是负数和0则代表当前血量比之前大,无需加血。如果是正数则需要加血。这就是判断血量多少的方法。(这里感谢Potter_Lee在我智障的时候提供了帮助)
115: /scoreboard players operation @a[score_ETime3_min=1,score_ETime3=1,tag=Tracer] Beta3 -= @a[score_ETime3_min=1,score_ETime3=1,tag=Tracer] Health
116:/scoreboard players operation @a[score_ETime3_min=2,score_ETime3=2,tag=Tracer] Gamma3 -= @a[score_ETime3_min=2,score_ETime3=2,tag=Tracer] Health
117:/scoreboard players operation @a[score_ETime3_min=3,score_ETime3=3,tag=Tracer] Delta3 -= @a[score_ETime3_min=3,score_ETime3=3,tag=Tracer] Health
118:/scoreboard players operation @a[score_ETime3_min=0,score_ETime3=0,tag=Tracer] Alpha3 -= @a[score_ETime3_min=0,score_ETime3=0,tag=Tracer] Health


然后给正数的玩家加上生命恢复的buff
119: effect @a[tag=!UseE,score_ETime3_min=1,score_ETime3=1,score_Beta3_min=1,score_ECD_min=1,score_ECD=1] regeneration 10 6
120:effect @a[tag=!UseE,score_ETime3_min=2,score_ETime3=2,score_Gamma3_min=1,score_ECD_min=1,score_ECD=1] regeneration 10 6
121:effect @a[tag=!UseE,score_ETime3_min=3,score_ETime3=3,score_Delta3_min=1,score_ECD_min=1,score_ECD=1] regeneration 10 6
122:effect @a[tag=!UseE,score_ETime3_min=0,score_ETime3=0,score_Alpha3_min=1,score_ECD_min=1,score_ECD=1] regeneration 10 6


注意由于加血并不是一瞬间的,所以上面进行计算的指令会不止在1Gametick中计算。而加血之后计算出的结果会慢慢由正数变为0(因为恢复后的当前生命值会逐渐逼近3秒前的生命值)。因此这里我们只需要在计算结果为0时消除掉掉玩家身上的生命恢复buff即可
123: /effect @a[tag=!UseE,score_Beta3=0,score_ETime3_min=1,score_ETime3=1] minecraft:regeneration 0 3
124:/effect @a[tag=!UseE,score_Gamma3=0,score_ETime3_min=2,score_ETime3=2] minecraft:regeneration 0 3
125:/effect @a[tag=!UseE,score_Delta3=0,score_ETime3_min=3,score_ETime3=3] minecraft:regeneration 0 3
126:/effect @a[tag=!UseE,score_Alpha3=0,score_ETime3_min=0,score_ETime3=0] minecraft:regeneration 0 3

楼主 1041159637  发布于 2016-08-12 23:41:00 +0800 CST  
七、脉冲炸弹

这个比较简单就能实现。思路大概和我去年给ColdPotato做的那个“土豆地雷”类似233
主要要解决的问题有二:一是给终极技能充能,而是要实现吸附在生物身上。
惯例,记分板:
(init)141:/scoreboard objectives add Qpower stat.damageDealt 统计伤害来增加充能
(init)142:/scoreboard objectives add QCD dummy 技能Q的使用时间
(init)143:/scoreboard objectives add QCD2 dummy 终极技能(%)
(init)144:/scoreboard objectives add QTimer dummy 用来使时间流逝增加充能
(init)145:/scoreboard objectives add Pulsebomb dummy 脉冲炸弹
Qpower是用来统计上来来增加充能的。QTimer则是用时间来增加充能。
Pulsebomb则是用来给脉冲炸弹计时。当时间到了以后就会发生爆炸。
技能Q的使用时间的用处则是用来让一些指令只在使用技能的一瞬间启用。
QCD2则是用于显示真正的充能状态。


一开始便是和闪回一样的用法来判断玩家是否把技能道具扔出:
146: /scoreboard players tag@aremove UseQ
147:/scoreboard players tag @a[tag=Tracer] add UseQ {Inventory:[{Slot:0b,id:"minecraft:dye",Count:1b,tag:{ench:[],display:{Name:"脉冲炸弹(Q)",Lore:[0:"扔出来施放",]}}}]}
148:/scoreboard players tag @a[tag=!Tracer] add UseQ


检测到扔出道具使用技能了,便给QCD加分。与此同时把玩家的终极技能充能状态清零
149:/scoreboard players add @a[tag=!UseQ] QCD 1
150:/scoreboard players set @a[tag=!UseQ,score_QCD=1,score_QCD_min=1] QCD2 0


当充能完毕以后就不再给QCD记分板加分

151:/scoreboard players set @a[score_QCD2_min=100,tag=Tracer] QCD 0


接下来先实现脉冲炸弹这一部分。首先先实现当脉冲炸弹没有吸附到其他生物的情况

152:/scoreboard players tag @e[type=Item] add Pulsebomb {OnGround:1b,Item:{id:"minecraft:dye",tag:{ench:[],display:{Name:"脉冲炸弹(Q)",Lore:[0:"扔出来施放",]}},Damage:5s}}
153:/execute @e[type=Item,tag=Pulsebomb] ~ ~ ~ /summon ArmorStand ~ ~-0.7 ~ {ArmorItems:[0:{},1:{},2:{},],HandItems:[0:{id:minecraft:dye,Count:1b,Damage:5s,tag:{}}],NoGravity:1b,Tags:["Pulsebomb"],Pose:{Body:[0F,0F,0F],LeftArm:[0F,0F,0F],RightArm:[0F,180F,0F],LeftLeg:[0F,0F,0F],RightLeg:[0F,0F,0F],Head:[0F,0F,0F]},NoBasePlate:1b,DisabledSlots:2039583,Invisible:1b}
154:/kill @e[tag=Pulsebomb,type=Item]
当探测到地上有一个脉冲炸弹的道具时,生成一个手持染料的隐形盔甲架。与此同时把物品kill掉。此时就好像地上有一个不能被捡起的“脉冲炸弹”一样



然后反复地给该AS加分,用于控制倒计时和加分。
155:/scoreboard players add @e[type=ArmorStand,tag=Pulsebomb] Pulsebomb 1
然后在一定的时间后发出声响,警告玩家脉冲炸弹要爆炸了
156: /execute @e[type=ArmorStand,tag=Pulsebomb,score_Pulsebomb=6,score_Pulsebomb_min=6] ~ ~ ~ /playsound block.note.hat block @a[r=7] ~ ~ ~ 10 1
157:/execute @e[type=ArmorStand,tag=Pulsebomb,score_Pulsebomb=12,score_Pulsebomb_min=12] ~ ~ ~ /playsound block.note.hat block @a[r=7] ~ ~ ~ 10 1
158:/execute @e[type=ArmorStand,tag=Pulsebomb,score_Pulsebomb=18,score_Pulsebomb_min=18] ~ ~ ~ /playsound block.note.hat block @a[r=7] ~ ~ ~ 10 1
159:/execute @e[type=ArmorStand,tag=Pulsebomb,score_Pulsebomb=24,score_Pulsebomb_min=24] ~ ~ ~ /playsound block.note.hat block @a[r=7] ~ ~ ~ 10 1
160:/execute @e[type=ArmorStand,tag=Pulsebomb,score_Pulsebomb=30,score_Pulsebomb_min=30] ~ ~ ~ /playsound block.note.hat block @a[r=7] ~ ~ ~ 10 1


当时间到了以后发生爆炸。其实原理就是召唤了一个马上就爆炸的Creeper
161:/execute @e[type=ArmorStand,tag=Pulsebomb,score_Pulsebomb=31,score_Pulsebomb_min=31] ~ ~ ~ /summon Creeper ~ ~1 ~ {powered:0b,Fuse:0s,ExplosionRadius:3b,CustomName:"脉冲炸弹",CustomNameVisible:0,}


接下来到吸附到生物的情况。先移除所有生物的unlucky标签,然后再给物品形式的脉冲炸弹半径为1以内的一个生物添加上unlucky标签。这里由于mc并没有选择生物的选择器,所以我们只好一个一个穷举。
162:/scoreboard players tag @e[type=Item] add ItemPulsebomb {Item:{id:"minecraft:dye",tag:{ench:[],display:{Name:"脉冲炸弹(Q)",Lore:[0:"扔出来施放",]}},Damage:5s}}
163:/execute @e[type=ArmorStand,tag=Pulsebomb,score_Pulsebomb=31,score_Pulsebomb_min=31] ~ ~ ~ scoreboard players tag @e remove unlucky
164:/execute @e[type=Item,tag=ItemPulsebomb] ~ ~ ~ scoreboard players tag @e[r=1,c=1,type=Creeper] add unlucky
.......(之后的指令都是把type后的种类分别改成mc中的所有生物所对应的名称)
199:/execute @e[type=Item,tag=ItemPulsebomb] ~ ~ ~ scoreboard players tag @a[r=1,c=1,tag=!Tracer] add unlucky
最后一条指令是选定除了猎空以外的玩家。因为猎空自己的脉冲炸弹可是不会吸附到自己身上的。


然后检测到如果有标签为unlucky的生物的话就马上给物品形式的脉冲炸弹一个Pulsebomb标签,这个时候经过了一个游戏刻后就会执行153到161号指令,相当于在物品还没落地之前就立即执行了爆炸操作。在即将爆炸的期间我们还需要把该脉冲炸弹不断地tp到这个标签为unlucky的玩家。这样就实现了吸附效果。
200: /execute @e[tag=unlucky] ~ ~ ~ scoreboard players tag @e[type=Item,tag=ItemPulsebomb] add Pulsebomb
201:/execute @e[tag=unlucky] ~ ~ ~ tp @e[type=ArmorStand,tag=Pulsebomb] @e[tag=unlucky]


然后是充能,这个就比较简单了。首先通过伤害来充能,由于damageDealt 这个判据造成的伤害是1比10计算的,如果直接加到终极技能充能状态里的话会导致充能速度太快了。所以这里我们先要把这个数减小一些。我用的办法就是拿这个值除以6,这个时候得到的数值就会比较小了。
202:/scoreboard players operation @a[tag=Tracer] Qpower /= damage 4
203:/scoreboard players operation @a[tag=Tracer] QCD2 += @a Qpower
这里除法运算操作会自动把QPower的数值除以到0.所以也省去了我们手动清零的步骤。


然后是随着时间流逝自动充能
204:/scoreboard players add @a[tag=Tracer] QTimer 1
205:/scoreboard players add @a[score_QTimer_min=60,tag=Tracer] QCD2 1
206:/scoreboard players set @a[score_QTimer_min=60] QTimer 0
相当于每60游戏刻,也就是3s就自动增加1%。


最后当终极技能充满之后就不能让其继续增加了。所以我们要处理超过100分以上(溢出)的情况。直接把超过100分的玩家分数设置成100分即可。这样即使前面的步骤导致分数在100分以上也会自动变为100分。
207:/scoreboard players set @a[score_QCD2_min=100,tag=Tracer] QCD2 100


八、清理记分板
如果玩家摘下了帽子,我们就需要把它所有记分板分数设置为0.这样就可以确保摘下帽子之后不会出现bug。
于是我干脆就直接把非猎空玩家的分数设置为0了。这样既不会影响已经成为猎空的玩家的同时也能保证不出问题。
208: /scoreboard players set @a[tag=!Tracer] number 0
209:/scoreboard players set @a[tag=!Tracer] CD 0
210:/scoreboard players set @a[tag=!Tracer] ETime 0
211:/scoreboard players set @a[tag=!Tracer] ETime2 0
212:/scoreboard players set @a[tag=!Tracer] ECD 2
213:/scoreboard players set @a[tag=!Tracer] ETime3 0
214:/scoreboard players set @a[tag=!Tracer] Alpha 0
215:/scoreboard players set @a[tag=!Tracer] Beta 0
216:/scoreboard players set @a[tag=!Tracer] Gamma 0
217:/scoreboard players set @a[tag=!Tracer] Delta 0
218:/scoreboard players set @a[tag=!Tracer] Alpha2 0
219:/scoreboard players set @a[tag=!Tracer] Beta2 0
220:/scoreboard players set @a[tag=!Tracer] Gamma2 0
221:/scoreboard players set @a[tag=!Tracer] Delta2 0
222:/scoreboard players set @a[tag=!Tracer] Alpha3 0
223:/scoreboard players set @a[tag=!Tracer] Beta3 0
224:/scoreboard players set @a[tag=!Tracer] Gamma3 0
225:/scoreboard players set @a[tag=!Tracer] Delta3 0
226:/scoreboard players set @a[tag=!Tracer] QCD 2
227:/scoreboard players set @a[tag=!Tracer] QCD2 0
228:/scoreboard players set @a[tag=!Tracer] QTimer 0
然后是清理玩家身上的道具
229: /clear @a[tag=!Tracer] gunpowder 0 1 {display:{Lore:[0:"技能正在冷却",]}}
230:/clear @a[tag=!Tracer] nether_star 0 1 {display:{Lore:[0:"扔出来施放",]}}
231:/clear @a[tag=!Tracer] dye 5 1 {display:{Lore:[0:"扔出来施放",]}}
最后还得在没有猎空存在时把之前存储位置的四个实体kill掉
232: /scoreboard players tag @e[tag=T] remove kill
233:/execute @e[tag=Tracer] ~ ~ ~ scoreboard players tag @e[tag=T] add kill
234:/execute @e[tag=!kill,name=T] ~ ~ ~ /kill @e[tag=Alpha]
235:/execute @e[tag=!kill,name=T] ~ ~ ~ /kill @e[tag=Beta]
236:/execute @e[tag=!kill,name=T] ~ ~ ~ /kill @e[tag=Gamma]
237:/execute @e[tag=!kill,name=T] ~ ~ ~ /kill @e[tag=Delta]
首先在猎空存在时给tag=T的那个AS添加一个kill标签,同时一个Gametick之后移除掉并再次添加。这样在猎空存在时tag=T的AS身上就有kill标签,反之则没有。
于是在没有的时候把那四个AEC kill掉。

楼主 1041159637  发布于 2016-08-13 18:26:00 +0800 CST  
嗯看了一下原理已经更的差不多了。


最后我还是想说两句。
老实讲我让大家失望了。憋了那么久结果却只做出了这么个玩意……我自己也不是很满意

况且呢这玩意没想到还撞车了,这锅怪我。
以后估计也没有多少时间做CB作品了(可能),尤其是开学之后……嗯
总之再次感谢所有支持我的人!抱歉!


@651547166@乾坤轩辕1@爱吐槽喵星人@MsYqgzt_nick@魔修尔4
@虾米黄Sammy @34105401s @神隐317 @丶H2F2 @GoldJo金佐
@Mine268 @Sunny路KyLe

楼主 1041159637  发布于 2016-08-13 21:27:00 +0800 CST  
以及这里要感谢一下PCA的懒癌卫士(Procrastinators' Command Backer,简称PCB)!

楼主 1041159637  发布于 2016-08-14 23:46:00 +0800 CST  
@乾坤轩辕1@Sunny路KyLe@651547166
十分感谢推荐


@天空之城TCD@滚大幕

楼主 1041159637  发布于 2016-08-16 15:00:00 +0800 CST  

楼主:1041159637

字数:28436

发表时间:2016-08-11 07:25:00 +0800 CST

更新时间:2017-04-17 23:28:51 +0800 CST

评论数:89条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看