用户:
Nysidla查看:0 回复:10 评论:0 创建时间:2023-05-05T20:34:45
world.onPlayerJoin(async({entity})=>{
entity.setUp = { bar: ['空', '空', '空', '空', '空', '空', '空', '空', '空'], bag: [],gold: 100, silver: 100, copper: 100}
})
async function buyFunc2(entity, type, content) {
while (1) {
let b = await buyFunc(entity, type, content[0], content[1])
if (!b || b.value == '返回') break
//这里我用的是铜钱、银元、金元作为货币购买物品
let c = type[b.index].purchase.copper
let s = type[b.index].purchase.silver
let g = type[b.index].purchase.gold
let m = entity.setUp
//判断马内够不够
if (m.copper < c || m.silver < s || m.gold < g) entity.player.directMessage('你的物资不够!')
else {
//减马内
c ? m.copper -= c : false, s ? m.silver -= s : false, g ? m.gold -= g : false
//购买个数
type[b.index].buyNum ? num = type[b.index].buyNum : num = 1
//如果就堆叠上线逝10个,就直接改变列表
if (!type[b.index].highestStack) {
if (m.bar.includes('空')) m.bar[m.bar.indexOf('空')] = b.value.slice(0, b.value.indexOf('('))
else m.bag.push(b.value.slice(0, b.value.indexOf('(')))
} else {
//重复执行购买个数次
for (let f = 0; f < num; f++) {
let next = true
//先搜索快捷栏,有位置了且没达到上线就增加,否则找到'空'的地方霸占它的家
for (let e of m.bar) {
if (e.startsWith(type[b.index].id) && Number(e.slice(e.indexOf('*') + 1)) < type[b.index].highestStack) {
m.bar[m.bar.indexOf(e)] = `${type[b.index].id}*${Number(e.slice(e.indexOf('*') + 1)) + 1}`
next = false
break
} else if (e == '空') {
m.bar[m.bar.indexOf('空')] = type[b.index].id + '*1'
next = false
break
}
} if (next) {
//如果没有就把毒手伸向背包
next = false
//如果背包长度逝0就加进去
if (m.bag.length == 0) {
m.bag.push(type[b.index].id + '*1')
} else {
//例遍bag
for (let i = 0; i < m.bag.length; i++) {
let ii = m.bag[i]
//如果id和买的东西一样,嘿嘿嘿()
if (ii.startsWith(type[b.index].id) && Number(ii.slice(ii.indexOf('*') + 1)) < type[b.index].highestStack) {
m.bag[i] = `${type[b.index].id}*${Number(ii.slice(ii.indexOf('*') + 1)) + 1}`
break
} //如果不是,就push()
else if (m.bag.filter(e => e == type[b.index].id + '*' + type[b.index].highestStack).length == m.bag.filter(e => e.startsWith(type[b.index].id)).length) {
m.bag.push(type[b.index].id + '*1')
break
}
}
}
}
}
} entity.player.directMessage(`购买成功!(${b.value.slice(0, b.value.indexOf('('))})`)
}
}
}
async function buyFunc(entity, forInList, title, content) {
let list = []
for (let i = 0; i < forInList.length; i++) {
push = ``, durable = ``, num = 1
if (forInList[i].buyNum >= 1) num = forInList[i].buyNum
if (forInList[i].durable != undefined) durable = `[${forInList[i].durable}/${forInList[i].durable}]`
if (forInList[i].purchase.copper != undefined) push += `${forInList[i].purchase.copper}铜钱`
if (forInList[i].purchase.silver != undefined) push += `${forInList[i].purchase.silver}银元`
if (forInList[i].purchase.gold != undefined) push += `${forInList[i].purchase.gold}金元`
list.push(`${forInList[i].id}${durable}*${num}(${push})`), push = ``, durable = ``
} return await selectdialog(entity, title, content, list.concat('返回'))
}
selectdialog = async function (entity, title, content, options) {
return entity.player.dialog({
type: Box3DialogType.SELECT,
title,
content,
options
})
}
建议Items的格式用JSON
const Items = {
A:[
id:'你干嘛~',//必写
buyNum:6,//可以堆叠的可以加,不可堆叠的绝对不能喵以堆叠的用
purchase: { copper: 114514 },//必写
],
B:[
//@上面的
],
}
如何使用?
await buyFunc2(entity, Items.A, ['XX类', '选择要购买的XX'])
//不可直接使用,放到购买里