feat(稱呼): 害羞時叫不出名字,節點可設羞怯稱呼
既有的 except(anger>=40 → 退回全名)走的是生氣方向:規則被暫停、退回查表的 更正式講法。害羞是反方向——不是更正式,是叫不出來:改口、講到一半換稱呼、 把名字吞掉。所以另開一條路,不硬塞進 except。 shyAddress():羞恥度過 SHY_ADDRESS_AT(60)就換稱呼。節點設了新的 羞怯稱呼 facet 就用它,沒設就吞掉名字改用「你」——不叫名字本身就是訊號,這是預設值 而不是缺省行為。 門檻取 60,跟破口、標點、嘴硬那一級同一條線。女性預設 70 因此本來就落在這條線上, 那是 G3 要的效果,不是副作用。 羞怯稱呼不列進「他要求過的語氣規則」那一行:它只在過門檻時生效,兩邊都列會讓 人格同時看到「叫他⋯那個」跟「平常叫他⋯那個」。relation style 的清單裡照樣看得到。 toneDirective 改吃 opts,才拿得到這一輪的 state/prev/tone 去算羞恥度。 selftest 728 → 735。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2026,6 +2026,34 @@ check("relation speaker 設定後,context 會注入語氣層與稱呼規則",
|
||||
return res.status === 0 && pl.loadConfig("alpha").speaker_node === pl.slugify("伴侶甲") &&
|
||||
ctx.includes("語氣層:老夫老妻") && ctx.includes("親愛的");
|
||||
})());
|
||||
// 稱呼隨情緒偏移:生氣走 except(退回全名),害羞是反方向(叫不出來)
|
||||
check("羞怯稱呼是 STYLE_FACETS 的一格", pl.STYLE_FACETS.includes(pl.SHY_FACET));
|
||||
check("羞恥度不到門檻就不換稱呼",
|
||||
pl.shyAddress("alpha", { style: {} }, pl.SHY_ADDRESS_AT - 1) === null);
|
||||
check("到門檻、沒設專屬叫法 → 吞掉名字(不叫名字本身就是訊號)", (() => {
|
||||
const s = pl.shyAddress("alpha", { style: {} }, 70);
|
||||
return s !== null && s.own === false && s.value === null;
|
||||
})(), JSON.stringify(pl.shyAddress("alpha", { style: {} }, 70)));
|
||||
check("節點設了羞怯稱呼就用它", (() => {
|
||||
const s = pl.shyAddress("alpha", { style: { 羞怯稱呼: { value: "⋯那個" } } }, 70);
|
||||
return s !== null && s.own === true && s.value === "⋯那個";
|
||||
})(), JSON.stringify(pl.shyAddress("alpha", { style: { 羞怯稱呼: { value: "⋯那個" } } }, 70)));
|
||||
check("害羞時的語氣指示叫他把名字吞掉(女性預設 70 就落在這條線上)", (() => {
|
||||
cli(["relation", "speaker", "--session", S_HOST, "--name", "伴侶甲"]);
|
||||
return pl.modestyState("alpha", {}).value >= pl.SHY_ADDRESS_AT &&
|
||||
pl.toneDirective("alpha", {}).includes("把名字吞掉");
|
||||
})(), `${pl.modestyState("alpha", {}).value}|${pl.toneDirective("alpha", {})}`);
|
||||
check("設了羞怯稱呼之後改成叫那個,而且不重複列在「他要求過的規則」裡", (() => {
|
||||
cli(["relation", "style", "--session", S_HOST, "--name", "伴侶甲",
|
||||
"--facet", "羞怯稱呼", "--value", "⋯那個"]);
|
||||
const d = pl.toneDirective("alpha", {});
|
||||
return d.includes("叫他「⋯那個」") && !d.includes("把名字吞掉") &&
|
||||
!d.includes("羞怯稱呼→");
|
||||
})(), pl.toneDirective("alpha", {}));
|
||||
check("羞怯稱呼在 relation style 的清單裡還是查得到(那裡該看得見全部)", (() => {
|
||||
const out = cli(["relation", "style", "--session", S_HOST, "--name", "伴侶甲"]).stdout;
|
||||
return out.includes("羞怯稱呼");
|
||||
})());
|
||||
check("relation speaker --clear 之後就不再注入語氣指示", (() => {
|
||||
cli(["relation", "speaker", "--session", S_HOST, "--clear"]);
|
||||
return !pl.loadConfig("alpha").speaker_node &&
|
||||
|
||||
Reference in New Issue
Block a user