切换风格

默认晚霞 雪山 粉色心情 伦敦 花卉 绿野仙踪 加州 白云 星空 薰衣草 城市 简约黑色 龙珠
回复 0

3

主题

6

帖子

222

积分

论坛萌新

Rank: 1

积分
222
人气
16 点
钻石粒
203 粒
贡献
0 点
论坛币
29 个
爱心
0 点

论坛注册会员

[1.12.2][ECMA]切换式多魔法魔法杖[复制链接]
发表于 2020-8-24 11:09:57 | 显示全部楼层 |阅读模式
脚本例子
脚本版本: 1.12.2
适用版本: 1.12.2 
编写语言: ECMA
最后更新: 2020-08-25
代码版权: 强版权

请注册论坛会员,已便查看高清图片!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 咸鱼羊 于 2020-8-25 18:09 编辑

从进水锅群到现在的项目
终于完成了
大概用途是,Q切换魔法,攻击锁定敌人,右键释放魔法
另外还有魔法的最大数量和权限,玩家使用的魔法序号不能超过这两个
请不要用于商业用途,仅供学习参考,使用文本编辑器查看体验更加。
/*tempdata超好用的!
tempdata,临时数据,类似计分板,1.12.2用put,remove等操控
好处在于写的时候方便,以及更容易看(计分板一坨很乱)*/
function tick(e){
        if(!(e.player.getTempdata().get("MagicPremission") >= 1)){
                //*此处检测是否有魔法权限(是否有记录过数据)
                e.player.getTempdata().put("MagicPremission",1);
                e.player.getTempdata().put("MagicCount",1);
                e.player.getTempdata().put("MagicCD",0);
                //*若没有记录过数据,则重置数据
        }
        var MagicCD = e.player.getTempdata().get("MagicCD")
        //*写个声明变量,方便使用
        if(MagicCD > 0){
                e.player.getTempdata().put("MagicCD",MagicCD-1);
                //*使冷却时间大于0的玩家减少0.5s的冷却时间
        }
        var MagicDetime = e.player.getTempdata().get("MagicDetime")
        //*使用防御魔法时记录的时间
        var nowTime = e.player.world.getTime()
        //*现在的时间
        var MiddleTime = nowTime - MagicDetime
        //*使用防御魔法,到现在所间隔的时间
        if(MiddleTime >= 100 && MagicDetime !== null){
                //*若间隔时间达到5s,且使用时的时间有记录时
                e.player.getTempdata().remove("MagicDetime")
                e.player.getTempdata().remove("MagicDe")
                e.player.message("§b护盾消散!")
                //*清除护盾和护盾消散时间的数据,并文本提示
        }
}
                /*值得一提的是,这里用来判断时间的流逝,我使用了两种方法
                一种是记录时间,然后和另一段时间相减,用两者间隔的时间判断
                一种是设置一个数值,然后用挂tick事件,每0.5s减去数值来计时*/
