Commit 40745a5b3dae152c348cc9c3802d62ff9013063b

Authored by jiyue
2 parents becc5827 d4876585

Merge branch 'cn/develop' into cn/player

src/ProtocolCode.lua
... ... @@ -8,6 +8,7 @@ actionCodes = {
8 8 Sys_maintainNotice = 6,
9 9 Sys_customNotice = 7,
10 10 Sys_checkQueue = 8,
  11 + Sys_gameNotice = 9,
11 12  
12 13 Gm_clientRequest = 20,
13 14 Gm_receiveResponse = 21,
... ... @@ -222,6 +223,7 @@ actionCodes = {
222 223 Store_getBattlePassRewardRpc = 562, --赛季卡奖励
223 224 Store_getExploreCommandRewardRpc = 563, --探索指令
224 225 Store_getTotalRechargeAwardRpc = 564, -- 累计充值
  226 + Store_monthCardRewardRpc = 565, --每日月卡+特刊奖励
225 227  
226 228 Store_biliCloudRechargeRpc = 596,
227 229 Store_biliAndroidRechargeRpc = 597,
... ... @@ -259,6 +261,7 @@ actionCodes = {
259 261 Activity_buyBattleCommandLvlRpc = 672,
260 262 Activity_returnerTaskRpc = 673,
261 263 Activity_actNewUserTaskRpc = 674,
  264 + Activity_buyBattleTicketRpc = 675,
262 265  
263 266 Radio_startQuestRpc = 700,
264 267 Radio_finishQuestRpc = 701,
... ...
src/actions/ActivityAction.lua
... ... @@ -119,7 +119,7 @@ end
119 119 function _M.signRpc(agent, data)
120 120 local role = agent.role
121 121  
122   - local serverT = skynet.timex()
  122 + local serverT = skynet.timex() - RESET_TIME * 3600
123 123 local tm = os.date("*t", serverT)
124 124  
125 125 local curDay = tm.day
... ... @@ -588,24 +588,23 @@ function _M.startBattleRpc(agent, data)
588 588 role.activity:getBattleTicket(actid)
589 589 num = battleCfg.type:toArray(true, "=")[3]
590 590 if count and count > 0 then
591   - if battleCfg.rank == 0 then
592   - return 7
  591 + if battleCfg.rank ~= 0 then
  592 + local bi = actData[id]
  593 + if not bi then return 8 end
  594 + local star = bi["star"] or 0
  595 + local maxP = bi["maxP"] or 0
  596 + -- 世界boss
  597 + if battleCfg.worldBoss_award ~= 0 then
  598 + if maxP < 1 then
  599 + return 9
  600 + end
  601 + else
  602 + if star < 1 then
  603 + return 9
  604 + end
  605 + end
593 606 end
594   - local bi = actData[id]
595   - if not bi then return 8 end
596   - local star = bi["star"] or 0
597   - local maxP = bi["maxP"] or 0
598   - -- 世界boss
599   - if battleCfg.worldBoss_award ~= 0 then
600   - if maxP < 1 then
601   - return 9
602   - end
603   - else
604   - if star < 1 then
605   - return 9
606   - end
607   - end
608   - num = num * count
  607 + num = num * count
609 608 end
610 609 if ticket < num then
611 610 return 6
... ... @@ -627,40 +626,44 @@ function _M.startBattleRpc(agent, data)
627 626 if count <= 0 then
628 627 return
629 628 end
630   - if battleCfg.rank == 0 then
631   - return 7
632   - end
  629 +
633 630 local bi = actData[id]
634 631 local star = bi["star"] or 0
635 632 local award = battleCfg.item_clear:toNumMap()
636   - if getStarCount(battleCfg, star) == 3 then
637   - local aw = battleCfg.perfect_reward:toNumMap()
638   - for k, v in pairs(aw) do
639   - award[k] = (award[k] or 0) + v
640   - end
641   - end
  633 +
  634 + if battleCfg.rank ~= 0 then
  635 + if getStarCount(battleCfg, star) == 3 then
  636 + local aw = battleCfg.perfect_reward:toNumMap()
  637 + for k, v in pairs(aw) do
  638 + award[k] = (award[k] or 0) + v
  639 + end
  640 + end
  641 + end
642 642 for k, v in pairs(award) do
643 643 award[k] = v * count
644 644 end
645 645 local reward, change = role:award(award, {log = {desc = "actBattle", int1 = actid, int2 = count or 0}})
646 646 SendPacket(actionCodes.Activity_startBattleRpc, MsgPack.pack(role:packReward(reward, change)))
  647 + changeFlag = true
  648 + actData["ticket"] = ticket - num
647 649  
648   - if battleCfg.worldBoss_award ~= 0 and (bi["maxP"] or 0) > 0 then
649   - bi["bossP"] = (bi["bossP"] or 0) + bi["maxP"] * count
  650 + if battleCfg.rank ~= 0 then
  651 + if battleCfg.worldBoss_award ~= 0 and (bi["maxP"] or 0) > 0 then
  652 + bi["bossP"] = (bi["bossP"] or 0) + bi["maxP"] * count
  653 + end
  654 +
  655 + bi["sum"] = bi["sum"] + bi["top"] * count
  656 + actData[id] = bi
  657 +
  658 + local rankVal = 0
  659 + if battleCfg.rank == 1 then
  660 + rankVal = bi["sum"]
  661 + elseif battleCfg.rank == 2 then
  662 + rankVal = bi["top"]
  663 + end
  664 + role:updateRankCommon(RANK_TYPE.ActBattleBoss, rankVal)
650 665 end
651 666  
652   - bi["sum"] = bi["sum"] + bi["top"] * count
653   - actData["ticket"] = ticket - num
654   - actData[id] = bi
655   - changeFlag = true
656   -
657   - local rankVal = 0
658   - if battleCfg.rank == 1 then
659   - rankVal = bi["sum"]
660   - elseif battleCfg.rank == 2 then
661   - rankVal = bi["top"]
662   - end
663   - role:updateRankCommon(RANK_TYPE.ActBattleBoss, rankVal)
664 667 end
665 668 if changeFlag then
666 669 role.activity:updateActData("ChallengeLevel", actData)
... ... @@ -1434,7 +1437,7 @@ function _M.returnerTaskRpc(agent, data)
1434 1437 local TaskCsv = csvdb["activity_taskCsv"][76] or {}
1435 1438 local taskData = TaskCsv[taskId]
1436 1439 if not taskData then return 2 end
1437   - if curAllDay < taskData.day then return 2 end
  1440 + if curAllDay < taskData.day then return 5 end
1438 1441  
1439 1442 local status = returner.status or {}
1440 1443 if status[taskId] then return 3 end
... ... @@ -1466,4 +1469,30 @@ function _M.returnerTaskRpc(agent, data)
1466 1469 return true
1467 1470 end
1468 1471  
  1472 +function _M.buyBattleTicketRpc(agent, data)
  1473 + local role = agent.role
  1474 + local msg = MsgPack.unpack(data)
  1475 + local actid = msg.actid
  1476 + local count = msg.count
  1477 + if not role.activity:isOpenById(actid, "ChallengeLevel") then return 1 end
  1478 + role.activity:getBattleTicket(actid)
  1479 + local actData = role.activity:getActData("ChallengeLevel") or {}
  1480 + local battleInfo = actData[id] or {}
  1481 + --["activity_scrofa_tickets"] = { 10, 20, 30, 40, 50, 100, 150, 200, 200, 200 }
  1482 + local limit = #(globalCsv.activity_scrofa_tickets)
  1483 + local curCount = actData["buyC"] or 0
  1484 + if count <= 0 or curCount + count > limit then
  1485 + return 2
  1486 + end
  1487 + local cost = globalCsv.activity_scrofa_tickets[curCount + 1]
  1488 + if not role:checkItemEnough({[ItemId.Jade] = cost}) then return 3 end
  1489 + role:costItems({[ItemId.Jade] = cost}, {log = {desc = "buyActivityBattleTicket", int1 = actid, int2 = count, cint1 = curCount}})
  1490 + actData["ticket"] = (actData["ticket"] or 0) + 1
  1491 + actData["buyC"] = curCount + count
  1492 +
  1493 + role.activity:updateActData("ChallengeLevel", actData)
  1494 + SendPacket(actionCodes.Activity_buyBattleTicketRpc, "")
  1495 + return true
  1496 +end
  1497 +
1469 1498 return _M
... ...
src/actions/AdvAction.lua
... ... @@ -301,18 +301,16 @@ function _M.startHangRpc(agent, data)
301 301  
302 302 local player = {}
303 303 local attrs = role:getTeamBattleInfo(format).heros
304   - for attrName, _ in pairs(AdvAttsEnum) do
305   - for _, hero in pairs(attrs) do
306   - player[attrName] = (player[attrName] or 0) + hero[attrName]
  304 + for _, hero in pairs(attrs) do
  305 + --根据系数计算拾荒属性
  306 + role:checkPlayerAttr(hero)
  307 +
  308 + for attrName, _ in pairs(AdvAttsEnum) do
  309 + player[attrName] = (player[attrName] or 0) + hero[attrName]
307 310 end
308   - player[attrName] = player[attrName] * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
309 311 end
310 312  
311   - local battleV = 1 * player["hp"]
312   - + 2 * player["atk"]
313   - + 1.25 * player["def"]
314   - + 0.226 * player["hit"]
315   - + 0.26 * player["miss"]
  313 + local battleV = role:getSurvivability(player, #attrs)
316 314  
317 315 --print(math.ceil(battleV), campSiteData.idleValue)
318 316 if math.ceil(battleV) < campSiteData.idleValue then return 9 end -- 战斗力是否满足
... ...
src/actions/DinerAction.lua
... ... @@ -112,6 +112,8 @@ function _M.addSellRpc( agent, data )
112 112  
113 113 role:mylog("diner_action", {desc = "addSell", int1 = dish, int2 = count})
114 114  
  115 + role:mylog("diner_action", {desc = "onSell", short1 = 1, int1 = dish, int2 = count, cint1 = msg.slot, cint2 = count, cint3 = dishLevel})
  116 +
115 117 role.dinerData:updateProperty({field = "sells", value = json.encode(sells)})
116 118 SendPacket(actionCodes.Diner_addSellRpc, "")
117 119 return true
... ... @@ -192,7 +194,10 @@ function _M.getSellRewardRpc( agent, data )
192 194 }
193 195 deltaTimes[slot] = temp.deltaTime
194 196 local sellCount = oldCount - temp.lastCount
195   - role:mylog("diner_action", {desc = "sell", int1 = sellDish, int2 = sellCount})
  197 + if sellCount > 0 then
  198 + role:mylog("diner_action", {desc = "sell", int1 = sellDish, int2 = sellCount})
  199 + role:mylog("diner_action", {desc = "onSell", short1 = 2, int1 = sellDish, int2 = sellCount, cint1 = tonumber(slot), cint2 = temp.lastCount, cint3 = sell.level})
  200 + end
196 201 end
197 202 sells = json.decode(role.dinerData:getProperty("sells"))
198 203 for slot, sell in pairs(sells) do
... ... @@ -310,6 +315,9 @@ function _M.expediteSellRpc( agent, data )
310 315 restaurant_sale_coin = rewards[ItemId.DinerCoin] or 0, -- 售卖获得美食币
311 316 restaurant_sale_gear = rewards[ItemId.Gold] or 0, -- 售卖获得齿轮
312 317 })
  318 + if result.expediteCount > 0 then
  319 + role:mylog("diner_action", {desc = "onSell", short1 = 3, int1 = sell.dish, int2 = result.expediteCount, cint1 = tonumber(slot), cint2 = result.lastCount, cint3 = sell.level})
  320 + end
313 321 end
314 322 end
315 323  
... ...
src/actions/EmailAction.lua
... ... @@ -129,7 +129,7 @@ function _M.drawAllAttachRpc(agent, data)
129 129 for key, v in pairs(attachments:toNumMap()) do
130 130 reward[key] = (reward[key] or 0) + v
131 131 end
132   - role:mylog("mail_action", {desc = "draw_attach", int1 = email:getProperty("emailId"), key1 = email:getProperty("title"), key2 = attachments})
  132 + --role:mylog("mail_action", {desc = "draw_attach", int1 = email:getProperty("emailId"), key1 = email:getProperty("title"), key2 = attachments})
133 133 end
134 134 end
135 135 if role:checkRuneFullyByReward(reward) then return 1 end
... ... @@ -168,7 +168,7 @@ function _M.drawAttachRpc(agent, data)
168 168 email:setProperty("status", 2, true)
169 169 email:log(role, 2)
170 170 SendPacket(actionCodes.Email_drawAttachRpc, MsgPack.pack({reward = reward, change = change}))
171   - role:mylog("mail_action", {desc = "draw_attach", int1 = email:getProperty("emailId"), key1 = email:getProperty("title"), key2 = attachments})
  171 + --role:mylog("mail_action", {desc = "draw_attach", int1 = email:getProperty("emailId"), key1 = email:getProperty("title"), key2 = attachments})
172 172 return true
173 173 end
174 174  
... ... @@ -184,7 +184,7 @@ function _M.checkRpc(agent, data)
184 184  
185 185 email:setProperty("status", 1, true)
186 186 email:log(role, 1)
187   - role:mylog("mail_action", {desc = "check_mail", int1 = id})
  187 + --role:mylog("mail_action", {desc = "check_mail", int1 = id})
188 188  
189 189 SendPacket(actionCodes.Email_checkRpc, '')
190 190 return true
... ...
src/actions/GmAction.lua
... ... @@ -38,6 +38,7 @@ function _M.ban(role, pms)
38 38  
39 39 role:setBan(time, ctype)
40 40 role:mylog("gm_action", {desc = "ban", int1 = time, int2 = ctype, key1 = pms.sender})
  41 +
41 42 return "封杀成功"
42 43 end
43 44  
... ... @@ -64,14 +65,16 @@ function _M.reset_rank(role, pms)
64 65 end
65 66  
66 67 function _M.silent(role, pms)
67   - local pm1 = tonum(pms.pm1)
  68 + local pm1 = tonum(pms.pm1, 0)
  69 + dump(pms, pm1)
68 70 if pm1 < 1 then
69 71 role:updateProperty({field = "silent", value = 0})
  72 + role:setProperty("silentType", 0)
70 73 return "解禁言成功"
71 74 end
72 75 role:updateProperty({field = "silent", value = specTime({hour = 0}, skynet.timex()) + pm1 * 86400})
73   -
74   - role:mylog("gm_action", {desc = "silent", int1 = pms.pm1, key1 = pms.sender})
  76 + role:setProperty("silentType", pms.pm2 or 0)
  77 + role:mylog("gm_action", {desc = "silent", int1 = pm1, key1 = pms.sender})
75 78 return "禁言成功"
76 79 end
77 80  
... ...
src/actions/HangAction.lua
... ... @@ -353,10 +353,12 @@ function _M.endBattleRpc(agent, data)
353 353 reward = reward,
354 354 })
355 355  
356   - local team = role:getProperty("pvpTC")
  356 + --local team = role:getProperty("pvpTC")
  357 + local team = role:getTeamFormatByType(TeamSystemType.Hang)
