Files
ft/Client/Assets/Scripts/EventSmash/README.md
2026-06-29 21:18:33 +08:00

12 KiB
Raw Blame History

砸罐子活动配置表说明

目录


配置文件清单

文件名 说明
EventSmashMain.json 主配置表 - 活动基础配置、礼包配置
EventSmashReward.json 奖励配置表 - 奖励掉落和权重
EventSmashCollection.json 收集配置表 - 收集品系统配置
FishingEvent_SmashPot.json 活动注册配置 - 在FishingEvent表中添加活动入口

EventSmashMain.json 字段说明

字段 类型 必填 说明 示例值
ID int 活动ID 1
ItemID int 活动道具ID (公式: 70600+MOD(ID,1000)) 70601
UIPanel string 活动主面板 EventSmashPotPanel
InfoPanel string 活动信息面板 EventSmashPotInfoPanel
GuidePanel string 引导面板 EventSmashPotGuidePanel
Icon string 道具图标资源 icon_smash_pot#res=img
ChainPackID int 链式礼包ID (对应shop.packagemanager) 1
PackPackID int 直购礼包ID (对应shop.packagemanager) 2
ChainPackPanel string 链式礼包Panel ChainPackPanel
PackPanel string 直购礼包Panel PackPanel
AdPackId int 广告礼包ID (对应shop表) 3
CollectionIcon list#sep=,),int 收集品icon列表 [1001,1002,1003]

EventSmashReward.json 字段说明

字段 类型 必填 说明 示例值
Id int 奖励ID 1
Drop int 奖励掉落 (对应Drop表) 10001
Weight int 权重 100

EventSmashCollection.json 字段说明

字段 类型 必填 说明 示例值
ID int 收集ID (公式: stageID*100 + level) 101
CollectingRequirement int 收集要求数量 10
CollectingRewardList list#sep=,),int 收集奖励列表 [20001,20002]
FixedStageDropProb float 固定关卡掉落概率 0.5
NormalStageDropProb float 普通关卡掉落概率 0.3
DropCount list#sep=,),int 掉落数量 [1,2,3]

FishingEvent 配置说明

需要在FishingEvent表中添加记录

字段 说明 示例值
ID 活动唯一ID 9
Type 活动大类7=特殊活动) 7
SubType 活动小类(需分配) 10
RedirectID 指向EventSmashMain表ID 1
TimeDefinition 活动时间配置 见下方

TimeDefinition 配置

{
  "Type": "LimitedTime",
  "StartTime": "2024-01-01 00:00:00",
  "EndTime": "2024-12-31 23:59:59"
}

Type可选值

  • Forever - 永久活动
  • LimitedTime - 限时活动
  • UserRegistration - 用户注册时间
  • Daily - 日活动
  • Weekly - 周活动

配置示例

主配置 (EventSmashMain.json)

[
  {
    "ID": 1,
    "ItemID": 70601,
    "UIPanel": "EventSmashPotPanel",
    "InfoPanel": "EventSmashPotInfoPanel",
    "GuidePanel": "EventSmashPotGuidePanel",
    "Icon": "icon_smash_pot#res=img",
    "ChainPackID": 1,
    "PackPackID": 2,
    "ChainPackPanel": "ChainPackPanel",
    "PackPanel": "PackPanel",
    "AdPackId": 3,
    "CollectionIcon": [1001,1002,1003]
  }
]

奖励配置 (EventSmashReward.json)

[
  {
    "Id": 1,
    "Drop": 10001,
    "Weight": 100
  },
  {
    "Id": 2,
    "Drop": 10002,
    "Weight": 200
  }
]

收集配置 (EventSmashCollection.json)

[
  {
    "ID": 101,
    "CollectingRequirement": 10,
    "CollectingRewardList": [20001,20002],
    "FixedStageDropProb": 0.5,
    "NormalStageDropProb": 0.3,
    "DropCount": [1,2,3]
  }
]

Drop表配置说明

EventSmashReward中的Drop字段指向Drop表需要在Drop表中配置对应的奖励道具。

EventSmashCollection中的CollectingRewardList指向Drop表配置收集奖励。

