猫史档案馆


代码教程4(综合)二

用户:YJH于YYDSYJH于YYDS查看:0 回复:3 评论:0 创建时间:2022-07-25T15:08:13


var adminsss = []
world.onChat(async ({ entity, message }) => {
    if (entity.isPlayer) {
        if (adminsss.includes(entity.player.name)) {
            if (message == '特殊权限') { entity.player.directMessage('亲爱的创作人员你好!特殊功能包含变大、变小、还原大小、飞行、解除飞行、隐身、现身、隐藏名字、显示名字、幽灵、解除幽灵、发光、还原发光、反光、还原反光、变红色、变蓝色、变绿色、变紫色、变黄色、变浅蓝色、还原颜色、全部还原、禁言(例如:禁言+禁言者名字)、解除禁言(例如:解除禁言+被禁言者名字),提示(禁言和禁言者名字间要加一个空格)。') }
            if (message == '变奥特曼') { entity.player.scale = 10; world.say(entity.player.name + '变大了') }
            if (message == '变小') { entity.player.scale = 0.1; world.say(entity.player.name + '变小了') }
            if (message == '还原大小') { entity.player.scale = 1; world.say(entity.player.name + '还原了大小') }
            if (message == '飞行') { entity.player.canFly = true; world.say(entity.player.name + '开启了飞行模式') }
            if (message == '解除飞行') { entity.player.canFly = false; world.say(entity.player.name + '关闭了飞行模式') }
            if (message == '加速') {
                entity.player.walkSpeed += 10000
                entity.player.runSpeed += 1000
                entity.player.flySpeed += 700
                world.say(entity.player.name + '加速了')
            }
            if (message == '隐身') { entity.player.invisible = true; world.say(entity.player.name + '隐身') }
            if (message == '现身') { entity.player.invisible = false; world.say(entity.player.name + '现身了') }
            if (message == '隐藏名字') { entity.player.showName = false; world.say(entity.player.name + '隐藏了名字') }
            if (message == '显示名字') { entity.player.showName = true; world.say(entity.player.name + '显示了名字') }
            if (message == '幽灵') { entity.player.spectator = true; world.say(entity.player.name + '开启了幽灵模式') }
            if (message == '解除幽灵') { entity.player.spectator = false; world.say(entity.player.name + '关闭了幽灵模式') }
            if (message == '发光') { entity.player.emissive = 1; world.say(entity.player.name + '开启了发光效果') }
            if (message == '还原发光') { entity.player.emissive = 0; world.say(entity.player.name + '还原了发光效果') }
            if (message == '反光') { entity.player.shininess = 1; world.say(entity.player.name + '开启了反光效果') }
            if (message == '还原反光') { entity.player.shininess = 0; world.say(entity.player.name + '还原了反光效果') }
            if (message == '变红色') { entity.player.color.set(1, 0, 0); world.say(entity.player.name + '变成了红色') }
            if (message == '变蓝色') { entity.player.color.set(0, 1, 0); world.say(entity.player.name + '变成了蓝色') }
            if (message == '变绿色') { entity.player.color.set(0, 0, 1); world.say(entity.player.name + '变成了绿色') }
            if (message == '变紫色') { entity.player.color.set(1, 1, 0); world.say(entity.player.name + '变成了紫色') }
            if (message == '变黄色') { entity.player.color.set(1, 0, 1); world.say(entity.player.name + '变成了黄色') }
            if (message == '变浅蓝色') { entity.player.color.set(0, 1, 1); world.say(entity.player.name + '变成了浅蓝色') }
            if (message == '还原颜色') { entity.player.color.set(1, 1, 1); world.say(entity.player.name + '还原了颜色') }
            if (message == '全部还原') {
                entity.player.scale = 1
                entity.player.canFly = false
                entity.player.showName = true
                entity.player.spectator = false
                entity.player.emissive = 0
                entity.player.shininess = 0
                entity.player.color.set(1, 1, 1)
                world.say(entity.player.name + '全部还原了')
            }
            if (message.startsWith('禁言')) {
                if (message.slice(2) == entity.player.name) {
                    entity.player.directMessage('无法禁言自己,请重新尝试!')
                } else {
                    world.querySelectorAll('player').forEach((x) => {
                        if (x.player.name == message.slice(2)) {
                            x.player.directMessage('你已被管喵禁言,请等待管喵解除')
                            world.say('有人犯了错,被管喵禁言了!')
                            x.player.muted = true
                        }
                    })
                }
            }
            if (message.startsWith('进监狱')) {
                if (message.slice(3) == entity.player.name) {
                    entity.player.directMessage('无法让自己进监狱,请重新尝试!')
                } else {
                    world.querySelectorAll('player').forEach((x) => {
                        if (x.player.name == message.slice(3)) {
                            x.player.directMessage('管喵把你扔进监狱了!请好好反省!')
                            x.position.set(92, 13, 245)

                            world.say(`管喵把 ${x.player.name} 扔进监狱了! `)
                        }
                    })
                }
            }
            if (message.startsWith('出监狱')) {
                if (message.slice(3) == entity.player.name) {
                    entity.player.directMessage('无法让自己出狱,请重新尝试!')
                } else {
                    world.querySelectorAll('player').forEach((x) => {
                        if (x.player.name == message.slice(3)) {
                            x.player.directMessage('你已被放出,请不要再违反规则')
                            x.position.set(99, 10, 230)

                            world.say(` ${x.player.name}出狱了! `)
                        }
                    })
                }
            }
            if (message.startsWith('喵')) {
                if (message.slice(4) == entity.player.name) {
                    entity.player.directMessage('无法干掉自己,请重新尝试!')
                } else {
                    world.querySelectorAll('player').forEach((x) => {
                        if (x.player.name == message.slice(6)) {
                            world.say('有人被喵了!')
                            x.hurt(1000000)
                            world.say('管喵击杀了' + x.player.name)
                        }
                    })
                }
            }
            if (message.startsWith('寻找')) {
                if (message.slice(5) == entity.player.name) {
                    entity.player.directMessage('无法寻找自己,请重新尝试!')
                } else {
                    world.querySelectorAll('player').forEach((x) => {
                        if (x.player.name == message.slice(6)) {
                            x.position.set(entity.position.x, entity.position.y, entity.position.z)
                        }
                    })
                }
            }

            if (message.startsWith('解除禁言')) {
                if (message.slice(6) == entity.player.name) {
                    entity.player.directMessage('无法解除禁言自己,请重新尝试!')
                } else {
                    world.querySelectorAll('player').forEach((x) => {
                        if (x.player.name == message.slice(4)) {
                            x.player.directMessage('你已被管喵解除禁言')
                            world.say('有人被管喵解除禁言了!')
                            x.player.muted = false
                        }
                    })
                }
            }
            if (message[0] == "$") {
                if (adminsss.includes(entity.player.name)) {
                    try {
                        if (!message.slice(1).includes('delete Math')) {
                            var code = eval(message.slice(1));
                            world.say(`~>${code}`)
                        } else {
                            world.say('已禁止炸图')
                        }
                    }
                    catch (e) {
                        world.say(e)
                    }
                }
            }
        }
    }
})

