Commit d93ec42cb3decdd446e835d3820e6f1eabfc362b

Authored by liuzujun
2 parents 8efb24c9 be24b6ad

Merge branch 'develop' of 120.26.43.151:wasteland/server into develop

src/RedisKeys.lua
... ... @@ -12,6 +12,8 @@ R_RUNE = "role:%d:rune:%d" -- 符文详细信息
12 12 R_EMAIL = "role:%d:emailIds" --邮件列表
13 13 R_EMAIL_ITEM = "email:%d:%d" --邮件
14 14 R_STORE = "role:%d:store" -- 商店
  15 +R_ORDERS = "role:%d:orders" -- 订单
  16 +R_ORDER = "order:%d:%d"
15 17  
16 18  
17 19 -- rank
... ...
src/actions/HangAction.lua
... ... @@ -498,10 +498,53 @@ function _M.buyBonusCountRpc(agent, data)
498 498 return true
499 499 end
500 500  
  501 +local function bonusWinReward(role, bonusData, bwin, count)
  502 + count = count or 1
  503 + local open, actId = role.activity:isOpen("BonusDouble")
  504 + local actData = csvdb["activity_ctrlCsv"][actId]
  505 + local extraCnt = role.storeData:getBonusExtraFightCount()
  506 +
  507 + local coef = 1
  508 + if open and actData then
  509 + coef = tonumber(actData.condition2)
  510 + end
  511 + local bonusC = role.dailyData:getProperty("bonusC")
  512 + bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}
  513 + if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] < count then return false, 1 end
  514 + bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + count
  515 + role.dailyData:updateProperty({field = "bonusC", value = bonusC})
  516 +
  517 + local reward, change
  518 + reward = bonusData.reward:toNumMap()
  519 + for itemId, c in pairs(reward) do
  520 + reward[itemId] = c * count
  521 + end
  522 + for i = 1, count do
  523 + local chance = bonusData.chance:randWeight(true)
  524 + if chance[1] ~= 0 then
  525 + reward[chance[1]] = (reward[chance[1]] or 0) + chance[2]
  526 + end
  527 + end
  528 +
  529 + for k, v in pairs(reward) do
  530 + reward[k] = v * (coef > 1 and actData.condition or 1)
  531 + end
  532 +
  533 + if bwin then -- 满星 额外奖励
  534 + for k, v in pairs(bonusData.perfect_reward:toNumMap()) do
  535 + reward[k] = (reward[k] or 0) + v
  536 + end
  537 + end
  538 + reward, change = role:award(reward, {log = {desc = "bonusBattle", int1 = id}})
  539 + role:checkTaskEnter("BonusPass", {id = id, count = count})
  540 + return true, reward, change
  541 +end
  542 +
501 543 function _M.startBonusBattleRpc(agent, data)
502 544 local role = agent.role
503 545 local msg = MsgPack.unpack(data)
504 546 local id = msg.id
  547 + local count = msg.count or 1
