文档
持久化

Persistent<T extends PersistentContent>

在过去,我们只能通过脚本修改 Storable 的状态,但 Persistent 提供了一组有用的方法,可以轻松控制流程

Persistent 需要一个命名空间的 名称初始状态具有相同名称的 Persistent 将共享相同的状态

⚠️

命名空间不能是现有的内置命名空间(内置命名空间包括:"game")

type PersisData = {
    flag: boolean;
    coin: number;
    name: string;
    // ...
};
const persis = new Persistent<PersisData>("persis", {
    flag: false,
    coin: 0,
    name: "约翰·史密斯",
    // ...
});

注意: 存储的内容必须是 可序列化的, NarraLeaf-React 支持的可序列化值包括:

  • string
  • number
  • boolean
  • object: 键为 string,值为上述可序列化值
  • array: 元素为上述可序列化值
  • undefined
  • null
  • Date: 标准的 JavaScript 日期对象

如果脚本内容包含 Persistent,则必须使用 Story 进行注册

story.registerPersistent(persis);

Public Methods

constructor

  • namespace: string - 命名空间的名称
  • defaultContent: T - 初始状态

equals<K extends StringKeyOf<T>>

  • key: K - 状态的键
  • value: T[K] - 状态的值
  • 返回: Lambda<boolean>
scene.action([
    Condition
        .If(persis.equals("name", "约翰·史密斯"), [
        character1.say("你好,约翰·史密斯!")
        ])
]);

notEquals<K extends StringKeyOf<T>>

  • key: K - 状态的键
  • value: T[K] - 状态的值
  • 返回: Lambda<boolean>

isTrue<K extends StringKeyOf<T>>

  • key: K - 状态的键
  • 返回: Lambda<boolean>
scene.action([
Condition
        .If(persis.isTrue("flag"), [
        character1.say("标志为真")
        ])
]);

isFalse<K extends StringKeyOf<T>>

  • key: K - 状态的键
  • 返回: Lambda<boolean>

isNotNull<K extends StringKeyOf<T>>

  • key: K - 状态的键
  • 返回: Lambda<boolean>

toWords<K extends StringKeyOf<T>>

  • key: K - 状态的键
  • 返回: Word<DynamicWord>
character.say`你有 ${persis.toWords("coin")} 个硬币`;

get<K extends StringKeyOf<T>>

get 的别名

  • key: K - 状态的键
  • 返回: Word<DynamicWord>
character.say`你有 ${persis.get("coin")} 个硬币`;

conditional

  • condition: Lambda<boolean> | LambdaHandler<boolean>
  • ifTrue: DynamicWordResult
  • ifFalse: DynamicWordResult
  • 返回: Word
character.say`你的标志是 ${persis.conditional(
    persis.isTrue("flag"),
    "真",
    "假"
)}`;

evaluate<K extends StringKeyOf<T>>

使用 JavaScript 函数评估状态

  • key: K - 状态的键
  • fn: (value: T[K]) => boolean - 用于评估状态的 JavaScript 函数
  • 返回 Lambda<boolean>
scene.action([
Condition
    .If(persis.evaluate("coin", (coin) => coin < 10), [
        character1.say`你没有足够的硬币!`
    ])
]);

链式方法

set<K extends StringKeyOf<T>>

重载 1 / 2

  • key: K - 状态的键
  • value: T[K] - 状态的值
scene.action([
    persis.set("coin", 10)
]);

重载 2 / 2

  • key: K - 状态的键
  • handler: (value: T[K]) => T[K]) - 用于修改值的处理程序
scene.action([
    persis.set("coin", (coin) => coin + 10) // 硬币将增加 10
]);