一.在哪里

商店配置相关文件在Resources\ExcelOutput\ShopConfig.json文件中

二.功能解析

该数据结构用于定义游戏内商店系统的完整配置体系,包含以下核心功能:

  1. 商店分类管理:通过ShopMainType划分主商店/NPC商店,ShopType定义76种细分商店类型(抽卡/材料/活动等)
  2. 动态解锁控制LimitType1配合LimitValue1List实现等级/任务进度等解锁条件
  3. 多语言支持:Hash字段实现文本本地化索引
  4. 资源动态加载ShopIconPath实现UI图标按需加载
  5. 运营控制:通过IsOpenScheduleDataID控制商店开放状态和时间
  6. 安全验证ServerVerification标记需要服务端验证的交易

三.关键字段数据解析

字段名 数据类型 示例值 核心作用
ShopID int 101 商店唯一标识符(范围101-999)
ShopType int 1-76 商店功能类型(1=抽卡,3=材料,17=剧情等)
ShopMainType string Main/Npc 商店主分类(主界面/NPC关联)
LimitType1 string Level/MainMission 解锁条件类型
LimitValue1List int[] [4010105] 解锁所需等级/任务ID
ScheduleDataID int 300101 时间计划配置ID
ShopIconPath string SpriteOutput/… 图标资源路径
IsOpen bool true 当前开放状态
ShopSortID int 1 界面排序优先级

四.关键字段技术细节

  1. Hash映射系统
    • ShopName.Hash(32位)和Hash64(64位)共同构成本地化键
    • 使用CityHash算法生成,示例:-33573267 → “抽卡商店”
    • 实现方案:TextManager.GetText(hash)
  2. 资源加载路径
// Unity资源加载示例
Sprite icon = Resources.Load<Sprite>(shopConfig.ShopIconPath);

3.​条件验证流程

graph TD
A[访问商店] --> B{ServerVerification?}
B -->|是| C[请求服务器验证]
B -->|否| D[本地检查LimitValue]
C --> E[返回验证结果]
D --> F[通过本地条件]

五.数据结构示例

{
  "LimitValue1List": [4010105],
  "ShopIconPath": "SpriteOutput/TabIcon/Shop/ShopLightConIcon.png",
  "ShopBar": "Shop202Page",
  "ShopName": {
    "Hash": -33573299,
    "Hash64": 12905818303918459561
  },
  "ShopID": 202,
  "ShopType": 17,
  "ShopMainType": "Main",
  "LimitType1": "MainMission",
  "ScheduleDataID": 300202,
  "IsOpen": true,
  "ShopSortID": 10
}

六.数据结构全字段解析

字段 类型 必填 说明 技术细节
ShopID int 商店唯一ID 范围100-9999,按类型分段
ShopType int 商店类型代码 预定义枚举值
ShopMainType string 主分类 Main/Npc/Activity
LimitType1 string 解锁条件类型 Level/MainMission/Quest
LimitValue1List int[] 解锁参数 支持多条件配置
LimitValue2List int[] 备用条件 目前未使用
ShopIconPath string 图标路径 需严格匹配资源目录
ShopBar string UI页面名称 对应预制体名称
ScheduleDataID int 时间计划ID 关联ScheduleTable
ServerVerification bool 服务端验证 true时需二次确认
HideRemainTime bool 隐藏倒计时 控制UI元素显示
ShopSortID int 排序权重 数值越小排序越靠前
ActivityModuleID int 活动模块ID 仅活动商店有效

七.运行逻辑

  1. 初始化流程
    • 资源预加载:根据ShopIconPath加载所有商店图标
    • 条件检查:遍历LimitValue1List验证玩家进度
    • 状态同步:通过ScheduleDataID获取服务器时间校验开放状态
  2. 商店访问流程
    sequenceDiagram
    Player->>Client: 打开商店界面
    Client->>Server: 请求商店状态(SyncShopStatus)
    Server->>Client: 返回开放状态和商品数据
    Client->>UI: 按ShopSortID排序显示
    UI->>Localization: 通过Hash获取本地化文本
  3. 购买验证流程