world.onChat(({ entity, message }) => {//当有玩家在输入框发送消息
    if (message === '复活') {//如果那名玩家输入的是 1
        entity.hp = entity.maxHp
        entity.position.x = 92
        entity.position.y = 15
        entity.position.z = 243
    }
})

//格式:{'武器名称':['mesh/模型名称.vb', 伤害, 四元数], 武器名称':['mesh/模型名称.vb', 伤害, 四元数], 以此类推......}
var sword = { '脉冲太刀': ['mesh/3剑气.vb', 114514, new Box3Quaternion(0, 0, 0, 1)], '雪葬的星银': ['mesh/剑气_蓝.vb', 50, new Box3Quaternion(0, 0.5, 0, 1)], '木剑': ['mesh/破岩剑气.vb', 50000000000, new Box3Quaternion(0, 0, 0, 1)] }
function getValue(key, valueName) {
    let keys = Object.keys(sword)
    let values = Object.values(sword)
    let index = (valueName == '模型名称') ? 0 : 1;
    for (let i = 0; i <= keys.length - 1; i++) {
        if (keys[i] == key) {
            if (valueName == '模型名称') {
                return values[i][0]
            } else if (valueName == '伤害') {
                return values[i][1]
            } else if (valueName == '四元数') {
                return values[i][2]
            }
        }
    }
}

function radian(angle) {
    return angle * (Math.PI / 180)
}

