Commit 20e8c2fe28278abf5e9da8f8c4265a84fcb25891

Authored by zhouhaihai
2 parents d025775f 211382c3

Merge branch 'taptap' into tr/publish

docs/日志说明.xlsx
No preview for this file type
publish/publish.sh
@@ -28,7 +28,7 @@ cd - @@ -28,7 +28,7 @@ cd -
28 rsync -aP --exclude=".git" ./src/ ${dist}/src/ 28 rsync -aP --exclude=".git" ./src/ ${dist}/src/
29 rsync -aP ./publish/skynet ${dist}/ 29 rsync -aP ./publish/skynet ${dist}/
30 rsync -aP --exclude={config/develop.lua,config/nodenames.lua} config ${dist}/ 30 rsync -aP --exclude={config/develop.lua,config/nodenames.lua} config ${dist}/
31 -cp kill.sh ${dist}/  
32 -cp run.sh ${dist}/ 31 +# cp kill.sh ${dist}/
  32 +# cp run.sh ${dist}/
33 33
34 # rsync -aP --exclude-from="./publish/exclude.list" ${origin}/ ./${dist}/ 34 # rsync -aP --exclude-from="./publish/exclude.list" ${origin}/ ./${dist}/
1 XXTEA_KEY = "699D448D6D24f7F941E9F6E99F823E18" 1 XXTEA_KEY = "699D448D6D24f7F941E9F6E99F823E18"
2 -RESET_TIME = 4 2 +RESET_TIME = 0
3 3
4 START_RESET_TIME_BASE = 1584316800 -- 0时区 4 START_RESET_TIME_BASE = 1584316800 -- 0时区
5 TIME_ZONE = math.floor(os.difftime(START_RESET_TIME_BASE, os.time(os.date("!*t", START_RESET_TIME_BASE))) / 3600) -- 本地时区 5 TIME_ZONE = math.floor(os.difftime(START_RESET_TIME_BASE, os.time(os.date("!*t", START_RESET_TIME_BASE))) / 3600) -- 本地时区
src/ProtocolCode.lua
@@ -101,6 +101,7 @@ actionCodes = { @@ -101,6 +101,7 @@ actionCodes = {
101 Hang_endBonusBattleRpc = 261, 101 Hang_endBonusBattleRpc = 261,
102 Hang_hangGiftRpc = 262, 102 Hang_hangGiftRpc = 262,
103 Hang_bagFieldRpc = 263, 103 Hang_bagFieldRpc = 263,
  104 + Hang_chatLineRpc = 264,
104 105
105 Diner_updateProperty = 300, 106 Diner_updateProperty = 300,
106 Diner_addSellRpc = 301, 107 Diner_addSellRpc = 301,
@@ -192,6 +193,7 @@ actionCodes = { @@ -192,6 +193,7 @@ actionCodes = {
192 Activity_sudokuRpc = 650, 193 Activity_sudokuRpc = 650,
193 Activity_signRpc = 651, 194 Activity_signRpc = 651,
194 Activity_sudokuRewardRpc = 652, 195 Activity_sudokuRewardRpc = 652,
  196 + Activity_actSignRpc = 653,
195 } 197 }
196 198
197 rpcResponseBegin = 10000 199 rpcResponseBegin = 10000
src/actions/ActivityAction.lua
@@ -125,14 +125,41 @@ function _M.signRpc(agent, data) @@ -125,14 +125,41 @@ function _M.signRpc(agent, data)
125 end 125 end
126 signs[curDay] = yearMonth 126 signs[curDay] = yearMonth
127 127
128 - local raward = role:award(monthData[curDay].item, {log = {desc = "sign", int1 = yearMonth, int2 = curDay}}) 128 + local reward = role:award(monthData[curDay].item, {log = {desc = "sign", int1 = yearMonth, int2 = curDay}})
129 role:changeUpdates({{type = "sign", field = curDay, value = yearMonth}}) 129 role:changeUpdates({{type = "sign", field = curDay, value = yearMonth}})
130 130
131 - SendPacket(actionCodes.Activity_signRpc, MsgPack.pack(raward)) 131 + SendPacket(actionCodes.Activity_signRpc, MsgPack.pack(reward))
132 return true 132 return true
133 end 133 end
134 134
135 135
  136 +function _M.actSignRpc(agent, data)
  137 + local role = agent.role
  138 + if not role.activity:isOpen("Sign") then return 1 end
  139 +
  140 + local curData = role.activity:getActData("Sign")
  141 + local reward = {}
  142 + for day, csvData in ipairs(csvdb["new_signInCsv"]) do
  143 + if day <= (curData[0] or 0) then
  144 + if not curData[day] then
  145 + curData[day] = -1
  146 + -- 奖励
  147 + for itemId, count in pairs(csvData.reward:toNumMap()) do
  148 + reward[itemId] = (reward[itemId] or 0) + count
  149 + end
  150 + end
  151 + else
  152 + break
  153 + end
  154 + end
  155 + if next(reward) then
  156 + role.activity:updateActData("Sign", curData)
  157 + reward = role:award(reward, {log = {desc = "actSign"}})
  158 + end
  159 + SendPacket(actionCodes.Activity_actSignRpc, MsgPack.pack(reward))
  160 + return true
  161 +end
  162 +
136 163
137 164
138 return _M 165 return _M
139 \ No newline at end of file 166 \ No newline at end of file
src/actions/AdvAction.lua
@@ -89,6 +89,9 @@ function _M.startAdvRpc( agent, data ) @@ -89,6 +89,9 @@ function _M.startAdvRpc( agent, data )
89 89
90 --上一个关卡结束才可以开始新的关卡 90 --上一个关卡结束才可以开始新的关卡
91 if role:getAdvData():isRunning() then return 8 end 91 if role:getAdvData():isRunning() then return 8 end
  92 + local advHang = role:getProperty("advHang")
  93 + if advHang[chapterId] then return 9 end --正在挂机
  94 +
92 95
93 local chapterData = csvdb["adv_chapterCsv"][chapterId] 96 local chapterData = csvdb["adv_chapterCsv"][chapterId]
94 if not chapterData or layer < 1 then return 1 end 97 if not chapterData or layer < 1 then return 1 end
@@ -112,7 +115,7 @@ function _M.startAdvRpc( agent, data ) @@ -112,7 +115,7 @@ function _M.startAdvRpc( agent, data )
112 if advElM < relayData.unlockfloor then return 15 end --未解锁 115 if advElM < relayData.unlockfloor then return 15 end --未解锁
113 end 116 end
114 else -- 普通模式判断 117 else -- 普通模式判断
115 - if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return 2 end -- 是否有体力 118 + if not role:checkAdvCount(chapterData.limitlevel) then return 2 end -- 是否有体力
116 if layer >= chapterData.limitlevel then return 4 end 119 if layer >= chapterData.limitlevel then return 4 end
117 -- 关卡开放判断 120 -- 关卡开放判断
118 if not role:advChapterIsOpen(chapterId) then return 5 end 121 if not role:advChapterIsOpen(chapterId) then return 5 end
@@ -139,7 +142,7 @@ function _M.startAdvRpc( agent, data ) @@ -139,7 +142,7 @@ function _M.startAdvRpc( agent, data )
139 if AdvCommon.isEndless(chapterId) then 142 if AdvCommon.isEndless(chapterId) then
140 role.dailyData:updateProperty({field = "advElC", delta = 1}) 143 role.dailyData:updateProperty({field = "advElC", delta = 1})
141 else 144 else
142 - role.dailyData:updateProperty({field = "advC", delta = 1}) 145 + role:changeAdvCount(chapterData.limitlevel)
143 end 146 end
144 147
145 local support = {} -- 支援效果 148 local support = {} -- 支援效果
@@ -177,7 +180,6 @@ function _M.startAdvRpc( agent, data ) @@ -177,7 +180,6 @@ function _M.startAdvRpc( agent, data )
177 return true 180 return true
178 end 181 end
179 182
180 -  
181 function _M.startHangRpc(agent, data) 183 function _M.startHangRpc(agent, data)
182 local role = agent.role 184 local role = agent.role
183 local msg = MsgPack.unpack(data) 185 local msg = MsgPack.unpack(data)
@@ -186,24 +188,38 @@ function _M.startHangRpc(agent, data) @@ -186,24 +188,38 @@ function _M.startHangRpc(agent, data)
186 188
187 local chapterData = csvdb["adv_chapterCsv"][chapterId] 189 local chapterData = csvdb["adv_chapterCsv"][chapterId]
188 if not chapterData then return end 190 if not chapterData then return end
  191 + if chapterData.idleReward == "" then return end --没有奖励 没有挂机
189 192
190 local advHang = role:getProperty("advHang") 193 local advHang = role:getProperty("advHang")
191 if advHang[chapterId] then return end --正在挂机 194 if advHang[chapterId] then return end --正在挂机
192 195
193 if role:getAdvData():isRunning() and role:getAdvData().chapterId == chapterId then return end 196 if role:getAdvData():isRunning() and role:getAdvData().chapterId == chapterId then return end
194 197
195 - local advPass = role:getProperty("advPass")  
196 - if AdvCommon.isEndless(chapterId) or advPass[chapterId] ~= chapterData.limitlevel then return end -- 没有全通关 198 + if AdvCommon.isEndless(chapterId) then return end -- 无尽没有代理
  199 +
  200 + local advRelay = role:getProperty("advRelay")
  201 + if not next(advRelay[chapterId] or {}) then return end -- 没有开放
197 202
198 - if role.dailyData:getProperty("advC") >= role:getAdvHangLimit() then return end -- 是否有体力 203 +
  204 + if not role:checkAdvCount(chapterData.limitlevel) then return end -- 是否有体力
199 205
200 if not checkFormat(role, format, role:getAdvData():isRunning()) then return end --编队是否正确 206 if not checkFormat(role, format, role:getAdvData():isRunning()) then return end --编队是否正确
201 207
202 - local battleV = 0  
203 - for _, heroId in pairs(format.heros) do  
204 - local hero = role.heros[heroId]  
205 - battleV = battleV + hero:getProperty("battleV") 208 + local player = {}
  209 + local attrs = role:getTeamBattleInfo(format).heros
  210 + for attrName, _ in pairs(AdvAttsEnum) do
  211 + for _, hero in pairs(attrs) do
  212 + player[attrName] = (player[attrName] or 0) + hero[attrName]
  213 + end
  214 + player[attrName] = player[attrName] * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
206 end 215 end
  216 +
  217 + local battleV = 1 * player["hp"]
  218 + + 2 * player["atk"]
  219 + + 1.25 * player["def"]
  220 + + 0.226 * player["hit"]
  221 + + 0.26 * player["miss"]
  222 +
207 if battleV < chapterData.idleValue then return end -- 战斗力是否满足 223 if battleV < chapterData.idleValue then return end -- 战斗力是否满足
208 224
209 local info = {} 225 local info = {}
@@ -223,7 +239,7 @@ function _M.startHangRpc(agent, data) @@ -223,7 +239,7 @@ function _M.startHangRpc(agent, data)
223 239
224 role:changeUpdates({{type = "advHang", field = chapterId, value = info}}) 240 role:changeUpdates({{type = "advHang", field = chapterId, value = info}})
225 241
226 - role.dailyData:updateProperty({field = "advC", delta = 1}) 242 + role:changeAdvCount(chapterData.limitlevel)
227 role:checkTaskEnter("AdvStart", {id = chapterId}) 243 role:checkTaskEnter("AdvStart", {id = chapterId})
228 role:log("adv_action", {desc = "startHang", int1 = chapterId}) 244 role:log("adv_action", {desc = "startHang", int1 = chapterId})
229 245
@@ -276,14 +292,44 @@ function _M.endHangRpc(agent, data) @@ -276,14 +292,44 @@ function _M.endHangRpc(agent, data)
276 292
277 local reward, isFull 293 local reward, isFull
278 if skynet.timex() >= info.time then 294 if skynet.timex() >= info.time then
279 - reward = role:award(chapterData.idleReward, {log = {desc = "advHang", int1 = chapterId}})  
280 - else  
281 - if cancel then  
282 - if role.dailyData:getProperty("advC") <= 0 then  
283 - isFull = true 295 + -- 英雄加成
  296 + local idleUnit = chapterData.idleUnit:toNumMap()
  297 + local upUnit = 0
  298 + for slot, heroId in pairs((info.format or {}).heros or {}) do
  299 + local hero = role.heros[heroId]
  300 + if hero then
  301 + if idleUnit[hero:getProperty("type")] then
  302 + upUnit = upUnit + idleUnit[hero:getProperty("type")]
  303 + end
  304 + end
  305 + end
  306 + -- 中继加成
  307 + local advPass = role:getProperty("advPass")
  308 + local maxCampsite = nil
  309 + local campsiteCsv = csvdb["adv_chapter_campsiteCsv"][chapterId]
  310 + for _, campsite in ipairs(campsiteCsv) do
  311 + if campsite.floor <= advPass[chapterId] then
  312 + maxCampsite = campsite
284 else 313 else
285 - role.dailyData:updateProperty({field = "advC", delta = -1}) 314 + break
286 end 315 end
  316 + end
  317 +
  318 + if not maxCampsite then return end
  319 +
  320 + local idleReward = chapterData.idleReward:toNumMap()
  321 + for itemId, count in pairs(idleReward) do
  322 + idleReward[itemId] = math.floor(count * (maxCampsite.idleValue + upUnit) / 100)
  323 + end
  324 + reward = role:award(idleReward, {log = {desc = "advHang", int1 = chapterId}})
  325 + else
  326 + if cancel then
  327 + role:changeAdvCount(-chapterData.limitlevel)
  328 + -- if role:getProperty("advC") <= 0 then
  329 + -- isFull = true
  330 + -- else
  331 + -- role:updateProperty({field = "advC", delta = -chapterData.limitlevel})
  332 + -- end
287 else 333 else
288 return 334 return
289 end 335 end
@@ -319,7 +365,7 @@ function _M.buyAdvCountRpc(agent , data) @@ -319,7 +365,7 @@ function _M.buyAdvCountRpc(agent , data)
319 role.dailyData:updateProperty({field = "advElC", delta = -count}) 365 role.dailyData:updateProperty({field = "advElC", delta = -count})
320 role.dailyData:updateProperty({field = "advElBC", delta = count}) 366 role.dailyData:updateProperty({field = "advElBC", delta = count})
321 else 367 else
322 - role.dailyData:updateProperty({field = "advC", delta = -count}) 368 + role:changeAdvCount(-count * globalCsv.adv_daily_buy_num)
323 role.dailyData:updateProperty({field = "advBC", delta = count}) 369 role.dailyData:updateProperty({field = "advBC", delta = count})
324 end 370 end
325 role:log("adv_action", {desc = "buyAdvCount", short1 = isEl and 1 or 0, int1 = count}) 371 role:log("adv_action", {desc = "buyAdvCount", short1 = isEl and 1 or 0, int1 = count})
src/actions/GmAction.lua
@@ -213,8 +213,6 @@ function _M.fbc(role, pms) -- 直接通关 @@ -213,8 +213,6 @@ function _M.fbc(role, pms) -- 直接通关
213 role:updateProperty({field = "hangPass", value = {}}) 213 role:updateProperty({field = "hangPass", value = {}})
214 addPre(carbonId) 214 addPre(carbonId)
215 215
216 - role:checkTaskEnter("HangPass", {id = carbonId})  
217 -  
218 role:log("gm_action", {desc = "fbc", int1 = carbonId, key1 = pms.sender}) 216 role:log("gm_action", {desc = "fbc", int1 = carbonId, key1 = pms.sender})
219 217
220 return "成功" 218 return "成功"
@@ -339,7 +337,7 @@ end @@ -339,7 +337,7 @@ end
339 337
340 table.insert(helpDes, {"冒险次数恢复", "advf"}) 338 table.insert(helpDes, {"冒险次数恢复", "advf"})
341 function _M.advf(role, pms) 339 function _M.advf(role, pms)
342 - role.dailyData:updateProperty({field = "advC", value = 0}) 340 + role:updateProperty({field = "advC", value = 0})
343 role.dailyData:updateProperty({field = "advElC", value = 0}) 341 role.dailyData:updateProperty({field = "advElC", value = 0})
344 342
345 role:log("gm_action", {desc = "advf", key1 = pms.sender}) 343 role:log("gm_action", {desc = "advf", key1 = pms.sender})
@@ -363,7 +361,7 @@ function _M.adv(role, pms) @@ -363,7 +361,7 @@ function _M.adv(role, pms)
363 advPass[chapterId] = layer 361 advPass[chapterId] = layer
364 role:updateProperty({field = "advPass", value = advPass}) 362 role:updateProperty({field = "advPass", value = advPass})
365 end 363 end
366 - role:log("gm_action", {desc = "advf", int1 = chapterId, int2 = layer, key1 = pms.sender}) 364 + role:log("gm_action", {desc = "adv", int1 = chapterId, int2 = layer, key1 = pms.sender})
367 365
368 return "成功" 366 return "成功"
369 end 367 end
src/actions/HangAction.lua
@@ -559,4 +559,28 @@ function _M.bagFieldRpc(agent, data) @@ -559,4 +559,28 @@ function _M.bagFieldRpc(agent, data)
559 return true 559 return true
560 end 560 end
561 561
  562 +function _M.chatLineRpc(agent, data)
  563 + local role = agent.role
  564 + local msg = MsgPack.unpack(data)
  565 + local id = msg.id
  566 +
  567 + local idleData = csvdb["idle_battleCsv"][id]
  568 + if not idleData or idleData.chatline == 0 then
  569 + return
  570 + end
  571 +
  572 + local chatline = role:getProperty("chatline")
  573 + if chatline[id] then return end
  574 +
  575 + if not role:checkHangPass(id) then return end
  576 +
  577 + chatline[id] = skynet.timex()
  578 + role:updateProperty({field = "chatline", value = chatline})
  579 +
  580 + local reward = role:award(idleData.chatline_reward, {log = {desc = "chatline", int1 = id}})
  581 +
  582 + SendPacket(actionCodes.Hang_chatLineRpc, MsgPack.pack(reward))
  583 + return true
  584 +end
  585 +
562 return _M 586 return _M
563 \ No newline at end of file 587 \ No newline at end of file
src/actions/HeroAction.lua
@@ -846,8 +846,8 @@ function _M.drawHeroRpc(agent, data) @@ -846,8 +846,8 @@ function _M.drawHeroRpc(agent, data)
846 local isNewerSSR = btype == 4 and (newerHadSSR == 0 and newerDrawCount >= globalCsv.draw_newer[1]) or false 846 local isNewerSSR = btype == 4 and (newerHadSSR == 0 and newerDrawCount >= globalCsv.draw_newer[1]) or false
847 847
848 local ssrUp = 0 848 local ssrUp = 0
849 - if draw_ssr_up_count_rate then  
850 - ssrUp = math.min(math.floor(ssrUpCount / draw_ssr_up_count_rate[1]) * draw_ssr_up_count_rate[2], draw_ssr_up_count_rate[3]) / 100 849 + if draw_ssr_up_count_rate and ssrUpCount > draw_ssr_up_count_rate[1] then
  850 + ssrUp = math.min((ssrUpCount - draw_ssr_up_count_rate[1]) * draw_ssr_up_count_rate[2], draw_ssr_up_count_rate[3]) / 100
851 end 851 end
852 while not next(resultPool) do 852 while not next(resultPool) do
853 if isNewerSSR then 853 if isNewerSSR then
@@ -862,7 +862,7 @@ function _M.drawHeroRpc(agent, data) @@ -862,7 +862,7 @@ function _M.drawHeroRpc(agent, data)
862 end 862 end
863 863
864 -- 引导必送 613 丝路德 864 -- 引导必送 613 丝路德
865 - local itemId = guide and 613 or math.randWeight(resultPool, 1) 865 + local itemId = (guide and drawType == 1) and 613 or math.randWeight(resultPool, 1)
866 local itemData = csvdb["itemCsv"][itemId] 866 local itemData = csvdb["itemCsv"][itemId]
867 if itemData.quality == 4 then 867 if itemData.quality == 4 then
868 ssrCount = ssrCount + 1 868 ssrCount = ssrCount + 1
@@ -892,13 +892,13 @@ function _M.drawHeroRpc(agent, data) @@ -892,13 +892,13 @@ function _M.drawHeroRpc(agent, data)
892 892
893 if draw_floor_back_counts then 893 if draw_floor_back_counts then
894 local floorHero = role:getProperty("floorHero") 894 local floorHero = role:getProperty("floorHero")
895 - floorHero[pool] = floorHeroCount 895 + floorHero[btype] = floorHeroCount
896 role:setProperty("floorHero", floorHero) 896 role:setProperty("floorHero", floorHero)
897 end 897 end
898 898
899 if draw_ssr_up_count_rate then 899 if draw_ssr_up_count_rate then
900 local ssrUp = role:getProperty("ssrUp") 900 local ssrUp = role:getProperty("ssrUp")
901 - ssrUp[pool] = ssrUpCount 901 + ssrUp[btype] = ssrUpCount
902 role:setProperty("ssrUp", ssrUp) 902 role:setProperty("ssrUp", ssrUp)
903 end 903 end
904 904
@@ -914,7 +914,7 @@ function _M.drawHeroRpc(agent, data) @@ -914,7 +914,7 @@ function _M.drawHeroRpc(agent, data)
914 -- role:updateProperty({field = "repayHero", value = repayHero}) 914 -- role:updateProperty({field = "repayHero", value = repayHero})
915 -- end 915 -- end
916 916
917 - role:checkTaskEnter("DrawHero", {pool = pool, count = drawCount[drawType]}) 917 + role:checkTaskEnter("DrawHero", {pool = btype, count = drawCount[drawType]})
918 if ssrCount > 0 then 918 if ssrCount > 0 then
919 role:checkTaskEnter("DrawSSR", {count = ssrCount}) 919 role:checkTaskEnter("DrawSSR", {count = ssrCount})
920 end 920 end
src/actions/RoleAction.lua
@@ -121,10 +121,14 @@ function _M.loginRpc( agent, data ) @@ -121,10 +121,14 @@ function _M.loginRpc( agent, data )
121 role:advEndlessSeasonCheck(true) -- 冒险赛季更新检查 121 role:advEndlessSeasonCheck(true) -- 冒险赛季更新检查
122 122
123 -- 跨天登陆事件 123 -- 跨天登陆事件
124 - role:updateTimeReset(now) 124 + local resetMode = role:updateTimeReset(now)
  125 + if not resetMode or not resetMode["CrossDay"] then -- 没有跨天
  126 + role.activity:checkActivityStatus(now, false, false)
  127 + end
  128 +
125 redisproxy:zadd(FRIEND_RECOMMEND, now, roleId) 129 redisproxy:zadd(FRIEND_RECOMMEND, now, roleId)
126 130
127 - for _, name in ipairs({"dailyData", "dinerData"}) do 131 + for _, name in ipairs({"dailyData", "dinerData", "activity"}) do
128 response[name] = role[name]:data() 132 response[name] = role[name]:data()
129 end 133 end
130 134
@@ -577,10 +581,19 @@ function _M.storyBookRewardRpc(agent, data) @@ -577,10 +581,19 @@ function _M.storyBookRewardRpc(agent, data)
577 local storyBookData = csvdb["story_bookCsv"][storyId] 581 local storyBookData = csvdb["story_bookCsv"][storyId]
578 if not storyBookData then return end 582 if not storyBookData then return end
579 local storyStatus = role:getProperty("storyB") 583 local storyStatus = role:getProperty("storyB")
580 - if not storyStatus[storyId] or not storyStatus[storyId].s or storyStatus[storyId].s ~= 1 then  
581 - return 584 +
  585 + local status = (storyStatus[storyId] or {}).s
  586 +
  587 + if status == -1 then return end
  588 +
  589 + if not status or status ~= 1 then
  590 + if storyBookData.unlockType == 1 and role:getProperty("hangInfo").carbonId == tonumber(storyBookData.unlockData) then -- 挂机剧情正在挂机也可以领奖
  591 + else
  592 + return
  593 + end
582 end 594 end
583 -- 获取奖励 595 -- 获取奖励
  596 + storyStatus[storyId] = storyStatus[storyId] or {}
584 storyStatus[storyId].s = -1 597 storyStatus[storyId].s = -1
585 role:changeUpdates({{ type = "storyB", field = storyId, value = storyStatus[storyId] }}) 598 role:changeUpdates({{ type = "storyB", field = storyId, value = storyStatus[storyId] }})
586 local reward = role:award(storyBookData.gift, {log = {desc = "storybookReward", int1 = storyId}}) 599 local reward = role:award(storyBookData.gift, {log = {desc = "storybookReward", int1 = storyId}})
src/actions/StoreAction.lua
@@ -211,6 +211,7 @@ function _M.dailyBuyRpc(agent , data) @@ -211,6 +211,7 @@ function _M.dailyBuyRpc(agent , data)
211 gift[itemId] = count_ * count 211 gift[itemId] = count_ * count
212 end 212 end
213 local reward = role:award(gift, {log = {desc = "dailyShop", int1 = id, int2 = count}}) 213 local reward = role:award(gift, {log = {desc = "dailyShop", int1 = id, int2 = count}})
  214 + role:checkTaskEnter("ShopAll", {count = count})
214 215
215 role:log("role_action", {desc = "dailyShop", int1 = id, int2 = count}) 216 role:log("role_action", {desc = "dailyShop", int1 = id, int2 = count})
216 217
src/actions/TowerAction.lua
@@ -113,7 +113,7 @@ function _M.endBattleRpc(agent, data) @@ -113,7 +113,7 @@ function _M.endBattleRpc(agent, data)
113 towerInfo.k = nil 113 towerInfo.k = nil
114 role:updateProperty({field = "towerInfo", value = towerInfo}) 114 role:updateProperty({field = "towerInfo", value = towerInfo})
115 115
116 - role:log("tower_action", {desc = "startBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = id}) 116 + role:log("tower_action", {desc = "endBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = id})
117 117
118 SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward})) 118 SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward}))
119 return true 119 return true
@@ -776,6 +776,12 @@ function Adv:over(success, rewardRatio, overType) @@ -776,6 +776,12 @@ function Adv:over(success, rewardRatio, overType)
776 end 776 end
777 reward = self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}}) 777 reward = self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}})
778 778
  779 + local backAdvCount
  780 + if not self:isEndless() then
  781 + backAdvCount = chapterData.limitlevel - self.level
  782 + self.owner:changeAdvCount(-backAdvCount)
  783 + end
  784 +
