# Zulip配置目录

本目录包含Zulip集成系统的配置文件。

## 文件说明

### map-config.json

地图映射配置文件，定义游戏地图到Zulip Stream/Topic的映射关系。

#### 配置结构

```json
{
  "version": "1.0.0",
  "lastModified": "2025-12-25T00:00:00.000Z",
  "description": "配置描述",
  "maps": [
    {
      "mapId": "地图唯一标识",
      "mapName": "地图显示名称",
      "zulipStream": "对应的Zulip Stream名称",
      "interactionObjects": [
        {
          "objectId": "交互对象唯一标识",
          "objectName": "交互对象显示名称",
          "zulipTopic": "对应的Zulip Topic名称",
          "position": { "x": 100, "y": 150 }
        }
      ]
    }
  ]
}
```

#### 字段说明

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| version | string | 否 | 配置版本号 |
| lastModified | string | 否 | 最后修改时间（ISO 8601格式） |
| description | string | 否 | 配置描述 |
| maps | array | 是 | 地图配置数组 |

##### 地图配置 (MapConfig)

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| mapId | string | 是 | 地图唯一标识，如 "novice_village" |
| mapName | string | 是 | 地图显示名称，如 "新手村" |
| zulipStream | string | 是 | 对应的Zulip Stream名称 |
| interactionObjects | array | 是 | 交互对象配置数组 |

##### 交互对象配置 (InteractionObject)

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| objectId | string | 是 | 交互对象唯一标识 |
| objectName | string | 是 | 交互对象显示名称 |
| zulipTopic | string | 是 | 对应的Zulip Topic名称 |
| position | object | 是 | 对象在地图中的位置 |
| position.x | number | 是 | X坐标 |
| position.y | number | 是 | Y坐标 |

## 配置示例

### 新手村配置

```json
{
  "mapId": "novice_village",
  "mapName": "新手村",
  "zulipStream": "Novice Village",
  "interactionObjects": [
    {
      "objectId": "notice_board",
      "objectName": "公告板",
      "zulipTopic": "Notice Board",
      "position": { "x": 100, "y": 150 }
    },
    {
      "objectId": "village_well",
      "objectName": "村井",
      "zulipTopic": "Village Well",
      "position": { "x": 200, "y": 200 }
    }
  ]
}
```

### 酒馆配置

```json
{
  "mapId": "tavern",
  "mapName": "酒馆",
  "zulipStream": "Tavern",
  "interactionObjects": [
    {
      "objectId": "bar_counter",
      "objectName": "吧台",
      "zulipTopic": "Bar Counter",
      "position": { "x": 150, "y": 100 }
    },
    {
      "objectId": "fireplace",
      "objectName": "壁炉",
      "zulipTopic": "Fireplace Chat",
      "position": { "x": 300, "y": 200 }
    }
  ]
}
```

## 热重载

配置文件支持热重载，修改后无需重启服务即可生效。

### 启用配置监听

在代码中调用：

```typescript
configManagerService.enableConfigWatcher();
```

### 手动重载配置

```typescript
await configManagerService.reloadConfig();
```

## 验证配置

系统启动时会自动验证配置文件的有效性。验证规则包括：

1. mapId必须是非空字符串
2. mapName必须是非空字符串
3. zulipStream必须是非空字符串
4. interactionObjects必须是数组
5. 每个交互对象必须有有效的objectId、objectName、zulipTopic和position
6. position.x和position.y必须是有效数字

## 注意事项

1. **Stream名称**: Zulip Stream名称区分大小写，请确保与Zulip服务器上的Stream名称完全匹配
2. **Topic名称**: Topic名称同样区分大小写
3. **位置坐标**: 位置坐标用于空间过滤，确保与游戏客户端的坐标系统一致
4. **唯一性**: mapId和objectId在各自范围内必须唯一
