1
This commit is contained in:
@@ -8,6 +8,7 @@ import type {
|
||||
SceneConnectionInfo,
|
||||
StoryEngineMemoryState,
|
||||
} from '../types';
|
||||
import { resolveCustomWorldRoleIdReferences } from './customWorldRoleReferences';
|
||||
|
||||
function toSet(values: string[]) {
|
||||
return new Set(values.map((value) => value.trim()).filter(Boolean));
|
||||
@@ -227,17 +228,11 @@ export function resolveActiveSceneActEncounterNpcIds(params: {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
...new Set(
|
||||
[
|
||||
activeAct.primaryNpcId,
|
||||
activeAct.oppositeNpcId,
|
||||
...activeAct.encounterNpcIds,
|
||||
]
|
||||
.map((entry) => entry.trim())
|
||||
.filter(Boolean),
|
||||
),
|
||||
];
|
||||
return resolveCustomWorldRoleIdReferences(params.profile, [
|
||||
activeAct.primaryNpcId,
|
||||
activeAct.oppositeNpcId,
|
||||
...activeAct.encounterNpcIds,
|
||||
]);
|
||||
}
|
||||
|
||||
export function resolveActiveSceneActPrimaryNpcId(params: {
|
||||
@@ -245,7 +240,9 @@ export function resolveActiveSceneActPrimaryNpcId(params: {
|
||||
sceneId: string | null | undefined;
|
||||
storyEngineMemory?: StoryEngineMemoryState | null;
|
||||
}) {
|
||||
return resolveActiveSceneActBlueprint(params)?.primaryNpcId?.trim() || null;
|
||||
return resolveCustomWorldRoleIdReferences(params.profile, [
|
||||
resolveActiveSceneActBlueprint(params)?.primaryNpcId,
|
||||
])[0] ?? null;
|
||||
}
|
||||
|
||||
export function resolveActiveSceneActOppositeNpcId(params: {
|
||||
@@ -253,7 +250,9 @@ export function resolveActiveSceneActOppositeNpcId(params: {
|
||||
sceneId: string | null | undefined;
|
||||
storyEngineMemory?: StoryEngineMemoryState | null;
|
||||
}) {
|
||||
return resolveActiveSceneActBlueprint(params)?.oppositeNpcId?.trim() || null;
|
||||
return resolveCustomWorldRoleIdReferences(params.profile, [
|
||||
resolveActiveSceneActBlueprint(params)?.oppositeNpcId,
|
||||
])[0] ?? null;
|
||||
}
|
||||
|
||||
export function resolveActiveSceneActEncounterFocusNpcId(params: {
|
||||
@@ -262,12 +261,11 @@ export function resolveActiveSceneActEncounterFocusNpcId(params: {
|
||||
storyEngineMemory?: StoryEngineMemoryState | null;
|
||||
}) {
|
||||
const activeAct = resolveActiveSceneActBlueprint(params);
|
||||
return (
|
||||
activeAct?.oppositeNpcId?.trim() ||
|
||||
activeAct?.primaryNpcId?.trim() ||
|
||||
activeAct?.encounterNpcIds[0]?.trim() ||
|
||||
null
|
||||
);
|
||||
return resolveCustomWorldRoleIdReferences(params.profile, [
|
||||
activeAct?.oppositeNpcId,
|
||||
activeAct?.primaryNpcId,
|
||||
activeAct?.encounterNpcIds[0],
|
||||
])[0] ?? null;
|
||||
}
|
||||
|
||||
export function resolveActiveSceneActBackgroundImage(params: {
|
||||
@@ -295,13 +293,18 @@ export function canUseLimitedPrimaryNpcChat(params: {
|
||||
storyEngineMemory: params.storyEngineMemory,
|
||||
});
|
||||
|
||||
const limitedChatNpcIds = toSet([
|
||||
activeAct?.primaryNpcId ?? '',
|
||||
activeAct?.oppositeNpcId ?? '',
|
||||
]);
|
||||
const limitedChatNpcIds = toSet(
|
||||
resolveCustomWorldRoleIdReferences(params.profile, [
|
||||
activeAct?.primaryNpcId,
|
||||
activeAct?.oppositeNpcId,
|
||||
]),
|
||||
);
|
||||
const normalizedNpcId =
|
||||
resolveCustomWorldRoleIdReferences(params.profile, [params.npcId])[0] ??
|
||||
params.npcId;
|
||||
|
||||
// 中文注释:第一幕对面角色即使是负好感,也必须先进入剧情对话;普通敌人仍按战斗处理。
|
||||
if (limitedChatNpcIds.has(params.npcId)) {
|
||||
if (limitedChatNpcIds.has(normalizedNpcId)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -310,7 +313,7 @@ export function canUseLimitedPrimaryNpcChat(params: {
|
||||
profile: params.profile,
|
||||
sceneId: params.sceneId,
|
||||
storyEngineMemory: params.storyEngineMemory,
|
||||
}) === params.npcId
|
||||
}) === normalizedNpcId
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user