用户:
神岛的梦_夜查看:2 回复:2 评论:2 创建时间:2022-07-11T22:54:18
大家好啊~
没错!又双叒叕是吾~
今天送给大家一个神奇的《特效》啊~
话不多说,开摆~
--------------------------------------
首先:你需要给这个家伙👇点个关注,毕竟是作者
https://box3.codemao.cn/u/lyc123
喵啪……啊啊啊啊啊啊别打我
--------------------------------------
然后:你需要这个俩👇模型
https://box3.codemao.cn/v/580169
https://box3.codemao.cn/v/8185
名字就是---《喵笔记》以及《灰骷髅头》
--------------------------------------
最后:需要亿点点代码👇
emmmmmmmm,代码有点杂乱……就分开来吧……随便讲讲()
world.onChat(({ entity, message }) => {
if (entity.player.name == '漫漫长夜') {
if (message.startsWith('$')) {
try {
world.say('<~ ' + eval(message.split('$')[1]))
} catch (err) {
world.say('Error:' + err)
}
}
}
})
👆这个嘛,没什么好说的,就是一个简简单单的特权,名字随便改
let players = []
let players_entity = []
world.onPlayerJoin(async ({ entity }) => {
entity.mainHand = ''
players_entity.push(entity)
players.push(entity.player.name)
})
world.onPlayerLeave(({ entity }) => {
players.forEach(function (item, index, arr) {
if (item == entity.player.name) {
arr.splice(index, 1)
}
});
players_entity.forEach(function (item, index, arr) {
if (item == entity) {
arr.splice(index, 1)
}
});
})
👆这个东西,就是玩家进入地图后的一些设置,那个players,就是下面会用到的全部玩家的一个组())
world.onRelease(async ({ entity, button }) => {
if (button == Box3ButtonType.ACTION0) {
if (entity.mainHand == '喵笔记') {
const a = await entity.player.dialog({
type: 'select',
content: '写下如下某人的名字吧',
contentBackgroundColor: [1, 0, 0, 1],
options: players
})
if (a) {
if (a.value == entity.player.name) return
world.querySelectorAll('player').forEach(async (e) => {
if (a.value == e.player.name) {
e.player.walkSpeed = 0
e.player.walkAcceleration = 0
e.player.runSpeed = 0
e.player.runAcceleration = 0
e.player.enableJump = false
for (let i = 0; i < 100; i++) {
e.player.scale += 0.03
e.position.y += 0.03
await sleep(100)
}
const hei = world.createEntity({
mesh: 'mesh/喵笔记.vb',
collides: false,
fixed: true,
meshScale: [0.1, 0.1, 0.1],
position: [e.position.x, 20, e.position.z],
meshColor: [1, 1, 1, 1],
id: entity.player.name
})
const hei1 = world.createEntity({
mesh: 'mesh/喵笔记.vb',
collides: false,
fixed: true,
meshScale: [0.1, 0.1, 0.1],
position:[e.position.x,e.position.y,e.position.z],
meshColor: [1, 1, 1, 1]
})
await sleep(5000)
e.hurt(Infinity, { attacker: hei })
await sleep(2000)
hei.destroy()
hei1.destroy()
for (let i = 0; i < 100; i++) {
e.player.scale = 1
e.position.y -= 0.03
}
e.player.walkSpeed = 0.22
e.player.walkAcceleration = 0.19
e.player.runSpeed = 0.4
e.player.runAcceleration = 0.35
e.player.enableJump = true
}
})
}
}
}
})
👆《特效》主代码,效果自己研究
world.onPlayerJoin(async ({ entity }) => {
entity.lengs = !!(false)
})
async function quanxidun(entity) {
entity.lengs = true;
const qcages = [];
for (let i = 0; i < 16; i++) {//生成16根柱子
const qcage = world.createEntity({
mesh: `mesh/灰骷髅头.vb`,
gravity: false,
collides: true,
fixed: true,
meshScale: [0.05, 0.05, 0.05],
particleLifetime: 0.5,
particleLimit: 1100,
particleRate: 100,
particleSize: [1, 1, 1, 1, 1],
particleColor: [
new Box3RGBColor(0, 0.6, 0),
new Box3RGBColor(0, 0.5, 0),
new Box3RGBColor(0, 0.5, 0),
new Box3RGBColor(0, 0.8, 0.6),
new Box3RGBColor(0, 0.9, 0),
],
id: entity.player.name,
particleVelocitySpread: [1, 1, 1],
})
qcage.angle = Math.PI * 0.4 * i;
qcages.push(qcage);
qcage.onEntityContact(({ other }) => {
if (other.hasTag('hp')) return;
other.hurt(100, {
attacker: qcage,
})
})
}
const center = entity.position;
for (let i = 0; i < 1000; i++) {
qcages.forEach((e) => {
e.addTag('j')
e.angle += 0.009;
e.direction = entity.direction
e.position = center.add({ x: Math.cos(e.angle) * 3, y: 0, z: Math.sin(e.angle) * 3 });
world.addCollisionFilter('.j', '.' + e.id)
})
await sleep(10);
}
for (let i = 0; i < 25; i++) {
qcages.forEach((e) => {
e.position.x = entity.position.x
e.position.z = entity.position.z
e.angle += 0.1;
e.position.y += 0.2;
})
await sleep(喵);
}
qcages.forEach((e) => {
e.destroy();
})
entity.lengs = false;
}
const Quat = new Box3Quaternion(0, 0, 0, 1)// box引擎默认的旋转朝向
let allPlayers = []//所有玩家
let allZombies = []//所有僵尸
world.onTick(async ({ tick }) => {//每秒16个tick
allPlayers = world.querySelectorAll('player')
allZombies = world.querySelectorAll('.j')
allZombies.forEach(async (e) => {
let zomPos = e.position
let target = allPlayers.sort((a, b) => {//僵尸寻找距离最近的玩家
return a.position.distance(zomPos) - b.position.distance(zomPos)
})[0]
if (target) {//地图如果还有玩家
e.target = target//让僵尸记住要追杀的玩家
}
if (e.target && !e.target.destroyed) {//如果要追杀的玩家还没有离开地图
var direction = e.target.position.sub(zomPos); //僵尸往玩家的方向矢量
var dist = direction.mag() //矢量的长度
var speed = 0.00000001 //速度0.2~0.5随机
e.velocity.x = direction.x * speed / dist
e.velocity.z = direction.z * speed / dist
// 让僵尸面向自己的前进方向
var orientation = Quat.rotateY(Math.atan2(e.velocity.z, e.velocity.x))
e.meshOrientation.copy(orientation)
}
})
})
world.onPress(async ({ entity, button }) => {
if (button == "action0") {
entity.addTag(entity.player.name)
switch (entity.mainHand) {
case '喵笔记':
if (!entity.lengs) quanxidun(entity); entity.addTag(entity.player.name)
break;
}
}
})
👆最后加上亿点点效果,OK!大功告成(别问我姜丝是什么
注:那个16根柱子不用管他,作者实践时貌似只能弄出5个,貌似是模型太多……┭┮﹏┭┮
-----------------------------------------
好啦!这个教程就氵到这里~你学废了吗?
快去试试(就逝世)吧~~