Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions docs/reference/Action.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,20 @@ Action `AddIRCMessage` 的 Delay 不需要 DelayHost,而是借助它的目标
### `AddMissionToHubServer`

```xml
<AddMissionToHubServer MissionName="Missions/MyMission.xml" TargetComp="missionHub" AssignmentTag="Kaguya" StartsComplete="true"/>
<AddMissionToHubServer MissionFilepath="Missions/MyMission.xml" TargetComp="missionHub" AssignmentTag="Kaguya" StartsComplete="true"/>
```
将一个 Mission 添加到 MissionHub/DHS 的任务列表中。
- `MissionName`:`string`,Mission 的文件路径。
- `MissionFilepath`:`string`,Mission 的文件路径。
- `TargetComp`:`string`,HubServer 的 Computer ID。
- *`AssignmentTag`*?:`string`,分配Tag。如果是给 MissionHub 添加任务,用 `"top"` 就会使任务置顶。给 DHS 添加,就会提示分配给了谁。
- *`StartsComplete`*?:`bool`,是否开始完成。默认值为 `false`。

> [!NOTE]
> MissionHub 是拥有 `missionListingServer` 或 `missionHubServer` Daemon 的 Node,在游戏中作为“任务中心”。DHS 此处代指有 `DHSDaemon` Daemon 的 Node。

> [!NOTE]
> 通过此 Action 加入的任务,其 `missionStart` 在**加载时不会执行**(扩展模式下未显式设置 `suppress="false"` 时,该属性默认为 `true`),而是在玩家**接取**该任务时执行。详见 [Mission](Mission.md) 的 `missionStart` 一节。

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我觉得0个人在意主游戏情况
毕竟你写action和mission的唯一情况是扩展模式(除非真有人去改content的玩意),而且我也不是没说主游戏模式下是默认false

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

同意。0个人在意主游戏情况

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

你估计得找个办法去告诉这个AI

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

你估计得找个办法去告诉这个AI

如果有机会频繁使用的话再说吧


参考:[SAAddMissionToHubServer.cs](https://github.com/UnHacknet/OpenHacknet/blob/main/SAAddMissionToHubServer.cs)

### `RemoveMissionFromHubServer`
Expand Down
18 changes: 16 additions & 2 deletions docs/reference/Mission.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,19 @@ Mission 的根元素。
```
任务被加载后执行的 Function。不使用可以把 `<missionStart>` 元素删除。
- *`val`*?:`int`,Function 的参数。默认值为 `0`。
- *`suppress`*?:`bool`,默认值为 `false`。`suppress` 为 `true` 时通过 `LoadMission` Action 加载的 Mission 的 `missionStart` 不会被执行,只有通过 Mission 的 `nextMission` 加载的任务的 missionStart 才会执行。`false` 时可能会多次执行(存读档)
- *`suppress`*?:`bool`,默认值取决于运行模式:**扩展模式下为 `true`,主游戏模式下为 `false`**。
- ⚠️ 因此在扩展中**不写该属性等同于 `suppress="true"`**。
- `true`:加载时仅记录、不执行,等到「激活时机」才执行,包括:
- 通过 `nextMission` 进入的任务
- 扩展启动时的起始任务
- 在 MissionHubServer / MissionListingServer / DLCHubServer 等节点**接取**任务时 —— 激活由接取动作直接触发,**不以发送任务邮件为条件**(DHS 的接取不调用 `sendEmail`;另两者会调用,但是否真正发出取决于本任务的 `IsSilent`,见下文 `nextMission` 一节)
- ⚠️ 通过 [`LoadMission`](Action.md) Action 加载的任务不在上述路径中,其 `missionStart` **不会执行**;有需要时应显式写 `suppress="false"`
- `false`:任务文件**每次被解析时都会执行**。解析发生在任务的各种加载路径上,例如:
- 存读档 / 新游戏时的任务加载
- **DHS(`DLCHubServer`)每次连接**:`navigatedTo` → `ReadActiveMissions` → `MissionSerializer.restoreMissionFromFile` → 重新解析任务 XML
- 玩家接取 DHS 任务时(`PlayerAcceptMission` 中会再次解析任务文件)
- 注意 `MissionHubServer` / `MissionListingServer` 的任务恢复发生在 `loadInit`(随存档加载),**不随每次连接重载**
- 因此 hub / DHS 中的任务应使用 `suppress="true"`(**扩展模式下**可省略该属性;主游戏模式下省略等同于 `false`)

::: details (官方介绍)
官方是这么介绍的:
Expand All @@ -59,7 +71,9 @@ otherwise it will activate when it is loaded. This is very important to remember
writing missions designed for use in a hub server - those missions are loaded when the save game is loaded
or a new game is started.
```
但是实践证明,添加到 MissionHub 的 Mission 的 `missionStart` 在 `suppress` 为 `false` 时也没有被执行。
实测补充:向 MissionHub 添加的 Mission 若**省略 `suppress` 属性**,其 `missionStart` 不会在加载时执行 —— 因为扩展模式下该属性默认为 `true`(任务被抑制,需等玩家接取时才激活)。显式写 `suppress="false"` 时,如上文所述,任务文件每次被解析都会执行。

参考:[ComputerLoader.cs](https://github.com/UnHacknet/OpenHacknet/blob/main/ComputerLoader.cs)、[MissionSerializer.cs](https://github.com/UnHacknet/OpenHacknet/blob/main/MissionSerializer.cs)、[ActiveMission.cs](https://github.com/UnHacknet/OpenHacknet/blob/main/ActiveMission.cs)、[MissionHubServer.cs](https://github.com/UnHacknet/OpenHacknet/blob/main/MissionHubServer.cs)
:::


Expand Down