游戏赛季和数据处理

问题

游戏从无赛季到赛季机制会涉及哪些问题:

  1. 如何改动,增加赛季机制,涉及要修改的代码量最少
  2. 如何改动,账号、角色部分数据继承问题,涉及要修改的代码量最少
  3. 账号下角色的永久服共享或是永久服独立,需要做什么
  4. 新赛季旧功能的配置、代码均可能调整,如何判断是否需要修数据
  5. 跨多个赛季版本数据如何修复

将数据加入赛季字段

在无赛季时,通常标识一条数据所属,会用 [ AccountID, RoleID ] 来标识

引入赛季后,可以用 [ AccountID, RoleID, SeasonID ] 来标识:

  • 账户级数据, AccountID != 0 && RoleID == 0 && SeasonID == 0
  • 赛季级数据, AccountID != 0 && RoleID == 0 && SeasonID != 0
  • 角色级数据, AccountID != 0 && RoleID != 0 && SeasonID != 0

因为每个功能数据,数据什么级别数据,都是事先已知确定的

因此只要 DB 存储层做支持,即可

即问题 1,功能代码可以几乎不做任何代码修改即可

数据继承

  • 账号级数据天生继承。代码修改量为 0
  • 赛季级数据,通常处理方式有:
    • 丢弃。代码修改量为 0(该类型可以做成通用代码)
    • 按规则转化为某种账号级代币量。少量修正数据代码
    • 升级为新赛季数据。少量修正数据代码(让 SeasonID = 最新赛季ID)
  • 角色级数据,通常处理方式为把数据给类给永久服

永久服共享类型

  • 每个角色永久服独立,那么这里的永久服=赛季服。角色级数据的处理,只需极少量修正代码
  • 永久服账号级共享,那么这里的永久服可以定义为 SeasonID = { s1, s2, … , sN - 1 }。角色级数据的处理,代码修改量为 0

3 种 SeasonID

  • 服的 SeasonID
    • 服也需要配置好自己属于哪个赛季
    • 永久服根据共享类型,一般设置为 0 或者就是最新赛季服
  • 数据所属的 SeasonID 字段
  • 创建时的 SeasonID (永久服账号级共享,必须)

数据修复时机

开新赛季后,需要对数据做修复,以下这些时机触发修复:

  • 角色登录时,判断触发修复
  • 本赛季期间,离线跑工具,修复未登录的数据

需要注意的事项有以下 2 点:

  • 修复代码尽量做到是幂等修复代码,可多次重入
  • 本赛季期间,必须把所有数据修复完毕,规避跨多个赛季版本数据的修复

配置比对工具

赛季通常跨度几个月,新赛季会有很多配置调整,通常以人力无法对比

因此需要制作配置比对工具:

  • 提炼哪些表,哪些字段有增删改
  • 提炼哪些表,内容格式发生变化
  • 提炼哪些表,有 ID 删除
  • 提炼那些表,指定字段的内容发生变化

提供摘要文档输出,这样就可以方便的判断新赛季是否有哪个功能需要修复数据

你可能感兴趣的:(设计方案,赛季,游戏,数据修复,数据继承)