Commit 1863d5405d45f1b7744a7d6c4de535ce6d66db72
fix conflict
Showing
15 changed files
with
765 additions
and
355 deletions
Show diff stats
src/actions/AdvAction.lua
@@ -489,6 +489,10 @@ function _M.useItemRpc(agent, data) | @@ -489,6 +489,10 @@ function _M.useItemRpc(agent, data) | ||
489 | adv:backUse({[itemId] = count}) | 489 | adv:backUse({[itemId] = count}) |
490 | end | 490 | end |
491 | 491 | ||
492 | + if itemId == 5020 then | ||
493 | + role:finishGuide(53) | ||
494 | + end | ||
495 | + | ||
492 | adv:checkAchievement(adv.AchievType.UseItem, count, itemId) | 496 | adv:checkAchievement(adv.AchievType.UseItem, count, itemId) |
493 | adv:log({desc = "useItem", int1 = itemId, int2 = count}) | 497 | adv:log({desc = "useItem", int1 = itemId, int2 = count}) |
494 | 498 | ||
@@ -538,6 +542,8 @@ function _M.usePotionRpc(agent, data) | @@ -538,6 +542,8 @@ function _M.usePotionRpc(agent, data) | ||
538 | adv:saveDB() | 542 | adv:saveDB() |
539 | role:checkTaskEnter("AdvUsePotion") | 543 | role:checkTaskEnter("AdvUsePotion") |
540 | 544 | ||
545 | + role:finishGuide(61) | ||
546 | + | ||
541 | SendPacket(actionCodes.Adv_usePotionRpc, MsgPack.pack({events = adv:popBackEvents()})) | 547 | SendPacket(actionCodes.Adv_usePotionRpc, MsgPack.pack({events = adv:popBackEvents()})) |
542 | return true | 548 | return true |
543 | end | 549 | end |
@@ -555,6 +561,8 @@ function _M.chooseArtifactRpc(agent, data) | @@ -555,6 +561,8 @@ function _M.chooseArtifactRpc(agent, data) | ||
555 | local status = adv:chooseArtifact(msg.idx) | 561 | local status = adv:chooseArtifact(msg.idx) |
556 | if not status then return 4 end | 562 | if not status then return 4 end |
557 | adv:saveDB() | 563 | adv:saveDB() |
564 | + | ||
565 | + role:finishGuide(54) | ||
558 | 566 | ||
559 | SendPacket(actionCodes.Adv_chooseArtifactRpc, '') | 567 | SendPacket(actionCodes.Adv_chooseArtifactRpc, '') |
560 | return true | 568 | return true |
@@ -578,6 +586,8 @@ function _M.wearArtifactRpc(agent, data) | @@ -578,6 +586,8 @@ function _M.wearArtifactRpc(agent, data) | ||
578 | if not status then return 3 end | 586 | if not status then return 3 end |
579 | adv:saveDB() | 587 | adv:saveDB() |
580 | 588 | ||
589 | + role:finishGuide(55) | ||
590 | + | ||
581 | SendPacket(actionCodes.Adv_wearArtifactRpc, '') | 591 | SendPacket(actionCodes.Adv_wearArtifactRpc, '') |
582 | return true | 592 | return true |
583 | end | 593 | end |
@@ -607,6 +617,7 @@ function _M.upArtifactRpc(agent, data) | @@ -607,6 +617,7 @@ function _M.upArtifactRpc(agent, data) | ||
607 | else | 617 | else |
608 | adv:updateAchievement() | 618 | adv:updateAchievement() |
609 | end | 619 | end |
620 | + | ||
610 | SendPacket(actionCodes.Adv_upArtifactRpc, '') | 621 | SendPacket(actionCodes.Adv_upArtifactRpc, '') |
611 | return true | 622 | return true |
612 | end | 623 | end |
@@ -616,7 +627,9 @@ function _M.exitAdvRpc(agent, data) | @@ -616,7 +627,9 @@ function _M.exitAdvRpc(agent, data) | ||
616 | local role = agent.role | 627 | local role = agent.role |
617 | -- local msg = MsgPack.unpack(data) | 628 | -- local msg = MsgPack.unpack(data) |
618 | if not isCanContinue(role) then return end | 629 | if not isCanContinue(role) then return end |
619 | - | 630 | + if not role:checkOverGuide(57) then |
631 | + role:saveGuide(57,1,true) | ||
632 | + end | ||
620 | local adv = role:getAdvData() | 633 | local adv = role:getAdvData() |
621 | adv:log({desc = "exit"}) | 634 | adv:log({desc = "exit"}) |
622 | local status = adv:exit() -- target {roomId = 1, blockId = 1} 选择的目标 | 635 | local status = adv:exit() -- target {roomId = 1, blockId = 1} 选择的目标 |
@@ -677,6 +690,19 @@ function _M.endBattleRpc(agent, data) | @@ -677,6 +690,19 @@ function _M.endBattleRpc(agent, data) | ||
677 | if enemy.monsterId ~= monsterId or enemy.roomId ~= roomId or enemy.blockId ~= blockId then return end | 690 | if enemy.monsterId ~= monsterId or enemy.roomId ~= roomId or enemy.blockId ~= blockId then return end |
678 | adv.__battleCache = nil | 691 | adv.__battleCache = nil |
679 | 692 | ||
693 | + -- 打完野猪怪 | ||
694 | + role:finishGuide(52) | ||
695 | + -- 调理剂使用引导(生命药剂) | ||
696 | + if not role:checkOverGuide(61) then | ||
697 | + local potionBag = role:getProperty("potionBag") | ||
698 | + local own = potionBag[10] or 0 | ||
699 | + if own > 0 then | ||
700 | + -- 造假 | ||
701 | + player.hp = player.hp * 0.8 | ||
702 | + role:saveGuide(61,1,true) | ||
703 | + end | ||
704 | + end | ||
705 | + | ||
680 | adv:log({desc = "endBattle"}) | 706 | adv:log({desc = "endBattle"}) |
681 | local status = adv:clickBlock(roomId, blockId, {player = player, bySkill = bySkill}) | 707 | local status = adv:clickBlock(roomId, blockId, {player = player, bySkill = bySkill}) |
682 | 708 | ||
@@ -759,7 +785,7 @@ function _M.wheelSurfRpc(agent, data) | @@ -759,7 +785,7 @@ function _M.wheelSurfRpc(agent, data) | ||
759 | table.insert(backReward, gift) | 785 | table.insert(backReward, gift) |
760 | end | 786 | end |
761 | role:award(reward, {log = {desc = "advWheelSurf", int1 = ptype}}) | 787 | role:award(reward, {log = {desc = "advWheelSurf", int1 = ptype}}) |
762 | - | 788 | + role:finishGuide(58) |
763 | role:checkTaskEnter("AdvDraw", {count = count, ptype = ptype}) | 789 | role:checkTaskEnter("AdvDraw", {count = count, ptype = ptype}) |
764 | role:log("adv_action", {desc = "advWheelSurf", int1 = ptype, int2 = count}) | 790 | role:log("adv_action", {desc = "advWheelSurf", int1 = ptype, int2 = count}) |
765 | 791 | ||
@@ -814,7 +840,7 @@ function _M.finishAchievRpc(agent, data) | @@ -814,7 +840,7 @@ function _M.finishAchievRpc(agent, data) | ||
814 | if not status then return end | 840 | if not status then return end |
815 | adv:updateAchievement() | 841 | adv:updateAchievement() |
816 | role:log("adv_action", {desc = "finishAchiev", short1 = ctype, int1 = chapterId, int2 = taskId}) | 842 | role:log("adv_action", {desc = "finishAchiev", short1 = ctype, int1 = chapterId, int2 = taskId}) |
817 | - | 843 | + role:finishGuide(57) |
818 | SendPacket(actionCodes.Adv_finishAchievRpc, MsgPack.pack(role:packReward(reward, change))) | 844 | SendPacket(actionCodes.Adv_finishAchievRpc, MsgPack.pack(role:packReward(reward, change))) |
819 | return true | 845 | return true |
820 | end | 846 | end |
src/actions/DinerAction.lua
@@ -104,7 +104,7 @@ function _M.addSellRpc( agent, data ) | @@ -104,7 +104,7 @@ function _M.addSellRpc( agent, data ) | ||
104 | if change then | 104 | if change then |
105 | role.dinerData:updateProperty({field = "customer", value = customer}) | 105 | role.dinerData:updateProperty({field = "customer", value = customer}) |
106 | end | 106 | end |
107 | - | 107 | + role:finishGuide(28) |
108 | role:log("diner_action", {desc = "addSell", int1 = dish, int2 = count}) | 108 | role:log("diner_action", {desc = "addSell", int1 = dish, int2 = count}) |
109 | 109 | ||
110 | role.dinerData:updateProperty({field = "sells", value = json.encode(sells)}) | 110 | role.dinerData:updateProperty({field = "sells", value = json.encode(sells)}) |
@@ -407,7 +407,7 @@ function _M.talentUpRpc( agent, data ) | @@ -407,7 +407,7 @@ function _M.talentUpRpc( agent, data ) | ||
407 | -- end | 407 | -- end |
408 | 408 | ||
409 | role:checkTaskEnter("DinerTalentUp", {type = talentData.effect:toArray(true,"=")[1], level = dishLevel + 1}) | 409 | role:checkTaskEnter("DinerTalentUp", {type = talentData.effect:toArray(true,"=")[1], level = dishLevel + 1}) |
410 | - | 410 | + role:finishGuide(27) |
411 | role:log("diner_action", {desc = "talentUp", int1 = dish, int2 = dishLevel + 1}) | 411 | role:log("diner_action", {desc = "talentUp", int1 = dish, int2 = dishLevel + 1}) |
412 | 412 | ||
413 | SendPacket(actionCodes.Diner_talentUpRpc, '') | 413 | SendPacket(actionCodes.Diner_talentUpRpc, '') |
@@ -612,7 +612,7 @@ function _M.refreshTaskRpc( agent, data ) | @@ -612,7 +612,7 @@ function _M.refreshTaskRpc( agent, data ) | ||
612 | end | 612 | end |
613 | 613 | ||
614 | role:log("diner_action", {desc = "reTask"}) | 614 | role:log("diner_action", {desc = "reTask"}) |
615 | - | 615 | + role:finishGuide(41) |
616 | role.dinerData:updateProperty({field = "order", value = json.encode(orders)}) | 616 | role.dinerData:updateProperty({field = "order", value = json.encode(orders)}) |
617 | 617 | ||
618 | SendPacket(actionCodes.Diner_refreshTaskRpc, '') | 618 | SendPacket(actionCodes.Diner_refreshTaskRpc, '') |
@@ -653,7 +653,7 @@ function _M.addWantFoodRpc(agent , data) | @@ -653,7 +653,7 @@ function _M.addWantFoodRpc(agent , data) | ||
653 | end | 653 | end |
654 | 654 | ||
655 | role:log("diner_action", {desc = "wantFood"}) | 655 | role:log("diner_action", {desc = "wantFood"}) |
656 | - | 656 | + role:finishGuide(36) |
657 | role.dinerData:updateProperty({field = "gfood", value = gfood}) | 657 | role.dinerData:updateProperty({field = "gfood", value = gfood}) |
658 | 658 | ||
659 | SendPacket(actionCodes.Diner_addWantFoodRpc, '') | 659 | SendPacket(actionCodes.Diner_addWantFoodRpc, '') |
@@ -832,6 +832,8 @@ function _M.entrustRpc(agent , data) | @@ -832,6 +832,8 @@ function _M.entrustRpc(agent , data) | ||
832 | 832 | ||
833 | role:log("diner_action", {desc = "entrus", short1 = ctype, int1 = entrustId}) | 833 | role:log("diner_action", {desc = "entrus", short1 = ctype, int1 = entrustId}) |
834 | 834 | ||
835 | + role:finishGuide(26) | ||
836 | + | ||
835 | SendPacket(actionCodes.Diner_entrustRpc, MsgPack.pack({reward = reward, change = change})) | 837 | SendPacket(actionCodes.Diner_entrustRpc, MsgPack.pack({reward = reward, change = change})) |
836 | return true | 838 | return true |
837 | end | 839 | end |
src/actions/EmailAction.lua
@@ -53,7 +53,6 @@ function _M.listRpc(agent, data) | @@ -53,7 +53,6 @@ function _M.listRpc(agent, data) | ||
53 | content = email.content, | 53 | content = email.content, |
54 | attachments = email.attachments | 54 | attachments = email.attachments |
55 | }) | 55 | }) |
56 | - role:log("mail_action", {desc = "get_global", key1 = email.title, key2 = email.attachments}) | ||
57 | end | 56 | end |
58 | end | 57 | end |
59 | end | 58 | end |
@@ -90,21 +89,17 @@ function _M.drawAllAttachRpc(agent, data) | @@ -90,21 +89,17 @@ function _M.drawAllAttachRpc(agent, data) | ||
90 | local ids = {} | 89 | local ids = {} |
91 | 90 | ||
92 | local emails = loadEmails(roleId) | 91 | local emails = loadEmails(roleId) |
93 | - redisproxy:pipelining(function (red) | ||
94 | - for _, email in ipairs(emails) do | ||
95 | - local attachments = getEmailAttachments(email) | ||
96 | - if attachments ~= "" then | ||
97 | - local emailId = email:getProperty("id") | ||
98 | - ids[emailId] = 1 | ||
99 | - red:hset(string.format(R_EMAIL_ITEM, roleId, emailId), "status", 2) | ||
100 | - role:log("mail_action", {desc = "draw_attach", int1 = emailId, key1 = email:getProperty("title"), key2 = attachments}) | ||
101 | - | ||
102 | - for key, v in pairs(attachments:toNumMap()) do | ||
103 | - reward[key] = (reward[key] or 0) + v | ||
104 | - end | 92 | + for _, email in ipairs(emails) do |
93 | + local attachments = getEmailAttachments(email) | ||
94 | + if attachments ~= "" then | ||
95 | + email:setProperty("status", 2) | ||
96 | + email:log(role, 2) | ||
97 | + ids[emailId] = 1 | ||
98 | + for key, v in pairs(attachments:toNumMap()) do | ||
99 | + reward[key] = (reward[key] or 0) + v | ||
105 | end | 100 | end |
106 | end | 101 | end |
107 | - end) | 102 | + end |
108 | reward, change = role:award(reward, {log = {desc = "draw_attach"}}) | 103 | reward, change = role:award(reward, {log = {desc = "draw_attach"}}) |
109 | SendPacket(actionCodes.Email_drawAllAttachRpc, MsgPack.pack({ids = ids, reward = reward, change = change})) | 104 | SendPacket(actionCodes.Email_drawAllAttachRpc, MsgPack.pack({ids = ids, reward = reward, change = change})) |
110 | return true | 105 | return true |
@@ -125,10 +120,10 @@ function _M.drawAttachRpc(agent, data) | @@ -125,10 +120,10 @@ function _M.drawAttachRpc(agent, data) | ||
125 | if attachments == "" then return end | 120 | if attachments == "" then return end |
126 | 121 | ||
127 | local reward, change = role:award(attachments, {log = {desc = "draw_attach", int1 = emailId, key1 = email:getProperty("title")}}) | 122 | local reward, change = role:award(attachments, {log = {desc = "draw_attach", int1 = emailId, key1 = email:getProperty("title")}}) |
128 | - redisproxy:hset(rds, "status", 2) -- 领取标记 | 123 | + email:setProperty("status", 2) |
124 | + email:log(role, 2) | ||
129 | SendPacket(actionCodes.Email_drawAttachRpc, MsgPack.pack({reward = reward, change = change})) | 125 | SendPacket(actionCodes.Email_drawAttachRpc, MsgPack.pack({reward = reward, change = change})) |
130 | 126 | ||
131 | - role:log("mail_action", {desc = "draw_attach", int1 = id, key1 = email:getProperty("title"), key2 = attachments}) | ||
132 | return true | 127 | return true |
133 | end | 128 | end |
134 | 129 | ||
@@ -139,11 +134,11 @@ function _M.checkRpc(agent, data) | @@ -139,11 +134,11 @@ function _M.checkRpc(agent, data) | ||
139 | local msg = MsgPack.unpack(data) | 134 | local msg = MsgPack.unpack(data) |
140 | local id = msg.id | 135 | local id = msg.id |
141 | 136 | ||
142 | - local rds = string.format(R_EMAIL_ITEM, roleId, id) | ||
143 | - if not redisproxy:exists(rds) then return end | 137 | + local email = require("models.Email").new({key = rds}) |
138 | + if not email:load() then return end | ||
144 | 139 | ||
145 | - redisproxy:hset(rds, "status", 1) | ||
146 | - role:log("mail_action", {desc = "check_mail", int1 = id}) | 140 | + email:setProperty(rds, "status", 1) |
141 | + email:log(role, 1) | ||
147 | 142 | ||
148 | SendPacket(actionCodes.Email_checkRpc, '') | 143 | SendPacket(actionCodes.Email_checkRpc, '') |
149 | return true | 144 | return true |
@@ -171,6 +166,7 @@ function _M.delRpc(agent, data) | @@ -171,6 +166,7 @@ function _M.delRpc(agent, data) | ||
171 | attachments = emailData.attachment | 166 | attachments = emailData.attachment |
172 | end | 167 | end |
173 | if status == 2 or (status == 1 and attachments:len() == 0) then | 168 | if status == 2 or (status == 1 and attachments:len() == 0) then |
169 | + email:log(role, 3) | ||
174 | red:lrem(rds, 0, id) | 170 | red:lrem(rds, 0, id) |
175 | red:del(emailRds) | 171 | red:del(emailRds) |
176 | result[tonum(id)] = 1 | 172 | result[tonum(id)] = 1 |
@@ -178,9 +174,6 @@ function _M.delRpc(agent, data) | @@ -178,9 +174,6 @@ function _M.delRpc(agent, data) | ||
178 | end | 174 | end |
179 | end | 175 | end |
180 | end) | 176 | end) |
181 | - for delId, _ in ipairs(result) do | ||
182 | - role:log("mail_action", {desc = "del_mail", int1 = delId}) | ||
183 | - end | ||
184 | SendPacket(actionCodes.Email_delRpc, MsgPack.pack({result = result})) | 177 | SendPacket(actionCodes.Email_delRpc, MsgPack.pack({result = result})) |
185 | return true | 178 | return true |
186 | end | 179 | end |
src/actions/HangAction.lua
@@ -250,6 +250,23 @@ function _M.endBattleRpc(agent, data) | @@ -250,6 +250,23 @@ function _M.endBattleRpc(agent, data) | ||
250 | local team = role:getProperty("pvpTC") | 250 | local team = role:getProperty("pvpTC") |
251 | role:log("hang_action", {desc = "hangBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = carbonId, int2 = role:getProperty("hangTBV"), cint1 = role:getHerosCamp(team.heros)}) | 251 | role:log("hang_action", {desc = "hangBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = carbonId, int2 = role:getProperty("hangTBV"), cint1 = role:getHerosCamp(team.heros)}) |
252 | 252 | ||
253 | + -- 引导 | ||
254 | + if carbonId == 10101 then | ||
255 | + role:finishGuide(5) | ||
256 | + elseif carbonId == 10102 then | ||
257 | + role:finishGuide(8) | ||
258 | + elseif carbonId == 10103 then | ||
259 | + role:finishGuide(9) | ||
260 | + elseif carbonId == 10220 then | ||
261 | + role:finishGuide(22) | ||
262 | + end | ||
263 | + for _, guideData in pairs(csvdb["guide_unlockCsv"]) do | ||
264 | + if guideData.type == 3 and guideData.carbonId == carbonId then | ||
265 | + role:saveGuide(guideData.guideId,1,true) | ||
266 | + break | ||
267 | + end | ||
268 | + end | ||
269 | + | ||
253 | SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({ | 270 | SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({ |
254 | starNum = msg.starNum, | 271 | starNum = msg.starNum, |
255 | reward = reward, | 272 | reward = reward, |
src/actions/HeroAction.lua
@@ -32,6 +32,10 @@ function _M.levelUpRpc( agent, data ) | @@ -32,6 +32,10 @@ function _M.levelUpRpc( agent, data ) | ||
32 | 32 | ||
33 | hero:log({desc = "levelUp", int1 = hero:getProperty("level")}) | 33 | hero:log({desc = "levelUp", int1 = hero:getProperty("level")}) |
34 | 34 | ||
35 | + if hero:getProperty("type") == 103 then | ||
36 | + role:finishGuide(7) | ||
37 | + end | ||
38 | + | ||
35 | role:checkTaskEnter("HeroLevelUp", {level = hero:getProperty("level")}) | 39 | role:checkTaskEnter("HeroLevelUp", {level = hero:getProperty("level")}) |
36 | SendPacket(actionCodes.Hero_levelUpRpc, '') | 40 | SendPacket(actionCodes.Hero_levelUpRpc, '') |
37 | return true | 41 | return true |
@@ -523,6 +527,8 @@ function _M.referEquipsRpc(agent, data) | @@ -523,6 +527,8 @@ function _M.referEquipsRpc(agent, data) | ||
523 | -- 更新角色 | 527 | -- 更新角色 |
524 | hero:updateProperty({field = "equip", value = curEquip}) | 528 | hero:updateProperty({field = "equip", value = curEquip}) |
525 | 529 | ||
530 | + role:finishGuide(23) | ||
531 | + | ||
526 | SendPacket(actionCodes.Hero_referEquipsRpc, "") | 532 | SendPacket(actionCodes.Hero_referEquipsRpc, "") |
527 | return true | 533 | return true |
528 | end | 534 | end |
@@ -688,7 +694,6 @@ function _M.unuse_drawHeroRpc(agent, data) | @@ -688,7 +694,6 @@ function _M.unuse_drawHeroRpc(agent, data) | ||
688 | if not role:isFuncUnlock(FuncUnlock.GetHero) then return end | 694 | if not role:isFuncUnlock(FuncUnlock.GetHero) then return end |
689 | local btype = msg.pool -- 1 2 3 4 | 695 | local btype = msg.pool -- 1 2 3 4 |
690 | local drawType = msg.type -- 1 单抽 2 十连 | 696 | local drawType = msg.type -- 1 单抽 2 十连 |
691 | - local guide = msg.guide -- 是否是引导抽的 | ||
692 | 697 | ||
693 | local buildTypeData = csvdb["build_typeCsv"][btype] | 698 | local buildTypeData = csvdb["build_typeCsv"][btype] |
694 | if not buildTypeData then return 1 end | 699 | if not buildTypeData then return 1 end |
@@ -829,6 +834,12 @@ function _M.unuse_drawHeroRpc(agent, data) | @@ -829,6 +834,12 @@ function _M.unuse_drawHeroRpc(agent, data) | ||
829 | newerHadSSR = newerDraw[2] or 0 | 834 | newerHadSSR = newerDraw[2] or 0 |
830 | end | 835 | end |
831 | 836 | ||
837 | + local guideHero | ||
838 | + local funcGuide = role:getProperty("funcGuide") | ||
839 | + if funcGuide:getv(11001,0) == 1 and funcGuide:getv(12001,0) == 0 then | ||
840 | + guideHero = 613 | ||
841 | + end | ||
842 | + | ||
832 | local ssrCount = 0 | 843 | local ssrCount = 0 |
833 | local reward = {} | 844 | local reward = {} |
834 | for i = 1, drawCount[drawType] do | 845 | for i = 1, drawCount[drawType] do |
@@ -858,7 +869,11 @@ function _M.unuse_drawHeroRpc(agent, data) | @@ -858,7 +869,11 @@ function _M.unuse_drawHeroRpc(agent, data) | ||
858 | end | 869 | end |
859 | 870 | ||
860 | -- 引导必送 613 丝路德 | 871 | -- 引导必送 613 丝路德 |
861 | - local itemId = guide and 613 or math.randWeight(resultPool, 1) | 872 | + local itemId = math.randWeight(resultPool, 1) |
873 | + if guideHero then | ||
874 | + itemId = guideHero | ||
875 | + guideHero = nil | ||
876 | + end | ||
862 | local itemData = csvdb["itemCsv"][itemId] | 877 | local itemData = csvdb["itemCsv"][itemId] |
863 | if itemData.quality == 4 then | 878 | if itemData.quality == 4 then |
864 | ssrCount = ssrCount + 1 | 879 | ssrCount = ssrCount + 1 |
@@ -910,6 +925,8 @@ function _M.unuse_drawHeroRpc(agent, data) | @@ -910,6 +925,8 @@ function _M.unuse_drawHeroRpc(agent, data) | ||
910 | -- role:updateProperty({field = "repayHero", value = repayHero}) | 925 | -- role:updateProperty({field = "repayHero", value = repayHero}) |
911 | -- end | 926 | -- end |
912 | 927 | ||
928 | + role:finishGuide(11) | ||
929 | + | ||
913 | role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]}) | 930 | role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]}) |
914 | if ssrCount > 0 then | 931 | if ssrCount > 0 then |
915 | role:checkTaskEnter("DrawSSR", {count = ssrCount}) | 932 | role:checkTaskEnter("DrawSSR", {count = ssrCount}) |
src/actions/RoleAction.lua
@@ -99,6 +99,29 @@ function _M.loginRpc( agent, data ) | @@ -99,6 +99,29 @@ function _M.loginRpc( agent, data ) | ||
99 | role:reloadWhenLogin() | 99 | role:reloadWhenLogin() |
100 | end | 100 | end |
101 | 101 | ||
102 | + | ||
103 | + role.sysVersion = msg.sysVersion | ||
104 | + role.ip = agent.ip:toArray(false, ":")[1] | ||
105 | + role.clientVersion = msg.clientVersion | ||
106 | + role.network = msg.network | ||
107 | + | ||
108 | + if msg.subId then | ||
109 | + role:setProperty("sid", msg.subId) | ||
110 | + end | ||
111 | + | ||
112 | + if msg.deviceMode then | ||
113 | + local deviceMode = tostring(msg.deviceMode) | ||
114 | + if role:getProperty("dmode") ~= deviceMode then | ||
115 | + role:setProperty("dmode", deviceMode) | ||
116 | + end | ||
117 | + end | ||
118 | + if msg.device then | ||
119 | + local device = tostring(msg.device) | ||
120 | + if role:getProperty("device") ~= device then | ||
121 | + role:setProperty("device", device) | ||
122 | + end | ||
123 | + end | ||
124 | + | ||
102 | if not msg.isGMlogin then | 125 | if not msg.isGMlogin then |
103 | local banTime = role:getProperty("banTime") | 126 | local banTime = role:getProperty("banTime") |
104 | if banTime > now then | 127 | if banTime > now then |
@@ -114,6 +137,7 @@ function _M.loginRpc( agent, data ) | @@ -114,6 +137,7 @@ function _M.loginRpc( agent, data ) | ||
114 | role:setBan(0) | 137 | role:setBan(0) |
115 | end | 138 | end |
116 | end | 139 | end |
140 | + | ||
117 | if msg.deviceMode then | 141 | if msg.deviceMode then |
118 | local deviceMode = tostring(msg.deviceMode) | 142 | local deviceMode = tostring(msg.deviceMode) |
119 | if role:getProperty("dmode") ~= deviceMode then | 143 | if role:getProperty("dmode") ~= deviceMode then |
@@ -266,7 +290,7 @@ function _M.loginRpc( agent, data ) | @@ -266,7 +290,7 @@ function _M.loginRpc( agent, data ) | ||
266 | role:savePvpHTeam() | 290 | role:savePvpHTeam() |
267 | 291 | ||
268 | local hangPass = role:getProperty("hangPass") | 292 | local hangPass = role:getProperty("hangPass") |
269 | - role:log("login", {key1 = agent.ip:toArray(false, ":")[1], int1 = hangPass[1] or 0}) | 293 | + role:log("onLogin") |
270 | 294 | ||
271 | return true | 295 | return true |
272 | end | 296 | end |
@@ -314,11 +338,20 @@ function _M.createRpc(agent, data) | @@ -314,11 +338,20 @@ function _M.createRpc(agent, data) | ||
314 | return true | 338 | return true |
315 | end | 339 | end |
316 | newRole:startActionUcode() | 340 | newRole:startActionUcode() |
341 | + newRole.sysVersion = msg.sysVersion | ||
342 | + newRole.ip = agent.ip:toArray(false, ":")[1] | ||
343 | + newRole.clientVersion = msg.clientVersion | ||
344 | + newRole.network = msg.network | ||
345 | + | ||
317 | newRole:award(globalCsv.birthItem, {log = {desc = "birth"}, notNotify = true}) | 346 | newRole:award(globalCsv.birthItem, {log = {desc = "birth"}, notNotify = true}) |
318 | -- 欢迎邮件 | 347 | -- 欢迎邮件 |
319 | redisproxy:insertEmail({roleId = roleId, emailId = 1}) | 348 | redisproxy:insertEmail({roleId = roleId, emailId = 1}) |
320 | 349 | ||
321 | - newRole:log("create", {key1 = agent.ip:toArray(false, ":")[1]}) | 350 | + if msg.newuser then |
351 | + newRole:log("onCreateAccount") | ||
352 | + end | ||
353 | + newRole:log("onCreateRole") | ||
354 | + | ||
322 | 355 | ||
323 | SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response)) | 356 | SendPacket(actionCodes.Role_createRpc, MsgPack.pack(response)) |
324 | return true | 357 | return true |
@@ -1002,17 +1035,15 @@ function _M.guideRpc(agent, data) | @@ -1002,17 +1035,15 @@ function _M.guideRpc(agent, data) | ||
1002 | local cmdType = msg.cmdType | 1035 | local cmdType = msg.cmdType |
1003 | 1036 | ||
1004 | local funcGuide = role:getProperty("funcGuide") | 1037 | local funcGuide = role:getProperty("funcGuide") |
1005 | - local newerGuide = role:getProperty("newerGuide") | ||
1006 | if cmdType == 1 then | 1038 | if cmdType == 1 then |
1007 | -- 新手引导 | 1039 | -- 新手引导 |
1008 | local master = msg.master or -1 | 1040 | local master = msg.master or -1 |
1009 | local slave = msg.slave or -1 | 1041 | local slave = msg.slave or -1 |
1010 | if master < 0 or slave < 0 then return end | 1042 | if master < 0 or slave < 0 then return end |
1011 | - newerGuide = string.format("%d=%d",master,slave) | ||
1012 | - role:updateProperty({field = "newerGuide", value = newerGuide}) | ||
1013 | - role:log("guide", {desc = "guide_new",int1 = master*1000+slave}) | 1043 | + |
1044 | + role:saveGuide(master, slave) | ||
1014 | elseif cmdType == 2 then | 1045 | elseif cmdType == 2 then |
1015 | - -- 系统引导 | 1046 | + -- 系统引导(玩家可选择是否进行) |
1016 | if not msg.skip then return end | 1047 | if not msg.skip then return end |
1017 | local new = math.min(funcGuide:getv(0, 0), msg.skip) | 1048 | local new = math.min(funcGuide:getv(0, 0), msg.skip) |
1018 | if new < 0 then | 1049 | if new < 0 then |
@@ -1023,15 +1054,23 @@ function _M.guideRpc(agent, data) | @@ -1023,15 +1054,23 @@ function _M.guideRpc(agent, data) | ||
1023 | 1054 | ||
1024 | if msg.funcType then | 1055 | if msg.funcType then |
1025 | funcGuide = funcGuide:setv(msg.funcType, 1) | 1056 | funcGuide = funcGuide:setv(msg.funcType, 1) |
1026 | - role:log("guide", {desc = "guide_sys", int1 = msg.funcType}) | 1057 | + role:log("onGuidePoint", {guild_type = 2, guild_id = msg.funcType, guild_point = 0, guild_pass = 0}) |
1027 | end | 1058 | end |
1028 | role:updateProperty({field = "funcGuide", value = funcGuide}) | 1059 | role:updateProperty({field = "funcGuide", value = funcGuide}) |
1029 | elseif cmdType == 3 then | 1060 | elseif cmdType == 3 then |
1030 | - -- 弱引导 | 1061 | + -- 系统引导(强制进行) |
1062 | + if msg.funcType and csvdb["guide_unlockCsv"][msg.funcType] then | ||
1063 | + role:saveGuide(csvdb["guide_unlockCsv"][msg.funcType].guideId,1) | ||
1064 | + funcGuide = funcGuide:setv(msg.funcType, 1) | ||
1065 | + role:updateProperty({field = "funcGuide", value = funcGuide}) | ||
1066 | + role:log("onGuidePoint", {guild_type = 1, guild_id = msg.funcType, guild_point = 0, guild_pass = 0}) | ||
1067 | + end | ||
1068 | + elseif cmdType == 4 then | ||
1069 | + -- 弹出一个tips(进入功能界面也许要自动弹说明,value要区分1、2) | ||
1031 | if msg.funcType then | 1070 | if msg.funcType then |
1032 | local value = msg.value or 1 | 1071 | local value = msg.value or 1 |
1033 | for _, funcIdx in pairs(msg.funcType:toArray(true,"=")) do | 1072 | for _, funcIdx in pairs(msg.funcType:toArray(true,"=")) do |
1034 | - role:log("guide", {desc = "guide_weak", int1 = funcIdx}) | 1073 | + role:log("onGuidePoint", {guild_type = 3, guild_id = funcIdx, guild_point = 0, guild_pass = 0}) |
1035 | funcGuide = funcGuide:setv(funcIdx, value) | 1074 | funcGuide = funcGuide:setv(funcIdx, value) |
1036 | end | 1075 | end |
1037 | role:updateProperty({field = "funcGuide", value = funcGuide}) | 1076 | role:updateProperty({field = "funcGuide", value = funcGuide}) |
src/actions/StoreAction.lua
@@ -31,6 +31,7 @@ function _M.rechargeRpc(agent , data) | @@ -31,6 +31,7 @@ function _M.rechargeRpc(agent , data) | ||
31 | local partnerOrderId = makeOrder(roleId, id) | 31 | local partnerOrderId = makeOrder(roleId, id) |
32 | SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId })) | 32 | SendPacket(actionCodes.Store_rechargeRpc, MsgPack.pack({ order = partnerOrderId })) |
33 | 33 | ||
34 | + | ||
34 | -- 测试的 直接发奖励了 | 35 | -- 测试的 直接发奖励了 |
35 | skynet.timeout(10, function () | 36 | skynet.timeout(10, function () |
36 | role:handlePurchase({ | 37 | role:handlePurchase({ |
@@ -164,6 +165,22 @@ function _M.purchaseOrderResult(agent, data) | @@ -164,6 +165,22 @@ function _M.purchaseOrderResult(agent, data) | ||
164 | 165 | ||
165 | if msg.status == "success" then | 166 | if msg.status == "success" then |
166 | orderObject:setProperty("transactionId", msg.platformOrder or "") | 167 | orderObject:setProperty("transactionId", msg.platformOrder or "") |
168 | + local rechargeId = orderObject:getProperty("rechargeId") | ||
169 | + local dataSet = csvdb["shop_rechargeCsv"][rechargeId] | ||
170 | + | ||
171 | + role:log("setOrder", { | ||
172 | + order_status = 100, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他" | ||
173 | + item_id = rechargeId, -- 道具id | ||
174 | + item_type = dataSet.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表 | ||
175 | + item_name = dataSet.title, -- 购买的道具名 | ||
176 | + item_number = 1, -- 购买的道具数量 | ||
177 | + item_level = 1, -- 购买的道具等级 | ||
178 | + order_cost = dataSet.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee' | ||
179 | + order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范 | ||
180 | + order_type = self.getProperty("rmbC") > 0 and 0 or 1, -- 订单类型,首充记录为1,否则为0 | ||
181 | + order_id = msg.platformOrder, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no' | ||
182 | + }) | ||
183 | + | ||
167 | return true | 184 | return true |
168 | end | 185 | end |
169 | 186 |
src/adv/Adv.lua
@@ -1357,6 +1357,10 @@ local function clickDrop(self, room, block, params) | @@ -1357,6 +1357,10 @@ local function clickDrop(self, room, block, params) | ||
1357 | 1357 | ||
1358 | local reward = self:award({[block.event.item[1]] = block.event.item[2]}, {log = {desc = "clickDrop"}}) | 1358 | local reward = self:award({[block.event.item[1]] = block.event.item[2]}, {log = {desc = "clickDrop"}}) |
1359 | -- local reward = self:award({[5801] = 1}) | 1359 | -- local reward = self:award({[5801] = 1}) |
1360 | + -- 获取绷带的引导 | ||
1361 | + if block.event.item[1] == 5020 and not self.owner:checkOverGuide(53,2) then | ||
1362 | + self.owner:saveGuide(53,2) | ||
1363 | + end | ||
1360 | block:clear() | 1364 | block:clear() |
1361 | self:backReward(reward, {roomId = room.roomId, blockId = block.blockId}) | 1365 | self:backReward(reward, {roomId = room.roomId, blockId = block.blockId}) |
1362 | return true | 1366 | return true |
src/agent.lua
@@ -282,7 +282,7 @@ function CMD.close() | @@ -282,7 +282,7 @@ function CMD.close() | ||
282 | mcast_util.usub_union() | 282 | mcast_util.usub_union() |
283 | local role = agentInfo.role | 283 | local role = agentInfo.role |
284 | if not role then return end | 284 | if not role then return end |
285 | - role:log("logout", {int1 = skynet.timex()-role:getProperty("ltime")}) | 285 | + role:log("onLogout", {logtime = skynet.timex()-role:getProperty("ltime")}) |
286 | role:onOfflineEvent() | 286 | role:onOfflineEvent() |
287 | end | 287 | end |
288 | 288 |
src/models/Diner.lua
@@ -70,12 +70,10 @@ function Diner:refreshDailyData(notify) | @@ -70,12 +70,10 @@ function Diner:refreshDailyData(notify) | ||
70 | end | 70 | end |
71 | end | 71 | end |
72 | 72 | ||
73 | - local guide = self.owner:getProperty("newerGuide") | ||
74 | - local master, slave = string.match(guide,"(%d+)=(%d+)") | ||
75 | - if self.owner:getProperty("funcGuide"):getv(51,0) == 0 or tonumber(master) <= 26 then | 73 | + if self.owner:checkOverGuide(26) and not self.owner:checkOverGuide(27) then |
76 | entrust[1] = 1001 | 74 | entrust[1] = 1001 |
77 | entrust[2] = 1 | 75 | entrust[2] = 1 |
78 | - elseif tonumber(master) <= 29 then | 76 | + elseif self.owner:checkOverGuide(29) then |
79 | local temp = entrust[1] | 77 | local temp = entrust[1] |
80 | entrust[1] = 1 | 78 | entrust[1] = 1 |
81 | entrust[2] = temp | 79 | entrust[2] = temp |
src/models/Email.lua
@@ -18,6 +18,23 @@ Email.schema = { | @@ -18,6 +18,23 @@ Email.schema = { | ||
18 | rewardPms = {"table", {}}, | 18 | rewardPms = {"table", {}}, |
19 | } | 19 | } |
20 | 20 | ||
21 | +function Email:log(role, action) | ||
22 | + role:log("onMail", { | ||
23 | + mail_action_type = action, -- 操作(1=收,2=领,3=删) | ||
24 | + mail_receivetime = self:getProperty("createtime"), -- 收件时间 | ||
25 | + mail_textid = self:getProperty("emailId"), -- 邮件文本ID | ||
26 | + mial_title = self:getProperty("title"), -- 邮件标题参数 | ||
27 | + mail_content = json.encode(self:getProperty("contentPms")), -- 邮件内容参数 | ||
28 | + mail_attach = self:getProperty("attachments"), -- 邮件附件 | ||
29 | + mail_reason = self:getProperty("stitle"), -- 原因 | ||
30 | + mail_readstatus = self:getProperty("status") >= 1 and 1 or 0, -- 邮件读取状态 | ||
31 | + mail_attachstatus = self:getProperty("status") >= 2 and 1 or 0, -- 邮件附件状态 | ||
32 | + mail_timeout = 0, -- 邮件超时时间 | ||
33 | + mail_friend_id = 0, -- 收件方账号id | ||
34 | + mail_friend_roleid = 0, -- 收件方角色id | ||
35 | + }) | ||
36 | +end | ||
37 | + | ||
21 | function Email:data() | 38 | function Email:data() |
22 | local emailId = self:getProperty("emailId") | 39 | local emailId = self:getProperty("emailId") |
23 | local title = self:getProperty("title") | 40 | local title = self:getProperty("title") |
src/models/RoleLog.lua
1 | +local server_id = (skynet.getenv("serverType") or "localtest") .. "_" .. skynet.getenv("servId") | ||
1 | 2 | ||
2 | --- logType | ||
3 | -local LogType = { | ||
4 | - create = "common", | ||
5 | - login = "common", | ||
6 | - logout = "common", | ||
7 | - guide = "common", | 3 | +--[[ |
4 | + 100 购买/兑换行为 | ||
5 | + 200 交易行为(与其他玩家) | ||
6 | + 300 通过关卡产出或消耗 | ||
7 | + 400 通过任务产出或消耗 | ||
8 | + 500 通过公会产出或消耗 | ||
9 | + 600 通过成就产出或消耗 | ||
10 | + 700 通过邮件产出或消耗 | ||
11 | + 1000 其他行为 | ||
12 | +--]] | ||
13 | +local ItemReason = { | ||
14 | + recharge = 100, | ||
15 | + advWheelSurf = 101, -- 资助 | ||
16 | + advRepayWheelSurf = 102, -- 资助回馈 | ||
17 | + saleEquip = 103, -- 卖装备 | ||
18 | + saleRune = 104, -- 卖铭文 | ||
19 | + drawHero = 105, -- 抽卡 | ||
20 | + pvpShop = 106, -- pvp商店 | ||
21 | + saleItem = 107, -- 售卖道具 | ||
22 | + openItem = 108, -- 打开箱子 | ||
23 | + openTimeBox = 109, -- 打开时间箱 | ||
24 | + speedUpBox = 110, -- 速度箱 | ||
25 | + dailyShop = 111, -- 每日商城 | ||
26 | + dinershop = 112, -- 餐厅商店 | ||
27 | + goldBuy = 113, -- 购买金币 | ||
28 | + buyAdvCount = 114, -- 购买冒险次数 | ||
29 | + advReSupport = 115, -- 刷新拾荒支援技 | ||
30 | + advQuickHang = 116, -- 冒险快速挂机 | ||
31 | + makePotion = 117, -- 制造药剂 | ||
32 | + equipUp = 118, -- 装备升级 | ||
33 | + runeUp = 119, -- 符文升级 | ||
34 | + talentUp = 120, -- 天赋升级 | ||
35 | + buyBonusCount = 121, -- 购买奖励副本次数 | ||
36 | + bagField = 122, -- 背包栏位 | ||
37 | + buyPvpKey = 123, -- 购买pvp钥匙 | ||
38 | + startPvp = 124, -- 开始pvp | ||
39 | + unlockStory = 125, -- 解锁剧情 | ||
40 | + towerCount = 126, -- 电波塔次数 | ||
41 | + | ||
42 | + | ||
43 | + advHang = 301, -- 拾荒挂机 | ||
44 | + hangBattle = 302, -- 挂机战斗 | ||
45 | + hangReward = 303, -- 挂机奖励 | ||
46 | + quickHang = 304, -- 快速挂机 | ||
47 | + bonusBattle = 305, -- 奖励副本 | ||
48 | + hangGift = 306, -- 奖励关卡奖励 | ||
49 | + pvpBattleC = 307, -- pvp战斗普通 | ||
50 | + pvpBattleH = 308, -- pvp战斗高级 | ||
51 | + pvpDivisionH = 309, -- pvp高级段位奖励 | ||
52 | + towerBattle = 310, -- 电波塔战斗 | ||
53 | + advOver = 311, -- 冒险结算 | ||
54 | + advUnlock = 312, -- 拾荒解锁 | ||
8 | 55 | ||
9 | - in_item = "common", | ||
10 | - out_item = "common", | ||
11 | - in_diamond = "common", | ||
12 | - out_diamond = "common", | ||
13 | - in_hero = "common", | ||
14 | - out_hero = "common", | ||
15 | - in_equip = "common", | ||
16 | - out_equip = "common", | ||
17 | - in_rune = "common", | ||
18 | - out_rune = "common", | ||
19 | - player_exp = "common", | ||
20 | - func_open = "common", | ||
21 | - in_adv = "common", | ||
22 | - out_adv = "common", | ||
23 | - in_artifact = "common", | ||
24 | - | ||
25 | - mail_action = "common", | ||
26 | - role_action = "common", | ||
27 | - hang_action = "common", | ||
28 | - hero_action = "common", | ||
29 | - adv_action = "common", | ||
30 | - rune_action = "common", | ||
31 | - pvp_action = "common", | ||
32 | - diner_action = "common", | ||
33 | - tower_action = "common", | ||
34 | - gm_action = "common", | ||
35 | - act_action = "common", | 56 | + dinerFinishTask = 401, -- 餐厅完成任务 |
57 | + storybookReward = 402, -- 剧情奖励 | ||
58 | + finishTask = 403, -- 任务 | ||
59 | + taskActive = 404, -- 完成活跃任务 | ||
60 | + advMainTask = 405, -- 拾荒主线 | ||
61 | + | ||
62 | + finishAchive = 601, -- 完成成就 | ||
63 | + advAchiev = 602, -- 拾荒成就 | ||
64 | + advAchievReward = 603, -- 拾慌成就奖励 | ||
65 | + | ||
66 | + draw_attach = 701, -- 邮件奖励 | ||
67 | + | ||
68 | + gm = 1000, -- 获取途径:GM | ||
69 | + | ||
70 | + -- 活动 | ||
71 | + sudoku = 1001, -- 九宫格 | ||
72 | + sudokuR = 1002, -- 九宫格连线奖励 | ||
73 | + sudokuRP = 1003, -- 九宫格阶段奖励 | ||
74 | + sign = 1004, -- 签到 | ||
75 | + friendPoint = 1005, -- 友情 | ||
76 | + birth = 1006, -- 出生奖励 | ||
77 | + | ||
78 | + -- 餐厅 | ||
79 | + greenHourse = 1101, -- 食材获得 | ||
80 | + dinerEntrus = 1102, -- 餐厅委托 | ||
81 | + dinerCollect = 1103, -- 餐厅小人收集 | ||
82 | + dinerCombo = 1104, -- 小人组合 | ||
83 | + dinerSkillUp = 1105, -- 餐厅技能升级 | ||
84 | + dinerReTask = 1106, -- 餐厅刷新任务 | ||
85 | + addSell = 1107, -- 餐厅贩卖 | ||
86 | + dinerBuildUp = 1108, -- 建筑升级 | ||
87 | + removeSell = 1109, -- 移除售卖 | ||
88 | + dinerSell = 1110, -- 餐饮售卖 | ||
89 | + | ||
90 | + -- 英雄 | ||
91 | + heroLevelUp = 1201, -- 英雄升级 | ||
92 | + heroBreak = 1202, -- 英雄突破 | ||
93 | + heroWake = 1203, -- 英雄觉醒 | ||
94 | + heroTalent = 1204, -- 英雄天赋 | ||
95 | + createHero = 1205, -- 碎片合成 | ||
96 | + createHeroRandom = 1206, -- 随机合成 | ||
97 | + resetHero = 1207, -- 重置养成 | ||
36 | } | 98 | } |
37 | 99 | ||
38 | --- 如要修改 要提前修改 _template mapping -- 对应 mapping 为 gamelog-* | ||
39 | -local Mapping = { | ||
40 | - -- 预留一些数据格式 担心integer 范围不够用 将 通用的int* 全部换为long | ||
41 | - common = { | ||
42 | - desc = "keyword",--索引的短字符串 | ||
43 | - ucode = "keyword",--关联日志对应ucode | ||
44 | - key1 = "keyword", --可索引的短字符串 | ||
45 | - key2 = "keyword", --可索引的短字符串 | ||
46 | - -- 几乎不用的长文本 | ||
47 | - text1 = "text", --长字符串不索引的类型 | ||
48 | - -- 五个不同类型的数字 基本上满足数量要求 尽量从低到高用 | ||
49 | - short1 = "short", | ||
50 | - int1 = "long", | ||
51 | - int2 = "long", | ||
52 | - long1 = "long", | ||
53 | - float1 = "float", | ||
54 | - | ||
55 | - -- 底层使用的 一些参数 | ||
56 | - cint1 = "long", | ||
57 | - cint2 = "long", | ||
58 | - cint3 = "long", | ||
59 | - } | 100 | + |
101 | +--[[ | ||
102 | +100 教学 | ||
103 | +200 主线 | ||
104 | +300 日常 | ||
105 | +400 周常 | ||
106 | +500 联盟 | ||
107 | +1000 限时任务 | ||
108 | +2000 其他 | ||
109 | +--]] | ||
110 | +local TaskType = { | ||
111 | + | ||
60 | } | 112 | } |
61 | 113 | ||
62 | --- 所有的日志都包括的部分 role 里面的信息 -- mapping 信息在 gamelog-role | ||
63 | -local commonRoleField = { | ||
64 | - name = "keyword", | ||
65 | - id = "integer", | ||
66 | - uid = "keyword", | ||
67 | - sid = "short", | ||
68 | - device = "keyword", | ||
69 | - ctime = "integer", | ||
70 | - ltime = "integer", | ||
71 | - level = "short", | ||
72 | - rmbC = "integer", | 114 | + |
115 | +local MethodType = { | ||
116 | + onCreateAccount = {}, -- 创建游戏账号 | ||
117 | + onCreateRole = {}, -- 创建游戏角色 | ||
118 | + onLogin = {}, -- 玩家登录 | ||
119 | + onLogout = { -- 登出 | ||
120 | + logtime = true, --登录时长 | ||
121 | + }, | ||
122 | + setLevel = { -- 设置等级 --TODO | ||
123 | + level_before = true, -- 变动前的等级,可以跳级 | ||
124 | + level_changemain = true, -- 等级变动原因,副本通关:mission,领取奖励:reward | ||
125 | + level_changedetail = true, -- 等级变动原因明细,副本通关则记录关卡ID,领取奖励则记录奖励ID | ||
126 | + level_reward = true, -- 等级变动奖励,json格式记录,{道具ID1:道具数量,道具ID2:道具数量} | ||
127 | + }, | ||
128 | + onGuidePoint = { --游戏引导 | ||
129 | + guild_type = true, --引导类型,新手引导:0,系统引导:1,弱引导:2 | ||
130 | + guild_id = true, --节点ID | ||
131 | + guild_point = true, --步骤ID | ||
132 | + guild_pass = true, --正常操作:0,自动播放:1,跳过:2 | ||
133 | + }, | ||
134 | + setOrder = { --玩家订单记录 | ||
135 | + order_status = true, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他" | ||
136 | + item_id = true, -- 道具id | ||
137 | + item_type = true, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表 | ||
138 | + item_name = true, -- 购买的道具名 | ||
139 | + item_number = true, -- 购买的道具数量 | ||
140 | + item_level = true, -- 购买的道具等级 | ||
141 | + order_cost = true, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee' | ||
142 | + order_currency = true, -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范 | ||
143 | + order_type = true, -- 订单类型,首充记录为1,否则为0 | ||
144 | + order_id = true, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no' | ||
145 | + }, | ||
146 | + onMail = { --玩家邮件操作 | ||
147 | + mail_action_type = true, -- 操作(1=收,2=领,3=删) | ||
148 | + mail_receivetime = true, -- 收件时间 | ||
149 | + mail_textid = true, -- 邮件文本ID | ||
150 | + mial_title = true, -- 邮件标题参数 | ||
151 | + mail_content = true, -- 邮件内容参数 | ||
152 | + mail_attach = true, -- 邮件附件 | ||
153 | + mail_reason = true, -- 原因 | ||
154 | + mail_readstatus = true, -- 邮件读取状态 | ||
155 | + mail_attachstatus = true, -- 邮件附件状态 | ||
156 | + mail_timeout = true, -- 邮件超时时间 | ||
157 | + mail_friend_id = true, -- 收件方账号id | ||
158 | + mail_friend_roleid = true, -- 收件方角色id | ||
159 | + }, | ||
160 | + onItems = { --道具流通 --TODO | ||
161 | + item_id = true, -- 道具id | ||
162 | + item_sequenceid = "ucode", -- 道具变动关联ID,用于关联一次动作产生多条不同类型的日志,如一个礼包多个物品等情形 | ||
163 | + item_type = true, -- 道具类型,具体见枚举表中道具类型枚举表 | ||
164 | + item_level = true, -- 道具等级 | ||
165 | + item_number = true, -- 道具变化数量的绝对值 | ||
166 | + action_type = true, -- 变化类型(玩家获取:1,玩家消耗:0) | ||
167 | + item_before = true, -- 道具变化前的数量 | ||
168 | + item_after = true, -- 道具变化后的数量 | ||
169 | + item_reason = true, -- 道具流动一级原因,如抽卡、装备强化、副本掉落,可参考道具动作类型枚举表 | ||
170 | + item_subreason = true, -- 道具流动二级原因,抽卡:卡池ID,装备强化:装备ID,副本掉落:副本ID | ||
171 | + item_other = true, -- 其他(可包含阶数,强化等级,随机属性) | ||
172 | + }, | ||
173 | + mission = { --玩家副本完成情况 --TODO | ||
174 | + mission_threadid = true, -- 大关卡ID | ||
175 | + mission_id = true, -- 关卡ID | ||
176 | + mission_type = true, -- 关卡类型,见关卡类型枚举表 | ||
177 | + mission_sequenceid = "ucode", -- 本次对战ID,用于关联一次动作产生多条不同类型的日志 | ||
178 | + mission_herolist = true, -- 英雄ID,排序以玩家出战设置为准,PVP多个队伍则记录多个列表。示例:[[1,2,3],[456]] | ||
179 | + mission_heroscore = true, -- 编队总评分 | ||
180 | + mission_enemylist = true, -- 地方英雄ID,排序以玩家出战设置为准,PVP多个队伍则记录多个列表。示例:[[1,2,3],[456]] | ||
181 | + mission_damage = true, -- 英雄输出值。示例:{'heroid1':1000,'heroid2':2000,………..} | ||
182 | + mission_ultskill = true, -- 大招使用情况。示例:{'heroid1':1000,'heroid2':2000,………..} | ||
183 | + mission_reward = true, -- 获得奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} | ||
184 | + mission_starttime = true, -- 战斗开始时间,格式 unixtime 秒级 | ||
185 | + mission_roundtime = true, -- 对局时长(秒) | ||
186 | + mission_result = true, -- 战斗结果(0-无效,1-胜利,2-失败) | ||
187 | + mission_star = true, -- 战斗完成星数,无星级的话填写0 | ||
188 | + mission_restriction = true, -- 周期内参与限制(0表示没有上限) | ||
189 | + mission_difficulty = true, -- 关卡困难度,无难度区分的话填写0 | ||
190 | + mission_strength = true, -- 消耗的体力或次数 | ||
191 | + mission_score = true, -- 本局分数,PVP玩法记录为对战后积分,无得分的填0 | ||
192 | + mission_cleartype = true, -- 1正常通关;2代理拾荒 | ||
193 | + mission_rank = true, -- 对战后排名,适用于PVP玩法和电波塔,其他玩法留空 | ||
194 | + misson_monsterkill = true, -- 击杀怪物ID和数量,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} | ||
195 | + misson_teamskill = true, -- 编队支援技能和技能等级情况,json格式记录,{"teamskill1":1,"teamskill2":2,………..} | ||
196 | + misson_teambond = true, -- 编队羁绊和羁绊等级,json格式记录,{"bondid1":1,"bondid2":2,………..} | ||
197 | + }, | ||
198 | + residence_reward = { --玩家挂机或排名奖励 --TODO | ||
199 | + mission_threadid = true, --大关卡ID | ||
200 | + mission_id = true, --关卡ID | ||
201 | + mission_type = true, --关卡类型,见关卡类型枚举表 | ||
202 | + residence_reward_type = true, --领取奖励方式,快速(超前领取)记录为1,正常领取记录为0 | ||
203 | + residence_time = true, --挂机或排名时长 | ||
204 | + residence_reward = true, --获得奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} | ||
205 | + }, | ||
206 | + hero_rise = { --英雄觉醒 --TODO | ||
207 | + hero_id = true, --英雄ID | ||
208 | + hero_rise_cost = true, --英雄觉醒消耗,json格式记录,{道具ID1:消耗数量1,道具ID2:消耗数量2,………...} | ||
209 | + hero_rise_score = true, --英雄觉醒后评分提升 | ||
210 | + hero_rise_result = true, --英雄觉醒效果,可记录效果ID,或json格式记录提升效果,{攻击:20,闪避:20,……..} | ||
211 | + }, | ||
212 | + hero_upgrade = { --英雄升级 --TODO | ||
213 | + hero_id = true, -- 英雄ID | ||
214 | + hero_upgrade_cost = true, -- 英雄升级消耗,json格式记录,{道具ID1:消耗数量1,道具ID2:消耗数量2,………...} | ||
215 | + hero_upgrade_result = true, -- 英雄升级效果,可记录效果ID,或json格式记录提升效果,{攻击:20,闪避:20,……..} | ||
216 | + hero_upgrade_type = true, -- 英雄升级方式,连续升级:1,单击升级:0 | ||
217 | + hero_upgrade_score = true, -- 英雄升级后评分 | ||
218 | + hero_upgrade_scoreget = true, -- 通过英雄升级提升的评分 | ||
219 | + }, | ||
220 | + hero_break = { --英雄突破 --TODO | ||
221 | + hero_id = true, -- 英雄ID | ||
222 | + hero_break_cost = true, -- 英雄突破消耗,json格式记录,{道具ID1:消耗数量1,道具ID2:消耗数量2,………...} | ||
223 | + hero_break_result = true, -- 英雄突破效果,可记录效果ID,或json格式记录提升效果,{攻击:20,闪避:20,……..} | ||
224 | + hero_break_level = true, -- 英雄突破后等级上限 | ||
225 | + }, | ||
226 | + hero_talent = { --英雄天赋升级 --TODO | ||
227 | + hero_id = true, -- 英雄ID | ||
228 | + hero_talent_cost = true, -- 英雄天赋升级消耗,json格式记录,{道具ID1:消耗数量1,道具ID2:消耗数量2,………...} | ||
229 | + hero_talent_levelbef = true, -- 英雄技能升级前等级 | ||
230 | + hero_talent_level = true, -- 英雄技能升级后等级 | ||
231 | + }, | ||
232 | + hero_jewel = { --英雄铭文 --TODO | ||
233 | + hero_id = true, -- 英雄ID | ||
234 | + hero_jewel_sequence = true, -- 铭文装备编号,用以关联一次装备时产生的多条日志 | ||
235 | + hero_jewel_id = true, -- 铭文ID | ||
236 | + hero_jewel_part = true, -- 铭文装备部位 | ||
237 | + hero_jewel_score = true, -- 铭文装备后的英雄分值 | ||
238 | + hero_jewel_scorebefore = true, -- 铭文装备前的英雄分值 | ||
239 | + hero_jewel_result = true, -- 铭文装备后效果,可记录效果ID,或json格式记录提升效果,{攻击:20,闪避:20,……..} | ||
240 | + }, | ||
241 | + hero_note = { --英雄评价 --TODO | ||
242 | + hero_id = true, -- 英雄ID | ||
243 | + hero_note_action = true, -- 英雄评价界面操作,发布评论:0,点赞:1,反对:2 | ||
244 | + hero_note_id = true, -- 操作的评价ID | ||
245 | + hero_note_text = true, -- 操作的评价内容 | ||
246 | + }, | ||
247 | + hero_show = { --展示英雄 --TODO | ||
248 | + hero_id = true, -- 英雄ID | ||
249 | + }, | ||
250 | + hero_recycle = { --英雄回收 | ||
251 | + hero_recycle_list = true, -- 回收的英雄id列表,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} | ||
252 | + hero_recycle_reward = true, -- 回收后获得的奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} | ||
253 | + hero_recycle_cnt = true, -- 总回收英雄量 | ||
254 | + }, | ||
255 | + gacha = { --英雄招募 --TODO | ||
256 | + gacha_id = true, -- 卡池ID | ||
257 | + gacha_type = true, -- 卡池类型 | ||
258 | + gacha_up = true, -- 卡池UP角色 | ||
259 | + gacha_times = true, -- 抽卡次数 | ||
260 | + gacha_reward = true, -- 抽卡结果,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} | ||
261 | + currency_type = true, -- 购买道具消耗的货币类型,记录货币ID | ||
262 | + gacha_current = true, -- 购买道具消耗的货币数量 | ||
263 | + gacha_cnt = true, -- 此卡池内的计数器 | ||
264 | + }, | ||
265 | + equip_wear = { --装备穿戴与卸载 --TODO | ||
266 | + hero_id = true, --英雄ID | ||
267 | + equip_id = true, --装备ID | ||
268 | + equip_wear_action = true, --装备操作类型:装备:0,卸载:1 | ||
269 | + equip_wear_part = true, --装备部位,记录部位ID | ||
270 | + equip_wear_result = true, --装备操作后结果,记录属性变化,json格式记录,{“aa”:1234,"bb":4567} | ||
271 | + equip_wear_change = true, --装备操作变化值,记录属性变化,记录正负值,json格式记录,{“aa”:1234,"bb":-45} | ||
272 | + equip_wear_mode = true, --用以区分自动装备还是手动装备,自动记录为0,手动记录为1 | ||
273 | + equip_wear_seqid = true, --自动穿戴时记录的系列ID,用以关联一次性装备时候产生的多条记录 | ||
274 | + }, | ||
275 | + equip_upgrade = { --装备升级 --TODO | ||
276 | + hero_id = true, -- 英雄ID | ||
277 | + equip_upgrade_part = true, -- 升级部位,记录部位ID | ||
278 | + equip_id = true, -- 升级后的装备ID | ||
279 | + equip_upgrade_amount = true, -- 升级获取的装备数量 | ||
280 | + equip_upgrade_usedid = true, -- 升级消耗的装备ID | ||
281 | + equip_upgrade_cost = true, -- 升级操作消耗装备数量 | ||
282 | + equip_upgrade_currentid = true, -- 升级消耗的货币类型 | ||
283 | + equip_upgrade_current = true, -- 升级操作消耗货币数量 | ||
284 | + }, | ||
285 | + carriage_dismantle = { --物资拆解 --TODO | ||
286 | + item_id = true, -- 道具id | ||
287 | + item_sequenceid = "ucode", -- 道具变动关联ID,用于关联一次动作产生多条不同类型的日志,如一个礼包多个物品等情形 | ||
288 | + item_type = true, -- 道具类型,具体见枚举表中道具类型枚举表 | ||
289 | + item_level = true, -- 道具等级 | ||
290 | + item_number = true, -- 道具变化数量的绝对值 | ||
291 | + carriage_dismantle_type = true, -- 拆解方式,时间到期:0,钥匙开启:1 | ||
292 | + carriage_dismantle_time = true, -- 拆解耗时,填写实际耗时 | ||
293 | + carriage_dismantle_cost = true, -- 拆解花费钥匙数量,未使用填写0 | ||
294 | + carriage_dismantle_rwd = true, -- 拆解获得物资,json格式记录,{'itemid1':2,'itemid2':3,…………..} | ||
295 | + }, | ||
296 | + carriage_logistics = { --后勤室 --TODO | ||
297 | + carriage_logistics_type = true, -- 后勤室制作类型ID,变异:0,通常:1,魔法:2 | ||
298 | + carriage_logistics_itemid = true, -- 后勤室升级物品或技能ID | ||
299 | + carriage_logistics_itemlv = true, -- 升级后物品或技能等级 | ||
300 | + carriage_logistics_gear = true, -- 后勤室升级花费齿轮数量 | ||
301 | + carriage_logistics_coin = true, -- 后勤室升级花费美食币数量 | ||
302 | + }, | ||
303 | + carriage_decals = { --贴纸拆解 --TODO | ||
304 | + item_id = true, --道具id | ||
305 | + item_sequenceid = "ucode", --道具变动关联ID,用于关联一次动作产生多条不同类型的日志,如一个礼包多个物品等情形 | ||
306 | + item_type = true, --道具类型,具体见枚举表中道具类型枚举表 | ||
307 | + item_level = true, --道具等级 | ||
308 | + item_number = true, --道具变化数量的绝对值 | ||
309 | + carriage_decals_rwdid = true, --拆解获得物资ID | ||
310 | + carriage_decals_rwdnum = true, --拆解获得物资数量 | ||
311 | + }, | ||
312 | + carriage_video = { --放映室 --TODO | ||
313 | + carriage_video_type = true, --放映室类型,剧情CG:0, 角色CG:1, 主线剧情:2, 角色剧情:3, 活动剧情:4, 图鉴:5 | ||
314 | + carriage_video_id = true, --放映室片段ID | ||
315 | + carriage_video_coinid = true, --放映奖励货币类型,无奖励则填写0 | ||
316 | + carriage_video_coinnum = true, --放映奖励货币数量,无奖励则填写0 | ||
317 | + carriage_video_item = true, --放映奖励其他物品数量,json格式记录,{'itemid1':10,'itemid2':5,…………..},无奖励则填写0 | ||
318 | + }, | ||
319 | + carriage_cook = { --调理室 --TODO | ||
320 | + item_id = true, -- 道具id | ||
321 | + item_level = true, -- 道具等级 | ||
322 | + item_type = true, -- 道具类型,具体见枚举表中道具类型枚举表 | ||
323 | + carriage_cook_amount = true, -- 制作总量 | ||
324 | + carriage_cook_cost = true, -- 制作消耗道具,json格式记录,{'itemid1':10,'itemid2':5,…………..} | ||
325 | + }, | ||
326 | + activity = { --活动或指南奖励 --TODO | ||
327 | + activity_id = true, -- 活动ID(或活动指定任务的ID) | ||
328 | + activity_type = true, -- 活动类型,见活动类型枚举表 | ||
329 | + activity_reward = true, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} | ||
330 | + }, | ||
331 | + task_reward = { --任务奖励 --TODO | ||
332 | + task_reward_id = true, --任务奖励ID | ||
333 | + task_reward_type = true, --任务奖励类型,见 任务奖励类型枚举表 | ||
334 | + task_reward_detail = true, --任务奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} | ||
335 | + }, | ||
336 | + shop_purchase = { --商店购买行为 --TODO | ||
337 | + item_id = true, -- 道具id | ||
338 | + item_sequenceid = "ucode", -- 道具变动关联ID,用于关联一次动作产生多条不同类型的日志,如一个购买礼包多个物品等情形 | ||
339 | + item_type = true, -- 道具类型,具体见枚举表中道具类型枚举表 | ||
340 | + item_level = true, -- 道具等级 | ||
341 | + item_cnt = true, -- 购买数量技术 | ||
342 | + currency_type = true, -- 购买道具消耗的货币类型,记录货币ID | ||
343 | + shop_purchase_current = true, -- 购买道具消耗的货币数量 | ||
344 | + shop_id = true, -- 商店ID | ||
345 | + }, | ||
346 | + friend_opt = { --好友操作 --TODO | ||
347 | + friend_opt_type = true, -- 好友操作类型,见枚举表中 好友操作类型枚举表 | ||
348 | + friend_accountid = true, -- 好友账户id | ||
349 | + friend_roleid = true, -- 好友账户下的角色id | ||
350 | + friend_cnt = true, -- 操作后好友数量 | ||
351 | + }, | ||
352 | + friend_list = { --好友列表 --TODO | ||
353 | + friend_accountid = true, --好友账户id | ||
354 | + friend_roleid = true, --好友账户下的角色id | ||
355 | + }, | ||
356 | + friend_black = { --黑名单列表 --TODO | ||
357 | + friend_accountid = true, -- 好友账户id | ||
358 | + friend_roleid = true, -- 好友账户下的角色id | ||
359 | + }, | ||
360 | + communication = { --玩家发言 --TODO | ||
361 | + publish_type = true, --发言类型,全部:0,公告:1,世界:2,联盟:3,私聊:4 | ||
362 | + publish_status = true, --发送状态,发送成功:0,发送失败:1,被屏蔽:2,其他:3 | ||
363 | + publish_receive_accid = true, --接收者账户ID | ||
364 | + publish_receive_roleid = true, --接收者角色ID | ||
365 | + publish_text = true, --发言内容 | ||
366 | + }, | ||
367 | + restaurant_up = { --摊位升级 --TODO | ||
368 | + restaurant_up_type = true, --升级部件类型,店面:0, 接客:1, 满意度:2, 宣传:3, 广告:4, 周边:5 | ||
369 | + restaurant_up_gear = true, --消耗齿轮数量 | ||
370 | + restaurant_up_coin = true, --花费美食币数量 | ||
371 | + restaurant_up_effectbef = true, --升级前加成 | ||
372 | + restaurant_up_effect = true, --升级后加成 | ||
373 | + }, | ||
374 | + restaurant_sale = { --摊位售卖 --TODO | ||
375 | + item_id = true, -- 售卖物品ID | ||
376 | + restaurant_sale_seat = true, -- 售卖物品所在位置 | ||
377 | + restaurant_sale_time = true, -- 售卖时长 | ||
378 | + restaurant_sale_type = true, -- 售卖方式,正常售卖:0, 加速:1,移除售卖:2 | ||
379 | + restaurant_sale_coin = true, -- 售卖获得美食币 | ||
380 | + restaurant_sale_gear = true, -- 售卖获得齿轮 | ||
381 | + }, | ||
382 | + restaurant_material = { --食材获取 --TODO | ||
383 | + item_id = true, -- 获取物品ID | ||
384 | + restaurant_material_seqid = true, -- 道具变动关联ID,用于关联一次动作产生多条不同类型的日志,如一次获取两件道具情况 | ||
385 | + restaurant_material_start = true, -- 申请获取时间 | ||
386 | + restaurant_material_time = true, -- 申请到领取耗时 | ||
387 | + restaurant_material_num = true, -- 获取物品数量 | ||
388 | + }, | ||
389 | + restaurant_order = { --订单任务 --TODO | ||
390 | + restaurant_order_id = true, -- 订单任务ID | ||
391 | + restaurant_order_status = true, -- 订单任务状态,接受:0, 拒绝:1, 完成:2 | ||
392 | + restaurant_order_start = true, -- 订单接收时间,timestamp格式记录 | ||
393 | + restaurant_order_rwd = true, -- 订单完成奖励,json格式记录,{"itemid1":123,"itemid2":12,……….} | ||
394 | + restaurant_order_lv = true, -- 订单品质等级,普通:0, 稀有:1, 顶级:2, 豪华:3 | ||
395 | + }, | ||
396 | + restaurant_collect = { --餐厅顾客图谱 --TODO | ||
397 | + restaurant_collect_id = true, -- 图谱收集ID | ||
398 | + restaurant_collect_rwd = true, -- 订单完成奖励,json格式记录,{"itemid1":123,"itemid2":12,……….} | ||
399 | + restaurant_collect_plan = true, -- 收集进度,即解锁顾客,数字表示 | ||
400 | + }, | ||
401 | + achievement = { --成就达成 --TODO | ||
402 | + achievement_id = true, -- 成就id | ||
403 | + achievement_type = true, -- 成就类型,具体枚举表中成就类型枚举表 | ||
404 | + achievement_name = true, -- 成就名称 | ||
405 | + achievement_score = true, -- 领取成就后成就点数 | ||
406 | + achievement_subscore = true, -- 领取成就后小类成就点数 | ||
407 | + achievement_reward = true, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….} | ||
408 | + }, | ||
409 | + get_gift = { --礼包兑换 --TODO | ||
410 | + gift_id = true, -- 礼包ID | ||
411 | + gift_key = true, -- 礼包key | ||
412 | + gift_reward = true, -- 礼包奖励,json格式记录,{"itemid1":123,"itemid2":12,……….} | ||
413 | + gift_name = true, -- 礼包名称 | ||
414 | + gift_reason = true, -- 礼包发放原因,见发放原因枚举表 | ||
415 | + }, | ||
73 | } | 416 | } |
74 | 417 | ||
75 | -local function printError(info) | ||
76 | - print(info) | ||
77 | - print(debug.traceback()) | 418 | +local function isIos(self) |
419 | + local sid = self:getProperty("sid") | ||
420 | + return sid == 2 | ||
78 | end | 421 | end |
79 | 422 | ||
80 | -local function checkType(logType, field, value, ctype) | ||
81 | - local typecheckfunc = { | ||
82 | - keyword = function() | ||
83 | - --长度不超过256 | ||
84 | - if type(value) ~= "string" then | ||
85 | - value = tostring(value) | ||
86 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [keyword], value : %s", logType, field, value)) | ||
87 | - else | ||
88 | - if #value > 256 then | ||
89 | - printError(string.format("LOG ERROR: logType [%s] field [%s] [keyword] type to long. value : %s", logType, field, value)) | ||
90 | - end | ||
91 | - end | ||
92 | - return value | ||
93 | - end, | ||
94 | - text = function() | ||
95 | - if type(value) ~= "string" then | ||
96 | - value = tostring(value) | ||
97 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [text], value : %s", logType, field, value)) | ||
98 | - end | ||
99 | - return value | ||
100 | - end, | ||
101 | - integer = function() | ||
102 | - if type(value) ~= "number" then | ||
103 | - value = tonumber(value) | ||
104 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], value : %s", logType, field, value)) | ||
105 | - end | ||
106 | - if value then | ||
107 | - if math.type(value) ~= "integer" then | ||
108 | - local oldValue = value | ||
109 | - value = math.floor(value) | ||
110 | - if value ~= oldValue then | ||
111 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], is float, value : %s", logType, field, value)) | ||
112 | - end | ||
113 | - end | ||
114 | - if -2147483648 > value or value > 2147483647 then | ||
115 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], too big, value : %s", logType, field, value)) | ||
116 | - value = nil | ||
117 | - end | ||
118 | - end | ||
119 | - return value | ||
120 | - end, | ||
121 | - short = function() | ||
122 | - if type(value) ~= "number" then | ||
123 | - value = tonumber(value) | ||
124 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], value : %s", logType, field, value)) | ||
125 | - end | ||
126 | - if value then | ||
127 | - if math.type(value) ~= "integer" then | ||
128 | - local oldValue = value | ||
129 | - value = math.floor(value) | ||
130 | - if value ~= oldValue then | ||
131 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], is float, value : %s", logType, field, value)) | ||
132 | - end | ||
133 | - end | ||
134 | - | ||
135 | - if -32768 > value or value > 32768 then | ||
136 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], too big, value : %s", logType, field, value)) | ||
137 | - value = nil | ||
138 | - end | ||
139 | - end | ||
140 | - return value | ||
141 | - end, | ||
142 | - long = function() | ||
143 | - if type(value) ~= "number" then | ||
144 | - value = tonumber(value) | ||
145 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], value : %s", logType, field, value)) | ||
146 | - end | ||
147 | - if value then | ||
148 | - if math.type(value) ~= "integer" then | ||
149 | - local oldValue = value | ||
150 | - value = math.floor(value) | ||
151 | - if type(value) ~= "integer" then | ||
152 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], too big, value : %s", logType, field, value)) | ||
153 | - value = nil | ||
154 | - elseif value ~= oldValue then | ||
155 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], is float, value : %s", logType, field, value)) | ||
156 | - end | ||
157 | - end | ||
158 | - end | ||
159 | - return value | ||
160 | - end, | ||
161 | - float = function() | ||
162 | - if type(value) ~= "number" then | ||
163 | - value = tonumber(value) | ||
164 | - printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [float], value : %s", logType, field, value)) | ||
165 | - end | ||
166 | - return value | ||
167 | - end, | 423 | +local appid, sdkId |
424 | +local function getBaseLog(self) | ||
425 | + local uid = self:getProperty("uid") | ||
426 | + if not appid then | ||
427 | + appid, sdkId = string.match(uid, "(.*)_(.*)") | ||
428 | + if not appid then | ||
429 | + sdkId = uid | ||
430 | + appid = 0 | ||
431 | + end | ||
432 | + end | ||
433 | + local log = { | ||
434 | + server_id = server_id, | ||
435 | + timestamp = skynet.timex(), | ||
436 | + app_id = appid, | ||
437 | + plat_id = isIos(self) and 0 or 1, | ||
438 | + sdk_uid = sdkId, | ||
439 | + account_id = uid, | ||
440 | + role_id = self:getProperty("id"), | ||
441 | + role_name = self:getProperty("name"), | ||
442 | + level = self:getProperty("level"), | ||
443 | + vip = 0, | ||
444 | + device_id = self:getProperty("device"), | ||
445 | + device_model = self:getProperty("dmode"), | ||
446 | + version = "v2.0.1", | ||
447 | + client_version = self.clientVersion or "1.0.0", | ||
448 | + sys_version = self.sysVersion or "unknow", | ||
449 | + ip = self.ip or "0.0.0.0", | ||
450 | + network = self.network or "unknow", | ||
451 | + record_date = os.date("%Y%m%d"), | ||
168 | } | 452 | } |
453 | + return log | ||
454 | +end | ||
169 | 455 | ||
170 | - if typecheckfunc[ctype] then | ||
171 | - return typecheckfunc[ctype]() | ||
172 | - else | ||
173 | - printError(string.format("LOG ERROR: logType [%s] field [%s] have a new type [%s] need add check.", logType, field, ctype)) | ||
174 | - return nil | ||
175 | - end | 456 | +local function printError(info) |
457 | + print(info) | ||
458 | + print(debug.traceback()) | ||
176 | end | 459 | end |
177 | 460 | ||
178 | local RoleLog = {} | 461 | local RoleLog = {} |
179 | function RoleLog.bind(Role) | 462 | function RoleLog.bind(Role) |
180 | - function Role:log(logType, contents) | 463 | + |
464 | + function Role:log() | ||
465 | + end | ||
466 | + | ||
467 | + function Role:log_new(logType, contents) | ||
181 | contents = contents or {} | 468 | contents = contents or {} |
182 | - local _logType = LogType[logType] | ||
183 | - if not _logType then | ||
184 | - printError(string.format("LOG ERROR: new logType [%s] need Add Maping.", logType)) | 469 | + local schema = MethodType[logType] |
470 | + if not schema then | ||
471 | + printError(string.format("LOG ERROR: new logType [%s].", logType)) | ||
185 | return | 472 | return |
186 | end | 473 | end |
187 | - local doc = {} | ||
188 | - for field, ctype in pairs(commonRoleField) do | ||
189 | - if contents[field] then | ||
190 | - printError(string.format("LOG ERROR: logType [%s] had field [%s] overwrite default.", logType, field)) | ||
191 | - end | ||
192 | - doc[field] = checkType("commonRoleField", field, self:getProperty(field), ctype) | ||
193 | - end | 474 | + local doc = getBaseLog(self) |
194 | 475 | ||
195 | - local mapping = Mapping[_logType] | ||
196 | - if mapping["ucode"] and not contents["ucode"] then | ||
197 | - contents["ucode"] = self:getActionUcode() | 476 | + doc["method"] = logType |
477 | + for field, value in pairs(contents) do | ||
478 | + if not schema[ftype] then | ||
479 | + printError(string.format("LOG ERROR: logType [%s] have new field [%s], call yunying.", logType, field)) | ||
480 | + end | ||
198 | end | 481 | end |
199 | 482 | ||
200 | - for field, value in pairs(contents) do | ||
201 | - local ftype = mapping[field] | ||
202 | - if ftype then | ||
203 | - doc[field] = checkType(logType, field, value, ftype) | ||
204 | - else | ||
205 | - printError(string.format("LOG ERROR: logType [%s] have new field [%s] no type in mapping.", logType, field)) | 483 | + for field, tag in pairs(schema) do |
484 | + if not contents[field] then | ||
485 | + if tag == "ucode" then | ||
486 | + contents[field] = self:getActionUcode() | ||
487 | + else | ||
488 | + printError(string.format("LOG ERROR: logType [%s] lose field [%s].", logType, field)) | ||
489 | + end | ||
206 | end | 490 | end |
207 | end | 491 | end |
208 | if not logd then return end | 492 | if not logd then return end |
209 | - pcall(skynet.send, logd, "lua", "log", logType, doc, _logType) | 493 | + pcall(skynet.send, logd, "lua", "log", doc) |
494 | + end | ||
495 | + | ||
496 | + function Role:logItems(itemId, before, after, reason, subreason, other) | ||
497 | + local reasonType = ItemReason[reason] | ||
498 | + if not reasonType then | ||
499 | + printError(string.format("LOG ERROR: onItems no reasonType [%s].", reason)) | ||
500 | + end | ||
501 | + local itemData = csvdb["itemCsv"][itemId] | ||
502 | + if not itemData then return end | ||
503 | + self:log("onItems", { | ||
504 | + item_id = itemId, -- 道具id | ||
505 | + item_type = itemData.type, -- 道具类型,具体见枚举表中道具类型枚举表 | ||
506 | + item_level = 0, -- 道具等级 | ||
507 | + item_number = math.abs(after - before), -- 道具变化数量的绝对值 | ||
508 | + action_type = after - before > 0 and 1 or 0, -- 变化类型(玩家获取:1,玩家消耗:0) | ||
509 | + item_before = before, -- 道具变化前的数量 | ||
510 | + item_after = after, -- 道具变化后的数量 | ||
511 | + item_reason = reasonType, -- 道具流动一级原因,如抽卡、装备强化、副本掉落,可参考道具动作类型枚举表 | ||
512 | + item_subreason = subreason, -- 道具流动二级原因,抽卡:卡池ID,装备强化:装备ID,副本掉落:副本ID | ||
513 | + item_other = other, -- 其他(可包含阶数,强化等级,随机属性) | ||
514 | + }) | ||
210 | end | 515 | end |
211 | 516 | ||
212 | function Role:startActionUcode() | 517 | function Role:startActionUcode() |
@@ -225,7 +530,8 @@ function RoleLog.bind(Role) | @@ -225,7 +530,8 @@ function RoleLog.bind(Role) | ||
225 | 530 | ||
226 | function Role:getActionUcode() | 531 | function Role:getActionUcode() |
227 | return self._actionUcode | 532 | return self._actionUcode |
228 | - end | 533 | + end |
534 | + | ||
229 | 535 | ||
230 | end | 536 | end |
231 | return RoleLog | 537 | return RoleLog |
232 | \ No newline at end of file | 538 | \ No newline at end of file |
src/models/RolePlugin.lua
@@ -207,6 +207,7 @@ function RolePlugin.bind(Role) | @@ -207,6 +207,7 @@ function RolePlugin.bind(Role) | ||
207 | 207 | ||
208 | function Role:addPlayExp(addExp, params) | 208 | function Role:addPlayExp(addExp, params) |
209 | local level = self:getProperty("level") | 209 | local level = self:getProperty("level") |
210 | + local oldLevel = level | ||
210 | if not csvdb["player_expCsv"][level + 1] then | 211 | if not csvdb["player_expCsv"][level + 1] then |
211 | return | 212 | return |
212 | end | 213 | end |
@@ -222,20 +223,19 @@ function RolePlugin.bind(Role) | @@ -222,20 +223,19 @@ function RolePlugin.bind(Role) | ||
222 | newExp = csvdb["player_expCsv"][level].exp - 1 -- 没有下一级了 经验溢出太多 扣除 | 223 | newExp = csvdb["player_expCsv"][level].exp - 1 -- 没有下一级了 经验溢出太多 扣除 |
223 | end | 224 | end |
224 | end | 225 | end |
225 | - | ||
226 | - if params.log then | ||
227 | - local log = clone(params.log) | ||
228 | - if log["cint1"] or log["cint2"] then | ||
229 | - print("addPlayExp error log have cint1 or cint2 or cint3", debug.traceback()) | 226 | + if level > oldLevel then |
227 | + if params.log then | ||
228 | + local log = params.log | ||
229 | + self:log("setLevel", { | ||
230 | + level_before = oldLevel, | ||
231 | + level_changemain = log.desc, | ||
232 | + level_changedetail = log.sub, | ||
233 | + level_reward = "{}", | ||
234 | + }) | ||
235 | + else | ||
236 | + print("addPlayExp no log ", debug.traceback()) | ||
230 | end | 237 | end |
231 | - | ||
232 | - log["cint1"] = addExp | ||
233 | - log["cint2"] = newExp | ||
234 | - log["cint3"] = level | ||
235 | - | ||
236 | - self:log("player_exp", log) | ||
237 | - else | ||
238 | - print("addPlayExp no log ", debug.traceback()) | 238 | + |
239 | end | 239 | end |
240 | 240 | ||
241 | self:updateProperties({level = level, exp = newExp}) | 241 | self:updateProperties({level = level, exp = newExp}) |
@@ -259,17 +259,8 @@ function RolePlugin.bind(Role) | @@ -259,17 +259,8 @@ function RolePlugin.bind(Role) | ||
259 | end | 259 | end |
260 | 260 | ||
261 | if params.log then | 261 | if params.log then |
262 | - local log = clone(params.log) | ||
263 | - if log["cint1"] or log["cint2"] then | ||
264 | - print("addItem error log have cint1 or cint2 ", debug.traceback()) | ||
265 | - end | ||
266 | - log["cint1"] = params.itemId | ||
267 | - log["cint2"] = math.abs(params.count) | ||
268 | - if params.count <= 0 then | ||
269 | - self:log("out_item", log) | ||
270 | - else | ||
271 | - self:log("in_item", log) | ||
272 | - end | 262 | + local log = params.log |
263 | + self:logItems(params.itemId, origin, nums, log.desc, log.sub, log.other) | ||
273 | else | 264 | else |
274 | print("addItem no log ", debug.traceback()) | 265 | print("addItem no log ", debug.traceback()) |
275 | end | 266 | end |
@@ -344,12 +335,7 @@ function RolePlugin.bind(Role) | @@ -344,12 +335,7 @@ function RolePlugin.bind(Role) | ||
344 | 335 | ||
345 | if params.log then | 336 | if params.log then |
346 | local log = clone(params.log) | 337 | local log = clone(params.log) |
347 | - if log["cint1"] or log["cint2"] or log["cint3"] then | ||
348 | - print("costDiamond error log have cint1 or cint2 or cint3 ", debug.traceback()) | ||
349 | - end | ||
350 | - log["cint1"] = origin | ||
351 | - log["cint2"] = count | ||
352 | - self:log("in_diamond", log) | 338 | + self:logItems(ItemId.Diamond, origin, count, log.desc, log.sub, log.other) |
353 | else | 339 | else |
354 | print("gainDiamond no log ", debug.traceback()) | 340 | print("gainDiamond no log ", debug.traceback()) |
355 | end | 341 | end |
@@ -358,6 +344,7 @@ function RolePlugin.bind(Role) | @@ -358,6 +344,7 @@ function RolePlugin.bind(Role) | ||
358 | return true | 344 | return true |
359 | end | 345 | end |
360 | 346 | ||
347 | + | ||
361 | function Role:costDiamond(params) | 348 | function Role:costDiamond(params) |
362 | if not params or type(params) ~= "table" then return false end | 349 | if not params or type(params) ~= "table" then return false end |
363 | local count = tonum(params.count) | 350 | local count = tonum(params.count) |
@@ -392,12 +379,7 @@ function RolePlugin.bind(Role) | @@ -392,12 +379,7 @@ function RolePlugin.bind(Role) | ||
392 | 379 | ||
393 | if params.log then | 380 | if params.log then |
394 | local log = clone(params.log) | 381 | local log = clone(params.log) |
395 | - if log["cint1"] or log["cint2"] or log["cint3"] then | ||
396 | - print("costDiamond error log have cint1 or cint2 or cint3 ", debug.traceback()) | ||
397 | - end | ||
398 | - log["cint1"] = origin | ||
399 | - log["cint2"] = count | ||
400 | - self:log("out_diamond", log) | 382 | + self:logItems(ItemId.Diamond, origin, count, log.desc, log.sub, log.other) |
401 | else | 383 | else |
402 | print("costDiamond no log ", debug.traceback()) | 384 | print("costDiamond no log ", debug.traceback()) |
403 | end | 385 | end |
@@ -438,12 +420,7 @@ function RolePlugin.bind(Role) | @@ -438,12 +420,7 @@ function RolePlugin.bind(Role) | ||
438 | end | 420 | end |
439 | if params.log then | 421 | if params.log then |
440 | local log = clone(params.log) | 422 | local log = clone(params.log) |
441 | - if log["cint1"] or log["cint2"] or log["cint3"] then | ||
442 | - print("addHero error log have cint1 or cint2 or cint3 ", debug.traceback()) | ||
443 | - end | ||
444 | - log["cint1"] = heroId | ||
445 | - log["cint2"] = heroType | ||
446 | - self:log("in_hero", log) | 423 | + self:logItems(heroType + ItemStartId.Hero, 0, 1, log.desc, log.sub, log.other) |
447 | else | 424 | else |
448 | print("addHero no log ", debug.traceback()) | 425 | print("addHero no log ", debug.traceback()) |
449 | end | 426 | end |
@@ -459,33 +436,6 @@ function RolePlugin.bind(Role) | @@ -459,33 +436,6 @@ function RolePlugin.bind(Role) | ||
459 | end | 436 | end |
460 | end | 437 | end |
461 | 438 | ||
462 | - function Role:delHero(heroId, params) | ||
463 | - params = params or {} | ||
464 | - local roleId = self:getProperty('id') | ||
465 | - local hero = self.heros[heroId] | ||
466 | - local heroType = hero:getProperty("type") | ||
467 | - if not hero then return end | ||
468 | - | ||
469 | - self.heros[heroId] = nil | ||
470 | - redisproxy:pipelining(function (red) | ||
471 | - red:del(string.format(R_HERO, roleId, heroId)) | ||
472 | - red:srem(string.format(R_HEROS, roleId), heroId) | ||
473 | - end) | ||
474 | - | ||
475 | - if params.log then | ||
476 | - local log = clone(params.log) | ||
477 | - if log["cint1"] or log["cint2"] or log["cint3"] then | ||
478 | - print("delHero error log have cint1 or cint2 or cint3 ", debug.traceback()) | ||
479 | - end | ||
480 | - log["cint1"] = heroId | ||
481 | - log["cint2"] = heroType | ||
482 | - self:log("out_hero", log) | ||
483 | - else | ||
484 | - print("delHero no log ", debug.traceback()) | ||
485 | - end | ||
486 | - | ||
487 | - SendPacket(actionCodes.Hero_loadInfos, MsgPack.pack({{id = heroId, bDel = true}})) | ||
488 | - end | ||
489 | 439 | ||
490 | function Role:loadHeros() | 440 | function Role:loadHeros() |
491 | local roleId = self:getProperty("id") | 441 | local roleId = self:getProperty("id") |
@@ -1468,15 +1418,6 @@ function RolePlugin.bind(Role) | @@ -1468,15 +1418,6 @@ function RolePlugin.bind(Role) | ||
1468 | return RANK_ADV[idx] | 1418 | return RANK_ADV[idx] |
1469 | end | 1419 | end |
1470 | 1420 | ||
1471 | - -- 是否需要进行引导 | ||
1472 | - function Role:checkOverGuide(guideId) | ||
1473 | - local funcGuide = self:getProperty("funcGuide") | ||
1474 | - if funcGuide:getv(guideId, 0) > 0 then | ||
1475 | - return true | ||
1476 | - end | ||
1477 | - return false | ||
1478 | - end | ||
1479 | - | ||
1480 | -- 消除指定tag 红点 | 1421 | -- 消除指定tag 红点 |
1481 | function Role:clearRedPTag(tag) | 1422 | function Role:clearRedPTag(tag) |
1482 | local redp = self:getProperty("redp") | 1423 | local redp = self:getProperty("redp") |
@@ -1511,8 +1452,8 @@ function RolePlugin.bind(Role) | @@ -1511,8 +1452,8 @@ function RolePlugin.bind(Role) | ||
1511 | SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ result = "handled" })) | 1452 | SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ result = "handled" })) |
1512 | return | 1453 | return |
1513 | end | 1454 | end |
1514 | - | ||
1515 | - local rechargeData = csvdb["shop_rechargeCsv"][orderObject:getProperty("rechargeId")] | 1455 | + local rechargeId = orderObject:getProperty("rechargeId") |
1456 | + local rechargeData = csvdb["shop_rechargeCsv"][rechargeId] | ||
1516 | if rechargeData.rmb ~= tonumber(params.amount) then | 1457 | if rechargeData.rmb ~= tonumber(params.amount) then |
1517 | skynet.error(string.format("fake order: %s, roleId: %d, order: %s, rmb %s, get %s", | 1458 | skynet.error(string.format("fake order: %s, roleId: %d, order: %s, rmb %s, get %s", |
1518 | params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount | 1459 | params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount |
@@ -1520,16 +1461,34 @@ function RolePlugin.bind(Role) | @@ -1520,16 +1461,34 @@ function RolePlugin.bind(Role) | ||
1520 | return | 1461 | return |
1521 | end | 1462 | end |
1522 | 1463 | ||
1523 | - local reward = self:recharge({ | ||
1524 | - id = orderObject:getProperty("rechargeId"), | ||
1525 | - transactionId = params.transactionId, | ||
1526 | - pay_time = params.pay_time, | ||
1527 | - order = partnerOrderStr | 1464 | + local order_type = self:getProperty("rmbC") > 0 and 0 or 1 |
1465 | + local status, reward = self:recharge({ | ||
1466 | + id = rechargeId | ||
1528 | }) | 1467 | }) |
1529 | orderObject:setProperty("finishTime", skynet.time()) | 1468 | orderObject:setProperty("finishTime", skynet.time()) |
1530 | orderObject:setProperty("status", "finish") | 1469 | orderObject:setProperty("status", "finish") |
1531 | 1470 | ||
1532 | redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr) | 1471 | redisproxy:srem(string.format("role:%d:orders", roleId), partnerOrderStr) |
1472 | + | ||
1473 | + if not status then | ||
1474 | + status = 200 | ||
1475 | + else | ||
1476 | + status = 1000 + status | ||
1477 | + end | ||
1478 | + self:log("setOrder", { | ||
1479 | + order_status = status, -- "订单状态:100 - 开始下单(玩家还未开始付费行为记录)200 - 支付完成并发货(SDK通知可以发货时记录),300 - 订单被取消,1000 - 其他" | ||
1480 | + item_id = rechargeId, -- 道具id | ||
1481 | + item_type = rechargeData.type, -- 购买的道具类型,具体见"onItems"方法中道具类型枚举表 | ||
1482 | + item_name = rechargeData.title, -- 购买的道具名 | ||
1483 | + item_number = 1, -- 购买的道具数量 | ||
1484 | + item_level = 1, -- 购买的道具等级 | ||
1485 | + order_cost = rechargeData.rmb * 100, -- 此次消费的现金金额(单位:分),如 51800即未518元,对应客户端SDK传入的'total_fee' | ||
1486 | + order_currency = "CNY", -- 货币类型,默认为"CNY"(人民币),遵循ISO 4217规范 | ||
1487 | + order_type = order_type, -- 订单类型,首充记录为1,否则为0 | ||
1488 | + order_id = params.transactionId, -- 本条记录的订单号,对应客户端SDK返回的'bs_trade_no' | ||
1489 | + }) | ||
1490 | + if status ~= 200 then return end | ||
1491 | + | ||
1533 | SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr, | 1492 | SendPacket(actionCodes.Store_ayncPurchaseRpc, MsgPack.pack({ order = partnerOrderStr, |
1534 | result = "success", reward = reward})) | 1493 | result = "success", reward = reward})) |
1535 | 1494 | ||
@@ -1542,11 +1501,11 @@ function RolePlugin.bind(Role) | @@ -1542,11 +1501,11 @@ function RolePlugin.bind(Role) | ||
1542 | local rechargeData = csvdb["shop_rechargeCsv"][id] | 1501 | local rechargeData = csvdb["shop_rechargeCsv"][id] |
1543 | if not rechargeData then | 1502 | if not rechargeData then |
1544 | skynet.error("recharge id not exist", id) | 1503 | skynet.error("recharge id not exist", id) |
1545 | - return | 1504 | + return 1 |
1546 | end | 1505 | end |
1547 | 1506 | ||
1548 | if not self.storeData:checkRechargeRecord(rechargeData.limit, id) then | 1507 | if not self.storeData:checkRechargeRecord(rechargeData.limit, id) then |
1549 | - return 1 | 1508 | + return 2 |
1550 | end | 1509 | end |
1551 | 1510 | ||
1552 | local diamondCount = 0 | 1511 | local diamondCount = 0 |
@@ -1561,13 +1520,13 @@ function RolePlugin.bind(Role) | @@ -1561,13 +1520,13 @@ function RolePlugin.bind(Role) | ||
1561 | end | 1520 | end |
1562 | self:gainDiamond({count = diamondCount, isRecharge = true, log = {desc = "recharge", int1 = id}}) | 1521 | self:gainDiamond({count = diamondCount, isRecharge = true, log = {desc = "recharge", int1 = id}}) |
1563 | elseif rechargeData.shop == 2 then --通行证商店 | 1522 | elseif rechargeData.shop == 2 then --通行证商店 |
1564 | - reward, _ = self:award(rechargeData.itemFirst, {log = {desc = "recharge", int1 = id}}) | 1523 | + reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) |
1565 | self.storeData:onBuyCard(rechargeData.type, rechargeData.time) | 1524 | self.storeData:onBuyCard(rechargeData.type, rechargeData.time) |
1566 | elseif rechargeData.shop == 3 then -- 礼包商店 | 1525 | elseif rechargeData.shop == 3 then -- 礼包商店 |
1567 | - reward, _ = self:award(rechargeData.itemFirst, {log = {desc = "recharge", int1 = id}}) | 1526 | + reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) |
1568 | else | 1527 | else |
1569 | skynet.error("invalid recharge shop type " .. id) | 1528 | skynet.error("invalid recharge shop type " .. id) |
1570 | - return | 1529 | + return 3 |
1571 | end | 1530 | end |
1572 | 1531 | ||
1573 | if diamondCount > 0 then | 1532 | if diamondCount > 0 then |
@@ -1577,10 +1536,8 @@ function RolePlugin.bind(Role) | @@ -1577,10 +1536,8 @@ function RolePlugin.bind(Role) | ||
1577 | -- 累充 | 1536 | -- 累充 |
1578 | local rmb = rechargeData.rmb | 1537 | local rmb = rechargeData.rmb |
1579 | self:updateProperty({field = "rmbC", delta = rmb}) | 1538 | self:updateProperty({field = "rmbC", delta = rmb}) |
1580 | - | ||
1581 | - self:log("role_action", {desc = "recharge", int1 = id, int2 = rmb, key1 = params.transactionId, key2 = params.order, long1 = params.pay_time}) | ||
1582 | 1539 | ||
1583 | - return reward | 1540 | + return nil, reward |
1584 | end | 1541 | end |
1585 | 1542 | ||
1586 | --直接给玩家发送邮件,立即推送小红点 | 1543 | --直接给玩家发送邮件,立即推送小红点 |
@@ -1601,6 +1558,50 @@ function RolePlugin.bind(Role) | @@ -1601,6 +1558,50 @@ function RolePlugin.bind(Role) | ||
1601 | self.sendMailFlag = true | 1558 | self.sendMailFlag = true |
1602 | end | 1559 | end |
1603 | 1560 | ||
1561 | + -- 是否需要进行引导 | ||
1562 | + function Role:checkOverGuide(guideId,slave) | ||
1563 | + local funcGuide = self:getProperty("funcGuide") | ||
1564 | + if funcGuide:getv(guideId * 1000 + (slave or 0), 0) > 0 then | ||
1565 | + return true | ||
1566 | + end | ||
1567 | + return false | ||
1568 | + end | ||
1569 | + | ||
1570 | + -- 保存引导步骤 | ||
1571 | + function Role:saveGuide(master,slave,force) | ||
1572 | + local newerGuide = self:getProperty("newerGuide") | ||
1573 | + local guide = newerGuide:toArray(true,"=") | ||
1574 | + local sMaster, sSlave = guide[1], guide[2] | ||
1575 | + | ||
1576 | + if not force and master < sMaster then return end | ||
1577 | + if not force and master <= sMaster and slave < sSlave then return end | ||
1578 | + | ||
1579 | + local funcGuide = self:getProperty("funcGuide") | ||
1580 | + funcGuide = funcGuide:setv(master * 1000 + slave, 1) | ||
1581 | + if funcGuide:getv(master * 1000,0) == 0 then | ||
1582 | + funcGuide = funcGuide:setv(master * 1000, 1) | ||
1583 | + end | ||
1584 | + self:updateProperty({field = "funcGuide", value = funcGuide}) | ||
1585 | + self:log("onGuidePoint", {guild_type = 0, guild_id = master, guild_point = slave, guild_pass = 0}) | ||
1586 | + | ||
1587 | + newerGuide = string.format("%d=%d",master,slave) | ||
1588 | + self:updateProperty({field = "newerGuide", value = newerGuide}) | ||
1589 | + end | ||
1590 | + | ||
1591 | + -- 引导大步骤结束 | ||
1592 | + function Role:finishGuide(master) | ||
1593 | + local newerGuide = self:getProperty("newerGuide") | ||
1594 | + local guide = newerGuide:toArray(true,"=") | ||
1595 | + if guide[1] > master then return end | ||
1596 | + | ||
1597 | + local guideCsv = csvdb["guide_mainCsv"] | ||
1598 | + local lastStep = guideCsv[master][#guideCsv[master]] | ||
1599 | + if guideCsv[master + 1] then | ||
1600 | + self:updateProperty({field = "newerGuide", value = string.format("%d=%d",master + 1,1)}) | ||
1601 | + else | ||
1602 | + self:updateProperty({field = "newerGuide", value = "9999=1"}) | ||
1603 | + end | ||
1604 | + end | ||
1604 | end | 1605 | end |
1605 | 1606 | ||
1606 | return RolePlugin | 1607 | return RolePlugin |
1607 | \ No newline at end of file | 1608 | \ No newline at end of file |
src/services/agent_ctrl.lua
@@ -128,7 +128,7 @@ function _M:check_agent_status() | @@ -128,7 +128,7 @@ function _M:check_agent_status() | ||
128 | next_log_time = now + 60 | 128 | next_log_time = now + 60 |
129 | local count = table_nums(self.u2f) | 129 | local count = table_nums(self.u2f) |
130 | datacenter.set("onlineCount", count) | 130 | datacenter.set("onlineCount", count) |
131 | - pcall(skynet.send, logd, "lua", "log", "online", {count = count}, "online") | 131 | + -- pcall(skynet.send, logd, "lua", "log", "online", {count = count}, "online") |
132 | end | 132 | end |
133 | end | 133 | end |
134 | 134 |
src/services/logd.lua
@@ -55,38 +55,11 @@ skynet.register_protocol { | @@ -55,38 +55,11 @@ skynet.register_protocol { | ||
55 | end | 55 | end |
56 | } | 56 | } |
57 | 57 | ||
58 | - | ||
59 | - | ||
60 | --- 日志 index 不包含 日期的 index_suffix | ||
61 | -local IndexNoDate = { | ||
62 | - online = true, | ||
63 | -} | ||
64 | --- 不走 role log 的日志都要自行注意 mapping 设置【重要】 | ||
65 | --- index_suffix index 后缀 默认为 common | ||
66 | -function CMD.log(logType, doc, index_suffix) | ||
67 | - index_suffix = index_suffix or "common" | ||
68 | - if index_suffix == "common" then | ||
69 | - doc["@type"] = logType | ||
70 | - else | ||
71 | - if logType ~= index_suffix then -- 定制后缀 不一定有type 不相等时才有type | ||
72 | - doc["@type"] = logType | ||
73 | - end | ||
74 | - end | ||
75 | - | ||
76 | - local now = skynet.timex() | ||
77 | - doc["timestamp"] = now | ||
78 | - doc["timestamp_f"] = os.date("%Y-%m-%d %H:%M:%S", now) | ||
79 | - doc["server"] = serverId | ||
80 | - | ||
81 | - -- 自己加好 index | ||
82 | - if IndexNoDate[index_suffix] then | ||
83 | - doc["@index"] = string.format("gamelog-%s", index_suffix) | ||
84 | - else | ||
85 | - doc["@index"] = string.format("gamelog-%s-%s", os.date("%Y%m%d", now), index_suffix) | ||
86 | - end | 58 | +function CMD.log(doc) |
87 | if not socketdriver.send(log_fd, json.encode(doc) .. "\n") then | 59 | if not socketdriver.send(log_fd, json.encode(doc) .. "\n") then |
88 | if not connecting then | 60 | if not connecting then |
89 | CMD.open() -- 连一下试试 | 61 | CMD.open() -- 连一下试试 |
62 | + socketdriver.send(log_fd, json.encode(doc) .. "\n") | ||
90 | end | 63 | end |
91 | end | 64 | end |
92 | end | 65 | end |