切换风格

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

20

主题

35

帖子

557

积分

萌新

Ko no Hueihuea da!!!!!!!!!!!!!

Rank: 10Rank: 10Rank: 10

积分
557
人气
27 点
钻石粒
62 粒
贡献
10 点
论坛币
85 个
爱心
0 点

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

QQ
[1.12.2][ECMA]播放木偶动画——宽带在燃烧[复制链接]
发表于 2019-4-12 17:34:27 | 显示全部楼层 |阅读模式
脚本例子
脚本版本: 1.0
适用版本: 1.12.2 
编写语言: ECMA
最后更新: 2019-04-21
代码版权: 强版权

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

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

x
屁话不多说 直接上代码

function playMovements(event,movements,fps){
var isStop=false;
        this.start=function(){
                if(event.npc!=null){
                        var typePuppet=9;
                        if(event.npc.job.getType()!=typePuppet){
                        return;
                        }
                }else{
                return;
                }
        var str;
                for(var x in movements){
                str=movements[x];
                str=str.replace("head",0);
                str=str.replace("leftarm",1);
                str=str.replace("rightarm",2);
                str=str.replace("body",3);
                str=str.replace("leftleg",4);
                str=str.replace("rightleg",5);
                        if(str.search(/[A-Za-z]+/)>=0){
                        throw "An error in line "+x+"."
                        }
                movements[x]=str;
                }
        
        var Thread = Java.type("java.lang.Thread");
        var MyRun = Java.extend(Java.type("java.lang.Runnable"), {
                run: function() {
                var frames=movements;
                var npc=event.npc;
                var parameterFrame=0;
                var parameterValue=1;
                var parameterValuePart=0;
                var parameterValuePitch=1;
                var parameterValueYaw=2;
                var parameterValueRoll=3;
                var parameterValueRefresh=4;
                var FPS=(fps!=null)?fps:50;
                this.getParameters=(
                        function(str){
                        var parameters=str.split(".");
                        parameters[parameterValue]=parameters[parameterValue].split(",");
                        parameters[parameterFrame]=parseInt(parameters[parameterFrame]);
                        parameters[parameterValueRefresh]=(parameters[parameterValueRefresh]!=null)?parameters[parameterValueRefresh]:true;
                        
                                for(var x in parameters[parameterValue]){
                                parameters[parameterValue][x]=parseInt(parameters[parameterValue][x]);
                                }
                        return parameters;
                        }
                );
                        for(var frame=0;frames.length>0;frame++){
                                if(isStop){
                                return;
                                }
                        var parameters=this.getParameters(frames[0])
                                if(parameters[parameterFrame]==frame){
                                frames.shift();
                                npc.job.getPart(parameters[parameterValue][parameterValuePart]).setRotation(
                                parameters[parameterValue][parameterValueYaw],
                                parameters[parameterValue][parameterValuePitch],
                                parameters[parameterValue][parameterValueRoll]);
                                        if(parameters[parameterValueRefresh]!=0){
                                        npc.updateClient();
                                        }
                                }
                        Thread.sleep(1000/FPS);//50fps(0.02*1000)
                        }
                }
        });
        new Thread(new MyRun()).start()
        }
        
        this.stop=function(){
        isStop=true;
        }
/*
*执行木偶动画
*CustomNPCsEvent event:事件对象
*String[] movements:动画配置
*int fps:一秒播放多少帧
*动画配置示例:"0.head,0,0,0,true" "帧.部位,yaw,pitch,roll,是否更新(可选)"
*/
}

//使用示例:

function setTimeout(fn,millis){
var Thread = Java.type("java.lang.Thread");
var MyRun = Java.extend(Java.type("java.lang.Runnable"), {
    run: function() {
        Thread.sleep(millis)
try {
fn.apply();
}catch(err){throw err;} 
    }
});
new Thread(new MyRun()).start()
//延迟millis毫秒执行fn
/*
*function fn:要运行的function对象
*int millis:延迟的毫秒
*/
}