配置生效步骤

  1. 在FishingEvent表中添加活动记录ID=9, Type=7, SubType=10, RedirectID=1
  2. 在EventSmashMain表中添加主配置ID=1
  3. 在EventSmashReward表中添加奖励配置
  4. 在EventSmashCollection表中添加收集配置
  5. 在Drop表中配置奖励道具
  6. 在shop.packagemanager表中配置链式礼包和直购礼包
  7. 在shop表中配置广告礼包
  8. 重新编译客户端代码

代码架构

文件结构

EventSmashPot/
├── Manager/
│   ├── EventSmashPotManager.cs      # 核心管理器
│   ├── EventSmashPotData.cs         # 活动数据类
│   ├── EventSmashPotDataEx.cs      # 数据扩展(预留)
│   └── EventSmashPotSentry.cs       # 哨兵检查
├── Data/
│   └── EventSmashCollectionData.cs # 收集品数据类
├── UIPanel/
│   ├── EventSmashPotPanel.cs        # 主面板
│   ├── EventSmashPotCell.cs         # 罐子格子组件
│   └── EventSmashPotInfoPanel.cs    # 信息面板(预留)
├── EventSmashPotEntranceButton.cs   # 活动入口按钮
└── README.md                        # 本说明文档

类说明

1. EventSmashPotManager (核心管理器)

继承: Activity.AEventDataManager<EventSmashPotData>

职责:

  • 活动数据刷新与管理
  • Token(代币)管理
  • 关卡奖励生成与发放
  • 砸罐子核心逻辑
  • 收集系统逻辑
  • 礼包面板展示
  • 红点状态管理

核心方法:

方法 说明
RefreshData() 刷新活动数据,触发关卡奖励生成
AddTokenToData() 添加代币
RemoveTokenFromData() 移除代币
GetCurrentTokenCount() 获取当前代币数量
SmashSingle() 砸单个罐子
SmashAll() 一键全砸(批量打开)
GenerateStageRewards() 生成关卡奖励(核心算法)
ShowFestPackPanel() 展示礼包面板
SetRedPoint() 设置红点状态

2. EventSmashPotData (活动数据)

继承: AEventData, 实现 IHasChainPack

核心属性:

属性 类型 说明
CompletedStageCount int 已完成关卡数量
OpenedGrids List 已打开的格子索引列表
StageRewardList List 当前关卡奖励ID列表
CollectionProgressPairs Dictionary<int, EventSmashCollectionData> 收集进度映射
ChainProgress int 链式礼包进度
ChainPackID int 当前使用的礼包ID
MainConfig EventSmashMain 主配置(通过RedirectID获取)

核心方法:

方法 说明
GetCollectionData() 获取指定收集ID的进度数据
GetAllCollectionConfigs() 获取所有收集配置
GetAllRewardConfigs() 获取所有奖励配置
RefreshCache() 刷新缓存,重置数据
SetChainPackID() 根据是否充值设置礼包ID

3. EventSmashCollectionData (收集品数据)

核心属性:

属性 类型 说明
CollectionID int 收集品ID
Amount int 当前收集数量
Round int 已完成轮次数
CollectionConfig EventSmashCollection 收集配置(缓存)

核心方法:

方法 说明
GetRewardDropID() 获取当前轮次对应的奖励DropID

4. EventSmashPotPanel (主面板)

职责: UI展示与交互

核心组件:

组件 说明
m_TokenText 代币数量显示
m_ProgressSliders 进度条数组
m_GridContainer 格子容器(GridLayoutGroup)
m_CellPrefab 格子预制体
m_BtnSmashAll 一键全砸按钮
m_RoundText 关卡显示

核心方法:

方法 说明
InitManager() 初始化管理器
RefreshData() 刷新界面数据
UpdateGrids() 更新格子显示
OnCellClick() 格子点击事件
OnSmashAllClick() 一键全砸点击事件

5. EventSmashPotCell (格子组件)

职责: 单个罐子格子的显示与交互

核心组件:

