猫史档案馆


【Arena编辑器】利用新版数据库Storage管理玩家

用户:yee剑走天下yee剑走天下查看:12 回复:15 评论:12 创建时间:2023-08-11T09:36:50


功能:可以不管玩家是否在线,直接管理(大部分功能仿照全能的究极玩家管理,但新增加了增加处罚天数和重启容器),对话框控制器,重启地图/容器,聊天区$指令

console.clear();

var admin = ['yee剑走天下'];

var manageStorage = storage.getDataStorage('Manage');
function find(n) { return world.querySelectorAll('player').find(x => x.player.name == n) };


async function getUid(name) {
    let str = '';
    const queryList = await manageStorage.list({
        cursor: 0,
        pageSize: Infinity
    });
    let data = queryList.getCurrentPage().find(x => x.value.name == name);
    if (data) str = data.key;
    return str;
};

async function penalize(entity) {
    let day = parseInt((Date.now() - entity.blackTime) / 1000 / 3600 / 24);
    if (entity.isBlack == 0) entity.player.directMessage('已为您读取数据!');
    if (entity.isBlack == 1) {
        world.say(`玩家${entity.player.name}已被管喵封号处罚!十秒后将被踢出地图!`);
        entity.player.directMessage(`你已被管喵封号处罚,距离封号处罚结束还有${entity.blackDay - day}天!十秒后将被踢出地图!`);
        await sleep(1e4);
        entity.player.kick();
    }
    if (entity.isBlack == 2) {
        world.say(`玩家${entity.player.name}已被管喵禁足处罚!将不能移动!`);
        entity.player.directMessage(`你已被管喵禁足处罚,将不能移动,视角只能朝天!距离禁足处罚结束还有${entity.blackDay - day}天!`);
        entity.player.disableInputDirection = 'both';
        entity.player.jumpPower = 0;
        entity.player.enableCrouch = false;
        entity.player.cameraMode = 'fixed';
        entity.player.cameraTarget = entity.player.spawnPoint.add(new GameVector3(0, 30, 0));
    }
};

function textDialog(entity, title, content) {
    entity.player.dialog({
        type: 'text',
        title,
        content
    });
};

async function selectDialog(entity, title, content, options) {
    return await entity.player.dialog({
        type: 'select',
        title,
        content,
        options
    });
};

async function inputDialog(entity, title, content) {
    return await entity.player.dialog({
        type: 'input',
        title,
        content
    });
};

world.onPlayerJoin(async ({ entity }) => {
    let data = await manageStorage.get(entity.player.userId);
    if (data) {
        Object.assign(entity, data.value);
        await penalize(entity)
    } else {
        Object.assign(entity, { isBlack: 0, blackTime: 0, blackDay: 0 })
        await manageStorage.set(entity.player.userId, { name: entity.player.name, isBlack: 0, blackTime: 0, blackDay: 0 });
        entity.player.directMessage('已为您创建数据!');
    }
});

world.onPlayerLeave(async ({ entity }) => {
    await manageStorage.update(entity.player.userId, () => ({ name: entity.player.name, isBlack: entity.isBlack, blackTime: entity.blackTime, blackDay: entity.blackDay }))
});