505 548  
506 549 local open, actId = role.activity:isOpen("BonusDouble")
507 550  
... ... @@ -516,9 +559,6 @@ function _M.startBonusBattleRpc(agent, data)
516 559 if not bonusData then return 3 end
517 560 if not role:checkHangPass(bonusData.unlock) then return 4 end
518 561  
519   - local bTeam = role:getTeamFormatByType(TeamSystemType.BonusBattle)
520   - if not next(bTeam) then return 5 end
521   -
522 562 local bonusC = role.dailyData:getProperty("bonusC")
523 563 bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}
524 564  
... ... @@ -529,15 +569,24 @@ function _M.startBonusBattleRpc(agent, data)
529 569 if open and actData then
530 570 coef = tonumber(actData.condition2)
531 571 end
  572 +
  573 + if math.illegalNum(count, 1, globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"]) then return 7 end
532 574  
533   - if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] <= 0 then return 7 end
534   -
  575 + local bonusStar = role:getProperty("bonusStar")
  576 + if bonusStar[id] and bonusStar[id] >= (1 << #bonusData.sweep_condition:toTableArray(true)) - 1 then
  577 + local status, reward, change = bonusWinReward(role, bonusData, nil, count)
  578 + if not status then return 10 * (reward or 0) end
  579 + SendPacket(actionCodes.Hang_startBonusBattleRpc, MsgPack.pack({reward = reward, change = change}))
  580 + else
  581 + local bTeam = role:getTeamFormatByType(TeamSystemType.BonusBattle)
  582 + if not next(bTeam) then return 5 end
  583 + role.__bonusBattleCache = {
  584 + key = tostring(math.random()),
  585 + id = id,
  586 + }
  587 + SendPacket(actionCodes.Hang_startBonusBattleRpc, MsgPack.pack({key = role.__bonusBattleCache.key}))
  588 + end
535 589  
536   - role.__bonusBattleCache = {
537   - key = tostring(math.random()),
538   - id = id,
539   - }
540   - SendPacket(actionCodes.Hang_startBonusBattleRpc, MsgPack.pack({key = role.__bonusBattleCache.key}))
541 590 return true
542 591 end
543 592  
... ... @@ -548,14 +597,7 @@ function _M.endBonusBattleRpc(agent, data)
548 597 local key = msg.key
549 598 local starNum = msg.starNum
550 599 if not role.__bonusBattleCache then return 1 end
551   - local open, actId = role.activity:isOpen("BonusDouble")
552   - local actData = csvdb["activity_ctrlCsv"][actId]
553   - local extraCnt = role.storeData:getBonusExtraFightCount()
554   -
555   - local coef = 1
556   - if open and actData then
557   - coef = tonumber(actData.condition2)
558   - end
  600 +
559 601  
560 602 if role.__bonusBattleCache.id ~= id or role.__bonusBattleCache.key ~= key then
561 603 SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1}))
... ... @@ -564,24 +606,79 @@ function _M.endBonusBattleRpc(agent, data)
564 606 local bonusData = csvdb["bonus_battleCsv"][id]
565 607  
566 608 local reward, change
  609 +
  610 + local bonusStar = role:getProperty("bonusStar")
  611 + local curStar = 0
567 612 if starNum and starNum > 0 then
568 613 -- 胜利扣除次数
569   - local bonusC = role.dailyData:getProperty("bonusC")
570   - bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}
571   - if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] <= 0 then return 3 end
572   - bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + 1
573   - role.dailyData:updateProperty({field = "bonusC", value = bonusC})
574   -
575   - reward = bonusData.reward:toNumMap()
576   - local chance = bonusData.chance:randWeight(true)
577   - if chance[1] ~= 0 then
578   - reward[chance[1]] = (reward[chance[1]] or 0) + chance[2]
  614 +
  615 + local bTeam = role:getTeamFormatByType(TeamSystemType.BonusBattle)
  616 + local herosInfo = role:getTeamHerosInfo(bTeam.heros)
  617 +
  618 + local check = {}
  619 + -- 1 通关
  620 + check[1] = function(_)
  621 + return true
  622 + end
  623 + -- 2 阵亡人数 <= N
  624 + check[2] = function(_, cond)
  625 + return msg.info.dead and msg.info.dead <= cond
  626 + end
  627 + -- 3 全员存活
  628 + check[3] = function(_)
  629 + return msg.info.dead and msg.info.dead == 0
  630 + end
  631 + -- 4 指定种族 >= N
  632 + check[4] = function(_, cond)
  633 + local count = 0
  634 + for _, one in pairs(herosInfo) do
  635 + local heroData = csv["unitCsv"][one.type]
  636 + if heroData.camp == cond then
  637 + count = count + 1
  638 + end
  639 + end
  640 + return count >= cond
579 641 end
580   - for k, v in pairs(reward) do
581   - reward[k] = v * (coef > 1 and actData.condition or 1)
  642 + -- 5 指定职业 >= N
  643 + check[5] = function(_, cond)
  644 + local count = 0
  645 + for _, one in pairs(herosInfo) do
  646 + local heroData = csv["unitCsv"][one.type]
  647 + if heroData.job == cond then
  648 + count = count + 1
  649 + end
  650 + end
  651 + return count >= cond
