Commit fa8de8ea66b5f7135ae4566de300ca7858ed350f

Authored by 测试
2 parents 7cbf1146 2be863e2

将军令一键领取bug

src/actions/ActivityAction.lua
@@ -555,6 +555,7 @@ function _M.startBattleRpc(agent, data) @@ -555,6 +555,7 @@ function _M.startBattleRpc(agent, data)
555 key = tostring(math.random()), 555 key = tostring(math.random()),
556 actid = actid, 556 actid = actid,
557 id = id, 557 id = id,
  558 + format = msg.format,
558 } 559 }
559 SendPacket(actionCodes.Activity_startBattleRpc, MsgPack.pack({key = role.__actBattleCache.key})) 560 SendPacket(actionCodes.Activity_startBattleRpc, MsgPack.pack({key = role.__actBattleCache.key}))
560 else 561 else
@@ -623,6 +624,18 @@ function _M.endBattleRpc(agent, data) @@ -623,6 +624,18 @@ function _M.endBattleRpc(agent, data)
623 SendPacket(actionCodes.Activity_endBattleRpc, MsgPack.pack({errorCode = 1})) 624 SendPacket(actionCodes.Activity_endBattleRpc, MsgPack.pack({errorCode = 1}))
624 end 625 end
625 626
  627 + -- 防作弊
  628 + if not role:checkBattleCheat("act_battle", {
  629 + id = id,
  630 + isWin = isWin,
  631 + info = msg.info,
  632 + format = role.__actBattleCache.format
  633 + }) then
  634 + SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1}))
  635 + return true
  636 + end
  637 + role.__actBattleCache = nil
  638 +
626 local actCfg = csvdb["activity_battleCsv"][actid] 639 local actCfg = csvdb["activity_battleCsv"][actid]
627 if not actCfg then return 3 end 640 if not actCfg then return 3 end
628 641
@@ -1167,6 +1180,7 @@ function _M.battleCommandRpc(agent, data) @@ -1167,6 +1180,7 @@ function _M.battleCommandRpc(agent, data)
1167 local bpCfg = csvdb["activity_battlepass_rewardCsv"][actid] 1180 local bpCfg = csvdb["activity_battlepass_rewardCsv"][actid]
1168 if not bpCfg then return 3 end 1181 if not bpCfg then return 3 end
1169 1182
  1183 + local unlock = actData["unlock"] or 0
1170 local award = {} 1184 local award = {}
1171 if not index then -- 一键领取 1185 if not index then -- 一键领取
1172 for i = 1, #bpCfg do 1186 for i = 1, #bpCfg do
@@ -1178,6 +1192,9 @@ function _M.battleCommandRpc(agent, data) @@ -1178,6 +1192,9 @@ function _M.battleCommandRpc(agent, data)
1178 1192
1179 for _, info in ipairs(records) do 1193 for _, info in ipairs(records) do
1180 local typeKey, rewardKey = info[1], info[2] 1194 local typeKey, rewardKey = info[1], info[2]
  1195 + if typeKey == "payR" and unlock == 0 then
  1196 + break
  1197 + end
1181 local record = actData[typeKey] or "" 1198 local record = actData[typeKey] or ""
1182 local flag = string.char(string.getbit(record, i)) 1199 local flag = string.char(string.getbit(record, i))
1183 if flag == "0" then 1200 if flag == "0" then
@@ -1321,7 +1338,8 @@ function _M.advLevelRpc(agent, data) @@ -1321,7 +1338,8 @@ function _M.advLevelRpc(agent, data)
1321 if not actCfg then return 3 end 1338 if not actCfg then return 3 end
1322 1339
1323 local actData = role.activity:getActData("AdvLevel") or {} 1340 local actData = role.activity:getActData("AdvLevel") or {}
1324 - local record = actData["r"] 1341 + local record = actData["r"] or ""
  1342 + print(record, index)
1325 local flag = string.char(string.getbit(record, index)) 1343 local flag = string.char(string.getbit(record, index))
1326 1344
1327 if flag == "1" then return 4 end 1345 if flag == "1" then return 4 end
@@ -1330,7 +1348,8 @@ function _M.advLevelRpc(agent, data) @@ -1330,7 +1348,8 @@ function _M.advLevelRpc(agent, data)
1330 local totalVal = 0 1348 local totalVal = 0
1331 for i = 1, #chapters do 1349 for i = 1, #chapters do
1332 local cid = chapters[i] 1350 local cid = chapters[i]
1333 - totalVal = totalVal + (actData[cid] or 0) 1351 + local info = actData[cid] or {}
  1352 + totalVal = totalVal + (info["max"] or 0)
