# 比賽系統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 |