mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-11-21 22:48:13 +00:00
优化角色列表的天赋获取逻辑
This commit is contained in:
parent
6b11badb66
commit
7ea4dafd6f
@ -1,4 +1,4 @@
|
||||
import { App } from '../components/index.js'
|
||||
import { App, Cfg } from '../components/index.js'
|
||||
import { profileHelp } from './profile/ProfileCommon.js'
|
||||
import { profileArtisList } from './profile/ProfileArtis.js'
|
||||
import { profileDetail } from './profile/ProfileDetail.js'
|
||||
@ -15,112 +15,122 @@ let app = App.init({
|
||||
|
||||
app.reg({
|
||||
profileDetail: {
|
||||
rule: /^#*([^#]+)\s*(详细|详情|面板|面版|圣遗物|伤害[1-7]?)\s*(\d{9})*(.*[换变改].*)?$/,
|
||||
name: '角色面板',
|
||||
fn: profileDetail,
|
||||
name: '角色面板'
|
||||
rule: /^#*([^#]+)\s*(详细|详情|面板|面版|圣遗物|伤害[1-7]?)\s*(\d{9})*(.*[换变改].*)?$/
|
||||
},
|
||||
|
||||
profileChange: {
|
||||
rule: /^#.+换.+$/,
|
||||
name: '角色面板计算',
|
||||
fn: profileDetail,
|
||||
name: '角色面板计算'
|
||||
rule: /^#.+换.+$/
|
||||
},
|
||||
|
||||
groupProfile: {
|
||||
rule: /^#(群|群内)?(排名|排行)?(最强|最高|最高分|最牛|第一)+.+/,
|
||||
name: '群内最强',
|
||||
fn: groupRank,
|
||||
name: '群内最强'
|
||||
rule: /^#(群|群内)?(排名|排行)?(最强|最高|最高分|最牛|第一)+.+/
|
||||
},
|
||||
|
||||
resetRank: {
|
||||
rule: /^#(重置|重设)(.*)(排名|排行)$/,
|
||||
name: '重置排名',
|
||||
fn: resetRank,
|
||||
name: '重置排名'
|
||||
rule: /^#(重置|重设)(.*)(排名|排行)$/
|
||||
},
|
||||
|
||||
refreshRank: {
|
||||
rule: /^#(刷新|更新|重新加载)(群内|群|全部)*(排名|排行)$/,
|
||||
name: '重置排名',
|
||||
fn: refreshRank,
|
||||
name: '重置排名'
|
||||
rule: /^#(刷新|更新|重新加载)(群内|群|全部)*(排名|排行)$/
|
||||
},
|
||||
|
||||
manageRank: {
|
||||
rule: /^#(开启|打开|启用|关闭|禁用)(群内|群|全部)*(排名|排行)$/,
|
||||
name: '打开关闭',
|
||||
fn: manageRank,
|
||||
name: '打开关闭'
|
||||
rule: /^#(开启|打开|启用|关闭|禁用)(群内|群|全部)*(排名|排行)$/
|
||||
},
|
||||
|
||||
rankList: {
|
||||
rule: /^#(群|群内)?.+(排名|排行)(榜)?$/,
|
||||
name: '面板排名榜',
|
||||
fn: groupRank,
|
||||
name: '面板排名榜'
|
||||
rule: /^#(群|群内)?.+(排名|排行)(榜)?$/
|
||||
},
|
||||
|
||||
artisList: {
|
||||
rule: /^#圣遗物列表\s*(\d{9})?$/,
|
||||
name: '面板圣遗物列表',
|
||||
fn: profileArtisList,
|
||||
name: '面板圣遗物列表'
|
||||
rule: /^#圣遗物列表\s*(\d{9})?$/
|
||||
},
|
||||
|
||||
profileList: {
|
||||
rule: /^#(面板角色|角色面板|面板)(列表)?\s*(\d{9})?$/,
|
||||
fn: ProfileList.render,
|
||||
name: '面板角色列表',
|
||||
desc: '查看当前已获取面板数据的角色列表'
|
||||
desc: '查看当前已获取面板数据的角色列表',
|
||||
fn: ProfileList.render,
|
||||
rule: /^#(面板角色|角色面板|面板)(列表)?\s*(\d{9})?$/
|
||||
},
|
||||
|
||||
profileStat: {
|
||||
rule: /^#(面板|喵喵|角色|武器|天赋|技能|圣遗物)?练度统计$/,
|
||||
name: '面板练度统计',
|
||||
fn: ProfileStat.stat,
|
||||
name: '面板练度统计'
|
||||
rule: /^#(面板|喵喵)练度统计$/,
|
||||
yzRule: /^#*(我的)*(技能|天赋|武器|角色|练度|五|四|5|4|星)+(汇总|统计|列表)(force|五|四|5|4|星)*[ |0-9]*$/,
|
||||
yzCheck: () => Cfg.get('profileStat', false)
|
||||
},
|
||||
|
||||
avatarList: {
|
||||
rule: /^(#(角色|查询|查询角色|角色查询|人物)[ |0-9]*$)|(^(#*uid|#*UID)\+*[1|2|5-9][0-9]{8}$)|(^#[\+|+]*[1|2|5-9][0-9]{8})/,
|
||||
name: '角色查询',
|
||||
fn: ProfileStat.avatarList,
|
||||
name: '角色查询'
|
||||
rule: /^#喵喵(角色|查询)[ |0-9]*$/,
|
||||
yzRule: /^(#(角色|查询|查询角色|角色查询|人物)[ |0-9]*$)|(^(#*uid|#*UID)\+*[1|2|5-9][0-9]{8}$)|(^#[\+|+]*[1|2|5-9][0-9]{8})/,
|
||||
yzCheck: () => Cfg.get('avatarList', false)
|
||||
},
|
||||
|
||||
profileHelp: {
|
||||
rule: /^#(角色|换|更换)?面[板版]帮助$/,
|
||||
name: '角色面板帮助',
|
||||
fn: profileHelp,
|
||||
name: '角色面板帮助'
|
||||
rule: /^#(角色|换|更换)?面[板版]帮助$/
|
||||
},
|
||||
|
||||
enemyLv: {
|
||||
rule: /^#(敌人|怪物)等级\s*\d{1,3}\s*$/,
|
||||
name: '敌人等级',
|
||||
fn: enemyLv,
|
||||
describe: '【#角色】 设置伤害计算中目标敌人的等级'
|
||||
describe: '【#角色】 设置伤害计算中目标敌人的等级',
|
||||
rule: /^#(敌人|怪物)等级\s*\d{1,3}\s*$/
|
||||
},
|
||||
|
||||
profileRefresh: {
|
||||
rule: /^#(全部面板更新|更新全部面板|获取游戏角色详情|更新面板|面板更新)\s*(\d{9})?$/,
|
||||
name: '面板更新',
|
||||
describe: '【#角色】 获取游戏橱窗详情数据',
|
||||
fn: ProfileList.refresh,
|
||||
describe: '【#角色】 获取游戏橱窗详情数据'
|
||||
rule: /^#(全部面板更新|更新全部面板|获取游戏角色详情|更新面板|面板更新)\s*(\d{9})?$/
|
||||
},
|
||||
|
||||
uploadImg: {
|
||||
rule: /^#?\s*(?:上传|添加)(.+)(?:面板图)\s*$/,
|
||||
name: '上传面板图',
|
||||
describe: '【#上传刻晴面板图】 上传角色面板图',
|
||||
fn: uploadCharacterImg,
|
||||
describe: '【#上传刻晴面板图】 上传角色面板图'
|
||||
rule: /^#?\s*(?:上传|添加)(.+)(?:面板图)\s*$/
|
||||
},
|
||||
|
||||
delProfile: {
|
||||
rule: /^#?\s*(?:移除|清除|删除)(.+)(?:面板图)(\d){1,}\s*$/,
|
||||
name: '删除面板图',
|
||||
describe: '【#删除刻晴面板图1】 删除指定角色面板图(序号)',
|
||||
fn: delProfileImg,
|
||||
describe: '【#删除刻晴面板图1】 删除指定角色面板图(序号)'
|
||||
rule: /^#?\s*(?:移除|清除|删除)(.+)(?:面板图)(\d){1,}\s*$/
|
||||
},
|
||||
|
||||
profileImgList: {
|
||||
rule: /^#?\s*(.+)(?:面板图列表)\s*$/,
|
||||
name: '面板图列表',
|
||||
describe: '【#刻晴面板图列表】 删除指定角色面板图(序号)',
|
||||
fn: profileImgList,
|
||||
describe: '【#刻晴面板图列表】 删除指定角色面板图(序号)'
|
||||
rule: /^#?\s*(.+)(?:面板图列表)\s*$/
|
||||
},
|
||||
|
||||
profileDel: {
|
||||
rule: /^#(删除全部面板|删除面板|删除面板数据)\s*(\d{9})?$/,
|
||||
name: '删除面板',
|
||||
describe: '【#角色】 删除游戏橱窗详情数据',
|
||||
fn: ProfileList.del,
|
||||
describe: '【#角色】 删除游戏橱窗详情数据'
|
||||
rule: /^#(删除全部面板|删除面板|删除面板数据)\s*(\d{9})?$/
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -1,19 +1,13 @@
|
||||
import { Cfg, Common } from '../../components/index.js'
|
||||
import { Common } from '../../components/index.js'
|
||||
import { MysApi, Player, Character } from '../../models/index.js'
|
||||
|
||||
const ProfileStat = {
|
||||
async stat (e) {
|
||||
let isMatch = /^#(面板|喵喵|角色|武器|天赋|技能|圣遗物)练度统计?$/.test(e.original_msg || e.msg || '')
|
||||
if (!Cfg.get('profileStat', false) && !isMatch) {
|
||||
return false
|
||||
}
|
||||
return await ProfileStat.render(e)
|
||||
return ProfileStat.render(e, false)
|
||||
},
|
||||
|
||||
async avatarList (e) {
|
||||
if (!Cfg.get('avatarList', false)) {
|
||||
return false
|
||||
}
|
||||
return await ProfileStat.render(e, true)
|
||||
return ProfileStat.render(e, true)
|
||||
},
|
||||
async render (e, isAvatarList = false) {
|
||||
// 缓存时间,单位小时
|
||||
@ -30,11 +24,9 @@ const ProfileStat = {
|
||||
|
||||
let player = Player.create(e)
|
||||
|
||||
await player.refreshMysInfo()
|
||||
|
||||
let avatarRet = await player.refreshAndGetAvatarData({
|
||||
detail: 1,
|
||||
talent: 0,
|
||||
talent: isAvatarList ? 0 : 1,
|
||||
rank: true,
|
||||
retType: 'array',
|
||||
sort: true
|
||||
|
@ -69,6 +69,8 @@ class App {
|
||||
fnc: key
|
||||
})
|
||||
|
||||
console.log('rule', rule)
|
||||
|
||||
if (app.check) {
|
||||
check.push(app.check)
|
||||
}
|
||||
@ -92,6 +94,24 @@ class App {
|
||||
e.original_msg = e.original_msg || e.msg
|
||||
return await app.fn.call(this, e)
|
||||
}
|
||||
|
||||
if (app.yzRule && app.yzCheck) {
|
||||
let yzKey = `Yz${key}`
|
||||
let yzRule = lodash.trim(app.yzRule.toString(), '/')
|
||||
|
||||
rules.push({
|
||||
reg: yzRule,
|
||||
fnc: yzKey
|
||||
})
|
||||
cls.prototype[yzKey] = async function () {
|
||||
if (!app.yzCheck()) {
|
||||
return false
|
||||
}
|
||||
let e = this.e
|
||||
e.original_msg = e.original_msg || e.msg
|
||||
return await app.fn.call(this, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
return cls
|
||||
}
|
||||
@ -139,6 +159,14 @@ class App {
|
||||
if (ret === true) {
|
||||
return true
|
||||
}
|
||||
} else if (app.yzRule && app.yzCheck()) {
|
||||
rule = new RegExp(app.yzRule)
|
||||
if (rule.test(msg)) {
|
||||
let ret = await app.fn(e, {})
|
||||
if (ret === true) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (event === 'poke' && msg === '#poke#') {
|
||||
let ret = await app.fn(e, {})
|
||||
|
@ -155,16 +155,17 @@ export default class AvatarData extends Base {
|
||||
}
|
||||
}
|
||||
|
||||
setTalent (ds = {}, mode = 'original', source = '') {
|
||||
setTalent (ds = false, mode = 'original', updateTime = '') {
|
||||
const now = this._now || (new Date()) * 1
|
||||
if (ds) {
|
||||
let ret = this.char.getAvatarTalent(ds, this.cons, mode)
|
||||
if (!ret) {
|
||||
return false
|
||||
}
|
||||
if (ret) {
|
||||
this.talent = ret || this.talent
|
||||
// 设置天赋更新时间
|
||||
this._talent = ds._talent || this._talent || ds._time || now
|
||||
if (source && ret) {
|
||||
}
|
||||
}
|
||||
if (updateTime) {
|
||||
this._talent = now
|
||||
}
|
||||
}
|
||||
|
@ -12,11 +12,12 @@ const MysAvatar = {
|
||||
if (force === true) {
|
||||
force = 0
|
||||
}
|
||||
let duration = new Date() * 1 - time * 1
|
||||
let duration = (new Date() * 1 - time * 1) / 1000
|
||||
if (isNaN(duration) || duration < 0) {
|
||||
return true
|
||||
}
|
||||
return duration > (forceMap[force] || 60) * 60 * 1000
|
||||
let reqTime = forceMap[force] === 0 ? 0 : (forceMap[force] || 60)
|
||||
return duration > reqTime * 60
|
||||
},
|
||||
/**
|
||||
* 更新米游社角色信息
|
||||
@ -194,21 +195,18 @@ const MysAvatar = {
|
||||
if (needReqIds.length > 8) {
|
||||
e && e.reply('正在获取角色信息,请稍候...')
|
||||
}
|
||||
let num = 10
|
||||
let ms = 100
|
||||
let skillRet = []
|
||||
let avatarArr = lodash.chunk(needReqIds, num)
|
||||
for (let val of avatarArr) {
|
||||
for (let id of val) {
|
||||
let failCount = 0
|
||||
// 并发5,请求天赋数据
|
||||
await Data.asyncPool(5, needReqIds, async (id) => {
|
||||
let avatar = player.getAvatar(id)
|
||||
if (avatar) {
|
||||
skillRet.push(await MysAvatar.refreshAvatarTalent(avatar, mys))
|
||||
if (!avatar || failCount > 5) {
|
||||
return false
|
||||
}
|
||||
let ret = await MysAvatar.refreshAvatarTalent(avatar, mys)
|
||||
if (ret === false) {
|
||||
failCount++
|
||||
}
|
||||
skillRet = await Promise.all(skillRet)
|
||||
skillRet = skillRet.filter(item => item.id)
|
||||
await Common.sleep(ms)
|
||||
}
|
||||
})
|
||||
}
|
||||
player.save()
|
||||
},
|
||||
@ -241,10 +239,8 @@ const MysAvatar = {
|
||||
}
|
||||
}
|
||||
let ret = char.getAvatarTalent(talent, avatar.cons, 'original')
|
||||
if (ret) {
|
||||
avatar.setTalent(ret, 'original', 'mys')
|
||||
}
|
||||
return true
|
||||
avatar.setTalent(ret, 'original', true)
|
||||
return !!ret
|
||||
}
|
||||
return false
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user