# Goodnight 宵禁
- 作者: Jonesn、羽学、少司命
- 出处: 无
- 每天指定时间禁止进服或禁止召唤怪物（满足在线人数自动解禁召唤怪物）
- 本插件整合了白名单、宵禁、禁止召唤怪物等插件功能
- 在宵禁时间内根据在线人数来判断，是否允许召唤未击败或已击败的怪物
- 在满足在线人数和宵禁时间外的情况下：
- 通过NPC死亡事件对比在【禁止怪物表】里的怪物ID，通过击杀计数，自动赋值到【允许召唤表】
- 方便宵禁时间允许玩家召唤哪些怪物，避免单人推服务器进度的情况。
- 在线人数不满足【关闭禁怪所需人数】情况下：
- 可通过【开启召唤区】让所有在线玩家到达指定Region领地才能召唤出《允许召唤表》里的怪物


## 指令

| 语法                    |          别名           |         权限          |          说明          |
|-----------------------|:---------------------:|:-------------------:|:--------------------:|
| /gn                   |          /宵禁          |   goodnight.admin   |       查看宵禁指令菜单       |
| /gn list              |           无           |   goodnight.admin   |       列出所有宵禁表        |
| /reload               |           无           |  tshock.cfg.reload  |        重载配置文件        |
| /gn on                |           无           |   goodnight.admin   |      开启或关闭宵禁功能       |
| /gn kick              |           无           |   goodnight.admin   |      开启或关闭断连功能       |
| /gn pos               |           无           |   goodnight.admin   |       开启或关闭召唤区       |
| /gn all               |           无           |   goodnight.admin   |    开启或关闭召唤区需所有人在场    |
| /gn clear             |           无           |   goodnight.admin   |    清理《允许召唤表》的怪物ID    |
| /gn boss 次数           |           无           |   goodnight.admin   |  设置加入《允许召唤表》击杀要求次数   |
| /gn reset 怪物ID        |           无           |   goodnight.admin   |   设置重置《允许召唤表》的怪物ID   |
| /gn plr 人数            |           无           |   goodnight.admin   |   设置无视《禁止怪物表》在线人数    |
| /gn add 或 del 怪物名字    |           无           |   goodnight.admin   |   添加或移除指定玩家到断连白名单    |
| /gn plr add 或 del 玩家名 |           无           |   goodnight.admin   |  添加或删除《禁止怪物表》的指定怪物   |
| /gn time a & b 23:59  | /gn time start & stop |   goodnight.admin   |      设置宵禁开启结束时间      |
| /region define 召唤区    |           无           | tshock.admin.region | 使用TS自带/Region指令设置召唤区 |

## 配置
> 配置文件位置：tshock/宵禁.json
```json5
{
  "是否关闭宵禁": true,
  "宵禁时间设置(禁怪/断连)": {
    "Start": "00:00:00",
    "Stop": "23:59:59"
  },
  "宵禁是否断连": false,
  "玩家进服拦截消息": "当前为宵禁时间，无法加入游戏。",
  "踢出玩家断连消息": "到点了，晚安",
  "断连白名单": [
    "羽学"
  ],
  "关闭禁怪所需人数(设1为关闭)": 3,
  "是否开启召唤区": false,
  "只播报BOSS或非BOSS": true,
  "关闭切换播报类型": true,
  "召唤区的名字": "召唤区",
  "召唤区是否需要所有人": true,
  "计入'允许召唤表'的击杀次数": 2,
  "重置'允许召唤表'的怪物ID": 398,
  "允许召唤表(根据禁怪表ID自动写入)": [
    4
  ],
  "禁止怪物生成表(NpcID)": [
    4,
    13,
    14,
    15,
    35,
    36,
    50,
    113,
    114,
    125,
    126,
    127,
    128,
    129,
    130,
    131,
    134,
    135,
    136,
    222,
    245,
    246,
    247,
    248,
    249,
    262,
    266,
    370,
    396,
    397,
    398,
    400,
    439,
    440,
    422,
    493,
    507,
    517,
    636,
    657,
    668
  ]
}
```

## 更新日志

```
v2.7.3
修正一些广播格式
加入了清理《允许召唤表》的指令（/gn clear）

v2.7.2
修复检测到没有配置文件时，创建的配置没有参数
不会因为使用/reload重复写入或覆盖原来参数等问题

v2.7.1
优化了对《允许召唤表》播报细节的空检查

v2.7.0
加入了播报类型切换
(用于修复禁怪表含有自然刷新怪的情况导致广播刷屏问题)
【只播报BOSS或非BOSS】为true则只播报BOSS生成事件，反之只播报非BOSS
【关闭切换播报类型】为true则恢复默认，false则启动上面这个判断


v2.6.0
修改召唤区逻辑（不再关闭击杀计数）
通过击杀计数从《禁召表》获取ID添加到《可召表》
通过《可召表》的ID，允许《召唤区》内召唤。
添加了切换召唤区是否需要所有人判定:
启用则需所有在线人数到召唤区才能召唤出BOSS
或者有一人在召唤区，其他人在任意位置都可以召唤BOSS
可通过配置项自定义召唤区的region领地名

v2.5.0
优化了指令方法
加入了【允许召唤区】（用于切换2种逻辑的开关）
当开启功能时，则关闭原有击杀计数《允许召唤怪物表》功能
且所有在线玩家处于召唤区才能召唤怪物
否则需等宵禁时间过期或满足指定在线人数解禁
关闭后恢复原有宵禁逻辑
PS：需用TS自带的/Region指令创建名为“召唤区”的领地

v2.4.0
加入了根据击杀《禁止怪物生成表》计数，
写入《允许召唤怪物表》与其相关指令
计数要求则在满足在线人数或不在宵禁时间段
由玩家主动击杀存在《禁止怪物生成表》的怪物自动计入（无需手写）
加个配置项与指令，控制击杀什么怪物ID来重置《允许召唤怪物表》

v2.3.0
加入宵禁时间内可召唤已击败怪物
通过监听怪物死亡事件从禁止怪物表中
取值后比对赋值给“已击败进度限制”配置项实现
击败月总后自动清空“已击败进度限制”配置项

v2.2.1
修复移除内置配置项的“集合型”参数引起的指令覆盖参数问题
修复重启服务器覆盖配置参数的问题

v2.2.0
彻底修复Reload覆盖写入怪物ID问题
给弹幕更新方法补充了权限检查
加入了/gn 指令方法控制配置项

v2.1.1
清除无用代码，给断开玩家连接加入全检查

v2.1.0
修复玩家加入服务器拦截方法
加入在线人数判断禁止召唤怪物
将配置项加以描述，并把禁怪物表整理为全进度BOSS的NpcID
修复每次/Reload都会写入一次内置怪物ID问题

v2.0.0
加入了禁止召唤怪物逻辑
羽学适配了.net6.0并重构了大部分方法
```


## 反馈
- 共同维护的插件库：https:- 国内社区trhub.cn 或 TShock官方群等