582 652 end
583   - reward, change = role:award(reward, {log = {desc = "bonusBattle", int1 = id}})
584   - role:checkTaskEnter("BonusPass", {id = id})
  653 + -- 6 含有指定角色
  654 + check[6] = function(_, cond)
  655 + for _, one in pairs(herosInfo) do
  656 + if one.type == cond then
  657 + return true
  658 + end
  659 + end
  660 + return false
  661 + end
  662 + -- 7 通关耗时 <= X 秒 msg.info.atime
  663 + check[7] = function(_, cond)
  664 + return msg.info.atime and msg.info.atime <= cond
  665 + end
  666 + curStar = 0
  667 + local sweepConds = bonusData.sweep_condition:toTableArray(true)
  668 + for i, cond in ipairs(sweepConds) do
  669 + if check[cond[1]] and check[cond[1]](table.unpack(cond)) then
  670 + curStar = curStar + (1 << (i - 1))
  671 + end
  672 + end
  673 + local status
  674 + status, reward, change = bonusWinReward(role, bonusData, curStar >= (1 << #sweepConds) - 1)
  675 + if not status then return 10 + (reward or 0) end
  676 + else
  677 + curStar = 0
  678 + end
  679 + if curStar ~= bonusStar[id] then
  680 + bonusStar[id] = curStar
  681 + role:updateProperty({field = "bonusStar", value = bonusStar})
585 682 end
586 683  
587 684 role:checkBattle("bonus", {
... ...
src/actions/StoreAction.lua
1 1 local _M = {}
2 2  
3   -local serverId = tonumber(skynet.getenv("servId"))
4 3 local md5 = require "md5"
5 4  
6   -local function makeOrder(role, rechargeId)
7   - local roleId = role:getProperty("id")
8   - local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]
9   - if not rechargeData then
10   - skynet.error("recharge id not exist", rechargeId)
11   - return ""
12   - end
13   - local limit = rechargeData.limit
14   - local rechargeRecord = role:getProperty("payR") or {}
15   - if limit ~= 0 and limit <= (rechargeRecord[rechargeId] or 0) then
16   - skynet.error(string.format("recharge id:%d count over limit, user id:%d", rechargeId, roleId))
17   - return ""
18   - end
19   -
20   - local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
21   - local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId)
22   - local orderKey = string.format("order:%d:%d", roleId, orderId)
23   - redisproxy:del(orderKey)
24   - local order = require("models.Order").new({
25   - key = orderKey,
26   - order = partnerOrderId,
27   - rechargeId = rechargeId,
28   - })
29   - order:create()
30   - redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId)
31   - return partnerOrderId
32   -end
33   -
34 5 -- 入口在正式服关闭 -- mock 充值
35 6 function _M.rechargeRpc(agent , data)
36 7 local role = agent.role
... ... @@ -41,7 +12,7 @@ function _M.rechargeRpc(agent , data)
41 12 local roleId = role:getProperty("id")
42 13  
43 14 --创建订单号
44   - local partnerOrderId = makeOrder(role, id)
  15 + local partnerOrderId = role:getPurchaseOrder(id)
45 16 SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId }))
46 17  
47 18  
... ... @@ -90,7 +61,7 @@ function _M.googleRechargeRpc(agent, data)
90 61  
91 62 role.ignoreHeartbeat = true
92 63 --创建订单号
93   - local partnerOrderId = makeOrder(role, id)
  64 + local partnerOrderId = role:getPurchaseOrder(id)
94 65 -- 签名
95 66 local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075"
96 67 local need = {
... ... @@ -117,7 +88,7 @@ function _M.myCardRechargeRpc(agent, data)
117 88  
118 89 role.ignoreHeartbeat = true
119 90 --创建订单号
120   - local partnerOrderId = makeOrder(role, id)
  91 + local partnerOrderId = role:getPurchaseOrder(id)
121 92 -- 签名
122 93 local secret_key = "48759e07540f46d9af17ec82669b4272"
123 94 local need = {
... ... @@ -143,7 +114,7 @@ function _M.iosRechargeRpc(agent, data)
143 114  
144 115 role.ignoreHeartbeat = true
145 116 --创建订单号
146   - local partnerOrderId = makeOrder(role, id)
  117 + local partnerOrderId = role:getPurchaseOrder(id)
147 118 -- 签名
148 119 local secret_key = "9647d2efe1074c73b9ac19af4337a70e"
149 120 local need = {
... ... @@ -167,43 +138,15 @@ function _M.purchaseOrderResult(agent, data)
167 138  
168 139 role.ignoreHeartbeat = false
169 140  
170   - local partnerOrderStr = msg.order
171   - local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")
172   - local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) })
173   - if not orderObject:load() then
174   - -- 订单不存在
175   - skynet.error("cancelPurchaseRpc", string.format("order %s not exist", partnerOrderStr))
176   - return true
177   - end
178   -
179   - if msg.status == "success" then
180   - orderObject:setProperty("transactionId", msg.platformOrder or "")
181   - local rechargeId = orderObject:getProperty("rechargeId")
182   - local dataSet = csvdb["shop_rechargeCsv"][rechargeId]
183   -
184   - role:log("setOrder", {
185   - order_status = 100, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他"
186   - item_id = rechargeId, -- 道具id
187   - item_type = dataSet.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表
188   - item_name = dataSet.title, -- 购买的道具名
189   - item_number = 1, -- 购买的道具数量
190   - item_level = 1, -- 购买的道具等级
191   - order_cost = dataSet.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee'
192   - order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范
193   - order_type = role:getProperty("rmbC") > 0 and 0 or 1, -- 订单类型,首充记录为1,否则为0
194   - order_id = msg.platformOrder, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no'
195   - })
196   -
197   - return true
198   - end
  141 + local status = {
  142 + fail = true,
  143 + success = true
  144 + }