357 358  
358 359 local battleTime = skynet.timex() - role._StartBattleTs
359   - role:mylog("hang_action", {desc = "hangBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = carbonId, int2 = role:getProperty("hangTBV"), cint1 = role:getHerosCamp(team.heros), cint2 = battleTime})
  360 + role:mylog("hang_action", {desc = "hangBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = carbonId, int2 = role:getProperty("hangTBV"),
  361 + cint1 = role:getHerosCamp(team.heros), cint2 = battleTime, key1 = role:getHerosLogStr(team.heros), key2 = role:getRewardLogStr(reward)})
360 362  
361 363 SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({
362 364 starNum = msg.starNum,
... ...
src/actions/HeroAction.lua
... ... @@ -1040,6 +1040,7 @@ function _M.drawHeroRpc(agent, data)
1040 1040 end
1041 1041 end
1042 1042  
  1043 + local itemCount = 1
1043 1044 if role:isHaveHero(itemData.id - ItemStartId.Hero) then
1044 1045 local fragId = itemData.id - ItemStartId.Hero
1045 1046 local heroData = csvdb["unitCsv"][fragId]
... ... @@ -1047,6 +1048,7 @@ function _M.drawHeroRpc(agent, data)
1047 1048 role:award({[fragId] = count}, {log = {desc = "drawHero", int1 = btype, int2 = poolId, short1=isFloorBack and 1 or 0}})
1048 1049 logReward[fragId] = (logReward[fragId] or 0) + count
1049 1050 table.insert(reward, {id = fragId, count = count, from = itemId, fcount = 1})
  1051 + itemCount = count
1050 1052 else
1051 1053 role:award({[itemId] = 1}, {log = {desc = "drawHero", int1 = btype, int2 = poolId, short1=isFloorBack and 1 or 0}})
1052 1054 logReward[itemId] = (logReward[itemId] or 0) + 1
... ... @@ -1064,6 +1066,10 @@ function _M.drawHeroRpc(agent, data)
1064 1066  
1065 1067 dailyDrawCnt = dailyDrawCnt + 1
1066 1068 role:checkTaskEnter("DrawHeroLimitPack", {count = dailyDrawCnt})
  1069 +
  1070 + local ssrUpMap = role:getProperty("ssrUp") or {}
  1071 + local ssrFloorCnt = ssrUpMap[poolId] or 0
  1072 + role:mylog("hero_action", {desc = "drawHero", int1=poolId, int2=btype, short1 = drawCount[drawType], cint1 = ssrFloorCnt, cint2 = itemId, cint3 = itemCount})
1067 1073 end
1068 1074  
1069 1075 role:award(drawAddReward, {log = {desc = "drawHero", int1 = btype}})
... ... @@ -1089,6 +1095,16 @@ function _M.drawHeroRpc(agent, data)
1089 1095 end
1090 1096 role:finishGuide(8)
1091 1097  
  1098 + --每次抽卡获得对应货币,可在招募商城购买道具
  1099 + if buildTypeData["draw_type_item"] ~= 0 then
  1100 + local drawTypeItem = {}
  1101 + for id, count in pairs(buildTypeData["draw_type_item"]:toNumMap()) do
  1102 + drawTypeItem[id] = count * drawCount[drawType]
  1103 + drawAddReward[id] = drawTypeItem[id]
  1104 + end
  1105 + role:award(drawTypeItem, {log = {desc = "drawHero", int1 = btype}})
  1106 + end
  1107 +
1092 1108 role:log("gacha", {
1093 1109 gacha_id = poolId, -- 卡池ID
1094 1110 gacha_type = btype, -- 卡池类型
... ... @@ -1099,7 +1115,7 @@ function _M.drawHeroRpc(agent, data)
1099 1115 gacha_cnt = floorHeroCount,
1100 1116 })
1101 1117  
1102   - role:mylog("hero_action", {desc = "drawHero", int1=poolId, int2=btype, short1 = drawCount[drawType]})
  1118 + --role:mylog("hero_action", {desc = "drawHero", int1=poolId, int2=btype, short1 = drawCount[drawType]})
1103 1119 SendPacket(actionCodes.Hero_drawHeroRpc, MsgPack.pack({reward = reward, subReward = drawAddReward})) -- 这个 reward 是数组
1104 1120  
1105 1121 local feedbackId = buildTypeData["can_feedback"] or 0
... ...
src/actions/HttpAction.lua
... ... @@ -143,6 +143,7 @@ function _M.gm_action(query)
143 143 role:startActionUcode()
144 144 local status = gmFuncs[query.cmd](role, query)
145 145 role:endActionUcode()
  146 + role:update()
146 147  
147 148 return status
148 149 end
... ... @@ -208,7 +209,14 @@ function _M.broadcast(query)
208 209 msg["body"] = query.content
209 210 msg["logout"] = query.logout
210 211 end
211   - }
  212 + },
  213 + ["game"] = {
  214 + code = actionCodes.Sys_gameNotice,
  215 + exec = function()
  216 + msg["new"] = query.status
  217 + msg["channels"] = query.channels
  218 + end
  219 + },
212 220 }
213 221 if not handle[query.cmd] then return "错误" end
214 222 handle[query.cmd].exec()
... ...
src/actions/PvpAction.lua
... ... @@ -472,7 +472,8 @@ function _M.endBattleRpc(agent, data)
472 472 reward = reward,
473 473 rank = myRank,
474 474 })
475   - role:mylog("pvp_action", {desc = "battleEnd", short1 = 1, int1 = isWin and 1 or 0, int2 = revenge and 1 or 0})
  475 + role:mylog("pvp_action", {desc = "battleEnd", short1 = 1, int1 = isWin and 1 or 0, int2 = revenge and 1 or 0, cint1 = oldMyRank, cint2 = myRank,
  476 + cint3 = match.id, long1 = 1, key1 = msg.key, key2 = role:getHerosLogStr(role:getProperty("pvpTC").heros)})
