用户:
MR_Wolf查看:0 回复:0 评论:0 创建时间:2023-12-30T16:49:20
具体注释教程可以看旧版
1、简化办法, 不容易卡逝
2、增加填写限制 一天一次
3、玩家直接填写 管理[指表格里有名字的人]可以选择 填写 查看 删除[删除需要重启一下]
4、查看意见添加玩家Id和状态[玩家是否在线]
注: 作者晚上玩地图的时候不知道为啥不会地图不会蹦了,如果不崩的话限制次数的代码需要一个云存档[以后再说]
先点赞在copy [:)]
let ADMIN = ['Mr-Wolf', '音符魔狼']//可以查看意见的玩家名
let WRITE_LENGTH = 60//可以输入字数
void async function () {
globalThis.Mailbox = storage.getDataStorage('cc')//创建云存档
if (!await Mailbox.get('record')) {//是否有创建云表格
await Mailbox.set('record', [])
}
globalThis.record = await Mailbox.get('record')//获取
globalThis.player = []
}()
let NPC = world.querySelector('#邮箱')
NPC.enableInteract = 1
NPC.interactRadius = 5
NPC.interactHint = '邮箱'
NPC.onInteract(async ({ entity: e }) => {
if (!ADMIN.includes(e.player.name)) return await write(e)
let sel = await e.dlgSel(null, '邮箱', ['写意见', '查看意见', '清除所有意见'])
if (sel) {
let v = sel.value
if (v === '写意见') {
await write(e, v)
} else if (v === '查看意见') {
if (record.value.length <= 0) return await e.dlgMsg(v, '暂无意见')
let options = Object.keys(record.value).map(i => { return record.value[i].name })//用map方法获取表格里面的东西
let sel0 = await e.dlgSel(v, '一共' + options.length + '跳意见', options)
if (sel0) {
let title = record.value[sel0.index]//获取
let sel1 = await e.dlgSel(v, `玩家Id: ${title.userId}\n状态: ${world.querySelectorAll('player').find(i => i.player.userId === title.userId) ? '在线' : '离线'}\n` + title.text, ['删除'])//显示内容
if (sel1) {
let a = record.value
a.remove(title)
await Mailbox.update('record', () => { return a })//改变云表格量为表格
await e.dlgMsg(v, '删除成功')
}
}
} else if (v === '查看意见') {
if (record.value.length <= 0) return await e.dlgMsg(v, '暂无意见')
let options = Object.keys(record.value).map(i => { return record.value[i].name })//用map方法获取表格里面的东西
let sel0 = await e.dlgSel(v, '一共' + options.length + '跳意见', options)
if (sel0) {
let title = record.value[sel0.index]//获取
let sel1 = await e.dlgSel(v, `玩家Id: ${title.userId}\n状态: ${world.querySelectorAll('player').find(i => i.player.userId === title.userId) ? '在线' : '离线'}\n` + title.text, ['删除'])//显示内容
if (sel1) {
let a = record.value
a.remove(title)
await Mailbox.update('record', () => { return a })
await e.dlgMsg(v, '删除成功')
}
}
} else if (v === '清除所有意见') {
if (record.value.length <= 0) return await e.dlgMsg(v, '暂无意见')
let sel0 = await e.dlgSel(v, '确定吗', ['确定', '再想想'])
if (sel0 && sel0.value === '确定') {
let a = record.value
for (let x = 0; x < a.length; x++) {
a.remove(a[x])
}
await Mailbox.update('record', () => { return a })//这里不是作者不知道直接 执行空表格 而是执行后[]他还是显示 需要世界刷新
await e.dlgMsg(v, '清除成功')
}
}
}
})
async function write(e, v) {
if (player.includes(e.player.userId)) return await e.dlgMsg(v, '你今天上传过了\n请明日再来')
let sel0 = await e.dlgInput(v, '请用简洁的话语概括一下\n字数小于' + WRITE_LENGTH + '字')
if (sel0) {
if (sel0.length > WRITE_LENGTH) return await e.dlgMsg(v, '字数过多')
try {
player.push(e.player.userId)
let a = record.value
a.push({ userId: e.player.userId, name: e.player.name, text: sel0 })
await Mailbox.update('record', () => { return a })//向表格添加数据
await e.dlgMsg(v, '上传成功qwq\n欢迎明天再次评论')
} catch (qwq) {
await e.dlgMsg(v, '上传失败/(ㄒoㄒ)/~~\n请稍后重试')
}
}
}
//这里是定义的一些东西[] 代码师应 该都看的懂
Array.prototype.remove = function (ele) {
if (!this.includes(ele)) return null;
else return this.splice(this.indexOf(ele), 1)
}
GameEntity.prototype.dlgMsg = async function (title, content, hasArrow) {
let sel = await this.player.dialog({
type: 'text',
title,
content,
hasArrow,
})
return sel
}
GameEntity.prototype.dlgInput = async function (title, content) {
let sel = await this.player.dialog({
type: 'input',
title,
content,
})
return sel
}
GameEntity.prototype.dlgSel = async function (title, content, options) {
let sel = await this.player.dialog({
type: 'select',
title,
content,
options,
})
return sel || ''
}