199 145  
200   - if orderObject:getProperty("finishTime") > 0 then
201   - return true
  146 + local partnerOrderStr = msg.order
  147 + if partnerOrderStr then
  148 + role:updatePurchaseOrder(partnerOrderStr, msg.platformOrder, status[msg.status] and msg.status or "unknown")
202 149 end
203   -
204   - orderObject:setProperty("status", msg.status)
205   -
206   - redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr)
207 150 return true
208 151 end
209 152  
... ...
src/adv/AdvBuff.lua
... ... @@ -36,6 +36,8 @@ Buff.SNEAK = 32 --潜行
36 36 Buff.DROP_BUFF_BY_ENEMY = 33 -- 怪物掉落加成 -- 怪物使用
37 37 Buff.GET_PASSIVE = 34 -- 获得 passive -- 结束失效
38 38 Buff.OBSTACLE_CHANGE = 35 -- 看守类型改变 -- 怪物使用 0 - 1
  39 +Buff.DISABLE_AURA = 36 -- 禁用光环
  40 +Buff.GET_AURA = 37 -- 获得光环
39 41  
40 42  
41 43 --角色一些属性的变化
... ... @@ -332,6 +334,18 @@ local BuffFactory = {
332 334 end
333 335 end,
334 336  
  337 + [Buff.DISABLE_AURA] = function(_Buff)
  338 + _Buff._effectValue = function(self)
  339 + return self.buffData.effectValue1
  340 + end
  341 + end,
  342 +
  343 + [Buff.GET_AURA] = function(_Buff)
  344 + _Buff._effectValue = function(self)
  345 + return self.buffData.effectValue1
  346 + end
  347 + end,
  348 +
335 349 [Buff.SP_MAX_CHANGE] = function(_Buff)
336 350 _Buff._init = function(self) --初始化变化值
337 351 self.owner:reSetSpMax()
... ...
src/adv/AdvPlayer.lua
... ... @@ -143,6 +143,19 @@ function BaseObject:getDisablePassiveCount()
143 143 return count
144 144 end
145 145  
  146 +function BaseObject:getDisableAuraCount()
  147 + local count
  148 + for _, buff in ipairs(self.buffs) do
  149 + if not buff:isHide() and buff:getType() == Buff.DISABLE_AURA then
  150 + if buff:effect() == 0 then
  151 + return 0
  152 + end
  153 + count = (count or 0) + buff:effect()
  154 + end
  155 + end
  156 + return count
  157 +end
  158 +
146 159 function BaseObject:addBuff(buffId, releaser, layer)
147 160 layer = layer or 1
148 161 local buffData = csvdb["adv_map_buffCsv"][buffId]
... ... @@ -229,22 +242,36 @@ function BaseObject:checkAuraBuff(buffs)
229 242 end
230 243  
231 244 function BaseObject:getAuras()
  245 + local disable = self:getDisableAuraCount()
232 246 local auras = {}
  247 + local function addAura(one)
  248 + if disable > 0 then
  249 + disable = disable - 1
  250 + else
  251 + table.insert(auras, one)
  252 + end
  253 + end
233 254 if self:is("Enemy") then
234 255 local halo = csvdb["event_monsterCsv"][self.monsterId].halo
235 256 if halo then
236 257 for _, one in ipairs(halo:toArray(true, "=")) do
237   - table.insert(auras, one)
  258 + addAura(one)
238 259 end
239 260 end
240 261 elseif self:is("Build") then
241 262 local halo = csvdb["event_buildingCsv"][self.id].halo
242 263 if halo then
243 264 for _, one in ipairs(halo:toArray(true, "=")) do
244   - table.insert(auras, one)
  265 + addAura(one)
245 266 end
246 267 end
247   - end
  268 + end
  269 +
  270 + for _, buff in ipairs(self.buffs) do
  271 + if not buff:isHide() and buff:getType() == Buff.GET_AURA then
  272 + addAura(buff:effect())
  273 + end
  274 + end
248 275  
249 276 return auras
250 277 end
... ...
src/models/Role.lua
... ... @@ -114,6 +114,8 @@ Role.schema = {
114 114 teamIndex = {"table", {}}, -- 各个系统使用的编队索引 type->index 见TeamSystemType
115 115 advTeams = {"table", {}}, -- 拾荒自选编队
116 116  
  117 + bonusStar = {"table", {}}, -- 奖励关卡 通关星星 {[id] = 1} 三个二进制位 表示三个星 从低到高 (1 << 0) (1 << 1) (1 << 2) 满星 (1 << 3) - 1
  118 +
117 119 --引导相关
118 120 newerGuide = {"string","1=1"}, -- 新手引导 master=slave
119 121 funcGuide = {"string",""}, -- 功能引导 0=0跳过次数(999永久跳过) 1=1功能1触发情况
... ... @@ -360,6 +362,8 @@ function Role:data()
360 362 hangTeams = self:getProperty("hangTeams"),
361 363 teamIndex = self:getProperty("teamIndex"),
362 364 advTeams = self:getProperty("advTeams"),
  365 +
  366 + bonusStar = self:getProperty("bonusStar"),
363 367  
364 368 newerGuide = self:getProperty("newerGuide"),
365 369 funcGuide = self:getProperty("funcGuide"),
... ...
src/models/RolePlugin.lua
1 1  
2   -
  2 +local serverId = tonumber(skynet.getenv("servId"))
3 3 local RolePlugin = {}
4 4  
5 5 function RolePlugin.bind(Role)
... ... @@ -1534,6 +1534,102 @@ function RolePlugin.bind(Role)
1534 1534 self:updateProperty({field = "redp", value = redp})
1535 1535 end
1536 1536  
  1537 + -- 获取充值订单号
  1538 + function Role:getPurchaseOrder(rechargeId)
  1539 + local roleId = self:getProperty("id")
  1540 + local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]
  1541 + if not rechargeData then
  1542 + skynet.error("recharge id not exist", rechargeId)
  1543 + return ""
  1544 + end
  1545 + local limit = rechargeData.limit
  1546 + local rechargeRecord = self:getProperty("payR") or {}
  1547 + if limit ~= 0 and limit <= (rechargeRecord[rechargeId] or 0) then
  1548 + return ""
  1549 + end
  1550 +
  1551 + local orderId = redisproxy:hget(string.format(R_ORDERS, roleId), rechargeId)
  1552 + if orderId then
  1553 + local orderObject = require("models.Order").new({ key = string.format(R_ORDER, roleId, orderId) })
  1554 + if orderObject:load() and orderObject:getProperty("rechargeId") == rechargeId and math.abs(skynet.timex() - orderObject:getProperty("createTime")) < 5 * 60 then
  1555 + return string.format("%d_%d_%d", serverId, roleId, orderId)
  1556 + end
  1557 + end
  1558 +
  1559 + orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
  1560 + local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId)
  1561 + local orderKey = string.format(R_ORDER, roleId, orderId)
  1562 + redisproxy:del(orderKey) -- 删掉可能有了
  1563 + local order = require("models.Order").new({
  1564 + key = orderKey,
  1565 + order = partnerOrderId,
  1566 + rechargeId = rechargeId,
  1567 + })
  1568 + order:create()
  1569 + -- 正在进行中的订单 缓存
  1570 + redisproxy:hset(string.format(R_ORDERS, roleId), rechargeId, orderId)
  1571 + return partnerOrderId
  1572 + end
  1573 +
  1574 + -- 更新订单信息
  1575 + --[[
  1576 +
  1577 + status
  1578 +
  1579 + success
  1580 + fail
  1581 + finsh
  1582 + unknow
  1583 +
  1584 + --]]
  1585 + function Role:updatePurchaseOrder(partnerOrderStr, platformOrder, status)
  1586 + if not partnerOrderStr then return false end
  1587 + local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")
  1588 +
  1589 + local roleId = self:getProperty("id")
  1590 + local orderObject = require("models.Order").new({ key = string.format(R_ORDER, roleId, orderId) })
  1591 + if not orderObject:load() then
  1592 + return false
  1593 + end
  1594 +
  1595 + local rechargeId = orderObject:getProperty("rechargeId")
  1596 + local dataSet = csvdb["shop_rechargeCsv"][rechargeId]
  1597 +
  1598 + if orderObject:getProperty("finishTime") > 0 then
  1599 + return false, "finsh"
  1600 + end
  1601 +
  1602 + if platformOrder then
  1603 + orderObject:setProperty("transactionId", platformOrder)
  1604 + end
  1605 + orderObject:setProperty("status", status)
  1606 +
  1607 + -- 开始下单
  1608 + if status == "success" then
  1609 + elseif status == "fail" then
  1610 + redisproxy:hdel(string.format(R_ORDERS, roleId), rechargeId)
  1611 + elseif status == "finsh" then
  1612 + orderObject:setProperty("finishTime", skynet.time())
  1613 + redisproxy:hdel(string.format(R_ORDERS, roleId), rechargeId)
  1614 + end
  1615 +
  1616 + if status ~= "unknow" then
  1617 + self:log("setOrder", {
  1618 + order_status = ({success = 100, finsh = 200, fail = 300})[status] or 1000, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他"
  1619 + item_id = rechargeId, -- 道具id
  1620 + item_type = dataSet.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表
  1621 + item_name = dataSet.title, -- 购买的道具名
  1622 + item_number = 1, -- 购买的道具数量
  1623 + item_level = 1, -- 购买的道具等级
  1624 + order_cost = dataSet.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee'
  1625 + order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范
  1626 + order_type = self:getProperty("rmbC") > 0 and 0 or 1, -- 订单类型,首充记录为1,否则为0
  1627 + order_id = platformOrder, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no'
  1628 + })
  1629 + end
  1630 +
  1631 + return true, rechargeId
  1632 + end
