From f9db0271bb2de8dc45dafc1ff67c9c9384f97d87 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 18 七月 2022 18:42:36 +0800
Subject: [PATCH] 9670 【越南】【主干】【后端】移动速度放外挂监测

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 7b0ea4c..8b519ba 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -5925,6 +5925,8 @@
             
         curPlayer.ResetPos(posX, posY)
 
+MoveDistCalcTick = "PYMoveDistCalcTick"
+MoveDistSum = "PYMoveDistSum"
 def PYPlayerNormalMove(curPlayer, clientPack, tick) :
     
     #玩家移动通用检查
@@ -5953,6 +5955,8 @@
         return False
     
     if curPlayer.GetPosX() == sendPack_SeverPosX and curPlayer.GetPosY() == sendPack_SeverPosY:
+        curPlayer.SetDict(MoveDistCalcTick, tick)
+        curPlayer.SetDict(MoveDistSum, 0)
         if moveType != 0 and sendPack_WorldTick - lastMoveTick < 222:
             # 减少同步率
             return True
@@ -5988,7 +5992,23 @@
                                                            sendPack_SeverPosX, sendPack_SeverPosY), curPlayer.GetID())
         return False
     
-    
+    calcTick = curPlayer.GetDictByKey(MoveDistCalcTick)
+    distSum = min(curPlayer.GetDictByKey(MoveDistSum) + dist, 100000000)
+    curPlayer.SetDict(MoveDistSum, distSum)
+    if distSum > IpyGameDataPY.GetFuncCfg("PyMoveCheck", 1):
+        speed = curPlayer.GetSpeed() # 移动一格所需毫秒
+        passCalcTick = tick - calcTick
+        needTick = distSum * speed
+        checkNeedTick = needTick * IpyGameDataPY.GetFuncCfg("PyMoveCheck", 2) / 100.0
+        if passCalcTick < checkNeedTick:
+            GameWorld.DebugLog("    dist=%s,distSum=%s,speed=%s,needTick=%s, 所需移动时间异常 passCalcTick(%s) < (%s)" 
+                               % (dist, distSum, speed, needTick, passCalcTick, checkNeedTick), curPlayer.GetID())
+            return False
+        #GameWorld.DebugLog("    dist=%s,distSum=%s,speed=%s,needTick=%s, 验证移动时间正常  passCalcTick(%s) < (%s)" 
+        #                   % (dist, distSum, speed, needTick, passCalcTick, checkNeedTick), curPlayer.GetID())
+        curPlayer.SetDict(MoveDistCalcTick, tick)
+        curPlayer.SetDict(MoveDistSum, 0)
+        
     #如果是小游戏中则停止小游戏
     if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent:
         PlayerGameEvent.StopGameEvent(curPlayer, tick)

--
Gitblit v1.8.0