组件 说明
m_PotImage 罐子图片
m_ClickButton 点击按钮
m_OpenedObj 已打开状态显示对象
m_UnopenedObj 未打开状态显示对象
m_RewardIcon 奖励图标
m_RewardCountText 奖励数量文本

核心逻辑流程

1. 活动数据初始化流程

Start/进入活动
    ↓
EventSmashPotManager.RefreshData()
    ↓
EventSmashPotData.IsActive 检查
    ↓
GenerateStageRewards() 生成关卡奖励
    ↓
返回数据 → UI展示

2. 关卡奖励生成算法 (GenerateStageRewards)

1. 获取收集配置和奖励配置
2. 判断是第一关(isFirstStage = CompletedStageCount == 0)
3. 遍历收集配置:
   - 根据关卡类型选择概率(FixedStageDropProb / NormalStageDropProb)
   - 随机判定是否生成收集奖励
   - 根据Round循环获取CollectingRewardList中的DropID
   - 随机获取DropCount中的数量
4. 剩余格子从EventSmashReward按权重随机抽取
5. 打乱顺序(Shuffle)
6. 保存到StageRewardList

概率说明:

  • 第一关(CompletedStageCount==0): 使用 FixedStageDropProb
  • 后续关卡: 使用 NormalStageDropProb
  • 每个收集配置独立判定最多生成3个收集奖励

3. 砸罐子流程 (SmashSingle)

点击格子
    ↓
检查是否已打开 → 已打开则跳过
    ↓
检查代币是否足够(TokenCost)
    ↓
不足 → ShowFestPackPanel() 展示礼包
    ↓
足够:
    1. 扣除代币
    2. 标记格子为已打开
    3. 发放奖励(通过Drop获取道具)
    4. 检查收集品
    5. 检查关卡完成
    6. 保存数据
    7. 设置红点
    ↓
刷新UI

4. 一键全砸流程 (SmashAll)

点击一键全砸
    ↓
计算未打开格子数量 * 单价 = 总花费
    ↓
检查代币是否足够
    ↓
不足 → 提示
    ↓
足够:
    1. 扣除总代币
    2. 遍历所有未打开格子:
       - 标记为已打开
       - 发放奖励
       - 检查收集品
    3. 发送一次奖励显示
    4. 检查关卡完成
    5. 保存数据
    6. 设置红点
    ↓
刷新UI

5. 关卡完成逻辑 (CheckStageComplete)

打开格子数 >= 9
    ↓
CompletedStageCount++
    ↓
清空OpenedGrids
    ↓
清空StageRewardList
    ↓
GenerateStageRewards() 生成下一关奖励

6. 收集奖励领取逻辑

获得收集品
    ↓
Amount++
    ↓
检查是否达到要求(CollectingRequirement)
    ↓
达到要求:
    1. 领取奖励(通过Round获取CollectingRewardList中的DropID)
    2. Amount -= CollectingRequirement
    3. Round++

7. 礼包逻辑

链式礼包/广告礼包选择:

SetChainPackID()
    ↓
判断Condition_NoRechargeDay()是否满足
    ↓
满足(未充值) → ChainPackID = MainConfig.AdPackId
    ↓
不满足(已充值) → ChainPackID = MainConfig.ChainPackID

礼包面板显示:

ShowFestPackPanel()
    ↓
获取链式礼包数据
    ↓
判断ChainProgress >= ChainListCount(满)
    ↓
满 → 显示直购礼包面板(PackPanel)
    ↓
未满 → 显示链式礼包面板(ChainPackPanel)

8. 红点逻辑

活动红点:

  • 条件: IsActive && TokenCount > 0

礼包红点:

  • 条件: chainPackData.RedPointIndex > 0

关键配置对应关系

配置表 代码引用 说明
EventSmashMain data.MainConfig 主配置包含UI Panel名称、礼包ID等
EventSmashReward data.GetAllRewardConfigs() 奖励池,按权重抽取
EventSmashCollection data.GetAllCollectionConfigs() 收集系统配置
FishingEvent data.FishingEvent 活动注册信息
Drop表 PlayerItemData.GetItemDataByDropId() 奖励道具
shop.packagemanager TbEventPackManager 链式礼包配置
shop TbPack 直购礼包配置