1334 end 1353 end
1335 if totalVal < actCfg["condition1"] then return 5 end 1354 if totalVal < actCfg["condition1"] then return 5 end
1336 1355
src/actions/AdvAction.lua
@@ -170,7 +170,8 @@ function _M.startAdvRpc( agent, data ) @@ -170,7 +170,8 @@ function _M.startAdvRpc( agent, data )
170 local relayData = role:getAdvData():isHaveRelay(layer, chapterId, true) 170 local relayData = role:getAdvData():isHaveRelay(layer, chapterId, true)
171 if not relayData then return 6 end -- 不是中继层 171 if not relayData then return 6 end -- 不是中继层
172 if layer ~= 1 then 172 if layer ~= 1 then
173 - if (advPass[chapterId] or 0) < relayData.floor then return 21 end 173 + local advRelay = role:getProperty("advRelay")
  174 + if not (advRelay[chapterId] or {})[layer] then return 21 end -- 没有开放
174 end 175 end
175 if not role:checkAdvCount(relayData.supply) then return 2 end -- 是否有体力 176 if not role:checkAdvCount(relayData.supply) then return 2 end -- 是否有体力
176 -- 关卡开放判断 177 -- 关卡开放判断
@@ -259,7 +260,7 @@ function _M.startHangRpc(agent, data) @@ -259,7 +260,7 @@ function _M.startHangRpc(agent, data)
259 end 260 end
260 end 261 end
261 262
262 - local chapterData = csvdb["adv_chapter_campsiteCsv"][chapterId] 263 + local chapterData = csvdb["adv_chapter_campsiteCsv"][chapterId]
263 if not chapterData then return 1 end 264 if not chapterData then return 1 end
264 local campSiteData = chapterData[campId] 265 local campSiteData = chapterData[campId]
265 if not campSiteData then return 1 end 266 if not campSiteData then return 1 end
@@ -281,7 +282,7 @@ function _M.startHangRpc(agent, data) @@ -281,7 +282,7 @@ function _M.startHangRpc(agent, data)
281 if AdvCommon.isEndless(chapterId) then return 5 end -- 无尽没有代理 282 if AdvCommon.isEndless(chapterId) then return 5 end -- 无尽没有代理
282 283
283 local advRelay = role:getProperty("advRelay") 284 local advRelay = role:getProperty("advRelay")
284 - if not next(advRelay[chapterId] or {}) then return 6 end -- 没有开放 285 + if not (advRelay[chapterId] or {})[campSiteData.floor] then return 6 end -- 没有开放
285 286
286 287
287 if not role:checkAdvCount(adv_idle_energy) then return 7 end -- 是否有体力 288 if not role:checkAdvCount(adv_idle_energy) then return 7 end -- 是否有体力
src/actions/GmAction.lua
@@ -36,26 +36,15 @@ function _M.ban(role, pms) @@ -36,26 +36,15 @@ function _M.ban(role, pms)
36 local time = tonum(pms.pm1, 1) 36 local time = tonum(pms.pm1, 1)
37 local ctype = tonum(pms.pm2, 0) 37 local ctype = tonum(pms.pm2, 0)
38 38
39 - local isBan = role:getProperty("banTime") <= now  
40 role:setBan(time, ctype) 39 role:setBan(time, ctype)
41 - if time > 0 then  
42 - role:sendGmMsg("server_accountBanned_1")  
43 - local agent = datacenter.get("agent", role:getProperty("id"))  
44 - if agent then  
45 - skynet.timeout(50, function ()  
46 - skynet.call(agent.gate_serv, "lua", "forcekick", agent.fd)  
47 - end)  
48 - end  
49 - end  
50 -  
51 role:mylog("gm_action", {desc = "ban", int1 = time, int2 = ctype, key1 = pms.sender}) 40 role:mylog("gm_action", {desc = "ban", int1 = time, int2 = ctype, key1 = pms.sender})
52 -  
53 - return isBan and "解封杀成功" or "封杀成功" 41 + return "封杀成功"
54 end 42 end
55 43
  44 +
