瀏覽代碼

新增运营活动:七日累充

huangyuhao80 1 周之前
父節點
當前提交
368a73f855

+ 167 - 0
meta/userapi/lua/ActTotalRecharge.lua

@@ -0,0 +1,167 @@
1
+-- 活动 - 七日累充
2
+ActTotalRecharge = {}
3
+ActTotalRecharge.__index = ActTotalRecharge
4
+
5
+local function _rechargeType()
6
+    return "1001"
7
+end
8
+
9
+local function _playerDbKey()
10
+    return "T$act_recharge_days_total_data"
11
+end
12
+
13
+-- 获取活动奖励
14
+local function _get_reward_items(id)
15
+    local reward = ConfigDataManager.getTableValue("cfg_Activity_firstRecharge", "reward", "id", id)
16
+    jprint("七日累充活动奖励", id, reward)
17
+    local tmp = string.toIntIntMap(reward, "#", "|")
18
+    if table.notNullOrEmpty(tmp) then
19
+        local list = {}
20
+        for k, v in pairs(tmp) do
21
+            table.insert(list, {id = k, count = v})
22
+        end
23
+        return list
24
+    end
25
+    return {}
26
+end
27
+
28
+function ActTotalRecharge.getData(actor)
29
+    local var = getplaydef(actor, _playerDbKey())
30
+    local data = setmetatable(var or {}, ActTotalRecharge)
31
+    -- 累计充值
32
+    if not data.count then
33
+        data.count = 0
34
+    end
35
+    -- 已领取奖励id
36
+    if not data.rewardList then
37
+        data.rewardList = {}
38
+    end
39
+    -- 结束时间
40
+    local currTime = getbaseinfo("nowsec")
41
+    if not data.endTime or data.endTime >= currTime then
42
+        ActTotalRecharge.onEnd(actor)
43
+
44
+        local weekSecs = 3600 * 24 * 7
45
+        local openTimeSec = math.ceil(getbaseinfo(actor, "serveropentime") / 1000)
46
+        local weeks = math.floor((currTime - openTimeSec) / weekSecs)
47
+
48
+        data.endTime = openTimeSec + (weeks + 1) * weekSecs
49
+
50
+        ActTotalRecharge.saveData(data, actor)
51
+    end
52
+    return data
53
+end
54
+
55
+-- 活动结束
56
+function ActTotalRecharge.onEnd(actor)
57
+    -- 未领取奖励,邮件发放
58
+    local var = getplaydef(actor, _playerDbKey())
59
+    local data = setmetatable(var or {}, ActTotalRecharge)
60
+    if data.count and data.count > 0 then
61
+        local playerCareer = tonumber(getbaseinfo(actor, "getbasecareer"))
62
+        local mapItems = {}
63
+        local confs = ConfigDataManager.getTable("cfg_Activity_daysTotalRecharge")
64
+        for i = 1, #confs do
65
+            if
66
+                data.count >= tonumber(confs[i].totalRecharge) and
67
+                    not (data.rewardList and table.contains(data.rewardList, confs[i].id))
68
+             then
69
+                local tmp = string.toIntIntMap4Career(playerCareer, confs[i].reward, "#", "|")
70
+                if table.notNullOrEmpty(tmp) then
71
+                    for k, v in pairs(tmp) do
72
+                        if not mapItems[k] then
73
+                            mapItems[k] = v
74
+                        else
75
+                            mapItems[k] = mapItems[k] + v
76
+                        end
77
+                    end
78
+                end
79
+            end
80
+        end
81
+        if table.notNullOrEmpty(mapItems) then
82
+            -- 发放补充奖励邮件
83
+            sendconfigmailbyrid(actor, getbaseinfo(actor, "rid"), MailConfig.ACT_DAYS_RECHARGES, mapItems, "")
84
+        end
85
+    end
86
+end
87
+
88
+function ActTotalRecharge:saveData(actor)
89
+    setplaydef(actor, _playerDbKey(), self)
90
+end
91
+
92
+---充值回调触发事件
93
+function ActTotalRecharge.rechargeEvent(actor, cfg_recharge, count, amount, ext, outRewards)
94
+    local data = ActTotalRecharge.getData(actor)
95
+    data.count = data.count + amount
96
+    ActTotalRecharge.saveData(data, actor)
97
+    jprint("更新[七日累充活动]数据 count:", data.count)
98
+    -- 前端同步累充金额
99
+    ActTotalRecharge.sendModuleInfo(actor)
100
+end
101
+
102
+function ActTotalRecharge.gainReward(actor, reqParameter)
103
+    local id = reqParameter["id"]
104
+    local recharge = ConfigDataManager.getTableValue("cfg_Activity_daysTotalRecharge", "totalRecharge", "id", id)
105
+    if recharge == nil then
106
+        tipinfo(actor, "无此档位")
107
+        return
108
+    end
109
+    local data = ActTotalRecharge.getData(actor)
110
+    -- 未充值
111
+    if data.count < tonumber(recharge) then
112
+        tipinfo(actor, "未达标")
113
+        return
114
+    end
115
+    -- 已领取
116
+    if data.rewardList and table.contains(data.rewardList, id) then
117
+        tipinfo(actor, "已领取")
118
+        return
119
+    end
120
+    -- 发放奖励
121
+    local reward = ConfigDataManager.getTableValue("cfg_Activity_daysTotalRecharge", "reward", "id", id)
122
+    local playerCareer = tonumber(getbaseinfo(actor, "getbasecareer"))
123
+    local tmp = string.toIntIntMap4Career(playerCareer, reward, "#", "|")
124
+    if table.notNullOrEmpty(tmp) then
125
+        --奖励进入背包
126
+        Bag.sendRewards(actor, tmp, "七日累充活动奖励")
127
+    end
128
+
129
+    -- 改变状态
130
+    table.insert(data.rewardList, id)
131
+    ActTotalRecharge.saveData(data, actor)
132
+    -- jprint("领奖豪礼数据",data)
133
+    ActTotalRecharge.sendModuleInfo(actor)
134
+end
135
+
136
+-- 获取活动信息
137
+function ActTotalRecharge.getInfo(actor, msgData)
138
+    ActTotalRecharge.sendModuleInfo(actor)
139
+end
140
+
141
+-- 推送活动模块数据
142
+function ActTotalRecharge.sendModuleInfo(actor, isStartShow)
143
+    local data = ActTotalRecharge.getData(actor)
144
+    jprint("ActTotalRecharge sendModuleInfo showTime:", data.showTime)
145
+    if data.showTime > 0 then
146
+        sendluamsg(
147
+            actor,
148
+            LuaMessageIdToClient.RES_ACT_DAYS_RECHARGE_INFO,
149
+            {
150
+                payTime = data.payTime,
151
+                showTime = data.showTime,
152
+                rewardStatus = data.rewardStatus,
153
+                awards = _get_reward_items(1),
154
+                isStartShow = isStartShow or false
155
+            }
156
+        )
157
+    end
158
+end
159
+
160
+function ActTotalRecharge.login(actor)
161
+    ActTotalRecharge.sendModuleInfo(actor)
162
+end
163
+
164
+--TODO 一定要放到文件最后
165
+EventListerTable.registerType("七日累充活动", _rechargeType(), _playerDbKey())
166
+--注册充值事件
167
+RechargeEventListerTable:eventLister("0", "七日累充活动", ActTotalRecharge.rechargeEvent)

