Procházet zdrojové kódy

提交跨服商业活动数据和自动解锁宝箱问题

SCFC před 1 rokem
rodič
revize
f2e5fd2ee1

+ 14 - 0
script/common/CommonDB.lua

@@ -38,6 +38,7 @@ KEY_WEEKLOOP_CARD_BATCH = "weekLoopCardBatch"			-- 周活动-抽卡批次
 KEY_VOUCHER_INFLATE = "tVoucherInflateInfo"				-- 代金券膨胀信息
 kEY_RECOMMENDLINEUP = "recommendlineup"					-- 推荐阵容
 KEY_FIREWORKBONUS_TIME="fireWorksBonusTime"             -- 烟花加成时间
+KEY_COMMERCEACT_INFO = "commerceActInfo"				-- 跨服活动信息
 
 db = db or {
 	serverStartTime = nil,								-- 开服时间
@@ -63,6 +64,7 @@ db = db or {
 	tVoucherInflateInfo = {},							-- 代金券膨胀信息
 	recommendlineup = {},								-- 推荐阵容
 	fireWorksBonusTime = nil,                           -- 烟花加成时间
+	commerceActInfo = {},								-- 跨服商业活动信息
 }
 
 function init()
@@ -424,4 +426,16 @@ function GetInFireWork()
     end
     
     return false
+end
+
+-- 获取跨服商业活动信息
+function GetCommerceActInfo()
+	return db.commerceActInfo
+end
+
+-- 设置跨服商业活动信息
+function SetCommerceActInfo(tData)
+	db.commerceActInfo = tData
+	
+	updateValue(KEY_COMMERCEACT_INFO, db.commerceActInfo)
 end

+ 24 - 0
script/common/InnerHandler.lua

@@ -19,6 +19,7 @@ local MoZhuMiddleLogic = require("mozhu.MoZhuMiddleLogic")
 local ChatLogic = require("chat.ChatLogic")
 local HeroMiddleLogic = require("hero.HeroMiddleLogic")
 local MiddleCommonLogic = require("middle.MiddleCommonLogic")
+local CommerceMiddle = require("ServerCommerce.ServerCommerceMiddle")
 
 function LW_HELLO(fd, msg)
 	if _G.is_middle ~= true then return end
@@ -172,3 +173,26 @@ function WL_COMBAT_GETINFO_SEND(fd, msg)
 end
 
 -------------------- 跨服请求战斗数据结束 --------------------
+
+-------------------- 跨服商业活动开始 ---------------------------
+-- 回复开服天数
+function LW_COMMERCE_SENDOPENDAY(fd, msg)
+    if _G.is_middle ~= true then return end
+    CommerceMiddle.CommerceMiddle_SendOpenDay(fd, msg)
+end
+
+-- 请求开服天数
+function WL_COMMERCE_QUERYOPENDAY(fd, msg)
+    CommerceMiddle.CommerceMiddle_QueryOpenDay(fd, msg)
+end
+
+function LW_COMMERCE_ACTOPEN(fd, msg)
+    if _G.is_middle ~= true then return end
+    CommerceMiddle.CommerceMiddle_QueryOpenAct(fd, msg)
+end
+
+function WL_COMMERCE_ACTOPEN(fd, msg)
+    CommerceMiddle.CommerceMiddle_SendOpenAct(fd, msg)
+end
+
+-------------------- 跨服商业活动结束 ---------------------------

+ 25 - 0
script/common/InnerProto.lua

@@ -190,4 +190,29 @@ WL_COMBAT_GETINFO_SEND =
 
 -------------------- 请求跨服切磋结束 ---------------------------
 
+-------------------- 跨服商业活动开始 ---------------------------
+-- 请求开服天数
+WL_COMMERCE_GETOPENDAY = {
+}
+
+-- 回复开服天数
+LW_COMMERCE_SENDOPENDAY = {
+  {"nOpenDay",            "int"},
+  {"nSrcServerID",        "int"},
+}
+
+-- 请求是否开启活动
+LW_COMMERCE_ACTOPEN = 
+{
+  {"nSrcServerID",        "int"},     -- 源服务器ID
+  {"nOperate",            "int"},     -- 来源
+}
+
+WL_COMMERCE_ACTOPEN = 
+{
+  {"nOpen",               "int"},     -- 1 开 0 未开
+  {"nOperate",            "int"},     -- 来源
+}
+
+-------------------- 跨服商业活动结束 ---------------------------
 

+ 5 - 1
script/common/InnerProtoID.lua

@@ -22,4 +22,8 @@ _ENV[21] = 'WL_CHAT_PLAYER_INFO_SEND'
 _ENV[22] = 'LW_COMBAT_GETINFO'
 _ENV[23] = 'WL_COMBAT_GETINFO'
 _ENV[24] = 'LW_COMBAT_GETINFO_SEND'
-_ENV[25] = 'WL_COMBAT_GETINFO_SEND'
+_ENV[25] = 'WL_COMBAT_GETINFO_SEND'
+_ENV[26] = 'WL_COMMERCE_QUERYOPENDAY'
+_ENV[27] = "LW_COMMERCE_SENDOPENDAY"
+_ENV[28] = 'LW_COMMERCE_ACTOPEN'
+_ENV[29] = 'WL_COMMERCE_ACTOPEN'

+ 17 - 0
script/common/ProtoID.lua

@@ -1360,3 +1360,20 @@ _ENV[1397]="CG_EXCELLENTGIFT_FINISH_TASK"
 _ENV[1398]="CG_FIREWORKS_QUERY"
 _ENV[1399]="GC_FIREWORKS_QUERY"
 _ENV[1400]="GC_FIREWORKS_SHOW"
+_ENV[1401]="GC_SERVEERCOMMERCE_ACT_ALLINFO"
+_ENV[1402]="CG_SERVEERCOMMERCE_ACT_TASKQUERY"
+_ENV[1403]="GC_SERVEERCOMMERCE_ACT_TASKQUERY"
+_ENV[1404]="CG_SERVEERCOMMERCE_ACT_GETTASKPRIZE"
+_ENV[1405]="CG_SERVEERCOMMERCE_ACT_TASKPOINTQUERY"
+_ENV[1406]="GC_SERVEERCOMMERCE_ACT_TASKPOINTQUERY"
+_ENV[1407]="CG_SERVEERCOMMERCE_ACT_GETTASKPOINTPRIZE"
+_ENV[1408]="CG_SERVEERCOMMERCE_ACT_CHARGEQUERY"
+_ENV[1409]="GC_SERVEERCOMMERCE_ACT_CHARGEQUERY"
+_ENV[1410]="CG_SERVEERCOMMERCE_ACT_CHARGEGETPRIZE"
+_ENV[1411]="CG_SERVEERCOMMERCE_ACT_SHOPQUERY"
+_ENV[1412]="GC_SERVEERCOMMERCE_ACT_SHOPQUERY"
+_ENV[1413]="CG_SERVEERCOMMERCE_ACT_SHOPGETPRIZE"
+_ENV[1414]="CG_SERVEERCOMMERCE_ACT_RANK_QUERY"
+_ENV[1415]="GC_SERVEERCOMMERCE_ACT_RANK_QUERY"
+
+

+ 10 - 0
script/module/middle/MiddleConnect.lua

@@ -41,6 +41,16 @@ local function MiddleConnect_GetWarZoneServer(nSeverID)
     return 0, 0
 end
 
+-- 获取战区服务器ID
+function MiddleConnect_ConfServerID2TrueServerID(nServerIDConf)
+    return nServerIDConf + nServerOffSet - 1
+end
+
+-- 获取战区配置服务器ID
+function MiddleConnect_TrueServerID2ConfServerID(nServerID)
+    return nServerID - nServerOffSet + 1
+end
+
 function setMiddleInfo(ip, port, host)
 	if _G.is_middle == true then return end
 

+ 14 - 7
script/module/present/MonthCard.lua

@@ -11,12 +11,15 @@ local PanelDefine = require("broadcast.PanelDefine")
 local YyHandler = require("yunying.Handler")
 local KingWorldLogic = require("present.KingWorldLogic")
 local HeroLogic = require("hero.HeroLogic")
+local TreasureChestLogic = require("treasurechest.TreasureChestLogic")
 
-local MONTH_CARD_STATE_0 = 0        -- ÒѹýÆÚ
-local MONTH_CARD_STATE_1 = 1        -- δ¹ýÆÚ
-local MONTH_CARD_STATE_2 = 2        -- ÒÑÁìÈ¡
+local MONTH_CARD_STATE_0 = 0        -- 已过期
+local MONTH_CARD_STATE_1 = 1        -- 未过期
+local MONTH_CARD_STATE_2 = 2        -- 已领�
 
----  ¹¦ÄÜÐÞ¸Ä Ç°  ÒѾ­Óв»É¾µµ ·þ ¿ªÆô ËùÒÔ DB ÒÔÔ­ÓеÄΪ±ê×¼ ´óÌ岻ȥÐÞ¸Ä
+local MONTH_CARD_FOREVER = 2        -- 永久�ID
+
+---  功能修改 �  已�有�删档 � 开� 所以 DB 以原有的为标准 大体�去修改
 
 local function getState(monthCardDB)
     local now = os.time()
@@ -55,9 +58,9 @@ local function checkDB(human,id)
     return human.db.monthCard[id]
 end
 
--- »ñÈ¡ÌØÈ¨²ÎÊý
+-- -- 获�特��数
 function getPowerArgs(human, powerType)
-    -- ¼ì²é ÊÇ·ñ¿ªÁË ÓÀ¾ÃÔ¿¨
+    -- 检查 是�开了 永久月�
     local monthCardDB = checkDB(human, 2)
     if getState(monthCardDB) ~= MONTH_CARD_STATE_0 then
         local config = MonthCardExcel[2]
@@ -162,9 +165,13 @@ function buyMonthCard(human,id)
         
         HeroLogic.sendHeroBagCap(human)
     end
+
+    if MONTH_CARD_FOREVER == id then
+        TreasureChestLogic.TreasureChestLogic_BuyOpenAuto(human)
+    end
 end
 
--- ÊÇ·ñ¹ºÂò
+-- 是�购买
 function isActive(human, YYInfo, funcConfig)
    local monthCardDB = checkDB(human, 1)
     if getState(monthCardDB) == MONTH_CARD_STATE_0 then

+ 36 - 0
script/module/serverCommerce/Handler.lua

@@ -0,0 +1,36 @@
+
+
+-- 请求战区集结任务信息
+function CG_SERVEERCOMMERCE_ACT_TASKQUERY(human, msg)
+    
+end
+
+-- 请求领取任务奖励
+function CG_SERVEERCOMMERCE_ACT_GETTASKPRIZE(human, msg)
+    
+end
+
+-- 战区集结 - 领取任务积分奖励
+function CG_SERVEERCOMMERCE_ACT_GETTASKPOINTPRIZE(human, msg)
+    
+end
+
+----------------------------------------- 连充豪礼协议请求开始 -------------------------------------
+-- 请求连充豪礼-信息
+function CG_SERVEERCOMMERCE_ACT_CHARGEQUERY(human, msg)
+end
+
+-- 请求领取连充豪礼
+function CG_SERVEERCOMMERCE_ACT_CHARGEGETPRIZE(human, msg)
+end
+
+----------------------------------------- 战区钜惠请求开始 -------------------------------------
+function CG_SERVEERCOMMERCE_ACT_SHOPQUERY(human, msg)
+end
+
+function CG_SERVEERCOMMERCE_ACT_SHOPGETPRIZE(human, msg)
+end
+
+----------------------------------------- 排行榜协议请求开始 -------------------------------------
+function CG_SERVEERCOMMERCE_ACT_RANK_QUERY(human, msg)
+end

+ 151 - 0
script/module/serverCommerce/Proto.lua

@@ -0,0 +1,151 @@
+local ItemData = require("bag.Proto").ItemData
+local BuyItem = require("topup.Proto").BuyItem
+
+tActInfo = 
+{
+    {"ID",          1,      "short"},           -- 子活动ID
+    {"name",        1,      "string"},          -- 子活动名
+    {"nSortID",	    1,		"short"},		    -- 排序id
+    {"nPanelID",	1,		"short"},		    -- 面板id
+	{"nIcon",		1,		"int"},			    -- 活动图标
+    {"nRed",        1,      "byte"},            -- 是否有红点 1 存在 0 不存在
+}
+
+-- 玩家登录主动下发活动信息(活动开启时)
+GC_SERVEERCOMMERCE_ACT_ALLINFO = {
+    {"nStartTime",       1,     "int"},     -- 开启时间
+    {"nEendTime",        1,     "int"},     -- 结束时间
+    {"tActID",          10,     tActInfo},   -- 活动信息
+}
+
+---------------------- 战区集结 ----------------------
+TaskInfo = {
+    {"nID",             1,      "int"},         -- 任务编号
+    {"nState",          1,      "byte"},        -- 0 不可领取 1 - 可领取 2- 已领取
+    {"nDay",            1,      "byte"},        -- 天数
+    {"nValue",          1,      "int"},         -- 任务需要完成次数
+    {"nPoint",          1,      "byte"},        -- 完成获得积分
+    {"Desc",            1,      "string"},      -- 任务描述
+    {"item",            5,      ItemData},      -- 奖励信息
+}
+
+TaskPointInfo = {
+    {"nID",             1,      "int"},         -- 积分奖励ID
+    {"nNeedPoint",      1,      "int"},         -- 需要积分
+    {"nState",          1,      "byte"},        -- 0 不可领取 1 - 可领取 2- 已领取
+    {"item",            5,      ItemData},      -- 奖励信息
+}
+
+-- 请求战区集结任务信息
+CG_SERVEERCOMMERCE_ACT_TASKQUERY = {
+    {"nDay",            1,      "int"},     
+}
+
+
+-- 战区集结 - 任务信息回复协议
+GC_SERVEERCOMMERCE_ACT_TASKQUERY = 
+{
+    {"nDay",        1,    "int"},           -- 天数
+    {"nNowPoint",   1,    "int"},           -- 当前积分
+    {"list",        15,   TaskInfo},        -- 奖励信息
+}
+
+-- 请求领取任务奖励 
+CG_SERVEERCOMMERCE_ACT_GETTASKPRIZE = 
+{
+   {"nDay",         1,     "int"},          -- 天数
+}
+
+-- 请求任务积分信息
+CG_SERVEERCOMMERCE_ACT_TASKPOINTQUERY = {
+}
+
+-- 请求任务积分信息回包
+GC_SERVEERCOMMERCE_ACT_TASKPOINTQUERY = 
+{
+    {"nNowPoint",   1,      "int"},         -- 当前积分
+    {"listPoint",   8,    TaskPointInfo}    -- 积分信息
+}
+
+-- 战区集结 - 领取任务积分奖励
+CG_SERVEERCOMMERCE_ACT_GETTASKPOINTPRIZE = {}
+
+----------------------------------------- 连充豪礼协议开始 -------------------------------------
+CHARGEINFO = {
+    {"nID",             1,      "int"},         -- 奖励编号
+    {"nState",          1,      "byte"},        -- 0 不可领取 1 - 可领取 2- 已领取
+    {"nDay",            1,      "int"},           -- 天数
+    {"item",            5,      ItemData},      -- 奖励信息
+}
+
+-- 请求连充豪礼-信息
+CG_SERVEERCOMMERCE_ACT_CHARGEQUERY = {
+    {"nMoney",            1,       "int"}       -- 金额
+}
+
+-- 请求连充豪礼-信息回包
+GC_SERVEERCOMMERCE_ACT_CHARGEQUERY = {
+    {"nMoney",            1,       "int"},          -- 金额
+    {"nChargeDay",        1,        "int"},         -- 已充值天数
+    {"list",              5,        CHARGEINFO},    -- 信息
+}
+
+-- 请求领取连充豪礼
+CG_SERVEERCOMMERCE_ACT_CHARGEGETPRIZE = {
+    {"nMoney",            1,       "int"},          -- 金额
+}
+-- 回复 CG_SERVEERCOMMERCE_ACT_CHARGEQUERY-信息回包
+
+----------------------------------------- 战区钜惠协议开始 -------------------------------------
+COMMERCESHOPINFO = 
+{
+    {"nID",             1,          "int"},         -- 奖励编号
+    {"nNeedPoint",      1,          "int"},         -- 需要积分
+    {"nFreeState",      1,          "byte"},        -- 免费奖励状态 0 不可领取 1 - 可领取 2- 已领取
+    {"nPayState",      1,           "byte"},        -- 付费奖励状态 0 不可领取 1 - 可领取 2- 已领取
+    {"tFreeItem",       5,          ItemData},      -- 免费奖励信息
+    {"buyItem",         1,          BuyItem},       -- 直购信息
+    {"tPayItem",        5,          ItemData},      -- 付费奖励信息
+}
+
+-- 请求战区钜惠信息
+CG_SERVEERCOMMERCE_ACT_SHOPQUERY = {}
+
+-- 请求战区钜惠 - 回包
+GC_SERVEERCOMMERCE_ACT_SHOPQUERY = 
+{
+    {"nNowPoint",        1,           "int"},       -- 当前积分
+    {"list",             15,          COMMERCESHOPINFO},   -- 奖励配置
+}
+
+-- 请求领取战区钜惠奖励
+CG_SERVEERCOMMERCE_ACT_SHOPGETPRIZE = {}
+
+----------------------------------------- 排行榜相关协议开始 -------------------------------------
+ServerCommerceActRankList = {
+    {"rank",                1,         "int"},      -- 名次(-1未上榜)
+    {"rankNeedValue",       1,         "int"},      -- 上榜条件值
+    {"items",               5,         ItemData},   -- 排行名次奖励列表    
+    {"uid",                 1,         "string"},   -- 用户id(未上榜为"")
+    {"name",                1,         "string"},   -- 角色名(未上榜为"")
+    {"head",                1,         "int"},      -- 头像(未上榜为-1)  
+    {"rankValue",           1,         "int"},      -- 当前排名值     
+    {"headFrame",           1,         "int"},      -- 头像框(未上榜为-1)     
+}
+
+ServerCommerceActOnwerData = {
+    {"rank",             1,          "int"},        -- 名次(-1未上榜)
+    {"rankValue",        1,          "int"},        -- 当前排名值
+    {"items",            5,         ItemData},      -- 档位奖励列表(未上榜没有奖励) 
+}
+
+-- 排行榜查询
+CG_SERVEERCOMMERCE_ACT_RANK_QUERY = {
+    {"nRankType",       1,      "int"},     -- 排行榜类型 1 服务器排行榜,2 个人排行榜
+}
+
+-- 排行榜查询 - 回包
+GC_SERVEERCOMMERCE_ACT_RANK_QUERY = {                  
+    {"list",            22,         ServerCommerceActRankList},      -- 排行名次列表
+    {"ownerData",       1,          ServerCommerceActOnwerData},     -- 自己排名数据
+}

+ 18 - 0
script/module/serverCommerce/ServerCommerceActDefine.lua

@@ -0,0 +1,18 @@
+--------------------------------
+-- 文件名       :  ServerCommerceActDefine.lua
+-- 文件说明     :  跨服商业-活动通用定义
+-- 创建时间     :   2025/03/26
+-- 创建人       :   FC
+--------------------------------
+
+COMMERCEACT_BEGINTIME = 0               -- 开启时间
+COMMERCEACT_ENDTIME = 23                -- 结束时间
+COMMERCEACT_LASTDAY = 7                 -- 持续时间
+COMMERCEACT_BEGINDELATTIME = 10 * 60    -- 延迟10分钟开始
+COMMERCEACT_INITSERVERTIME = 3 * 60     -- 普通服 起服请求活动是否开始
+COMMERCEACT_INITOPENDAY = 2 * 60        -- 中心服请求普通服开服时间
+
+COMMERCEACT_NOOPEN = 0                  -- 未开启
+
+COMMERCEACT_SERVEROPEN = 1              -- 起服请求
+COMMERCEACT_ZERO = 2                    -- 整点请求

+ 108 - 0
script/module/serverCommerce/ServerCommerceActRank.lua

@@ -0,0 +1,108 @@
+--------------------------------
+-- 文件名       :  WeekendLoopActRank.lua
+-- 文件说明     :  周末冲刺-排行榜
+-- 创建时间     :   2024/12/09
+-- 创建人       :   FC
+--------------------------------
+
+local Msg = require("core.Msg")
+local Util = require("common.Util")
+local Lang = require("common.Lang")
+local CommonRankDB = require("common.CommonRankDB")
+local OpenServerRankDB = require("present.OpenServerRankDB")
+local Broadcast = require("broadcast.Broadcast")
+local OpenAct = require("present.OpenAct")
+local YunYingLogic = require("yunying.YunYingLogic")
+local DrawCardLogic = require("drawCard.DrawCardLogic")
+local CommonDefine = require("common.CommonDefine")
+
+--[[
+    local:
+
+	public:
+    	query()					            -- 发送活动信息
+        onCharge()			                -- 充值回调
+        WeekActRank_ResetData(human)        -- 重置玩家身上的充值
+        WeekActRank_ResetDBData()           -- 重置排行榜数据
+--]]
+
+----------------------------------------- 内部处理开始 -------------------------------------
+-- 重置
+function WeekActRank_ResetCharge(human)
+    -- if not human then
+    --     return
+    -- end
+
+    -- human.db.nWeekCharge = 0
+end
+
+-- 获取充值额度
+function WeekActRank_GetCharge(human)
+    -- if not human then
+    --     return 0
+    -- end
+
+    -- if not human.db.nWeekCharge then
+    --     WeekActRank_ResetCharge(human)
+    -- end
+
+    -- return human.db.nWeekCharge
+end
+
+-- 设置充值额度
+function WeekActRank_GetCharge(human, nVal)
+    -- if not human or 0 >= nVal then
+    --     return
+    -- end
+
+    -- if not human.db.nWeekCharge then
+    --     WeekActRank_ResetCharge(human)
+    -- end
+
+    -- human.db.nWeekCharge = human.db.nWeekCharge + nVal
+end
+
+
+----------------------------------------- 外部调用 -------------------------------------
+function WeekActRank_ResetData(human)
+    if not human then
+        return
+    end
+    
+    --WeekActRank_ResetCharge(human)
+end
+
+function WeekActRank_ResetDBData()
+    -- CommonRankDB.ResetData() 
+end
+
+-- 活动结束
+function WeekActRank_End()
+    CommonRankDB.onRewardSend(CommonDefine.COMMONRANK_TYPE_WEEKRANK)
+end
+
+-- 充值回调
+function onCharge(human, price, funcID, buyID)
+    CommonRankDB.onValueAdd(human, CommonDefine.COMMONRANK_TYPE_WEEKRANK, price)
+end
+
+----------------------------------------- 外部调用 -------------------------------------
+
+-- 客户端请求
+function WeekActRank_Query(human)
+    local nRankType = CommonDefine.COMMONRANK_TYPE_WEEKRANK
+	local maxSendRank = CommonRankDB.getMaxSendRank(nRankType)
+
+	local msgRet = Msg.gc.GC_WEEKLOOP_ACT_RANK_QUERY
+	
+	CommonRankDB.wrapOwnerData(nRankType, msgRet.ownerData, human.db._id)
+	
+    for rank = 1,maxSendRank do
+		CommonRankDB.wrapOpenServerRankList(nRankType, msgRet.list[rank], rank)
+	end
+    
+	msgRet.list[0] = maxSendRank
+
+	Msg.send(msgRet, human.fd)
+end
+

+ 432 - 0
script/module/serverCommerce/ServerCommerceManager.lua

@@ -0,0 +1,432 @@
+--------------------------------
+-- 文件名       :  ServerCommerceActManger.lua
+-- 文件说明     :  跨服商业-活动模板管理
+-- 创建时间     :   2025/03/26
+-- 创建人       :   FC
+--------------------------------
+
+local Util = require("common.Util")
+local Lang = require("common.Lang")
+local Broadcast = require("broadcast.Broadcast")
+local MailExcel = require("excel.mail")
+local Msg = require("core.Msg")
+local ObjHuman = require("core.ObjHuman")
+local MailManager = require("mail.MailManager")
+local BagLogic = require("bag.BagLogic")
+local Grid = require("bag.Grid")
+local PanelDefine = require("broadcast.PanelDefine")
+local CommonDB = require("common.CommonDB")
+local BuyLogic = require("topup.BuyLogic")
+local GuideLogic = require("guide.GuideLogic")
+local Log = require("common.Log")
+local YunYingLogic = require("yunying.YunYingLogic")
+local ServerCommerceCof = require("excel.ServerCommerce")
+local ServerCommerceActDefine = require("serverCommerce.ServerCommerceActDefine")
+local Timer = require("core.Timer")
+local ServerCommerceMiddle = require("serverCommerce.ServerCommerceMiddle")
+
+-- 活动信息
+tCommerceActInfo = nil
+-- {
+--     nStartTime = nil,       -- 开始时间
+--     nEendTime = nil,        -- 结束时间
+--     isRun = nil,            -- 是否在活动中
+--     nOpen = nil,            -- 是否打开
+-- }
+
+-- 加载的模块
+tCommerceActModuel = {}
+
+----------------------------------------- 内部处理开始 -------------------------------------
+-- 下发数据
+local function CommerceAct_SendData(tMsgData, fd)
+    Msg.send(tMsgData, fd)
+end
+
+-- 下发活动数据
+function CommerceAct_SendActInfo(human)
+    if not human or not tCommerceActInfo then
+        return
+    end
+
+    print("[CommerceAct_SendActInfo] 下发活动数据 开始 ")
+
+    local tMsgData = Msg.gc.GC_SERVEERCOMMERCE_ACT_ALLINFO
+    tMsgData.nStartTime = tCommerceActInfo.nStartTime
+    tMsgData.nEendTime = tCommerceActInfo.nEendTime
+
+    tMsgData.tActID[0] = #ServerCommerceCof.CommerceAct
+
+    local nIndex = 1
+    for id, v in pairs(ServerCommerceCof.CommerceAct) do
+        local tActData = tMsgData.tActID[nIndex]
+        nIndex = nIndex + 1
+        tActData.ID = id
+        tActData.name = v.name
+        tActData.nSortID = v.sortID
+        tActData.nIcon = v.icon
+        tActData.nPanelID = v.panelID
+        local bRed = false
+        if tCommerceActModuel[id] and tCommerceActModuel[id].isRed then
+            bRed = tCommerceActModuel[id].isRed(human)
+        end
+        
+        print("[CommerceAct_SendActInfo] name = "..tActData.name)
+        tActData.nRed = (bRed == true) and 1 or 0
+    end
+
+    YunYingLogic.sendBanner(human)
+    CommerceAct_SendData(tMsgData, human.fd)
+
+    print("[CommerceAct_SendActInfo] 下发活动数据 结束 ")
+end
+
+
+-- 各个子活动重置活动数据
+local function CommerceAct_ResetData(human)
+    if not human then
+        return
+    end
+    
+end
+
+-- 各个子活动处理结束数据
+local function CommerceAct_HandleEndData(human)
+    if not human then
+        return
+    end
+
+
+end
+
+-- 所有活动初始化数据开始
+local function CommerceAct_BeginAllAct(human)
+    if not human or not tCommerceActInfo then
+        return
+    end
+
+    local nEndTime = tCommerceActInfo.nEendTime
+    
+    print("[CommerceAct_BeginAllAct] 所有活动初始化数据开始 ")
+
+end
+
+-- 结束所有活动
+local function CommerceAct_EndAllAct(human)
+    -- 各个子活动处理数据
+    CommerceAct_HandleEndData(human)
+
+    CommerceAct_SetHumanEndMail(human, true)
+end
+
+-- 活动开始
+local function CommerceAct_Begin()
+    if not tCommerceActInfo then
+        return
+    end
+
+    -- 遍历在线玩家
+    for uuid, human in pairs(ObjHuman.onlineUuid) do
+        CommerceAct_BeginAllAct(human)
+    end
+
+    -- 清理排行榜数据
+    -- weekLoopActRank.WeekActRank_ResetData()
+end
+
+-- 活动结束
+local function CommerceAct_End()
+    -- 遍历在线玩家
+    for uuid, human in pairs(ObjHuman.onlineUuid) do
+        CommerceAct_EndAllAct(human)
+    end
+
+    -- 排行榜直接处理
+    -- weekLoopActRank.WeekActRank_End()
+end
+
+-- 获取抽卡批次
+function CommerceAct_GetCardBatch()
+
+end
+
+-- 设置新的批次
+local function CommerceAct_SetCardBatch()
+
+end
+
+local function CommerceAct_ActCheckOpen_InitServer(nOpen)
+    if ServerCommerceActDefine.COMMERCEACT_NOOPEN ~= nOpen then
+        local tCommerceInfo = CommonDB.GetCommerceActInfo()
+        local nNowTime = os.time()
+        local nBeginTime, nEndTime, isRun
+        if not tCommerceInfo or nil == _G.next(tCommerceInfo) then
+            nBeginTime = nNowTime
+            isRun = true
+            nEndTime = nNowTime + ServerCommerceActDefine.COMMERCEACT_LASTDAY * 86400
+            local tEndDate = os.date("*t",nEndTime)
+            tEndDate.hour = ServerCommerceActDefine.COMMERCEACT_ENDTIME
+            tEndDate.min = 0
+            tEndDate.sec = 0
+            nEndTime = os.time(tEndDate)
+            local tData = {
+                nBeginTime = nNowTime,
+                nEndTime = nEndTime,
+                nBatch = 1,
+            }
+            CommonDB.SetCommerceActInfo(tData)
+        else 
+            nBeginTime = tCommerceInfo.nBeginTime
+            nEndTime = tCommerceInfo.nEndTime
+            if nNowTime < tCommerceInfo.nEndTime then
+                isRun = true
+            else
+                isRun = false
+            end
+        end
+
+        tCommerceActInfo.nStartTime = nNowTime
+        tCommerceActInfo.nEendTime = nEndTime
+        tCommerceActInfo.isRun = isRun        
+    end
+end
+
+----------------------------------------- 外部调用开始 -------------------------------------
+function onZeroAll(funcID)
+    local nNowTime = os.time()
+    local tDate = os.date("*t",nNowTime)
+
+    if ServerCommerceActDefine.COMMERCEACT_BEGINTIME == tDate.hour then
+        Timer.addLater(ServerCommerceActDefine.COMMERCEACT_BEGINDELATTIME, CommerceAct_GetActOpen, 
+                    ServerCommerceActDefine.COMMERCEACT_ZERO)
+    elseif ServerCommerceActDefine.COMMERCEACT_ENDTIME == tDate.hour then
+    
+
+        tCommerceActInfo = nil
+    end
+end
+
+-- 请求活动打开信息
+function CommerceAct_GetActOpen(nOperate)
+    ServerCommerceMiddle.CommerceMiddle_IsActOpen(nOperate)
+end
+
+-- 中心服回复活动信息
+function CommerceAct_ActCheckOpen(nOpen, nOperate)
+    if not tCommerceActInfo then
+        tCommerceActInfo = {}
+    end
+
+    tCommerceActInfo.nOpen = nOpen
+    if ServerCommerceActDefine.COMMERCEACT_SERVEROPEN == nOperate then
+        CommerceAct_ActCheckOpen_InitServer(nOpen) 
+    else
+
+    end
+end
+
+-- 起服初始化
+function CommerceAct_Init()
+    local nNowTime = os.time()
+
+    for nID, v in pairs(ServerCommerceCof.CommerceAct) do
+        local moduleFn = load("return require(\"" .. v.moduleFn .. "\")")()
+        if moduleFn then
+            tCommerceActModuel[nID] = moduleFn
+            if moduleFn.Init then
+                local bRet = moduleFn.Init()
+                if false == bRet then
+                    print("[CommerceAct_Init] 初始化模块数据失败 nID ".. nID)
+                end
+            end
+            print("[CommerceAct_Init] 加载模块成功 name = "..v.name)
+        else
+            print("[CommerceAct_Init] 加载模块失败 nID ".. nID)
+        end
+    end
+
+    Timer.addLater(ServerCommerceActDefine.COMMERCEACT_INITSERVERTIME, CommerceAct_GetActOpen, 
+                    ServerCommerceActDefine.COMMERCEACT_SERVEROPEN)
+end
+
+-- 是否还在活动期间
+function CommerceAct_IsRun()
+    if not tCommerceActInfo then
+        return false
+    end
+
+    return tCommerceActInfo.isRun
+end
+
+function CommerceAct_IsSend()
+    if not tCommerceActInfo then
+        return false
+    end
+
+    return tCommerceActInfo.nSend
+end
+
+-- 玩家登录
+function onLogin(human, funcID)
+    if not human then
+        return
+    end
+
+
+    local nLastEndTime = CommerceAct_GetHumanEndTime(human)
+    local nState = CommerceAct_GetHumanEndMail(human)
+
+    local nSendMail = nState and 1 or 0
+    print("[onLogin] 玩家登录 nSendMail = "..nSendMail)
+
+    -- 未开始
+    if false == CommerceAct_IsRun() then
+        if true == nState or -1 >= nLastEndTime then
+            return
+        end
+
+        CommerceAct_EndAllAct(human)
+        
+        return
+    end
+
+    -- 当前活动开启,记录的结束时间比当前开始的时间都小说明是新活动
+    if nLastEndTime < tCommerceActInfo.nStartTime then
+        if false == nState then
+            -- 处理上一次的奖励数据
+            CommerceAct_HandleEndData(human)
+        end
+
+        CommerceAct_BeginAllAct(human)
+        
+        return
+    end
+
+    -- 下发活动基础数据
+    if true == CommerceAct_IsRun() then
+        CommerceAct_SendActInfo(human)
+    end
+end
+
+-- 英雄星级改变回调
+function onHeroStarChange(human, funcID, parameter, parameter2)
+    if not human or "table" ~= type(parameter) then
+        return
+    end
+
+    if false == CommerceAct_IsRun() then
+        return
+    end
+
+end
+
+-- 是否开启
+function isOpen(human, YYInfo, funcConfig)
+    local bRet = CommerceAct_IsRun()
+    local nRet = bRet and 1 or 0
+    print("CommerceAct_isOpen 结束 nRet = "..nRet)
+    return bRet
+end
+
+-- 
+function isActive(human, YYInfo, funcConfig)
+    return not isOpen(human, YYInfo, funcConfig)
+end
+
+function isRed(human, YYInfo, funcConfig)
+    local bRet = false
+    for id, v in pairs(ServerCommerceCof.WeekLoopAct) do
+        if tCommerceActModuel[id] and tCommerceActModuel[id].isRed then
+            bRet = tCommerceActModuel[id].isRed(human)
+            if true == bRet then
+                break
+            end
+        end
+    end
+
+    return bRet
+end
+
+-- 消耗古玉回调
+function onDecZuanshi(human, funcID, parameter, parameter2)
+    if not human or "number" ~= type(parameter) then
+        return
+    end
+
+    if false == CommerceAct_IsRun() then
+        return
+    end
+
+    local nGuYu = math.abs(parameter)
+    if 0 >= nGuYu then
+        return
+    end
+
+end
+
+-- 高级召唤回调
+function onDrawCard(human, funcID, parameter, parameter2)
+    if not human or "number" ~= type(parameter) then
+        return
+    end
+
+    if false == CommerceAct_IsRun() then
+        return
+    end
+
+    print("[onDrawCard] 高级召唤回调 parameter = "..parameter)
+    
+end
+
+-- 天命召唤回调
+function onTMDrawCard(human, funcID, parameter, parameter2)
+    if not human or "number" ~= type(parameter) then
+        return
+    end
+
+    if false == CommerceAct_IsRun() then
+        return
+    end
+
+    print("[onDrawCard] 天命召唤回调 parameter = "..parameter)
+
+    
+end
+
+-- 寻星回调
+function onFindStar(human, funcID, parameter, parameter2)
+    if not human or "number" ~= type(parameter) then
+        return
+    end
+
+    if false == CommerceAct_IsRun() then
+        return
+    end
+    
+    print("[onDrawCard] 寻星回调 parameter = "..parameter)
+
+end
+
+-- GM 命令
+function GMResetWeekAct(human)
+    if CommerceAct_IsRun() then
+        CommerceAct_EndAllAct(human)
+
+        CommerceAct_SetCardBatch()
+        CommerceAct_BeginAllAct(human)
+    end
+end
+
+function onCharge(human, price, funcID, buyID)
+    if not human then
+        return
+    end
+
+    if false == CommerceAct_IsRun() then
+        return
+    end
+
+    print("[onCharge] 玩家充值回调开始 name = "..human.db.name.." price = "..price)
+
+    
+end

+ 88 - 0
script/module/serverCommerce/ServerCommerceMiddle.lua

@@ -0,0 +1,88 @@
+local Util = require("common.Util")
+local WarZoneConf = require("excel.WarZone")
+local MiddleConnect = require("middle.MiddleConnect")
+local MiddleManager = require("middle.MiddleManager")
+local InnerMsg = require("core.InnerMsg")
+local Config = require("Config")
+local CommonDB = require("common.CommonDB")
+local Timer = require("core.Timer")
+local CommerceManger = require("serverCommerce.ServerCommerceManager")
+
+-- 缓存开服天数
+local tServerOpenDay = nil
+local SERVERCOMMERCEOPENDAY = 8     -- 活动开启要求天数
+
+-- 获取(中心服主动去获取)
+function CommerceMiddle_GetOpen()
+    local tWarZoneConf = WarZoneConf.group
+    local tMsgData = InnerMsg.wl.WL_COMMERCE_QUERYOPENDAY
+    for _, v in ipairs(tWarZoneConf) do
+        local nFirstServerID = MiddleConnect.MiddleConnect_ConfServerID2TrueServerID(v.nMinServerID)
+        local fd = MiddleManager.getFDBySvrIndex(nFirstServerID)
+        if fd then
+            InnerMsg.sendMsg(fd, tMsgData)
+        end
+    end
+end
+
+-- 回复开服天数
+function CommerceMiddle_SendOpenDay(fd, msg)
+    local nOpenDay = msg.nOpenDay
+
+    local nServerConfID = MiddleConnect.MiddleConnect_TrueServerID2ConfServerID(msg.nSrcServerID)
+    if not tServerOpenDay then
+        tServerOpenDay = {}
+    end
+
+    tServerOpenDay[nServerConfID] = nOpenDay
+end
+
+-- 请求开服天数
+function CommerceMiddle_QueryOpenDay(fd, msg)
+    local tMsgData = InnerMsg.lw.LW_COMMERCE_SENDOPENDAY
+    tMsgData.nOpenDay = CommonDB.getServerOpenDay()
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+function CommerceMiddle_QueryOpenAct(fd, msg)
+    local nConfServerID = MiddleConnect.MiddleConnect_TrueServerID2ConfServerID(msg.nSrcServerID)
+    local nFirstServerID
+    for _, v in ipairs(WarZoneConf.group) do
+        if v.nMinServerID <= nConfServerID and v.nMaxServerID >= nConfServerID then
+            nFirstServerID = v.nMinServerID
+            break
+        end
+    end
+    
+    if nil == nFirstServerID or not tServerOpenDay or not tServerOpenDay[nFirstServerID] then
+        print("[QueryOpenAct] 获取不到战区的第一个服务器\n")
+        return
+    end
+
+    local nSrcFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+    if not nSrcFD then
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_COMMERCE_ACTOPEN
+    tMsgData.nOpen = tServerOpenDay[nFirstServerID] >= SERVERCOMMERCEOPENDAY and 1 or 0
+    tMsgData.nOperate = msg.nOperate
+    InnerMsg.sendMsg(nSrcFD, tMsgData)
+end
+
+
+function CommerceMiddle_SendOpenAct(fd, msg)
+    CommerceManger.CommerceAct_ActCheckOpen(msg.nOpen, msg.nOperate)
+end
+
+------------------ 活动管理器操作 ------------------------
+-- 请求活动是否开启
+function CommerceMiddle_IsActOpen(nOperate)
+    local tMsgData = InnerMsg.lw.LW_COMMERCE_ACTOPEN
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+    tMsgData.nOperate = nOperate
+
+    InnerMsg.sendMsg(0, tMsgData)
+end

+ 5 - 0
script/module/treasurechest/TreasureChestLogic.lua

@@ -480,4 +480,9 @@ function TreasureChestLogic_AddItem(human, nItemID, nAddNum)
 
     TreasureChestLogic_AddGoods(human, nItemID, nAddNum)
     TreasureChestLogic_WriteLog(human, "增加了宝箱道具 nItemID "..nItemID.." nAddNum "..nAddNum)
+end
+
+-- 购买终身月卡解锁自动开宝箱
+function TreasureChestLogic_BuyOpenAuto(human)
+    TreasureChestLogic_AddAutoNum(human, TREASURECHEST_OPEN_AUTO_TYPE, TREASURECHEST_OPEN_AUTO_NUM)
 end