function keyPressed(e){
        //*按键监听,除了isShiftPresserd等之外按下按键都可以触发代码)
        var MagicItemName = "§7[§6魔法§7] §3红石法杖"
        //*魔法杖的名字
        var TheMaxMagic = 2
        //*魔法数量上限
        var MagicCount = e.player.getTempdata().get("MagicCount");
        //*执行前,玩家的魔法序号(使用的魔法)
        var MagicPremission = e.player.getTempdata().get("MagicPremission");
        //*玩家的魔法等级(权限)
        if(e.key == 16){
                //*条件判断,如果按下的按键是Q
                //*下面是切换魔法的区块
                if(e.player.getMainhandItem().getDisplayName() == MagicItemName){
                        //*检测手上的物品是魔法杖
                        if(MagicCount < TheMaxMagic){
                                //*判断使用魔法小于上限
                                if(MagicCount < MagicPremission){
                                        //*判断玩家魔法等级(MagicPremission)
                                        e.player.getTempdata().put("MagicCount",MagicCount+1);
                                        var MagicCount = e.player.getTempdata().get("MagicCount");
                                        //*更新变量,用于下面的文本提示
                                        e.player.message("§c魔法切换至序号§f"+MagicCount);
                                }else{
                                        //*大于等级的序号归1
                                        e.player.getTempdata().put("MagicCount",1);
                                        var MagicCount = e.player.getTempdata().get("MagicCount");
                                        //*更新变量,用于下面的文本提示
                                        e.player.message("§c魔法切换至序号§f"+MagicCount);
                                }
                        }else{
                                //*大于上限的序号归1
                                e.player.getTempdata().put("MagicCount",1);
                                var MagicCount = e.player.getTempdata().get("MagicCount");
                                //*更新变量,用于下面的文本提示
                                e.player.message("§c魔法切换至序号§f"+MagicCount);
                        }
                }
        }
}
function interact(e){
        //*交互监听(右键)
        var MagicItemName = "§7[§6魔法§7] §3红石法杖"
        //*魔法杖名字
        var SecondMagicKnowItemName = "§7[§6魔法典册§7] §b魔能护盾"
        //*第二级魔法获取物品
        var power = e.player.getExpLevel()
        //*玩家的经验等级(魔力能级),与伤害公式等相关
        var target = e.player.getLastAttacked()
        //*玩家最后一个攻击的目标,用于锁定目标
        var MagicCount = e.player.getTempdata().get("MagicCount");
        var MagicPremission = e.player.getTempdata().get("MagicPremission");
        var MagicCD = e.player.getTempdata().get("MagicCD")
        //*获取数据
        if(e.player.getMainhandItem() !== null){
                //*判断主手不为空
                if(e.player.getMainhandItem().getDisplayName() == MagicItemName){
                        //*判断主手是魔法杖
                        if(MagicCD <= 0){
                                //*判断冷却结束
                                if(power >= 1){
                                        //*判断经验等级不小于1
                                        //*以下是需要锁定敌人的魔法的区块
                                        if(target !== null){
                                                var x = target.getX()
                                                var y = target.getY()
                                                var z = target.getZ()
                                                //*获取锁定目标的坐标
                                                if(MagicCount == 1){
                                                        //*魔法序号1的魔法
                                                        var att = 20 * power
                                                        //*伤害值的公式(经验等级的20倍)
                                                        target.getWorld().explode(x,y,z,1,false,false)
                                                        //*生成一个爆炸
                                                        target.getWorld().spawnParticle("flame",x,y,z,0,0,0,1,300)
                                                        //*生成一个粒子效果
                                                        e.player.getTempdata().put("MagicCD",6)
                                                        //*设置CD时间
                                                        target.setHealth(target.getHealth() - att)
                                                        //*设置目标的血量
                                                        e.player.message("§e§lExplosion!")
                                                        //*使用魔法时的文本提示
                                                }
                                        }else{
                                                if(MagicCount !== 2){
                                                        e.player.message("§6你没有锁定的目标")
                                                }
                                        }
                                        //*以下的不需要锁定敌人的魔法的区块
                                        if(MagicCount == 2){
                                                //*注意!此魔法的减伤部分请自行尝试编写!可删去。
                                                /*此处的if判断请用&&加上所有无需锁定目标的魔法的序号
                                        示例:(MagicCount!==2&&(MagicCount!==3&&MagicCount!==4))*/
                                                var x = e.player.getX()
                                                var y = e.player.getY()
                                                var z = e.player.getZ()
                                                //*获取玩家自身的坐标
                                                var De = 20 * power
                                                //*防御公式(经验等级的20倍)
                                                e.player.getWorld().spawnParticle("splash",x,y,z,0,0,0,1,600)
                                                //*粒子效果
                                                e.player.getTempdata().put("MagicDe",De)
                                                //*设置护盾值
                                                e.player.getTempdata().put("MagicCD",6)
                                                //*设置CD时间
                                                e.player.message("§b§lDefensive!")
                                                //*文本提示
                                                e.player.message("§6使用了魔法护盾!当前护盾值§f"+De)
                                                //*告诉你使用魔法后的护盾值
                                                e.player.getTempdata().put("MagicDetime",e.player.world.getTime())
                                                //*记录当前时间,用于护盾消散
                                        }
                                }else{
                                        //*若等级不足1时的提示
                                        e.player.message("§6剩余魔力达不到施法能级!")
                                }
                        }else{
                                //*若冷却未结束时的提示
                                e.player.message("§6你消耗了魔力!需要休息!剩余时间§f"+MagicCD/2+"s")
                        }
                }
                if(e.player.getMainhandItem().getDisplayName() == SecondMagicKnowItemName){
                        //*判断主手是学习序号二魔法的物品
                        if(MagicPremission < 1){
                                //*当没有达到学习等级时的文本提示
                                e.player.message("§6你的魔法造诣不够学习它!")
                        }else{
                                if(MagicPremission >=2){
                                        //*当超过学习等级时文本提示
                                        e.player.message("§6你的魔法造诣不需要学习它!")
                                }else{
                                        //*扣除物品并调设魔法等级
                                        e.player.getMainhandItem().setStackSize(e.player.getMainhandItem().getStackSize()-1)
                                        e.player.getTempdata().put("MagicPremission",2)
                                }
                        }
                }
        }
}

版权声明:
1.您不能转载本帖
2.您不能声称作者是自己




评分

参与人数 3人气 +6 钻石粒 +10 收起 理由
1370698539 + 2 淡定
star丶星 + 2
Hueihuea + 2 + 10 注释狂魔

查看全部评分

我不是一个合格的咸鱼
现在不是,一会就是。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|自定义NPC脚本中文论坛 ( 蜀ICP备17005795号-3 )

GMT+8, 2020-9-20 03:10 , Processed in 0.083531 second(s), 44 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部