初始仓库迁移
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-04 23:57:06 +08:00
parent 80986b790d
commit c49c64896a
18446 changed files with 532435 additions and 2 deletions

View File

@@ -0,0 +1,64 @@
import type {Character, CharacterChatTurn, Encounter} from '../types';
export function buildOfflineNpcChatDialogue(encounter: Encounter, topic: string) {
return [
`你:${topic}。我想先听听你的看法。`,
`${encounter.npcName}:你问得并不随意,看来是真想弄清这里的底细。`,
'你:前面的局势我还没看透。你若知道什么,就别只说一半。',
`${encounter.npcName}:我能告诉你的,是这里近来一直不太平。接下来多留神些。`,
].join('\n');
}
export function buildOfflineNpcRecruitDialogue(encounter: Encounter) {
return [
'你:这不是客套。我是真心希望你能加入队伍,和我一起走下去。',
`${encounter.npcName}:你这番话够坦诚,我听得出你不是随口一提。`,
'你:前路不会轻松,但我还是希望你能与我并肩同行。',
`${encounter.npcName}:好,我答应你。从现在起,我便与你结伴同行。`,
].join('\n');
}
export function buildOfflineCharacterPanelChatReply(
targetCharacter: Character,
playerMessage: string,
conversationSummary: string,
) {
const personalityCue = targetCharacter.personality
.split(/[,.!?]/u)
.find(Boolean)?.trim() ?? '我会按自己的方式回答你';
const focus = playerMessage.trim() || '我听见你刚才的话了。';
return `${focus}${focus.endsWith('。') ? '' : '。'}${personalityCue}${personalityCue.endsWith('。') ? '' : '。'}${
conversationSummary
? '我还记得我们之前谈过的那些事。'
: '既然你愿意直接来问,我也会认真回答。'
}前路不会轻松,但如果你还想继续说下去,我会陪着你。`;
}
export function buildOfflineCharacterPanelChatSuggestions(targetCharacter: Character) {
return [
'把你的意思再说清楚一些。',
`${targetCharacter.name},你真正担心的到底是什么?`,
'先别管外面的局势,我想多了解你一点。',
];
}
export function buildOfflineCharacterPanelChatSummary(
targetCharacter: Character,
history: CharacterChatTurn[],
previousSummary: string,
) {
const latestTurns = history.slice(-4)
.map(turn => `${turn.speaker === 'player' ? '玩家' : targetCharacter.name}${turn.text}`)
.join(' ');
const currentSummary = latestTurns
? `${targetCharacter.name}在私下交谈中更愿意坦率回应。最近交流:${latestTurns}`
: `${targetCharacter.name}愿意继续私下交谈,对玩家的态度也在逐渐变得更温和。`;
if (!previousSummary) {
return currentSummary.slice(0, 118);
}
return `${previousSummary} ${currentSummary}`.slice(0, 118);
}