diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index fe3ddab..cc0eb38 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -55,6 +55,7 @@ actionCodes = { Hero_referEquipsRpc = 216, Hero_referRunesRpc = 217, Hero_createHeroRandomRpc = 218, + Hero_getResetRewardRpc = 219, Hang_startRpc = 251, Hang_checkRpc = 252, diff --git a/src/actions/HeroAction.lua b/src/actions/HeroAction.lua index d562f15..188065f 100644 --- a/src/actions/HeroAction.lua +++ b/src/actions/HeroAction.lua @@ -18,7 +18,7 @@ local _M = {} function _M.levelUpRpc( agent, data ) local role = agent.role local msg = MsgPack.unpack(data) - print("msg.id "..msg.id) + local hero = role.heros[msg.id] if not hero then return 1 end @@ -607,4 +607,76 @@ function _M.createHeroRandomRpc(agent, data) return true end +function _M.getResetRewardRpc(agent, data) + local role = agent.role + local msg = MsgPack.unpack(data) + + local msg = MsgPack.unpack(data) + + local hero = role.heros[msg.id] + if not hero then return end + + local level = hero:getProperty("level") + local breakL = hero:getProperty("breakL") + local talent = hero:getProperty("talent") + + if level <= 1 and talent == "" then return end + + local reward = {} + while level > 1 do + local curData = csvdb["unit_expCsv"][level - 1] + reward[ItemId.Exp] = (reward[ItemId.Exp] or 0) + curData.exp + reward[ItemId.Gold] = (reward[ItemId.Gold] or 0) + curData.gold + level = level - 1 + end + + while breakL > 0 do + local curData = csvdb["unit_breakCsv"][breakL - 1] + reward[ItemId.BreakCost] = (reward[ItemId.BreakCost] or 0) + curData.cost + reward[ItemId.Gold] = (reward[ItemId.Gold] or 0) + curData.gold + breakL = breakL - 1 + end + + local stage = talent:getv(0, 1) + local tlevel = {talent:getv(1, 0), talent:getv(2, 0), talent:getv(3, 0), talent:getv(4, 0)} + + local talentCostIds = globalCsv.unit_talent_cost[csvdb["unitCsv"][hero:getProperty("type")].camp] + while stage > 0 do + local curData = csvdb["unit_talentCsv"][stage] + for level = math.max(table.unpack(tlevel)), 1, -1 do + local add = 0 + for i = 1, 4 do + if tlevel[i] == level then + add = add + 1 + tlevel[i] = tlevel[i] - 1 + end + end + local talentData = curData[level - 1] + for itemId, count in pairs(talentData.money:toNumMap()) do + reward[itemId] = (reward[itemId] or 0) + count * add + end + for idx , count in pairs(talentData.cost:toNumMap()) do + reward[talentCostIds[idx]] = (reward[talentCostIds[idx]] or 0) + count * add + end + end + stage = stage - 1 + curData = csvdb["unit_talentCsv"][stage] + if curData then + tlevel = {#curData, #curData, #curData, #curData} + end + end + + hero:updateProperty({field = "level", value = level}) + hero:updateProperty({field = "breakL", value = breakL}) + hero:updateProperty({field = "talent", value = ""}) + + for itemId, count in pairs(reward) do + reward[itemId] = math.floor(count * globalCsv.unit_back_discount) + end + reward = role:award(reward) + + SendPacket(actionCodes.Hero_getResetRewardRpc, MsgPack.pack({reward = reward})) + return true +end + return _M \ No newline at end of file -- libgit2 0.21.2