切换风格

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

10

主题

17

帖子

479

积分

大区版主

漫步烟雨

Rank: 7Rank: 7Rank: 7

积分
479
人气
25 点
钻石粒
417 粒
贡献
0 点
论坛币
89 个
爱心
0 点

论坛审核会员论坛注册会员

QQ
[1.12.2][ECMA] 类领地信息提醒(各种输出方式)[复制链接]
发表于 2019-4-19 18:53:36 | 显示全部楼层 |阅读模式
脚本例子
脚本版本: 0.1-SNAPSHOT
适用版本: 1.12.2 
编写语言: ECMA
最后更新: 2019-04-19
代码版权: 强版权

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

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

x
本帖最后由 Rain_Effect 于 2019-4-21 17:47 编辑

个人在制作RPG时构想的一个点子:
- 玩家进入了一个地方...显示一个提示什么的...
- 让玩家知道现在在什么地方...但我又不想用领地插件...
- 啊对了!自己写一个不就好了吗!


由这个点子之下延伸制作的一个类领地信息提醒脚本就出炉啦!
(实际耗时约一小时)

效果图:
2019-04-19_18.33.29.png
进入区域提醒
2019-04-19_18.33.43.png
退出区域提醒

代码在此:
//区域数据
var lpl = [
    {
        //区域坐标区间 (p1坐标必须小于p2)
        p1:{x:0, y:0, z:0},
        p2:{x:10, y:10, z:10},
        //进入提醒
        enterMsg:{
            //标题信息
            title: "Enter Danger Area",
            //副标题信息
            subtitle: "Be careful",
            //操作栏信息
            actionbar: "Enter Area: Danger area",
            //聊天信息
            message: "You have been enter danger area, be careful.",
            //成就标题信息
            notificationTitle: "Entering Danger Area",
            //成就副标题信息
            notificationSubtitle: "Do you feel fear?"
        },
        //离开提醒
        leaveMsg:{
            title: "Leave Danger Area",
            actionbar: "Leave Area: Danger area",
            message: "You were leaving danger area.",
            notificationTitle: "Leaving Danger Area"
        }
    }
];

//退出游戏时清除数据,以便下次登录再显示
function logout(e){
    var pt = e.player.tempdata;
    if(pt.has("lp")) pt.remove("lp");
}

function tick(e){
    //代码简化区
    var p = e.player;
    var pt = p.tempdata;
    //给予玩家区域状态的临时数据
    if(!pt.has("lp")) pt.put("lp", new Array());
    //遍历所有区域
    for(var i in lpl){
        //代码简化区
        var msg = null;
        var tc = pt.get("lp");
        var tq = tc.indexOf(i);
        //当玩家在区域内
        if( (lpl[i].p1.x<p.x && p.x<lpl[i].p2.x) && (lpl[i].p1.y<p.y && p.y<lpl[i].p2.y) && (lpl[i].p1.z<p.z && p.z<lpl[i].p2.z) ){
            //检查是否未进入过此区域
            if(tq==-1){
                //信息跳转
                var msg = lpl[i].enterMsg;
                //给玩家添加进入数据
                tc.push(i);
                pt.put("lp", tc);
                
            }
        //当玩家不在区域内
        }else{
            //检查是否进入过此区域
            if(tq!=-1){
                var msg = lpl[i].leaveMsg;
                //给玩家移除进入数据
                tc.splice(tq,1);
                pt.put("lp", tc);
            }
        }
        //信息跳转并输出
        if(msg!=null){
            if(msg.title!=null) {
                e.API.executeCommand(p.world, "/title " + p.displayName + " title {\"text\":\"" + msg.title + "\"}");
                e.API.executeCommand(p.world, "/title " + p.displayName + " subtitle {\"text\":\"" + ((msg.subtitle!=null)?msg.subtitle:"") + "\"}");
            }
            if(msg.actionbar!=null) e.API.executeCommand(p.world, "/title " + p.displayName + " actionbar {\"text\":\"" + msg.actionbar + "\"}");
            if(msg.message!=null) p.message(msg.message);
            if(msg.notificationTitle!=null) p.sendNotification(msg.notificationTitle, ((msg.notificationSubtitle!=null)?msg.notificationSubtitle:""), 2);
        }
    }
}


注意:
- 使用前请先关闭commandBlockOutput和logAdminCommands规则,否则会进行前台/后台刷屏
- 关闭方式:/gamerule <规则> false

声明:
  • 你不能转载本帖。
  • 你不能声称作者是自己。

评分

参与人数 2人气 +2 钻石粒 +10 收起 理由
小坤 + 1 + 10 很给力
Hueihuea + 1 还行

查看全部评分



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-9-20 08:39 , Processed in 0.070684 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部