---
# System prepended metadata

title: 比賽系統DB

---

# 比賽系統DB

## RYAccountsDB.SystemSetting
新增一組系統設定, 這個設定是 人滿即開, 一個模板背後會開幾組比賽
- SystemKey = MatchFullStartContestCount


# 比賽資訊
## RYContestDB.dbo.Match

| name                            | type          | description                                                                                                                          |
|:------------------------------- |:------------- |:------------------------------------------------------------------------------------------------------------------------------------ |
| ID                              | BIGINT        | 流水號                                                                                                                               |
| MatchName                       | NVARCHAR(20)  | 比賽名稱                                                                                                                             |
| MatchSubName                    | NVARCHAR(50)  | 副標題                                                                                                                               |
| MatchModeID                     | TINYINT       | 比賽模式ID 1:定時賽, 2:人滿即開                                                                                                      |
| MatchFullStartTag               | TINYINT       | 人開即開標記 0:無, 1:這一場, 2:下一場                                                                                                |
| IsMatchMultiple                 | BIT           | 比賽是否允許併行, 0:否, 不併行, 1:是, 可併行                                                                                         |
| MatchTypeID                     | TINYINT       | 比賽類型, 1:淘汰賽                                                                                                                   |
| GameKindID                      | INTEGER       | 游戏ID,                                                                                                                              |
| MatchTagID                      | TINYINT       | 分類標籤, 1:免費, 2:金幣                                                                                                             |
| RegisterFeeCoin                 | BIGINT        | 報名費 - 金幣                                                                                                                        |
| RegisterFeeTokenTypeID          | TINYINT       | 報名費 - 門票類型, 對應TreatureDB.GameStoreTokenType                                                                                 |
| RegisterFeeTokenValue           | BIGINT        | 報名費 - 門票數量                                                                                                                    |
| MinPlayer                       | INTEGER       | 最小參賽人數, 0 = 不限制                                                                                                             |
| MaxPlayer                       | INTEGER       | 最大參賽人數                                                                                                                         |
| MatchRotationTypeID             | TINYINT       | 比賽循環類別 0:無, 1:單次(不循環) 2: 每日循環 3:每周循環 4:每月循環 5:每年循環                                                       |
| MatchRotationTime               | NVARCHAR(200) | 循環時間, 以逗號(,)分隔, e.g. TypeID = 周循環, Time = "2,3,4", 代表每周2,3,4; TypeID=月循環, Time="1,5,15,20", 代表1號,5號,15號,20號 |
| MatchRevealedAt                 | DateTime      | 比賽展示/揭示開始時間                                                                                                                |
| MatchRegistedAt                 | DateTime      | 比賽報名開始時間                                                                                                                     |
| MatchPreparedAt                 | DateTime      | 比賽準備開始時間                                                                                                                     |
| MatchStartedAt                  | DateTime      | 比賽開始時間                                                                                                                         |
| MatchFinishedAt                 | DATETIME      | 比賽結束時間                                                                                                                         |
| IsAddRobot                      | BIT           | 是否讓機器人陪打, 0:否, 1:是                                                                                                         |
| TotalPrizeCoin                  | BIGINT        | 比賽總獎金(金幣)                                                                                                                     |
| TotalPrizeTokenValue            | BIGINT        | 比賽總獎金(門票)                                                                                                                     |
| TotalPrizeRewardTicketTypeValue | BIGINT        | 比賽總獎金(積分)                                                                                                                     |
| TotalPlayerNumber               | INTEGER       | 最終參賽人數                                                                                                                         |
| TotalRegisterFeeCoin            | BIGINT        | 最終收取的金幣報名費總和                                                                                                             |
| TotalRegisterFeeTokenValue      | BIGINT        | 最終收取的非金幣報名費的總和                                                                                                         |
| TotalReviveCoin                 | BIGINT        | 最終收取的復活金幣總和(每一輪加總, 門票換算成金幣)                                                                                   |
| ExtraRewardPool                 | BIGINT        | 額外獎池金額(金幣)                                                                                                                   |
| TotalExtraReward                | BIGINT        | 最終從額外獎池發送出去的金幣總和                                                                                                     |
| TotalRewardCoin                 | BIGINT        | 最終發送的金幣獎勵數量總和                                                                                                           |
| EntryTicketTypeID               | TINYINT       | 門票獎勵類型                                                                                                                         |
| TotalEntryTicketTypeValue       | BIGINT        | 最終發送的門票獎勵數量總和                                                                                                           |
| RewardTicketTypeID              | TINYINT       | 獎勵獎券類型                                                                                                                         |
| TotalRewardTicketTypeValue      | BIGINT        | 最終發送的獎券數量總和                                                                                                               |
| CurrentRound                    | INTEGER       | 比賽目前在第幾輪次                                                                                                                   |
| IsAllowRevive                   | BIT           | 是否允許復活                                                                                                                         |
| ReviveReturnRate                | INTEGER       | 復活返獎比例                                                                                                                         |
| MatchParentID                   | BIGINT        | 父比賽ID, 不可重複                                                                                                                   |
| MatchChildID                    | BIGINT        | 子比賽ID, 不可重複                                                                                                                   |
| StartCountDown                  | INTEGER       | 比賽開始前的倒數秒數, 預設=10秒                                                                                                      |
| MatchStatus                     | TINYINT       | 比賽狀態, 1:等待中, 2:預告中, 3:報名中, 4:準備中, 5:進行中, 6:已完成, 7:已停用                                                       |


