# 【吃飯社】2486生存戰blablabla
> 「欸欸,生存戰冠軍說你是 2486」
## 活動資訊
- 競賽名稱:2486生存戰
- 競賽時長:2小時15分鐘
- 遊戲版本:Minecraft 1.21.0(原版)
- 規則:
- 遊戲模式:極限
- 邊界規則:開始後每 20 開始縮至下一圈,共 6 圈
- 邊界範圍:
| 編號 | 中心點 | 範圍 | 過渡時間 |
|:-------:|:---------------:|:--------------------------:|:--------:|
| 第 0 圈 | C(0, 0) | (x = 0±2500, z = 0±2500) | 300 秒 |
| 第 1 圈 | C(0, 0) | (x = 0±2000, z = 0±2000) | 300 秒 |
| 第 2 圈 | C(0, 0) | (x = 0±1500, z = 0±1500) | 300 秒 |
| 第 3 圈 | C(0, 0) | (x = 0±1000, z = 0±1000) | 300 秒 |
| 第 4 圈 | C(0, 0) | (x = 0±500, z = 0±500) | 300 秒 |
| 第 5 圈 | C(0±20, 0±20) | (x = C±50, z = C±50) | ==360 秒== |
- 積分機制:每次有人被擊殺後,全體存活玩家 +10 個積分,遊戲結束後積分最高者勝
- 每 20 分鐘系統公布一次全體玩家座標
- 最大視野距離:$1 0 ≦ d ≦ 20$
- 視野廣度(FOV):不限
- 第一遊戲日內不可PVP
- 不可睡覺
- 夜魅不自然生成
- 成功打完終界龍有特殊獎勵(暫訂)
- 遊戲注意事項:
- **不可使用下列類型之模組**:
- 小地圖(e.g.: `Xaero's Minimap`)
- 世界地圖(e.g.: `Xaero's Worldmap`, `JourneyMap`)
- 座標標記或生物雷達(e.g.: `Pingwheel`, `Xaero's Minimap`, `JourneyMap`)
- 整理背包(e.g.: `Inventory Profile Next`)
- 快速合成或合成輔助(e.g.: `FastCraft`, `JEI`, `REI`, `EMI`)
- 望遠功能(e.g.: `Opifine`, `OK Zoomer`, `Zoomify`)
- 透視(e.g.: `Xray Ultimate`)
- 礦物探測或發光(e.g.: `New Glowing Ores`)
- 光影或渲染器(e.g.: `Iris Shader`, `Optifine`, `Canvas Renderer`)
- 工具或物品提示(e.g.: `Apple Skin`, `Tweakeroo`, `MiniHUD`, `Block Meter`)
- 自由視角(e.g.: `Freecam`)
- 視野變動(e.g.: `Distant Horizons`)
- 藍圖投影(e.g.: `Litematica`)
- 音效變動(e.g.: `Dynamic Surroundings`, `Dynamic Sounds`)
- **得使用下列類型之模組**:
- 效能優化(e.g.: `Sodium`, `Indium`, `Lithium`)
- 譯名整合(e.g.: `Untranslated Item`)
- 錄影(e.g.: `Replay Mod`)
- 區塊載入優化(e.g.: `Concurrent Chunk Manement Engine`)
- **不可使用更動方塊材質之資源包**
- 推薦安裝Fabric版的Replay Mod並於競賽期間進行錄製,未來可作為精華剪輯之素材使用
## 伺服器資訊
### 伺服器資料
- 伺服器版本:Minecraft 1.21.0(moded Fabric with MCDR)
- 安裝之模組:
- `Fabric API`
- `Concurrent Chunk Manement Engine`(區塊載入優化)
- `Chunky`(區塊預生成)
- 安裝之插件:
- [`CC_HardcoreEngine`(競賽系統主插件)](https://github.com/Nagisadesu87/CC_HardcoreEngine)
## 插件資訊
:::warning
以下資訊僅供比賽管理員及開發者使用。如果你是一般玩家,快跑!別看!
:::
### 插件功能
- 競賽計時:120分鐘倒數提示於側欄
- 縮圈系統:定時縮圈、縮圈前警告、縮圈倒數計時於頂部、玩家與下次縮圈範圍之提示、下個邊界半徑提示
- 排名系統:玩家死亡順序紀錄於側欄
- 座標公告系統:定時公告全玩家之座標
### 插件指令
:::info
使用以下指令之玩家權限需 ≧`3`
:::
#### `!!hce`
顯示 HardcoreEngine 的指令提示列表
#### `!!hce game start [<time>]`
開始比賽
> **參數**:
> - `[<time>]`: `int`,當設定值時於設定值時間後開始比賽,單位為秒
#### `!!hce config set <config_id> <value>`
調整插件的設定
> **參數**:
> - `<config_id>`:[設定項目ID](https://hackmd.io/rTHtu10GSKm4LRPR1JUMvw?both#%E8%A8%AD%E5%AE%9A%E5%8F%83%E6%95%B8%E8%AA%AA%E6%98%8E),以`.`分隔母子項
> - `<value>`:設定值
#### `!!hce config query <config_id>`
查詢插件的設定
> **參數**:
> - `<config_id>`:[設定項目ID](https://hackmd.io/rTHtu10GSKm4LRPR1JUMvw?both#%E8%A8%AD%E5%AE%9A%E5%8F%83%E6%95%B8%E8%AA%AA%E6%98%8E),以`.`分隔母子項
### 遊戲記分板說明
| ID | 說明 |
| -------------- | ---- |
| | |
| | |
### 設定參數說明
:::info
本插件的設定使用`json`格式,儲存於`./config/hce/config.json`:
:::
```javascript
{
"permission": {
"start": 3,
"config": 3
},
"system": {
"rconPort": ["127.0.0.1"],
"rconPassword": "password"
},
"game": {
"roundCount": 6,
"roundTime": [1200, 1200, 1200, 1200, 1200, 1200],
"borderRadius": [2500, 2000, 1500, 1000, 500, 50],
"borderTime": [300, 300, 300, 300, 300, 360],
"borderWarningTime": 15,
"borderFinalCenterRandom": true,
"borderFinalCenterRange": [20, 20]
},
"info": {
"bossbar": {
"showRoundCountdown": true,
"barColor": "yellow"
},
"sidebar": {
"titleText": {"text":"2486生存戰", "color":"aqua", "bold":"true"},
"showEliminateRank": true,
"eliminateRankText": "排名",
"showNextBorderRadius": true,
"nextBorderRadiusText": "下次邊界半徑"
},
"actionbar": {
"playerBorderDistanceMode": "permanent",
"playerBorderDistanceTime": 300
},
"chat" : {
"playerPosMode": "roundEnd",
"playerPosTime": 1200
}
}
}
```
#### `permission.start` : `int`
使用`!!hce start`指令的權限等級;設定值必須為`0`、`1`、`2`、`3`、`4`
> **預設值**:`3`
#### `permission.config` : `int`
使用`!!hce config`指令的權限等級;設定值必須為`0`、`1`、`2`、`3`、`4`
> **預設值**:`3`
#### `system.rconAddress` : `str`
設定rcon功能的連接IP
> **預設值**:`"127.0.0.1"`
#### `system.rconPort` : `int`
設定rcon功能的連接埠
> **預設值**:`25575`
#### `system.rconPassword` : `str`
設定rcon功能的連接密碼
> **預設值**:`"password"`
#### `game.roundCount` : `int`
設定整場比賽的回合數,單位為次
> **預設值**:`6`
#### `game.roundTime` : `list[int]`
設定每回合的進行時間(含縮圈時間),單位為秒;清單長度需與`game.roundCount`相同,長度為`1`表示每回合的長度皆相同
*注意:整場比賽的時長會由`game.roundTime`與`game.roundCount`的乘積加總得出*
> **預設值**:`[1200, 1200, 1200, 1200, 1200, 1200]`
#### `game.borderRadius` : `list[int]`
設定每回合的邊界半徑,單位為格;清單長度需與`game.roundCount`相同,且每一項的設定值必須小於前一項的設定值
> **預設值**:`[2500, 2000, 1500, 1000, 500, 50]`
> **設定範例**:
> - `[1919810,114514,2486]`表示第一輪至第三輪的邊界範圍分別為`[x±1919810, y±1919810]`、`[x±114514, y±114514]`、`[x±2486, y±2486]`
#### `game.borderTime` : `list[int]`
設定每回合邊界的過渡時長,單位為秒;清單長度==需與`game.roundCount - 1` 相同==
> **預設值**:`[300, 300, 300, 300, 360]`
#### `game.borderWarningTime` : `int`
設定每回合邊界收縮前幾秒進行警告,單位為秒;`0`表示關閉
> **預設值**:`15`
#### `game.borderFinalCenterRandom` : `boolean`
設定最後一回合的縮圈中心是否由亂數決定;若設定值為`false`則最後一輪的縮圈中心為`(0,0)`
> **預設值**:`true`
#### `game.borderFinalCenterRange` : `list[int]`
設定最後一回合的縮圈中心的亂數取值範圍;長度必須為`2`且設定值必須小於`game.borderRadius`最後一項的值
*注意:若`game.borderFinalCenterRandom`設為`false`則本設定無效*
> **預設值**:`[-20, 20]`
> **設定範例**:
> - `[-20,20]`表示中心座標取值範圍為`[x±20, y±20]`
> - `[2486,2486]`表示中心座標取值範圍為`[x±2486, y±2486]`
#### `info.updateInterval` : `float`
設定資訊顯示的更新週期,單位為秒
> **預設值**:`0.5`
#### `info.bossbar.showRoundCountdown` : `boolean`
設定頂欄是否常駐本輪倒數計時條
> **預設值**:`true`
#### `info.bossbar.barColor` : `str`
設定頂欄的本回合倒數計時條顏色;設定值應為`blue`、`green`、`pink`、`purple`、`red`、`white`、`yellow`其中一項
> **預設值**:`"Yellow"`
#### `info.sidebar.titleText` : `str`
設定側欄的標題文字
> **預設值**:`2486生存戰`
#### `info.sidebar.showEliminateRank` : `boolean`
設定是否常駐顯示淘汰順序排名
> **預設值**:`false`
#### `info.sidebar.eliminateRankText` : `raw JSON`
設定淘汰順序排名的文字內容;設定值格式應符合[文字元件格式](https://zh.minecraft.wiki/w/%E6%96%87%E6%9C%AC%E7%BB%84%E4%BB%B6%E6%A0%BC%E5%BC%8F)
> **預設值**:`"排名"`
#### `info.sidebar.showNextBorderRadius` : `boolean`
設定是否常駐顯示下一輪的邊界半徑提示
> **預設值**:`true`
#### `info.sidebar.nextBorderRadiusText` : `raw JSON`
設定下一回合邊界半徑提示的文字內容;設定值格式應符合[文字元件格式](https://zh.minecraft.wiki/w/%E6%96%87%E6%9C%AC%E7%BB%84%E4%BB%B6%E6%A0%BC%E5%BC%8F)
> **預設值**:`"下次邊界半徑"`
#### `info.actionbar.playerBorderDistanceMode` : `str`
設定對所有玩家提示自己距離下一圈邊界的距離的功能
> **預設值**:`permanent`
> **參數**:
> - `off`:關閉
> - `time`:由縮圈倒數剩餘時間決定是否顯示,其設定值由`info.actionbar.playerBorderDistanceTime`決定
> - `permanent`:常駐顯示
#### `info.actionbar.playerBorderDistanceTime` : `int`
設定當縮圈倒數剩餘時間剩餘多少時開始提示所有玩家對下一圈邊界的距離,單位為秒;只有當`info.actionbar.playerBorderDistanceMode`的設定值為`time`時有效
> **預設值**:`300`
#### `info.chat.playerPosMode` : `str`
設定何種情況時對所有玩家提示所有玩家的座標位置及距離
> **預設值**:`roundEnd`
> **參數**:
> - `off`:關閉
> - `roundEnd`:當本輪結束時進行
> - `finalRound`:當最後一輪開始時進行
### 插件運作流程簡圖
:::info
本流程圖以「2486生存戰」之設定為例進行繪製
:::
```mermaid
---
title: 系統運作流程圖
---
graph TB
1([開始])
2[重設計時器為120分鐘]
3[分配所有玩家到隨機地點]
4[[等待5分鐘]]
5{{檢測Border ID
(縮圈控制)}}
5.1[[邊界收縮停止]]
5.2[Border ID +1]
6{{檢測Border ID
(子事件控制)}}
6.1[[開啟PVP設定]]
6.2[[亂數決定邊界中心座標]]
6.3[[設定邊界中心座標]]
7[[等待15分鐘]]
8[廣播所有玩家座標]
9[廣播邊界收縮警告]
10[[邊界收縮開始]]
11[[等待1分鐘]]
12[[邊界收縮停止]]
13[[等待剩餘一位玩家]]
14([結束])
1 --> 2 --> 3 --> 4 --> 5
5 --> |= 1 ~ 4| 5.1 --> 5.2 --> 6
5 --> |= 0| 7
5 -------> |= 5| 11 --> 12 --> 13 --> 14
6 --> |其他| 7
6 --> |= 1 | 6.1 --> 7
6 --> |= 4| 6.2 --> 6.3 --> 7
7 --> 8 --> 9
9 --> 10 --> 4
```