world.onPress(({ entity, button, raycast }) => {
    if (button == Box3ButtonType.ACTION0) {
        if (Object.keys(sword).includes(entity.hand)) {
            if (!entity.player.sword_qi || entity.player.dead) { return }
            var sword_qi = world.createEntity({
                mesh: getValue(entity.hand, '模型名称'),
                position: new Box3Vector3(entity.position.x + (raycast.direction.x * 3), entity.position.y + 0.2, entity.position.z + (raycast.direction.z * 3)),
                meshScale: new Box3Vector3(0.05, 0.05, 0.05),
                collides: true,
                fixed: false,
                gravity: false,
                meshOrientation: getValue(entity.hand, '四元数').rotateY(Math.atan2(raycast.direction.z, raycast.direction.x))
            })
            sword_qi.owner = entity;
            sword_qi.x = raycast.direction.x
            sword_qi.z = raycast.direction.z
            sword_qi.go = 10
            sword_qi.damage = getValue(entity.hand, '伤害')
            sword_qi.addTag('剑气')
            sword_qi.name = entity.player.name
            entity.player.sword_qi = false;
        }
    }
})

world.onTick(() => {
    world.querySelectorAll('.剑气').forEach((entity) => {
        if (entity.go > 5) {
            if (!entity.velocity.y > 0.1) {
                entity.velocity.x += entity.x / 5
                entity.velocity.z += entity.z / 5
                entity.go -= 1
            } else {
                entity.go = 0
            }
        } else if (entity.go <= 0) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == entity.name) {
                    e.player.sword_qi = true;
                }
            })
            entity.removeTag('剑气')
            entity.destroy()
        } else {
            entity.velocity.x -= entity.x / 7
            entity.velocity.z -= entity.z / 7
            entity.go -= 1
        }
    })

    if (monster <= 19) {
        var m = world.createEntity({//创建一个新实体,并把这个实体赋值给变量m方便以后操作
            mesh: 'mesh/圣诞雪人.vb',//模型名称
            position: new Box3Vector3(randint(229, 251, false), 11, randint(3, 44, false)),//位置,randint()是我写的函数,可以生成一个指定大小的随机数,前两个参数是最小和最大值,最后一个值是是否将随机数四舍五入,new Box3Vector3()中填3个数,分别是xyz
            collides: true,//是否开启碰撞
            fixed: false,//位置是否固定
            meshScale: new Box3Vector3(0.05, 0.05, 0.05),//模型大小。默认0.05, 0.05, 0.05
            enableInteract: true,//是否开启互动
            interactHint: '雪人',//互动上写的字
            interactRadius: 3//互动的距离
        })
        m.onEntityContact(({ other }) => {//当实体产生碰撞时(other是与之碰撞的实体)
            other.isPlayer ? other.hurt(50) : null//三目运算符,这个有点复杂,我把与之相同的代码写在下面
            /*
            if(other.isPlayer){
                other.hurt(50)
            }
            */
        })
        m.hp = 300;//实体的hp
        m.maxHp = 300;//实体的最大hp
        m.enableDamage = true;//实体是否可以扣血
        m.addTag('可被攻击')//给实体添加“可被攻击的标签”
        m.addTag('小雪人')//给实体添加小雪人的标签
        monster += 1;//小雪人数量增加100000
    }
})

world.onEntityContact(({ entity, other }) => {
    if (entity.hasTag('剑气')) {
        if (other.hasTag('剑气')) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == other.name) {
                    e.player.sword_qi = true;
                }
            })
            other.removeTag('剑气')
            other.destroy()
        } else {
            if (other.hasTag('可被攻击')) {
                other.hurt(entity.damage, { attacker: entity.owner })
            }
        }
        world.querySelectorAll('player').forEach((e) => {
            if (e.player.name == entity.name) {
                e.player.sword_qi = true;
            }
        })
        entity.removeTag('剑气')
        entity.destroy()
    }
    if (entity.hasTag('小雪人')) {
        if (other.isPlayer) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == entity.name) {
                    other.hurt(50, { attacker: e })
                }
            })
        }
    }
})

world.onPlayerJoin(({ entity }) => {
    entity.exp = 0;
})

world.onDie(async ({ entity, attacker }) => {
    if (entity.isPlayer) {
        for (let i = 5; i >= 1; i--) {
            entity.player.directMessage('你喵了……复活剩余时间:' + i + '秒')
            await sleep(1000)
        }
        entity.player.forceRespawn()
    } else {
        if (entity.hasTag('小雪人')) {
            monster -= 1;
            attacker.exp += 50;
            attacker.player.directMessage(`你击杀了小雪人,获得了50经验!`)
            entity.destroy();

        }
    }
})

