自定义NPC脚本论坛

搜索
查看: 322|回复: 0

[1.12.2]多魔法切换式魔法杖

[复制链接]

7

主题

8

帖子

183

积分

Lv.4 地上月影

Rank: 6Rank: 6

积分
183

论坛元老勋章

QQ
发表于 2021-6-20 12:54:59 | 显示全部楼层 |阅读模式
本帖最后由 咸鱼羊 于 2021-6-26 23:44 编辑

在代码之前,先说些无关紧要事情
这个脚本约是一年前写的,因为闲加了很多的注释(真的很多)
(里面的注释也是年前的)
以及其许多机制的偏旧,虽然有巨大的优化空间,
但因为太长所以不优化了,随他吧~
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);
                //*使减少冷却时间
        }
        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护盾消散!")
        }
}
function keyPressed(e){
        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
                                                        //*伤害值的公式
                                                        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)
                                                        target.setHealth(target.getHealth() - att)
                                                        e.player.message("§e§lExplosion!")
                                                }
                                        }else{
                                                if(MagicCount !== 2){
                                                        e.player.message("§6你没有锁定的目标")
                                                }
                                        }
                                        //*↓无锁定魔法区块
                                        if(MagicCount == 2){
                                                //*减伤部分请自行实现
                                                var x = e.player.getX()
                                                var y = e.player.getY()
                                                var z = e.player.getZ()
                                                var De = 20 * power
                                                //*防御公式
                                                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)
                                                e.player.message("§b§lDefensive!")
                                                e.player.message("§6使用了魔法护盾!当前护盾值§f"+De)
                                                e.player.getTempdata().put("MagicDetime",e.player.world.getTime())
                                                //*记录当前时间,用于护盾消散
                                        }
                                }else{
                                        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{
                                        if(power >= 10){
                                                //*当经验等级达到十级时,扣除物品并调设魔法等级
                                                e.player.getMainhandItem().setStackSize(e.player.getMainhandItem().getStackSize()-1)
                                                e.player.getTempdata().put("MagicPremission",2)
                                                e.player.message("§6你成功学习了序号二魔法!")
                                        }else{
                                                e.player.message("§6你的魔力太过弱小!难以阅读这篇典册!")
                                        }
                                }
                        }
                }
        }
}
原创,不作任何限制
不过我想也没有人会闲到用这个低效难用的法杖吧。

评分

参与人数 1人气 +2 收起 理由
小明 + 2 原创奖励

查看全部评分

暂时没有想好
回复

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表