476 477  
477 478 _pvpBattleInfoCacheC = {} --重新发阵容了 没毛病
478 479 _pvpRecordInfoCacheC = {} -- 记录刷新了
... ... @@ -578,7 +579,6 @@ function _M.startBattleHRpc(agent, data)
578 579  
579 580 if not revenge then
580 581 -- 次数扣一波
581   - print("xxxxx")
582 582 local pvpFreeH = role.dailyData:getProperty("pvpFreeH")
583 583 if pvpFreeH >= globalCsv.pvp_battle_free_count_high then
584 584 local cost = {[ItemId.PvpKey] = globalCsv.pvp_battle_high_cost}
... ... @@ -676,11 +676,13 @@ function _M.endBattleHRpc(agent, data)
676 676 video = video,
677 677 })
678 678  
  679 + local curStatus
679 680 -- 检查是否结束战斗
680 681 local winCount, loseCount = 0, 0
681 682 for _, status in pairs(_pvpStartBattleCacheH.result) do
682 683 if status.isWin then
683 684 winCount = winCount + 1
  685 + curStatus = true
684 686 else
685 687 loseCount = loseCount + 1
686 688 end
... ... @@ -696,6 +698,8 @@ function _M.endBattleHRpc(agent, data)
696 698 return true
697 699 end
698 700  
  701 + local curHTeam = _pvpStartBattleCacheH.pvpTH[#_pvpStartBattleCacheH.result] or {}
  702 +
699 703 if winCount >= 2 then
700 704 isWin = true
701 705 elseif loseCount >= 2 then
... ... @@ -720,6 +724,8 @@ function _M.endBattleHRpc(agent, data)
720 724 video = video, -- 返回让客户端上传录像
721 725 headers = headers,
722 726 }))
  727 + role:mylog("pvp_action", {desc = "battleEnd", short1 = 2, int1 = curStatus and 1 or 0, int2 = revenge and 1 or 0, cint1 = 0, cint2 = 0,
  728 + cint3 = match.id, long1 = #_pvpStartBattleCacheH.result, key1 = msg.key, key2 = role:getHerosLogStr(curHTeam.heros)})
723 729 return true
724 730 end
725 731 if revenge and isWin then
... ... @@ -814,6 +820,8 @@ function _M.endBattleHRpc(agent, data)
814 820 rank = myRank,
815 821 })
816 822  
  823 + role:mylog("pvp_action", {desc = "battleEnd", short1 = 2, int1 = curStatus and 1 or 0, int2 = revenge and 1 or 0, cint1 = oldMyRank, cint2 = myRank,
  824 + cint3 = match.id, long1 = #_pvpStartBattleCacheH.result, key1 = msg.key, key2 = role:getHerosLogStr(curHTeam.heros)})
817 825  
818 826 _pvpBattleInfoCacheH = {} --重新发阵容了 没毛病
819 827 _pvpRecordInfoCacheH = {} -- 记录刷新了
... ... @@ -825,7 +833,7 @@ function _M.endBattleHRpc(agent, data)
825 833 if isWin then
826 834 role:checkTaskEnter("PvpWin", {score = myScore})
827 835 end
828   - role:mylog("pvp_action", {desc = "battleEnd", short1 = 2, int1 = isWin and 1 or 0, int2 = revenge and 1 or 0})
  836 +
829 837  
830 838 SendPacket(actionCodes.Pvp_endBattleHRpc, MsgPack.pack({
831 839 reward = reward,
... ...
src/actions/RoleAction.lua
... ... @@ -340,6 +340,36 @@ function _M.loginRpc( agent, data )
340 340 return true
341 341 end
342 342  
  343 +local function onCb1Back(newRole)
  344 + -- cb1活跃返利
  345 + skynet.timeout(0, function()
  346 + local cbbackd = cluster.query("center", "cb1backd")
  347 + local uid = newRole:getProperty("uid")
  348 + local roleId = newRole:getProperty("id")
  349 + local start = uid:find("_")
  350 + if start then
  351 + uid = uid:sub(start + 1)
  352 + end
  353 + if cbbackd then
  354 + local status, back = pcall(cluster.call, "center", cbbackd, "getCb1Reward", {uid = uid, id = roleId})
  355 + if status then
  356 + if back then
  357 + if back == 0 then
  358 + mysqlproxy:insertEmail({roleId = roleId, emailId = MailId.CB1BackAward1, createtime = skynet.timex()})
  359 + elseif back == 1 then
  360 + mysqlproxy:insertEmail({roleId = roleId, emailId = MailId.CB1BackAward2, createtime = skynet.timex()})
  361 + end
  362 + newRole:mylog("cb1back", {key1 = uid, int2 = roleId, int1=back})
  363 + end
  364 + else
  365 + skynet.error("[ERROR] cb1backd cant call center uid: " .. uid .. " roleId:" .. roleId)
  366 + end
  367 + else
  368 + skynet.error("[ERROR] cb1backd cant call center uid: " .. uid .. " roleId:" .. roleId)
  369 + end
  370 + end)
  371 +end
  372 +
343 373 function _M.createRpc(agent, data)
344 374 local msg = MsgPack.unpack(data)
345 375 local response = {}
... ... @@ -446,6 +476,9 @@ function _M.createRpc(agent, data)
446 476 end
447 477 end)
448 478  
  479 + -- cb1活跃回馈
  480 + onCb1Back(newRole)
  481 +
449 482 return true
450 483 end
451 484  
... ... @@ -1183,7 +1216,7 @@ function _M.chatRpc(agent, data)
1183 1216 [1] = function ()
1184 1217 if role:getProperty("silent") > now then --禁言
1185 1218 result = 1
1186   - return
  1219 + --return
1187 1220 end
1188 1221 if role:getProperty("level") < (globalCsv.chat_level or 15) then
1189 1222 result = 3
... ... @@ -1212,7 +1245,12 @@ function _M.chatRpc(agent, data)
1212 1245 return
1213 1246 end
1214 1247 end
1215   - mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response))
  1248 + if result == 1 then
  1249 + SendPacket(actionCodes.Role_chat, MsgPack.pack(response))
  1250 + result = 0
  1251 + else
  1252 + mcast_util.pub_world(actionCodes.Role_chat, MsgPack.pack(response))
  1253 + end
1216 1254 -- pcall(skynet.send, '.globald', "lua", "sendWorldMsg", role._channelIdx, response)
1217 1255 role:mylog("role_action", {desc = "chatWorld", text1 = content})
1218 1256 end,
... ... @@ -1328,7 +1366,7 @@ function _M.drawCodeRpc(agent, data)
1328 1366 gift_name = "", -- 礼包名称
1329 1367 gift_reason = 0, -- 礼包发放原因,见发放原因枚举表
1330 1368 })
1331   - role:mylog("role_action", {desc = "drawCode", int1 = giftId, key1 = code})
  1369 + role:mylog("role_action", {desc = "drawCode", int1 = giftId, key1 = code, key2 = role:getRewardLogStr(result.gift)})