world.onPlayerJoin(({ entity }) => {
    entity.player.message1 = "";
    entity.enableDamage = true
    entity.player.interactTimes = 0;
    entity.enableInteract = true;
    entity.interactRadius = 3;
    entity.interactHint = "与 " + entity.player.name + " 互动";
    entity.onInteract(async ({ entity, targetEntity }) => {
        const result = await entity.player.dialog({
            type: Box3DialogType.SELECT,
            title: targetEntity.player.name,
            content: `和   ${targetEntity.player.name}  互动?`,
            options: ['和TA私聊', '查看TA的信息', '赠送', '发起挑战'],   // 将提供玩家选择的选项放入数组里。
        })
        // 如果玩家点击了屏幕其他区域,取消了对话框。
        if (!result || result === null) {
            entity.player.directMessage('取消互动');
            return;
        }
        if (result.index == 0) {
            const dialog = await entity.player.dialog({
                type: Box3DialogType.INPUT,
                title: "向 " + targetEntity.player.name + " 发送私聊",
                content: `${entity.player.name},请输入私聊内容`,
                confirmText: '发送', // 确定按钮上面的文字。按下确定按钮后,提交回答。
                placeholder: '请输入私聊内容', // 输入框背景上的提示文字。
            });
            targetEntity.player.message1 = dialog;
            targetEntity.player.directMessage('收到 ' + entity.player.name + ' 向你发送的私聊信息,正在打开查看……')
            await sleep(2000);
            targetEntity.player.directMessage('正在查收 ' + entity.player.name + " 发送的私聊信息")
            entity.player.directMessage('对方已收到聊天信息')
            if (dialog) {
                const dialog = targetEntity.player.dialog({
                    type: Box3DialogType.TEXT,
                    title: entity.player.name,    // 对话框标题。通常对应是讲话人的名字。
                    content: targetEntity.player.message1, // 对话框内容。也就是对话正在讲什么。
                });
            }
        }
    })
})

Box喵layer.prototype.graduallyText = function (content/*文本*/, time/*浮动时间*/, property = {}/*其他参数,如title*/) {
    const interval = time / content.length;
    for (let i = 0; i < content.length; i++) {
        const result = this.dialog(Object.assign(property, {
            type: Box3DialogType.TEXT,
            content: content.substring(0, i + 1),
        }))
        if (i < content.length - 1) {
            setTimeout(result.cancel, interval * (i + 1));
        }
    }
}
//使用例子
world.onPlayerJoin(({ entity }) => {
    entity.player.graduallyText('欢迎来到善恶大陆,下面我将为您讲解善恶之规。', 1000);
})

angle = 0;
world.onTick(() => {
    world.querySelectorAll(".法阵").forEach((entity) => {
        entity.meshOrientation.x = Math.sin(angle * 180 / Math.PI);
    })
    angle += 0.0002;
});

const dn = world.querySelector('#xuan.Chei的天眼');
dn.enableInteract = true;
dn.interactRadius = 3;
dn.interactHint = "xuan.Chei的天眼";
dn.onInteract(async ({ entity, targetEntity }) => {
    let sel = await entity.player.dialog({
        title: '监控',
        type: Box3DialogType.SELECT,
        content: '选择监视的地方',
        options: ['黄色', '蓝色', '红色', '绿色', '白色', '黑色', '退出']
    })
    if (sel) {
        // 初始化相机参数
        const lookTarget = new Box3Vector3(0, 0, 0)
        const lookEye = new Box3Vector3(0, 0, 0)
        const lookUp = new Box3Vector3(0, 1, 0)
        // 根据选择的颜色,将lookTarget设置为所看颜色面的中心点坐标
        // 并将lookEye沿着视线拉远距离

        // z轴视线
        if (sel.value == '黄色') {
            lookTarget.set(60, 60, 50)
            lookEye.set(60, 60, 180)
        }
        // z轴视线
        if (sel.value == '蓝色') {
            lookTarget.set(60, 60, 50)
            lookEye.set(60, 60, -60)
        }
        // x轴视线
        if (sel.value == '红色') {
            lookTarget.set(50, 60, 60)
            lookEye.set(180, 60, 60)
        }
        // x轴视线
        if (sel.value == '绿色') {
            lookTarget.set(50, 60, 60)
            lookEye.set(-60, 60, 60)
        }
        // y轴视线俯视
        if (sel.value == '白色') {
            lookTarget.set(60, 70, 60)
            lookEye.set(60, 150, 60)
            // 相机lookUp与相机视线方向不能平行,需修改为(1,0,0)或者(0,0,1)
            lookUp.set(1, 0, 0)
        }
        // y轴视线仰视
        if (sel.value == '黑色') {
            lookTarget.set(60, 70, 60)
            lookEye.set(60, 10, 60)
            // 相机lookUp与相机视线方向不能平行,需修改为(1,0,0)或者(0,0,1)
            lookUp.set(0, 0, 1)
        }
        if (sel.value == '退出') {
            // 用户选择退出,则退出选择界面
            loop = false
        } else {

            // 使用用户选择所对应的参数来设置相机,并弹出对话框
            await entity.player.dialog({
                type: Box3DialogType.TEXT,
                content: `看向${sel.value}面`,
                lookEye: lookEye,
                lookTarget: lookTarget,
                lookUp: lookUp
            })
        }
    }
})