56 function _M.unban(role, pms) 45 function _M.unban(role, pms)
57 role:setBan(0, 0) 46 role:setBan(0, 0)
58 - 47 + role:setProperty("cheatCount", 0) -- 清除作弊次数
59 role:mylog("gm_action", {desc = "unban", key1 = pms.sender}) 48 role:mylog("gm_action", {desc = "unban", key1 = pms.sender})
60 49
61 return "解封杀成功" 50 return "解封杀成功"
@@ -63,18 +52,17 @@ end @@ -63,18 +52,17 @@ end
63 52
64 function _M.gmmsg(role, pms) 53 function _M.gmmsg(role, pms)
65 role:sendGmMsg(pms.pm1, true) 54 role:sendGmMsg(pms.pm1, true)
66 -  
67 - local agent = datacenter.get("agent", role:getProperty("id"))  
68 - if agent then  
69 - skynet.timeout(50, function ()  
70 - skynet.call(agent.gate_serv, "lua", "forcekick", agent.fd)  
71 - end)  
72 - end  
73 role:mylog("gm_action", {desc = "gmmsg", text1 = pms.pm1, key1 = pms.sender}) 55 role:mylog("gm_action", {desc = "gmmsg", text1 = pms.pm1, key1 = pms.sender})
74 -  
75 return "指令成功" 56 return "指令成功"
76 end 57 end
77 58
  59 +
  60 +function _M.reset_rank(role, pms)
  61 + role:resetRank()
  62 + role:mylog("gm_action", {desc = "reset_rank", key1 = pms.sender})
  63 + return "封杀成功"
  64 +end
  65 +
78 function _M.silent(role, pms) 66 function _M.silent(role, pms)
79 local pm1 = tonum(pms.pm1) 67 local pm1 = tonum(pms.pm1)
80 if pm1 < 1 then 68 if pm1 < 1 then
@@ -371,6 +359,7 @@ function _M.advt(role, pms) @@ -371,6 +359,7 @@ function _M.advt(role, pms)
371 local chapterId = tonum(pms.pm1) 359 local chapterId = tonum(pms.pm1)
372 local layer = tonum(pms.pm2) 360 local layer = tonum(pms.pm2)
373 local mapId = tonum(pms.pm3) 361 local mapId = tonum(pms.pm3)
  362 + local actid = tonum(pms.pm4)
374 local advCsv = csvdb["adv_chapterCsv"][chapterId] 363 local advCsv = csvdb["adv_chapterCsv"][chapterId]
375 if not advCsv then return "不存在的章节" end 364 if not advCsv then return "不存在的章节" end
376 365
@@ -387,6 +376,7 @@ function _M.advt(role, pms) @@ -387,6 +376,7 @@ function _M.advt(role, pms)
387 level = layer, 376 level = layer,
388 isEnter = true, 377 isEnter = true,
389 debugMapId = mapId, 378 debugMapId = mapId,
  379 + actid = actid,
390 }) 380 })
391 role:mylog("gm_action", {desc = "advt", int1 = chapterId, int2 = layer, key1 = pms.sender}) 381 role:mylog("gm_action", {desc = "advt", int1 = chapterId, int2 = layer, key1 = pms.sender})
392 return "成功" 382 return "成功"
src/actions/HangAction.lua
@@ -235,6 +235,16 @@ function _M.endBattleRpc(agent, data) @@ -235,6 +235,16 @@ function _M.endBattleRpc(agent, data)
235 return 4 235 return 4
236 end 236 end
237 237
  238 + -- 防作弊
  239 + if not role:checkBattleCheat("hang", {
  240 + id = carbonId,
  241 + isWin = isWin,
  242 + info = msg.info
  243 + }) then
  244 + SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({errorCode = 1}))
  245 + return true
  246 + end
  247 +
238 local reward, change 248 local reward, change
239 if isWin then --win 249 if isWin then --win
240 role:hangFinish(carbonId) 250 role:hangFinish(carbonId)
@@ -609,6 +619,18 @@ function _M.endBonusBattleRpc(agent, data) @@ -609,6 +619,18 @@ function _M.endBonusBattleRpc(agent, data)
609 SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1})) 619 SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1}))
610 return true 620 return true
611 end 621 end
  622 + role.__bonusBattleCache = nil
  623 +
  624 + -- 防作弊
  625 + if not role:checkBattleCheat("bonus", {
  626 + id = id,
  627 + isWin = starNum and starNum > 0,
  628 + info = msg.info
  629 + }) then
  630 + SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1}))
  631 + return true
  632 + end
  633 +