+ 2 - 1
meta/userapi/lua/Constants.lua

@@ -76,7 +76,7 @@ ItemType = {
76 76
 --- 触发类物品子类型
77 77
 TriggerSubType = {
78 78
     CAREER_TRANSFER_CARD = 15
79
- -- 转职卡
79
+    -- 转职卡
80 80
 }
81 81
 
82 82
 --- 道具子类型
@@ -429,6 +429,7 @@ MailConfig = {
429 429
     COMPETITION_PERSONAL_REWARD = 110017, --开服竞技#个人竞技奖励
430 430
     RECHARGE_SEVEN_REWARD = 110016, --福利#七天登录奖励
431 431
     MONTHLY_GROW_DAILY_REWARD = 110018, --月卡活动#补发每日领取奖励
432
+    ACT_DAYS_RECHARGES = 110019, --运营七日累充活动#补发未领取奖励
432 433
     BIG_SECRET_REALM_KEY_LEVEL_UP = 19001, -- 大秘境副本发放升级的钥匙
433 434
     BIG_SECRET_REALM_KEY_LEVEL_DOWN = 19002, -- 大秘境副本发放降级的钥匙
434 435
     BIG_SECRET_REALM_QUIT_KEY_LEVEL_DOWN = 19003, -- 大秘境副本中途退出发放降级的钥匙

+ 6 - 2
meta/userapi/lua/LuaMessageIdConst.lua

@@ -336,7 +336,9 @@ LuaMessageIdToClient = {
336 336
     -- 首充活动
337 337
     RES_ACT_FIRST_CHARGE_INFO = 10000400, -- 响应首充活动信息
338 338
     -- 月卡活动
339
-    RES_ACT_MONTHLY_GROW_INFO = 10000401 -- 响应月卡活动信息
339
+    RES_ACT_MONTHLY_GROW_INFO = 10000401, -- 响应月卡活动信息
340
+    -- 七日累充
341
+    RES_ACT_DAYS_RECHARGE_INFO = 10000402 -- 响应七日累充活动信息
340 342
 }
341 343
 -- 服务器接收的消息id
342 344
 LuaMessageIdToSever = {
@@ -656,5 +658,7 @@ LuaMessageIdToSever = {
656 658
     REQ_ITEM_FAILURE = 2002030, -- 装备已失效.将装备的耐久减为0.并且不可修理
657 659
     -- 活动
658 660
     REQ_ACT_FIRST_RECHARGE_INFO = 2002100, -- 请求首充活动信息
659
-    REQ_ACT_FIRST_RECHARGE_REWARD = 2002101 -- 请求首充活动领取奖励
661
+    REQ_ACT_FIRST_RECHARGE_REWARD = 2002101, -- 请求首充活动领取奖励
662
+    REQ_ACT_DAYS_RECHARGE_INFO = 2002102, -- 请求每日充值活动信息
663
+    REQ_ACT_DAYS_RECHARGE_REWARD = 2002103 -- 请求每日充值活动领取奖励
660 664
 }

+ 5 - 0
meta/userapi/lua/QFunction-0.lua

@@ -652,6 +652,10 @@ function handlerequest(actor, uid, msgID, msgData)
652 652
         ActFirstRecharge.getInfo(actor, msgData)
653 653
     elseif msgID == LuaMessageIdToSever.REQ_ACT_FIRST_RECHARGE_REWARD then
654 654
         ActFirstRecharge.gainReward(actor, msgData)
655
+    elseif msgID == LuaMessageIdToSever.REQ_ACT_DAYS_RECHARGE_INFO then
656
+        ActTotalRecharge.getInfo(actor, msgData)
657
+    elseif msgID == LuaMessageIdToSever.REQ_ACT_DAYS_RECHARGE_REWARD then
658
+        ActTotalRecharge.gainReward(actor, msgData)
655 659
     else
656 660
         -- 请放到最后,其余消息在上面追加
657 661
         error(actor, "收到无法处理的消息", "玩家", actor, "消息ID", msgID, "params", msgData)
@@ -719,6 +723,7 @@ function login(play)
719 723
     -- gameDebug.debug( OperationalActivities.openActive, play)
720 724
     gameDebug.debug(ActFirstRecharge.login, play)
721 725
     gameDebug.debug(ActMonthlyGrow.login, play)
726
+    gameDebug.debug(ActTotalRecharge.login, play)
722 727
 end
723 728
 
724 729
 function exit(actor)