Commit 2d9a616a3c3fff5a8c0cd66697e088c2ed045701
Merge branch 'develop' into qa
Showing
14 changed files
with
367 additions
and
48 deletions
 
Show diff stats
src/GlobalVar.lua
| @@ -76,7 +76,13 @@ FuncOpenType = { | @@ -76,7 +76,13 @@ FuncOpenType = { | ||
| 76 | AdvWS = 6, -- 工坊解锁 | 76 | AdvWS = 6, -- 工坊解锁 | 
| 77 | AdvWheelSurf = 7, -- 抽奖解锁 | 77 | AdvWheelSurf = 7, -- 抽奖解锁 | 
| 78 | TimeBoxSlot = 8, -- 时钟箱槽 | 78 | TimeBoxSlot = 8, -- 时钟箱槽 | 
| 79 | + AdvCount = 9, -- 冒险 次数上限 | ||
| 80 | + AdvCountEL = 10, -- 无尽冒险 次数上限 | ||
| 79 | } | 81 | } | 
| 82 | +TypeIsFunc = {} | ||
| 83 | +for _, v in pairs(FuncOpenType) do | ||
| 84 | + TypeIsFunc[v] = true | ||
| 85 | +end | ||
| 80 | 86 | ||
| 81 | -- 关卡通关相关的 功能开放 对应 guide_unlock | 87 | -- 关卡通关相关的 功能开放 对应 guide_unlock | 
| 82 | FuncUnlock = { | 88 | FuncUnlock = { | 
| @@ -90,10 +96,6 @@ FuncUnlock = { | @@ -90,10 +96,6 @@ FuncUnlock = { | ||
| 90 | Adv = 8, -- 冒险 | 96 | Adv = 8, -- 冒险 | 
| 91 | } | 97 | } | 
| 92 | 98 | ||
| 93 | -TypeIsFunc = {} | ||
| 94 | -for _, v in pairs(FuncOpenType) do | ||
| 95 | - TypeIsFunc[v] = true | ||
| 96 | -end | ||
| 97 | 99 | ||
| 98 | -- 物品起始id | 100 | -- 物品起始id | 
| 99 | ItemStartId = { | 101 | ItemStartId = { | 
| @@ -252,3 +254,8 @@ SettingStatus = { | @@ -252,3 +254,8 @@ SettingStatus = { | ||
| 252 | } | 254 | } | 
| 253 | 255 | ||
| 254 | EMAIL_LIMIT = 20 --邮件最大数量 | 256 | EMAIL_LIMIT = 20 --邮件最大数量 | 
| 257 | + | ||
| 258 | +RedPointTags = { | ||
| 259 | + PvpCR = 1, | ||
| 260 | + PvpHR = 2, | ||
| 261 | +} | 
src/ProtocolCode.lua
| @@ -174,6 +174,12 @@ actionCodes = { | @@ -174,6 +174,12 @@ actionCodes = { | ||
| 174 | Store_rechargeRpc = 550, | 174 | Store_rechargeRpc = 550, | 
| 175 | Store_dailyBuyRpc = 551, | 175 | Store_dailyBuyRpc = 551, | 
| 176 | Store_dinerBuyRpc = 552, | 176 | Store_dinerBuyRpc = 552, | 
| 177 | + Store_googleRechargeRpc = 553, | ||
| 178 | + Store_purchaseOrderResult = 554, | ||
| 179 | + Store_ayncPurchaseRpc = 555, | ||
| 180 | + Store_myCardRechargeRpc = 556, | ||
| 181 | + Store_iosRechargeRpc = 557, | ||
| 182 | + | ||
| 177 | 183 | ||
| 178 | Email_listRpc = 600, | 184 | Email_listRpc = 600, | 
| 179 | Email_drawAllAttachRpc = 601, | 185 | Email_drawAllAttachRpc = 601, | 
src/actions/GmAction.lua
src/actions/HangAction.lua
| @@ -474,7 +474,12 @@ function _M.endBonusBattleRpc(agent, data) | @@ -474,7 +474,12 @@ function _M.endBonusBattleRpc(agent, data) | ||
| 474 | bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + 1 | 474 | bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + 1 | 
| 475 | role.dailyData:updateProperty({field = "bonusC", value = bonusC}) | 475 | role.dailyData:updateProperty({field = "bonusC", value = bonusC}) | 
| 476 | 476 | ||
| 477 | - reward = role:award(bonusData.reward, {log = {desc = "bonusBattle", int1 = id}}) | 477 | + reward = bonusData.reward:toNumMap() | 
| 478 | + local chance = bonusData.chance:randWeight(true) | ||
| 479 | + if chance[1] ~= 0 then | ||
| 480 | + reward[chance[1]] = (reward[chance[1]] or 0) + chance[2] | ||
| 481 | + end | ||
| 482 | + reward = role:award(reward, {log = {desc = "bonusBattle", int1 = id}}) | ||
| 478 | role:checkTaskEnter("BonusPass", {id = id}) | 483 | role:checkTaskEnter("BonusPass", {id = id}) | 
| 479 | end | 484 | end | 
| 480 | 485 | 
src/actions/HeroAction.lua
| @@ -762,7 +762,7 @@ function _M.drawHeroRpc(agent, data) | @@ -762,7 +762,7 @@ function _M.drawHeroRpc(agent, data) | ||
| 762 | 762 | ||
| 763 | -- 开始抽 | 763 | -- 开始抽 | 
| 764 | local resultPool = {} | 764 | local resultPool = {} | 
| 765 | - local function fillDrawPool(fixRare, fixCamp, ssrUp) | 765 | + local function fillDrawPool(fixRare, fixCamp, ssrUp, floorBack) | 
| 766 | local condition = {"rare", "camp"} | 766 | local condition = {"rare", "camp"} | 
| 767 | local values = {fixRare, fixCamp} | 767 | local values = {fixRare, fixCamp} | 
| 768 | 768 | ||
| @@ -781,8 +781,16 @@ function _M.drawHeroRpc(agent, data) | @@ -781,8 +781,16 @@ function _M.drawHeroRpc(agent, data) | ||
| 781 | for _, weight in pairs(lpool) do | 781 | for _, weight in pairs(lpool) do | 
| 782 | all = all + weight[1] | 782 | all = all + weight[1] | 
| 783 | end | 783 | end | 
| 784 | - | ||
| 785 | - lpool[4][1] = lpool[4][1] + (ssrUp or 0) * all | 784 | + --[[ | 
| 785 | + SSR概率值:初始概率 + 步长概率 | ||
| 786 | + SR概率值:初始概率 * [ (初始概率+R初始概率) - 步长概率 ] /(初始概率+R初始概率) | ||
| 787 | + R概率值:初始概率 * [ (初始概率+SR初始概率) - 步长概率 ] /(初始概率+SR初始概率) | ||
| 788 | + ]] | ||
| 789 | + local ssrAdd = (ssrUp or 0) * all | ||
| 790 | + local last = all - lpool[4][1] | ||
| 791 | + lpool[4][1] = lpool[4][1] + ssrAdd | ||
| 792 | + lpool[3][1] = lpool[3][1] * (last - ssrAdd) / last | ||
| 793 | + lpool[2][1] = lpool[2][1] * (last - ssrAdd) / last | ||
| 786 | end | 794 | end | 
| 787 | 795 | ||
| 788 | if next(lpool) then | 796 | if next(lpool) then | 
| @@ -791,7 +799,7 @@ function _M.drawHeroRpc(agent, data) | @@ -791,7 +799,7 @@ function _M.drawHeroRpc(agent, data) | ||
| 791 | end | 799 | end | 
| 792 | end | 800 | end | 
| 793 | 801 | ||
| 794 | - for itemId, oneData in pairs(csvdb["build_poolCsv"]) do | 802 | + for itemId, oneData in pairs(floorBack and csvdb["build_floorCsv"] or csvdb["build_poolCsv"]) do | 
| 795 | if oneData["pool_" .. pool] and oneData["pool_" .. pool] ~= "" then | 803 | if oneData["pool_" .. pool] and oneData["pool_" .. pool] ~= "" then | 
| 796 | local itemData = csvdb["itemCsv"][itemId] | 804 | local itemData = csvdb["itemCsv"][itemId] | 
| 797 | while itemData do | 805 | while itemData do | 
| @@ -839,13 +847,15 @@ function _M.drawHeroRpc(agent, data) | @@ -839,13 +847,15 @@ function _M.drawHeroRpc(agent, data) | ||
| 839 | 847 | ||
| 840 | local ssrUp = 0 | 848 | local ssrUp = 0 | 
| 841 | if draw_ssr_up_count_rate then | 849 | if draw_ssr_up_count_rate then | 
| 842 | - ssrUp = math.floor(ssrUpCount / draw_ssr_up_count_rate[1]) * draw_ssr_up_count_rate[2] / 100 | 850 | + ssrUp = math.min(math.floor(ssrUpCount / draw_ssr_up_count_rate[1]) * draw_ssr_up_count_rate[2], draw_ssr_up_count_rate[3]) / 100 | 
| 843 | end | 851 | end | 
| 844 | while not next(resultPool) do | 852 | while not next(resultPool) do | 
| 845 | if isNewerSSR then | 853 | if isNewerSSR then | 
| 846 | fillDrawPool(4) -- 新手保底的 ssr | 854 | fillDrawPool(4) -- 新手保底的 ssr | 
| 847 | elseif isFloorBack then | 855 | elseif isFloorBack then | 
| 848 | - fillDrawPool(3) -- 保底 sr 【郑斌】明确 | 856 | + -- 保底 sr 【郑斌】明确 | 
| 857 | + -- 保底 sr 改为 池子随机 sr 或者 ssr【郑斌】 | ||
| 858 | + fillDrawPool(nil, nil, nil, true) | ||
| 849 | else | 859 | else | 
| 850 | fillDrawPool(nil, nil, ssrUp) | 860 | fillDrawPool(nil, nil, ssrUp) | 
| 851 | end | 861 | end | 
| @@ -857,17 +867,17 @@ function _M.drawHeroRpc(agent, data) | @@ -857,17 +867,17 @@ function _M.drawHeroRpc(agent, data) | ||
| 857 | if itemData.quality == 4 then | 867 | if itemData.quality == 4 then | 
| 858 | ssrCount = ssrCount + 1 | 868 | ssrCount = ssrCount + 1 | 
| 859 | ssrUpCount = 0 | 869 | ssrUpCount = 0 | 
| 860 | - | ||
| 861 | if btype == 4 then | 870 | if btype == 4 then | 
| 862 | newerHadSSR = newerHadSSR + 1 | 871 | newerHadSSR = newerHadSSR + 1 | 
| 863 | end | 872 | end | 
| 864 | - elseif itemData.quality == 3 then | ||
| 865 | - floorHeroCount = 0 | ||
| 866 | - ssrUpCount = ssrUpCount + 1 | ||
| 867 | else | 873 | else | 
| 868 | ssrUpCount = ssrUpCount + 1 | 874 | ssrUpCount = ssrUpCount + 1 | 
| 869 | end | 875 | end | 
| 870 | 876 | ||
| 877 | + if itemData.quality >= 3 then | ||
| 878 | + floorHeroCount = 0 | ||
| 879 | + end | ||
| 880 | + | ||
| 871 | if role:isHaveHero(itemData.id - ItemStartId.Hero) then | 881 | if role:isHaveHero(itemData.id - ItemStartId.Hero) then | 
| 872 | local fragId = itemData.id - ItemStartId.Hero | 882 | local fragId = itemData.id - ItemStartId.Hero | 
| 873 | local heroData = csvdb["unitCsv"][fragId] | 883 | local heroData = csvdb["unitCsv"][fragId] | 
src/actions/PvpAction.lua
| @@ -381,6 +381,8 @@ function _M.endBattleRpc(agent, data) | @@ -381,6 +381,8 @@ function _M.endBattleRpc(agent, data) | ||
| 381 | sdelta = matchScore - oldMatchScore, | 381 | sdelta = matchScore - oldMatchScore, | 
| 382 | })) | 382 | })) | 
| 383 | red:ltrim(dbKey, 0, 9) | 383 | red:ltrim(dbKey, 0, 9) | 
| 384 | + | ||
| 385 | + rpcRole(match.id, "redPTag", RedPointTags.PvpCR, now) | ||
| 384 | end | 386 | end | 
| 385 | end) | 387 | end) | 
| 386 | 388 | ||
| @@ -670,6 +672,7 @@ function _M.endBattleHRpc(agent, data) | @@ -670,6 +672,7 @@ function _M.endBattleHRpc(agent, data) | ||
| 670 | record = recordBattle, | 672 | record = recordBattle, | 
| 671 | })) | 673 | })) | 
| 672 | red:ltrim(dbKey, 0, 9) | 674 | red:ltrim(dbKey, 0, 9) | 
| 675 | + rpcRole(match.id, "redPTag", RedPointTags.PvpHR, now) | ||
| 673 | end | 676 | end | 
| 674 | end) | 677 | end) | 
| 675 | 678 | ||
| @@ -786,7 +789,7 @@ function _M.recordListRpc(agent, data) | @@ -786,7 +789,7 @@ function _M.recordListRpc(agent, data) | ||
| 786 | info.video = temp.video | 789 | info.video = temp.video | 
| 787 | info.sdelta = temp.sdelta | 790 | info.sdelta = temp.sdelta | 
| 788 | end | 791 | end | 
| 789 | - | 792 | + role:clearRedPTag(RedPointTags.PvpCR) | 
| 790 | elseif ptype == 2 then -- 高级pvp | 793 | elseif ptype == 2 then -- 高级pvp | 
| 791 | local rlist = redisproxy:lrange(string.format(RECORD_PVP_HIGH, roleId), 0 , 9) | 794 | local rlist = redisproxy:lrange(string.format(RECORD_PVP_HIGH, roleId), 0 , 9) | 
| 792 | local tempList = {} | 795 | local tempList = {} | 
| @@ -806,6 +809,8 @@ function _M.recordListRpc(agent, data) | @@ -806,6 +809,8 @@ function _M.recordListRpc(agent, data) | ||
| 806 | info.sdelta = temp.sdelta | 809 | info.sdelta = temp.sdelta | 
| 807 | info.record = temp.record | 810 | info.record = temp.record | 
| 808 | end | 811 | end | 
| 812 | + role:clearRedPTag(RedPointTags.PvpHR) | ||
| 813 | + | ||
| 809 | else | 814 | else | 
| 810 | return | 815 | return | 
| 811 | end | 816 | end | 
src/actions/StoreAction.lua
| 1 | local _M = {} | 1 | local _M = {} | 
| 2 | 2 | ||
| 3 | +local serverId = tonumber(skynet.getenv("servId")) | ||
| 4 | +local md5 = require "md5" | ||
| 5 | + | ||
| 6 | +local function makeOrder(roleId, rechargeId) | ||
| 7 | + local orderId = redisproxy:hincrby("autoincrement_set", "order", 1) | ||
| 8 | + local partnerOrderId = string.format("%d_%d_%d", serverId, roleId, orderId) | ||
| 9 | + local orderKey = string.format("order:%d:%d", roleId, orderId) | ||
| 10 | + redisproxy:del(orderKey) | ||
| 11 | + local order = require("models.Order").new({ | ||
| 12 | + key = orderKey, | ||
| 13 | + order = partnerOrderId, | ||
| 14 | + rechargeId = rechargeId, | ||
| 15 | + }) | ||
| 16 | + order:create() | ||
| 17 | + redisproxy:sadd(string.format("role:%d:orders", roleId), partnerOrderId) | ||
| 18 | + return partnerOrderId | ||
| 19 | +end | ||
| 20 | + | ||
| 21 | +-- 入口在正式服关闭 -- mock 充值 | ||
| 3 | function _M.rechargeRpc(agent , data) | 22 | function _M.rechargeRpc(agent , data) | 
| 4 | local role = agent.role | 23 | local role = agent.role | 
| 5 | local msg = MsgPack.unpack(data) | 24 | local msg = MsgPack.unpack(data) | 
| 6 | local id = msg.id | 25 | local id = msg.id | 
| 7 | local dataSet = csvdb["shop_rechargeCsv"][id] | 26 | local dataSet = csvdb["shop_rechargeCsv"][id] | 
| 8 | if not dataSet then return end | 27 | if not dataSet then return end | 
| 9 | - local diamondCount | ||
| 10 | - if dataSet.type == 0 then -- 钻石 | ||
| 11 | - local rechargeF = role:getProperty("rechargeF") | ||
| 12 | - diamondCount = dataSet.diamond + dataSet.diamondExtra | ||
| 13 | - if not rechargeF[id] then | ||
| 14 | - diamondCount = diamondCount + dataSet.diamondFirst | ||
| 15 | - rechargeF[id] = 1 | ||
| 16 | - role:updateProperty({field = "rechargeF", value = rechargeF}) | ||
| 17 | - end | ||
| 18 | - role:gainDiamond({count = diamondCount, isRecharge = true, log = {desc = "recharge", int1 = id}}) | ||
| 19 | - elseif dataSet.type == 1 then --月卡 | ||
| 20 | - return | ||
| 21 | - elseif dataSet.type == 2 then -- 赛季通行证 | ||
| 22 | - return | ||
| 23 | - else | ||
| 24 | - return | 28 | + local roleId = role:getProperty("id") | 
| 29 | + | ||
| 30 | + --创建订单号 | ||
| 31 | + local partnerOrderId = makeOrder(roleId, id) | ||
| 32 | + SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId })) | ||
| 33 | + | ||
| 34 | + -- 测试的 直接发奖励了 | ||
| 35 | + skynet.timeout(10, function () | ||
| 36 | + role:handlePurchase({ | ||
| 37 | + order = partnerOrderId, | ||
| 38 | + amount = dataSet.rmb, | ||
| 39 | + game_money = dataSet.diamond, | ||
| 40 | + product_id = dataSet.productId, | ||
| 41 | + pay_time = skynet.timex(), | ||
| 42 | + transactionId = "onlyTest", | ||
| 43 | + }) | ||
| 44 | + end) | ||
| 45 | + | ||
| 46 | + return true | ||
| 47 | +end | ||
| 48 | + | ||
| 49 | +local function table_keys( t ) | ||
| 50 | + local keys = {} | ||
| 51 | + for k, _ in pairs( t ) do | ||
| 52 | + keys[#keys + 1] = k | ||
| 53 | + end | ||
| 54 | + return keys | ||
| 55 | +end | ||
| 56 | + | ||
| 57 | +local function signPms(params, secret_key) | ||
| 58 | + local keys = table_keys(params) | ||
| 59 | + table.sort(keys) | ||
| 60 | + local urlCode = "" | ||
| 61 | + for index, key in ipairs(keys) do | ||
| 62 | + urlCode = urlCode .. params[key] | ||
| 25 | end | 63 | end | 
| 64 | + return md5.sumhexa(urlCode .. secret_key):lower() | ||
| 65 | +end | ||
| 26 | 66 | ||
| 27 | - -- 累充 | ||
| 28 | - local rmb = dataSet.rmb | ||
| 29 | - role:updateProperty({field = "rmbC", delta = rmb}) | ||
| 30 | - | ||
| 31 | - role:log("role_action", {desc = "recharge", int1 = id, int2 = rmb}) | ||
| 32 | 67 | ||
| 33 | - SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({diamond = diamondCount})) | 68 | +-- google 充值 入口 | 
| 69 | +function _M.googleRechargeRpc(agent, data) | ||
| 70 | + local role = agent.role | ||
| 71 | + local msg = MsgPack.unpack(data) | ||
| 72 | + local id = msg.id | ||
| 73 | + local dataSet = csvdb["shop_rechargeCsv"][id] | ||
| 74 | + if not dataSet then return end | ||
| 75 | + local roleId = role:getProperty("id") | ||
| 76 | + | ||
| 77 | + role.ignoreHeartbeat = true | ||
| 78 | + --创建订单号 | ||
| 79 | + local partnerOrderId = makeOrder(roleId, id) | ||
| 80 | + -- 签名 | ||
| 81 | + local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075" | ||
| 82 | + local need = { | ||
| 83 | + out_trade_no = partnerOrderId, | ||
| 84 | + money = dataSet.rmb, | ||
| 85 | + game_money = dataSet.diamond, | ||
| 86 | + product_id = dataSet.productId, | ||
| 87 | + } | ||
| 88 | + local sign = signPms(need, secret_key) | ||
| 89 | + | ||
| 90 | + SendPacket(actionCodes.Store_googleRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign})) | ||
| 91 | + return true | ||
| 92 | +end | ||
| 93 | + | ||
| 94 | +-- mycard 充值 入口 | ||
| 95 | +function _M.myCardRechargeRpc(agent, data) | ||
| 96 | + local role = agent.role | ||
| 97 | + local msg = MsgPack.unpack(data) | ||
| 98 | + local id = msg.id | ||
| 99 | + local dataSet = csvdb["shop_rechargeCsv"][id] | ||
| 100 | + if not dataSet then return end | ||
| 101 | + local roleId = role:getProperty("id") | ||
| 102 | + | ||
| 103 | + role.ignoreHeartbeat = true | ||
| 104 | + --创建订单号 | ||
| 105 | + local partnerOrderId = makeOrder(roleId, id) | ||
| 106 | + -- 签名 | ||
| 107 | + local secret_key = "48759e07540f46d9af17ec82669b4272" | ||
| 108 | + local need = { | ||
| 109 | + out_trade_no = partnerOrderId, | ||
| 110 | + money = dataSet.rmb, | ||
| 111 | + game_money = dataSet.diamond, | ||
| 112 | + } | ||
| 113 | + local sign = signPms(need, secret_key) | ||
| 114 | + | ||
| 115 | + SendPacket(actionCodes.Store_myCardRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign})) | ||
| 116 | + return true | ||
| 117 | +end | ||
| 118 | + | ||
| 119 | +-- mycard 充值 入口 | ||
| 120 | +function _M.iosRechargeRpc(agent, data) | ||
| 121 | + local role = agent.role | ||
| 122 | + local msg = MsgPack.unpack(data) | ||
| 123 | + local id = msg.id | ||
| 124 | + local dataSet = csvdb["shop_rechargeCsv"][id] | ||
| 125 | + if not dataSet then return end | ||
| 126 | + local roleId = role:getProperty("id") | ||
| 127 | + | ||
| 128 | + role.ignoreHeartbeat = true | ||
| 129 | + --创建订单号 | ||
| 130 | + local partnerOrderId = makeOrder(roleId, id) | ||
| 131 | + -- 签名 | ||
| 132 | + local secret_key = "9647d2efe1074c73b9ac19af4337a70e" | ||
| 133 | + local need = { | ||
| 134 | + out_trade_no = partnerOrderId, | ||
| 135 | + money = dataSet.rmb, | ||
| 136 | + game_money = dataSet.diamond, | ||
| 137 | + product_id = dataSet.productId, | ||
| 138 | + } | ||
| 139 | + local sign = signPms(need, secret_key) | ||
| 140 | + | ||
| 141 | + SendPacket(actionCodes.Store_iosRechargeRpc, MsgPack.pack({ order = partnerOrderId, sign = sign})) | ||
| 142 | + return true | ||
| 143 | +end | ||
| 144 | + | ||
| 145 | +function _M.purchaseOrderResult(agent, data) | ||
| 146 | + local role = agent.role | ||
| 147 | + | ||
| 148 | + local roleId = role:getProperty("id") | ||
| 149 | + local msg = MsgPack.unpack(data) | ||
| 150 | + | ||
| 151 | + role.ignoreHeartbeat = false | ||
| 152 | + | ||
| 153 | + local partnerOrderStr = msg.order | ||
| 154 | + local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)") | ||
| 155 | + local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) }) | ||
| 156 | + if not orderObject:load() then | ||
| 157 | + -- 订单不存在 | ||
| 158 | + skynet.error("cancelPurchaseRpc", string.format("order %s not exist", partnerOrderStr)) | ||
| 159 | + return true | ||
| 160 | + end | ||
| 161 | + | ||
| 162 | + if msg.status == "success" then | ||
| 163 | + orderObject:setProperty("transactionId", msg.platformOrder or "") | ||
| 164 | + return true | ||
| 165 | + end | ||
| 166 | + | ||
| 167 | + if orderObject:getProperty("finishTime") > 0 then | ||
| 168 | + return true | ||
| 169 | + end | ||
| 170 | + | ||
| 171 | + orderObject:setProperty("status", msg.status) | ||
| 172 | + | ||
| 173 | + redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr) | ||
| 34 | return true | 174 | return true | 
| 35 | end | 175 | end | 
| 36 | 176 | 
src/models/Diner.lua
| @@ -73,11 +73,11 @@ function Diner:refreshDailyData(notify) | @@ -73,11 +73,11 @@ function Diner:refreshDailyData(notify) | ||
| 73 | local guide = self.owner:getProperty("newerGuide") | 73 | local guide = self.owner:getProperty("newerGuide") | 
| 74 | local master, slave = string.match(guide,"(%d+)=(%d+)") | 74 | local master, slave = string.match(guide,"(%d+)=(%d+)") | 
| 75 | if tonumber(master) <= 26 then | 75 | if tonumber(master) <= 26 then | 
| 76 | - entrust[1] = 1031 | ||
| 77 | - entrust[2] = 3 | 76 | + entrust[1] = 1001 | 
| 77 | + entrust[2] = 1 | ||
| 78 | elseif tonumber(master) <= 29 then | 78 | elseif tonumber(master) <= 29 then | 
| 79 | local temp = entrust[1] | 79 | local temp = entrust[1] | 
| 80 | - entrust[1] = 3 | 80 | + entrust[1] = 1 | 
| 81 | entrust[2] = temp | 81 | entrust[2] = temp | 
| 82 | end | 82 | end | 
| 83 | 83 | 
src/models/HeroPlugin.lua
| @@ -208,10 +208,10 @@ function HeroPlugin.bind(Hero) | @@ -208,10 +208,10 @@ function HeroPlugin.bind(Hero) | ||
| 208 | end | 208 | end | 
| 209 | 209 | ||
| 210 | 210 | ||
| 211 | - -- 战斗力(当前属性)= POWER[(生命 + 防御 * 23 + 闪避 * 4)*(攻击*14 + 命中 * 2)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ] | 211 | + -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击*4 + 命中 * 2)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ] | 
| 212 | function Hero:getBattleValue(activeRelation) -- isReal包括队伍加成 | 212 | function Hero:getBattleValue(activeRelation) -- isReal包括队伍加成 | 
| 213 | local attrs = self:getTotalAttrs({activeRelation = activeRelation}) | 213 | local attrs = self:getTotalAttrs({activeRelation = activeRelation}) | 
| 214 | - local battleValue = ((attrs["hp"] + attrs["def"] * 23 + attrs["miss"] * 4) * (attrs["atk"] * 14 + attrs["hit"] * 2) * (1 + attrs["crit"]/100 * attrs["critHurt"]/100) * attrs["atkSpeed"] / 600000) ^ 0.8 | 214 | + local battleValue = ((attrs["hp"] + attrs["def"] * 7 + attrs["miss"] * 4) * (attrs["atk"] * 4 + attrs["hit"] * 2) * (1 + attrs["crit"]/100 * attrs["critHurt"]/100) * attrs["atkSpeed"] / 600000) ^ 0.8 | 
| 215 | return math.floor(battleValue) | 215 | return math.floor(battleValue) | 
| 216 | end | 216 | end | 
| 217 | 217 | 
| @@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
| 1 | +local Order = class("Order", require("shared.ModelBase")) | ||
| 2 | + | ||
| 3 | +function Order:ctor(properties) | ||
| 4 | + Order.super.ctor(self, properties) | ||
| 5 | +end | ||
| 6 | + | ||
| 7 | +Order.schema = { | ||
| 8 | + key = {"string"}, -- redis key | ||
| 9 | + order = {"string"}, -- 自己订单号 | ||
| 10 | + rechargeId = {"number", 0}, | ||
| 11 | + transactionId = {"string", ""}, | ||
| 12 | + createTime = {"number", skynet.timex()}, -- 订单创建时间 | ||
| 13 | + finishTime = {"number", 0}, -- 服务端验证完成时间 | ||
| 14 | + status = {"string", "create"}, | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +Order.fields = { | ||
| 18 | + order = true, | ||
| 19 | + rechargeId = true, | ||
| 20 | + transactionId = true, | ||
| 21 | + createTime = true, | ||
| 22 | + finishTime = true, | ||
| 23 | + status = true, | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +return Order | ||
| 0 | \ No newline at end of file | 27 | \ No newline at end of file | 
src/models/Role.lua
| @@ -150,6 +150,8 @@ Role.schema = { | @@ -150,6 +150,8 @@ Role.schema = { | ||
| 150 | 150 | ||
| 151 | sudoku = {"table", {}}, -- 九宫格 {[-1] = 1, task = {[1] = {}, [2] = {}}}} -- [-1] 阶段 如果为 -1 关闭(都做完了), task 当前阶段任务进度, reward 连串奖励领取情况 | 151 | sudoku = {"table", {}}, -- 九宫格 {[-1] = 1, task = {[1] = {}, [2] = {}}}} -- [-1] 阶段 如果为 -1 关闭(都做完了), task 当前阶段任务进度, reward 连串奖励领取情况 | 
| 152 | sign = {"table", {}}, -- 签到记录 {[1] = 20181029} | 152 | sign = {"table", {}}, -- 签到记录 {[1] = 20181029} | 
| 153 | + | ||
| 154 | + redp = {"table", {}}, -- 待消除红点 -- 通常打开对应界面就消除的红点 红点消除的方法 在对应的协议中使用 {tag = pms } | ||
| 153 | } | 155 | } | 
| 154 | 156 | ||
| 155 | 157 | ||
| @@ -359,6 +361,8 @@ function Role:data() | @@ -359,6 +361,8 @@ function Role:data() | ||
| 359 | 361 | ||
| 360 | sudoku = self:getProperty("sudoku"), | 362 | sudoku = self:getProperty("sudoku"), | 
| 361 | sign = self:getProperty("sign"), | 363 | sign = self:getProperty("sign"), | 
| 364 | + | ||
| 365 | + redp = self:getProperty("redp"), | ||
| 362 | } | 366 | } | 
| 363 | end | 367 | end | 
| 364 | 368 | 
src/models/RoleCross.lua
| @@ -67,6 +67,15 @@ RoleCross.bind = function (Role) | @@ -67,6 +67,15 @@ RoleCross.bind = function (Role) | ||
| 67 | return info | 67 | return info | 
| 68 | end | 68 | end | 
| 69 | 69 | ||
| 70 | + function Role:redPTag(tag, pms) | ||
| 71 | + pms = pms or 1 | ||
| 72 | + local redp = self:getProperty("redp") | ||
| 73 | + if not redp[tag] or redp[tag] ~= pms then | ||
| 74 | + redp[tag] = pms | ||
| 75 | + self:updateProperty({field = "redp", value = redp}) | ||
| 76 | + end | ||
| 77 | + end | ||
| 78 | + | ||
| 70 | function Role:accountInit(initData) | 79 | function Role:accountInit(initData) | 
| 71 | -- 道具 | 80 | -- 道具 | 
| 72 | local reward = {} | 81 | local reward = {} | 
| @@ -318,6 +327,16 @@ function CMD.pvpHRankInfo(roleId) | @@ -318,6 +327,16 @@ function CMD.pvpHRankInfo(roleId) | ||
| 318 | return info | 327 | return info | 
| 319 | end | 328 | end | 
| 320 | 329 | ||
| 330 | +-- 记录红点 | ||
| 331 | +function CMD.redPTag(roleId, tag, pms) | ||
| 332 | + pms = pms or 1 | ||
| 333 | + local redp = CMD.getProperty(roleId, "redp") | ||
| 334 | + if not redp[tag] or redp[tag] ~= pms then | ||
| 335 | + redp[tag] = pms | ||
| 336 | + CMD.setProperty(roleId, "redp", redp) | ||
| 337 | + end | ||
| 338 | +end | ||
| 339 | + | ||
| 321 | RoleCross.handle = function(cmd, roleId, ...) | 340 | RoleCross.handle = function(cmd, roleId, ...) | 
| 322 | SRole = SRole or require("models.Role") | 341 | SRole = SRole or require("models.Role") | 
| 323 | if CMD[cmd] then | 342 | if CMD[cmd] then | 
src/models/RolePlugin.lua
| @@ -830,13 +830,11 @@ function RolePlugin.bind(Role) | @@ -830,13 +830,11 @@ function RolePlugin.bind(Role) | ||
| 830 | end | 830 | end | 
| 831 | 831 | ||
| 832 | function Role:getAdvHangLimit() | 832 | function Role:getAdvHangLimit() | 
| 833 | - -- todo | ||
| 834 | - return globalCsv.adv_daily_cross_count | 833 | + return globalCsv.adv_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCount) | 
| 835 | end | 834 | end | 
| 836 | 835 | ||
| 837 | function Role:getAdvElLimit() | 836 | function Role:getAdvElLimit() | 
| 838 | - -- todo | ||
| 839 | - return globalCsv.adv_endless_daily_cross_count | 837 | + return globalCsv.adv_endless_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCountEL) | 
| 840 | end | 838 | end | 
| 841 | 839 | ||
| 842 | -- 走 guide_unlock 表的 被动解锁 | 840 | -- 走 guide_unlock 表的 被动解锁 | 
| @@ -1392,6 +1390,101 @@ function RolePlugin.bind(Role) | @@ -1392,6 +1390,101 @@ function RolePlugin.bind(Role) | ||
| 1392 | return false | 1390 | return false | 
| 1393 | end | 1391 | end | 
| 1394 | 1392 | ||
| 1393 | + -- 消除指定tag 红点 | ||
| 1394 | + function Role:clearRedPTag(tag) | ||
| 1395 | + local redp = self:getProperty("redp") | ||
| 1396 | + redp[tag] = nil | ||
| 1397 | + self:updateProperty({field = "redp", value = redp}) | ||
| 1398 | + end | ||
| 1399 | + | ||
| 1400 | + | ||
| 1401 | + -- 充值 -- | ||
| 1402 | + --[[ | ||
| 1403 | + request.order = data.out_trade_no | ||
| 1404 | + request.amount = data.money / 100 | ||
| 1405 | + request.game_money = data.game_money | ||
| 1406 | + request.product_id = data.product_id | ||
| 1407 | + request.pay_time = data.pay_time | ||
| 1408 | + request.transactionId = data.order_no | ||
| 1409 | + ]] | ||
| 1410 | + function Role:handlePurchase(params) | ||
| 1411 | + local roleId = self:getProperty("id") | ||
| 1412 | + local partnerOrderStr = params.order | ||
| 1413 | + | ||
| 1414 | + local _, _, orderId = string.match(partnerOrderStr, "(.+)_(.+)_(.+)") | ||
| 1415 | + local orderObject = require("models.Order").new({ key = string.format("order:%d:%d", roleId, orderId) }) | ||
| 1416 | + if not orderObject:load() then | ||
| 1417 | + -- 订单不存在 | ||
| 1418 | + skynet.error("ayncPurchaseRpc", string.format("order %s not exist", partnerOrderStr)) | ||
| 1419 | + return | ||
| 1420 | + end | ||
| 1421 | + | ||
| 1422 | + if orderObject:getProperty("finishTime") > 0 then | ||
| 1423 | + -- 订单已经处理 | ||
| 1424 | + SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ result = "handled" })) | ||
| 1425 | + return | ||
| 1426 | + end | ||
| 1427 | + | ||
| 1428 | + local rechargeData = csvdb["shop_rechargeCsv"][orderObject:getProperty("rechargeId")] | ||
| 1429 | + if rechargeData.rmb ~= tonumber(params.amount) then | ||
| 1430 | + skynet.error(string.format("fake order: %s, roleId: %d, order: %s", | ||
| 1431 | + params.transactionId, roleId, partnerOrderStr | ||
| 1432 | + )) | ||
| 1433 | + return | ||
| 1434 | + end | ||
| 1435 | + | ||
| 1436 | + local diamond = self:recharge({ | ||
| 1437 | + id = orderObject:getProperty("rechargeId"), | ||
| 1438 | + transactionId = params.transactionId, | ||
| 1439 | + pay_time = params.pay_time, | ||
| 1440 | + order = partnerOrderStr | ||
| 1441 | + }) | ||
| 1442 | + orderObject:setProperty("finishTime", skynet.time()) | ||
| 1443 | + orderObject:setProperty("status", "finish") | ||
| 1444 | + | ||
| 1445 | + redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr) | ||
| 1446 | + SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr, | ||
| 1447 | + result = "success", diamond = diamond})) | ||
| 1448 | + | ||
| 1449 | + return orderObject:getProperty("rechargeId") | ||
| 1450 | + end | ||
| 1451 | + | ||
| 1452 | + | ||
| 1453 | + function Role:recharge(params) | ||
| 1454 | + local id = tonumber(params.id) | ||
| 1455 | + local rechargeData = csvdb["shop_rechargeCsv"][id] | ||
| 1456 | + if not rechargeData then | ||
| 1457 | + skynet.error("recharge id not exist", id) | ||
| 1458 | + return | ||
| 1459 | + end | ||
| 1460 | + | ||
| 1461 | + local diamondCount = 0 | ||
| 1462 | + if rechargeData.type == 0 then -- 钻石 | ||
| 1463 | + local rechargeF = self:getProperty("rechargeF") | ||
| 1464 | + diamondCount = rechargeData.diamond + rechargeData.diamondExtra | ||
| 1465 | + if not rechargeF[id] then | ||
| 1466 | + diamondCount = diamondCount + rechargeData.diamondFirst | ||
| 1467 | + rechargeF[id] = 1 | ||
| 1468 | + self:updateProperty({field = "rechargeF", value = rechargeF}) | ||
| 1469 | + end | ||
| 1470 | + self:gainDiamond({count = diamondCount, isRecharge = true, log = {desc = "recharge", int1 = id}}) | ||
| 1471 | + elseif rechargeData.type == 1 then --月卡 | ||
| 1472 | + return | ||
| 1473 | + elseif rechargeData.type == 2 then -- 赛季通行证 | ||
| 1474 | + return | ||
| 1475 | + else | ||
| 1476 | + return | ||
| 1477 | + end | ||
| 1478 | + | ||
| 1479 | + -- 累充 | ||
| 1480 | + local rmb = rechargeData.rmb | ||
| 1481 | + self:updateProperty({field = "rmbC", delta = rmb}) | ||
| 1482 | + | ||
| 1483 | + self:log("role_action", {desc = "recharge", int1 = id, int2 = rmb, key1 = params.transactionId, key2 = params.order, long1 = params.pay_time}) | ||
| 1484 | + | ||
| 1485 | + return diamondCount | ||
| 1486 | + end | ||
| 1487 | + | ||
| 1395 | end | 1488 | end | 
| 1396 | 1489 | ||
| 1397 | return RolePlugin | 1490 | return RolePlugin | 
| 1398 | \ No newline at end of file | 1491 | \ No newline at end of file | 
src/models/RolePvp.lua
| @@ -140,7 +140,7 @@ function Role:changePvpScoreHigh(matchId, isWin) | @@ -140,7 +140,7 @@ function Role:changePvpScoreHigh(matchId, isWin) | ||
| 140 | break | 140 | break | 
| 141 | end | 141 | end | 
| 142 | end | 142 | end | 
| 143 | - if newDivision ~= oldMyDivision then | 143 | + if newDivision ~= oldMyDivision or self:getProperty("pvpHGTime") == 0 then | 
| 144 | --刷新段位奖励 | 144 | --刷新段位奖励 | 
| 145 | local newTime, newReward = self:calculatePvpHGift(oldMyDivision) | 145 | local newTime, newReward = self:calculatePvpHGift(oldMyDivision) | 
| 146 | self:updateProperties({ | 146 | self:updateProperties({ |