自定义NPC脚本论坛

搜索
查看: 48|回复: 1

[1.12.2]密码门

[复制链接]

6

主题

7

帖子

232

积分

Lv.5 深海明珠

Rank: 8Rank: 8

积分
232
发表于 2021-4-29 23:04:26 | 显示全部楼层 |阅读模式
//粘贴至 脚本门 中
var passwork="12345";//密码,必须五位数字
var maxTryCount=1;//最大尝试次数
var closeGui=false;//超出最大尝试次数是否强制关闭
var updateTryCount=true;//是否允许刷新尝试次数
var cd=60000;//超过最大尝试次数时冷却时间 1000毫秒=1秒
var Guipasswork="";
function init(e){
        var store=e.block.getStoreddata();
        if(!store.has("canOpen")){
         store.put("canOpen","true");
        }
        e.block.setBlockModel("minecraft:iron_door");
}
function doorToggle(e){
        var store=e.block.getStoreddata();
        if(!eval(store.get("canOpen"))){
         e.setCanceled(true);
        }
}
function interact(e){
        var player=e.player;
        if(passwork.length!=5 || isNaN(passwork)){
                player.message("§5§l[密码门]§4密码门产生严重错误!密码必须为五位数字!");
                return;
        }
        var playerName=player.getDisplayName();
        var block=e.block;
        var store=block.getStoreddata();
        if(player.isSneaking() && eval(store.get("canOpen"))){
                store.put("canOpen","false");
                player.message("§5§l[密码门]§2成功上锁!");
                e.setCanceled(true);
                return;
        }
        if(eval(store.get("canOpen"))){
                return;
        }
        if(!store.has("Try_"+playerName)){
                store.put("Try_"+playerName,0);
        }
        if(!store.has("Cd_"+playerName)){
                store.put("Cd_"+playerName,0);
        }
        update_TryCount(store,playerName);
        if(maxTryCount>store.get("Try_"+playerName)){
                GuiShow(player);
                player.getTempdata().put("Open_Passwork",block);
                return;
        }
        var Cd=store.get("Cd_"+playerName);
        var time=((Cd-new Date().getTime())/1000).toFixed(1);
        player.message("§5§l[密码门]§4您已超出尝试次数!请等待 "+time+" 秒后再尝试");
}
function GuiShow(player){
        Guipasswork="";
        var NpcAPI=Java.type("noppes.npcs.api.NpcAPI");
        NpcAPI=NpcAPI.Instance();
        var buttons=[
        ["7","8","9"],
        ["4","5","6"],
        ["1","2","3"],
        ["删除","0","确认"]
        ];
        var gui=NpcAPI.createCustomGui(99,150,256,false);
        gui.setBackgroundTexture("minecraft:textures/gui/demo_background.png");
        for(var a=0;a<buttons.length;a++){
                for(var b=0;b<buttons[a].length;b++){
                        var button=gui.addTexturedButton(a*3+b,buttons[a][b],30+30*b,30+30*a,28,28,"minecraft:textures/gui/container/creative_inventory/tabs.png");
          button.setTextureOffset(0,4);
                }
        }
        for(var c=0;c<5;c++){
         gui.addTexturedRect(12+c,"minecraft:textures/particle/footprint.png",30+c*18,8,16,16,0,0);
        }
        player.showCustomGui(gui);
        gui.update(player);
}
function RGB(R,G,B){
        return B+256*G+65536*R;
}
function update_TryCount(store,playerName){
 if(new Date().getTime()>store.get("Cd_"+playerName) && updateTryCount){
                store.put("Try_"+playerName,0);
                store.put("Cd_"+playerName,new Date().getTime()+cd);
        }
}
function customGuiButton(e){
        var BlockScriptedDoorWrapper=Java.type("noppes.npcs.api.wrapper.BlockScriptedDoorWrapper");
        var player=e.player;
        var playerName=player.getDisplayName();
        var temp=player.getTempdata();
        var block=temp.get("Open_Passwork");
        var store_b=block.getStoreddata();
        var Try=eval(store_b.get("Try_"+playerName));
        var Cd=store_b.get("Cd_"+playerName);
        update_TryCount(store_b,playerName);
        if(Try>maxTryCount && closeGui){
                player.closeGui();
        }
        if(block instanceof BlockScriptedDoorWrapper){
                if(e.gui.getID()==99){
                        var buttons=[
                         "7","8","9",
                         "4","5","6",
                         "1","2","3",
                         "删除","0","确认"
                        ];
                        var pwl=Guipasswork.length;
                        var message=function(mess){
                                e.gui.addLabel(98,mess,25,148,150,16,RGB(0,128,0));
           e.gui.update(player);
                        }
                        switch(buttons[e.buttonId]){
                                case "删除":
                                if(pwl>0){
                                 Guipasswork=Guipasswork.substring(0,pwl-1);
                                 e.gui.addLabel(pwl+17-1,"",36+18*(pwl-1),5,25,25,RGB(255,165,0));
                                 e.gui.update(player);
                                }
                                break;
                                case "确认":
                                if(maxTryCount<Try){
                                        var time=((Cd-new Date().getTime())/1000).toFixed(1);
                                        message("§5§l[密码门]§4频繁操作!请等待 "+time+" 秒后再尝试");
                                        break;
                                }
                                if(passwork.equals(Guipasswork)){
                                        store_b.put("canOpen","true");
                                        block.setOpen(!block.getOpen());
                                        player.message("§5§l[密码门]§2密码正确!");
                                        player.closeGui();
                                        return;
                                }
                                store_b.put("Try_"+playerName,Try+1);
                                message("§4密码错误!您还有 "+(maxTryCount-Try)+" 次机会");
                                break;
                                default:
                                if(pwl>=5){
                                        message("已到达密码门上限");
                                        break;
                                }
                                Guipasswork+=buttons[e.buttonId];
                                e.gui.addLabel(pwl+17,buttons[e.buttonId],36+18*pwl,5,25,25,RGB(255,165,0));
                                e.gui.update(player);
                                break;
                        }
                }
        }
}
function customGuiClosed(e){
        var BlockScriptedDoorWrapper=Java.type("noppes.npcs.api.wrapper.BlockScriptedDoorWrapper");
        var player=e.player;
        player.message("yes");
        var temp=player.getTempdata();
        if(temp.get("Open_Passwork") instanceof BlockScriptedDoorWrapper){
                if(e.gui.getID()==99){
                        temp.remove("Open_Passwork");
                }
        }
}

评分

参与人数 1人气 +5 贡献 +1 收起 理由
小明 + 5 + 1

查看全部评分

回复

使用道具 举报

2

主题

15

帖子

172

积分

Lv.4 地上月影

Rank: 6Rank: 6

积分
172
发表于 2021-4-30 21:29:32 | 显示全部楼层
好!虽然是1.12的脚本我用不着!
回复

使用道具 举报

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

本版积分规则

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