# 比賽輪次配置
## RYContestDB.dbo.MatchRoundSetting

| name               | type    | description                                               |
|:------------------ |:------- |:--------------------------------------------------------- |
| ID                 | BIGINT  | 流水號                                                    |
| MatchID            | BIGINT  | 比賽ID,                                                   |
| RoundNumber        | INTEGER | 第幾輪                                                    |
| InitChips          | INTEGER | 初始籌碼                                                  |
| AnteValue          | INTEGER | 底注價值                                                  |
| RoundDuration      | INTEGER | 本輪時間, 單位為分鐘, 時間到後強制開始下一輪(每輪固定5局) |
| PromotionQualifier | TINYINT | 每桌晉級名額, 最後一輪須為0, 其餘輪次需大於等於1                                 |
| IsAllowRevive      | BIT     | 是否允許復活進入下一輪, 0:否, 1:是                        |
| ReviveCoin         | BIGINT  | 金幣復活費用                                              |
| ReviveDiamond      | BIGINT  | 鑽石復活費用                                              |
| ReviveTokenTypeID  | TINYINT | 非金幣復活費用類型, 對應TreatureDB.GameStoreTokenType     |
| ReviveTokenValue   | BIGINT  | 非金幣復活費用                                            |
| IsAllowSortItem    | TINYINT | 是否准許自動組牌 0 否, 1 是                               |

# 比賽獎勵配置
## RYContestDB.dbo.MatchRewardSetting

| name                  | type    | description                                                                                  |
|:--------------------- |:------- |:-------------------------------------------------------------------------------------------- |
| ID                    | BIGINT  | 流水號                                                                                       |
| MatchID               | BIGINT  | 比賽ID,                                                                                      |
| RankStart             | INTEGER | 起始獎勵排名(含)                                                                             |
| RankEnd               | INTEGER | 最後的獎勵排名(含)                                                                           |
| RewardNumber          | INTEGER | 獎勵人數, Ex: rankStart=1, RankEnd=1, --> 獎勵人數=1, rankStart=4, rankEnd=10 --> 獎勵人數=7 |
| RewardCoin            | BIGINT  | 獎勵金幣                                                                                     |
| EntryTicketTypeID     | TINYINT | 獎勵門票類型, 對應TreatureDB.GameStoreTokenType                                              |
| EntryTicketTypeValue  | BIGINT  | 獎勵門票數量                                                                                 |
| RewardTicketTypeID    | TINYINT | 獎勵獎券類型, 對應TreatureDB.GameStoreTokenType                                              |
| RewardTicketTypeValue | BIGINT  | 獎勵獎券 (GameStoreTokenType = 1)                                                            |
| ExtraRewardRate       | INTEGER | 額外獎池比例                                                                                 |


# 比賽模式定義
## RYContestDB.dbo.MatchModeDefine

| name      | type         | description |
|:--------- |:------------ |:----------- |
| ID        | BIGINT       | 流水號      |
| Name      | NVARCHAR(50) | 模式名稱    |
| Comment   | NVARCHAR(50) | 備註說明    |
| IsEnabled | BIT          | 是否啟用    |
| CreatedAt | DATETIME     | 建立日期    |
| UpdatedAt | DATETIME     | 更新日期    |


# 比賽標籤定義
## RYContestDB.dbo.MatchTag

| name      | type         | description |
|:--------- |:------------ |:----------- |
| ID        | BIGINT       | 流水號      |
| Name      | NVARCHAR(50) | 模式名稱    |
| Comment   | NVARCHAR(50) | 備註說明    |
| IsEnabled | BIT          | 是否啟用    |
| CreatedAt | DATETIME     | 建立日期    |
| UpdatedAt | DATETIME     | 更新日期    |