779 if success then 785 if success then
780 self.owner:checkTaskEnter("AdvPass", {id = self.chapterId, level = self.level, score = score}) 786 self.owner:checkTaskEnter("AdvPass", {id = self.chapterId, level = self.level, score = score})
781 787
@@ -814,7 +820,16 @@ function Adv:over(success, rewardRatio, overType) @@ -814,7 +820,16 @@ function Adv:over(success, rewardRatio, overType)
814 advAFGet = {}, 820 advAFGet = {},
815 advAFWear = {}, 821 advAFWear = {},
816 }) 822 })
817 - self:backEnd(success, score, scoreInfo, reward, overType, scoreReward, chapterId) 823 + self:pushBackEvent(AdvBackEventType.End, {
  824 + success = success,
  825 + score = score,
  826 + scoreInfo = scoreInfo,
  827 + reward = reward,
  828 + type = overType,
  829 + scoreAward = scoreReward,
  830 + chapterId = chapterId,
  831 + backAdvCount = backAdvCount,
  832 + })
818 end 833 end
819 834
820 function Adv:exit() 835 function Adv:exit()
@@ -1921,9 +1936,6 @@ function Adv:backNext() @@ -1921,9 +1936,6 @@ function Adv:backNext()
1921 self:pushBackEvent(AdvBackEventType.Next, {}) 1936 self:pushBackEvent(AdvBackEventType.Next, {})
1922 end 1937 end
1923 1938
1924 -function Adv:backEnd(success, score, scoreInfo, reward, overType, scoreAward, chapterId)  
1925 - self:pushBackEvent(AdvBackEventType.End, {success = success, score = score, scoreInfo = scoreInfo, reward = reward, type = overType, scoreAward = scoreAward, chapterId = chapterId})  
1926 -end  
1927 1939
1928 function Adv:backBlockChange(roomId, blockId, itemChangeType) 1940 function Adv:backBlockChange(roomId, blockId, itemChangeType)
1929 self:pushBackEvent(AdvBackEventType.BlockChange, {roomId = roomId, blockId = blockId, itemChangeType = itemChangeType}) 1941 self:pushBackEvent(AdvBackEventType.BlockChange, {roomId = roomId, blockId = blockId, itemChangeType = itemChangeType})
src/adv/AdvBattle.lua
@@ -288,6 +288,15 @@ function Battle:afterRound() @@ -288,6 +288,15 @@ function Battle:afterRound()
288 return e1.id < e2.id 288 return e1.id < e2.id
289 end) 289 end)
290 290
  291 +
  292 + self.player:afterRound("buffBefore")
  293 + for _, enemy in ipairs(self.enemys[mapIdx]) do
  294 + enemy:afterRound("buffBefore")
  295 + end
  296 + for _, build in ipairs(self.builds[mapIdx]) do
  297 + build:afterRound("buffBefore")
  298 + end
  299 +