1332 1370 SendPacket(actionCodes.Role_drawCodeRpc, MsgPack.pack({
1333 1371 result = ret,
1334 1372 reward = reward,
... ...
src/actions/StoreAction.lua
... ... @@ -307,9 +307,11 @@ function _M.shopBuyRpc(agent , data)
307 307  
308 308 if not role:checkItemEnough(cost) then return 4 end
309 309  
  310 + local limitStr = ""
310 311 if dataSet.limit ~= 0 then
311 312 buyRecord[id] = (buyRecord[id] or 0) + count
312 313 role.storeData:updateProperty({field = "buyR", value = buyRecord})
  314 + limitStr = string.format("%s/%s", buyRecord[id], dataSet.limit)
313 315 end
314 316 role:costItems(cost, {log = {desc = desc, int1 = id, int2 = count, short1 = dataSet.shop}})
315 317  
... ... @@ -333,7 +335,7 @@ function _M.shopBuyRpc(agent , data)
333 335 shop_purchase_current = costCount or 0, -- 购买道具消耗的货币数量
334 336 shop_id = dataSet.shop, -- 商店ID
335 337 })
336   - role:mylog("role_action", {desc = desc, int1 = id, int2 = count})
  338 + role:mylog("role_action", {desc = "shopBuy", int1 = id, int2 = count, short1=dataSet.shop, key1 = limitStr})
337 339 SendPacket(actionCodes.Store_shopBuyRpc, MsgPack.pack({reward = reward}))
338 340 return true
339 341 end
... ... @@ -546,4 +548,32 @@ function _M.getTotalRechargeAwardRpc(agent, data)
546 548 return true
547 549 end
548 550  
  551 +function _M.monthCardRewardRpc(agent, data)
  552 + local role = agent.role
  553 + local msg = MsgPack.unpack(data)
  554 + local mcid = msg.mcid
  555 + local smcid = msg.smcid
  556 +
  557 + local reward,change = {}, {}
  558 + --月卡奖励
  559 + local tmpreward, tmpchange = role.storeData:getMonthCardDailyReward(mcid)
  560 + if tmpreward then
  561 + for k, v in pairs(tmpreward) do
  562 + reward[k] = (reward[k] or 0) + v
  563 + end
  564 + if tmpchange then table.insert(change, tmpchange) end
  565 + end
  566 +
  567 + --特刊奖励
  568 + tmpreward, tmpchange = role.storeData:getSMonthCardDailyReward(smcid)
  569 + if tmpreward then
  570 + for k, v in pairs(tmpreward) do
  571 + reward[k] = (reward[k] or 0) + v
  572 + end
  573 + if tmpchange then table.insert(change, tmpchange) end
  574 + end
  575 + SendPacket(actionCodes.Store_monthCardRewardRpc, MsgPack.pack(role:packReward(reward, change)))
  576 + return true
  577 +end
  578 +
549 579 return _M
550 580 \ No newline at end of file
... ...
src/actions/TowerAction.lua
... ... @@ -150,7 +150,11 @@ function _M.endBattleRpc(agent, data)
150 150 rank = rank,
151 151 tower = towerType + 1
152 152 })
153   - role:mylog("tower_action", {desc = "endBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = id})
  153 + local team = role:getTowerTeamFormat(towerType + 1)
  154 +
  155 +
  156 + role:mylog("tower_action", {desc = "endBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = id, int2 = towerType,
  157 + cint1 = curLevel, key1 = role:getHerosLogStr(team.heros), key2 = role:getRewardLogStr(reward)})
154 158  
155 159 SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward, change = change}))
156 160 return true
... ...
src/adv/Adv.lua
... ... @@ -924,24 +924,23 @@ function Adv:over(success, rewardRatio, overType)
924 924 end
925 925 self:clearAdvUnlockCache()
926 926  
927   - self:mylog({desc = "over", short1 = success and 1 or 0, int1 = overType, int2 = self.chapterId, long1 = self.level})
  927 + local team = self.owner:getProperty("advTeam")
  928 + self:mylog({desc = "over", short1 = success and 1 or 0, int1 = overType, int2 = self.chapterId, long1 = self.level,
  929 + key1 = self.owner:getRewardLogStr(reward), key2 = self.owner:getHerosLogStr(team.heros)})
928 930  
929 931  
930   - local team = self.owner:getProperty("advTeam")
931 932 local player = {}
932 933 local attrs = self.owner:getTeamBattleInfo(team).heros
933   - for attrName, _ in pairs(AdvAttsEnum) do
934   - for _, hero in pairs(attrs) do
935   - player[attrName] = (player[attrName] or 0) + hero[attrName]
  934 + for _, hero in pairs(attrs) do
  935 + --根据系数计算拾荒属性
  936 + self.owner:checkPlayerAttr(hero)
  937 +
  938 + for attrName, _ in pairs(AdvAttsEnum) do
  939 + player[attrName] = (player[attrName] or 0) + hero[attrName]
936 940 end
937   - player[attrName] = player[attrName] * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
938 941 end
939 942  
940   - local battleV = 1 * player["hp"]
941   - + 2 * player["atk"]
942   - + 1.25 * player["def"]
943   - + 0.226 * player["hit"]
944   - + 0.26 * player["miss"]
  943 + local battleV = self.owner:getSurvivability(player, #attrs)
945 944  
946 945 local heroList = {team.leader, team.leader2}
947 946 for _, hid in pairs(team.heros) do
... ... @@ -1714,7 +1713,7 @@ local function clickTrader(self, room, block, params)
1714 1713 local goodsData = csvdb["event_trader_goodsCsv"][block.event.shop[buyId][1]]
1715 1714 if not goodsData then return false, 5 end
1716 1715  
1717   - local costCount = math.ceil(goodsData.price * (block.event.shop[buyId][2] or 100) / 100)
  1716 + local costCount = math.ceil(goodsData.price * (1 - (block.event.shop[buyId][2] or 100) / 100))
1718 1717 if not self:cost({[goodsData.currency] = costCount}, {log = {desc = "clickTrader", int1 = block.event.id}}) then return false, 6 end --不够
1719 1718 self:backCost({[goodsData.currency] = costCount})
1720 1719 self:award({[goodsData.item] = goodsData.num}, {log = {desc = "clickTrader", int1 = block.event.id}}, {})
... ...
src/adv/AdvBattle.lua
... ... @@ -95,14 +95,13 @@ function Battle:initPlayer()
95 95  
96 96 local attrs = self.adv.owner:getTeamBattleInfo(advTeam).heros
97 97  
  98 + for _, hero in pairs(attrs) do
  99 + --根据系数计算拾荒属性
  100 + self.adv.owner:checkPlayerAttr(hero)
98 101  
99   - for attrName, _ in pairs(AdvAttsEnum) do
100   - for _, hero in pairs(attrs) do
101   - player[attrName] = (player[attrName] or 0) + hero[attrName]
  102 + for attrName, _ in pairs(AdvAttsEnum) do
  103 + player[attrName] = (player[attrName] or 0) + hero[attrName]
102 104 end
103   - player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName]) * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
104   - -- player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1)
105   - -- player[attrName] = player[attrName] + player.growth[attrName] * (player.level - 1)
106 105 end
107 106  
108 107 player.hpMax = player.hp or 0
... ...
1   -Subproject commit 8e6c36f6d7a90dbec06c5a28d8538b80a65ca910
  1 +Subproject commit 4d894270d4aeb6352a29dfd3a8686cbaea5b427c
... ...
src/models/Activity.lua
... ... @@ -797,7 +797,12 @@ activityFunc[Activity.ActivityType.ChallengeLevel] = {
797 797 end,
798 798 ["login"] = function(self, actType, actId)
799 799 self:getBattleTicket(actId)
800   - end
  800 + end,
  801 + ["crossDay"] = function(self, actType, notify)
  802 + local actData = self:getActData(actType)
  803 + actData["buyC"] = 0
  804 + self:updateActData(actType, actData, not notify)
  805 + end,
801 806 }
802 807  
803 808 function Activity:onLoginActivity(actId)
... ...
src/models/Email.lua
... ... @@ -33,6 +33,8 @@ function Email:log(role, action)
33 33 mail_friend_id = 0, -- 收件方账号id
34 34 mail_friend_roleid = 0, -- 收件方角色id
35 35 })
  36 + role:mylog("mail_action", {desc = "onMail", int1 = self:getProperty("id"), int2 = self:getProperty("status"), cint1 = self:getProperty("emailId"),
  37 + short1 = action, key1=self:getProperty("title"), key2=self:getProperty("attachments")})
36 38 end
37 39  
38 40 function Email:data()
... ...
src/models/Role.lua
... ... @@ -8,6 +8,7 @@ local RoleChangeStruct = import(&quot;.RoleChangeStruct&quot;) --角色数据额结构更
8 8 local RolePvp = import(".RolePvp") -- pvp
9 9 local RoleCross = import(".RoleCross") -- 跨服务请求相关
10 10 local RoleBattle = import(".RoleBattle") -- 跨服务请求相关
  11 +local mysqlproxy = require "shared.mysqlproxy"