function interact(e){
var temp=new playMovements(e,
["0.head,0,0,0",
"1.head,3,0,0",
"2.head,7,0,0",
"3.head,10,0,0",
"4.head,14,0,0",
"5.head,18,0,0",
"6.head,21,0,0",
"7.head,25,0,0",
"8.head,28,0,0",
"9.head,32,0,0",
"10.head,36,0,0",
"11.head,39,0,0",
"12.head,43,0,0",
"13.head,46,0,0",
"14.head,50,0,0",
"15.head,54,0,0",
"16.head,57,0,0",
"17.head,61,0,0",
"18.head,64,0,0",
"19.head,68,0,0",
"20.head,72,0,0",
"21.head,75,0,0",
"22.head,79,0,0",
"23.head,82,0,0",
"24.head,86,0,0",
"25.head,90,0,0",
"26.head,93,0,0",
"27.head,97,0,0",
"28.head,100,0,0",
"29.head,104,0,0",
"30.head,108,0,0",
"31.head,111,0,0",
"32.head,115,0,0",
"33.head,118,0,0",
"34.head,122,0,0",
"35.head,126,0,0",
"36.head,129,0,0",
"37.head,133,0,0",
"38.head,136,0,0",
"39.head,140,0,0",
"40.head,144,0,0",
"41.head,147,0,0",
"42.head,151,0,0",
"43.head,154,0,0",
"44.head,158,0,0",
"45.head,162,0,0",
"46.head,165,0,0",
"47.head,169,0,0",
"48.head,172,0,0",
"49.head,176,0,0",
"50.head,180,0,0",
"51.head,183,0,0",
"52.head,187,0,0",
"53.head,190,0,0",
"54.head,194,0,0",
"55.head,198,0,0",
"56.head,201,0,0",
"57.head,205,0,0",
"58.head,208,0,0",
"59.head,212,0,0",
"60.head,216,0,0",
"61.head,219,0,0",
"62.head,223,0,0",
"63.head,226,0,0",
"64.head,230,0,0",
"65.head,234,0,0",
"66.head,237,0,0",
"67.head,241,0,0",
"68.head,244,0,0",
"69.head,248,0,0",
"70.head,252,0,0",
"71.head,255,0,0",
"72.head,259,0,0",
"73.head,262,0,0",
"74.head,266,0,0",
"75.head,270,0,0",
"76.head,273,0,0",
"77.head,277,0,0",
"78.head,280,0,0",
"79.head,284,0,0",
"80.head,288,0,0",
"81.head,291,0,0",
"82.head,295,0,0",
"83.head,298,0,0",
"84.head,302,0,0",
"85.head,306,0,0",
"86.head,309,0,0",
"87.head,313,0,0",
"88.head,316,0,0",
"89.head,320,0,0",
"90.head,324,0,0",
"91.head,327,0,0",
"92.head,331,0,0",
"93.head,334,0,0",
"94.head,338,0,0",
"95.head,342,0,0",
"96.head,345,0,0",
"97.head,349,0,0",
"98.head,352,0,0",
"99.head,356,0,0",
"100.head,360,0,0"]
);
temp.start();//开始播放
setTimeout(function(){temp.stop();},500)//强行打断
}


温馨提示:
默认50fps
在服务器玩太高fps可能会导致网卡?(不确定 反正服务器别飘就完事了)
服务器最好低一点 5fps?
你不一定每帧都写 可以跳着写的
fps只是速度 不代表动画帧数上限
也就是说50fps你动画可以有500帧 甚至更多你可以在配置的最后一项选择该帧是否更新
更新会向本地发包 这会消耗网络资源
(本方法默认每帧更新 mc默认0.5s更新一次)


效果:

                               
登录/注册后可看大图


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


回复

使用道具 举报

0

主题

3

帖子

29

积分

论坛萌新

Rank: 1

积分
29
人气
0 点
钻石粒
34 粒
贡献
0 点
论坛币
8 个
爱心
0 点
发表于 2019-6-4 11:22:32 | 显示全部楼层
灰灰快更plus版
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-7-10 23:33 , Processed in 0.064459 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部