299 lines
22 KiB
SQL
299 lines
22 KiB
SQL
-- ============================================================
|
||
-- 麻将胡了(Mahjong)模块 全量建表 DDL
|
||
-- 表前缀: game_mahjong_ 游戏类型: MAHJONG
|
||
-- 字符集/排序规则: **utf8mb4 / utf8mb4_0900_ai_ci**(显式写出,不依赖服务器默认;与本库 henan 的默认一致,
|
||
-- 也与 game_wheel_* 一致。注意本库另有 111 张表是 utf8mb4_general_ci / utf8mb4_unicode_ci —— 只要**不要**拿
|
||
-- 字符串列去 join 它们(我们的 join 全在 user_id/box_id/round_id 等数值键上),就不会撞 Illegal mix of collations)
|
||
-- 权威来源: docs/麻将胡了设计方案.md §4(表清单)/ 附录 A(与玫瑰女郎的映射)
|
||
-- 与玫瑰女郎(game_olympus_*)的差异:
|
||
-- 1. 饰品桶 16 档(0x~500x,删掉它的 1000x 那档);单局封顶 500 倍
|
||
-- 2. 无模式倍率:只有 normal,cost = bet(去 mode_type 的 CM 语义)
|
||
-- 3. 无炸弹:step 的 multiplier_detail / accumulator_* → rotation_mul(本波阶梯,不跨旋)
|
||
-- 4. 盘面 4 行 × 5 列 = 20 格;step 自带 golden_detail / wild_converted / ways_detail
|
||
-- 5. record 自带 audience(按箱×身份记水位)与 bet_mul(预留、恒 1)
|
||
-- 6. box.total_ornaments → total_rounds
|
||
-- 执行:mysql --default-character-set=utf8mb4 -u<user> -p <db> < schema.sql (可重复执行)
|
||
-- ============================================================
|
||
|
||
-- 1. 箱子配置(= 投注档,11 档;price = bet)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_box (
|
||
box_id BIGINT NOT NULL COMMENT 'PK 1-11',
|
||
game_type VARCHAR(16) NOT NULL DEFAULT 'MAHJONG',
|
||
box_type VARCHAR(32) NOT NULL DEFAULT 'normal' COMMENT '只有 normal',
|
||
bet DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '投注档 = 投注总额',
|
||
name VARCHAR(50) DEFAULT NULL,
|
||
price DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '实际扣费 = bet(costMultiplier ≡ 1)',
|
||
total_rounds INT NOT NULL DEFAULT '0' COMMENT '总回合数(配比重算时回写)',
|
||
rtp DECIMAL(5,4) NOT NULL DEFAULT '0.8000' COMMENT '目标返奖率',
|
||
rtp_converge_ratio DECIMAL(4,3) NULL COMMENT '一轮收敛回合占比,空=默认0.15',
|
||
sort INT DEFAULT '0',
|
||
status VARCHAR(1) DEFAULT '1' COMMENT '1启用 0禁用',
|
||
del_flag VARCHAR(1) DEFAULT '0',
|
||
remark VARCHAR(200) DEFAULT NULL,
|
||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (box_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了箱子配置(=投注档)';
|
||
|
||
-- 2. 饰品桶定义(0x ~ 500x,共 16 档)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_bucket (
|
||
id BIGINT NOT NULL COMMENT 'PK 1-16',
|
||
game_type VARCHAR(16) NOT NULL DEFAULT 'MAHJONG',
|
||
expect_mul DECIMAL(8,2) NOT NULL COMMENT '期望倍率(最高 500)',
|
||
name VARCHAR(50) DEFAULT NULL,
|
||
range_low DECIMAL(8,2) DEFAULT NULL COMMENT '落桶区间下限(含)',
|
||
range_high DECIMAL(8,2) DEFAULT NULL COMMENT '落桶区间上限(含)',
|
||
PRIMARY KEY (id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了饰品桶定义';
|
||
|
||
-- 3. 箱子-饰品桶分布(库存配额,剩余 = count - used)
|
||
-- audience 多身份爆率:每种身份一套独立分布;白号(white)独立库存、不进真实经济
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_box_bucket (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||
box_id BIGINT NOT NULL,
|
||
bucket_id INT NOT NULL,
|
||
audience VARCHAR(16) NOT NULL DEFAULT 'common' COMMENT 'common普通/anchor主播/white白号(无 robot 维度)',
|
||
count INT NOT NULL DEFAULT '0' COMMENT '分配回合数',
|
||
used INT NOT NULL DEFAULT '0' COMMENT '已消耗回合数,剩余=count-used',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_box_bucket_aud (box_id, bucket_id, audience)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了箱子饰品桶分布(多身份)';
|
||
|
||
-- 4. 预生成回合(池里只存倍率,与投注额无关)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_round (
|
||
round_id BIGINT NOT NULL COMMENT 'PK',
|
||
box_id BIGINT NOT NULL,
|
||
bucket_id INT NOT NULL COMMENT '落入的饰品桶 1-16',
|
||
actual_mul DECIMAL(10,4) NOT NULL DEFAULT '0.0000' COMMENT '实际总倍率(先按 500 截断再落桶)',
|
||
free_spin_count INT NOT NULL DEFAULT '0' COMMENT '免费旋转总次数(12/14/16 + 重触发)',
|
||
total_rotations INT NOT NULL DEFAULT '0' COMMENT '整局总波数',
|
||
has_fs TINYINT NOT NULL DEFAULT '0' COMMENT '是否含免费旋转 0否1是',
|
||
near_miss TINYINT NOT NULL DEFAULT '0' COMMENT '悬念盘:基础旋恰好2个胡且第5轴无胡',
|
||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (round_id),
|
||
INDEX idx_box_bucket (box_id, bucket_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了预生成回合';
|
||
|
||
-- 5. 回合步骤(每帧一行,客户端逐帧续播)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_step (
|
||
id BIGINT NOT NULL COMMENT 'PK',
|
||
round_id BIGINT NOT NULL,
|
||
reel_spin_id INT NOT NULL DEFAULT '0' COMMENT '0=基础旋/触发盘, >0=第N次免费旋转',
|
||
rotation_seq INT NOT NULL DEFAULT '0' COMMENT '本旋内第几波(= 阶梯序号)',
|
||
grid_state JSON DEFAULT NULL COMMENT '4行×5列=20格短码矩阵',
|
||
golden_detail JSON DEFAULT NULL COMMENT '本帧仍为"金色普通符号"的格 [{"pos","symbol"}]',
|
||
wild_converted JSON DEFAULT NULL COMMENT '本波"金色→百搭"就地转化的格 [{"pos","fromSymbol"}]',
|
||
ways_detail JSON DEFAULT NULL COMMENT '中奖明细 [{"symbol","reelCount","counts","loc","ways","payBase","rotationMul","win"}]',
|
||
accumulated_symbols JSON DEFAULT NULL COMMENT '本旋累计消除符号 {"A":9,...}',
|
||
spin_winners JSON DEFAULT NULL COMMENT '获胜者面板:本旋逐波追加,新旋清空',
|
||
removed_positions JSON DEFAULT NULL COMMENT '消除位置 [pos,...](含金色格)',
|
||
drop_data JSON DEFAULT NULL COMMENT '下落数据 [{"from","to","symbol"}]',
|
||
fill_data JSON DEFAULT NULL COMMENT '补位数据 [{"pos","symbol"}]',
|
||
scatter_trigger JSON DEFAULT NULL COMMENT '触发免费旋转 {"scatterCount":3,"freeSpins":12,"extraSpins":0}',
|
||
retrigger_info JSON DEFAULT NULL COMMENT '免费旋转内重触发',
|
||
base_score DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '本波基础倍率(Σ符号倍率×ways,未乘阶梯)',
|
||
win_amount DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '本旋累计到本步(末帧=本旋总额),不是增量',
|
||
rotation_mul DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '本波阶梯倍率(基础 1/2/3/5,FS 2/4/6/10;每旋重置)',
|
||
spin_win DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '整局累计赢额(倍率)到本步',
|
||
win_capped TINYINT NOT NULL DEFAULT '0' COMMENT '本步被 500x 封顶截断 0否1是',
|
||
bigwin_level VARCHAR(16) DEFAULT NULL COMMENT '爆奖档位 small/middle/big(只在 FS 旋末帧,按单旋赢额)',
|
||
is_final TINYINT DEFAULT '0' COMMENT '本旋末帧',
|
||
PRIMARY KEY (id),
|
||
INDEX idx_round (round_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了回合步骤';
|
||
|
||
-- 6. 游戏记录(含结算/幂等/发奖字段,建表即带全)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_record (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||
user_id BIGINT NOT NULL,
|
||
box_id BIGINT NOT NULL,
|
||
round_id BIGINT NOT NULL,
|
||
cost DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '扣费 = bet',
|
||
bet_mul DECIMAL(10,2) NOT NULL DEFAULT '1.00' COMMENT '投注倍数(预留字段,恒 1)',
|
||
total_win DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '总赢额(倍数×投注额,≤bet×500)',
|
||
settled TINYINT NOT NULL DEFAULT '0' COMMENT '是否已结算 0未1已(幂等守卫)',
|
||
mode_type VARCHAR(20) DEFAULT 'normal' COMMENT '只有 normal',
|
||
reward_type VARCHAR(10) DEFAULT NULL COMMENT '发放类型 gold/ornament',
|
||
settled_win DECIMAL(10,2) DEFAULT 0.00 COMMENT '本局价值(=命中饰品价格;空转局按饰品实际价值记账)',
|
||
prize_id BIGINT DEFAULT NULL COMMENT 'game_mahjong_prize_ornament.id',
|
||
prize_name VARCHAR(100) DEFAULT NULL COMMENT '饰品名称',
|
||
prize_image_url VARCHAR(500) DEFAULT NULL COMMENT '饰品图片URL',
|
||
prize_level_img VARCHAR(500) DEFAULT NULL COMMENT '品质图片URL',
|
||
settle_source VARCHAR(20) DEFAULT NULL COMMENT 'start=开局已结算(动画还在播) / finish=末帧播完(进战绩)',
|
||
audience VARCHAR(16) NOT NULL DEFAULT 'common' COMMENT '身份:水位按 箱×身份 聚合',
|
||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
INDEX idx_user_time (user_id, create_time),
|
||
INDEX idx_box_time (box_id, create_time),
|
||
INDEX idx_settled_time (settled, create_time),
|
||
INDEX idx_box_aud (box_id, audience)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了游戏记录';
|
||
|
||
-- 7. 用户统计
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_user (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||
user_id BIGINT NOT NULL,
|
||
total_spins BIGINT NOT NULL DEFAULT '0',
|
||
total_cost DECIMAL(12,2) NOT NULL DEFAULT '0.00',
|
||
total_win DECIMAL(12,2) NOT NULL DEFAULT '0.00',
|
||
max_win_mul DECIMAL(10,4) NOT NULL DEFAULT '0.0000' COMMENT '历史最高倍率(≤500)',
|
||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_user (user_id)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了用户统计';
|
||
|
||
-- 8. 箱子桶分布模板(抽干补桶依据,按身份区分)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_box_template (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||
box_id BIGINT NOT NULL,
|
||
audience VARCHAR(16) NOT NULL DEFAULT 'common',
|
||
name VARCHAR(100) NOT NULL COMMENT '模板名称(同箱+身份内唯一)',
|
||
total_rounds INT NOT NULL DEFAULT 0 COMMENT '= items 各 count 之和',
|
||
items_json TEXT NOT NULL COMMENT '分布JSON: [{"bucketId":1,"count":100},...]',
|
||
is_active TINYINT NOT NULL DEFAULT 0 COMMENT '是否生效模板 1是 0否',
|
||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_box_aud_name (box_id, audience, name),
|
||
KEY idx_box_aud_active (box_id, audience, is_active)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了箱子桶分布模板(多身份)';
|
||
|
||
-- 9. 奖池水位调整日志(注水/抽水/重置审计,原因必填由前端保证)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_reward_log (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||
box_id BIGINT DEFAULT NULL COMMENT '箱子ID(批量/重置为汇总,可空)',
|
||
box_name VARCHAR(100) DEFAULT NULL,
|
||
audience VARCHAR(16) NOT NULL DEFAULT 'common' COMMENT 'common/anchor/white',
|
||
type TINYINT NOT NULL COMMENT '1注水 2抽水 3重置',
|
||
amount DECIMAL(14,2) NOT NULL DEFAULT '0.00' COMMENT '调整金额(绝对值)',
|
||
balance_before DECIMAL(14,2) DEFAULT NULL COMMENT '调整前水位',
|
||
balance_after DECIMAL(14,2) DEFAULT NULL COMMENT '调整后水位',
|
||
pool_balance DECIMAL(14,2) DEFAULT NULL COMMENT '操作后总池余额',
|
||
operator VARCHAR(64) DEFAULT NULL,
|
||
remark VARCHAR(200) DEFAULT NULL,
|
||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id),
|
||
KEY idx_create (create_time)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了奖池水位调整日志';
|
||
|
||
-- 10. 返奖饰品定义(按赢额金额区间匹配,与游戏无关)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_prize_ornament (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||
game_type VARCHAR(16) NOT NULL DEFAULT 'MAHJONG',
|
||
name VARCHAR(100) DEFAULT NULL,
|
||
image_url VARCHAR(500) DEFAULT NULL,
|
||
grade INT DEFAULT NULL COMMENT '品质等级 1-5',
|
||
exterior_name VARCHAR(100) DEFAULT NULL COMMENT '品质名称 崭新出厂/略有磨损/久经沙场/破损不堪/战痕累累',
|
||
sort INT DEFAULT '0',
|
||
status VARCHAR(1) DEFAULT '1',
|
||
is_fallback TINYINT DEFAULT '0' COMMENT '兜底饰品 1是 0否(区间空洞时落它)',
|
||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了返奖饰品';
|
||
|
||
-- 11. 返奖饰品区间(与 prize_ornament 一一对应,区间连续无缝覆盖 0~250000)
|
||
CREATE TABLE IF NOT EXISTS game_mahjong_prize_range (
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||
prize_id BIGINT NOT NULL COMMENT 'game_mahjong_prize_ornament.id',
|
||
win_low DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '返奖区间下限(含)',
|
||
win_high DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '返奖区间上限(含)',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_prize (prize_id),
|
||
KEY idx_win_low (win_low)
|
||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='麻将胡了返奖区间';
|
||
|
||
-- ============================================================
|
||
-- 种子数据:饰品桶 1-16(0x ~ 500x)
|
||
-- ============================================================
|
||
INSERT INTO game_mahjong_bucket (id, game_type, expect_mul, name, range_low, range_high) VALUES
|
||
(1, 'MAHJONG', 0.00, '0x', 0.00, 0.00),
|
||
(2, 'MAHJONG', 0.50, '0.5x', 0.01, 1.00),
|
||
(3, 'MAHJONG', 1.50, '1.5x', 1.00, 2.00),
|
||
(4, 'MAHJONG', 2.50, '2.5x', 2.00, 3.00),
|
||
(5, 'MAHJONG', 4.00, '4x', 3.00, 5.00),
|
||
(6, 'MAHJONG', 6.50, '6.5x', 5.00, 8.00),
|
||
(7, 'MAHJONG', 10.00, '10x', 8.00, 12.00),
|
||
(8, 'MAHJONG', 16.00, '16x', 12.00, 20.00),
|
||
(9, 'MAHJONG', 25.00, '25x', 20.00, 30.00),
|
||
(10, 'MAHJONG', 40.00, '40x', 30.00, 50.00),
|
||
(11, 'MAHJONG', 60.00, '60x', 50.00, 70.00),
|
||
(12, 'MAHJONG', 100.00, '100x', 70.00, 130.00),
|
||
(13, 'MAHJONG', 150.00, '150x', 130.00, 170.00),
|
||
(14, 'MAHJONG', 200.00, '200x', 170.00, 230.00),
|
||
(15, 'MAHJONG', 300.00, '300x', 230.00, 370.00),
|
||
(16, 'MAHJONG', 500.00, '500x', 370.00, 700.00)
|
||
ON DUPLICATE KEY UPDATE expect_mul=VALUES(expect_mul), name=VALUES(name),
|
||
range_low=VALUES(range_low), range_high=VALUES(range_high);
|
||
|
||
-- ============================================================
|
||
-- 种子数据:11 个箱子(=11 个投注档,price = bet,无投注倍数)
|
||
-- ============================================================
|
||
INSERT INTO game_mahjong_box (box_id, game_type, box_type, bet, name, price, rtp, sort, status, remark) VALUES
|
||
(1, 'MAHJONG', 'normal', 1.00, '1', 1.00, 0.8000, 1, '1', NULL),
|
||
(2, 'MAHJONG', 'normal', 3.00, '3', 3.00, 0.8000, 2, '1', NULL),
|
||
(3, 'MAHJONG', 'normal', 5.00, '5', 5.00, 0.8000, 3, '1', NULL),
|
||
(4, 'MAHJONG', 'normal', 10.00, '10', 10.00, 0.8000, 4, '1', NULL),
|
||
(5, 'MAHJONG', 'normal', 20.00, '20', 20.00, 0.8000, 5, '1', NULL),
|
||
(6, 'MAHJONG', 'normal', 30.00, '30', 30.00, 0.8000, 6, '1', NULL),
|
||
(7, 'MAHJONG', 'normal', 50.00, '50', 50.00, 0.8000, 7, '1', NULL),
|
||
(8, 'MAHJONG', 'normal', 100.00, '100', 100.00, 0.8000, 8, '1', NULL),
|
||
(9, 'MAHJONG', 'normal', 200.00, '200', 200.00, 0.8000, 9, '1', NULL),
|
||
(10, 'MAHJONG', 'normal', 300.00, '300', 300.00, 0.8000, 10, '1', NULL),
|
||
(11, 'MAHJONG', 'normal', 500.00, '500', 500.00, 0.8000, 11, '1', NULL)
|
||
ON DUPLICATE KEY UPDATE bet=VALUES(bet), price=VALUES(price), name=VALUES(name),
|
||
rtp=VALUES(rtp), sort=VALUES(sort), status=VALUES(status);
|
||
|
||
-- ============================================================
|
||
-- 种子数据:返奖饰品 12 件(取自玫瑰女郎线上 dump,id 原样保留以维持区间映射)
|
||
-- 说明:zone 是按**赢额金额(¥)**匹配的展示层,与饰品桶(倍率)无关;
|
||
-- 保留原 id 是因为 prize_range.prize_id 直接引用它。
|
||
-- ============================================================
|
||
INSERT INTO game_mahjong_prize_ornament
|
||
(id, game_type, name, image_url, grade, exterior_name, sort, status, is_fallback, create_time, update_time) VALUES
|
||
(1, 'MAHJONG', '安慰奖', '/profile/upload/2026/09/15/VU1QLTQ1IHwgU2NvcmNoZWQgKEZhY3RvcnkgTmV3KQ==_20260915144142A001.png', 4, '战痕累累', 1, '1', 1, '2026-08-01 14:05:58', '2026-09-15 14:41:45'),
|
||
(2, 'MAHJONG', 'SG 553 | 浪花喷漆', '/profile/upload/2026/07/02/U0cgNTUzIHwgV2F2ZSBTcHJheSAoRmFjdG9yeSBOZXcp_20260702034148A002.png', 2, '略有磨损', 2, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(3, 'MAHJONG', '双持贝瑞塔 | 黑榄仁木', '/profile/upload/2026/07/02/RHVhbCBCZXJldHRhcyB8IEJsYWNrIExpbWJhIChGYWN0b3J5IE5ldyk=_20260702034157A003.png', 3, '久经沙场', 3, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(4, 'MAHJONG', 'M4A4 | 皇家圣骑士', '/profile/upload/2026/07/02/TTRBNCB8IFJveWFsIFBhbGFkaW4gKEZhY3RvcnkgTmV3KQ==_20260702034203A004.png', 4, '破损不堪', 4, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(5, 'MAHJONG', 'AK-47 | 深海复仇', '/profile/upload/2026/07/02/QUstNDcgfCBBcXVhbWFyaW5lIFJldmVuZ2UgKEZhY3RvcnkgTmV3KQ==_20260702034212A005.png', 4, '破损不堪', 5, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(6, 'MAHJONG', 'AK-47 | 火蛇', '/profile/upload/2026/07/02/QUstNDcgfCBGaXJlIFNlcnBlbnQgKEZhY3RvcnkgTmV3KQ==_20260702034220A006.png', 3, '久经沙场', 6, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(7, 'MAHJONG', 'AK-47 | 燃料喷射器', '/profile/upload/2026/07/02/QUstNDcgfCBGdWVsIEluamVjdG9yIChGYWN0b3J5IE5ldyk=_20260702034228A007.png', 3, '久经沙场', 7, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(8, 'MAHJONG', '加利尔 AR | 水蓝阶地', '/profile/upload/2026/07/02/R2FsaWwgQVIgfCBBcXVhIFRlcnJhY2UgKEZhY3RvcnkgTmV3KQ==_20260702034236A008.png', 2, '略有磨损', 8, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(9, 'MAHJONG', '猎杀者匕首 | 渐变之色', '/profile/upload/2026/07/02/4piFIEh1bnRzbWFuIEtuaWZlIHwgRmFkZSAoRmFjdG9yeSBOZXcp_20260702034302A012.png', 2, '略有磨损', 9, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(10, 'MAHJONG', '爪子刀 | 都市伪装', '/profile/upload/2026/07/02/4piFIEthcmFtYml0IHwgVXJiYW4gTWFza2VkIChGYWN0b3J5IE5ldyk=_20260702034248A010.png', 1, '崭新出厂', 10, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(11, 'MAHJONG', '熊刀 | 多普勒', '/profile/upload/2026/07/02/4piFIFVyc3VzIEtuaWZlIHwgRG9wcGxlciAoTWluaW1hbCBXZWFyKQ==_20260702034256A011.png', 1, '崭新出厂', 11, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58'),
|
||
(12, 'MAHJONG', 'AWP | 巨龙传说', '/profile/upload/2026/07/02/QVdQIHwgRHJhZ29uIExvcmUgKEZhY3RvcnkgTmV3KQ==_20260702034308A013.png', 1, '崭新出厂', 12, '1', 0, '2026-08-01 14:05:58', '2026-08-01 14:05:58')
|
||
ON DUPLICATE KEY UPDATE game_type=VALUES(game_type), name=VALUES(name), image_url=VALUES(image_url),
|
||
grade=VALUES(grade), exterior_name=VALUES(exterior_name), sort=VALUES(sort),
|
||
status=VALUES(status), is_fallback=VALUES(is_fallback), update_time=NOW();
|
||
|
||
-- ============================================================
|
||
-- 种子数据:返奖区间 12 段(连续无缝覆盖 0.01 ~ 99,999,999)
|
||
-- 已核:① 每段 win_high = 下一段 win_low(无空洞、无重叠)
|
||
-- ② 最大档上界 99,999,999 ≥ 麻将单局理论最大赔付 ¥250,000(500x × ¥500)
|
||
-- —— ¥250,000 落在第 9 段(100,005.82~499,988),发 9 号饰品
|
||
-- ③ 空转局兜底 win=0.01 落在第 1 段(0.01~0.14),发「安慰奖」(is_fallback=1)
|
||
-- ⚠️ 这 12 段只决定"发哪件饰品"(展示层);实际入账金额是 record.settled_win
|
||
-- = 本局 win,与区间无关(见 service-user 分解入账:Σ TtBoxRecords.ornamentsPrice)
|
||
-- ============================================================
|
||
INSERT INTO game_mahjong_prize_range (id, prize_id, win_low, win_high) VALUES
|
||
(1, 1, 0.01, 0.14),
|
||
(2, 2, 0.14, 10.00),
|
||
(3, 3, 10.00, 50.00),
|
||
(4, 4, 50.00, 200.00),
|
||
(5, 5, 200.00, 1000.00),
|
||
(6, 6, 1000.00, 5000.00),
|
||
(7, 7, 5000.00, 20000.00),
|
||
(8, 8, 20000.00, 100005.82),
|
||
(9, 9, 100005.82, 499988.00),
|
||
(10, 10, 499988.00, 1000013.00),
|
||
(11, 11, 1000013.00, 2000012.00),
|
||
(12, 12, 2000012.00, 99999999.00)
|
||
ON DUPLICATE KEY UPDATE prize_id=VALUES(prize_id), win_low=VALUES(win_low), win_high=VALUES(win_high);
|
||
|
||
-- ============================================================
|
||
-- 还没做(不在本文件内,见设计文档 §6.5):
|
||
-- 1. 528 条 game_mahjong_box_bucket 配比行(16 桶 × 11 箱 × 3 身份):由 `_recalc_boxes.py` / 后台「一键重算」生成
|
||
-- 2. sys_config mahjongMaintenance、sys_menu 7 个菜单:平台共享改动,单独执行
|
||
-- 3. 每箱×身份的初始水位:后台奖池水位页注水(¥300/¥500 两档必须单独注)
|
||
-- ============================================================
|