291 self.player:afterRound("passive") 300 self.player:afterRound("passive")
292 for _, enemy in ipairs(self.enemys[mapIdx]) do 301 for _, enemy in ipairs(self.enemys[mapIdx]) do
293 enemy:afterRound("passive") 302 enemy:afterRound("passive")
@@ -296,12 +305,12 @@ function Battle:afterRound() @@ -296,12 +305,12 @@ function Battle:afterRound()
296 build:afterRound("passive") 305 build:afterRound("passive")
297 end 306 end
298 307
299 - self.player:afterRound("buff") 308 + self.player:afterRound("buffAfter")
300 for _, enemy in ipairs(self.enemys[mapIdx]) do 309 for _, enemy in ipairs(self.enemys[mapIdx]) do
301 - enemy:afterRound("buff") 310 + enemy:afterRound("buffAfter")
302 end 311 end
303 for _, build in ipairs(self.builds[mapIdx]) do 312 for _, build in ipairs(self.builds[mapIdx]) do
304 - build:afterRound("buff") 313 + build:afterRound("buffAfter")
305 end 314 end
306 315
307 316
@@ -330,7 +339,7 @@ function Battle:afterRound() @@ -330,7 +339,7 @@ function Battle:afterRound()
330 self.player:triggerPassive(Passive.AFTER_ROUND) 339 self.player:triggerPassive(Passive.AFTER_ROUND)
331 340
332 if self.player.isDead then 341 if self.player.isDead then
333 - self.adv:over(false) 342 + self.adv:over(false, nil, -2)
334 end 343 end
335 end 344 end
336 345
src/adv/AdvPlayer.lua
@@ -55,9 +55,17 @@ function BaseObject:afterRound(roundType) @@ -55,9 +55,17 @@ function BaseObject:afterRound(roundType)
55 for _, passive in ipairs(self.passives) do 55 for _, passive in ipairs(self.passives) do
56 passive:afterRound(self) 56 passive:afterRound(self)
57 end 57 end
58 - elseif roundType == "buff" then 58 + elseif roundType == "buffBefore" then
59 for _, buff in ipairs(self.buffs) do 59 for _, buff in ipairs(self.buffs) do
60 - buff:afterRound() 60 + if buff.buffData.intoEffect == 1 then
  61 + buff:afterRound()
  62 + end
  63 + end
  64 + elseif roundType == "buffAfter" then
  65 + for _, buff in ipairs(self.buffs) do
  66 + if buff.buffData.intoEffect == 0 then
  67 + buff:afterRound()
  68 + end