11 12  
12 13 RoleLog.bind(Role)
13 14 RolePlugin.bind(Role)
... ... @@ -56,6 +57,7 @@ Role.schema = {
56 57 lday = {"number", 0},
57 58 banTime = {"number", 0},
58 59 banType = {"number", 0},
  60 + banReason = {"string", "", "", 512},
59 61 heartWarning = {"number", 0},
60 62 cheatCount = {"number", 0},
61 63 ltime = {"number", 0}, -- 最后登录时间
... ... @@ -79,6 +81,7 @@ Role.schema = {
79 81 -- loveStatus = {"string", ""}, --统计角色的最高 好感度等级 类型相关 -- type=loveL type=loveL
80 82 crown = {"number", 0}, -- 看伴娘
81 83 silent = {"number", 0}, --禁言解禁时间
  84 + silentType = {"number", 0}, -- 禁言类型
82 85 timeGift = {"number", 0}, -- 创建角色时间礼包
83 86  
84 87 bagLimit = {"table", globalCsv.store_limit_max},
... ... @@ -345,6 +348,7 @@ end
345 348 function Role:data()
346 349 return {
347 350 id = self:getProperty("id"),
  351 + uid = self:getProperty("uid"),
348 352 name = self:getProperty("name"),
349 353 intro = self:getProperty("intro"),
350 354 headId = self:getProperty("headId"),
... ... @@ -358,7 +362,8 @@ function Role:data()
358 362 timeReset = self:getProperty("timeReset"),
359 363 diamond = self:getAllDiamond(),
360 364 bagLimit = self:getProperty("bagLimit"),
361   - silent = self:getProperty("silent"),
  365 + --silent = self:getProperty("silent"),
  366 + silent = 0,
362 367 timeGift = self:getProperty("timeGift"),
363 368  
364 369 advPass = self:getProperty("advPass"),
... ...
src/models/RoleBattle.lua
... ... @@ -348,9 +348,41 @@ function Role:checkBattle(battleType, params)
348 348 })
349 349 end
350 350  
  351 + local function initPlayer(player)
  352 + player["hp"] = player["hp"] or 0
  353 + player["atk"] = player["atk"] or 0
  354 + player["def"] = player["def"] or 0
  355 + player["hit"] = player["hit"] or 0
  356 + player["miss"] = player["miss"] or 0
  357 + player["crit"] = player["crit"] or 0
  358 + player["critHurt"] = player["critHurt"] or 0
  359 + player["pierce"] = player["pierce"] or 0
  360 + player["vampire"] = player["vampire"] or 0
  361 + end
  362 +
  363 + function Role:checkPlayerAttr(player)
  364 + if next(player) == nil then return end
  365 + initPlayer(player)
351 366  
  367 + player["hp"] = math.floor(player["hp"] / globalCsv.adv_battle_attr_ratio["hp"])
  368 + player["atk"] = math.floor(player["atk"] / globalCsv.adv_battle_attr_ratio["atk"])
  369 + player["def"] = math.floor(player["def"] / globalCsv.adv_battle_attr_ratio["def"])
  370 + player["hit"] = math.floor((player["hit"] + player["miss"] )/ globalCsv.adv_battle_attr_ratio["hit"])
  371 + player["miss"] = math.floor((player["crit"] + player["critHurt"] + player["pierce"] + player["vampire"])/ globalCsv.adv_battle_attr_ratio["miss"])
  372 + end
352 373  
  374 + function Role:getSurvivability(player, heroCount)
  375 + if next(player) == nil then return 0 end
  376 + heroCount = heroCount or 1
  377 + initPlayer(player)
353 378  
  379 + local battleV = (globalCsv.adv_battle_fight_points["hp"] * player["hp"]
  380 + + globalCsv.adv_battle_fight_points["atk"] * player["atk"]
  381 + + globalCsv.adv_battle_fight_points["def"] * player["def"]
  382 + + globalCsv.adv_battle_fight_points["hit"] * player["hit"] )
  383 + * (1 + (player["miss"]- heroCount * globalCsv.adv_battle_fight_points["miss"])/ 100)
  384 + return battleV
  385 + end
354 386  
355 387 end
356 388  
... ...
src/models/RoleLog.lua
... ... @@ -63,6 +63,9 @@ local ItemReason = {
63 63 giftTime = 147, -- 创角后的时间礼包
64 64 activityCrisis = 148, -- 物资危机奖励
65 65 glodConvertRune = 149, -- 金币兑换铭文
  66 + shopBuy = 150, -- 商店购买
  67 + monthCardReward = 151, --月卡奖励
  68 + smonthCardReward = 152, --特刊奖励
66 69  
67 70 advHang = 301, -- 拾荒挂机
68 71 hangBattle = 302, -- 挂机战斗
... ... @@ -107,6 +110,7 @@ local ItemReason = {
107 110 actMilecrisis = 1010, -- 物资危机
108 111 battleCommandTask = 1011, -- 将军令任务
109 112 newUserTask = 1012, -- 新玩家任务
  113 + buyActivityBattleTicket = 1013, -- 购买门票
110 114  
111 115 -- 餐厅
112 116 greenHourse = 1101, -- 食材获得
... ... @@ -391,7 +395,15 @@ local MethodType = {
391 395 currency_type = true, -- 购买道具消耗的货币类型,记录货币ID
392 396 shop_purchase_current = true, -- 购买道具消耗的货币数量
393 397 shop_id = true, -- 商店ID
394   - },
  398 + },
  399 + month_card = { --月卡+特刊奖励
  400 + item_type = true, --月卡 1, 特刊 2
  401 + item_id = true, --月卡id
  402 + before_ex = true, --未领取奖励前的期
  403 + cur_ex = true, --剩余期数
  404 + reward_time = true, --奖励时间
  405 + month_reward_detail = "json", --奖励物品 {'itemid1':123,'itemid2':456,………...}
  406 + },
395 407 --[[
396 408 100 添加好友
397 409 200 删除好友
... ...
src/models/RolePlugin.lua
1 1 local httpc = require("http.httpc")
2 2 local md5 = require "md5"
3 3 local cjson = require "shared.json"
  4 +local mysqlproxy = require "shared.mysqlproxy"
4 5  
5 6 local serverId = tonumber(skynet.getenv("servId"))
6 7 local RolePlugin = {}
... ... @@ -337,6 +338,8 @@ function RolePlugin.bind(Role)
337 338 end
338 339 log["cint1"] = params.id
339 340 log["cint2"] = math.abs(params.count)
  341 + log["cint3"] = nums
  342 + log["long1"] = origin
340 343 if params.count <= 0 then
341 344 self:mylog("out_item", log)
342 345 else
... ... @@ -377,6 +380,8 @@ function RolePlugin.bind(Role)
377 380 end
378 381 log["cint1"] = params.itemId
379 382 log["cint2"] = math.abs(params.count)
  383 + log["cint3"] = nums
  384 + log["long1"] = origin
380 385 if params.count <= 0 then
381 386 self:mylog("out_item", log)
382 387 else
... ... @@ -494,6 +499,7 @@ function RolePlugin.bind(Role)
494 499 end
495 500 log["cint1"] = origin
496 501 log["cint2"] = count
  502 + log["cint3"] = origin + count
497 503 self:mylog("in_diamond", log)
498 504 else
499 505 print("gainDiamond no log ", debug.traceback())
... ... @@ -547,6 +553,7 @@ function RolePlugin.bind(Role)
547 553 end
548 554 log["cint1"] = origin
549 555 log["cint2"] = count
  556 + log["cint3"] = origin - count
550 557 self:mylog("out_diamond", log)
551 558 else
552 559 print("costDiamond no log ", debug.traceback())
... ... @@ -905,7 +912,8 @@ function RolePlugin.bind(Role)
905 912 end
906 913  
907 914 log["cint1"] = sparkUid
908   - log["cint2"] = params.cfg_id
  915 + log["cint2"] = params.id
  916 + log["cint3"] = 0
909 917  
910 918 self:mylog("in_spark", log)
911 919 else
... ... @@ -935,6 +943,7 @@ function RolePlugin.bind(Role)
935 943  
936 944 log["cint1"] = sparkId
937 945 log["cint2"] = spark:getProperty("cfg_id")
  946 + log["cint3"] = spark:getProperty("level")
938 947  
939 948 self:mylog("out_spark", log)
940 949 else
... ... @@ -1144,6 +1153,38 @@ function RolePlugin.bind(Role)
1144 1153 -- return result
1145 1154 -- end
1146 1155  
  1156 + function Role:getRewardLogStr(gift)
  1157 + if not gift then return '' end
  1158 + local tgift = {}
  1159 + if type(gift) == "string" then
  1160 + for _, one in pairs(gift:toTableArray(true)) do
  1161 + tgift[one[1]] = (tgift[one[1]] or 0) + one[2]
  1162 + end
  1163 + else
  1164 + tgift = gift
  1165 + end
  1166 + local t = {}
  1167 + for k, v in pairs(tgift) do
  1168 + local name = csvdb['itemCsv'][k].name
  1169 + table.insert(t, string.format("%s*%s", name, v))
  1170 + end
  1171 + return table.concat(t, ',')
  1172 + end
  1173 +
  1174 + function Role:getHerosLogStr(heros)
  1175 + local t = {}
  1176 + for _, id in pairs(heros or {}) do
  1177 + local hero = self.heros[id]
  1178 + if hero then
  1179 + local name = csvdb["unitCsv"][hero:getProperty("type")].name
  1180 + local level = hero:getProperty("level")
  1181 + local wakeL = hero:getProperty("wakeL")
  1182 + table.insert(t, string.format("%s(%s %s)", name,level,wakeL))
  1183 + end
  1184 + end
  1185 + return table.concat(t, ',')
  1186 + end
  1187 +
1147 1188 function Role:getHerosCamp(heros)
1148 1189 local had = {}
1149 1190 for _, id in pairs(heros or {}) do
... ... @@ -2174,16 +2215,16 @@ function RolePlugin.bind(Role)
2174 2215 if not self.activity:isOpenById(rechargeData.activity_id, "ActShopGoods") then return "" end
2175 2216 end
2176 2217  
2177   - local orderId = redisproxy:hget(string.format(R_ORDERS, roleId), rechargeId)
2178   - if orderId then
2179   - local uid = orderId * MAX_SVR_ID + serverId
2180   - local orderObject = require("models.Order").new({ key = string.format("%d", uid), id = uid })
2181   - if orderObject:load() and orderObject:getProperty("rechargeId") == rechargeId and math.abs(skynet.timex() - orderObject:getProperty("createTime")) < 5 * 60 then
2182   - return string.format("%d", uid)
2183   - end
2184   - end
  2218 + -- local orderId = redisproxy:hget(string.format(R_ORDERS, roleId), rechargeId)
  2219 + -- if orderId then
  2220 + -- local uid = orderId * MAX_SVR_ID + serverId
  2221 + -- local orderObject = require("models.Order").new({ key = string.format("%d", uid), id = uid })
  2222 + -- if orderObject:load() and orderObject:getProperty("rechargeId") == rechargeId and math.abs(skynet.timex() - orderObject:getProperty("createTime")) < 5 * 60 then
  2223 + -- return string.format("%d", uid)
  2224 + -- end
  2225 + -- end
2185 2226  
2186   - orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
  2227 + local orderId = redisproxy:hincrby("autoincrement_set", "order", 1)
2187 2228 local uid = orderId * MAX_SVR_ID + serverId
2188 2229 local partnerOrderId = string.format("%d", orderId * MAX_SVR_ID + serverId)
2189 2230 local orderKey = string.format(R_ORDER, roleId, orderId)
... ... @@ -2200,7 +2241,7 @@ function RolePlugin.bind(Role)
2200 2241 })
2201 2242 order:create()
2202 2243 -- 正在进行中的订单 缓存
2203   - redisproxy:hset(string.format(R_ORDERS, roleId), rechargeId, orderId)
  2244 + -- redisproxy:hset(string.format(R_ORDERS, roleId), rechargeId, orderId)
2204 2245 return partnerOrderId
2205 2246 end
2206 2247  
... ... @@ -2253,7 +2294,7 @@ function RolePlugin.bind(Role)
2253 2294 -- redisproxy:hdel(string.format(R_ORDERS, roleId), rechargeId)
2254 2295 elseif status == "finsh" then
2255 2296 orderObject:setProperty("finishTime", skynet.time())
2256   - redisproxy:hdel(string.format(R_ORDERS, roleId), rechargeId)
  2297 + -- redisproxy:hdel(string.format(R_ORDERS, roleId), rechargeId)
2257 2298 end
2258 2299  
2259 2300 orderObject:update()
... ... @@ -2301,7 +2342,7 @@ function RolePlugin.bind(Role)
2301 2342 end
2302 2343 local rechargeId = back
2303 2344 local rechargeData = csvdb["shop_rechargeCsv"][rechargeId]
2304   - if (params.is_mycard and rechargeData.twd * 100 ~= tonumber(params.amount)) or (not params.is_mycard and rechargeData.rmb * 100 ~= tonumber(params.amount)) then
  2345 + if (params.is_mycard and rechargeData.twd * 100 ~= tonumber(params.amount)) or (not params.is_mycard and ((rechargeData.rmb * 100) / globalCsv.QArecharge) ~= tonumber(params.amount)) then
2305 2346 skynet.error(string.format("[recharge] fake order: %s, roleId: %d, order: %s, rmb %s, get %s",
2306 2347 params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount
2307 2348 ))
... ... @@ -2328,7 +2369,6 @@ function RolePlugin.bind(Role)
2328 2369 return rechargeId
2329 2370 end
2330 2371  
2331   -
2332 2372 function Role:recharge(params)
2333 2373 local id = tonumber(params.id)
2334 2374 local rechargeData = csvdb["shop_rechargeCsv"][id]
... ... @@ -2353,8 +2393,16 @@ function RolePlugin.bind(Role)
2353 2393 end
2354 2394 self:gainDiamond({count = diamondCount, isRecharge = true, sid = params.sid, log = {desc = "recharge", int1 = id}})
2355 2395 elseif rechargeData.shop == 2 then --通行证商店
  2396 + --订阅奖励
2356 2397 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}})
2357   - self.storeData:onBuyCard(rechargeData.type, rechargeData.time, rechargeData.id, rechargeData.activity_id)
  2398 +
  2399 + --签收奖励
  2400 + local tmpreward, _ = self.storeData:onBuyCard(rechargeData.type, rechargeData.time, rechargeData.id, rechargeData.activity_id)
  2401 + if tmpreward then
  2402 + for k, v in pairs(tmpreward) do
  2403 + reward[k] = (reward[k] or 0) + v
  2404 + end
  2405 + end
