猫史档案馆


如果你的地图也有快捷栏和物品栏只因制,这些die码一定对你有big用处()

用户:NysidlaNysidla查看: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'])
//不可直接使用,放到购买里


回复

上一页1 页 / 共 1下一页
NysidlaNysidla

自古沙发归楼主

点赞0


评论


NysidlaNysidla

我的评论区好寒掺啊(

点赞0


评论


抬头就是你抬头就是你

sofa

点赞0


评论


北平梦游看夕阳北平梦游看夕阳

好代码

点赞0


评论


北平梦游看夕阳北平梦游看夕阳

我收下了

 

点赞0


评论


一勺小汤_纪念号一勺小汤_纪念号

顶顶顶

点赞0


评论


AokenAoken

收藏

点赞0


评论


追梦ez追梦ez

ddd

点赞0


评论


145a145a

萌新表示:

用不了,说什么cannot read 什么玩意 undefined

骗人!!

(不是我)

点赞0


评论


神奇代码岛func王清林神奇代码岛func王清林

It's very good

点赞0


评论