61 end 69 end
62 end 70 end
63 end 71 end
@@ -416,9 +424,13 @@ end @@ -416,9 +424,13 @@ end
416 function BaseObject:recover(value, releaser, params) 424 function BaseObject:recover(value, releaser, params)
417 params = params or {} 425 params = params or {}
418 value = math.max(0, math.ceil(value)) 426 value = math.max(0, math.ceil(value))
  427 + local old = self.hp
419 self.hp = math.min(self.hpMax, self.hp + value) 428 self.hp = math.min(self.hpMax, self.hp + value)
  429 + local change = self.hp - old
420 if self:is("Player") then 430 if self:is("Player") then
421 - self.battle.adv:pushBackEvent(AdvBackEventType.HpChange, {change = value}) 431 + if change > 0 then
  432 + self.battle.adv:pushBackEvent(AdvBackEventType.HpChange, {change = value})
  433 + end
422 end 434 end
423 end 435 end
424 436
@@ -627,7 +639,9 @@ function Player:changeSp(value, cType) @@ -627,7 +639,9 @@ function Player:changeSp(value, cType)
627 elseif cType == 1 then 639 elseif cType == 1 then
628 change = self.sp * value / 100 640 change = self.sp * value / 100
629 end 641 end
  642 + local old = self.sp