for (const e of world.querySelectorAll('.金币')) { //遍历每一个废品实体
    e.enableInteract = true //开启交互
    e.interactRadius = 2.5 //交互范围
    e.interactHint = e.tags() //交互提示文本显示标签名
    e.interactColor.set(0, 1, 0) //交互提示文本设为绿色设为绿
    e.onInteract(({ entity }) => {
        entity.money += 喵0000000000 //累加废品


        //跟world.say相似, 但只对指定的玩家显示信息而不是对所有玩家广播
        entity.player.directMessage(`${entity.player.name} 获得喵0000000000个Q金币`)
    })
}

console.clear()
for (const e of world.querySelectorAll('.法阵')) { //遍历每一个废品实体
    e.enableInteract = true //开启交互
    e.interactRadius = 2.5 //交互范围
    e.interactHint = e.tags() //交互提示文本显示标签名
    e.interactColor.set(0, 1, 0) //交互提示文本设为绿色
    e.onInteract(({ entity }) => {
        entity.exp += 喵0000000000 //累加废品
        //跟world.say相似, 但只对指定的玩家显示信息而不是对所有玩家广播
        entity.player.directMessage(`${entity.player.name} 获得喵0000000000经验值`)
    })
}
world.onPlayerJoin(({ entity }) => {
    entity.mucai = 0
    world.onClick(async ({ entity, clicker }) => {
        if (entity.hasTag('树')) {
            world.say('砍树中')
            entity.enableDamage = true
            entity.hurt(5)
            if (entity.hp <= 0) {
                entity.mucai += 5
                world.say('获得5木材')
                entity.meshInvisible = true
                await sleep(3000)
                entity.hp = 100
                entity.meshInvisible = false
            }
            entity.enableDamage = false
        }
    })
})

function randint(min, max, round) {
    if (round) {
        return Math.round(min + Math.random() * (max - min))
    } else {
        return min + Math.random() * (max - min)
    }
}
world.onTick(() => {
    world.querySelectorAll('.剑气').forEach((entity) => {
        if (entity.go > 5) {
            if (!entity.velocity.y > 0.1) {
                entity.velocity.x += entity.x / 5
                entity.velocity.z += entity.z / 5
                entity.go -= 1
            } else {
                entity.go = 0
            }
        } else if (entity.go <= 0) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == entity.name) {
                    e.player.sword_qi = true;
                }
            })
            entity.removeTag('剑气')
            entity.destroy()
        } else {
            entity.velocity.x -= entity.x / 7
            entity.velocity.z -= entity.z / 7
            entity.go -= 1
        }
    })
    if (monster <= 19) {
        var m = world.createEntity({//创建一个新实体,并把这个实体赋值给变量m方便以后操作
            mesh: 'mesh/大白鲨(鲨鱼).vb',//模型名称
            position: new Box3Vector3(randint(230, 252, false), 11, randint(50, 83, false)),//位置,randint()是我写的函数,可以生成一个指定大小的随机数,前两个参数是最小和最大值,最后一个值是是否将随机数四舍五入,new Box3Vector3()中填3个数,分别是xyz
            collides: true,//是否开启碰撞
            fixed: false,//位置是否固定
            meshScale: new Box3Vector3(0.07, 0.07, 0.07),//模型大小。默认0.05, 0.05, 0.05
            enableInteract: true,//是否开启互动
            interactHint: '大白鲨',//互动上写的字
            interactRadius: 3//互动的距离
        })
        m.onEntityContact(({ other }) => {//当实体产生碰撞时(other是与之碰撞的实体)
            other.isPlayer ? other.hurt(100) : null//三目运算符,这个有点复杂,我把与之相同的代码写在下面
            /*
            if(other.isPlayer){
                other.hurt(50)
            }
            */
        })
        m.hp = 600;//实体的hp
        m.maxHp = 600;//实体的最大hp
        m.enableDamage = true;//实体是否可以扣血
        m.addTag('可被攻击')//给实体添加“可被攻击的标签”
        m.addTag('大白鲨')//给实体添加小雪人的标签
        monster += 1;//小雪人数量增加100000
    }
})