612 local bonusData = csvdb["bonus_battleCsv"][id] 634 local bonusData = csvdb["bonus_battleCsv"][id]
613 635
614 local reward, change = {} 636 local reward, change = {}
src/actions/PvpAction.lua
@@ -372,6 +372,16 @@ function _M.endBattleRpc(agent, data) @@ -372,6 +372,16 @@ function _M.endBattleRpc(agent, data)
372 372
373 if not match then return end 373 if not match then return end
374 374
  375 + -- 防作弊
  376 + if not role:checkBattleCheat("pvpc", {
  377 + isWin = isWin,
  378 + info = msg.info,
  379 + format = _pvpStartBattleCacheC.pvpTC,
  380 + }) then
  381 + SendPacket(actionCodes.Pvp_endBattleRpc, MsgPack.pack({errorCode = 1}))
  382 + return true
  383 + end
  384 +
375 local temp = string.randWeight(csvdb["player_expCsv"][role:getProperty("level")].pvpBonus, true) 385 local temp = string.randWeight(csvdb["player_expCsv"][role:getProperty("level")].pvpBonus, true)
376 local reward, change = role:award({[temp[1]] = temp[2]}, {log = {desc = "pvpBattleC"}}) 386 local reward, change = role:award({[temp[1]] = temp[2]}, {log = {desc = "pvpBattleC"}})
377 local myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = 0, 0, 0, 0, -1, -1 387 local myScore, matchScore, oldmyScore, oldMatchScore, myRank, oldMyRank = 0, 0, 0, 0, -1, -1
@@ -652,13 +662,22 @@ function _M.endBattleHRpc(agent, data) @@ -652,13 +662,22 @@ function _M.endBattleHRpc(agent, data)
652 end 662 end
653 end 663 end
654 664
  665 + -- 防作弊
  666 + if not role:checkBattleCheat("pvph", {
  667 + isWin = isWin,
  668 + info = msg.info,
  669 + format = _pvpStartBattleCacheH.pvpTH[#_pvpStartBattleCacheH.result]
  670 + }) then
  671 + SendPacket(actionCodes.Pvp_endBattleHRpc, MsgPack.pack({errorCode = 1}))
  672 + return true
  673 + end
  674 +
655 if winCount >= 2 then 675 if winCount >= 2 then
656 isWin = true 676 isWin = true
657 elseif loseCount >= 2 then 677 elseif loseCount >= 2 then
658 isWin = false 678 isWin = false
659 else -- 没结束 679 else -- 没结束
660 -- 返回继续战斗 680 -- 返回继续战斗
661 -  
662 local key = tostring(math.random()) 681 local key = tostring(math.random())
663 _pvpStartBattleCacheH.key = key 682 _pvpStartBattleCacheH.key = key
664 local round = #_pvpStartBattleCacheH.result + 1 683 local round = #_pvpStartBattleCacheH.result + 1
src/actions/TowerAction.lua
@@ -65,6 +65,15 @@ function _M.endBattleRpc(agent, data) @@ -65,6 +65,15 @@ function _M.endBattleRpc(agent, data)
65 local curTower = csvdb["tower_battleCsv"][id] 65 local curTower = csvdb["tower_battleCsv"][id]
66 if not curTower then return 2 end 66 if not curTower then return 2 end
67 67
  68 + -- 防作弊
  69 + if not role:checkBattleCheat("tower", {
  70 + isWin = msg.starNum and msg.starNum > 0,
  71 + info = msg.info
  72 + }) then
  73 + SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({errorCode = 1}))
  74 + return true
  75 + end
  76 +