world.onPress(async ({ entity, button }) => {
    if (entity.player.walkState == 'crouch' && button == 'action1' && admin.includes(entity.player.name)) {
        const manageMenu = await selectDialog(entity, '管喵系统', '以下是你可以执行的一些操作:', ['封号处罚管理', '禁足处罚管理', '重启地图', '控制台']);
        if (!manageMenu) return;
        let value = manageMenu.value;
        if (manageMenu.index <= 1) {
            let str = value.split('处罚')[0];
            const ask = await inputDialog(entity, value, `请输入你要${str}/解除处罚的玩家:`);
            if (ask) {
                let key = await getUid(ask);
                if (key) {
                    let data = await manageStorage.get(key);
                    if (data.value.isBlack != 0 && data.value.isBlack == manageMenu.index + 1) {
                        let type = { 1: '封号', 2: '禁足' }[data.value.isBlack];
                        let day = data.value.blackDay - parseInt((Date.now() - data.value.blackTime) / 1000 / 3600 / 24);
                        const ask2 = await selectDialog(entity, value, `${ask}已被${type}处罚,其距离结束处罚还剩${day}天`, ['结束处罚', '增加处罚天数', '取消']);
                        if (!ask2) return;
                        if (ask2.value == '结束处罚') {
                            await manageStorage.update(key, () => ({ name: ask, isBlack: 0, blackTime: 0, blackDay: 0 }));
                            textDialog(entity, '结束处罚', `已结束对${ask}的${type}处罚`);
                            world.say(`管喵已结束玩家${ask}的${ask2.value}处罚!`);
                            if (find(ask)) {
                                var player = find(ask);
                                player.isBlack = 0
                                player.blackDay = 0;
                                player.blackTime = 0;
                            }
                        }
                        if (ask2.value == '增加处罚天数') {
                            const ask3 = await inputDialog(entity, '增加处罚天数', '请输入你要增加的处罚天数:');
                            if (ask3) {
                                let num = Number(ask3);
                                if (isNaN(num) || num.toString().includes('.') || num <= 0) {
                                    textDialog(entity, '增加处罚天数', '输入有误!');
                                } else {
                                    await manageStorage.update(key, () => ({ name: ask, isBlack: data.value.isBlack, blackTime: data.value.blackTime, blackDay: data.value.blackDay + num }));
                                    textDialog(entity, '增加处罚天数', `已增加${ask3}天对${ask}的${type}处罚`);
                                    world.say(`玩家${ask}已被管喵增加${ask3}天的${str}处罚!`);
                                    if (find(ask)) {
                                        var player = find(ask);
                                        player.isBlack = data.value.isBlack;
                                        player.blackTime = data.value.blackTime;
                                        player.blackDay = data.value.blackDay + num;
                                    }
                                }
                            }
                        }
                    } else {
                        let type = { '封号': 1, '禁足': 2 }[str];
                        const ask2 = await selectDialog(entity, manageMenu.value, `${ask}未被${str}处罚,请选择对其${str}处罚的天数:`, ['1', '5', '10', '30', '50', '100', '365', '3650']);
                        if (!ask2) return;
                        const ask3 = await selectDialog(entity, `${str}处罚`, `确定对${ask}处以${ask2.value}天的${str}处罚吗?`, ['确定', '取消']);
                        if (!ask3) return;
                        if (ask3.value == '确定') {
                            let time = Date.now();
                            await manageStorage.update(key, () => ({ name: ask, isBlack: type, blackTime: time, blackDay: Number(ask2.value) }));
                            textDialog(entity, manageMenu.value, '处罚成功!');
                            world.say(`玩家${ask}已被管喵处以${ask2.value}天的${str}处罚!`);
                            if (find(ask)) {
                                var player = find(ask);
                                player.isBlack = type;
                                player.blackDay = Number(ask2.value);
                                player.blackTime = time;
                            }
                        }
                    }
                } else {
                    textDialog(entity, value, '输入有误!此玩家不存在!')
                }
            }
        };
        if (value == '重启地图') {
            const ask = await selectDialog(entity, value, '请选择重启方式:', ['重启地图', '重启容器']);
            if (!ask) return;
            if (ask.value == '重启地图') {
                for(;;);
            } else {
                db.sql([''], '');
            }
        };
        if (value == '控制台') {
            const ask = await inputDialog(entity, value, '请输入你要执行的内容');
            if (!ask) return;
            if (ask) {
                try {
                    textDialog(entity, value, `~> ${ask}\n<~ ${eval(ask)}`)
                } catch (e) {
                    textDialog(entity, value, `~> ${ask}\n<~ ${e}`)
                }
            }
        }
    };
});

world.onChat(({ entity, message }) => {
    if (message[0] == '$' && admin.includes(entity.player.name)) {
        try {
            world.say(`<~ ${eval(message.slice(1))}`)
        } catch (e) {
            world.say(`<~ ${e}`)
        }
    }
});


回复

上一页1 页 / 共 1下一页
神岛吉吉喵神岛吉吉喵

emotion_编程猫_点赞

点赞1


评论


145a145a

sofaaaaa

点赞0


评论


NomenNomen

前排

点赞0


评论


幻想一笑而过幻想一笑而过

有什么好东西直接拿去战神传说里面就行了emotion_doge

点赞2


评论


_HHHHHHHHHH__HHHHHHHHHH_

点赞0


评论


GZ006GZ006

666

点赞0


评论


鸽王懒狗鸽王懒狗

qwq地图好了吗(?

点赞0


评论


Dreamland_AuroraDreamland_Aurora

wc赶紧收藏!!!

点赞0


评论


Dreamland_AuroraDreamland_Aurora

搞不懂yee剑的和我的find函数有啥区别

function find(name){
    const a = world.queyrSelectorAll('player');
    for(let i in a){
        if (a[i].player.name == name) return a[i];
    }
}
global.find = find;

点赞0


评论


Dreamland_AuroraDreamland_Aurora

给yee剑优化下聊天框指令代码()

const Author = '';//这里写作者的userKey
const Admin = [Author,''];//管理员
const Danger = ['eval','db','sql','for','while','null','Danger'];

world.onChat(({ entity, message })=>{
    if(Admin.includes(entity.player.userKey){
        if(message[0] === '$'){
            var flag = false;
            for(const e of Danger){
                if(message.includes(e){
                    flag = true;
                    break;
                }
            }
            if(entity.player.userKey === Author || !flag){
                try{
                    world.say("<~" + eval(message.substring(1)));
                }catch(error){
                    world.say(error.stack);
                }
            }else{
                world.say('该指令有危险性');
            }
        }
    }
})

点赞0


评论


烟魂烟魂

你见过新型复制建筑小小代码开发吗?(我做的。。。)

点赞0


评论


鸽王懒狗鸽王懒狗

剑剑~再不迁移就寄啦~(

点赞0


评论


raearaea

ddd

点赞0


评论


指令者指令者

yee剑,我那个地图die码为什么有bug啊

点赞0


评论


迷失冷光迷失冷光

pageSize写Infinity好像会调回默认100,所以最好写1000000

 

点赞0


评论