120 lines
3.0 KiB
TypeScript
120 lines
3.0 KiB
TypeScript
import { plugin } from 'yunzai/core'
|
||
import GachaData from '../model/gachaData.js'
|
||
import fs from 'node:fs'
|
||
import lodash from 'lodash'
|
||
export class gacha extends plugin {
|
||
constructor () {
|
||
/**
|
||
*
|
||
name: '十连',
|
||
dsc: '模拟抽卡,每天十连一次,四点更新',
|
||
*/
|
||
super({
|
||
priority: 100,
|
||
rule: [
|
||
{
|
||
reg: '^#*(10|[武器池常驻]*[十]+|抽|单)[连抽卡奖][123武器池常驻]*$',
|
||
fnc: 'gacha'
|
||
},
|
||
{
|
||
reg: '(^#*定轨|^#定轨(.*))$',
|
||
fnc: 'weaponBing'
|
||
}
|
||
]
|
||
})
|
||
}
|
||
|
||
/** #十连 */
|
||
async gacha () {
|
||
this.GachaData = await GachaData.init(this.e)
|
||
|
||
if (this.checkLimit()) return
|
||
|
||
let data = await this.GachaData.run()
|
||
|
||
/** 生成图片 */
|
||
await this.renderImg('genshin', 'html/gacha/gacha-trial', data, {
|
||
recallMsg: data.nowFive >= 1 || data.nowFour >= 4 ? false : this.GachaData.set.delMsg
|
||
})
|
||
}
|
||
|
||
/** 检查限制 */
|
||
checkLimit () {
|
||
/** 主人不限制 */
|
||
if (this.e.isMaster) return false
|
||
|
||
let { user } = this.GachaData
|
||
let { num, weaponNum } = user.today
|
||
|
||
let nowCount = num
|
||
if (this.GachaData.type == 'weapon') nowCount = weaponNum
|
||
|
||
if (this.GachaData.set.LimitSeparate == 1) {
|
||
if (nowCount < this.GachaData.set.count * 10) return false
|
||
} else {
|
||
if (num + weaponNum < this.GachaData.set.count * 10) return false
|
||
}
|
||
|
||
let msg = lodash.truncate(this.e.sender.card, { length: 8 }) + '\n'
|
||
|
||
if (user.today.star.length > 0) {
|
||
msg += '今日五星:'
|
||
if (user.today.star.length >= 4) {
|
||
msg += `${user.today.star.length}个`
|
||
} else {
|
||
user.today.star.forEach(v => {
|
||
msg += `${v.name}(${v.num})\n`
|
||
})
|
||
msg = lodash.trim(msg, '\n')
|
||
}
|
||
if (user.week.num >= 2) {
|
||
msg += `\n本周:${user.week.num}个五星`
|
||
}
|
||
} else {
|
||
msg += `今日已抽,累计${nowCount}抽无五星`
|
||
}
|
||
this.reply(msg, false, { recallMsg: this.GachaData.set.delMsg })
|
||
return true
|
||
}
|
||
|
||
/** #定轨 */
|
||
async weaponBing () {
|
||
let Gacha = await GachaData.init(this.e)
|
||
|
||
let { NowPool, user, msg = '' } = Gacha
|
||
|
||
if (user.weapon.type >= 2) {
|
||
user.weapon.type = 0
|
||
user.weapon.bingWeapon = ''
|
||
msg = '\n定轨已取消'
|
||
} else {
|
||
user.weapon.type++
|
||
user.weapon.bingWeapon = NowPool.weapon5[user.weapon.type - 1]
|
||
msg = []
|
||
NowPool.weapon5.forEach((v, i) => {
|
||
if (user.weapon.type - 1 == i) {
|
||
msg.push(`[√] ${NowPool.weapon5[i]}`)
|
||
} else {
|
||
msg.push(`[ ] ${NowPool.weapon5[i]}`)
|
||
}
|
||
})
|
||
msg = '定轨成功\n' + msg.join('\n')
|
||
}
|
||
/** 命定值清零 */
|
||
user.weapon.lifeNum = 0
|
||
Gacha.user = user
|
||
Gacha.saveUser()
|
||
|
||
this.reply(msg, false, { at: this.e.user_id })
|
||
}
|
||
|
||
/** 初始化创建配置文件 */
|
||
async init () {
|
||
let file = './plugins/genshin/config/gacha.set.yaml'
|
||
|
||
if (fs.existsSync(file)) return
|
||
|
||
fs.copyFileSync('./plugins/genshin/defSet/gacha/set.yaml', file)
|
||
}
|
||
}
|