Commit 1c35c4cf16054294222af7f83af9b3ddfdc60859

Authored by gaofengduan
1 parent 61dc5eb6

fix hero awake

src/actions/HeroAction.lua
... ... @@ -18,16 +18,17 @@ local _M = {}
18 18 function _M.levelUpRpc( agent, data )
19 19 local role = agent.role
20 20 local msg = MsgPack.unpack(data)
  21 + print("msg.id "..msg.id)
21 22 local hero = role.heros[msg.id]
22   - if not hero then return end
  23 + if not hero then return 1 end
23 24  
24   - if hero:getProperty("level") >= hero:getMaxLevel() then return end
  25 + if hero:getProperty("level") >= hero:getMaxLevel() then return 2 end
25 26 local curData = csvdb["unit_expCsv"][hero:getProperty("level")]
26 27 local cost = {[ItemId.Exp] = curData.exp, [ItemId.Gold] = curData.gold}
27   - if not role:checkItemEnough(cost) then return end
  28 + if not role:checkItemEnough(cost) then return 3 end
28 29 role:costItems(cost)
29 30 hero:updateProperty({field = "level", delta = 1})
30   -
  31 +
31 32 SendPacket(actionCodes.Hero_levelUpRpc, '')
32 33 return true
33 34 end
... ... @@ -36,16 +37,16 @@ function _M.breakRpc( agent, data )
36 37 local role = agent.role
37 38 local msg = MsgPack.unpack(data)
38 39 local hero = role.heros[msg.id]
39   - if not hero then return end
  40 + if not hero then return 1 end
40 41  
41   - if hero:getProperty("level") < hero:getMaxLevel() then return end
42   - if hero:getProperty("breakL") >= #csvdb["unit_breakCsv"] then return end
  42 + if hero:getProperty("level") < hero:getMaxLevel() then return 2 end
  43 + if hero:getProperty("breakL") >= #csvdb["unit_breakCsv"] then return 3 end
43 44 local curData = csvdb["unit_breakCsv"][hero:getProperty("breakL")]
44 45 local cost = {[ItemId.BreakCost] = curData.cost, [ItemId.Gold] = curData.gold}
45   - if not role:checkItemEnough(cost) then return end
  46 + if not role:checkItemEnough(cost) then return 4 end
46 47 role:costItems(cost)
47 48 hero:updateProperty({field = "breakL", delta = 1})
48   -
  49 +
49 50 SendPacket(actionCodes.Hero_breakRpc, '')
50 51 return true
51 52 end
... ... @@ -54,25 +55,46 @@ function _M.wakeRpc(agent, data)
54 55 local role = agent.role
55 56 local msg = MsgPack.unpack(data)
56 57 local hero = role.heros[msg.id]
57   - if not hero then return end
58   - if hero:getProperty("wakeL") >= #csvdb["unit_wakeCsv"] then return end
59   - local cost = {[hero:getProperty("type")] = csvdb["unit_wakeCsv"][hero:getProperty("wakeL")].cost}
60   - local isEnough, less = role:checkItemEnough(cost)
61   - if not isEnough then
62   - cost[ItemId.HeroFC[csvdb["unitCsv"][hero:getProperty("type")].rare]] = less[hero:getProperty("type")]
63   - if not role:checkItemEnough(cost) then return end
  58 + if not hero then return 1 end
  59 + if hero:getProperty("wakeL") >= #csvdb["unit_wakeCsv"] then return 2 end
  60 + local typ = hero:getProperty("type")
  61 + local wakeData = csvdb["unit_wakeCsv"][hero:getProperty("wakeL")]
  62 + if not wakeData then return 3 end
  63 +
  64 + local cost = {[typ] = wakeData.costFigment,[hero:getStampId()] = wakeData.costMaterial}
  65 + if not role:checkItemEnough(cost) then
  66 + return 4
