Commit 3e20f499d99e9fa79f308bca77f153733b9a9957
1 parent
02abfcb2
完善商城相关协议
Showing
7 changed files
with
206 additions
and
67 deletions
Show diff stats
src/ProtocolCode.lua
... | ... | @@ -184,6 +184,10 @@ actionCodes = { |
184 | 184 | Store_myCardRechargeRpc = 556, |
185 | 185 | Store_iosRechargeRpc = 557, |
186 | 186 | Store_shopBuyRpc = 558, |
187 | + Store_updateproperty = 559, | |
188 | + Store_getFreeChectRpc = 559, | |
189 | + Store_getGrowFundRewardRpc = 560, --成长助力奖励 | |
190 | + Store_getBattlePassRewardRpc = 561, --赛季卡奖励 | |
187 | 191 | |
188 | 192 | |
189 | 193 | Email_listRpc = 600, | ... | ... |
src/actions/GmAction.lua
... | ... | @@ -512,6 +512,14 @@ function _M.helpRpc(agent, data) |
512 | 512 | return true |
513 | 513 | end |
514 | 514 | |
515 | +table.insert(helpDes, {"测试", "test", ""}) | |
516 | +function _M.test(role, pms) | |
517 | + local id = tonum(pms.pm1, 0) | |
518 | + local a = require("actions.StoreAction") | |
519 | + a.getGrowFundRewardRpc({role=role}, MsgPack.pack({id=id})) | |
520 | + return "成功" | |
521 | +end | |
522 | + | |
515 | 523 | -- 充值回调 |
516 | 524 | function _M.ayncPurchase(role, params) |
517 | 525 | return role:handlePurchase(params) or "" | ... | ... |
src/actions/RoleAction.lua
... | ... | @@ -128,7 +128,7 @@ function _M.loginRpc( agent, data ) |
128 | 128 | |
129 | 129 | redisproxy:zadd(FRIEND_RECOMMEND, now, roleId) |
130 | 130 | |
131 | - for _, name in ipairs({"dailyData", "dinerData", "activity"}) do | |
131 | + for _, name in ipairs({"dailyData", "dinerData", "activity", "storeData"}) do | |
132 | 132 | response[name] = role[name]:data() |
133 | 133 | end |
134 | 134 | ... | ... |
src/actions/StoreAction.lua
... | ... | @@ -263,8 +263,11 @@ function _M.shopBuyRpc(agent , data) |
263 | 263 | local dataSet = csvdb["shop_normalCsv"][id] |
264 | 264 | if not dataSet then return end |
265 | 265 | |
266 | - local buyRecord = role.storeData:getProperty("Store_buyRecord") | |
267 | - if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (buyRecord[id] or 0))) then return 1 end | |
266 | + local buyRecord = role.storeData:getProperty("buyR") | |
267 | + if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (buyRecord[id] or 0))) then | |
268 | + skynet.error(string.format("shop buy over limit, user_id:%d, goods_id:%d", role:getProperty("id"), id)) | |
269 | + return 1 | |
270 | + end | |
268 | 271 | |
269 | 272 | local cost = {[dataSet.icon] = dataSet.cost * count} |
270 | 273 | |
... | ... | @@ -285,9 +288,8 @@ function _M.shopBuyRpc(agent , data) |
285 | 288 | |
286 | 289 | if dataSet.limit ~= 0 then |
287 | 290 | buyRecord[id] = (buyRecord[id] or 0) + count |
288 | - role.storeData:updateProperty({field = "Store_buyRecord", value = buyRecord}) | |
291 | + role.storeData:updateProperty({field = "buyR", value = buyRecord}) | |
289 | 292 | end |
290 | - | |
291 | 293 | role:costItems(cost, {log = {desc = desc, int1 = id, int2 = count}}) |
292 | 294 | |
293 | 295 | local gift = {} |
... | ... | @@ -302,4 +304,108 @@ function _M.shopBuyRpc(agent , data) |
302 | 304 | return true |
303 | 305 | end |
304 | 306 | |
307 | +function _M.getFreeCheckRpc(agent, data) | |
308 | + local role = agent.role | |
309 | + local msg = MsgPack.unpack(data) | |
310 | + local id = msg.id | |
311 | + | |
312 | + local config = csvdb["shop_rechargeCsv"][id] | |
313 | + if not config then return end | |
314 | + | |
315 | + local rechargeRecord = role.storeData:getProperty("payR") | |
316 | + local getCount = (rechargeRecord[id] or 0) | |
317 | + if getCount >= config.limit then | |
318 | + return 1 | |
319 | + end | |
320 | + local reward, _ = role:award(rechargeData.itemFirst, {log = {desc = "freeGift", int1 = id}}) | |
321 | + | |
322 | + rechargeRecord[id] = getCount + 1 | |
323 | + role.storeData:updateProperty({field = "payR", value = rechargeRecord}) | |
324 | + | |
325 | + SendPacket(actionCodes.Store_getFreeChectRpc, MsgPack.pack({reward = reward})) | |
326 | +end | |
327 | + | |
328 | +function _M.getGrowFundRewardRpc(agent, data) | |
329 | + local role = agent.role | |
330 | + local msg = MsgPack.unpack(data) | |
331 | + local id = msg.id | |
332 | + | |
333 | + local config = csvdb["reward_newbeeCsv"][id] | |
334 | + if not config then return end | |
335 | + | |
336 | + local growFundFlag = role.storeData:getProperty("growFund") | |
337 | + local growFundRecord = role.storeData:getProperty("growFundR") | |
338 | + | |
339 | + if growFundFlag == 0 then | |
340 | + skynet.error("user do not buy grow fund") | |
341 | + return 1 | |
342 | + end | |
343 | + | |
344 | + if not role:checkHangPass(config.condition) then | |
345 | + skynet.error(string.format("user do not finish hang pass, user_id:%d", role:getProperty("id"))) | |
346 | + return 1 | |
347 | + end | |
348 | + | |
349 | + local b = string.getbit(growFundRecord, id) | |
350 | + if string.char(b) == "1" then | |
351 | + return 1 | |
352 | + end | |
353 | + | |
354 | + growFundRecord = string.setbit(growFundRecord, id) | |
355 | + role.storeData:updateProperty({field = "growFundR", value = growFundRecord}) | |
356 | + | |
357 | + local gift = config.giftFree .. " " .. config.giftLimit | |
358 | + local reward, _ = role:award(gift, {log = {desc = "grownFund", int1 = id}}) | |
359 | + | |
360 | + SendPacket(actionCodes.Store_getGrowFundRewardRpc, MsgPack.pack({reward = reward})) | |
361 | +end | |
362 | + | |
363 | +function _M.getBattlePassRewardRpc(agent, data) | |
364 | + local role = agent.role | |
365 | + local msg = MsgPack.unpack(data) | |
366 | + local id = msg.id | |
367 | + | |
368 | + local config = csvdb["reward_battlepassCsv"][id] | |
369 | + if not config then return end | |
370 | + | |
371 | + local timeNow = skynet.timex() | |
372 | + local battleCardExTs = role.storeData:getProperty("battleCardEx") | |
373 | + local battleCardFreeRecord = role.storeData:getProperty("battleFR") | |
374 | + local battleCardLimitRecord = role.storeData:getProperty("battleLR") | |
375 | + | |
376 | + local freeFlag = string.char(string.getbit(battleCardFreeRecord, id)) | |
377 | + local limitFlag = string.char(string.getbit(battleCardLimitRecord, id)) | |
378 | + | |
379 | + if freeFlag == "1" and limitFlag == "1" then | |
380 | + skynet.error("user already get battle pass reward") | |
381 | + return 1 | |
382 | + end | |
383 | + | |
384 | + if battleCardExTs < timeNow and freeFlag == "1" then | |
385 | + return 1 | |
386 | + end | |
387 | + | |
388 | + local gift = "" | |
389 | + if freeFlag == "0" then | |
390 | + gift = config.giftFree | |
391 | + | |
392 | + battleCardFreeRecord = string.setbit(battleCardFreeRecord, id) | |
393 | + role.storeData:updateProperty({field = "battleFR", value = battleCardFreeRecord}) | |
394 | + end | |
395 | + | |
396 | + if battleCardExTs > timeNow and limitFlag == "0" then | |
397 | + if gift ~= "" then | |
398 | + gift = gift .. " " | |
399 | + end | |
400 | + gift = gift .. config.giftLimit | |
401 | + | |
402 | + battleCardLimitRecord = string.setbit(battleCardLimitRecord, id) | |
403 | + role.storeData:updateProperty({field = "battleFR", value = battleCardLimitRecord}) | |
404 | + end | |
405 | + | |
406 | + local reward, _ = role:award(gift, {log = {desc = "battleCard", int1 = id}}) | |
407 | + | |
408 | + SendPacket(actionCodes.Store_getBattlePassRewardRpc, MsgPack.pack({reward = reward})) | |
409 | +end | |
410 | + | |
305 | 411 | return _M |
306 | 412 | \ No newline at end of file | ... | ... |
src/models/RolePlugin.lua
... | ... | @@ -145,7 +145,6 @@ function RolePlugin.bind(Role) |
145 | 145 | end |
146 | 146 | end |
147 | 147 | end |
148 | - | |
149 | 148 | return reward, allChange --实际获得的奖励 和 最高级奖励转化过程 |
150 | 149 | end |
151 | 150 | |
... | ... | @@ -1507,7 +1506,7 @@ function RolePlugin.bind(Role) |
1507 | 1506 | return |
1508 | 1507 | end |
1509 | 1508 | |
1510 | - local diamond = self:recharge({ | |
1509 | + local reward = self:recharge({ | |
1511 | 1510 | id = orderObject:getProperty("rechargeId"), |
1512 | 1511 | transactionId = params.transactionId, |
1513 | 1512 | pay_time = params.pay_time, |
... | ... | @@ -1518,7 +1517,7 @@ function RolePlugin.bind(Role) |
1518 | 1517 | |
1519 | 1518 | redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr) |
1520 | 1519 | SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr, |
1521 | - result = "success", diamond = diamond})) | |
1520 | + result = "success", reward = reward})) | |
1522 | 1521 | |
1523 | 1522 | return orderObject:getProperty("rechargeId") |
1524 | 1523 | end |
... | ... | @@ -1532,7 +1531,7 @@ function RolePlugin.bind(Role) |
1532 | 1531 | return |
1533 | 1532 | end |
1534 | 1533 | |
1535 | - if not role.storeData:checkRechargeRecord(rechargeData.limit, id) then | |
1534 | + if not self.storeData:checkRechargeRecord(rechargeData.limit, id) then | |
1536 | 1535 | return 1 |
1537 | 1536 | end |
1538 | 1537 | |
... | ... | @@ -1547,25 +1546,27 @@ function RolePlugin.bind(Role) |
1547 | 1546 | self:updateProperty({field = "rechargeF", value = rechargeF}) |
1548 | 1547 | end |
1549 | 1548 | self:gainDiamond({count = diamondCount, isRecharge = true, log = {desc = "recharge", int1 = id}}) |
1550 | - elseif rechargeData.shop == 1 then --通行证商店 | |
1551 | - reward = self:award(rechargeData.itemFirst, {log = {desc = "recharge", int1 = id}}) | |
1549 | + elseif rechargeData.shop == 2 then --通行证商店 | |
1550 | + reward, _ = self:award(rechargeData.itemFirst, {log = {desc = "recharge", int1 = id}}) | |
1552 | 1551 | self.storeData:onBuyCard(rechargeData.type, rechargeData.time) |
1553 | - return | |
1554 | - elseif rechargeData.shop == 2 then -- 礼包商店 | |
1555 | - reward = self:award(rechargeData.itemFirst, {log = {desc = "recharge", int1 = id}}) | |
1556 | - return | |
1552 | + elseif rechargeData.shop == 3 then -- 礼包商店 | |
1553 | + reward, _ = self:award(rechargeData.itemFirst, {log = {desc = "recharge", int1 = id}}) | |
1557 | 1554 | else |
1558 | 1555 | skynet.error("invalid recharge shop type " .. id) |
1559 | 1556 | return |
1560 | 1557 | end |
1561 | 1558 | |
1559 | + if diamondCount > 0 then | |
1560 | + reward[Itemid.Diamond] = (reward[Itemid.Diamond] or 0) + diamondCount | |
1561 | + end | |
1562 | + | |
1562 | 1563 | -- 累充 |
1563 | 1564 | local rmb = rechargeData.rmb |
1564 | 1565 | self:updateProperty({field = "rmbC", delta = rmb}) |
1565 | 1566 | |
1566 | 1567 | self:log("role_action", {desc = "recharge", int1 = id, int2 = rmb, key1 = params.transactionId, key2 = params.order, long1 = params.pay_time}) |
1567 | 1568 | |
1568 | - return diamondCount, reward | |
1569 | + return reward | |
1569 | 1570 | end |
1570 | 1571 | |
1571 | 1572 | end | ... | ... |
src/models/Store.lua
... | ... | @@ -7,38 +7,39 @@ function Store:ctor(properties) |
7 | 7 | end |
8 | 8 | |
9 | 9 | Store.schema = { |
10 | - Store_buyRecord = {"table", {}}, -- 购买商品记录 {id=count} | |
11 | - Store_rechargeRecord = {"table", {}}, -- 充值记录 {id=count} | |
12 | - Store_growFund = {"number", 0}, -- 成长基金 | |
13 | - Store_growFundRecord = {"table", {}}, -- 成长基金领取记录 | |
14 | - Store_monthCardExTs = {"number", 0}, -- 月卡过期时间戳 | |
15 | - Store_smonthCardExTs = {"number", 0}, -- 超级月卡过期时间戳 | |
16 | - Store_battleCardExTs = {"number", 0}, -- 赛季卡过期时间戳 | |
17 | - Store_battleCardRecord = {"table", {}}, -- 赛季卡领取记录 | |
10 | + buyR = {"table", {}}, -- 购买商品记录 {id=count} | |
11 | + payR = {"table", {}}, -- 充值记录 {id=count} | |
12 | + growFund = {"number", 0}, -- 成长基金 | |
13 | + growFundR = {"string", ""}, -- 成长基金领取记录 | |
14 | + monthCardEx = {"number", 0}, -- 月卡过期时间戳 | |
15 | + smonthCardEx = {"number", 0}, -- 超级月卡过期时间戳 | |
16 | + battleCardEx = {"number", 0}, -- 赛季卡过期时间戳 | |
17 | + battleFR = {"string", ""}, -- 免费赛季卡领取记录 | |
18 | + battleLR = {"string", ""}, -- 付费赛季卡领取记录 | |
19 | + limitTPack = {"table", {}} -- 限时礼包 {id=expire_ts} | |
18 | 20 | } |
19 | 21 | |
20 | 22 | function Store:updateProperty(params) |
21 | - local type, default = table.unpack(self.schema[params.field]) | |
22 | - | |
23 | - if params.delta then | |
24 | - self:incrProperty(params.field, params.delta) | |
25 | - if not params.notNotify then | |
26 | - self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field)) | |
27 | - end | |
28 | - return true | |
23 | + params = params or {} | |
24 | + if not self.schema[params.field] then | |
25 | + return | |
29 | 26 | end |
27 | + local oldValue = self:getProperty(params.field) | |
30 | 28 | if params.value then |
31 | 29 | self:setProperty(params.field, params.value) |
32 | - if not params.notNotify then | |
33 | - self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field)) | |
34 | - end | |
35 | - return true | |
30 | + elseif params.delta then | |
31 | + self:incrProperty(params.field, params.delta) | |
32 | + else | |
33 | + return | |
34 | + end | |
35 | + local newValue = self:getProperty(params.field) | |
36 | + if not params.notNotify then | |
37 | + self:notifyUpdateProperty(params.field, newValue, oldValue) | |
36 | 38 | end |
37 | - return false | |
38 | 39 | end |
39 | 40 | |
40 | 41 | function Store:refreshData(notify, refreshType) |
41 | - local buyRecord = self:getProperty("Store_buyRecord") | |
42 | + local buyRecord = self:getProperty("buyR") | |
42 | 43 | local result = {} |
43 | 44 | for id, data in pairs(csvdb["shop_normalCsv"]) do |
44 | 45 | if data.shop == 1 and refreshType == RefreshType.RefreshType_Daily then |
... | ... | @@ -48,66 +49,85 @@ function Store:refreshData(notify, refreshType) |
48 | 49 | buyRecord[id] = nil |
49 | 50 | end |
50 | 51 | end |
51 | - self:setProperty("Store_buyRecord", buyRecord) | |
52 | + self:setProperty("buyR", buyRecord) | |
52 | 53 | if notify then |
53 | - --self.owner:notifyUpdateProperties(self:data()) | |
54 | - self:notifyUpdateProperty({field="Store_buyRecord", value=buyRecord}) | |
54 | + self:notifyUpdateProperty({field="buyR", value=buyRecord}) | |
55 | 55 | end |
56 | 56 | end |
57 | 57 | |
58 | 58 | function Store:refreshPvpBuyRecord(notify) |
59 | - local buyRecord = self:getProperty("Store_buyRecord") | |
59 | + local buyRecord = self:getProperty("buyR") | |
60 | 60 | for id, data in pairs(csvdb["shop_normalCsv"]) do |
61 | 61 | if data.shop == 3 then |
62 | 62 | buyRecord[id] = nil |
63 | 63 | end |
64 | 64 | end |
65 | - self:setProperty("Store_buyRecord", buyRecord) | |
65 | + self:setProperty("buyR", buyRecord) | |
66 | 66 | if notify then |
67 | - self:notifyUpdateProperty({field="Store_buyRecord", value=buyRecord}) | |
67 | + self:notifyUpdateProperty({field="buyR", value=buyRecord}) | |
68 | 68 | end |
69 | 69 | end |
70 | 70 | |
71 | 71 | -- 发送月卡邮件 |
72 | 72 | function Store:sendMonthCardEmail() |
73 | + local monthCardEx = self:getProperty("monthCardEx") | |
74 | + local smonthCardEx = self:getProperty("smonthCardEx") | |
75 | + local timeNow = skynet.timex() | |
76 | + if monthCardEx < timeNow then | |
77 | + redisproxy:insertEmail({roleId = self.owner:getProperty("id"), emailId = 19}) | |
78 | + end | |
79 | + if smonthCardEx < timeNow then | |
80 | + redisproxy:insertEmail({roleId = self.owner:getProperty("id"), emailId = 20}) | |
81 | + end | |
73 | 82 | end |
74 | 83 | |
75 | 84 | -- 购买通行证 |
76 | -function onBuyCard(type, duration) | |
85 | +function Store:onBuyCard(type, duration) | |
86 | + duration = duration == "" and 0 or tonumber(duration) | |
77 | 87 | local timeNow = skynet.timex() |
78 | - if rechargeData.type == CardType.NormalMonthCard then | |
79 | - self:updateProperty({field = "Store_monthCardExTs", value = timeNow + duration}) | |
80 | - elseif rechargeData.type == CardType.SuperMonthCard then | |
81 | - self:updateProperty({field = "Store_smonthCardExTs", value = timeNow + duration}) | |
82 | - elseif rechargeData.type == CardType.PrivilegeCard then | |
83 | - elseif rechargeData.type == CardType.GrowFund then | |
84 | - self:updateProperty({field = "Store_growFundRecord", 1}) | |
85 | - elseif rechargeData.type == CardType.BattleCard then | |
86 | - self:updateProperty({field = "Store_battleCardRecord", 1}) | |
88 | + if type == CardType.NormalMonthCard then | |
89 | + self:updateProperty({field = "monthCardEx", value = timeNow + duration}) | |
90 | + elseif type == CardType.SuperMonthCard then | |
91 | + self:updateProperty({field = "smonthCardEx", value = timeNow + duration}) | |
92 | + elseif type == CardType.PrivilegeCard then | |
93 | + elseif type == CardType.GrowFund then | |
94 | + self:updateProperty({field = "growFund", value = 1}) | |
95 | + elseif type == CardType.BattleCard then | |
96 | + self:updateProperty({field = "battleCardEx", value = timeNow + duration}) | |
87 | 97 | end |
88 | 98 | end |
89 | 99 | |
90 | -function checkRechargeRecord(limit, id) | |
91 | - local rechargeRecord = self:getProperty("Store_rechargeRecord") | |
100 | +function Store:checkRechargeRecord(limit, id) | |
101 | + local rechargeRecord = self:getProperty("payR") | |
92 | 102 | if limit ~= 0 and limit <= (rechargeRecord[id] or 0) then |
93 | 103 | skynet.error(string.format("recharge id:%d count over limit, user id:%d", id, self.owner:getProperty("id"))) |
94 | 104 | return false |
95 | 105 | end |
96 | - rechargeRecord[id] = rechargeRecord[id] + 1 | |
97 | - self:updateProperty({field = "Store_rechargeRecord", value = rechargeRecord[id]}) | |
106 | + rechargeRecord[id] = (rechargeRecord[id] or 0) + 1 | |
107 | + self:updateProperty({field = "payR", value = rechargeRecord}) | |
98 | 108 | return true |
99 | 109 | end |
100 | 110 | |
111 | +function Store:notifyUpdateProperty(field, newValue, oldValue) | |
112 | + local datas = { | |
113 | + key = field, | |
114 | + newValue = newValue, | |
115 | + oldValue = oldValue, | |
116 | + } | |
117 | + SendPacket(actionCodes.Store_updateproperty, MsgPack.pack(datas)) | |
118 | +end | |
119 | + | |
101 | 120 | function Store:data() |
102 | 121 | return { |
103 | - Store_buyRecord = self:getProperty("Store_buyRecord"), | |
104 | - Store_rechargeRecord = self:getProperty("Store_rechargeRecord"), | |
105 | - Store_growFund = self:getProperty("Store_growFund"), | |
106 | - Store_growFundRecord = self:getProperty("Store_growFundRecord"), | |
107 | - Store_monthCardExTs = self:getProperty("Store_monthCardExTs"), | |
108 | - Store_smonthCardExTs = self:getProperty("Store_smonthCardExTs"), | |
109 | - Store_battleCardExTs = self:getProperty("Store_battleCardExTs"), | |
110 | - Store_battleCardRecord = self:getProperty("Store_battleCardRecord"), | |
122 | + buyR = self:getProperty("buyR"), | |
123 | + payR = self:getProperty("payR"), | |
124 | + growFund = self:getProperty("growFund"), | |
125 | + growFundR = self:getProperty("growFundR"), | |
126 | + monthCardEx = self:getProperty("monthCardEx"), | |
127 | + smonthCardEx = self:getProperty("smonthCardEx"), | |
128 | + battleCardEx = self:getProperty("battleCardEx"), | |
129 | + battleCardR = self:getProperty("battleCardR"), | |
130 | + limitTPack = self:getProperty("limitTPack"), | |
111 | 131 | } |
112 | 132 | end |
113 | 133 | ... | ... |