630 self.sp = math.floor(math.min(self.spMax, math.max(0, self.sp + change))) 643 self.sp = math.floor(math.min(self.spMax, math.max(0, self.sp + change)))
  644 + change = self.sp - old
631 if change ~= 0 then 645 if change ~= 0 then
632 self.battle.adv:pushBackEvent(AdvBackEventType.SpChange, {change = math.floor(change)}) 646 self.battle.adv:pushBackEvent(AdvBackEventType.SpChange, {change = math.floor(change)})
633 end 647 end
src/config deleted
@@ -1,18 +0,0 @@ @@ -1,18 +0,0 @@
1 -root = "./"  
2 -thread = 8  
3 -logger = "server.log"  
4 -harbor = 0  
5 -start = "main" -- main script  
6 -bootstrap = "snlua bootstrap" -- The service for bootstrap  
7 -logd = 0 -- 是否开启日志  
8 -servId = 1  
9 -baseId = 0  
10 -codeurl = "106.13.60.20:9090"  
11 -cluster = "./src/nodenames.lua"  
12 -  
13 -lua_path = root .."skynet/lualib/?.lua;"..root.."src/?.lua;"..root.."tools/?.lua"  
14 -luaservice = root.."skynet/service/?.lua;"..root.."src/?.lua"  
15 -lualoader = "skynet/lualib/loader.lua"  
16 -preload = "./src/preload.lua" -- run preload.lua before every lua service run  
17 -cpath = root.."skynet/cservice/?.so"  
18 -lua_cpath = "skynet/luaclib/?.so"  
19 \ No newline at end of file 0 \ No newline at end of file
src/models/Activity.lua
1 local Activity = class("Activity", require("shared.ModelBase")) 1 local Activity = class("Activity", require("shared.ModelBase"))
2 - 2 +local string_format = string.format
3 3
4 Activity.ActivityType = { 4 Activity.ActivityType = {
5 - DoubleDrop = 1, -- 双倍掉落 5 + Sign = 1, -- 签到
6 } 6 }
7 7
8 8
@@ -10,7 +10,7 @@ local function checkActivityType(activityType) @@ -10,7 +10,7 @@ local function checkActivityType(activityType)
10 if type(activityType) == "string" then 10 if type(activityType) == "string" then
11 activityType = Activity.ActivityType[activityType] 11 activityType = Activity.ActivityType[activityType]
12 end 12 end
13 - return activityType 13 + return activityType or 0
14 end 14 end
15 15
16 16
@@ -22,13 +22,14 @@ end @@ -22,13 +22,14 @@ end
22 22
23 23
24 Activity.schema = { 24 Activity.schema = {
25 - ctime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time}  
26 - _1 = {"table", {}}, 25 + actime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time}
  26 + act1 = {"table", {}}, -- {0 = day, 1= -1, 2 = -1} == 签到活动
27 } 27 }
28 28
29 function Activity:data() 29 function Activity:data()
30 return { 30 return {
31 - _1 = self:getProperty("_1"), 31 + actime = self:getProperty("actime"),
  32 + act1 = self:getProperty("act1"),
32 } 33 }
33 end 34 end
34 35
@@ -54,26 +55,141 @@ function Activity:updateProperty(params) @@ -54,26 +55,141 @@ function Activity:updateProperty(params)
54 end 55 end
55 56
56 57
  58 +function Activity:isOpenRaw(activityType, now)
  59 + activityType = checkActivityType(activityType)
  60 + local actData = csvdb["activity_ctrlCsv"][activityType]
  61 + if not actData then return end
  62 +
  63 + if actData.time == "" then -- 关闭
  64 + return false
  65 + end
  66 +
  67 + local st = 0
  68 + local et = 0
  69 + local now = skynet.timex()
  70 +
  71 + if actData.ttype == 0 then -- 时间开放
  72 + local openTimes = actData.time:toArray(false, "=")
  73 + if openTimes[1] ~= "0" then
  74 + st = toUnixtime(openTimes[1]..string_format("%02x", RESET_TIME))
  75 + end
  76 + if openTimes[2] ~= "0" then
  77 + et = toUnixtime(openTimes[2]..string_format("%02x", RESET_TIME))
  78 + end
  79 + elseif actData.ttype == 1 then -- 周期开放
  80 + local openTimes = actData.time:toArray(true, "=")
  81 + local resetTime = toUnixtime(tostring(openTimes[1]) .. string_format("%02x", RESET_TIME))
  82 + local r = math.floor((now - resetTime) / (openTimes[3] * 86400))
  83 + st = resetTime + r * (openTimes[3] * 86400)
  84 + et = st + openTimes[2] * 86400
  85 + else
  86 + return
  87 + end
  88 +
  89 + if now >= st and (et == 0 or now < et) then
  90 + return true, st
  91 + end
  92 + return false
  93 +end
  94 +
  95 +-- 缓存开放