68 local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t) 77 local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
69 78
70 79
@@ -143,9 +143,6 @@ function Adv:initByChapter(params) @@ -143,9 +143,6 @@ function Adv:initByChapter(params)
143 local chapter = self:isEndless() and -1 or self.chapterId 143 local chapter = self:isEndless() and -1 or self.chapterId
144 if not (advRelay[chapter] or {})[self.level] then 144 if not (advRelay[chapter] or {})[self.level] then
145 isNewRelay = true 145 isNewRelay = true
146 - advRelay[chapter] = advRelay[chapter] or {}  
147 - advRelay[chapter][self.level] = 1  
148 - self.owner:updateProperty({field = "advRelay", value = advRelay})  
149 end 146 end
150 end 147 end
151 148
@@ -160,8 +157,6 @@ function Adv:initByChapter(params) @@ -160,8 +157,6 @@ function Adv:initByChapter(params)
160 157
161 self:initLayerTask() 158 self:initLayerTask()
162 159
163 -  
164 -  
165 self:checkTask(Adv.TaskType.Arrive) 160 self:checkTask(Adv.TaskType.Arrive)
166 self:checkAdvUnlock(1, self.level) 161 self:checkAdvUnlock(1, self.level)
167 162
@@ -175,6 +170,20 @@ function Adv:initByChapter(params) @@ -175,6 +170,20 @@ function Adv:initByChapter(params)
175 end 170 end
176 end 171 end
177 172
  173 +function Adv:passAdvRelay()
  174 + local advRelay = self.owner:getProperty("advRelay")
  175 + local chapter = self:isEndless() and -1 or self.chapterId
  176 + if not (advRelay[chapter] or {})[self.level] then
  177 + advRelay[chapter] = advRelay[chapter] or {}
  178 + advRelay[chapter][self.level] = 1
  179 + self.owner:updateProperty({field = "advRelay", value = advRelay})
  180 + local relayData = self:isHaveRelay()
  181 + if relayData and relayData.award ~= "" then
  182 + self:pushBackEvent(AdvBackEventType.RelayReward, {items = self:award(relayData.award:toNumMap(), {log = {desc = "relayReward"}})})
  183 + end
  184 + end
  185 +end
  186 +
178 function Adv:clear() 187 function Adv:clear()
179 self.chapterId = nil 188 self.chapterId = nil
180 self.level = nil 189 self.level = nil
@@ -1227,6 +1236,7 @@ local function clickOut(self, room, block, params, isExit) @@ -1227,6 +1236,7 @@ local function clickOut(self, room, block, params, isExit)
1227 end 1236 end
1228 1237
1229 if not self:isEndless() and (self.level >= csvdb["adv_chapterCsv"][self.chapterId].limitlevel) then --关卡结束 1238 if not self:isEndless() and (self.level >= csvdb["adv_chapterCsv"][self.chapterId].limitlevel) then --关卡结束
  1239 + self:passAdvRelay()
