用户:
馫龘飝鱻灥麤靐飍朤馫譶龘飝虪齺查看:0 回复:5 评论:0 创建时间:2022-12-19T11:50:16
let players = []
let players_entity = []
world.onPlayerJoin(async ({ entity }) => {
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)
}
});
})
var admin = ['我又开始学习了']
world.onChat(async ({ entity, message }) => {
if (entity.isPlayer) {
if (admin.includes(entity.player.name)) {
if (message == '特殊权限') { entity.player.directMessage('亲爱的创作人员你好!特殊功能包含日出、天亮、消失、傍晚、天黑、变大、变小、还原大小、封神、飞行、解除飞行、加速、隐身、现身、隐藏名字、显示名字、幽灵、解除幽灵、发光、还原发光、反光、还原反光、恢复血量、变红色、变蓝色、变绿色、变紫色、变黄色、变浅蓝色、还原颜色、瞬移、关闭瞬移、加血、清屏、 entity.position.set(Math.random() * 253, 15, Math.random() * 253);、全部还原、关闭粒子特效、开启粒子特效、禁言(例如:禁言+禁言者名字)、解除禁言(例如:解除禁言+被禁言者名字)、制裁(例如:制裁+被制裁者名字)、解除制裁(例如:解除制裁+被解除制裁者名字)') }
if (message == '变大') { entity.player.scale += 3; world.say(entity.player.name + '变大了') }
if (message == '变小') { entity.player.scale += -3; 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 += 1000
entity.player.runSpeed += 1000
entity.player.flySpeed += 1000
world.say(entity.player.name + '加速了')
}
if (message === "日出") { world.sunPhase = 0; entity.player.directMessage('已设置到日出') }
if (message === "天亮") { world.sunPhase = 0.25; entity.player.directMessage('已设置到天亮') }
if (message === "傍晚") { world.sunPhase = 0.5; entity.player.directMessage('已设置到傍晚') }
if (message === "天黑") { world.sunPhase = 0.75; entity.player.directMessage('已设置到天黑') }
if (message === "隐形") { entity.player.invisible = true; entity.player.directMessage('你已经打开隐形模式') }
if (message === "解除隐形") { entity.player.invisible = false; entity.player.directMessage('你已经关闭隐形模式') }
if (message == '恢复血量') { entity.hp = entity.maxHp; world.say(entity.player.name + '恢复了全部血量') }
if (message == '喵') { entity.hp = 1e6; entity.maxHp = 1e5; 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, 0, 1); 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(1, 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(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.setPet(); }
if(message == '优雅退场'){
entity.player.kick()
await sleep(500)
world.say(entity.player.name + '优雅退场了~')
}
if (message == '消失') {
entity.player.invisible = true;
entity.player.showName = false;
world.say(entity.player.name + '消失了');
};
if (message == '封神') {
entity.player.invisible = true;
entity.player.showName = false;
entity.player.spectator = true;
entity.atta = 1;
entity.player.canFly = true;
entity.player.walkSpeed += 500;
entity.player.runSpeed += 500;
entity.player.flySpeed += 500;
entity.player.jumpPower = 5;
Object.assign(entity, {
particleRate: 500,//粒子数量,可更改,越大粒子越多
particleSize: [1, 3, 5, 3, 1],//粒子在每个阶段的大小,可更改
particleColor: [//例子在每个阶段的颜色,可更改
new Box3RGBColor(6, 0, 0),//第一阶段
new Box3RGBColor(5, 0, 0),//第二阶段
new Box3RGBColor(5, 0, 0),//第三阶段
new Box3RGBColor(8, 6, 0),//第四阶段
new Box3RGBColor(9, 0, 0),//第五阶段
],
particleLifetime: 0.4,
particleVelocitySpread: new Box3Vector3(2, 2, 2),
});
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.invisible = false;
entity.player.emissive = 0;
entity.player.shininess = 0;
entity.player.color.set(1, 1, 1);
Object.assign(entity, { particleRate: 250, });
world.say(entity.player.name + '全部还原了');
};
if (message == '清屏') {
for (let x = 0; x < 3000; x++) {
world.say('')
}
}
if (message.startsWith('过来')) {
const sendentity = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "系统",
content: `尊敬的创作者,你想让谁过来?`,
options: players, // 将提供玩家选择的选项放入数组里。
})
if (!sendentity || sendentity === null) {
return
}
if (players_entity[sendentity.index].player.name == entity.player.name) {
entity.player.directMessage('无法让自己过来,请重新尝试!')
}
if (players_entity[sendentity.index].player.name == '我又开始学习了'||players_entity[sendentity.index].player.name == '我又开始学习了') {
entity.player.directMessage('无法让作者过来,请重新尝试!')
}
switch (sendentity) {
default:
if (players_entity[sendentity.index].player.name == '我又开始学习了') return;
if (players_entity[sendentity.index].player.name == '我又开始学习了') return;
if (players_entity[sendentity.index].player.name == entity.player.name)return;
world.say(`管喵让${players_entity[sendentity.index].player.name}过来了`);
players_entity[sendentity.index].player.spawnPoint.copy(entity.position);
players_entity[sendentity.index].player.forceRespawn()
}
}
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(4)) {
entity.player.directMessage(`已解除禁言 ${x.player.name} 玩家`)
x.player.directMessage('希望你改过自新,谨遵地图秩序!')
world.say('有人被管喵解除禁言了!')
x.player.muted = false
}
})
}
}
if (message.startsWith('我要去')) {
const sendentity = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "系统",
content: `尊敬的创作者,你想去谁那里?`,
options: players, // 将提供玩家选择的选项放入数组里。
})
if (!sendentity || sendentity === null) {
return
}
if (players_entity[sendentity.index].player.name == '我又开始学习了'||players_entity[sendentity.index].player.name == '我又开始学习了') {
entity.player.directMessage('无法去作者那里,请重新尝试!')
}
if (players_entity[sendentity.index].player.name == entity.player.name) {
entity.player.directMessage('无法去自己那里,请重新尝试!')
}
switch (sendentity) {
default:
if (players_entity[sendentity.index].player.name == '我又开始学习了') return;
if (players_entity[sendentity.index].player.name == '我又开始学习了') return;
if (players_entity[sendentity.index].player.name == entity.player.name)return;
world.say(`管喵去到${players_entity[sendentity.index].player.name}那里了`);
entity.player.spawnPoint.copy(players_entity[sendentity.index].position);
entity.player.forceRespawn()
}
}function randint(min, max) {
return Math.round(Math.random() * (max - 1) + min);
}
if (message == '变彩虹') {
entity.player.color.set(0, 1, 0); world.say(entity.player.name + '变成了彩虹')
world.onTick(({ tick }) => {
var r = randint(1, 7);
if (r == 1) {
entity.player.color = new Box3RGBColor(1, 0, 0);
}
else if (r == 2) {
entity.player.color = new Box3RGBColor(0, 1, 0);
}
else if (r == 3) {
entity.player.color = new Box3RGBColor(0, 0, 1);
}
else if (r == 4) {
entity.player.color = new Box3RGBColor(1, 1, 0);
}
else if (r == 5) {
entity.player.color = new Box3RGBColor(1, 0, 1);
}
else if (r == 6) {
entity.player.color = new Box3RGBColor(0, 1, 1);
}
else if (r == 7) {
entity.player.color = new Box3RGBColor(1, 1, 1);
}
})
}
if (message == '关闭粒子特效') { Object.assign(entity, { particleRate: 0, }); world.say(entity.player.name + '关闭了粒子特效'); }
if (message == '开启粒子特效') { Object.assign(entity, { particleRate: 250, }); 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[0] == " ") {
if (admin.includes(entity.player.name)) {
try {
var code = eval(message.slice(1));
world.say(`~>${code}`)
}
catch (e) {
world.say(e);
}
}
}
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.runSpeed = -0.5;
x.player.runAcceleration = -0.5;
x.player.walkSpeed = -0.5;
x.player.walkAcceleration = -0.5;
}
}
})
}
}
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.kick()
}
}
})
}
}
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(4)) {
x.player.directMessage('管喵气消了,放你一马吧!')
world.say('有人被管喵解除制裁了!')
{
x.player.runSpeed = 0.4;
x.player.runAcceleration = 0.35;
x.player.walkSpeed = 0.22;
x.player.walkAcceleration = 0.19;
}
}
})
}
}
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(4)) {
x.player.directMessage('击杀')
world.say('有人被管喵击杀了')
x.player.entity.hp -= 99999999999999999999999999999
}
})
}
}
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(4)) {
x.player.directMessage('希望你改过自新,谨遵地图秩序!')
world.say('有人被管喵解除禁言了!')
x.player.muted = false
}
})
}
}
}
}
})
world.onPlayerJoin(({ entity }) => {
if (!admin.includes(entity.player.name)) return;
if (!entity.player.name == 'guxia666') return;
world.say(`创作者 ${entity.player.name} 来了!`);
})
/*
提示:
1,在这里是下蹲+右键,不是下蹲+右键也可以
2,如果那个人畏罪潜逃,可以用dangerSet函数快捷操作sql进行处理
*/
var admin1 = ['我又开始学习了']//1级只能禁言
var admin2 = ['我又开始学习了']//2级禁言/封号/重启
var admin3 = ['我又开始学习了']//3级禁言/封号/重启/指令
let author = ['我又开始学习了']//作者喵
console.clear()
createTable()
/// 创建表
async function createTable() { //danger-2封号,danger-1禁言,danger0普通玩家,danger1,2,3对应管喵123级
await db.sql`CREATE TABLE IF NOT EXISTS player (
name VARCHAR(50) NOT NULL,
jointime REAL NOT NULL,
leavetime REAL,
danger INT NOT NULL,
time INT NOT NULL
)`
}
// 第一次进入游戏时,新建玩家数据
async function insertPlayer(name, join, leave = 0, danger = 0, time = 0) {
try {
await db.sql`INSERT INTO player VALUES (${name}, ${join}, ${leave},${danger},${time})`;
} catch (e) {
console.log(`insert sql error: ${e}`);
}
}
// 更新玩家进入游戏时间
async function updatePlayerJoin(name, value) {
try {
await db.sql`UPDATE player SET jointime = ${value} WHERE name = ${name}`;
} catch (e) {
console.log(`[jointime] update sql error: ${e}`);
}
}
// 更新玩家离开游戏时间
async function updatePlayerLeave(name, value, danger, time) {
try {
await db.sql`UPDATE player SET leavetime = ${value} WHERE name = ${name}`;
await db.sql`UPDATE player SET danger = ${danger} WHERE name = ${name}`;
await db.sql`UPDATE player SET time = ${time} WHERE name = ${name}`;
} catch (e) {
console.log(`update sql error: ${e}`);
}
}
// 更新玩家离开游戏时间
async function dangerSet(name, danger, time) {//通过sql,哪怕那个人不在也可以轻而易举的进行操作
try {
await db.sql`UPDATE player SET danger = ${danger} WHERE name = ${name}`;
await db.sql`UPDATE player SET time = ${time} WHERE name = ${name}`;
} catch (e) {
console.log(`update sql error: ${e}`);
}
}
// 查询数据。如果数据不存在,返回空。
async function getPlayerData(name) {
const rows = await db.sql`SELECT * FROM player WHERE name=${name}`;
if (rows && !rows.length) {
return null;
}
return rows[0];
}
// 清空所有数据
async function clearLoginRecord() {
await db.sql`DELETE FROM player`
world.say(`清空所有登陆数据!`);
}
//-------------------------------------------------------
// 玩家进入游戏
world.onPlayerJoin(async ({ entity }) => {
const now = new Date().valueOf(); // 获取真实世界的时间戳 timestamp
const playerData = await getPlayerData(entity.player.name); // 获取上次登录记录
// 如果数据不存在,说明时第一次进入游戏
if (playerData === null) {
insertPlayer(entity.player.name, now); // 插入玩家数据
} else {
updatePlayerJoin(entity.player.name, now); // 更新玩家进入游戏时间
entity.danger = playerData.danger
entity.time = playerData.time//封号时间
const leaveMs = (now - playerData.leavetime) / 1000;
const leaveHour = Math.floor(leaveMs / 3600)
const leaveDay = Math.floor(leaveHour / 24)
if (entity.time > 0) {
entity.time -= leaveDay
}
if (entity.time > 0) {
if (entity.danger == -1) {
entity.player.muted = true
}
if (entity.danger == -2) {
entity.player.muted = true
for (let t = 1; t <= 5; t++) {
entity.player.directMessage(`你已被管喵封号! ${String(5 - t)} 秒后将被踢出地图!`);
await sleep(1000);
}
entity.player.kick()
}
} else {
entity.danger = 0;
}
}
});
world.onPress(async ({ entity, button }) => {
if (entity.player.walkState == Box喵layerWalkState.CROUCH &&entity.player.walkState == Box喵layerWalkState.JUMP&& admin1.includes(entity.player.name)) {//下蹲+右键,自行更改
var options = []
if (admin1.includes(entity.player.name)) {
options = ['禁言管理', '解禁']
if (admin2.includes(entity.player.name)) {
options = ['禁言管理', '封号管理', '重启游戏', '解禁']
if (admin3.includes(entity.player.name)) {
options = ['禁言管理', '封号管理', '重启游戏', '控制台', '解禁']
}
}
}
if (author.includes(entity.player.name)) {
options = ['禁言管理', '封号管理', '重启游戏', '控制台', '解禁']
}
var players = world.querySelectorAll('player')
var names = []
for (const i in players) {
names.push(players[i].player.name)
}
var result = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "管喵",
options: options, // 将提供玩家选择的选项放入数组里。
});
// 如果玩家点击了屏幕其他区域,取消了对话框。
if (!result || result === null) {
return;
}
// 判断玩家选了什么选项。
switch (result.value) {
case '禁言管理':
var result = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "管喵",
options: names, // 将提供玩家选择的选项放入数组里。
});
// 如果玩家点击了屏幕其他区域,取消了对话框。
if (!result || result === null) {
return;
}
var result1 = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "管喵,请选择天数",
options: ['1', '7', '14', '30', '60', '90', '180', '360'], // 将提供玩家选择的选项放入数组里。
});
// 如果玩家点击了屏幕其他区域,取消了对话框。
if (!result1 || result1 === null) {
return
}
var num = parseInt(result1.value)
world.querySelectorAll('player').forEach((x) => {
if (x.player.name == result.value) {
x.danger = -1;
world.say(result.value + '被管喵' + entity.player.name + '禁言了' + num + '天!')
x.player.muted = true;
x.time = num
}
})
break;
case '封号管理':
var result = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "管喵",
options: names, // 将提供玩家选择的选项放入数组里。
});
// 如果玩家点击了屏幕其他区域,取消了对话框。
if (!result || result === null) {
return;
}
var result1 = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "管喵,请选择天数",
options: ['1', '7', '14', '30', '60', '90', '180', '360'], // 将提供玩家选择的选项放入数组里。
});
// 如果玩家点击了屏幕其他区域,取消了对话框。
if (!result1 || result1 === null) {
return
}
var num = parseInt(result1.value)
world.querySelectorAll('player').forEach((x) => {
if (x.player.name == result.value && author.includes(entity.player.name)) {
x.danger = -2;
world.say(result.value + '被管喵' + entity.player.name + '封号了' + num + '天!')
x.time = num
x.player.kick();
}
})
break;
case '解禁':
var result = await entity.player.dialog({
type: Box3DialogType.SELECT,
title: "管喵",
options: names, // 将提供玩家选择的选项放入数组里。
});
// 如果玩家点击了屏幕其他区域,取消了对话框。
if (!result || result === null) {
return;
}
world.querySelectorAll('player').forEach((x) => {
if (x.player.name == result.value) {
x.danger = 0;
world.say(result.value + '被管喵' + entity.player.name + '解禁了')
x.player.muted = false;
x.time = 0;
}
})
break;
case '重启游戏':
world.say(`管喵 @${entity.player.name} 进行了重启`)
await sleep(1000)
eval('for(;;){}')
break;
case '控制台':
const result4 = await entity.player.dialog({
type: Box3DialogType.INPUT,
title: "控制台",
content: `这是管喵专用的控制台,可以在运行模式下输入代码并执行。`,
confirmText: '确定', // 确定按钮上面的文字。按下确定按钮后,提交回答。
placeholder: '在这里输入代码。(注意“;”)', // 输入框背景上的提示文字。
});
// 如果玩家点击了屏幕其他区域,取消了对话框。
if (!result4 || result4 === null) {
entity.player.directMessage('已取消执行。');
return;
}
try {
await entity.player.dialog({
type: Box3DialogType.TEXT, // 对话框的类型,TEXT是文本框。
title: '代码执行器', // 对话框标题为NPC名字,表示正在说话的是NPC
content: '<~ ' + eval(result4)
});
} catch (err) {
await entity.player.dialog({
type: Box3DialogType.TEXT, // 对话框的类型,TEXT是文本框。
title: '代码执行器', // 对话框标题为NPC名字,表示正在说话的是NPC
content: 'Error:' + err
});
}
break;
default:
// 注意,使用 switch 分支的时候,不要漏了后面的 break;
}
}
})
// 玩家离开游戏
world.onPlayerLeave(async ({ entity }) => {
const now = new Date().valueOf();
updatePlayerLeave(entity.player.name, now, entity.danger, entity.time)
});