Commit 5d71c3a54eb4efade8c3d5dbc4e8df97860071f9

Authored by liuzujun
2 parents b0bf24fd b021e351

Merge branch 'tr/bugfix' into tr/bugfix-qa

* tr/bugfix:
  计算英雄战斗力,天赋,信赖
  错误的
  多队挂机 电台任务英雄也不能重用
  冒险次数
  取消特权卡餐厅加速获得额外道具功能
  铭文属性问题
  返还bug
  切换拆解术式bug,造成获得巨大数量的物品
  or
  global
  email
  添加新的延時類型郵件
  发送邮件清标记
  活动卡池回馈数量丢失Bug
  手抽英雄只奖励一个
  奖励内容错误

# Conflicts:
#	src/csvdata
src/actions/AdvAction.lua
@@ -57,6 +57,15 @@ local function checkFormat(role, format, checkAdvTeam) @@ -57,6 +57,15 @@ local function checkFormat(role, format, checkAdvTeam)
57 end 57 end
58 end 58 end
59 59
  60 + -- 多队挂机 电台任务英雄也不能重用
  61 + local radioTask = role:getProperty("radioTask")
  62 + for id, taskInfo in pairs(radioTask) do
  63 + local heros = taskInfo["heros"] or {}
  64 + for _, heroId in ipairs(heros) do
  65 + hadHero[heroId] = true
  66 + end
  67 + end
  68 +
60 if not format.leader then return end 69 if not format.leader then return end
61 if format.leader2 == format.leader then return end 70 if format.leader2 == format.leader then return end
62 local hadLeader = false 71 local hadLeader = false
@@ -102,6 +111,8 @@ function _M.startAdvRpc( agent, data ) @@ -102,6 +111,8 @@ function _M.startAdvRpc( agent, data )
102 111
103 local advPass = role:getProperty("advPass") 112 local advPass = role:getProperty("advPass")
104 113
  114 + if not checkFormat(role) then return 7 end
  115 +
105 if AdvCommon.isEndless(chapterId) then -- 无尽模式判断 116 if AdvCommon.isEndless(chapterId) then -- 无尽模式判断
106 117
107 if chapterId ~= role.advElChapter then return end -- 不是当前进行的章节 118 if chapterId ~= role.advElChapter then return end -- 不是当前进行的章节
@@ -118,37 +129,23 @@ function _M.startAdvRpc( agent, data ) @@ -118,37 +129,23 @@ function _M.startAdvRpc( agent, data )
118 if not relayData then return 14 end -- 不是中继层 129 if not relayData then return 14 end -- 不是中继层
119 if advElM < relayData.unlockfloor then return 15 end --未解锁 130 if advElM < relayData.unlockfloor then return 15 end --未解锁
120 end 131 end
  132 +
  133 + role.dailyData:updateProperty({field = "advElC", delta = 1})
121 else -- 普通模式判断 134 else -- 普通模式判断
122 - if not role:checkAdvCount(chapterData.limitlevel) then return 2 end -- 是否有体力  
123 if layer >= chapterData.limitlevel then return 4 end 135 if layer >= chapterData.limitlevel then return 4 end
124 - -- 关卡开放判断  
125 - if not role:advChapterIsOpen(chapterId) then return 5 end  
126 136
  137 + local relayData = role:getAdvData():isHaveRelay(layer, chapterId, true)
  138 + if not relayData then return 6 end -- 不是中继层
127 if layer ~= 1 then 139 if layer ~= 1 then
128 - local relayData = role:getAdvData():isHaveRelay(layer, chapterId)  
129 - if not relayData then return 6 end -- 不是中继层  
130 if (advPass[chapterId] or 0) < relayData.floor then return 21 end 140 if (advPass[chapterId] or 0) < relayData.floor then return 21 end
131 end 141 end
132 - end  
133 -  
134 - if not checkFormat(role) then return 7 end  
135 -  
136 - --local advTeam = role:getProperty("advTeam")  
137 - --table.clear(advTeam) 142 + if not role:checkAdvCount(relayData.supply) then return 2 end -- 是否有体力
  143 + -- 关卡开放判断
  144 + if not role:advChapterIsOpen(chapterId) then return 5 end