64 67 end
  68 +
  69 + local skills = {}
  70 + for _,v in pairs(wakeData.skill:toArray(true,"=") ) do
  71 + local skillSet = hero:getSkillData(v)
  72 + if next(skillSet) then
  73 + local skillLv = hero:getSkillLevel(v)+1
  74 + local skillData = skillSet[skillLv]
  75 + if skillData and next(skillData) then
  76 + skills[v] = skillLv
  77 + else
  78 + return 5
  79 + end
  80 + end
  81 + end
  82 +
65 83 role:costItems(cost)
  84 + for k,v in pairs(skills) do
  85 + hero:updateProperty({field = "skillL", value = hero:getProperty("skillL"):setv(k, v)})
  86 + end
66 87 hero:updateProperty({field = "wakeL", delta = 1})
67 88  
68 89 SendPacket(actionCodes.Hero_wakeRpc, '')
69 90 return true
70 91 end
71 92  
  93 +-- 已取消技能升级功能,觉醒时自动升级技能
72 94 function _M.skillUpRpc(agent, data)
73 95 local role = agent.role
74 96 local msg = MsgPack.unpack(data)
75   - local index = msg.skillIdx -- 第几个技能 -- 1 2 3
  97 + local index = msg.skillIdx -- 第几个技能 -- 1 2 3
76 98 local hero = role.heros[msg.id]
77 99 if not hero then return end
78 100 local curLevel = hero:getSkillLevel(index)
... ... @@ -96,8 +118,8 @@ function _M.talentRpc(agent, data)
96 118 local talent = hero:getProperty("talent")
97 119 local curStage = talent:getv(0, 1)
98 120 if curStage > csvdb["unit_breakCsv"][hero:getProperty("breakL")].talent then return end
99   -
100   - local curData = csvdb["unit_talentCsv"][curStage]
  121 +
  122 + local curData = csvdb["unit_talentCsv"][curStage]
101 123 if not curData then return end
102 124  
103 125 local level = talent:getv(index, 0)
... ... @@ -216,7 +238,7 @@ function _M.commentHeroRpc(agent, data)
216 238 end
217 239 local commentId = tostring(redisproxy:hincrby("hero:comment:autoincr", "hero:" .. heroType, 1))
218 240 local comment = {
219   - commentId = commentId,
  241 + commentId = commentId,
220 242 content = content,
221 243 roleId = role:getProperty("id"),
222 244 name = role:getProperty("name"),
... ... @@ -291,14 +313,14 @@ function _M.likeCommentRpc(agent, data)
291 313 elseif actType == 2 then
292 314 add = -1
293 315 else
294   - return
  316 + return
295 317 end
296 318  
297   - local result = {status = 0}
298   - local commentIndex = heroType .. ":" .. commentId
  319 + local result = {status = 0}
  320 + local commentIndex = heroType .. ":" .. commentId
299 321 local commentRoleKey = string.format("comment:%d:like", role:getProperty("id"))
300 322 local redret = redisproxy:pipelining(function (red)
301   - red:hexists(commentKey.commentKey, commentId)
  323 + red:hexists(commentKey.commentKey, commentId)
302 324 red:lrem(commentRoleKey, 1, commentIndex)
303 325 red:lpush(commentRoleKey, commentIndex)
304 326 red:ltrim(commentRoleKey, 0, 999)
... ... @@ -373,7 +395,7 @@ function _M.loveTaskRpc(agent, data)
373 395 local curType = hero:getProperty("type")
374 396 local curPlus = csvdb["unit_love_plusCsv"][curType]
375 397 if not curPlus or curL >= curPlus.limit then return end
376   -
  398 +
377 399 local curEffect = csvdb["unit_love_effectCsv"][curL]
378 400 if not curEffect or curExp < curEffect.loveValue then return end
379 401  
... ... @@ -388,7 +410,7 @@ function _M.loveTaskRpc(agent, data)
388 410 end
389 411 hero:updateProperty({field = "loveExp", value = newExp})
390 412 hero:updateProperty({field = "loveL", value = curL + 1})
391   -
  413 +
392 414 if role:getProperty("loveStatus"):getv(curType, 0) < curL + 1 then
393 415 role:changeUpdates({{type = "loveStatus", field = curType, value = curL + 1}}) -- 总的
394 416 end
... ...
1   -Subproject commit e63f75d1f6fefcda1a84322964d5a5a158a8a4a6
  1 +Subproject commit b4fb9d39bc675e3d277e308f6f7c5f4184f8b55e
... ...
src/models/Hero.lua
... ... @@ -79,4 +79,13 @@ function Hero:data()
79 79 }
80 80 end
81 81  
  82 +function Hero:getStampId()
  83 + local typs = {
  84 + [1]=50,
  85 + [2]=51,
  86 + [3]=52,
  87 + }
  88 + return typs[csvdb["unitCsv"][self:getProperty("type")].camp]
  89 +end
  90 +
82 91 return Hero
83 92 \ No newline at end of file
... ...
src/models/HeroPlugin.lua
... ... @@ -47,15 +47,15 @@ function HeroPlugin.bind(Hero)
47 47  
48 48 local talentAttrS = {}
49 49 -- 天赋阶段属性
50   - for i = 1, (talent:getv(0, 1) - 1) do
  50 + for i = 1, (talent:getv(0, 1) - 1) do
51 51 local curData = csvdb["unit_talentCsv"][i]
52 52 local effect = curData[#curData].effect:toArray(true, "=")
53 53 talentAttrS[AttsEnumEx[effect[1]]] = (talentAttrS[AttsEnumEx[effect[1]]] or 0) + effect[2]
54 54 end
55 55 -- 四个基础属性
56   - local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)]
  56 + local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)]