57 function Activity:isOpen(activityType) 96 function Activity:isOpen(activityType)
58 activityType = checkActivityType(activityType) 97 activityType = checkActivityType(activityType)
  98 + return self._isOpen[activityType]
  99 +end
  100 +
  101 +function Activity:getActData(actType)
  102 + actType = checkActivityType(actType)
  103 + return self:getProperty("act" .. actType)
  104 +end
59 105
  106 +function Activity:updateActData(actType, data, notNotify)
  107 + actType = checkActivityType(actType)
  108 + self:updateProperty({field = "act" .. actType, value = data, notNotify = notNotify})
60 end 109 end
61 110
  111 +
62 -- 跨天刷新 --登录刷新 112 -- 跨天刷新 --登录刷新
63 -function Activity:checkActivityStatus(ltime, now, notify)  
64 - 113 +function Activity:checkActivityStatus(now, isCrossDay, notify)
  114 + self._isOpen = {}
  115 + local actime = self:getProperty("actime")
  116 + local change = false
  117 + for actType, actData in pairs(csvdb["activity_ctrlCsv"]) do
  118 + local isOpen, startTime = self:isOpenRaw(actType, now)
  119 + self._isOpen[actType] = isOpen
  120 +
  121 + if isOpen then
  122 + if actime[actType] and actime[actType] == startTime then -- 还是之前的状态 开放中
  123 + else -- 重置
  124 + actime[actType] = startTime
  125 + self:closeActivity(actType, notify, true)
  126 + self:initActivity(actType, isCrossDay, notify)
  127 + change = true
  128 + end
  129 + else
  130 + if actime[actType] then
  131 + self:closeActivity(actType, notify)
  132 + actime[actType] = nil
  133 + change = true
  134 + end
  135 + end
  136 + end
  137 + if change then
  138 + self:updateProperty({field = "actime", value = actime, notNotify = not notify})
  139 + end
65 end 140 end
66 141
67 -local checkActivityFunc = {} 142 +local activityFunc = {}
  143 +
  144 +activityFunc[Activity.ActivityType.Sign] = {
  145 + -- ["check"] = function(self, actType, notify) -- 检查
  146 + -- end,
  147 + ["init"] = function(self, actType, isCrossDay, notify)
  148 + if not isCrossDay then
  149 + activityFunc[Activity.ActivityType.Sign]["crossDay"](self, actType, notify)
  150 + end
  151 + end,
  152 + -- ["close"] = function(self, actType, notify)
  153 + -- end,
  154 + ["crossDay"] = function(self, actType, notify)
  155 + local curData = self:getActData(actType)
  156 + curData[0] = (curData[0] or 0) + 1
  157 + local actData = csvdb["new_signInCsv"]
  158 + if curData[0] > #actData then return end -- 满了就忽略了
  159 +
  160 + -- 没满更新一下
  161 + self:updateActData(actType, curData, not notify)
  162 + end,
  163 +}
  164 +
  165 +function Activity:initActivity(actType, isCrossDay, notify)
  166 + if activityFunc[actType] and activityFunc[actType]['close'] then
  167 + activityFunc[actType]["init"](self, actType, isCrossDay, notify)
  168 + end
  169 +end
68 170
69 -checkActivityFunc[Activity.ActivityType.DoubleDrop] = function(self, notNotify, activityType, ...) 171 +function Activity:closeActivity(actType, notify, notUpdateAct)
  172 + if activityFunc[actType] and activityFunc[actType]['close'] then
  173 + activityFunc[actType]["close"](self, actType, notify)
  174 + end
  175 + self:updateActData(actType, Activity.schema["act" .. actType][2], not notify or notUpdateAct)
  176 +end
70 177
  178 +function Activity:refreshDailyData(notify)
  179 + for actType, status in pairs(self._isOpen) do
  180 + if status then
  181 + if activityFunc[actType] and activityFunc[actType]['crossDay'] then
  182 + activityFunc[actType]["crossDay"](self, actType, notify)
  183 + end
  184 + end
  185 + end
71 end 186 end
72 187
73 -function Activity:checkActivityEnter(notNotify, activityType, ...) 188 +function Activity:checkActivity(notNotify, activityType, ...)
74 if not activityType then return end 189 if not activityType then return end
75 - if checkActivityFunc[activityType] then  
76 - checkActivityFunc[activityType](self, notNotify, activityType, ...) 190 + if not self:isOpen(activityType) then return end
  191 + if activityFunc[activityType] and activityFunc[activityType]['check'] then
  192 + activityFunc[activityType]["check"](self, activityType, not notNotify, ...)
