Commit a35233c6bf15892238d8948aca89b4dea8307af8
1 parent
147ef2ce
保底和回馈
Showing
4 changed files
with
70 additions
and
5 deletions
Show diff stats
src/GlobalVar.lua
src/ProtocolCode.lua
src/actions/HeroAction.lua
| ... | ... | @@ -743,9 +743,12 @@ function _M.drawHeroRpc(agent, data) |
| 743 | 743 | local resultPool = {} |
| 744 | 744 | |
| 745 | 745 | local fillPoolFunc = { |
| 746 | - unitRate = function() | |
| 746 | + unitRate = function(fixRare, fixCamp, fixJob) | |
| 747 | 747 | local condition = {"rare", "camp", "job"} |
| 748 | 748 | local values = randomDrawCondition(csvdb["build_unitCsv"][pool], condition) |
| 749 | + values[1] = fixRare or values[1] | |
| 750 | + values[2] = fixCamp or values[2] | |
| 751 | + values[3] = fixJob or values[3] | |
| 749 | 752 | fillDrawPool(pool, resultPool, function(itemData) |
| 750 | 753 | if itemData.type ~= ItemType.Hero then return end |
| 751 | 754 | local heroData = csvdb["unitCsv"][itemData.id - ItemStartId.Hero] |
| ... | ... | @@ -756,9 +759,12 @@ function _M.drawHeroRpc(agent, data) |
| 756 | 759 | return true |
| 757 | 760 | end) |
| 758 | 761 | end, |
| 759 | - fragmentRate = function() | |
| 762 | + fragmentRate = function(fixRare, fixCamp, fixJob) | |
| 760 | 763 | local condition = {"rare", "camp", "job"} |
| 761 | 764 | local values = randomDrawCondition(csvdb["build_fragmentCsv"][pool], condition) |
| 765 | + values[1] = fixRare or values[1] | |
| 766 | + values[2] = fixCamp or values[2] | |
| 767 | + values[3] = fixJob or values[3] | |
| 762 | 768 | fillDrawPool(pool, resultPool, function(itemData) |
| 763 | 769 | if itemData.type ~= ItemType.HeroFragment then return end |
| 764 | 770 | local heroData = csvdb["unitCsv"][itemData.id] |
| ... | ... | @@ -778,16 +784,29 @@ function _M.drawHeroRpc(agent, data) |
| 778 | 784 | } |
| 779 | 785 | |
| 780 | 786 | role:costItems(cost) |
| 787 | + local floorHeroCount = role:getProperty("floorHero")[pool] or 0 | |
| 781 | 788 | |
| 782 | 789 | local ssrCount = 0 |
| 783 | 790 | local reward = {} |
| 784 | 791 | for i = 1, drawCount[drawType] do |
| 792 | + floorHeroCount = floorHeroCount + 1 | |
| 785 | 793 | |
| 786 | 794 | resultPool = {} |
| 795 | + local isFloorBack = globalCsv.draw_floor_back_counts[pool] and floorHeroCount >= globalCsv.draw_floor_back_counts[pool] | |
| 787 | 796 | while not next(resultPool) do |
| 788 | - local rateType = math.randWeight(typePool, 1) | |
| 797 | + local rateType | |
| 798 | + | |
| 799 | + if isFloorBack then | |
| 800 | + rateType = 1 --保底英雄 | |
| 801 | + else | |
| 802 | + rateType = math.randWeight(typePool, 1) | |
| 803 | + end | |
| 789 | 804 | if not fillPoolFunc[rateTypes[rateType]] then return 4 end |
| 790 | - fillPoolFunc[rateTypes[rateType]]() | |
| 805 | + if isFloorBack then | |
| 806 | + fillPoolFunc[rateTypes[rateType]](4) -- 保底 | |
| 807 | + else | |
| 808 | + fillPoolFunc[rateTypes[rateType]]() | |
| 809 | + end | |
| 791 | 810 | end |
| 792 | 811 | |
| 793 | 812 | local idx = math.randWeight(resultPool, 3) |
| ... | ... | @@ -796,6 +815,7 @@ function _M.drawHeroRpc(agent, data) |
| 796 | 815 | |
| 797 | 816 | if itemData.type == ItemType.Hero and itemData.quality == 4 then |
| 798 | 817 | ssrCount = ssrCount + 1 |
| 818 | + floorHeroCount = 0 | |
| 799 | 819 | end |
| 800 | 820 | |
| 801 | 821 | if itemData.type == ItemType.Hero and role:isHaveHero(itemData.id - ItemStartId.Hero) then |
| ... | ... | @@ -810,12 +830,51 @@ function _M.drawHeroRpc(agent, data) |
| 810 | 830 | end |
| 811 | 831 | end |
| 812 | 832 | |
| 833 | + if globalCsv.draw_floor_back_counts[pool] then | |
| 834 | + local floorHero = role:getProperty("floorHero") | |
| 835 | + floorHero[pool] = floorHeroCount | |
| 836 | + role:updateProperty({field = "floorHero", value = floorHero}) | |
| 837 | + end | |
| 838 | + | |
| 839 | + local repayHero = role:getProperty("repayHero") | |
| 840 | + repayHero = math.min(globalCsv.draw_super_repay_count, repayHero + drawCount[drawType]) | |
| 841 | + role:updateProperty({field = "repayHero", value = repayHero}) | |
| 842 | + | |
| 813 | 843 | role:checkTaskEnter("DrawHero", {pool = pool, count = drawCount[drawType]}) |
| 814 | 844 | if ssrCount > 0 then |
| 815 | 845 | role:checkTaskEnter("DrawSSR", {count = ssrCount}) |
| 816 | 846 | end |
| 847 | + | |
| 817 | 848 | SendPacket(actionCodes.Hero_drawHeroRpc, MsgPack.pack({reward = reward})) -- 这个 reward 是数组 |
| 818 | 849 | return true |
| 819 | 850 | end |
| 820 | 851 | |
| 852 | +function _M.repayHeroRpc(agent, data) | |
| 853 | + local role = agent.role | |
| 854 | + | |
| 855 | + local repayHero = role:getProperty("repayHero") | |
| 856 | + if repayHero < globalCsv.draw_super_repay_count then | |
| 857 | + return | |
| 858 | + end | |
| 859 | + | |
| 860 | + role:updateProperty({field = "repayHero", value = 0}) | |
| 861 | + local id = math.randWeight(csvdb["build_giftCsv"], "pool_1") | |
| 862 | + | |
| 863 | + local reward = {} | |
| 864 | + local itemData = csvdb["itemCsv"][id] | |
| 865 | + if itemData.type == ItemType.Hero and role:isHaveHero(itemData.id - ItemStartId.Hero) then | |
| 866 | + local fragId = itemData.id - ItemStartId.Hero | |
| 867 | + local heroData = csvdb["unitCsv"][fragId] | |
| 868 | + local count = globalCsv.draw_unit_tofragment[heroData.rare] | |
| 869 | + role:award({[fragId] = count}) | |
| 870 | + reward = {id = fragId, count = count, from = id, fcount = 1} | |
| 871 | + else | |
| 872 | + role:award({[id] = 1}) | |
| 873 | + reward = {id = id, count = 1} | |
| 874 | + end | |
| 875 | + | |
| 876 | + SendPacket(actionCodes.Hero_repayHeroRpc, MsgPack.pack({reward = reward})) | |
| 877 | + return true | |
| 878 | +end | |
| 879 | + | |
| 821 | 880 | return _M |
| 822 | 881 | \ No newline at end of file | ... | ... |
src/models/Role.lua
| ... | ... | @@ -116,6 +116,9 @@ Role.schema = { |
| 116 | 116 | rmbC = {"number", 0}, -- 人民币重置额 |
| 117 | 117 | |
| 118 | 118 | emailSync = {"number", 0}, -- 已经同步到的邮件Id |
| 119 | + | |
| 120 | + repayHero = {"number", 0}, -- 超级招募 回馈 | |
| 121 | + floorHero = {"table", {}}, -- 招募保底 -- {[poolId] = count} | |
| 119 | 122 | } |
| 120 | 123 | |
| 121 | 124 | |
| ... | ... | @@ -267,6 +270,8 @@ function Role:data() |
| 267 | 270 | dinerS = self:getProperty("dinerS"), |
| 268 | 271 | |
| 269 | 272 | rmbC = self:getProperty("rmbC"), |
| 273 | + repayHero = self:getProperty("repayHero"), | |
| 274 | + floorHero = self:getProperty("floorHero"), | |
| 270 | 275 | } |
| 271 | 276 | end |
| 272 | 277 | ... | ... |