猫史档案馆


【神岛氵教程】《喵笔记》特效

用户:神岛的梦_夜神岛的梦_夜查看: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个,貌似是模型太多……┭┮﹏┭┮

-----------------------------------------

好啦!这个教程就氵到这里~你学废了吗?

快去试试(就逝世)吧~~

 


回复

上一页1 页 / 共 1下一页
神岛的梦_夜神岛的梦_夜

注意:刚出炉的代码~热乎的~bug请提出嚄~

点赞0


评论


DebugDynamoDebugDynamo

沙发!

点赞0


评论