# 比賽玩家紀錄
## RYContestDB.dbo.MatchPlayerRecord

當玩家報名比賽的同時, 會需要同時在這張表建立一筆該玩家資料, 
反之當玩家退出比賽的同時, 也需要更新這張表的紀錄
玩家獎勵紀錄的內容也在這張表內


| name                  | type         | description                                                                                                                           |
|:--------------------- |:------------ |:------------------------------------------------------------------------------------------------------------------------------------- |
| ID                    | BIGINT       | 流水號                                                                                                                                |
| MatchID               | BIGINT       | 比賽ID                                                                                                                                |
| UserID                | INTEGER      | 玩家ID                                                                                                                                |
| UserNickName          | NVARCHAR(31) | 玩家名稱                                                                                                                              |
| Rank                  | INTEGER      | 最終排名                                                                                                                              |
| MatchRound            | INTEGER      | 目前輪次                                                                                                                              |
| MatchGame             | INTEGER      | 目前局數                                                                                                                              |
| MatchRoundTableRank   | INTEGER      | 目前桌(局)排名                                                                                                                        |
| RewardCoin            | BIGINT       | 最終獲得的獎勵金幣數量                                                                                                                |
| EntryTicketTypeID     | TINYINT      | 獎勵門票類型, 對應TreatureDB.GameStoreTokenType                                                                                       |
| EntryTicketTypeValue  | BIGINT       | 獎勵門票數量                                                                                                                          |
| RewardTicketTypeID    | TINYINT      | 獎勵獎券類型                                                                                                                          |
| RewardTicketTypeValue | BIGINT       | 獎勵獎券數量 (GameStoreTokenType = 1)                                                                                                 |
| ExtraRewardValue      | BIGINT       | 從額外獎池獲得的金幣數量                                                                                                              |
| RegistedAt            | DATETIME     | 玩家報名時間                                                                                                                          |
| RegisterStatusID      | TINYINT      | 0:已報名, 1:準備中(TakeSeat), 2:比賽中, 3:(先暫時空著), 4:棄賽, 5:(先暫時空著), 6:等待比賽結果 7:結算完畢(比賽已結束, 獎勵也發放完畢) |
| IsRobot               | BIT          | 是否為機器人, 0:否, 1:是                                                                                                              |
| UpdatedAt             | DATETIME     | 更新時間                                                                                                                              |



# 比賽玩家復活紀錄
## RYContestDB.dbo.MatchPlayerReviveRecord
當玩家付費復活晉級下一輪時, 寫入一筆紀錄

| name                   | type         | description                                           |
|:---------------------- |:------------ |:----------------------------------------------------- |
| ID                     | BIGINT       | 流水號                                                |
| MatchID                | BIGINT       | 比賽ID                                                |
| UserID                 | INTEGER      | 玩家ID                                                |
| UserNickName           | NVARCHAR(31) | 玩家暱稱                                              |
| MatchRoundID           | BIGINT       | 輪次設定ID                                            |
| ReviveCoin             | BIGINT       | 金幣復活費用                                          |
| ReviveDiamond          | BIGINT       | 鑽石復活費用                                          |
| ReviveDiamondToCoin    | BIGINT       | 鑽石轉換成金幣的數量                                  |
| ReviveTokenTypeID      | TINYINT      | 非金幣復活費用類型, 對應TreatureDB.GameStoreTokenType |
| ReviveTokenValue       | BIGINT       | 非金幣復活費用                                        |
| ReviveTokenValueToCoin | BIGINT       | 非金幣復活費用轉換成金幣的數量                        |
| IsCanceled             | BIT          | 是否取消費復活並退費，0 正常復活，1 不復活且退費      |
| CreatedAt              | DATETIME     | 資料建立時間=玩家復活時間                             |

---

# 比賽退款紀錄
## RYContestDB.dbo.MatchRefundRecord
| name                    | type         | description                                 |
|:----------------------- |:------------ |:------------------------------------------- |
| ID                      | BIGINT       | 流水號                                      |
| MatchID                 | BIGINT       | 比賽ID                                      |
| UserID                  | INTEGER      | 玩家ID                                      |
| UserNickName            | NVARCHAR(31) | 玩家名稱                                    |
| RefundTypeID            | INTEGER      | 退款類型, 1:比賽無法正常進行                |
| RefundComment           | VARCHAR(50)  | 退款理由                                    |
| RefundCoin              | BIGINT       | 退款金幣數量                                |
| RefundEntryTicketTypeID | TINYINT      | 退款門票類型, TreatureDB.GameStoreTokenType |
| RefundEntryTicketValue  | BIGINT       | 退款門票數量                                |
| IsClaimed               | BIT          | 是否領取                                    |
| OperetorID              | INTEGER      | 操作人員ID                                  |
| OperatorAccount         | VARCHAR(255) | 執行者帳號名稱                              |
| CreatedAt               | DATETIME     | 資料建立時間                                |

