老 MMO 的账号体系只有一张表,重建设计时我们把它升级成积分时长制:积分是唯一余额,游戏时间在登录瞬间按汇率兑换,充值与赠送都只动积分。汇率定 100 积分 = 1 小时,充值 1 元 = 1000 积分 = 10 小时,新注册赠 2000 积分。
为什么在登录时兑换
不在游戏内扣时长,而在认证环节一次性兑换:登录成功的回复里就带着可用时长,客户端按这个值计时。好处是计费逻辑只有一处,游戏服完全无感知;欠费、封禁在认证层就挡住,不进世界:
GET 认证请求(GCC → 计费服务 :3344)
name + md5(password)
回复:
200 ok 附带兑换后的剩余时长
403 欠费 积分不足,提示充值
400 封禁 uAuthority 置低的账号
表结构
tbl_account(
name, passhash, phone, points,
reg_ip, uAuthority, created_at
)
计费服务是一个几百行的常驻进程,实现 GCC 的 auth 协议原样应答——协议不变,实现自研,客户端零改动。官网注册、积分购买与游戏内认证读写同一张表,余额处处一致。
分级测试账号(四级权限)也挂在 uAuthority 上:同一张表、同一个认证口,不同权限进不同的测试通道。