77 end 193 end
78 end 194 end
79 195
src/models/Daily.lua
@@ -10,7 +10,6 @@ Daily.schema = { @@ -10,7 +10,6 @@ Daily.schema = {
10 commentHero = {"string", ""}, -- 单日评论食灵记录 type=1 10 commentHero = {"string", ""}, -- 单日评论食灵记录 type=1
11 hangQC = {"number", 0}, -- 挂机快速次数 11 hangQC = {"number", 0}, -- 挂机快速次数
12 dinerQC = {"number", 0}, -- 贩卖加速次数 12 dinerQC = {"number", 0}, -- 贩卖加速次数
13 - advC = {"number", 0}, -- 冒险次数(消耗体力)  
14 advElC = {"number", 0}, -- 无尽次数(消耗体力) 13 advElC = {"number", 0}, -- 无尽次数(消耗体力)
15 advBC = {"number", 0}, -- 冒险次数购买次数(冒险体力购买次数) 14 advBC = {"number", 0}, -- 冒险次数购买次数(冒险体力购买次数)
16 advElBC = {"number", 0}, -- 无尽次数购买次数(冒险体力购买次数) 15 advElBC = {"number", 0}, -- 无尽次数购买次数(冒险体力购买次数)
@@ -52,7 +51,7 @@ function Daily:refreshDailyData(notify) @@ -52,7 +51,7 @@ function Daily:refreshDailyData(notify)
52 redisproxy:del(FRIEND_POINT:format(self.owner:getProperty("id"))) 51 redisproxy:del(FRIEND_POINT:format(self.owner:getProperty("id")))
53 local dataMap = {} 52 local dataMap = {}
54 for field, schema in pairs(self.schema) do 53 for field, schema in pairs(self.schema) do
55 - if field == "advC" or field == "advElC" then 54 + if field == "advElC" then
56 if self:getProperty(field) > 0 then 55 if self:getProperty(field) > 0 then
57 dataMap[field] = 0 56 dataMap[field] = 0
58 end 57 end
@@ -85,7 +84,6 @@ function Daily:data() @@ -85,7 +84,6 @@ function Daily:data()
85 return { 84 return {
86 hangQC = self:getProperty("hangQC"), 85 hangQC = self:getProperty("hangQC"),
87 dinerQC = self:getProperty("dinerQC"), 86 dinerQC = self:getProperty("dinerQC"),
88 - advC = self:getProperty("advC"),  
89 advBC = self:getProperty("advBC"), 87 advBC = self:getProperty("advBC"),
90 advElC = self:getProperty("advElC"), 88 advElC = self:getProperty("advElC"),
91 advElBC = self:getProperty("advElBC"), 89 advElBC = self:getProperty("advElBC"),
src/models/Role.lua
@@ -83,6 +83,8 @@ Role.schema = { @@ -83,6 +83,8 @@ Role.schema = {
83 advRelay = {"table", {}}, -- 冒险中继点记录 {[chapter] = {[level] = 1}, [-1] = {[level] = 1}} -- -1 无尽 方便重置 83 advRelay = {"table", {}}, -- 冒险中继点记录 {[chapter] = {[level] = 1}, [-1] = {[level] = 1}} -- -1 无尽 方便重置
84 advSup = {"table", {}}, -- 冒险支援效果 待选项 84 advSup = {"table", {}}, -- 冒险支援效果 待选项
85 advLimit = {"table", {}}, -- 冒险事件每次的limit 85 advLimit = {"table", {}}, -- 冒险事件每次的limit
  86 + advC = {"number", 0}, -- 冒险次数(消耗体力)
  87 + advCT = {"number", 0}, -- 冒险次数 上次恢复时间
86 88
87 --挂机相关 89 --挂机相关
88 hangPass = {"table", {}}, -- 挂机通过的最大关卡 90 hangPass = {"table", {}}, -- 挂机通过的最大关卡
@@ -152,6 +154,8 @@ Role.schema = { @@ -152,6 +154,8 @@ Role.schema = {
152 sign = {"table", {}}, -- 签到记录 {[1] = 20181029} 154 sign = {"table", {}}, -- 签到记录 {[1] = 20181029}
153 155
154 redp = {"table", {}}, -- 待消除红点 -- 通常打开对应界面就消除的红点 红点消除的方法 在对应的协议中使用 {tag = pms } 156 redp = {"table", {}}, -- 待消除红点 -- 通常打开对应界面就消除的红点 红点消除的方法 在对应的协议中使用 {tag = pms }
  157 +
  158 + chatline = {"table", {}}, -- 奖励发放 id=时间
155 } 159 }
156 160
157 161
@@ -322,6 +326,8 @@ function Role:data() @@ -322,6 +326,8 @@ function Role:data()
322 advShop = self:getProperty("advShop"), 326 advShop = self:getProperty("advShop"),
323 advEAchiev = self:getProperty("advEAchiev"), 327 advEAchiev = self:getProperty("advEAchiev"),
324 advSup = self:getProperty("advSup"), 328 advSup = self:getProperty("advSup"),
  329 + advC = self:getProperty("advC"),
  330 + advCT = self:getProperty("advCT"),
325 331
326 hangPass = self:getProperty("hangPass"), 332 hangPass = self:getProperty("hangPass"),
327 hangGift = self:getProperty("hangGift"), 333 hangGift = self:getProperty("hangGift"),
@@ -364,6 +370,7 @@ function Role:data() @@ -364,6 +370,7 @@ function Role:data()
364 sign = self:getProperty("sign"), 370 sign = self:getProperty("sign"),
365 371
366 redp = self:getProperty("redp"), 372 redp = self:getProperty("redp"),
  373 + chatline = self:getProperty("chatline"),
367 } 374 }
368 end 375 end
369 376
src/models/RolePlugin.lua
@@ -67,9 +67,16 @@ function RolePlugin.bind(Role) @@ -67,9 +67,16 @@ function RolePlugin.bind(Role)
67 local itemTypeAward = { 67 local itemTypeAward = {
68 [ItemType.Hero] = function() 68 [ItemType.Hero] = function()
69 pms.type = itemId - ItemStartId.Hero 69 pms.type = itemId - ItemStartId.Hero
70 - for _= 1, count do  
71 - self:addHero(pms) 70 + local status = self:addHero(pms)
  71 + local gcount = 1
  72 + if not status then
  73 + gcount = 0
  74 + end
  75 + if count - gcount > 0 then
  76 + local heroData = csvdb["unitCsv"][pms.type]
  77 + change[pms.type] = (change[pms.type] or 0) + (count - gcount) * globalCsv.draw_unit_tofragment[heroData.rare]
72 end 78 end
  79 + count = gcount
73 end, 80 end,
74 [ItemType.EquipBase] = function() 81 [ItemType.EquipBase] = function()
75 local typ = math.floor((itemId-7000)/100) 82 local typ = math.floor((itemId-7000)/100)
@@ -105,7 +112,7 @@ function RolePlugin.bind(Role) @@ -105,7 +112,7 @@ function RolePlugin.bind(Role)
105 end 112 end
106 end 113 end
107 114
108 - return count, change -- count 刷新实际发放的奖励个数 change 物品实际奖励与当前id 不符 就发生转换 而不实际发奖 115 + return count, change -- count 实际发放的奖励个数 change 物品实际奖励与当前id 不符 就发生转换 而不实际发奖
109 end 116 end
110 117
111 118
@@ -122,17 +129,18 @@ function RolePlugin.bind(Role) @@ -122,17 +129,18 @@ function RolePlugin.bind(Role)
122 end 129 end
123 local reward, allChange = {}, {} 130 local reward, allChange = {}, {}
124 131
125 - for itemId, count in pairs(tgift) do  
126 - local count, change = _award(self, itemId, count, params) 132 + for itemId, rcount in pairs(tgift) do
  133 + local count, change = _award(self, itemId, rcount, params)
  134 + if count > 0 then
  135 + reward[itemId] = (reward[itemId] or 0) + count
  136 + end
127 if next(change) then 137 if next(change) then
128 - local cr, cc = self:award(change, params) -- 内部转换忽略  
129 - for _id, _ct in pairs(cr) do  
130 - reward[_id] = (reward[_id] or 0) + _ct  
131 - end  
132 - table.insert(allChange, {form = {[itemId] = count}, to = cr})  
133 - else  
134 - if count > 0 then  
135 - reward[itemId] = (reward[itemId] or 0) + count 138 + local cr, _ = self:award(change, params) -- 内部转换忽略 防止死循环
  139 + if next(cr) then
  140 + for _id, _ct in pairs(cr) do
  141 + reward[_id] = (reward[_id] or 0) + _ct
  142 + end
  143 + table.insert(allChange, {form = {[itemId] = rcount - count}, to = cr})
136 end 144 end
137 end 145 end
138 end 146 end
@@ -398,22 +406,14 @@ function RolePlugin.bind(Role) @@ -398,22 +406,14 @@ function RolePlugin.bind(Role)
398 if not unitData then return false end 406 if not unitData then return false end
399 407
400 local heroId = tonum(redisproxy:hincrby(string.format(R_INCR, roleId), "hero", 1)) 408 local heroId = tonum(redisproxy:hincrby(string.format(R_INCR, roleId), "hero", 1))
401 -  
402 409
403 redisproxy:sadd(string.format(R_HEROS, roleId), heroId) 410 redisproxy:sadd(string.format(R_HEROS, roleId), heroId)
404 411
405 - local wakeL = 1  
406 - if unitData.rare == 3 then  
407 - wakeL = 2  
408 - elseif unitData.rare == 4 then  
409 - wakeL = 3  
410 - end  
411 -  
412 local heroInfo = { 412 local heroInfo = {
413 key = string.format(R_HERO, roleId, heroId), 413 key = string.format(R_HERO, roleId, heroId),
414 id = heroId, 414 id = heroId,
415 type= heroType, 415 type= heroType,
416 - wakeL = wakeL, 416 + wakeL = globalCsv.unit_wake_initLevel[unitData.rare],
417 } 417 }
418 418
419 local newHero = require("models.Hero").new(heroInfo) 419 local newHero = require("models.Hero").new(heroInfo)
@@ -846,6 +846,37 @@ function RolePlugin.bind(Role) @@ -846,6 +846,37 @@ function RolePlugin.bind(Role)
846 return globalCsv.adv_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCount) 846 return globalCsv.adv_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCount)
847 end 847 end
848 848
  849 + function Role:checkAdvCount(need)
  850 + local oldCount = self:getProperty("advC")
  851 + local oldTime = self:getProperty("advCT")
  852 + local newCount = oldCount
  853 + if oldCount > 0 then
  854 + local add = math.max(math.floor((skynet.timex() - oldTime) / (globalCsv.adv_daily_regain_min * 60)), 0)
  855 + newCount = math.max(oldCount - add, 0)
  856 + end
  857 +
  858 + return newCount + need <= self:getAdvHangLimit()
  859 + end
  860 +
  861 + --忽略上限
  862 + function Role:changeAdvCount(change)
  863 + if change == 0 then return end
  864 + local count = self:getProperty("advC")
  865 + local ctime = self:getProperty("advCT")
  866 + if ctime == 0 then
  867 + ctime = skynet.timex()
  868 + end
  869 + local add = math.max(math.floor((skynet.timex() - ctime) / (globalCsv.adv_daily_regain_min * 60)), 0)
  870 + local nextTime = ctime + add * (globalCsv.adv_daily_regain_min * 60)
  871 + if count > 0 then
  872 + count = math.max(count - add, 0)
  873 + end
  874 + self:updateProperties({
  875 + advC = count + change,
  876 + advCT = nextTime,
  877 + })
  878 + end
  879 +
849 function Role:getAdvElLimit() 880 function Role:getAdvElLimit()
850 return globalCsv.adv_endless_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCountEL) 881 return globalCsv.adv_endless_daily_cross_count + self:getFuncLv(FuncOpenType.AdvCountEL)
851 end 882 end
src/models/RoleTask.lua
@@ -132,7 +132,7 @@ local CommonListener = { @@ -132,7 +132,7 @@ local CommonListener = {
132 [TaskType.GetFriendP] = {{22, f("count")}}, 132 [TaskType.GetFriendP] = {{22, f("count")}},
133 [TaskType.BonusPass] = {{23}}, 133 [TaskType.BonusPass] = {{23}},
134 [TaskType.AdvStartSelf] = {{24}}, 134 [TaskType.AdvStartSelf] = {{24}},
135 - [TaskType.ShopAll] = {{25}}, 135 + [TaskType.ShopAll] = {{25, f("count")}},
136 [TaskType.RuneUp] = {{26}}, 136 [TaskType.RuneUp] = {{26}},
137 [TaskType.OpenBox] = {{27, 1, f("id")}}, 137 [TaskType.OpenBox] = {{27, 1, f("id")}},
138 [TaskType.AdvDraw] = {{28, f("count"), f("ptype")}}, 138 [TaskType.AdvDraw] = {{28, f("count"), f("ptype")}},
@@ -526,7 +526,7 @@ function RoleTask.bind(Role) @@ -526,7 +526,7 @@ function RoleTask.bind(Role)
526 end 526 end
527 527
528 function Role:checkActivityTask(notNotify, activityType, ...) 528 function Role:checkActivityTask(notNotify, activityType, ...)
529 - self.activity:checkActivityEnter(notNotify, activityType, ...) 529 + self.activity:checkActivity(notNotify, activityType, ...)
530 end 530 end
531 531
532 end 532 end
src/models/RoleTimeReset.lua
@@ -4,9 +4,12 @@ RoleTimeReset.bind = function (Role) @@ -4,9 +4,12 @@ RoleTimeReset.bind = function (Role)
4 4
5 -- 重置内容 对应 GlobalVar TimeReset 5 -- 重置内容 对应 GlobalVar TimeReset
6 local ResetFunc = {} 6 local ResetFunc = {}
7 -ResetFunc["CrossDay"] = function(self, notify, response) 7 +ResetFunc["CrossDay"] = function(self, notify, response, now)
  8 + self.activity:checkActivityStatus(now, true, notify)
  9 +
8 self.dailyData:refreshDailyData(notify) 10 self.dailyData:refreshDailyData(notify)
9 self.dinerData:refreshDailyData(notify) 11 self.dinerData:refreshDailyData(notify)
  12 + self.activity:refreshDailyData(notify)
10 13
11 self:setProperty("dTask", {}) 14 self:setProperty("dTask", {})
12 self:advRandomSupportEffect(not notify) 15 self:advRandomSupportEffect(not notify)
@@ -55,10 +58,13 @@ function Role:updateTimeReset(now, notify) @@ -55,10 +58,13 @@ function Role:updateTimeReset(now, notify)
55 end 58 end
56 if not next(needResetId) then return end 59 if not next(needResetId) then return end
57 60
  61 + local resetMode = {}
  62 +
58 local response = {} 63 local response = {}
59 for funcName, resetId in pairs(TimeReset) do 64 for funcName, resetId in pairs(TimeReset) do
60 if needResetId[resetId] and ResetFunc[funcName] then 65 if needResetId[resetId] and ResetFunc[funcName] then
61 - ResetFunc[funcName](self, notify, response) 66 + ResetFunc[funcName](self, notify, response, now)
  67 + resetMode[funcName] = true
62 end 68 end
63 end 69 end
64 70
@@ -71,6 +77,7 @@ function Role:updateTimeReset(now, notify) @@ -71,6 +77,7 @@ function Role:updateTimeReset(now, notify)
71 if notify then 77 if notify then
72 self:notifyUpdateProperties(response) 78 self:notifyUpdateProperties(response)
73 end 79 end
  80 + return resetMode
74 end 81 end
75 82
76 -- 持续时间取 min(interval, duration) duration 填 0 默认使用 interval 作为持续时间 83 -- 持续时间取 min(interval, duration) duration 填 0 默认使用 interval 作为持续时间
src/services/pvpd.lua
@@ -103,31 +103,27 @@ end @@ -103,31 +103,27 @@ end
103 local function hideMatchInfo() 103 local function hideMatchInfo()
104 local day, ctime = getDayAndTime() 104 local day, ctime = getDayAndTime()
105 local tempMatchCache = {} 105 local tempMatchCache = {}
106 - if day > globalCsv.pvp_cross_server_day then  
107 - return MatchCache  
108 - else  
109 - for round, tempData in pairs(MatchCache) do  
110 - if round == day and ctime < globalCsv.pvp_cross_server_show_result - 1 then  
111 - tempMatchCache[round] = {}  
112 - for idx, match in pairs(tempData) do  
113 - tempMatchCache[round][idx] = {  
114 - [1] = match[1],  
115 - [2] = match[2],  
116 - }  
117 - end  
118 - elseif round <= day then  
119 - tempMatchCache[round] = {}  
120 - for idx, match in pairs(tempData) do  
121 - tempMatchCache[round][idx] = {  
122 - [1] = match[1],  
123 - [2] = match[2],  
124 - win = match.win,  
125 - battleV = {  
126 - [match[1]] = (match.teams[match[1]] or {}).battleV,  
127 - [match[2]] = (match.teams[match[2]] or {}).battleV,  
128 - } 106 + for round, tempData in pairs(MatchCache) do
  107 + if round == day and ctime < globalCsv.pvp_cross_server_show_result - 1 then
  108 + tempMatchCache[round] = {}
  109 + for idx, match in pairs(tempData) do
  110 + tempMatchCache[round][idx] = {
  111 + [1] = match[1],
  112 + [2] = match[2],
  113 + }
  114 + end
  115 + elseif round <= day then
  116 + tempMatchCache[round] = {}
  117 + for idx, match in pairs(tempData) do
  118 + tempMatchCache[round][idx] = {
  119 + [1] = match[1],
  120 + [2] = match[2],
  121 + win = match.win,
  122 + battleV = {
  123 + [match[1]] = (match.teams[match[1]] or {}).battleV,
  124 + [match[2]] = (match.teams[match[2]] or {}).battleV,
129 } 125 }
130 - end 126 + }
131 end 127 end
132 end 128 end
133 end 129 end