用户:ZH-Y-Q查看:60 回复:42 评论:60 创建时间:2020-06-06T17:23:01
下面是本人在最近BOX3开发之路上
自己摸索出来的一些喵代码,
为了大家少掉坑、不掉🕳
稍稍整理了一下,
所以难免会有些差错,
欢迎您在下方留言反馈!
索引(戳一下,有超链接)
①电梯类
1)普通电梯(无门)
STEP1 首先,在你要装电梯的地方放上一块模型(随便怎么样的都行,建议薄一点)。
STEP2 ①选中你的电梯模型,②选择第一个(i)的东西,然后来到【基本】界面。
STEP3 把【名字】改成dt,再添加一个dt的标签。
STEP4 编辑代码。进入代码编辑页面。在任意位置(当然要在最外层,最好在最前面!)插入以下代码(注释都写好啦~):
world.querySelectorAll('.dt').forEach(async(e)=>{//普通电梯代码
var v=0.2;//电梯的速度 调这个地方就行了,不过建议速度不要超过0.5
//不然人要会被弹飞的……
var h=200;//电梯要运行到的高度 也只需要调这个地方
var i=1;//这个别改它
while(true){
i=1;
while(i<=h){//上行
e.position.y+=v;
await sleep(100);
i++;
}
i=1;
while(i<=h){//下行
e.position.y-=v;
await sleep(100);
i++;
}
}
})
OK!大功告成!看看效果(在wonderful city):
LOOK!!!电梯上去了!
2)高级电梯(有电梯门)
STEP1 首先,和上面一样,先弄一个实体,然后选中,点击(i),进入【基本】选项,把名字和标签都改成555。
STEP2 然后在电梯的左边弄一个门的实体。选中,然后像上面弄电梯的方式一样,把名字和标签都改成门。如图:
STEP3 再到电梯顶上弄一个门。选中这个刚刚造好的门,点击【复制】。
然后你会看到这个门突然闪了一下。
STEP4 点击“移动”图标:
然后门这个实体就有很多小箭头。
按住绿色的那个箭头,往上拖。
然后拖到顶上,再用相应的方向箭头调整位置。
注意:这一次要把门挡在门口!
STEP5 编辑标签,把刚刚移动上来的门的标签编辑成门2。
STEP6 添加代码
在js文件头部或者尾部插入以下代码:
world.querySelectorAll('.555').forEach(async(e)=>{//made by ZH-Y-Q
e.st=-1;//0在运行,-1在地面,1在上面
e.onClick(async({entity,clicker})=>{
var high=60;
if(e.st==-1){
clicker.position.set(44,10,54);
clicker.player.directMessage('电梯上行~');
e.st=0;
world.querySelectorAll('.门').forEach(async(ee)=>{
for(var j=0;j<32;j++){
ee.position.z-=0.1;
await sleep(10);
}
})
for(var i=0;i<high;i++){
e.position.y+=0.5;
await sleep(200);
}
e.st=1;
world.querySelectorAll('.门2').forEach(async(ee)=>{
for(var j=0;j<32;j++){
ee.position.z+=0.1;
await sleep(10);
}
})
}
else if(e.st==0)
e.say('请稍后……');
else{
clicker.position.set(44,40,54);
clicker.player.directMessage('电梯下行~');
e.st=0;
world.querySelectorAll('.门2').forEach(async(ee)=>{
for(var j=0;j<32;j++){
ee.position.z-=0.1;
await sleep(10);
}
})
for(var i=0;i<high;i++){
e.position.y-=0.5;
await sleep(200);
}
e.st=-1;
world.querySelectorAll('.门').forEach(async(ee)=>{
for(var j=0;j<32;j++){
ee.position.z+=0.1;
await sleep(10);
}
})
}
})
})
高度和速度都自己调哈~
---------------------------------电梯-完结-分割线-撒花!----------------------------------------
STEP1 首先,你需要建造一个火车。如图所示,铺上地板、车头、车尾、车门。
自己弄几块板调整方向和大小,自己弄哈~
STEP2 然后把这些板统统命名为train,并把标签都弄成train。
STEP3 插入以下代码:
var train_run=0;//0在起点 1在运行
world.querySelectorAll('.train').forEach(async(e)=>{//ZH-Y-Q
var v=+0.3;//速度 挑一个地方就够了
while(true){
if(train_run==0){
train_run=1;
e.say('天空公交车10秒后发车!');
}
await sleep(10000);
for(var i=1;i<=120;i++){
e.position.y+=v;
await sleep(100);
}
for(var i=1;i<=220;i++){
e.position.z-=v;
await sleep(100);
}
for(var i=1;i<=320;i++){
e.position.x-=v;
await sleep(100);
}
for(var i=1;i<=120;i++){
e.position.x-=v;
await sleep(100);
}
for(var i=1;i<=320;i++){
e.position.x+=v;
await sleep(100);
}
for(var i=1;i<=120;i++){
e.position.x+=v;
await sleep(100);
}
for(var i=1;i<=220;i++){
e.position.z+=v;
await sleep(100);
}
for(var i=1;i<=120;i++){
e.position.y-=v;
await sleep(100);
}
train_run=0;
}
})
然后就能坐上天空公交车啦!完美~
相信大家对跑酷传送点并不陌生了,这里简要介绍一下。
1)STEP1 建立一个传送点模型。
设置参数,把标签改成以下这样子:
STEP2 添加代码:
world.querySelectorAll('.传送-浮空屋').forEach(async(e)=>{
e.onEntityContact(async({entity,other})=>{
if(other.isPlayer){
other.position.set(84,42,26);//把你要传送的地点改一下!
}
})
})
可以了可以了。
2)另外还有跑酷记录点(先插入代码吧):
world.querySelectorAll('.跑酷').forEach((e)=>{
e.onEntityContact(({entity,other})=>{ //设置目标模型的碰撞事件.
if(!other.isPlayer){return} //防止非玩家实体参与检测.
other.position.set(93,52,23);
world.say(other.player.name+'开始跑酷喽~');
if(other.position.y<20){
entity.player.forceRespawn();
}
})
})
然后新建一个实体,添加一个标签为跑酷。OK。
1)飞机
弄一个飞机,如图,改一下标签,其它随意。
插入代码:
world.querySelectorAll('.planez-').forEach(async(e)=>{//感谢toby
var v=0.3;//速度 挑一个地方就够了
while(true){
e.position.z-=v;
if(e.position.z<0){
e.position.z=128
}
await sleep(10)
}
})
然后飞机就飞起来了!
2)吉吉喵重拳
新建一个实体,
改一下标签,其他随意。
插入代码!!!
world.querySelectorAll('.吉拳').forEach(async(e)=>{
while(true){
for(var i=1;i<=10;i++){
e.position.y+=1;
e.position.z+=1;
e.position.x+=1;
await sleep(100);
}
for(var i=1;i<=10;i++){
e.position.y-=1;
e.position.z-=1;
e.position.x-=1;
await sleep(100);
}
}
})
world.querySelectorAll('.吉拳').forEach((e)=>{
e.onEntityContact(({entity,other})=>{ //设置目标模型的碰撞事件.
if(!other.isPlayer){return} //防止非玩家实体参与检测.
world.say('吉吉喵超重拳!!!');
other.velocity.y+=1.5;
other.velocity.x-=1.5;
})
})
然后,“吉吉喵超重拳”!
3)弱 智地铁(滑稽
首先弄一个很厚的实体,放在地道里。
把标签改一下:
then,插入代码:
world.querySelectorAll('.metro').forEach(async(e)=>{
while(true){
e.position.z-=3;
await sleep(100);
if(e.position.z<=10)
e.position.z=90;
}
})
X,Y,Z的方向要自己调一下,不然可能会失控!
这里举一个变身战机的例子。
新建一个实体,改一下标签:
然后插入代码:
world.querySelectorAll('.planex').forEach((e)=>{
e.onEntityContact(({entity,other})=>{ //设置目标模型的碰撞事件.
if(!other.isPlayer){return} //防止非玩家实体参与检测.
other.mesh=entity.mesh; //设置玩家的外观.
other.meshScale=entity.meshScale; //设置玩家外观缩放比例.
other.player.invisible=true; //如果模型比玩家小,就需要隐藏玩家的皮肤.
other.player.runSpeed=1.2;
other.player.canFly=true;
world.say(other.player.name+' 开走了战舰')
})
})
行了行了。
1)蹲下回血
world.onPress(({ button, entity, position, pressed, raycast, tick }) => {
if (button == 'crouch') {
if (entity.hp <= 100) {
if (entity.player.shininess < 100) {
entity.player.shininess += 0.01;
entity.hp += 10;
entity.player.directMessage("你使用了绷带!");
} else if (entity.player.shininess == 100) {
entity.player.shininess += 0.01;
entity.hp += 10;
entity.player.directMessage("你使用了【最后一个】绷带!");
} else {
entity.player.directMessage("使用次数达到上限!");
}
}
else {
entity.player.directMessage("血量达到上限!");
}
}
});
2)回血点
先新建一个实体,标签为回血点,然后弄代码:
})
world.querySelectorAll('.回血点').forEach(async(e)=>{
e.onEntityContact(({entity,other})=>{
other.hp=100;
e.say('恭喜'+clicker.player.name+'回血成功!');
})
})
3)开喵增加攻击力
新建一个喵实体,标签为:tank2
代码(赠送隐形、现形代码):
world.querySelectorAll('.tank2').forEach(async(e)=>{
e.onEntityContact(({entity,other})=>{
other.player.directMessage('说:恢复\n来变回原形!')
other.mesh=entity.mesh;
other.meshScale=new Box3Vector3(1 / 16, 1 / 16, 1 / 16);
other.meshOrientation=new Box3Quaternion(0, 180, 0, 1)
other.player.invisible=true;
other.player.runSpeed=2;
other.player.walkSpeed=1;
other.player.gongji=30;
})
})
world.onChat(async({message,entity})=>{
if(message=='隐形'){//NB
entity.player.invisible=true;
}else if(message=='现形'||message=='显形'){
entity.player.invisible=false;
}else if(message=='回血'){
entity.player.hp+=1;
}else if(message=='回满血'){
entity.player.hp = entity.player.maxHp
}else if(message=='恢复'){
entity.mesh=world.mesh;
entity.player.invisible=false;
entity.player.runSpeed=0.4;
entity.player.walkSpeed=0.22;
entity.player.gongji=20;
}
})
行了行了,散了散了。。。
嗯哼?还没走?……那继续吧……
自己去看shy大佬的教程吧!(doge
关于说话传送:
world.onChat(async({message,entity})=>{
if(message=='传送'){
entity.position.set(100,100,100);//这里修改下xyz的坐标位置!
}
})点赞0
评论
关于隐身+随意穿墙+第一人称的摄影师特效:
world.onPlayerJoin(({ entity }) => {
if(entity.player.name=='123'||entity.player.name=='编程猫'){
entity.player.cameraMode = 'fps';
console.log('setting camera mode:', entity.player.cameraMode);
entity.player.spectator=true;
entity.player.invisible=false;
}
});
本代码在地图《横店影视城》使用。
点赞0
评论
关于点击实体传送:
1,新建一个实体,添加标签go。
2,然后插入代码:
world.querySelectorAll('.go').forEach(async(e)=>{
while(true){
e.onClick(async({entity,clicker})=>{
clicker.position.set(88,43,88);
clicker.onClick(async({clicker})=>{
clicker.hp-=10;
})
entity.say('你进入了XXX,10秒后退出!');
await sleep(10000);
clicker.position.set(88,10,88);//这里要传送到的坐标自己改哈
})
e.say('点我进入XXX!');
await sleep(60000);
}
})点赞0
评论