1537 1633  
1538 1634 -- 充值 --
1539 1635 --[[
... ... @@ -1548,63 +1644,37 @@ function RolePlugin.bind(Role)
1548 1644 local roleId = self:getProperty("id")
1549 1645 local partnerOrderStr = params.order
1550 1646  
1551   - local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)")
1552   - local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) })
1553   - if not orderObject:load() then
1554   - -- 订单不存在
1555   - skynet.error("ayncPurchaseRpc", string.format("order %s not exist", partnerOrderStr))
1556   - return
1557   - end
1558 1647  
1559   - if orderObject:getProperty("finishTime") > 0 then
1560   - -- 订单已经处理
1561   - SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ result = "handled" }))
  1648 + local status, back = self:updatePurchaseOrder(partnerOrderStr, params.transactionId, "finsh")
  1649 + if not status then
  1650 + if back == "finsh" then
  1651 + -- 订单已经处理
  1652 + SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ result = "handled" }))
  1653 + end
1562 1654 return
1563 1655 end
1564   - local rechargeId = orderObject:getProperty("rechargeId")
  1656 + local rechargeId = back
1565 1657 local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]
1566 1658 if rechargeData.rmb ~= tonumber(params.amount) then
1567   - skynet.error(string.format("fake order: %s, roleId: %d, order: %s, rmb %s, get %s",
  1659 + skynet.error(string.format("[recharge] fake order: %s, roleId: %d, order: %s, rmb %s, get %s",
1568 1660 params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount
1569 1661 ))
1570 1662 return
1571 1663 end
1572 1664  
1573   - local order_type = self:getProperty("rmbC") > 0 and 0 or 1
1574 1665 local status, reward = self:recharge({
1575 1666 id = rechargeId,
1576 1667 transactionId = params.transactionId,
1577 1668 pay_time = params.pay_time,
1578 1669 order = partnerOrderStr,
1579 1670 })
1580   - orderObject:setProperty("finishTime", skynet.time())
1581   - orderObject:setProperty("status", "finish")
1582   -
1583   - redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr)
1584 1671  
1585 1672 if not status then
1586   - status = 200
1587   - else
1588   - status = 1000 + status
1589   - end
1590   - self:log("setOrder", {
1591   - order_status = status, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他"
1592   - item_id = rechargeId, -- 道具id
1593   - item_type = rechargeData.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表
1594   - item_name = rechargeData.title, -- 购买的道具名
1595   - item_number = 1, -- 购买的道具数量
1596   - item_level = 1, -- 购买的道具等级
1597   - order_cost = rechargeData.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee'
1598   - order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范
1599   - order_type = order_type, -- 订单类型,首充记录为1,否则为0
1600   - order_id = params.transactionId, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no'
1601   - })
1602   - if status ~= 200 then return end
1603   -
1604   - SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr,
1605   - result = "success", reward = reward}))
  1673 + SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr,
  1674 + result = "success", reward = reward}))
  1675 + end
