Commit 96d591f7430fe07690fa50415fdeac2584e15fe0
1 parent
50bcef87
天赋升级修改,增加英雄信赖
Showing
5 changed files
with
95 additions
and
86 deletions
Show diff stats
src/actions/AdvAction.lua
... | ... | @@ -266,6 +266,16 @@ function _M.startHangRpc(agent, data) |
266 | 266 | return true |
267 | 267 | end |
268 | 268 | |
269 | +local function addHeroFaith(role, heroId, exp) | |
270 | + local hero = role.heros[heroId] | |
271 | + if not hero then | |
272 | + return | |
273 | + end | |
274 | + | |
275 | + hero:addHeroFaith(exp) | |
276 | + return hero:getProperty("faith") | |
277 | +end | |
278 | + | |
269 | 279 | function _M.quickHangRpc(agent, data) |
270 | 280 | local role = agent.role |
271 | 281 | local msg = MsgPack.unpack(data) |
... | ... | @@ -333,7 +343,7 @@ function _M.endHangRpc(agent, data) |
333 | 343 | end |
334 | 344 | adv_idle_time = adv_idle_time * 60 |
335 | 345 | |
336 | - local reward, isFull, change | |
346 | + local reward, isFull, change, heroFaithMap | |
337 | 347 | if skynet.timex() >= info.time then |
338 | 348 | -- 最新需求加成取消 |
339 | 349 | --[[ |
... | ... | @@ -362,6 +372,14 @@ function _M.endHangRpc(agent, data) |
362 | 372 | |
363 | 373 | if not maxCampsite then return end |
364 | 374 | ]] |
375 | + -- 增加英雄信赖 | |
376 | + local exp = info.duration / 60 | |
377 | + heroFaithMap = {} | |
378 | + for _, heroId in pairs(info.format.heros) do | |
379 | + local curFaith = addHeroFaith(role, heroId, exp) | |
380 | + heroFaithMap[heroId] = curFaith | |
381 | + end | |
382 | + | |
365 | 383 | local totalReward = campSiteData.idleReward_1 .. " " .. campSiteData.idleReward_2 |
366 | 384 | |
367 | 385 | local idleReward = totalReward:toNumMap() |
... | ... | @@ -389,7 +407,7 @@ function _M.endHangRpc(agent, data) |
389 | 407 | |
390 | 408 | role:checkTaskEnter("AdvHang", {}) |
391 | 409 | |
392 | - SendPacket(actionCodes.Adv_endHangRpc, MsgPack.pack({reward = reward, change = change, isFull = isFull})) | |
410 | + SendPacket(actionCodes.Adv_endHangRpc, MsgPack.pack({reward = reward, change = change, isFull = isFull, heroFaith = heroFaithMap})) | |
393 | 411 | return true |
394 | 412 | end |
395 | 413 | ... | ... |
src/actions/HeroAction.lua
... | ... | @@ -143,74 +143,45 @@ function _M.talentRpc(agent, data) |
143 | 143 | local hero = role.heros[msg.id] |
144 | 144 | if not hero then return 1 end |
145 | 145 | |
146 | - local index = msg.index -- 第几个天赋 | |
147 | - local need = {[0] = 1, [1] = 1, [2] = 1, [3] = 1, [4] = 1} | |
148 | - if not need[index] then return 2 end | |
149 | - | |
150 | 146 | local talent = hero:getProperty("talent") |
147 | + local heroCfgId = hero:getProperty("type") | |
151 | 148 | local curStage = talent:getv(0, 1) |
152 | - local curData = csvdb["unit_talentCsv"][curStage] | |
153 | - if not curData then return 4 end | |
149 | + local curLevel = talent:getv(1, 1) | |
150 | + local curData = csvdb["unit_talent_"..heroCfgId.."Csv"][curStage] | |
151 | + if not curData then return 1 end | |
154 | 152 | local oldSkillLv = hero:getSkillLevel(1) |
155 | 153 | |
156 | 154 | |
157 | 155 | local cost = {} |
158 | - if index == 0 then | |
159 | - --是否进阶 | |
160 | - local max = true | |
161 | - for i = 1, 4 do | |
162 | - if talent:getv(i, 0) < #curData then | |
163 | - max = false | |
164 | - break | |
165 | - end | |
166 | - end | |
167 | - if max then | |
168 | - talent = talent:setv(0, curStage + 1) | |
169 | - for i = 1, 4 do | |
170 | - talent = talent:setv(i, 0) | |
171 | - end | |
172 | - else | |
173 | - return 12 | |
174 | - end | |
156 | + if curLevel == #curData then | |
157 | + talent = talent:setv(0, curStage + 1) | |
158 | + talent = talent:setv(1, 1) | |
175 | 159 | else |
176 | - | |
177 | - local level = talent:getv(index, 0) | |
178 | - if level >= #curData then return 5 end | |
160 | + if curLevel > #curData then return 2 end | |
179 | 161 | |
180 | - local talentData = curData[level] | |
181 | - if not talentData then return end | |
162 | + local talentData = curData[curLevel] | |
163 | + if not talentData then return 3 end | |
182 | 164 | |
183 | - if talentData.lvRequire > hero:getProperty("level") then return 6 end | |
165 | + if talentData.lvRequire > hero:getProperty("level") then return 4 end | |
184 | 166 | |
185 | 167 | cost = talentData.money:toNumMap() |
186 | - local cost2 = talentData.cost:toNumMap() | |
187 | - for k,v in pairs(cost2) do | |
188 | - cost[globalCsv.unit_talent_cost[csvdb["unitCsv"][hero:getProperty("type")].camp][k]] = v | |
189 | - end | |
190 | - if not role:checkItemEnough(cost) then return 6 end | |
168 | + if not role:checkItemEnough(cost) then return 5 end | |
191 | 169 | role:costItems(cost, {log = {desc = "heroTalent", int1 = msg.id, int2 = hero:getProperty("type")}}) |
192 | - talent = talent:incrv(index, 1) | |
193 | - | |
194 | - | |
195 | - local aheadLevel = 0 | |
196 | - for i = 1, talent:getv(0, 1) - 1 do | |
197 | - aheadLevel = aheadLevel + #csvdb["unit_talentCsv"][i] | |
198 | - end | |
199 | - aheadLevel = aheadLevel + talent:getv(index, 0) | |
200 | - | |
201 | - role:checkTaskEnter("HeroTalent", {heroType = hero:getProperty("type"), alv = aheadLevel}) | |
170 | + talent = talent:setv(1, curLevel + 1) | |
202 | 171 | end |
172 | + curStage = talent:getv(0, 1) | |
173 | + role:checkTaskEnter("HeroTalent", {heroType = hero:getProperty("type"), alv = curStage}) | |
203 | 174 | |
204 | 175 | hero:updateProperty({field = "talent", value = talent}) |
205 | 176 | |
206 | 177 | role:log("hero_talent", { |
207 | 178 | hero_id = hero:getProperty("type"), --英雄ID |
208 | - hero_talent_id = index, --天赋ID | |
179 | + hero_talent_id = curStage, --天赋ID | |
209 | 180 | hero_talent_cost = cost, -- 英雄天赋升级消耗,json格式记录,{道具ID1:消耗数量1,道具ID2:消耗数量2,………...} |
210 | 181 | hero_talent_levelbef = oldSkillLv, -- 英雄技能升级前等级 |
211 | 182 | hero_talent_level = hero:getSkillLevel(1), -- 英雄技能升级后等级 |
212 | 183 | }) |
213 | - hero:mylog({desc = "talent", int1 = index, int2 = talent:getv(index, 0)}) | |
184 | + hero:mylog({desc = "talent", int1 = talent:getv(0, 1), int2 = talent:getv(1, 1)}) | |
214 | 185 | |
215 | 186 | SendPacket(actionCodes.Hero_talentRpc, '') |
216 | 187 | return true |
... | ... | @@ -641,6 +612,7 @@ function _M.getResetRewardRpc(agent, data) |
641 | 612 | local level = hero:getProperty("level") |
642 | 613 | local breakL = hero:getProperty("breakL") |
643 | 614 | local talent = hero:getProperty("talent") |
615 | + local heroCfgId = hero:getProperty("type") | |
644 | 616 | |
645 | 617 | local tmpLevel = level |
646 | 618 | if level <= 1 and talent == "" then return end |
... | ... | @@ -669,32 +641,18 @@ function _M.getResetRewardRpc(agent, data) |
669 | 641 | end |
670 | 642 | |
671 | 643 | local stage = talent:getv(0, 1) |
672 | - local tlevel = {talent:getv(1, 0), talent:getv(2, 0), talent:getv(3, 0), talent:getv(4, 0)} | |
644 | + local curTalentLvl = talent:getv(1, 1) | |
645 | + --local tlevel = {talent:getv(1, 0), talent:getv(2, 0), talent:getv(3, 0), talent:getv(4, 0)} | |
673 | 646 | |
674 | - local talentCostIds = globalCsv.unit_talent_cost[csvdb["unitCsv"][hero:getProperty("type")].camp] | |
675 | 647 | while stage > 0 do |
676 | - local curData = csvdb["unit_talentCsv"][stage] | |
677 | - for level = math.max(table.unpack(tlevel)), 1, -1 do | |
678 | - local add = 0 | |
679 | - for i = 1, 4 do | |
680 | - if tlevel[i] == level then | |
681 | - add = add + 1 | |
682 | - tlevel[i] = tlevel[i] - 1 | |
683 | - end | |
684 | - end | |
685 | - local talentData = curData[level - 1] | |
648 | + local curData = csvdb["unit_talent_"..heroCfgId.."Csv"][stage] | |
649 | + for lvl = 1, curTalentLvl - 1 do | |
650 | + local talentData = curData[lvl] | |
686 | 651 | for itemId, count in pairs(talentData.money:toNumMap()) do |
687 | - reward[itemId] = (reward[itemId] or 0) + count * add | |
688 | - end | |
689 | - for idx , count in pairs(talentData.cost:toNumMap()) do | |
690 | - reward[talentCostIds[idx]] = (reward[talentCostIds[idx]] or 0) + count * add | |
652 | + reward[itemId] = (reward[itemId] or 0) + count | |
691 | 653 | end |
692 | 654 | end |
693 | 655 | stage = stage - 1 |
694 | - curData = csvdb["unit_talentCsv"][stage] | |
695 | - if curData then | |
696 | - tlevel = {#curData, #curData, #curData, #curData} | |
697 | - end | |
698 | 656 | end |
699 | 657 | |
700 | 658 | local equip = hero:getProperty("equip") | ... | ... |
src/models/Hero.lua
... | ... | @@ -15,6 +15,7 @@ Hero.schema = { |
15 | 15 | -- loveL = {"number", 0}, --好感度等级 |
16 | 16 | equip = {"string",""}, --装备 type=level |
17 | 17 | rune = {"string",""}, --零件 type=id |
18 | + faith = {"number", 0}, -- 信赖 | |
18 | 19 | } |
19 | 20 | |
20 | 21 | function Hero:ctor( properties ) |
... | ... | @@ -102,6 +103,7 @@ function Hero:data() |
102 | 103 | -- loveL = self:getProperty("loveL"), |
103 | 104 | equip = self:getProperty("equip"), |
104 | 105 | rune = self:getProperty("rune"), |
106 | + faith = self:getProperty("faith") | |
105 | 107 | } |
106 | 108 | end |
107 | 109 | ... | ... |
src/models/HeroPlugin.lua
... | ... | @@ -48,34 +48,44 @@ function HeroPlugin.bind(Hero) |
48 | 48 | local breakL = params.breakL or self:getProperty("breakL") |
49 | 49 | local wakeL = params.wakeL or self:getProperty("wakeL") |
50 | 50 | local talent = params.talent or self:getProperty("talent") |
51 | - | |
51 | + local heroCfgId = self:getProperty("type") | |
52 | 52 | --天赋 |
53 | 53 | local talentAttrS = {} |
54 | 54 | |
55 | 55 | -- 四个基础属性 |
56 | 56 | local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)] |
57 | + local curTalentLvl = 0 | |
57 | 58 | if not curData then -- 已经满阶段了 |
58 | - curData = csvdb["unit_talentCsv"][#csvdb["unit_talentCsv"]] | |
59 | - local strength = curData[#curData].strength | |
60 | - for i = 1, 4 do | |
61 | - talentAttrS[TalentAttsEnumEx[i]] = (talentAttrS[TalentAttsEnumEx[i]] or 0) + strength | |
62 | - end | |
59 | + local cfgName = "unit_talent_"..heroCfgId.."Csv" | |
60 | + curData = csvdb[cfgName][#csvdb[cfgName]] | |
63 | 61 | else |
64 | - for i = 1, 4 do --4个天赋 | |
65 | - talentAttrS[TalentAttsEnumEx[i]] = (talentAttrS[TalentAttsEnumEx[i]] or 0) + curData[talent:getv(i, 0)].strength | |
66 | - end | |
62 | + curTalentLvl = talent:getv(1, 1) | |
67 | 63 | end |
68 | - --阶段属性 | |
69 | - for i = 1, (talent:getv(0, 1) - 1) do | |
70 | - local curData = csvdb["unit_talentCsv"][i] | |
71 | - local effect = curData[#curData].effect:toArray(true, "=") | |
72 | - talentAttrS[AttsEnumEx[effect[1]]] = (talentAttrS[AttsEnumEx[effect[1]]] or 0) + effect[2] | |
64 | + for lvl, cfg in pairs(curData) do | |
65 | + if lvl < curTalentLvl or curTalentLvl == 0 then | |
66 | + if cfg.effect ~= 99 then | |
67 | + local curVal = talentAttrS[cfg.effect] or 0 | |
68 | + if curVal < cfg.strength then | |
69 | + talentAttrS[cfg.effect] = cfg.strength | |
70 | + end | |
71 | + end | |
72 | + end | |
73 | 73 | end |
74 | - | |
75 | 74 | |
76 | 75 | for _, attrName in pairs(AttsEnumEx) do |
77 | 76 | if talentAttrS[attrName] then |
78 | - talentAttrS[attrName] = addAttr(unitData[attrName], talentAttrS[attrName], 1, attrName) | |
77 | + talentAttrS[attrName] = addAttr(unitData[attrName], talentAttrS[attrName], 0, attrName) | |
78 | + end | |
79 | + end | |
80 | + | |
81 | + -- 信赖属性 | |
82 | + local faithAttr = {} | |
83 | + local faith = self:getProperty("faith") | |
84 | + local faithConfig = csvdb["unit_trustCsv"] | |
85 | + for lvl = 1, #faithConfig do | |
86 | + if faith >= faithConfig[lvl].exp then | |
87 | + local add = faithConfig[lvl]["position_"..unitData.position]:toArray(true, "=") | |
88 | + faithAttr[add[1]] = (faithAttr[add[1]] or 0) + add[2] | |
79 | 89 | end |
80 | 90 | end |
81 | 91 | |
... | ... | @@ -90,7 +100,7 @@ function HeroPlugin.bind(Hero) |
90 | 100 | for attr, value in pairs(attrs) do |
91 | 101 | attrs[attr] = attrs[attr] + addAttr(attrs[attr], lData[attr .. "Level"], 1, attr) |
92 | 102 | attrs[attr] = attrs[attr] + addAttr(attrs[attr], blData[attr .. "Level"], 1, attr) |
93 | - attrs[attr] = attrs[attr] + addAttr(attrs[attr], wData[attr .. "Level"], 1, attr) + (talentAttrS[attr] or 0) | |
103 | + attrs[attr] = attrs[attr] + addAttr(attrs[attr], wData[attr .. "Level"], 1, attr) + (talentAttrS[attr] or 0) + (faithAttr[attr] or 0) | |
94 | 104 | end |
95 | 105 | |
96 | 106 | return attrs |
... | ... | @@ -296,6 +306,27 @@ function HeroPlugin.bind(Hero) |
296 | 306 | end |
297 | 307 | return |
298 | 308 | end |
309 | + | |
310 | + -- 添加英雄信赖 | |
311 | + function Hero:addHeroFaith(exp) | |
312 | + local faith = self:getProperty("faith") | |
313 | + local config = csvdb["unit_trustCsv"] | |
314 | + local star = self:getProperty("wakeL") | |
315 | + local tmpExp = faith + exp | |
316 | + for lvl = 1, #config do | |
317 | + if star < config[lvl].star then | |
318 | + break | |
319 | + end | |
320 | + if tmpExp < config[lvl].exp then | |
321 | + faith = tmpExp | |
322 | + break | |
323 | + else | |
324 | + faith = config[lvl].exp | |
325 | + end | |
326 | + end | |
327 | + self:setProperty("faith", faith) | |
328 | + end | |
329 | + | |
299 | 330 | end |
300 | 331 | |
301 | 332 | ... | ... |