Skip to content

Commit

Permalink
feat(adv): reorganize import
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed Apr 4, 2021
1 parent f7e77f0 commit d6dd128
Show file tree
Hide file tree
Showing 10 changed files with 61 additions and 68 deletions.
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/achv.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { User, Context, Session } from 'koishi-core'
import { difference, defineProperty, union, makeArray } from 'koishi-utils'
import { User, Context, Session, difference, defineProperty, union, makeArray } from 'koishi-core'
import { Show } from './utils'
import {} from 'koishi-plugin-common'
import Profile from './profile'
Expand Down
102 changes: 52 additions & 50 deletions packages/plugin-adventure/src/affinity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,64 +135,66 @@ export namespace Affinity {
return output.join('\n')
})

ctx.with(['koishi-plugin-teach'], (ctx) => {
ctx.command('teach', { patch: true })
.option('minAffinity', '-a <aff:posint> 最小好感度')
.option('maxAffinity', '-A <aff:posint> 最大好感度')
.action(({ options }) => {
if (options.maxAffinity === 0) options.maxAffinity = 32768
})

ctx.before('dialogue/search', ({ options }, test) => {
if (options.minAffinity !== undefined) test.matchAffinity = options.minAffinity
if (options.maxAffinity !== undefined) test.mismatchAffinity = options.maxAffinity
ctx.with(['koishi-plugin-teach'], integrateTeach)
}

function integrateTeach(ctx: Context) {
ctx.command('teach', { patch: true })
.option('minAffinity', '-a <aff:posint> 最小好感度')
.option('maxAffinity', '-A <aff:posint> 最大好感度')
.action(({ options }) => {
if (options.maxAffinity === 0) options.maxAffinity = 32768
})

function matchAffinity(affinity: number) {
return `(\`maxAffinity\` > ${affinity} && \`minAffinity\` <= ${affinity})`
}
ctx.before('dialogue/search', ({ options }, test) => {
if (options.minAffinity !== undefined) test.matchAffinity = options.minAffinity
if (options.maxAffinity !== undefined) test.mismatchAffinity = options.maxAffinity
})

ctx.on('dialogue/mysql', (test, conditionals) => {
if (test.matchAffinity !== undefined) {
conditionals.push(matchAffinity(test.matchAffinity))
}
if (test.mismatchAffinity !== undefined) {
conditionals.push('!' + matchAffinity(test.mismatchAffinity))
}
})
function matchAffinity(affinity: number) {
return `(\`maxAffinity\` > ${affinity} && \`minAffinity\` <= ${affinity})`
}

ctx.on('dialogue/modify', async ({ options }, data) => {
if (options.minAffinity !== undefined) data.minAffinity = options.minAffinity
if (options.maxAffinity !== undefined) data.maxAffinity = options.maxAffinity
})
ctx.on('dialogue/mysql', (test, conditionals) => {
if (test.matchAffinity !== undefined) {
conditionals.push(matchAffinity(test.matchAffinity))
}
if (test.mismatchAffinity !== undefined) {
conditionals.push('!' + matchAffinity(test.mismatchAffinity))
}
})

ctx.on('dialogue/detail', (dialogue, output) => {
if (dialogue.minAffinity > 0) output.push(`最低好感度:${dialogue.minAffinity}`)
if (dialogue.maxAffinity < 32768) output.push(`最高好感度:${dialogue.maxAffinity}`)
})
ctx.on('dialogue/modify', async ({ options }, data) => {
if (options.minAffinity !== undefined) data.minAffinity = options.minAffinity
if (options.maxAffinity !== undefined) data.maxAffinity = options.maxAffinity
})

ctx.on('dialogue/detail-short', (dialogue, output) => {
if (dialogue.minAffinity > 0) output.push(`a=${dialogue.minAffinity}`)
if (dialogue.maxAffinity < 32768) output.push(`A=${dialogue.maxAffinity}`)
})
ctx.on('dialogue/detail', (dialogue, output) => {
if (dialogue.minAffinity > 0) output.push(`最低好感度:${dialogue.minAffinity}`)
if (dialogue.maxAffinity < 32768) output.push(`最高好感度:${dialogue.maxAffinity}`)
})

ctx.before('dialogue/attach-user', (state, fields) => {
if (state.dialogue) return
// 如果所有可能触发的问答都不涉及好感度,则无需获取好感度字段
// eslint-disable-next-line no-cond-assign
if (state.noAffinityTest = state.dialogues.every(d => !d._weight || !d.minAffinity && d.maxAffinity === 32768)) return
for (const field of Affinity.fields) {
fields.add(field)
}
})
ctx.on('dialogue/detail-short', (dialogue, output) => {
if (dialogue.minAffinity > 0) output.push(`a=${dialogue.minAffinity}`)
if (dialogue.maxAffinity < 32768) output.push(`A=${dialogue.maxAffinity}`)
})

ctx.before('dialogue/attach-user', (state, fields) => {
if (state.dialogue) return
// 如果所有可能触发的问答都不涉及好感度,则无需获取好感度字段
// eslint-disable-next-line no-cond-assign
if (state.noAffinityTest = state.dialogues.every(d => !d._weight || !d.minAffinity && d.maxAffinity === 32768)) return
for (const field of Affinity.fields) {
fields.add(field)
}
})

ctx.on('dialogue/attach-user', ({ session, dialogues, noAffinityTest }) => {
if (noAffinityTest) return
const affinity = Affinity.get(session.user)
dialogues.forEach((dialogue) => {
if (dialogue.minAffinity <= affinity && dialogue.maxAffinity > affinity) return
dialogue._weight = 0
})
ctx.on('dialogue/attach-user', ({ session, dialogues, noAffinityTest }) => {
if (noAffinityTest) return
const affinity = Affinity.get(session.user)
dialogues.forEach((dialogue) => {
if (dialogue.minAffinity <= affinity && dialogue.maxAffinity > affinity) return
dialogue._weight = 0
})
})
}
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/buff.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Context, Command, checkTimer, checkUsage } from 'koishi-core'
import { Time } from 'koishi-utils'
import { Context, Command, checkTimer, checkUsage, Time } from 'koishi-core'
import { Adventurer, Show } from './utils'

declare module 'koishi-core' {
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/event.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { getValue, Shopper, Adventurer } from './utils'
import { User, checkTimer, Session } from 'koishi-core'
import { Logger } from 'koishi-utils'
import { User, checkTimer, Session, Logger } from 'koishi-core'
import Buff from './buff'
import Item from './item'
import Luck from './luck'
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Context, User } from 'koishi-core'
import { isInteger } from 'koishi-utils'
import { Context, User, isInteger } from 'koishi-core'
import { Show } from './utils'
import Achievement from './achv'
import Affinity from './affinity'
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/item.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Context, checkTimer, Argv, Session, User } from 'koishi-core'
import { isInteger, Random } from 'koishi-utils'
import { Context, checkTimer, Argv, Session, User, isInteger, Random } from 'koishi-core'
import { getValue, Shopper, Adventurer, ReadonlyUser, Show } from './utils'
import Event from './event'
import Phase from './phase'
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/luck.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Context, getUsage, Session, checkTimer, checkUsage, User } from 'koishi-core'
import { Random } from 'koishi-utils'
import { Context, getUsage, Session, checkTimer, checkUsage, User, Random } from 'koishi-core'
import { Adventurer, ReadonlyUser } from './utils'
import Affinity from './affinity'
import Phase from './phase'
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/phase.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Context, User, Session, checkTimer, checkUsage } from 'koishi-core'
import { Logger, Random, interpolate, noop, Time } from 'koishi-utils'
import { Context, User, Session, checkTimer, checkUsage, Logger, Random, interpolate, noop, Time } from 'koishi-core'
import { ReadonlyUser, getValue, Adventurer, Shopper, Show } from './utils'
import Event from './event'
import {} from 'koishi-plugin-common'
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/rank.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { User, Context, Session, GroupMemberInfo, Database } from 'koishi-core'
import { paramCase, camelCase, isInteger } from 'koishi-utils'
import { User, Context, Session, GroupMemberInfo, Database, paramCase, camelCase, isInteger } from 'koishi-core'
import {} from 'koishi-plugin-mysql'

type ExtendedUser<T extends User.Field = User.Field> = Pick<User, T> & { _value: number }
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-adventure/src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { User, Database, Context, Command, Argv, TableType, FieldCollector } from 'koishi-core'
import { defineEnumProperty } from 'koishi-utils'
import { User, Database, Context, Command, Argv, TableType, FieldCollector, defineEnumProperty } from 'koishi-core'
import {} from 'koishi-plugin-mysql'
import Achievement from './achv'

Expand Down

0 comments on commit d6dd128

Please sign in to comment.