world.onEntityContact(({ entity, other }) => {
    if (entity.hasTag('剑气')) {
        if (other.hasTag('剑气')) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == other.name) {
                    e.player.sword_qi = true;
                }
            })
            other.removeTag('剑气')
            other.destroy()
        } else {
            if (other.hasTag('可被攻击')) {
                other.hurt(entity.damage, { attacker: entity.owner })
            }
        }
        world.querySelectorAll('player').forEach((e) => {
            if (e.player.name == entity.name) {
                e.player.sword_qi = true;
            }
        })
        entity.removeTag('剑气')
        entity.destroy()
    }
    if (entity.hasTag('大白鲨(鲨鱼)')) {
        if (other.isPlayer) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == entity.name) {
                    other.hurt(100, { attacker: e })
                }
            })
        }
    }
})

world.onDie(async ({ entity, attacker }) => {
    if (entity.isPlayer) {
    } else {
        if (entity.hasTag('大白鲨')) {
            monster -= 1;
            attacker.exp += 100;
            attacker.player.directMessage(`你击杀了大白鲨,获得了100经验!`)
            entity.destroy();
        }
    }
})

function randint(min, max, round) {
    if (round) {
        return Math.round(min + Math.random() * (max - min))
    } else {
        return min + Math.random() * (max - min)
    }
}

world.onTick(({ }) => {
    world.querySelectorAll('.剑气').forEach((entity) => {
        if (entity.go > 5) {
            if (!entity.velocity.y > 0.1) {
                entity.velocity.x += entity.x / 5
                entity.velocity.z += entity.z / 5
                entity.go -= 1
            } else {
                entity.go = 0
            }
        } else if (entity.go <= 0) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == entity.name) {
                    e.player.sword_qi = true;
                }
            })
            entity.removeTag('剑气')
            entity.destroy()
        } else {
            entity.velocity.x -= entity.x / 7
            entity.velocity.z -= entity.z / 7
            entity.go -= 1
        }
    })
    if (monster <= 30) {
        var m = world.createEntity({//创建一个新实体,并把这个实体赋值给变量m方便以后操作
            mesh: 'mesh/喵_火史莱姆.vb',//模型名称
            position: new Box3Vector3(randint(230, 252, false), 11, randint(88, 124, false)),//位置,randint()是我写的函数,可以生成一个指定大小的随机数,前两个参数是最小和最大值,最后一个值是是否将随机数四舍五入,new Box3Vector3()中填3个数,分别是xyz
            collides: true,//是否开启碰撞
            fixed: false,//位置是否固定
            meshScale: new Box3Vector3(0.07, 0.07, 0.07),//模型大小。默认0.05, 0.05, 0.05
            enableInteract: true,//是否开启互动
            interactHint: '火史莱姆',//互动上写的字
            interactRadius: 3//互动的距离
        })
        m.onEntityContact(({ other }) => {//当实体产生碰撞时(other是与之碰撞的实体)
            other.isPlayer ? other.hurt(200) : null//三目运算符,这个有点复杂,我把与之相同的代码写在下面
            /*
            if(other.isPlayer){
                other.hurt(50)
            }
            */
        })
        m.hp = 1000;//实体的hp
        m.maxHp = 1000;//实体的最大hp
        m.enableDamage = true;//实体是否可以扣血
        m.addTag('可被攻击')//给实体添加“可被攻击的标签”
        m.addTag('火史莱姆')//给实体添加小雪人的标签
        monster += 1;//小雪人数量增喵
})

world.onEntityContact(({ entity, other }) => {
    if (entity.hasTag('剑气')) {
        if (other.hasTag('剑气')) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == other.name) {
                    e.player.sword_qi = true;
                }
            })
            other.removeTag('剑气')
            other.destroy()
        } else {
            if (other.hasTag('可被攻击')) {
                other.hurt(entity.damage, { attacker: entity.owner })
            }
        }
        world.querySelectorAll('player').forEach((e) => {
            if (e.player.name == entity.name) {
                e.player.sword_qi = true;
            }
        })
        entity.removeTag('剑气')
        entity.destroy()
    }
    if (entity.hasTag('火史莱姆')) {
        if (other.isPlayer) {
            world.querySelectorAll('player').forEach((e) => {
                if (e.player.name == entity.name) {
                    other.hurt(200, { attacker: e })
                }
            })
        }
    }
})