57 57 if not curData then -- 已经满阶段了
58   - curData = csvdb["unit_talentCsv"][#csvdb["unit_talentCsv"]]
  58 + curData = csvdb["unit_talentCsv"][#csvdb["unit_talentCsv"]]
59 59 local strength = curData[#curData].strength
60 60 for i = 1, 4 do
61 61 talentAttrS[AttsEnumEx[i]] = (talentAttrS[AttsEnumEx[i]] or 0) + strength
... ... @@ -69,7 +69,7 @@ function HeroPlugin.bind(Hero)
69 69 --好感度
70 70 local loveUp = {}
71 71 for i = 0, self:getProperty("loveL") do
72   - local reward = csvdb["unit_love_effectCsv"][i]["reward"]
  72 + local reward = csvdb["unit_love_effectCsv"][i]["reward"]
73 73 for attrId, value in pairs(reward:toNumMap()) do
74 74 loveUp[AttsEnumEx[attrId]] = (loveUp[AttsEnumEx[attrId]] or 0) + value
75 75 end
... ... @@ -111,24 +111,25 @@ function HeroPlugin.bind(Hero)
111 111 return battleValue
112 112 end
113 113  
  114 + -- 技能1234 对应必杀技,冒险技,被动技,战斗技
114 115 function Hero:getSkillLevel(idx)
115 116 return self:getProperty("skillL"):getv(idx, 1)
116 117 end
117 118  
118 119 function Hero:getSkillData(idx, skin)
119   - local unitData = csvdb["unitCsv"][self:getSkinId(skin)]
  120 + local unitData = csvdb["unitCsv"][self:getProperty("type")]
120 121 if idx == 1 then
121   - return csvdb["skill_blockCsv"][unitData.block]
122   - elseif idx == 2 then
123 122 return csvdb["skill_specialCsv"][unitData.special]
124   - elseif idx == 3 then
125   - return csvdb["skill_passiveCsv"][unitData.passive]
126   - elseif idx == 4 then --冒险技能
  123 + elseif idx == 2 then
127 124 if unitData.adv > 1000 then
128 125 return csvdb["adv_skill_passiveCsv"][unitData.adv]
129 126 else
130 127 return csvdb["adv_skillCsv"][unitData.adv]
131 128 end
  129 + elseif idx == 3 then
  130 + return csvdb["skill_passiveCsv"][unitData.passive]
  131 + elseif idx == 4 then
  132 + return csvdb["skill_blockCsv"][unitData.block]
132 133 end
133 134 return {}
134 135 end
... ...