1230 self:over(true) 1240 self:over(true)
1231 else 1241 else
1232 self.battle.player:triggerPassive(Passive.DOWN_LAYER) 1242 self.battle.player:triggerPassive(Passive.DOWN_LAYER)
@@ -1779,10 +1789,7 @@ function Adv:clickBlock(roomId, blockId, params) @@ -1779,10 +1789,7 @@ function Adv:clickBlock(roomId, blockId, params)
1779 if self.isRelay or checkAroundBlocks() then --开放 1789 if self.isRelay or checkAroundBlocks() then --开放
1780 self:getCurMap():openBlock(roomId, blockId, true, true) 1790 self:getCurMap():openBlock(roomId, blockId, true, true)
1781 if self.isRelay and self:getCurMap():isAllOpen() then -- 发放翻开的奖励 1791 if self.isRelay and self:getCurMap():isAllOpen() then -- 发放翻开的奖励
1782 - local relayData = self:isHaveRelay()  
1783 - if relayData and relayData.award ~= "" then  
1784 - self:pushBackEvent(AdvBackEventType.RelayReward, {items = self:award(relayData.award:toNumMap(), {log = {desc = "relayReward"}})})  
1785 - end 1792 + self:passAdvRelay()
1786 end 1793 end
1787 status = true 1794 status = true
1788 end 1795 end
src/models/Role.lua
@@ -53,6 +53,7 @@ Role.schema = { @@ -53,6 +53,7 @@ Role.schema = {
53 banTime = {"number", 0}, 53 banTime = {"number", 0},
54 banType = {"number", 0}, 54 banType = {"number", 0},
55 heartWarning = {"number", 0}, 55 heartWarning = {"number", 0},
  56 + cheatCount = {"number", 0},
56 ltime = {"number", 0}, -- 最后登录时间 57 ltime = {"number", 0}, -- 最后登录时间
57 ctime = {"number", skynet.timex()}, -- 创建时间 58 ctime = {"number", skynet.timex()}, -- 创建时间
58 ignoreMt = {"number", 0}, -- 忽略维护拦截 59 ignoreMt = {"number", 0}, -- 忽略维护拦截
@@ -357,6 +358,7 @@ function Role:data() @@ -357,6 +358,7 @@ function Role:data()
357 advSup = self:getProperty("advSup"), 358 advSup = self:getProperty("advSup"),
358 advC = self:getProperty("advC"), 359 advC = self:getProperty("advC"),
359 advCT = self:getProperty("advCT"), 360 advCT = self:getProperty("advCT"),
  361 + advRelay = self:getProperty("advRelay"),
360 362
361 hangPass = self:getProperty("hangPass"), 363 hangPass = self:getProperty("hangPass"),
362 hangGift = self:getProperty("hangGift"), 364 hangGift = self:getProperty("hangGift"),
src/models/RoleBattle.lua
@@ -21,13 +21,153 @@ local BattleType = { @@ -21,13 +21,153 @@ local BattleType = {
21 21
22 RoleBattle.bind = function (Role) 22 RoleBattle.bind = function (Role)
23 23
  24 +local checkCheatAttrs = {
  25 + ["hp"] = 1,
  26 + ["atk"] = 1,
  27 + ["def"] = 1,
  28 + ["hit"] = 1,
  29 + ["miss"] = 1,
  30 + ["crit"] = 1,
  31 + ["atkSpeed"] = 1,
  32 + ["critHurt"] = 1,
  33 + -- ["vampire"] = 1,
  34 + -- ["pierce"] = 1,
  35 +}
24 36
25 --- TODO 检查战斗是否作弊  
26 -local function checkBattleCheat()  
27 - 37 +local function checkOneCheat(selfTeamClient, selfTeamServer, enemyClient, enemyServer)
  38 + if not selfTeamClient or type(selfTeamClient) ~= "table" then return end
  39 + for unitType, clientInfo in pairs(selfTeamClient) do
  40 + local serverInfo = selfTeamServer[unitType]
  41 + if not serverInfo then return end
  42 + for attr, pm in pairs(checkCheatAttrs) do
  43 + if not clientInfo[attr] then return end
  44 + end
  45 + local b1 = ((clientInfo["hp"] + clientInfo["def"] * 7 + clientInfo["miss"] * 4) * (clientInfo["atk"] * 4 + clientInfo["hit"] * 2) * (1 + clientInfo["crit"]/100 * clientInfo["critHurt"]/100) * clientInfo["atkSpeed"] / 600000) ^ 0.8
  46 + local b2 = ((serverInfo["hp"] + serverInfo["def"] * 7 + serverInfo["miss"] * 4) * (serverInfo["atk"] * 4 + serverInfo["hit"] * 2) * (1 + serverInfo["crit"]/100 * serverInfo["critHurt"]/100) * serverInfo["atkSpeed"] / 600000) ^ 0.8
  47 + if b1 >= b2 * 2 then
  48 + return
  49 + end
  50 + end
  51 + return true
28 end 52 end
29 53
  54 +-- local function getRobotAttrs(info, strength)
  55 +-- strength = strength or 10000
  56 +-- local unitData = csvdb["unitCsv"][info.unitType]
  57 +-- local enemy = {}
  58 +-- for arr, _ in pairs(checkCheatAttrs) do
  59 +-- enemy[arr] = unitData[attr] * info[attr] * strength / 10000
  60 +-- end
  61 +-- return enemy
  62 +-- end
  63 +
  64 +-- --通过配表构建敌人队伍 通用
  65 +-- function BattleEnter:packBattleEnemyCommon( carbonData )
  66 +-- local enemys = {}
  67 +-- local monsterSet = csvdb[carbonData.monster:match("/([^/]*)$") .. "Csv"]
  68 +-- for phase = 1, #monsterSet do
  69 +-- local allEnemys = table.values(monsterSet[phase])
  70 +-- table.sort(allEnemys, function(a, b) return a.id < b.id end)
  71 +-- local heros = {}
  72 +-- for idx, enemy in ipairs(allEnemys) do
  73 +-- local info = getRobotAttrs(enemy, carbonData.strength)
  74 +-- enemys[idx] = info
  75 +-- end
  76 +-- break
  77 +-- end
  78 +-- return enemys
  79 +-- end
  80 +
  81 +-- 检查战斗是否作弊
  82 +function Role:checkBattleCheat(battleType, params)
  83 + if not params.isWin then return true end
  84 + local clientInfo = params.info or {}
  85 +
  86 + if not BattleType[battleType] then
  87 + print(string.format("NO find battleType: %s", battleType))
  88 + return true
  89 + end
  90 + local selfTeamServer = {}
  91 + local enemyServer = {}
  92 +
  93 + local cheat = {}
  94 + cheat["hang"] = function()
  95 + local team = self:getTeamBattleInfo(self:getTeamFormatByType(TeamSystemType.Hang))
  96 + for slot, hero in pairs(team.heros) do
  97 + local temp = {}
  98 + for arr, _ in pairs(checkCheatAttrs) do
  99 + temp[arr] = hero[arr]
  100 + end
  101 + selfTeamServer[hero.type] = temp
  102 + end
  103 + -- local carbonData = csvdb["idle_battleCsv"][params.id]
  104 + -- enemyServer = packBattleEnemyCommon(carbonData)
  105 + end
  106 + cheat["tower"] = function()
  107 + local team = self:getTeamBattleInfo(self:getTeamFormatByType(TeamSystemType.Tower))
  108 + for slot, hero in pairs(team.heros) do
  109 + local temp = {}
  110 + for arr, _ in pairs(checkCheatAttrs) do
  111 + temp[arr] = hero[arr]
  112 + end
  113 + selfTeamServer[hero.type] = temp
  114 + end
  115 + -- local carbonData = csvdb["tower_battleCsv"][params.id]
  116 + -- enemyServer = packBattleEnemyCommon(carbonData)
  117 + end
  118 + cheat["bonus"] = function()
  119 + local team = self:getTeamBattleInfo(self:getTeamFormatByType(TeamSystemType.BonusBattle))
  120 + for slot, hero in pairs(team.heros) do
  121 + local temp = {}
  122 + for arr, _ in pairs(checkCheatAttrs) do
  123 + temp[arr] = hero[arr]
  124 + end
  125 + selfTeamServer[hero.type] = temp
  126 + end
  127 + -- local carbonData = csvdb["bonus_battleCsv"][params.id]
  128 + -- enemyServer = packBattleEnemyCommon(carbonData)
  129 + end
  130 + cheat["pvpc"] = function()
  131 + if not params.format then return end
  132 + local team = self:getTeamBattleInfo(params.format)
  133 + for slot, hero in pairs(team.heros) do
  134 + local temp = {}
  135 + for arr, _ in pairs(checkCheatAttrs) do
  136 + temp[arr] = hero[arr]
  137 + end
  138 + selfTeamServer[hero.type] = temp
  139 + end
  140 + end
  141 + cheat["pvph"] = cheat["pvpc"]
  142 + cheat["act_battle"] = cheat["pvpc"]
  143 +
  144 + cheat[battleType]()
30 145
  146 + local status = checkOneCheat(clientInfo.selfAttr, selfTeamServer, clientInfo.enemyAttr, enemyServer)
  147 + if not status then
  148 + local cheatCount = self:getProperty("cheatCount")
  149 + cheatCount = cheatCount + 1
  150 + self:setProperty("cheatCount", cheatCount)
  151 +
  152 + local result = {clientSelf = {}, serverSelf = {}}
  153 + for k , v in pairs(clientInfo.selfAttr) do
  154 + result.clientSelf[tostring(k)] = v
  155 + end
  156 + for k , v in pairs(selfTeamServer) do
  157 + result.serverSelf[tostring(k)] = v
  158 + end
  159 + result = json.encode(result)
  160 + self:mylog("cheat", {desc = battleType, int1 = cheatCount, text1 = result})
  161 +
  162 + for _, v in ipairs(globalCsv.cheat_check) do
  163 + if cheatCount == v[1] then
  164 + self:setBan(v[2] / 86400, 5)
  165 + break
  166 + end
  167 + end
  168 + end
  169 + return status
  170 +end
31 171
32 function Role:checkBattle(battleType, params) 172 function Role:checkBattle(battleType, params)
33 local clientInfo = params.info or {} 173 local clientInfo = params.info or {}
src/models/RoleLog.lua
@@ -598,6 +598,7 @@ local LogType = { @@ -598,6 +598,7 @@ local LogType = {
598 guide = "common", 598 guide = "common",
599 newdevice = "common", 599 newdevice = "common",
600 cbback = "common", 600 cbback = "common",
  601 + cheat = "common",
601 602
602 in_item = "common", 603 in_item = "common",
603 out_item = "common", 604 out_item = "common",
src/models/RolePlugin.lua
@@ -867,7 +867,6 @@ function RolePlugin.bind(Role) @@ -867,7 +867,6 @@ function RolePlugin.bind(Role)
867 self:setProperty("heartWarning", heartWarning) 867 self:setProperty("heartWarning", heartWarning)
868 if heartWarning == 50 then 868 if heartWarning == 50 then
869 self:setBan(30, 1) --封禁 30天 869 self:setBan(30, 1) --封禁 30天
870 - self:sendGmMsg("server_accountBanned_inGame_1")  
871 return 870 return
872 end 871 end
873 if heartWarning < 50 and heartWarning % 5 == 0 then 872 if heartWarning < 50 and heartWarning % 5 == 0 then
@@ -880,21 +879,53 @@ function RolePlugin.bind(Role) @@ -880,21 +879,53 @@ function RolePlugin.bind(Role)
880 time = time or 0 879 time = time or 0
881 banType = banType or 0 880 banType = banType or 0
882 local now = skynet.timex() 881 local now = skynet.timex()
883 - if time == 0 then 882 + if time <= 0 then
884 self:setProperty("banTime", 0) 883 self:setProperty("banTime", 0)
885 self:setProperty("banType", 0) 884 self:setProperty("banType", 0)
886 self:setProperty("heartWarning", 0) 885 self:setProperty("heartWarning", 0)
887 -  
888 self:mylog("role_action", {desc = "ban_rm"}) 886 self:mylog("role_action", {desc = "ban_rm"})
889 else 887 else
890 - self:setProperty("banTime", now + 86400 * time) 888 + self:sendGmMsg(globalCsv.ban_tips[banType] or globalCsv.ban_tips[0])
  889 + print(86400 * time)
  890 + self:setProperty("banTime", math.ceil(now + 86400 * time))
891 self:setProperty("banType", banType) 891 self:setProperty("banType", banType)
892 - self:mylog("role_action", {desc = "ban", int1 = time, int2 = banType}) 892 + self:resetRank()
  893 + self:mylog("role_action", {desc = "ban", int1 = math.ceil(time), int2 = banType})
893 end 894 end
894 end 895 end
895 896
  897 + -- 清掉所有排行榜
  898 + function Role:resetRank()
  899 + local roleId = self:getProperty("id")
  900 + redisproxy:pipelining(function (red)
  901 + red:zrem(RANK_TOWER, roleId)
  902 + for _, rk in pairs(RANK_ADV) do
  903 + red:zrem(rk, roleId)
  904 + end
  905 + for _, rk in pairs(RANK_DINER) do
  906 + red:zrem(rk, roleId)
  907 + end
  908 + for _, rk in pairs(RANK_PVP_COMMON_KEY) do
  909 + red:zrem(rk, roleId)
  910 + end
  911 + for _, rk in pairs(RANK_PVP_HIGHT_KEY) do
  912 + red:zrem(rk, roleId)
  913 + end
  914 + for _, ct in pairs(RANK_TYPE) do
  915 + red:zrem(RANK_COMMON .. ct, roleId)
  916 + end
  917 + end)
  918 + end
  919 +
896 function Role:sendGmMsg(text, isNotKey) 920 function Role:sendGmMsg(text, isNotKey)
897 SendPacket(actionCodes.Sys_maintainNotice, MsgPack.pack({ body = text, iskey = not isNotKey})) 921 SendPacket(actionCodes.Sys_maintainNotice, MsgPack.pack({ body = text, iskey = not isNotKey}))
  922 +
  923 + local agent = datacenter.get("agent", self:getProperty("id"))
  924 + if agent then
  925 + skynet.timeout(50, function ()
  926 + skynet.call(agent.gate_serv, "lua", "forcekick", agent.fd)
  927 + end)
  928 + end
898 end 929 end
899 930
900 -- function Role:getHeroActiveRelationData(heros) 931 -- function Role:getHeroActiveRelationData(heros)