Преглед изворни кода

fix:GC_YUNYING_GROUP_LIST修改

flowerpig пре 5 месеци
родитељ
комит
cb15366e73

+ 86 - 0
docs/GC_YUNYING_GROUP_LIST协议说明.md

@@ -0,0 +1,86 @@
+# GC_YUNYING_GROUP_LIST 协议字段说明
+
+## 协议概述
+`GC_YUNYING_GROUP_LIST` 是运营活动组列表协议,用于返回指定面板ID下的所有活动信息。
+
+## 请求协议 (CG_YUNYING_GROUP_LIST)
+| 字段名 | 类型 | 说明 |
+|--------|------|------|
+| panelID | short | 面板ID,例如:3207(每月礼包)、3104(每周礼包) |
+
+## 返回协议 (GC_YUNYING_GROUP_LIST)
+| 字段名 | 类型 | 说明 |
+|--------|------|------|
+| panelID | short | 面板ID(与请求的panelID一致) |
+| list | array | 活动列表,最多15个元素 |
+
+### list 数组中每个元素的字段 (YunYingFuncNet)
+| 字段名 | 类型 | 说明 | 前端用途 |
+|--------|------|------|----------|
+| **id** | int | **活动ID** | **关键字段:用于识别具体活动,例如:316(每月礼包)、315(每周礼包)** |
+| **panelID** | short | **面板ID** | **关键字段:用于区分不同的面板,3207=每月礼包,3104=每周礼包** |
+| **name** | string | **活动名称** | 显示活动标题 |
+| **icon** | int | 活动图标ID | 显示活动图标 |
+| **red** | byte | 是否显示红点(0=不显示,1=显示) | 控制红点提示 |
+| **leftTime** | int | 剩余时间(秒),0表示不显示倒计时 | 显示倒计时 |
+| **endTime** | int | 结束时间戳 | 计算剩余时间 |
+| **startTime** | int | 开始时间戳 | 判断活动是否开始 |
+| **effect** | int | 特效ID | 显示特效 |
+| **param** | int | 参数(通常等于id) | 传递给具体活动逻辑 |
+
+## 前端使用示例
+
+### 获取每月礼包列表
+```javascript
+// 请求协议
+CG_YUNYING_GROUP_LIST: {
+    panelID: 3207  // 每月礼包面板ID
+}
+
+// 返回数据示例
+GC_YUNYING_GROUP_LIST: {
+    panelID: 3207,
+    list: [
+        {
+            id: 316,              // 每月礼包活动ID
+            panelID: 3207,         // 每月礼包面板ID
+            name: "",              // 活动名称(可能为空)
+            icon: 316,             // 图标ID
+            red: 0,                // 是否显示红点
+            leftTime: 86400,       // 剩余时间(秒)
+            endTime: 1234567890,   // 结束时间戳
+            startTime: 1234481490, // 开始时间戳
+            effect: 0,             // 特效
+            param: 316            // 参数
+        }
+    ]
+}
+```
+
+### 前端处理逻辑
+1. **识别活动类型**:通过 `panelID` 判断是每月礼包(3207)还是每周礼包(3104)
+2. **显示活动列表**:遍历 `list` 数组,根据 `id` 显示对应的活动项
+3. **显示红点**:根据 `red` 字段控制红点显示
+4. **显示倒计时**:根据 `leftTime` 或 `endTime` 显示倒计时
+5. **打开活动面板**:点击活动项时,使用 `id` 或 `param` 作为参数打开对应的活动面板
+
+## 重要说明
+
+### 每月礼包 (id: 316, panelID: 3207)
+- **活动ID**: 316
+- **面板ID**: 3207
+- **模块函数**: `present.RichangLibaoLogic`
+- **所属活动组**: config[9] "钻石加号" (panelID: 3101)
+
+### 每周礼包 (id: 315, panelID: 3104)
+- **活动ID**: 315
+- **面板ID**: 3104
+- **模块函数**: `present.RichangLibaoLogic`
+- **所属活动组**: config[9] "钻石加号" (panelID: 3101)
+
+### 注意事项
+1. 同一个活动组(config[9])下可以包含多个不同 `panelID` 的活动
+2. 前端需要根据返回的 `panelID` 来区分是每周礼包还是每月礼包
+3. `id` 字段是唯一标识,用于后续的协议交互
+4. `name` 字段可能为空,前端可以使用默认名称或根据 `id` 查找本地化文本
+

+ 2 - 1
script/excel/ssecy/yunying.lua