2358 2406 elseif rechargeData.shop == 3 then -- 礼包商店
2359 2407 reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}})
2360 2408 else
... ...
src/models/RoleTask.lua
... ... @@ -487,6 +487,7 @@ function RoleTask.bind(Role)
487 487 if status[taskId] ~= -1 and data.type == stype and (data.condition2 == 0 or data.condition2 == cond1) then
488 488 status[taskId] = (status[taskId] or 0) + count
489 489 isChange[key] = 1
  490 + self:mylog("role_action", {desc = "onTask", int1 = taskId, int2 = status[taskId], short1 = key, cint1 = data.condition1})
490 491 end
491 492 end
492 493 end
... ... @@ -612,6 +613,9 @@ function RoleTask.bind(Role)
612 613 end
613 614 end
614 615 if next(change) then
  616 + for _, info in ipairs(change) do
  617 + self:mylog("role_action", {desc = "onTask", int1 = info.field, int2 = info.value, short1 = 3, cint1 = 0})
  618 + end
615 619 self:changeUpdates(change, notNotify)
616 620 end
617 621 end
... ...
src/models/RoleTimeReset.lua
... ... @@ -85,6 +85,7 @@ ResetFunc[&quot;CrossWeek&quot;] = function(self, notify, response)
85 85 response.dinerS = {}
86 86  
87 87 self.activity:refreshWeekData(notify)
  88 + self.storeData:refreshWeekData(notify)
88 89  
89 90 -- 跨周送一些道具
90 91 local BnousReward = self:getBnousPvpTicket()
... ...
src/models/Store.lua
... ... @@ -8,24 +8,13 @@ end
8 8  
9 9 function Store:onLoad()
10 10 local monEx = self:getProperty("monthCardEx")
11   - local smonEx = self:getProperty("smonthCardEx")
12 11 local monId = self:getProperty("monthCardId")
13   - local smonId = self:getProperty("smonthCardId")
14   - local timeNow = skynet.timex()
15 12 local flag = false
16   - if monEx > timeNow and monId == 0 then
  13 + if monEx > 0 and monId == 0 then