---

輪次紀錄, 輪次桌紀錄等確認後會再更新, 暫時先用舊的

# 輪次紀錄
## RYContestDB.dbo.MatchRoundRecord
| name           | type     | description                |
|:-------------- |:-------- |:-------------------------- |
| ID             | BIGINT   | 流水號                     |
| MatchID        | BIGINT   | 比賽ID                     |
| RoundNumber    | INTEGER  | 第幾輪                     |
| StartedAt      | DATETIME | 輪次開始時間               |
| EndedAt        | DATETIME | 輪次結束時間               |
| TotalPlayer    | INTEGER  | 本輪參與玩家人數           |
| TotalPromotion | INTEGER  | 本輪晉級人數(不含復活晉級) |
| TotalRevive    | INTEGER  | 本輪復活晉級人數           |

--- 
# 輪次桌紀錄
## RYContestDB.dbo.MatchRoundTableRecord
| name        | type     | description             |
|:----------- |:-------- |:----------------------- |
| ID          | BIGINT   | 流水號                  |
| MatchID     | BIGINT   | 比賽ID                  |
| RoundNumber | INTEGER  | 第幾輪                  |
| GameNumber  | INTEGER  | 第幾局                  |
| TableID     | SMALLINT | 桌子號                  |
| ChairID     | SMALLINT | 椅子號                  |
| UserID      | INTEGER  | 用户ID                  |
| IsRobot     | BIT      | 是否為機器人 0:否, 1:是 |
| BetScore    | BIGINT   | 下注分                  |
| WinScore    | BIGINT   | 贏分                    |
| Rank        | INTEGER  | 桌排名                  |
| StartedAt   | DATETIME | 開始時間                |
| EndedAt     | DATETIME | 結束時間                |


--- 
# 比賽機器人資料
## RYContestDB.dbo.MatchRobot
| name      | type         | description                  |
|:--------- |:------------ |:---------------------------- |
| ID        | BIGINT       | 流水號                       |
| UserID    | INTEGER      | 機器人的UserID               |
| NickName  | NVARCHAR(31) | 帳號暱稱                     |
| MatchID   | BIGINT       | 正在參加的比賽ID, 未參賽 = 0 |
| AvatarID  | SMALLINT     | 頭像ID                             |
| IsPlaying | BIT          | 是否正在比賽中, 0:否, 1:是   |


--- 
# 比賽判斷真人玩家報名時間間隔設定
## RYContestDB.dbo.MatchRegisterIntervalConfig
| name                 | type     | description                     |
|:-------------------- |:-------- |:------------------------------- |
| ID                   | BIGINT   | 流水號                          |
| MatchModeID          | TINYINT  | 比賽模式ID 1:定時賽, 2:人滿即開 |
| MinTimeIntervalRange | SMALLINT | 短期時間判斷(秒)                |
| MaxTimeIntervalRange | SMALLINT | 長期時間判斷(秒)                |


--- 
# 比賽機器人報名詳細設定
## RYContestDB.dbo.MatchRobotConfig

:::info
ConfigTypeID

1. 無真人玩家報名
2. 真人玩家報名增長
3. 真人玩家報名放緩
4. 真人玩家報名停止
5. 真人玩家報名過快
6. 等待時間1 (報名時間超過50%，且玩家報名數量不足)
7. 等待時間2 (報名時間超過80%，且玩家報名數量不足)
:::

| name             | type    | description                     |
|:---------------- |:------- |:------------------------------- |
| ID               | BIGINT  | 流水號                          |
| MatchModeID      | TINYINT | 比賽模式ID 1:定時賽, 2:人滿即開 |
| ConfigTypeID     | TINYINT | 設定類型ID                      |
| RobotNumberRatio | TINYINT | 機器人最大占比 0 ~ 100%         |
| ActionJoinRatio  | TINYINT | 行為權重: 加入 0 ~ 100%         |
| ActionWaitRatio  | TINYINT | 行為權重: 等待 0 ~ 100%         |
| ActionLeaveRatio | TINYINT | 行為權重: 離開 0 ~ 100%         |


---

# 人滿即開等待佇列
## RYContestDB.dbo.FullStartWaittingInfo

| name   | type    | description |
|:------ |:------- |:----------- |
| ID     | BIGINT  | 流水號      |
| UserID | INTEGER | 用戶ID      |
