我回归了,看着昨天1.9快照发布我就做了一发悬浮装置,原理是1.9的新的药水效果---Levitation失重。
被赋予失重效果的玩家会缓慢上升,可以向四周浮动。药水效果等级越高,升的就越快,结束后pia ji一下掉下来。
但是像其他药水一样,它也有一些特别的等级:
当玩家Levitation等级为1-127时,玩家的上升速度会随着等级增高,127为最快的速度(火箭)。
当玩家Levitation等级为128-254时,玩家从255开始往下的重力会增加(就是说上升速度变成了下降速度),128为重力最高,下落的最低速度与最高速度分别小于大于普通玩家下坠速度。
当玩家Levitation等级为255时,玩家不受重力,升力影响,卡住不动。
还有就是当玩家的Levitation等级为128-255时受到掉落伤害,会鬼畜的蹭的一下冲上云霄
我们将使用到其中3个等级,2、255、253。所谓悬浮,就是玩家与地面保持一定的距离,在空中漂浮。这个装置的原理就是当玩家靠近地面时,让玩家上升;玩家太高时,让玩家下降;在正确的高度时,让玩家稳定的漂浮。
------------------------------------------------------<分界线>------------------------------------------------------
讲解视频:
http://player.youku.com/player.php/sid/XMTI5NzE0MzIzNg==/v.swf
------------------------------------------------------<分界线>------------------------------------------------------
首先需要4个变量
普通探测位置的Dummy变量
- scoreboard objectives add Flow dummy
位置1计时器
- scoreboard objectives add FlowTimer dummy
位置2计时器
- scoreboard objectives add Flow2Timer dummy
位置3计时器
- scoreboard objectives add Flow3Timer dummy
之后要准备一个高频,然后连上一下三个指令。
- execute @a ~ ~ ~ detect ~ ~-1 ~ minecraft:air 0 scoreboard players set @p Flow 1
- execute @a ~ ~ ~ detect ~ ~-2 ~ minecraft:air 0 scoreboard players set @p[score_Flow_min=0,score_Flow=0] Flow 1
- scoreboard players remove @a[score_Flow_min=0] Flow 1
处理结果:
当玩家贴近地面时,Flow值为-1
当玩家与地面的距离合适(距离为1)时,Flow值为0
当玩家高于合适距离时,Flow值为0
这样我们就算是判断出玩家与地面的距离关系了,接下来由于药水等级在某些情况下不能直接用effect改变,需要清除效果再进行effect。所以添加以下指令连接到高频。
- scoreboard players add @a[score_Flow_min=-1,score_Flow=-1,score_FlowTimer=30] FlowTimer 1
- scoreboard players add @a[score_Flow_min=0,score_Flow=0,score_Flow2Timer=30] Flow2Timer 1
- scoreboard players add @a[score_Flow_min=1,score_Flow=1,score_Flow3Timer=30] Flow3Timer 1
当玩家Flow值为-1的时候,开启计时器FlowTimer,一直加到31。
当玩家Flow值为0的时候,开启计时器Flow2Timer,一直加到31。
当玩家Flow值为1的时候,开启计时器Flow3Timer,一直加到31。
之后我们还需要6个指令来配合上面的3个指令。
- scoreboard players set @a[score_Flow_min=-1,score_Flow=-1] Flow3Timer 0
- scoreboard players set @a[score_Flow_min=-1,score_Flow=-1] Flow2Timer 0
- scoreboard players set @a[score_Flow_min=0,score_Flow=0] Flow3Timer 0
- scoreboard players set @a[score_Flow_min=0,score_Flow=0] FlowTimer 0
- scoreboard players set @a[score_Flow_min=1,score_Flow=1] Flow2Timer 0
- scoreboard players set @a[score_Flow_min=1,score_Flow=1] FlowTimer 0
将所有的汇总起来,差不多是这个样子的:
处理结果:
当玩家接近地面时,开启玩家的FlowTimer计时器并清空其他计时器,数到31
当玩家与地面距离合适时,开启玩家的Flow2Timer计时器并清空其他计时器,数到31
当玩家过度高于地面时,开启玩家的Flow3Timer计时器并清空其他计时器,数到31
之后我们就开始弄玩家的药水效果了
- effect @a[score_Flow3Timer_min=1,score_Flow3Timer=1] minecraft:levitation 0
- effect @a[score_Flow2Timer_min=1,score_Flow2Timer=1] minecraft:levitation 1 0 true
- effect @a[score_FlowTimer_min=1,score_FlowTimer=1] minecraft:levitation 0
- effect @a[score_Flow3Timer_min=2] minecraft:levitation 1 253 true
- effect @a[score_Flow2Timer_min=2] minecraft:levitation 1 255 true
- effect @a[score_FlowTimer_min=2] minecraft:levitation 1 2 true
处理结果:
当玩家接近地面并开启FlowTimer计时器时,计时器数到1时将目前的药水效果清除,然后计时器大于2时并持续给予2级的Levitation药水效果,相当于上升。
当玩家上升/下降到适合的与地面的距离并开启Flow2Timer计时器时,计时器数到1时给予玩家1秒的2级Levitation,然后计时器大于2时并持续给予255级的Levitation药水效果,相当于悬浮。
当玩家高于地面并开启Flow3Timer计时器时,计时器数到1时将目前的药水效果清除,然后计时器大于2时并持续给予253级的Levitation药水效果,相当于上升。
这样就可以完成了,每次遇到障碍时,玩家就会向上上升,然后上升到一定程度停止上升。当玩家因为某些情况与地面的距离高于限定高度时(例如跳悬崖),就会缓慢下降知道回到正确的与地面的距离。
PS:
还有标题说了“百合子欧米茄”,这是实现的她的悬浮行走的移动方式。在视频中也演示了一下她的攻击方式,都是按原RA3来制作的,攻击方式下次将会讲到。还有视频可能解释的不清楚,如果只是想知道原理的话还是看文字教程为好。
------------------------------------------------------<分界线>------------------------------------------------------
Command Block Logic是2014-2-23刚成立不久的国内主攻研究命令方块的小组。现成员涵盖了现在在MCBBS内研究指令方块的高端玩家和爱好者。
组员作品:
PotatoMaster101:PM的指令方块索引贴
贰逼:贰逼的技巧教程索引贴
songfeitong:Soft的滤器与指令索引贴(其他都是精都不好意思见人了=A=)
ghyzhi10086:87的粘液块作品索引贴
末影矿工:woody的猪飞
sylqiuyifeng:syl的猪爆
卅个屮:Ray5d的超级掘一死战
953301477:⑨的建筑索引贴
Command Block Logic,欢迎各位的加入!
http://www.mcbbs.net/thread-302146-1-1.html
本人优酷:http://i.youku.com/WoodyMo
本人微博:http://weibo.com/WoodyMo
CBL官方微博:http://weibo.com/u/5624468659
>>本人索引贴链接<
[groupid=546]Command Block Logic[/groupid]