17 14 self:updateProperty({field = "monthCardId", value = 101})
18 15 self:updateProperty({field = "getMailT1", value = 0})
19 16 flag = true
20 17 end
21   - if smonEx > timeNow and smonId == 0 then
22   - self:updateProperty({field = "smonthCardId", value = 102})
23   - self:updateProperty({field = "getMailT2", value = 0})
24   - flag = true
25   - end
26   - if flag then
27   - self:sendMonthCardEmail()
28   - end
29 18 end
30 19  
31 20 ActGoodsType = {
... ... @@ -39,10 +28,13 @@ Store.schema = {
39 28 growFund = {"number", 0}, -- 成长基金
40 29 growFundR = {"string", ""}, -- 成长基金领取记录
41 30  
42   - monthCardEx = {"number", 0}, -- 月卡过期时间戳
  31 + monthCardEx = {"number", 0}, -- 期数
43 32 monthCardId = {"number", 0}, -- 月卡id
44   - smonthCardEx = {"number", 0}, -- 超级月卡过期时间戳
45   - smonthCardId = {"number", 0}, -- 超级月卡id
  33 + firstMonthCard = {"number", 1}, -- 首次订阅月卡
  34 + monthCardReceive = {"number", 0}, -- 月卡奖励领取记录 当天 0-未领取, 1-已经领取
  35 +
  36 + smonthCards = {"table", {}}, --特刊信息 {[id]={["buyCount"]=0, ["periods"]=0}} buyCount: 购买次数,periods: 剩余期数,
  37 + smonthCardReceive = {"number", 0}, -- 特刊奖励领取记录 当天 0-未领取, 1-已经领取
46 38  
47 39 battleCard = {"number", 0}, -- 赛季卡
48 40 battleFR = {"string", ""}, -- 免费赛季卡领取记录
... ... @@ -60,6 +52,9 @@ Store.schema = {
60 52 bpInfo = {"table", {}}, -- battle pass 探索指令 1={flag=0 为1表示买了,br=""付费领取记录, fr=""免费领取记录},2,3,4
61 53  
62 54 totalRR = {"string", ""}, -- 累计充值奖励领取记录
  55 +
  56 + dailyShop = {"table", {}},
  57 + weekShop = {"table", {}},
63 58 }
64 59  
65 60 function Store:updateProperty(params)
... ... @@ -82,9 +77,134 @@ function Store:updateProperty(params)
82 77 end
83 78  
84 79 function Store:onCrossDay()
85   - self:sendMonthCardEmail()
  80 + --self:sendMonthCardEmail()
86 81 self:deleteExpireLimitGoods()
87 82 --self:checkPaySignReward()
  83 +
  84 + --刷新商店
  85 + self:flushDailyShop()
  86 +
  87 + --重置月卡、特刊奖励领取记录
  88 + self:updateProperty({field = "monthCardReceive", value = 0})
  89 + self:updateProperty({field = "smonthCardReceive", value = 0})
  90 +end
  91 +
  92 +function Store:refreshWeekData(notify)
  93 + self:flushWeekShop()
  94 +end
  95 +
  96 +local SuperMonthCard = {}
  97 +
  98 +SuperMonthCard["buy"] = function(self, id)
  99 + local smonthCards = self:getProperty("smonthCards") or {}
  100 +
  101 + local buyLimitFunc = function(buylimit)
  102 + for k, v in pairs(buylimit) do
  103 + if k == 1 then
  104 + if v == 101 then
  105 + if self:isMonthCardExpire() then
  106 + skynet.error("月卡过期")
  107 + return false
  108 + end
  109 + else
  110 + if smonthCards[v] == nil then
  111 + skynet.error("没有购买增刊里的条件, %d", v)
  112 + return false
  113 + end
  114 + end
  115 + elseif k == 2 then
  116 + if smonthCards[v] == nil and v ~= 101 then
  117 + skynet.error("没有购买增刊里的条件, %d", v)
  118 + return false
  119 + end
  120 + if SuperMonthCard["isExpired"](self, v) == false and v ~= 101 then
  121 + skynet.error("上期特刊奖励没有领取完")
  122 + return false
  123 + end
  124 + end
  125 + end
  126 + return true
  127 + end
  128 +
  129 + local BuyMonthCard = {}
  130 + BuyMonthCard["renewal"]= function()
  131 + --续刊
  132 + local card = csvdb["shop_cardCsv"][id] or {}
  133 + if card["buyLimit"] and card["buyLimit"] ~= "" then
  134 + if buyLimitFunc(card["buyLimit"]:toNumMap()) == false then
  135 + skynet.error("不满足购买条件")
  136 + return false
  137 + end
  138 + end
  139 +
  140 + local smonthCard = smonthCards[id] or {}
  141 + if next(smonthCard) then
  142 + smonthCard["buyCount"] = (smonthCard["buyCount"] or 0) + 1
  143 + local periods = SuperMonthCard["periods"](self, id) + (card["amount"] or 30)
  144 + smonthCard["periods"] = periods
  145 +
  146 + self:updateProperty({field = "smonthCards", value = smonthCards})
  147 + return true
  148 + end
  149 + end
  150 + BuyMonthCard["order"] = function()
  151 + --增刊条件
  152 + local card = csvdb["shop_cardCsv"][id] or {}
  153 + if card["buyLimit"] and card["buyLimit"] ~= "" then
  154 + if buyLimitFunc(card["buyLimit"]:toNumMap()) == false then
  155 + skynet.error("不满足增刊条件")
  156 + return false
  157 + end
  158 + end
  159 + smonthCards[id] = {["periods"] = (card["amount"] or 30), ["buyCount"] = 1}
  160 +
  161 + self:updateProperty({field= "smonthCards", value = smonthCards})
  162 + return true
  163 + end
  164 +
  165 + if SuperMonthCard["isExpired"](self, id) then
  166 + local smonthCard = smonthCards[id] or {}
  167 + if next(smonthCard) then
  168 + return BuyMonthCard["renewal"]()
  169 + else
  170 + return BuyMonthCard["order"]()
  171 + end
  172 + else
  173 + return BuyMonthCard["renewal"]()
  174 + end
  175 +end
  176 +
  177 +SuperMonthCard["periods"] = function(self, id)
  178 + local smonthCards = self:getProperty("smonthCards") or {}
  179 + local smonthCard = smonthCards[id] or {}
  180 + return smonthCard["periods"] or 0
  181 +end
  182 +
  183 +SuperMonthCard["isExpired"] = function (self, id)
  184 + local periods = SuperMonthCard["periods"](self, id)
  185 + return periods == 0
  186 +end
  187 +
  188 +SuperMonthCard["itemDaily"] = function(self, id)
  189 + local cur_ex = SuperMonthCard["periods"](self, id)
  190 + if cur_ex == 0 then return nil, nil end
  191 + cur_ex = cur_ex - 1
  192 +
  193 + local card = csvdb["shop_cardCsv"][id] or {}
  194 + local reward, change = self.owner:award(card["itemDaily"], {log = {desc = "smonthCardReward", int1 = id, int2 = cur_ex}})
  195 +
  196 + local smonthCards = self:getProperty("smonthCards") or {}
  197 + local smonthCard = smonthCards[id] or {}
  198 + smonthCard["periods"] = cur_ex
  199 + self:updateProperty({field = "smonthCards", value = smonthCards})
  200 +
  201 + return reward, change, cur_ex
  202 +end
  203 +
  204 +SuperMonthCard["itemFirst"] = function(self, id)
  205 + local card = csvdb["shop_cardCsv"][id] or {}
  206 + local reward, _ = self.owner:award(card["itemFirst"], {isRecharge = true, log = {desc = "recharge", int1 = id}})
  207 + return reward
88 208 end
89 209  
90 210 -- 删除过期商品
... ... @@ -139,15 +259,11 @@ function Store:sendMonthCardEmail()
139 259 end
140 260  
141 261 function Store:isMonthCardExpire()
142   - local timeNow = skynet.timex()
143   - local ts = self:getProperty("monthCardEx")
144   - return ts < timeNow
  262 + return self:getProperty("monthCardEx") == 0
145 263 end
146 264  
147   -function Store:isSuperMonthCardExpire()
148   - local timeNow = skynet.timex()
149   - local ts = self:getProperty("smonthCardEx")
150   - return ts < timeNow
  265 +function Store:isSuperMonthCardExpire(id)
  266 + return false
151 267 end
152 268  
153 269 function Store:isPrivCardExpire()
... ... @@ -225,23 +341,97 @@ function Store:getCurMonthCardLvl(isSuper)
225 341 return cfg.level or 0
226 342 end
227 343  
  344 +--获取月卡每日奖励
  345 +function Store:getMonthCardDailyReward(id)
  346 + if self:isMonthCardExpire() or self:getProperty("monthCardReceive") == 1 then return nil, nil end
  347 +
  348 + local before_ex = self:getProperty("monthCardEx")
  349 + self:updateProperty({field = "monthCardEx", delta = -1})
  350 + local cur_ex = self:getProperty("monthCardEx")
  351 +
  352 + local actCfg = csvdb["shop_cardCsv"][id] or {}
  353 + local award = actCfg.itemDaily:toNumMap()
  354 + local reward, change = self.owner:award(award, {log = {desc = "monthCardReward", int1 = id, int2 = cur_ex}})
  355 +
  356 + --今日月卡奖励已经领取
  357 + self:updateProperty({field = "monthCardReceive", value = 1})
  358 +
  359 + self.owner:log("month_card", {
  360 + item_type = CardType.NormalMonthCard,
  361 + item_id = id, --月卡id
  362 + before_ex = before_ex, --未领取奖励前的期
  363 + cur_ex = cur_ex, --剩余期数
  364 + reward_time = skynet.timex(), --奖励时间
  365 + month_reward_detail = reward,
  366 + })
  367 + return reward, change
  368 +end
  369 +
  370 +--获取特刊每日奖励
  371 +function Store:getSMonthCardDailyReward(id)
  372 + local before_ex = SuperMonthCard["periods"](self, id)
  373 + local reward, change, cur_ex= SuperMonthCard["itemDaily"](self, id)
  374 +
  375 + --今日特刊奖励已经领取
  376 + self:updateProperty({field = "smonthCardReceive", value = 1})
  377 +
  378 + self.owner:log("month_card", {
  379 + item_type = CardType.SuperMonthCard,
  380 + item_id = id, --月卡id
  381 + before_ex = before_ex, --未领取奖励前的期
  382 + cur_ex = cur_ex, --剩余期数
  383 + reward_time = skynet.timex(), --奖励时间
  384 + month_reward_detail = reward,
  385 + })
  386 + return reward, change
  387 +end
  388 +
  389 +function Store:firstBuyMonthCard(id)
  390 + if self:getProperty("firstMonthCard") == 1 then
  391 + self:updateProperty({field = "firstMonthCard", value = 0})
  392 + local card = csvdb["shop_cardCsv"][id] or {}
  393 + return self.owner:award(card["itemOnce"], {log = {desc = "monthCardReward", int1 = id, int2 = 30}})
  394 + end
  395 + return nil
  396 +end
  397 +
228 398 -- 购买通行证
229 399 function Store:onBuyCard(type, duration, id, actid)
230 400 local timeNow = skynet.timex()
231 401 if type == CardType.NormalMonthCard then
232 402 if self:isMonthCardExpire() then
233 403 self:updateProperty({field = "monthCardId", value = id})
234   - self:updateProperty({field = "monthCardEx", value = timeNow + duration})
235   - else
236   - self:updateProperty({field = "monthCardEx", value = self:getProperty("monthCardEx") + duration})
237 404 end
238   - self:sendMonthCardEmail()
  405 + self:updateProperty({field = "monthCardEx", value = self:getProperty("monthCardEx") + 30})
  406 +
  407 + --初回特典 仅首次购买月卡时赠送SSR级角色"拉塔托娅"
  408 + local reward = {}
  409 + local tmpreward, _ = self:firstBuyMonthCard(id)
  410 + if tmpreward then
  411 + for k, v in pairs(tmpreward) do
  412 + reward[k] = (reward[k] or 0) + v
  413 + end
  414 + end
  415 +
  416 + tmpreward = SuperMonthCard["itemFirst"](self, id)
  417 + if next(tmpreward) then
  418 + for k, v in pairs(tmpreward) do
  419 + reward[k] = (reward[k] or 0) + v
  420 + end
  421 + end
  422 + return reward
  423 + elseif type == CardType.SuperMonthCard then
  424 + if SuperMonthCard["buy"](self, id) then
  425 + skynet.error("特刊购买成功:"..id)
  426 + return SuperMonthCard["itemFirst"](self, id)
  427 + end
  428 + return nil
239 429 elseif type == CardType.NormalMonthCardLevelUp then
240 430 if self:isMonthCardExpire() then
241 431 skynet.error(string.format("month card expired, can not level up,%d,%d",self.owner:getProperty("id"), id))
242 432 else
243 433 local cfg = csvdb["shop_cardCsv"][id]
244   - if not cfg then return end
  434 + if not cfg then return end
245 435 local dif = cfg.level - self:getCurMonthCardLvl(false)
246 436 if dif > 1 and dif < 0 then
247 437 return
... ... @@ -250,20 +440,13 @@ function Store:onBuyCard(type, duration, id, actid)
250 440 self:updateProperty({field = "monthCardEx", value = self:getProperty("monthCardEx") + duration})
251 441 end
252 442 self:sendMonthCardEmail()
253   - elseif type == CardType.SuperMonthCard then
254   - if self:isSuperMonthCardExpire() then
255   - self:updateProperty({field = "smonthCardId", value = id})
256   - self:updateProperty({field = "smonthCardEx", value = timeNow + duration})
257   - else
258   - self:updateProperty({field = "smonthCardEx", value = self:getProperty("smonthCardEx") + duration})
259   - end
260   - self:sendMonthCardEmail()
  443 +
261 444 elseif type == CardType.SuperMonthCardLevelUp then
262 445 if self:isSuperMonthCardExpire() then
263 446 skynet.error(string.format("super month card expired, can not level up,%d,%d",self.owner:getProperty("id"), id))
264 447 else
265 448 local cfg = csvdb["shop_cardCsv"][id]
266   - if not cfg then return end
  449 + if not cfg then return end
267 450 local dif = cfg.level - self:getCurMonthCardLvl(true)
268 451 if dif > 1 and dif < 0 then
269 452 return
... ... @@ -306,6 +489,7 @@ function Store:onBuyCard(type, duration, id, actid)
306 489 self.owner:mylog("act_action", {desc="buyBc", int1=id, int2=actData["lvl"] or 0})
307 490 self.owner.activity:updateActData("BattleCommand", actData)
308 491 end
  492 + return nil, nil
309 493 end
310 494  
311 495 --检测购买是否超过限制数量
... ... @@ -548,6 +732,88 @@ function Store:OnTriggerLimitTimePackAfterTs(eventType, param)
548 732 end
549 733 end
550 734  
  735 +local function checkShopFinish(shop, shopPool)
  736 + local tmpShop = shopPool[shop.id] or {}
  737 + if next(tmpShop) then
  738 + if tmpShop.expire_ts then
  739 + if skynet.timex() > tmpShop.expire_ts then
  740 + shopPool[shop.id] = nil
  741 + return true
  742 + else
  743 + return false
  744 + end
  745 + else
  746 + tmpShop.expire_ts = skynet.timex() + tmpShop.cool_time * DAY_SEC
  747 + return false
  748 + end
  749 + else
  750 + return true
  751 + end
  752 +end
  753 +
  754 +--随机日/周商店随机两个商品
  755 +-- 1. 让缓存里的商品进入冷却时间
  756 +-- 2. 删除缓存里的已经冷却好的商品
  757 +-- 3. 随机两件商品放入缓存中
  758 +function Store:flushDailyShop()
  759 + local dailyShop = self:getProperty("dailyShop") or {}
  760 + local tmpDailyShop = {}
  761 +
  762 + for id, data in pairs(csvdb["shop_normalCsv"]) do
  763 + if data.shop == 1 and data.shopType == 3 then
  764 + if data.resetTime == 1 and checkShopFinish(data, dailyShop) then
  765 + tmpDailyShop[id] = {["id"] = data.id, ["weight"] = 100, ["cool_time"] = data.cool_time}
  766 + end
  767 + end
  768 + end
  769 +
  770 + --随机两件商品放入缓存 跨天刷新
  771 + if next(tmpDailyShop) then
  772 + local id = math.randWeight(tmpDailyShop)
  773 + if id then
  774 + dailyShop[id] = tmpDailyShop[id]
  775 + tmpDailyShop[id] = nil
  776 + end
  777 +
  778 + id = math.randWeight(tmpDailyShop)
  779 + if id then
  780 + dailyShop[id] = tmpDailyShop[id]
  781 + tmpDailyShop[id] = nil
  782 + end
  783 + end
  784 +
  785 + self:updateProperty({field="dailyShop", value= dailyShop})
  786 +end
  787 +
  788 +function Store:flushWeekShop()
  789 + local weekShop = self:getProperty("weekShop") or {}
  790 + local tmpWeekShop = {}
  791 +
  792 + for id, data in pairs(csvdb["shop_normalCsv"]) do
  793 + if data.shop == 1 and data.shopType == 3 then
  794 + if data.resetTime == 2 and checkShopFinish(data, weekShop)then
  795 + tmpWeekShop[id] = {["id"] = data.id, ["weight"] = 100, ["cool_time"] = data.cool_time}
  796 + end
  797 + end
  798 + end
  799 +
  800 + --随机两件商品放入缓存 跨周刷新
  801 + if next(tmpWeekShop) then
  802 + local id = math.randWeight(tmpWeekShop)
  803 + if id then
  804 + weekShop[id] = weekShop[id]
  805 + tmpWeekShop[id] = nil
  806 + end
  807 +
  808 + id = math.randWeight(tmpWeekShop)
  809 + if id then
  810 + weekShop[id] = weekShop[id]
  811 + tmpWeekShop[id] = nil
  812 + end
  813 + end
  814 + self:updateProperty({field="weekShop", value= weekShop})
  815 +end
  816 +
551 817 function Store:data()
552 818 self:OnTriggerLimitTimePackAfterTs(TriggerEventType.AfterTs, skynet.timex())
553 819 return {
... ... @@ -556,7 +822,6 @@ function Store:data()
556 822 growFund = self:getProperty("growFund"),
557 823 growFundR = self:getProperty("growFundR"),
558 824 monthCardEx = self:getProperty("monthCardEx"),
559   - smonthCardEx = self:getProperty("smonthCardEx"),
560 825 battleCard = self:getProperty("battleCard"),
561 826 battleFR = self:getProperty("battleFR"),
562 827 battleLR = self:getProperty("battleLR"),
... ... @@ -567,7 +832,10 @@ function Store:data()
567 832 bpInfo = self:getProperty("bpInfo"),
568 833 totalRR = self:getProperty("totalRR"),
569 834 monthCardId = self:getProperty("monthCardId"),
570   - smonthCardId = self:getProperty("smonthCardId"),
  835 + smonthCards = self:getProperty("smonthCards"),
  836 + smonthCardReceive = self:getProperty("smonthCardReceive"),
  837 + dailyShop = self:getProperty("dailyShop"),
  838 + weekShop = self:getProperty("weekShop"),
571 839 }
572 840 end
573 841  
... ...
src/shared/ModelBaseMysql.lua
... ... @@ -2,6 +2,8 @@ local ModelBaseMysql = class(&quot;ModelBaseMysql&quot;)
2 2 ModelBaseMysql.key = "key"
3 3 ModelBaseMysql.schema = {}
4 4  
  5 +local mysqlproxy = require "shared.mysqlproxy"
  6 +
5 7 local string_format = string.format
6 8 local table_insert = table.insert
7 9 local table_unpack = table.unpack
... ...