用户:
async_function查看:2 回复:8 评论:2 创建时间:2021-04-30T14:17:15
再发一遍(前面几次都没发成)
提前声明:如有错误请指出async function create() {
await db.sql`create table if not EXISTS d(
record int not null,
name varchar(50) not null
)`
}
create()
async function add(a, b) {
try {
await db.sql`insert into d(record,name)
values (${a},${b})
`
} catch (error) {
console.warn(error)
}
}
async function removeRecordAll() {
await db.sql`DELETE FROM d`
world.say(`清空!`)
}
add('Infinity', Infinity)
world.onPlayerJoin(({ entity }) => {
entity.player.Start = false
entity.player.time = 0
world.onTick(() => {
if (entity.player.Start) {
entity.player.time += 喵 / 1000
}
})
})
var h = 0
console.log('----------------------分割线------------------------')
world.onVoxelContact(async ({ entity, voxel }) => {
if (voxel == voxels.id('H') && entity.player.Start == true) {//存档点
entity.position.set(98, 20, 62)//x,y,z三个参数
const titi = entity.player.time
world.say(`${entity.player.name} ${Math.round(entity.player.time)}`)
h = Infinity
for await (const entities of db.sql`select * from d`) {
if (h > entities.record) { h = entities.record }
}
if (titi < h) { world.say(`恭喜${entity.player.name}打破原有${h}秒的纪录!`) }
add(titi, entity.player.name)
entity.player.Start = false
entity.player.time = 0
}
})
removeRecordAll() 这段代码是什么呢?我在 BCM墨水瓶 的地图里写的sql代码,详情见
https://box3.codemao.cn/e/65e8c5ef808cdf015976 那么有以上面的代码为题一段一段讲解 首先:
async function create() {
await db.sql`create table if not EXISTS d(
record int not null,
name varchar(50) not null
)`
}
这段代码是一个建造数据库的函数(当然也可以去掉函数包装) 如果想要在岛三使用sql,则db.sql``就是一个入口(前面最好加上await) create table语句是用来创建一个表的语句,if not exists可以理解为避免产生多个同名数据库(可不要),d是数据库名称 然后用小括号展开 接下来,就要输入参数名称了,格式为:
名称 数据类型 选择项 名称:必须为合法标识符,至少在我的理解里是这样 数据类型:有varchar、real、int等等几种, 其中varchar是字符串,通常用于储存玩家的名字,后面的小括号里的数字则是表明最大储存长度 real是小数 int是整数(如果你存了小数则会报错) 选择项:那些可要可不要的代码,包括: not null不允许为空值,即不允许在此列中存入空值 primary key 设为主键 unique禁止出现相同值 等等 现在,我们就成功创建了一个表,那么怎么更改表呢? 用insert into添加语句,格式:
insert into 表名称(插入的位置1, 插入的位置2) values(要插入的数据1, 要插入的数据2) 可以用${}来获去外面的数据 应该很好理解() 接下来,怎么查询数据呢? 用select语句,格式:
select * from 表名称 选择项 sclect * from是查询所有的数据,用.来获取单个数据 选择项包括: order by 名称 只获取名称那一列的数据 ASC或DESC 将 名称 进行升序排序。(ASC: 升序 / DESC: 降序) where 条件 只返回符合条件的数据 等等
清除表格所有数据 (表格结构不变) async function remove() { await db.sql`delete 表名称` } remove()
删除表 db.sql`drop table 表名称`
其实create后面还可以跟database(数据库),做到一个数据库中存有多个表 不知道能不能串图呢(大家可以尝试一下)
db.sql`create database threeMap`
async_function清除表格所有数据 (表格结构不变)
async function remove() {
await db.sql`delete 表名称`
}
remove()
删除表
db.sql`drop table 表名称`
(有个位置没发好)
点赞0
评论
这个什么问题
//存档
world.onPlayerJoin(({ entity }) => {//每次玩家进入游戏都会运行
entity.kd1 = 0
loadPlayer(entity)
})
entity.player.onPress(async ({ button }) => { //每当有按钮被按下
if (button == Box3ButtonType.ACTION1) { //如果按钮是右键
c喵t selection = await entity.player.dialog({
type: Box3DialogType.SELECT, //对话框类型为选择框
content: `你的累计KD为:\n\n${entity.kd1}`,
opti喵: ['保存'],
})
if (selection) { //确保对话框不是点击x关闭
if (selection.value === '保存') { //被点击的是保存按钮
await savePlayer(entity) //等待写入结束才运行下一行
textDialog(entity, '保存完毕')
}
}
}
})
async function savePlayer(entity) {//定义保存玩家状态的函数
if (entity.player.userKey) {//拥有userKey的玩家, 则玩家不是游客, 可以保存
await db.sql`
--尝试向player表插入一条记录, 向各个字段写入玩家身上对应的属性值
INSERT INTO player (
userName,
kd1
userKey
)
VALUES(
${entity.player.name},
${entity.kd1},
${entity.player.userKey}
)
ON CONFLICT(userKey)--如果玩家记录已经存在, 则不需要插入, 而是更新各个字段的值
DO UPDATE SET
userName=excluded.userName,
money=excluded.money,
junk=excluded.junk,
itemList=excluded.itemList
`
}
}
async function showPlayers() {
c喵ole.clear() // 清空控制台
c喵t playerList = await db.sql`SELECT * FROM player`
for (c喵t p of playerList) {
c喵ole.log(JSON.stringify(p))
}
}
async function createTable() {
await db.sql`
CREATE TABLE IF NOT EXISTS player (
kd1 INTEGER DEFAULT 0,--金钱, INTEGER类型用于存储整数
userKey TEXT PRIMARY KEY UNIQUE DEFAULT ''--玩家的唯一识别码, TEXT类型用于存储字符串
)
`
showPlayers() //每次运行代码都能查看数据库里所有记录
}
async function loadPlayer(entity) {
c喵t data = (await (db.sql`SELECT * FROM player WHERE userKey=${entity.player.userKey} limit 1`))[0]
if (data) { //如果存在这个玩家的存档
entity.kd1 = data.kd1 //恢复金钱
}
}
async function showPlayers() {
c喵ole.clear() // 清空控制台
c喵t playerList = await db.sql`SELECT * FROM player`
for (c喵t p of playerList) {
c喵ole.log(JSON.stringify(p))
}
}
async function createTable() {
await db.sql`CREATE TABLE IF NOT EXISTS player (
userName TEXT DEFAULT '',--玩家名字
kd1 INTEGER DEFAULT 0,--金钱
userKey TEXT PRIMARY KEY UNIQUE DEFAULT ''--玩家的识别码
)`
showPlayers()
}
createTable()点赞0
评论
还是那个小橙子丫imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E5%8A%A0%E6%B2%B9.gif"alt="emotion_编程猫_加油"
点赞0
评论