world.onDie(async ({ entity, attacker }) => {
    if (entity.isPlayer) {
    } else {
        if (entity.hasTag('火史莱姆')) {
            monster -= 1;
            attacker.exp += 400;
            attacker.player.directMessage(`你击杀了火史莱姆,获得了400经验!`)
            entity.destroy();

        }
    }
})
const things1 = [//奖励栏(((
    '钻石剑', '万年魂环', '冰鞋', '冬极白星'//奖品自己加
]
const choujiang1 = world.querySelector('#低级幸运盲盒抽奖机');
choujiang1.enableInteract = true;
choujiang1.interactRadius = 5;
choujiang1.interactHint = "低级抽奖机";
choujiang1.onInteract(async ({ entity }) => {
    if (entity.item.includes('低级抽奖券')) {
        var select = await entity.player.dialog({
            type: 'select',
            title: '低级抽奖机',
            content: '请问是否抽奖',
            options: ['确定', '取消']
        })
        if (!select || select.index == null) return;
        if (select.index == 0) {
            var range = things1[Math.floor(Math.random() * things1.length)];
            if (range != "你什么都没抽到") {
                entity.player.directMessage('你获得了' + range + '~')
                //  textDlg(entity,'抽奖机','你获得了'+range)
                entity.item.push(range);
            }
            else {
                entity.player.directMessage('你什么都没抽到~')
                // textDlg(entity,'抽奖机','你什么都没抽到')
            }
            entity.item.splice(entity.item.indexOf('低级抽奖券'), 1);
        }
    }
    else {
        entity.player.directMessage('你没有低级抽奖券~')
        //textDlg(entity,'抽奖机','你没有抽奖券~')
    }
})

const cj = world.querySelector('#抽奖卷商人');
cj.enableInteract = true;
cj.interactRadius = 3;
cj.interactHint = "抽奖卷商人";
cj.onInteract(async ({ entity, targetEntity }) => {
    if (entity.hp === 0) return;
    var orientation = new Box3Quaternion(0, 0, 0, 1).rotateY(Math.atan2(entity.position.z - targetEntity.position.z, entity.position.x - targetEntity.position.x) + Math.PI / 2);
    targetEntity.meshOrientation.copy(orientation);
    var selectShop = await entity.player.dialog({
        type: 'select',
        title: '装备店',
        content: '请选择你要购买的装备',
        options: ["1张低级抽奖卷—1000金币", "1张中级抽奖卷—10000金币", "1张高级抽奖卷—100000金币", "1张神级抽奖卷—1000000金币"]
    })
    if (!selectShop || selectShop.index == null) return;
    var returnv;
    switch (selectShop.index) {
        case 0:
            if (entity.item.length < 1000) {
                returnv = await selectReturn(entity, selectShop.value, 1000);
                if (returnv == false) return;
                entity.money -= 1000;
                entity.item.push("低级抽奖券");
                return;
            } else {
                entity.player.dialog({
                    type: Box3DialogType.TEXT,
                    title: null,
                    content: '背包满了…'
                });
            }
            break;
        case 1:
            if (entity.item.length < 10000) {
                returnv = await selectReturn(entity, selectShop.value, 10000);
                if (returnv == false) return;
                entity.money -= 10000;
                entity.item.push("中级抽奖券");
                return;
            } else {
                entity.player.dialog({
                    type: Box3DialogType.TEXT,
                    title: null,
                    content: '背包满了…'
                });
            }
            break;
        case 2:
            if (entity.item.length < 100000) {
                returnv = await selectReturn(entity, selectShop.value, 100000);
                if (returnv == false) return;
                entity.money -= 100000;
                entity.item.push("高级抽奖券");
                return;

            } else {
                entity.player.dialog({
                    type: Box3DialogType.TEXT,
                    title: null,
                    content: '背包满了…'
                });
            }

            break;

        case 3:
            if (entity.item.length < 1000000) {

                returnv = await selectReturn(entity, selectShop.value, 1000000);
                if (returnv == false) return;
                entity.money -= 1000000;
                entity.item.push("神级抽奖券");
                return;
            } else {
                entity.player.dialog({
                    type: Box3DialogType.TEXT,
                    title: null,
                    content: '背包满了…'
                });
            }
            break;
    }
})