@@ -7,7 +7,7 @@
 [6]={name="精英召唤",icon=6,sortID=6,panelID=3704,pos=2,funcs={4001,4003,4004},serverIndex={{1,999999}}},
 [7]={name="全神的遗物",icon=7,sortID=7,panelID=3707,pos=2,funcs={5001,5002},serverIndex={{1,999999}}},
 [8]={name="打工",icon=8,sortID=8,panelID=3610,pos=1,funcs={8001},serverIndex={{1,999999}}},
-[9]={name="钻石加号",icon=11,sortID=11,panelID=3101,pos=1,funcs={14001,11001,312,315},serverIndex={{1,999999}}},
+[9]={name="钻石加号",icon=11,sortID=11,panelID=3101,pos=1,funcs={14001,11001,312,315,316},serverIndex={{1,999999}}},
 [10]={name="新英雄来袭",icon=12,sortID=12,panelID=5010,pos=1,funcs={30001,30002,30003,30004,30005},serverIndex={{1,999999}}},
 [11]={name="国庆活动",icon=13,sortID=13,panelID=5000,pos=1,funcs={31001,31002,31003,31004,31005},serverIndex={{1,999999}}},
 [12]={name="开服庆典",icon=14,sortID=14,panelID=7000,pos=1,funcs={601,602,603,604,605,606},serverIndex={{1,999999}}},
@@ -39,6 +39,7 @@
 [312]={actName="",icon=312,effect=0,openLv=5,panelID=3107,moduleFn="present.DailyLibaoLogic",param=0},
 [313]={actName="",icon=313,effect=0,openLv=3,panelID=3310,moduleFn="present.OverflowFundLogic",param=0},
 [315]={actName="",icon=315,effect=0,openLv=1,panelID=3104,moduleFn="present.RichangLibaoLogic",param=0},
+[316]={actName="",icon=316,effect=0,openLv=1,panelID=3207,moduleFn="present.RichangLibaoLogic",param=0},
 [401]={actName="幸运盲盒",icon=401,effect=0,openLv=5,panelID=3606,moduleFn="present.LimitMangHeLogic",param=401},
 [402]={actName="幸运盲盒",icon=402,effect=0,openLv=5,panelID=3606,moduleFn="present.LimitMangHeLogic",param=402},
 [403]={actName="幸运盲盒",icon=403,effect=0,openLv=5,panelID=3606,moduleFn="present.LimitMangHeLogic",param=403},

+ 30 - 2
script/module/yunying/YunYingLogic.lua

@@ -502,11 +502,32 @@ end
 function sendGroupList(human, panelID)
     -- 获取panel运营ID
     local actID = getActIDByPanelID(panelID)
-    if (not actID or actID < 1 ) and panelID ~= PanelDefine.PANEL_ID_3101 then
+    local YYInfo = nil
+    
+    -- 如果通过config.panelID找不到,则通过funcConfig.panelID查找
+    if (not actID or actID < 1) and panelID ~= PanelDefine.PANEL_ID_3101 then
+        -- 遍历所有config,查找包含该panelID的funcConfig
+        for yyID, config in pairs(YunYingExcel.config) do
+            if inServerIndex(config.serverIndex) then
+                for i = 1, #config.funcs do
+                    local funcID = config.funcs[i]
+                    local funcConfig = getFuncConfig(funcID)
+                    if funcConfig and funcConfig.panelID == panelID then
+                        actID = yyID
+                        break
+                    end
+                end
+                if actID then break end
+            end
+        end
+    end
+    
+    if not actID or actID < 1 then
         return
     end
+    
     -- 通过运营ID获取运营信息
-    local YYInfo = ID2YYInfo[actID]
+    YYInfo = ID2YYInfo[actID]
     if not isOpen(YYInfo, human, true) then
         return
     end
@@ -518,6 +539,11 @@ function sendGroupList(human, panelID)
     for i = 1, #YYInfo.config.funcs do
         local funcID = YYInfo.config.funcs[i]
         local funcConfig = getFuncConfig(funcID)
+        
+        -- 只返回panelID匹配的funcs
+        if funcConfig.panelID ~= panelID then
+            goto continue
+        end
 
         local state = false
         local endTime = nil
@@ -558,6 +584,8 @@ function sendGroupList(human, panelID)
             net.effect = funcConfig.effect
             net.param = funcID
         end
+        
+        ::continue::
     end
     Msg.send(msgRet, human.fd)
 end