Commit 3e20f499d99e9fa79f308bca77f153733b9a9957

Authored by saicom
1 parent 02abfcb2

完善商城相关协议

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
... ...
1   -Subproject commit a09b1fc2fc76e793675b45b1ab28a6c98b18ce9b
  1 +Subproject commit 12409daded138b2934c0741b15b2e0de305bb109
... ...
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  
... ...