138 145
139 - --advTeam.heros = {}  
140 - --for slot, heroId in pairs(format.heros) do  
141 - -- advTeam.heros[slot] = heroId  
142 - --end  
143 - --advTeam.leader = format.leader  
144 - --advTeam.leader2 = format.leader2  
145 - --role:updateProperty({field = "advTeam", value = advTeam})  
146 - if AdvCommon.isEndless(chapterId) then  
147 - role.dailyData:updateProperty({field = "advElC", delta = 1})  
148 - else  
149 - role:changeAdvCount(chapterData.limitlevel) 146 + role:changeAdvCount(relayData.supply)
150 end 147 end
151 - 148 +
152 local support = {} -- 支援效果 149 local support = {} -- 支援效果
153 if AdvCommon.isEndless(chapterId) then 150 if AdvCommon.isEndless(chapterId) then
154 -- 选择的支援效果 151 -- 选择的支援效果
@@ -168,6 +165,7 @@ function _M.startAdvRpc( agent, data ) @@ -168,6 +165,7 @@ function _M.startAdvRpc( agent, data )
168 end 165 end
169 end 166 end
170 end 167 end
  168 +
171 role:getAdvData():initByChapter({ 169 role:getAdvData():initByChapter({
172 chapterId = chapterId, 170 chapterId = chapterId,
173 level = layer, 171 level = layer,
@@ -175,6 +173,7 @@ function _M.startAdvRpc( agent, data ) @@ -175,6 +173,7 @@ function _M.startAdvRpc( agent, data )
175 isEnter = true, 173 isEnter = true,
176 support = support, 174 support = support,
177 }) 175 })
  176 +
178 role:checkTaskEnter("AdvStart", {id = chapterId}) 177 role:checkTaskEnter("AdvStart", {id = chapterId})
179 role:checkTaskEnter("AdvStartSelf", {id = chapterId}) 178 role:checkTaskEnter("AdvStartSelf", {id = chapterId})
180 role:getAdvData():popBackEvents() -- 清一下事件 179 role:getAdvData():popBackEvents() -- 清一下事件
@@ -236,7 +235,8 @@ function _M.startHangRpc(agent, data) @@ -236,7 +235,8 @@ function _M.startHangRpc(agent, data)
236 + 0.226 * player["hit"] 235 + 0.226 * player["hit"]
237 + 0.26 * player["miss"] 236 + 0.26 * player["miss"]
238 237
239 - if battleV < campSiteData.idleValue then return 9 end -- 战斗力是否满足 238 + --print(math.ceil(battleV), campSiteData.idleValue)
  239 + if math.ceil(battleV) < campSiteData.idleValue then return 9 end -- 战斗力是否满足
240 240
241 local info = {} 241 local info = {}
242 info.format = {} 242 info.format = {}
src/actions/DinerAction.lua
@@ -305,7 +305,7 @@ function _M.expediteSellRpc( agent, data ) @@ -305,7 +305,7 @@ function _M.expediteSellRpc( agent, data )
305 local gift = reward:toNumMap() 305 local gift = reward:toNumMap()
306 306
307 -- 特权卡获取加速获得额外道具 307 -- 特权卡获取加速获得额外道具
308 - local coef = role.storeData:getProduceItemSpeedCoef() 308 + local coef = 1 --role.storeData:getProduceItemSpeedCoef()
309 for k, v in pairs(gift) do 309 for k, v in pairs(gift) do
310 if coef > 1 then 310 if coef > 1 then
311 v = math.floor(v * coef) 311 v = math.floor(v * coef)
src/actions/EmailAction.lua
@@ -40,10 +40,17 @@ function _M.listRpc(agent, data) @@ -40,10 +40,17 @@ function _M.listRpc(agent, data)
40 local count = 1 40 local count = 1
41 for _, data in ipairs(result) do 41 for _, data in ipairs(result) do
42 local email = tarr2tab(data) 42 local email = tarr2tab(data)
43 - if tonum(email.createtime) > role:getProperty("ctime")  
44 - and ( not email.mid or tonum(email.mid) == mid ) 43 + -- 0 需要判斷創角時間小於郵件創建時間 1 只需要在時間段內登陸即可領取
  44 + local delayType = tonum(email.delayType)
  45 + local flag = false
  46 + if delayType == 1 then
  47 + flag = skynet.timex() > tonum(email.createtime)
  48 + else
  49 + flag = tonum(email.createtime) > role:getProperty("ctime")
  50 + end
  51 + if flag and ( not email.mid or tonum(email.mid) == mid )
