切换风格

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

10

主题

17

帖子

464

积分

大区版主

漫步烟雨

Rank: 7Rank: 7Rank: 7

积分
464
人气
25 点
钻石粒
407 粒
贡献
0 点
论坛币
84 个
爱心
0 点

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

QQ
[1.12.2][ECMA] 目标指引条(带距离)[复制链接]
发表于 2019-4-19 04:13:12 | 显示全部楼层 |阅读模式
脚本例子
脚本版本: 0.1
适用版本: 1.12.2 
编写语言: ECMA
最后更新: 2019-04-19
代码版权: 强版权

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

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

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

个人在制作RPG时构想的一个点子:
- 如何指引玩家到指定地方?
- 指南针加出生点似乎是个不错的主意...但在RPG里用指南针...
- 要不另外显示一个类似于指南针,但可以显示距离的指引条?

由这个点子之下延伸制作的一个目标指引条功能!
(结果做了三个小时,测试中发现N个CNPC在代码上的BUG...日了)

效果图:
Rotation-Test.gif

代码在此:
//假设的目标坐标
var x=8.5;
var y=5;
var z=14.5;

//指引条刷新延时,0为实时
//注意: 启动时会大量发送信息包,请斟酌设置
//不建议高于10,否则体验较差
var ti=0;

function timer(e){
    if(e.id == 61){
        //记录当前玩家坐标
        var px = e.player.getX();
        var py = e.player.getY();
        var pz = e.player.getZ();
        //计算两点的平面角度差
        var ts = Math.atan2((x-px),(z-pz))*(180/Math.PI);
        //获取玩家当前朝向角度
        var tr = e.player.getRotation();
        //计算朝向下的角度差
        var tp = (tr>0?tr-360:tr) + (ts<0?ts+360:ts);
        if(tp<-180){
            tp = tp+360;
        }else if(tp>180){
            tp = tp-360;
        }
        //构建指引条文本
        var tc = "§r[";
        for(var i = -10;i<10;i++){
            if(i==0) tc = tc + "§a|";
            if(((i==-10||i==9) && Math.abs(tp)>105) || (tp>((-i-1)*10-5) && tp<((-i+1)*10-5))){
                tc = tc + "§e-";
            }else{
                tc = tc + "§7-";
            }
        }
        //结束构建并计算三维空间下两点距离并向上取整
        tc = tc + "§r] " + Math.ceil(Math.sqrt(Math.abs((x-px)*(x-px)+(y-py)*(y-py)+(z-pz)*(z-pz)))) + "m";
        //输出指引条
        e.API.executeCommand(e.player.world, "/title " + e.player.getDisplayName() + " actionbar {\"text\":\"" + tc + "\"}");
    }
}

function keyPressed(e){
    //当玩家单击~键运行
    if(e.key==41){
        //如果已启动指引条
        if(e.player.timers.has(61)){
            //停止指引条并清空信息
            e.player.timers.reset(61);
            e.player.timers.stop(61);
            e.API.executeCommand(e.player.world, "/title " + e.player.getDisplayName() + " actionbar {\"text\":\"\"}");
        }else{
            //启动指引条
            e.player.timers.forceStart(61,ti,true);
        }
    }
}


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

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


(累哭...)


评分

参与人数 5人气 +13 钻石粒 +20 收起 理由
豆豆 + 1
Guai_Shou + 4 + 20 很给力!
fankieqiu + 2 赞一个!
pp_Boy + 2 很给力!
粘兽 + 4 很给力!

查看全部评分



回复

使用道具 举报

4

主题

23

帖子

102

积分

论坛萌新

Rank: 1

积分
102
人气
3 点
钻石粒
42 粒
贡献
0 点
论坛币
17 个
爱心
0 点

论坛注册会员

发表于 2019-4-21 14:51:14 | 显示全部楼层
谢谢大佬的脚本。请问一下大佬,这个脚本应该写在哪里呢?是写在forge还是player?
回复

使用道具 举报

10

主题

17

帖子

464

积分

大区版主

漫步烟雨

Rank: 7Rank: 7Rank: 7

积分
464
人气
25 点
钻石粒
407 粒
贡献
0 点
论坛币
84 个
爱心
0 点

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

QQ
发表于 2019-4-21 17:33:02 | 显示全部楼层
fankieqiu 发表于 2019-4-21 14:51
谢谢大佬的脚本。请问一下大佬,这个脚本应该写在哪里呢?是写在forge还是player? ...

用在player里哦


回复

使用道具 举报

4

主题

23

帖子

102

积分

论坛萌新

Rank: 1

积分
102
人气
3 点
钻石粒
42 粒
贡献
0 点
论坛币
17 个
爱心
0 点

论坛注册会员

发表于 2019-4-21 18:03:19 | 显示全部楼层

我复制在player里,然后填好坐标,按下~键,没反应...求解大佬
回复

使用道具 举报

4

主题

23

帖子

102

积分

论坛萌新

Rank: 1

积分
102
人气
3 点
钻石粒
42 粒
贡献
0 点
论坛币
17 个
爱心
0 点

论坛注册会员

发表于 2019-4-21 21:16:14 | 显示全部楼层
fankieqiu 发表于 2019-4-21 18:03
我复制在player里,然后填好坐标,按下~键,没反应...求解大佬

以解决,是我的npc版本问题!大佬的脚本很棒!
回复

使用道具 举报

2

主题

4

帖子

80

积分

论坛萌新

Rank: 1

积分
80
人气
2 点
钻石粒
130 粒
贡献
0 点
论坛币
15 个
爱心
0 点

论坛注册会员

发表于 2019-7-11 14:30:40 | 显示全部楼层
这是循环写title吗!
null
回复

使用道具 举报

1

主题

3

帖子

10

积分

论坛萌新

Rank: 1

积分
10
人气
0 点
钻石粒
14 粒
贡献
0 点
论坛币
1 个
爱心
0 点
发表于 2019-7-18 22:22:42 | 显示全部楼层
不错不错支持哦awa
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-7-3 03:55 , Processed in 0.092639 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部