1606 1676  
1607   - return orderObject:getProperty("rechargeId")
  1677 + return rechargeId
1608 1678 end
1609 1679  
1610 1680  
... ... @@ -1612,7 +1682,7 @@ function RolePlugin.bind(Role)
1612 1682 local id = tonumber(params.id)
1613 1683 local rechargeData = csvdb["shop_rechargeCsv"][id]
1614 1684 if not rechargeData then
1615   - skynet.error("recharge id not exist", id)
  1685 + skynet.error("[recharge] recharge id not exist", id)
1616 1686 return 1
1617 1687 end
1618 1688  
... ... @@ -1637,7 +1707,7 @@ function RolePlugin.bind(Role)
1637 1707 elseif rechargeData.shop == 3 then -- 礼包商店
1638 1708 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}})
1639 1709 else
1640   - skynet.error("invalid recharge shop type " .. id)
  1710 + skynet.error("[recharge] invalid recharge shop type " .. id)
1641 1711 return 3
1642 1712 end
1643 1713  
... ...
src/models/RoleTask.lua
... ... @@ -33,7 +33,7 @@ local TaskType = {
33 33 HangQuick = 303, -- 快速挂机
34 34 HangBattle = 304, -- 挂机战斗 - id
35 35 HangGetGold = 305, -- 挂机获得齿轮 - count
36   - BonusPass = 306, -- 奖励副本通关 - id
  36 + BonusPass = 306, -- 奖励副本通关 - id count
37 37  
38 38 -- 冒险相关
39 39 AdvPass = 401, -- 冒险通过关 - id level score
... ... @@ -142,7 +142,7 @@ local CommonListener = {
142 142 [TaskType.GiveFriendP] = {{20, f("count")}},
143 143 [TaskType.UnionBoss] = {{21}},
144 144 [TaskType.GetFriendP] = {{22, f("count")}},
145   - [TaskType.BonusPass] = {{23}},
  145 + [TaskType.BonusPass] = {{23, f("count")}},
146 146 [TaskType.AdvStartSelf] = {{24}},
147 147 [TaskType.ShopAll] = {{25, f("count")}},
148 148 [TaskType.RuneUp] = {{26}},
... ... @@ -244,7 +244,7 @@ local CalendaTaskListener = {
244 244 func = "checkCalendaTask",
245 245 listen = {
246 246 [TaskType.DrawHero] = {{1, 1, f("count")}},
247   - [TaskType.BonusPass]= {{2, 1}},
  247 + [TaskType.BonusPass]= {{2, 1, f("count")}},
248 248 [TaskType.AdvStart]= {{3, 1}},
249 249 [TaskType.DinerLevelUp]= {{4, 2, f("level")}},
250 250 [TaskType.HeroLvlCollect]= {{5, 3}}, -- x名y级英雄
... ...
src/models/Store.lua
... ... @@ -226,7 +226,7 @@ end
226 226 function Store:checkRechargeRecord(limit, id)
227 227 local rechargeRecord = self:getProperty("payR") or {}
228 228 if limit ~= 0 and limit <= (rechargeRecord[id] or 0) then
229   - skynet.error(string.format("recharge id:%d count over limit, user id:%d", id, self.owner:getProperty("id")))
  229 + skynet.error(string.format("[recharge] recharge id:%d count over limit, user id:%d", id, self.owner:getProperty("id")))
230 230 return false
231 231 end
232 232 rechargeRecord[id] = (rechargeRecord[id] or 0) + 1
... ...