async function selectReturn(player, value, mon) {
    var name = value.slice(0, value.indexOf(":"));
    var select = await player.player.dialog({
        type: 'select',
        title: name,
        content: '请问是否购买' + name + '?',
        options: ["购买", "取消"]
    })
    if (!select || select.index == null) return false;
    if (select.index == 0 && player.money >= mon) {
        player.player.dialog({
            type: 'text',
            content: '购买成功~'
        })
        return true;
    }
    if (select.index == 1) {
        return false;
    }
    if (select.index == 0 && player.money < mon) {
        player.player.dialog({
            type: 'text',
            content: '你的金币不够~或背包满了~'
        })
        return false;
    }

}
const things2 = [//奖励栏(((
    '钻石剑', '万年魂环', '冰鞋', '冬极白星'//奖品自己加
]
const choujiang2 = world.querySelector('#中级幸运盲盒抽奖机');
choujiang2.enableInteract = true;
choujiang2.interactRadius = 5;
choujiang2.interactHint = "中级抽奖机";
choujiang2.onInteract(async ({ entity }) => {
    if (entity.item.includes('中级抽奖券')) {
        var select = await entity.player.dialog({
            type: 'select',
            title: '中级抽奖机',
            content: '请问是否抽奖',
            options: ['确定', '取消']
        })
        if (!select || select.index == null) return;
        if (select.index == 0) {
            var range = things2[Math.floor(Math.random() * things2.length)];
            if (range != "你什么都没抽到") {
                entity.player.directMessage('你获得了' + range + '~')
                //  textDlg(entity,'抽奖机','你获得了'+range)
                entity.item.push(range);
            }
            else {
                entity.player.directMessage('你什么都没抽到~')
                // textDlg(entity,'抽奖机','你什么都没抽到')
            }
            entity.item.splice(entity.item.indexOf('中级抽奖券'), 1);
        }
    }
    else {
        entity.player.directMessage('你没有中级抽奖券~')
        //textDlg(entity,'抽奖机','你没有抽奖券~')
    }
})

const things3 = [//奖励栏(((
    '钻石剑', '万年魂环', '冰鞋', '冬极白星'//奖品自己加
]
const choujiang3 = world.querySelector('#高级幸运盲盒抽奖机');
choujiang3.enableInteract = true;
choujiang3.interactRadius = 5;
choujiang3.interactHint = "高级抽奖机";
choujiang3.onInteract(async ({ entity }) => {
    if (entity.item.includes('高级抽奖券')) {
        var select = await entity.player.dialog({
            type: 'select',
            title: '高级抽奖机',
            content: '请问是否抽奖',
            options: ['确定', '取消']
        })
        if (!select || select.index == null) return;
        if (select.index == 0) {
            var range = things3[Math.floor(Math.random() * things3.length)];
            if (range != "你什么都没抽到") {
                entity.player.directMessage('你获得了' + range + '~')
                //  textDlg(entity,'抽奖机','你获得了'+range)
                entity.item.push(range);
            }
            else {
                entity.player.directMessage('你什么都没抽到~')
                // textDlg(entity,'抽奖机','你什么都没抽到')
            }
            entity.item.splice(entity.item.indexOf('高级抽奖券'), 1);
        }
    }
    else {
        entity.player.directMessage('你没有高级抽奖券~')

        //textDlg(entity,'抽奖机','你没有抽奖券~')
    }
})
const things4 = [//奖励栏(((
    '雪葬的星银', '薪炎大剑', '天火大剑', '冬极白星', '薙喵之稻光', '真理之钥'//奖品自己加
]
const choujiang4 = world.querySelector('#神级幸运盲盒抽奖机');
choujiang4.enableInteract = true;
choujiang4.interactRadius = 5;
choujiang4.interactHint = "神级抽奖机";
choujiang4.onInteract(async ({ entity }) => {
    if (entity.item.includes('神级抽奖券')) {
        var select = await entity.player.dialog({
            type: 'select',
            title: '神级抽奖机',
            content: '请问是否抽奖',
            options: ['确定', '取消']
        })
        if (!select || select.index == null) return;
        if (select.index == 0) {
            var range = things4[Math.floor(Math.random() * things4.length)];
            if (range != "你什么都没抽到") {
                entity.player.directMessage('你获得了' + range + '~')
                //  textDlg(entity,'抽奖机','你获得了'+range)
                entity.item.push(range);
            }
            else {
                entity.player.directMessage('你什么都没抽到~')
                // textDlg(entity,'抽奖机','你什么都没抽到')
            }
            entity.item.splice(entity.item.indexOf('神级抽奖券'), 1);
        }
    }
    else {
        entity.player.directMessage('你没有神级抽奖券~')
        //textDlg(entity,'抽奖机','你没有抽奖券~')
    }
})


回复

上一页1 页 / 共 1下一页
小白鸡小白鸡

呃呃呃呃

点赞1


评论


一只飞鸽一只飞鸽

你这一大串确定能用

点赞0


评论


仙之鹤仙之鹤

dddd

点赞0


评论