bool CanPurchase(ShopConfig shop) {
  if (shop.ServerVerification) {
      return Server.VerifyPurchase(shop.ShopID);
  }
  return CheckLocalCondition(shop.LimitValue1List);
}

八.修改指南

  1. 新增商店
    • ID分配:按类型选择合适区间(常规商店300-500,活动商店500-600)
    • 图标规范:PNG格式,尺寸256×256,存放至指定目录
    • 示例配置:
    {
      "ShopID": 601,
      "ShopType": 76,
      "ShopMainType": "Event",
      "LimitType1": "Level",
      "LimitValue1List": [30],
      "ShopIconPath": "UI/EventShop/SummerEvent.png"
    }
  2. 修改建议
    • 避免修改已发布的ShopID
    • LimitValue1List数组长度不超过3
    • 新增ShopType需同步更新枚举定义
    • 测试流程:
      1. 本地JSON校验
      2. 资源路径验证
      3. 多语言覆盖率检查
      4. 服务端同步测试

九.代码示例

// 商店配置1:主界面抽卡商店(初级)
{
  "LimitValue1List": [1],       // 解锁条件:玩家等级≥1级
  "LimitValue2List": [],         // 预留条件(当前未使用)
  "ShopIconPath": "SpriteOutput/TabIcon/Shop/ShopDrawcardIcon02.png", // 卡池图标(蓝色主题)
  "ShopBar": "Shop101Page",      // 对应的UI页面预制体名称
  "ShopName": {                  // 本地化文本哈希
    "Hash": -33573267,           // 短哈希(兼容旧系统)
    "Hash64": 16829471444158351973 // 长哈希(对应"初级抽卡商店")
  },
  "ShopID": 101,                 // 商店唯一ID(1开头表示抽卡类)
  "ShopType": 1,                 // 商店类型1=基础抽卡
  "ShopMainType": "Main",        // 主界面常驻商店
  "LimitType1": "Level",         // 解锁条件类型=等级限制
  "ShopDesc": {                  // 商店描述文本哈希
    "Hash": 1455825039,          // 短哈希
    "Hash64": 5242659586514105497  // 长哈希(如"新人专属卡池")
  },
  "ScheduleDataID": 300101,      // 时间计划ID(永久开放配置)
  "HideRemainTime": true,        // 隐藏倒计时显示
  "IsOpen": true,                // 是否开放(总开关)
  "ShopSortID": 1                // 界面排序第1位(最左侧标签页)
},

// 商店配置2:主界面抽卡商店(进阶)
{
  "LimitValue1List": [1],        // 解锁条件:玩家等级≥1级
  "LimitValue2List": [],          // 预留条件(未使用)
  "ShopIconPath": "SpriteOutput/TabIcon/Shop/ShopDrawcardIcon01.png", // 卡池图标(金色主题)
  "ShopBar": "Shop102Page",       // 对应的UI页面预制体
  "ShopName": {
    "Hash": -33573268,            // 短哈希
    "Hash64": 10929922468647682746 // 长哈希(对应"进阶抽卡商店")
  },
  "ShopID": 102,                  // 商店唯一ID
  "ShopType": 1,                  // 同属抽卡类型
  "ShopMainType": "Main",         // 主界面常驻
  "LimitType1": "Level",          // 相同等级条件
  "ShopDesc": {
    "Hash": 1455825042,           // 短哈希
    "Hash64": 14517118949767098567 // 长哈希(如"稀有角色概率UP")
  },
  "ScheduleDataID": 300102,       // 时间计划ID(永久开放)
  "HideRemainTime": true,         // 隐藏倒计时
  "IsOpen": true,                 // 启用状态
  "ShopSortID": 2                 // 界面排序第2位(右侧相邻标签页)
}

提示

本商店修改教程应当配合以下教程食用

崩铁服务端修改系列之商店内容的配置4-承心识梦
崩铁服务端修改系列之商店内容的配置5-承心识梦

综合讲解看以下文章

崩铁服务端修改系列之商店内容的配置6-承心识梦
温馨提示: 本文最后更新于2025-03-08 08:40:57,某些文章具有时效性,若有错误或已失效,请在下方留言或联系承心识梦
© 版权声明
评论 抢沙发

请登录后发表评论

    暂无评论内容