45 and ( not email.endtime or tonum(email.endtime) > now )then 52 and ( not email.endtime or tonum(email.endtime) > now )then
46 - local time = math.max(tonum(email.timestamp, 0) or email.createtime) 53 + local time = math.max(tonum(email.timestamp, 0) , tonum(email.createtime))
47 redisproxy:insertEmail({ 54 redisproxy:insertEmail({
48 roleId = roleId, 55 roleId = roleId,
49 emailId = 0, 56 emailId = 0,
src/actions/HeroAction.lua
@@ -663,7 +663,8 @@ function _M.getResetRewardRpc(agent, data) @@ -663,7 +663,8 @@ function _M.getResetRewardRpc(agent, data)
663 663
664 while stage > 0 do 664 while stage > 0 do
665 local curData = csvdb["unit_talent_"..heroCfgId.."Csv"][stage] 665 local curData = csvdb["unit_talent_"..heroCfgId.."Csv"][stage]
666 - for lvl = 1, curTalentLvl - 1 do 666 + local offset = stage == talent:getv(0,1) and curTalentLvl - 1 or #curData
  667 + for lvl = 1, offset do
667 local talentData = curData[lvl] 668 local talentData = curData[lvl]
668 for itemId, count in pairs(talentData.money:toNumMap()) do 669 for itemId, count in pairs(talentData.money:toNumMap()) do
669 reward[itemId] = (reward[itemId] or 0) + count 670 reward[itemId] = (reward[itemId] or 0) + count
@@ -926,6 +927,7 @@ function _M.drawHeroRpc(agent, data) @@ -926,6 +927,7 @@ function _M.drawHeroRpc(agent, data)
926 local itemId = math.randWeight(resultPool, 1) 927 local itemId = math.randWeight(resultPool, 1)
927 if guideHero then 928 if guideHero then
928 itemId = guideHero 929 itemId = guideHero
  930 + guideHero = nil
929 end 931 end
930 932
931 local itemData = csvdb["itemCsv"][itemId] 933 local itemData = csvdb["itemCsv"][itemId]
src/actions/RoleAction.lua
@@ -586,9 +586,9 @@ function _M.openTimeBoxRpc(agent, data) @@ -586,9 +586,9 @@ function _M.openTimeBoxRpc(agent, data)
586 else 586 else
587 local oldId, process, time = boxL[slot].id, boxL[slot].process, boxL[slot].time 587 local oldId, process, time = boxL[slot].id, boxL[slot].process, boxL[slot].time
588 local unitTime = globalCsv.box_key_time[oldId] * 60 588 local unitTime = globalCsv.box_key_time[oldId] * 60
589 - local doneCnt = math.floor((process + skynet.timex() - time) / unitTime) 589 + local doneCnt = time == 0 and 0 or math.floor((process + skynet.timex() - time) / unitTime)
590 if doneCnt > 0 then 590 if doneCnt > 0 then
591 - reward = role:award({[oldId] = doneCnt}, {log = {desc = "openTimeBox", int1 = slot}}) 591 + reward = role:award({[oldId] = doneCnt}, {log = {desc = "openTimeBox", int1 = slot, int2 = oper}})
592 end 592 end
593 end 593 end
594 local limit = globalCsv.box_key_max[itemId] or 5 594 local limit = globalCsv.box_key_max[itemId] or 5
@@ -610,7 +610,7 @@ function _M.openTimeBoxRpc(agent, data) @@ -610,7 +610,7 @@ function _M.openTimeBoxRpc(agent, data)
610 local cost_pre = globalCsv.box_timeOpen_diamond:toArray(true, "=") 610 local cost_pre = globalCsv.box_timeOpen_diamond:toArray(true, "=")
611 local costKey = math.ceil((stopTime - nowTime) / (cost_pre[1] * 60)) * cost_pre[2] 611 local costKey = math.ceil((stopTime - nowTime) / (cost_pre[1] * 60)) * cost_pre[2]
612 if not role:checkItemEnough({[ItemId.Diamond] = costKey}) then return 5 end 612 if not role:checkItemEnough({[ItemId.Diamond] = costKey}) then return 5 end
613 - role:costItems({[ItemId.Diamond] = costKey}, {log = {desc = "openTimeBox", int1 = slot}}) 613 + role:costItems({[ItemId.Diamond] = costKey}, {log = {desc = "openTimeBox", int1 = slot, int2 = oper}})
614 else 614 else
615 stopTime = math.min(nowTime,time + globalCsv.box_productLine_time * 3600) 615 stopTime = math.min(nowTime,time + globalCsv.box_productLine_time * 3600)
616 end 616 end
@@ -618,7 +618,7 @@ function _M.openTimeBoxRpc(agent, data) @@ -618,7 +618,7 @@ function _M.openTimeBoxRpc(agent, data)
618 618
619 local doneCnt = math.floor((process + stopTime - time) / unitTime) 619 local doneCnt = math.floor((process + stopTime - time) / unitTime)
620 if doneCnt > 0 then 620 if doneCnt > 0 then
621 - reward = role:award({[itemId] = doneCnt}, {log = {desc = "openTimeBox", int1 = slot}}) 621 + reward = role:award({[itemId] = doneCnt}, {log = {desc = "openTimeBox", int1 = slot, int2 = oper}})
622 end 622 end
623 if role:getItemCount(itemId) >= globalCsv.box_key_max[itemId] then 623 if role:getItemCount(itemId) >= globalCsv.box_key_max[itemId] then
624 nowTime = 0 624 nowTime = 0
@@ -687,7 +687,7 @@ function _M.openTimeBoxRpc(agent, data) @@ -687,7 +687,7 @@ function _M.openTimeBoxRpc(agent, data)
687 reward[id] = (reward[id] or 0) + num 687 reward[id] = (reward[id] or 0) + num
688 end 688 end
689 end 689 end
690 - reward, change = role:award(reward, {log = {desc = "openTimeBox", int1 = costId}}) 690 + reward, change = role:award(reward, {log = {desc = "openTimeBox", int1 = costId, int2 = oper}})
691 else 691 else
692 return 692 return
693 end 693 end
@@ -61,10 +61,10 @@ function Adv:initByInfo(advInfo) @@ -61,10 +61,10 @@ function Adv:initByInfo(advInfo)
61 self:initBattle(advInfo) 61 self:initBattle(advInfo)
62 end 62 end
63 -- 找出level 是否存在中继层 63 -- 找出level 是否存在中继层
64 -function Adv:isHaveRelay(level, chapterId) 64 +function Adv:isHaveRelay(level, chapterId, force)
65 level = level or self.level 65 level = level or self.level
66 chapterId = chapterId or self.chapterId 66 chapterId = chapterId or self.chapterId
67 - if level == 1 then return end 67 + if level == 1 and not force then return end
68 68
69 local campsiteCsv = csvdb["adv_chapter_campsiteCsv"][chapterId] 69 local campsiteCsv = csvdb["adv_chapter_campsiteCsv"][chapterId]
70 for _, campsite in ipairs(campsiteCsv) do 70 for _, campsite in ipairs(campsiteCsv) do
1 -Subproject commit 48214b3ec01446368f92b6eb3123fe39c862c0fa 1 +Subproject commit 516f9d34ccb5dfc9a5fd40c251f3229e5a4651e6
src/models/Activity.lua
@@ -709,7 +709,7 @@ function Activity:recycleActItem(actId) @@ -709,7 +709,7 @@ function Activity:recycleActItem(actId)
709 local itemCount = role:getItemCount(fromId) 709 local itemCount = role:getItemCount(fromId)
710 if itemCount > 0 then 710 if itemCount > 0 then
711 costs[fromId] = (costs[fromId] or 0) + itemCount 711 costs[fromId] = (costs[fromId] or 0) + itemCount
712 - gift[toId] = toNum * itemCount 712 + gift[toId] = (gift[toId] or 0) + toNum * itemCount
713 end 713 end
714 end 714 end
715 if next(costs) then 715 if next(costs) then
src/models/HeroPlugin.lua
@@ -53,22 +53,25 @@ function HeroPlugin.bind(Hero) @@ -53,22 +53,25 @@ function HeroPlugin.bind(Hero)
53 local talentAttrS = {} 53 local talentAttrS = {}
54 54
55 -- 四个基础属性 55 -- 四个基础属性
56 - local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)]  
57 - local curTalentLvl = 0  
58 - if not curData then -- 已经满阶段了  
59 - local cfgName = "unit_talent_"..heroCfgId.."Csv"  
60 - curData = csvdb[cfgName][#csvdb[cfgName]]  
61 - else  
62 - curTalentLvl = talent:getv(1, 1)  
63 - end  
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 56 + local cfgName = "unit_talent_"..heroCfgId.."Csv"
  57 + local curRank = talent:getv(0, 1)
  58 + local curLv = talent:getv(1,1) - 1
  59 + for i, value in ipairs(csvdb[cfgName]) do
  60 + if i <= curRank then
  61 + for lv, cfg in ipairs(value) do
  62 + if i < curRank or lv <= curLv then
  63 + if cfg.effect ~= 99 then
  64 + if not talentAttrS[cfg.effect] then
  65 + talentAttrS[AttsEnumEx[cfg.effect]] = 0
  66 + end
  67 + talentAttrS[AttsEnumEx[cfg.effect]] = cfg.strength
  68 + end
  69 + else
  70 + break
70 end 71 end
71 end 72 end
  73 + else
  74 + break
72 end 75 end
73 end 76 end
74 77
@@ -85,7 +88,7 @@ function HeroPlugin.bind(Hero) @@ -85,7 +88,7 @@ function HeroPlugin.bind(Hero)
85 for lvl = 1, #faithConfig do 88 for lvl = 1, #faithConfig do
86 if faith >= faithConfig[lvl].exp then 89 if faith >= faithConfig[lvl].exp then
87 local add = faithConfig[lvl]["position_"..unitData.position]:toArray(true, "=") 90 local add = faithConfig[lvl]["position_"..unitData.position]:toArray(true, "=")
88 - faithAttr[add[1]] = (faithAttr[add[1]] or 0) + add[2] 91 + faithAttr[AttsEnumEx[add[1]]] = (faithAttr[AttsEnumEx[add[1]]] or 0) + add[2]
89 end 92 end
90 end 93 end
91 for _, attrName in pairs(AttsEnumEx) do 94 for _, attrName in pairs(AttsEnumEx) do
src/models/RoleChangeStruct.lua
@@ -48,11 +48,29 @@ local bugFixSuduku = createVersionFunc(VersionType.DoOnly, function(role, params @@ -48,11 +48,29 @@ local bugFixSuduku = createVersionFunc(VersionType.DoOnly, function(role, params
48 end 48 end
49 end) 49 end)
50 50
  51 +local bugFixRune = createVersionFunc(VersionType.DoOnly, function(role, params)
  52 + local had = false
  53 + for id, rune in pairs(role.runeBag) do
  54 + if math.floor(rune:getProperty("id") / 1000) == 16 then
  55 + local attrs = rune:getProperty("attrs")
  56 + local atk = attrs:getv(2, 0)
  57 + if atk ~= 0 then
  58 + attrs = attrs:delk(2):setv(1, atk)
  59 + had = true
  60 + rune:setProperty("attrs",attrs)
  61 + end
  62 + end
  63 + end
  64 + if had then
  65 + -- 补偿
  66 + end
  67 +end)
51 ---------------------版本方法 end ---------------------- 68 ---------------------版本方法 end ----------------------
52 69
53 -- version 罗列start 70 -- version 罗列start
54 local versionList = {} -- version 列表 71 local versionList = {} -- version 列表
55 versionList[1] = {bugFixSuduku, {}} 72 versionList[1] = {bugFixSuduku, {}}
  73 +versionList[2] = {bugFixRune, {}}
56 -- versionList[2] = {clearActivity, {5, 7}} 74 -- versionList[2] = {clearActivity, {5, 7}}
57 -- versionList[3] = {changeStructF, "test1"} 75 -- versionList[3] = {changeStructF, "test1"}
58 -- versionList[4] = {changeStructF, "test2"} 76 -- versionList[4] = {changeStructF, "test2"}
src/models/RolePlugin.lua
@@ -1504,6 +1504,7 @@ function RolePlugin.bind(Role) @@ -1504,6 +1504,7 @@ function RolePlugin.bind(Role)
1504 return function (now, role) 1504 return function (now, role)
1505 if name == "email" and role.sendMailFlag then 1505 if name == "email" and role.sendMailFlag then
1506 last_breath = now + sec 1506 last_breath = now + sec
  1507 + role.sendMailFlag = false
1507 return true 1508 return true
1508 end 1509 end
1509 if now >= last_breath then 1510 if now >= last_breath then
@@ -1539,8 +1540,15 @@ function RolePlugin.bind(Role) @@ -1539,8 +1540,15 @@ function RolePlugin.bind(Role)
1539 end) 1540 end)
1540 for _, data in ipairs(redret) do 1541 for _, data in ipairs(redret) do
1541 local email = tarr2tab(data) 1542 local email = tarr2tab(data)
1542 - if tonum(email.createtime) > self:getProperty("ctime")  
1543 - and ( not email.mid or tonum(email.mid) == mid ) 1543 + -- 0 需要判斷創角時間小於郵件創建時間 1 只需要在時間段內登陸即可領取
  1544 + local delayType = tonum(email.delayType)
  1545 + local flag = false
  1546 + if delayType == 1 then
  1547 + flag = skynet.timex() > tonum(email.createtime)
  1548 + else
  1549 + flag = tonum(email.createtime) > self:getProperty("ctime")
  1550 + end
  1551 + if flag and ( not email.mid or tonum(email.mid) == mid )
1544 and ( not email.endtime or tonum(email.endtime) > now )then 1552 and ( not email.endtime or tonum(email.endtime) > now )then
1545 return true 1553 return true
1546 end 1554 end
src/services/globald.lua
@@ -69,7 +69,8 @@ local function mailQuene() @@ -69,7 +69,8 @@ local function mailQuene()
69 "attachments", email.attachments, 69 "attachments", email.attachments,
70 "endtime", email.endTime, 70 "endtime", email.endTime,
71 "mid", email.mid, 71 "mid", email.mid,
72 - "timestamp", now 72 + "timestamp", now,
  73 + "delayType", email.delayType
73 ) 74 )
74 else 75 else
75 redisproxy:hmset(string_format("globalEmail:%s", gid), 76 redisproxy:hmset(string_format("globalEmail:%s", gid),
@@ -80,7 +81,8 @@ local function mailQuene() @@ -80,7 +81,8 @@ local function mailQuene()
80 "content", email.content, 81 "content", email.content,
81 "attachments", email.attachments, 82 "attachments", email.attachments,
82 "endtime", email.endTime, 83 "endtime", email.endTime,
83 - "timestamp", now 84 + "timestamp", now,
  85 + "delayType", email.delayType
84 ) 86 )
85 end 87 end
86 end 88 end