Commit 1663460594b058c17c9d4eda37410cd03be7e579

Authored by liuzujun
1 parent 96d591f7

多队挂机,天赋道具合成

src/ProtocolCode.lua
... ... @@ -99,6 +99,7 @@ actionCodes = {
99 99 Hero_unlockPoolRpc = 222,
100 100 Hero_changeCrown = 223,
101 101 Hero_drawHeroExtraRewardNtf = 224,
  102 + Hero_itemComposeRpc = 225,
102 103  
103 104 Hang_startRpc = 251,
104 105 Hang_checkRpc = 252,
... ... @@ -217,9 +218,8 @@ actionCodes = {
217 218 Activity_actCalendaTaskRpc = 655,
218 219 Activity_actPaySignRpc = 656,
219 220  
220   - Radio_listRpc = 700, -- 获取电台讨伐任务列表
221   - Radio_startQuestRpc = 701,
222   - Radio_finishQuestRpc = 702,
  221 + Radio_startQuestRpc = 700,
  222 + Radio_finishQuestRpc = 701,
223 223 }
224 224  
225 225 rpcResponseBegin = 10000
... ...
src/actions/HeroAction.lua
... ... @@ -1038,4 +1038,23 @@ function _M.changeCrown(agent, data)
1038 1038 return true
1039 1039 end
1040 1040  
  1041 +function _M.itemComposeRpc(agent, data)
  1042 + local role = agent.role
  1043 + local msg = MsgPack.unpack(data)
  1044 +
  1045 + local itemId = msg.id
  1046 + local count = msg.count
  1047 + if not csvdb["itemCsv"][itemId] then return 1 end
  1048 + local config = csvdb["item_processCsv"][itemId]
  1049 + if not config then return 2 end
  1050 +
  1051 + local cost = config.cost:toNumMap()
  1052 + if not role:checkItemEnough(cost) then return 2 end
  1053 + role:costItems(cost, {log = {desc = "itemCompose", int1 = itemId, int2 = count}})
  1054 + role:award({[itemId] = count}, {log = {desc = "itemCompose"}})
  1055 +
  1056 + SendPacket(actionCodes.Hero_itemComposeRpc, "")
  1057 + return true
  1058 +end
  1059 +
1041 1060 return _M
... ...
src/actions/RadioAction.lua
1 1 local _M = {}
2 2  
3   -function _M.listRpc(agent, data)
4   - local role = agent.role
5   - local roleId = role:getProperty("id")
6   - local now = skynet.timex()
7   - local result = {}
8   -
  3 +-- 获取英雄大成功率
  4 +local function getHeroCoef(hero, condition)
  5 + -- 基础概率
  6 + local rareMap = {[HeroQuality.N] = 10, [HeroQuality.R] = 10, [HeroQuality.SR] = 15, [HeroQuality.SSR] = 20}
  7 + local rare = hero:getRare()
  8 + local result = 0
  9 + for _, it in ipairs(condition:toTableArray(true)) do
  10 + local type = it[1]
  11 + local value = it[2]
  12 + local add = it[3]
  13 + if type == 1 then -- 种族加成
  14 + if hero:getCamp() == value then
  15 + result = result + add
  16 + end
  17 + elseif type == 2 then -- 定位加成
  18 + if hero:getPosition() == value then
  19 + result = result + add
  20 + end
  21 + end
  22 + end
9 23  
10   - SendPacket(actionCodes.Email_listRpc, MsgPack.pack({list = result}))
11   - return true
  24 + return result + (rareMap[rare] or 0)
12 25 end
13 26  
14   --- 获取英雄大成功率
15   -local function getHeroCoef()
16   - return 0
  27 +local function getQuestMax(role)
  28 + local count = 0
  29 + for _, carbonId in ipairs(globalCsv.crusade_team_unlock or {}) do
  30 + if role:checkHangPass(carbonId) then
  31 + count = count + 1
  32 + end
  33 + end
  34 +
  35 + return count + (globalCsv.cursade_team_count_initial or 0)
17 36 end
18 37  
19 38 function _M.startQuestRpc(agent, data)
... ... @@ -22,11 +41,67 @@ function _M.startQuestRpc(agent, data)
22 41 local id = msg.id
23 42 local heros = msg.heros
24 43 local result = {}
  44 + local radioTask = role:getProperty("radioTask")
  45 + if table.numbers(radioTask) >= getQuestMax(role) then
  46 + return 1
  47 + end
25 48 -- check id
  49 + local config = csvdb["crusadeCsv"][id]
  50 + if not config then return 2 end
  51 + if not role:checkHangPass(config.unlock) then return 3 end
  52 + if radioTask[id] then return 4 end
26 53 -- check hero
  54 + --1=指定等级=人数
  55 + --2=指定稀有度=人数
  56 + --3=人数
  57 + local needHeroCnt = 0
  58 + local lvlMap = {}
  59 + local rareMap = {}
  60 + for _, it in ipairs(config.condition:toTableArray(true)) do
  61 + local type = it[1]
  62 + if type == 1 then
  63 + lvlMap[1] = it[2]
  64 + lvlMap[2] = it[3]
  65 + elseif type == 2 then
  66 + rareMap[1] = it[2]
  67 + rareMap[2] = it[3]
  68 + elseif type == 3 then
  69 + needHeroCnt = it[2]
  70 + end
  71 + end
  72 + for _, heroId in ipairs(heros) do
  73 + local hero = role.heros[heroId]
  74 + if hero then
  75 + needHeroCnt = needHeroCnt - 1
  76 + if next(lvlMap) then
  77 + if hero:getProperty("level") >= lvlMap[1] then
  78 + lvlMap[2] = lvlMap[2] - 1
  79 + if lvlMap[2] <= 0 then
  80 + lvlMap = {}
  81 + end
  82 + end
  83 + end
  84 + if next(rareMap) then
  85 + if hero:getRare() >= rareMap[1] then
  86 + rareMap[2] = rareMap[2] - 1
  87 + end
  88 + if rareMap[2] <= 0 then
  89 + rareMap = {}
  90 + end
  91 + end
  92 + end
  93 + end
  94 + if needHeroCnt > 0 or next(rareMap) or next(lvlMap) then
  95 + return 5
  96 + end
27 97 -- start quest, set finish time
  98 + local taskData = {}
  99 + taskData["time"] = skynet.timex() + config.time
  100 + taskData["heros"] = heros
  101 + radioTask[id] = taskData
  102 + role:updateProperty({field="radioTask", value=radioTask, notNotify=true})
28 103  
29   - SendPacket(actionCodes.Email_listRpc, MsgPack.pack({list = result}))
  104 + SendPacket(actionCodes.Radio_startQuestRpc, MsgPack.pack({id=id, task=taskData}))
30 105 return true
31 106 end
32 107  
... ... @@ -34,13 +109,50 @@ function _M.finishQuestRpc(agent, data)
34 109 local role = agent.role
35 110 local msg = MsgPack.unpack(data)
36 111 local id = msg.id
37   - local result = {}
38 112 -- check finish time
  113 + local radioTask = role:getProperty("radioTask")
  114 + local task = radioTask[id]
  115 + if not task then return 1 end
  116 + if skynet.timex() < task.time then return 2 end
39 117 -- check id
  118 + local config = csvdb["crusadeCsv"][id]
  119 + if not config then return 3 end
  120 + local carbonData = csvdb["idle_battleCsv"][config.unlock]
  121 + if not carbonData then return 4 end
40 122 -- get heros
  123 + local totalCoef = 0
  124 + for _, heroId in ipairs(task.heros) do
  125 + local hero = role.heros[heroId]
  126 + if hero then
  127 + totalCoef = totalCoef + getHeroCoef(hero, config.success)
  128 + end
  129 + end
41 130 -- send award
  131 + local bigSuccess = false
  132 + local result = math.randomInt(0, 100)
  133 + if result < totalCoef then
  134 + bigSuccess = true
  135 + end
  136 + local money = math.ceil(carbonData.money / 5) * config.time * config.money_clear
  137 + local exp = math.ceil(carbonData.exp / 5) * config.time * config.exp_clear
  138 + local itemReward = config.item_clear_special:toNumMap()
  139 + itemReward[ItemId.Gold] = (itemReward[ItemId.Gold] or 0) + money
  140 + itemReward[ItemId.Exp] = (itemReward[ItemId.Exp] or 0) + exp
  141 + if bigSuccess then
  142 + for key, value in pairs(itemReward) do
  143 + itemReward[key] = math.ceil(1.5 * value)
  144 + end
  145 + end
  146 +
  147 + local r, change = role:award(itemReward, {log = {desc = "radioQuest", int1 = id}})
  148 +
  149 + radioTask[id] = nil
  150 + role:updateProperty({field="radioTask", value=radioTask, notNotify = true})
42 151  
43   - SendPacket(actionCodes.Email_listRpc, MsgPack.pack({list = result}))
  152 + local msg = role:packReward(r, change)
  153 + msg["big"] = bigSuccess
  154 + msg["id"] = id
  155 + SendPacket(actionCodes.Radio_finishQuestRpc, MsgPack.pack(msg))
44 156 return true
45 157 end
46 158  
... ...
1   -Subproject commit 0f60ee4ca695995942574454c696747a4390ee5d
  1 +Subproject commit b4c54b229a7ac8c5ac938e72bd6cc4870a264c58
... ...
src/models/Hero.lua
... ... @@ -115,4 +115,8 @@ function Hero:getRare()
115 115 return csvdb["unitCsv"][self:getProperty("type")].rare
116 116 end
117 117  
  118 +function Hero:getPosition()
  119 + return csvdb["unitCsv"][self:getProperty("type")].position
  120 +end
  121 +
118 122 return Hero
119 123 \ No newline at end of file
... ...
src/models/Role.lua
... ... @@ -181,6 +181,7 @@ Role.schema = {
181 181 feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数
182 182  
183 183 calTask = {"table", {}}, -- 英雄令活动 日历任务活动
  184 + radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv
184 185 }
185 186  
186 187  
... ... @@ -406,6 +407,7 @@ function Role:data()
406 407 feedback = self:getProperty("feedback"),
407 408 ctime = self:getProperty("ctime"),
408 409 calTask = self:getProperty("calTask"),
  410 + radioTask = self:getProperty("radioTask"),
409 411 }
410 412 end
411 413  
... ...
src/models/RoleLog.lua
... ... @@ -107,6 +107,8 @@ local ItemReason = {
107 107 unlockPool = 1208, -- 解锁英雄定向抽卡池
108 108 downloadCv = 1209, -- 下载 cv包奖励
109 109 refer = 1210, -- 穿戴
  110 + itemCompose = 1211, -- 天赋道具合成
  111 + radioQuest = 1212, -- 电台任务奖励
110 112  
111 113 -- pvp
112 114 pvpCHead = 1301, -- pvp 跨服竞技场头像
... ...