From 828ac10fd533a60f7f2da90a526e42490cd8537f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 22 十月 2025 11:37:52 +0800
Subject: [PATCH] 16 卡牌服务端(删除反外挂验证)

---
 /dev/null                                                                                   |  666 ---------------------------------------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py      |   24 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   22 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py   |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py             |   24 -
 5 files changed, 17 insertions(+), 722 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 154b33b..01ecd37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -2883,10 +2883,6 @@
 Def_PetRoleGapLVMax = 5                    # 宠物可出战的等级最多大于玩家等级数
 Def_Pet_ProcessHP_Tick = 3000              # 宠物回血间隔
 
-#---自动防外挂验证---
-#玩家字典用于连续自动检测不回复次数
-Def_Player_AutoCheck_Count = 'playerCheckCount0704'
-
 #角色记录是否使用外挂
 (
 Def_AutoCheck_State_Safe,
@@ -3220,21 +3216,6 @@
 Def_Player_Dict_FirstLogin = "FirstLogin"    # 首登标记 0-未首登; 1-首登过
 Def_GuideStateKeyCount = 8 # 引导状态key最大个数
 Def_Player_Dict_GuideState = "GuideState_%s" # 引导状态记录,参数为key个数编号
-Def_Player_Dict_VersionFix = "VersionFix_%s" # 版本修正标记,参数为key个数编号, 支持n个版本修正标记,每个key支持31个 
-Def_Player_Dict_PrestigeAwardMark = "PrestigeAwardMark_7"   # 领取威望物品奖励情况
-Def_Player_Dict_AutoCheckHack_Wait = "AutoCheckHackWait_10"    #自动检测外挂验证中标识
-Def_Player_Dict_AutoCheckHack_Source = "AutoCheckHackSource_11"    #自动检测外挂随机源
-Def_Player_Dict_AutoCheckHack_Type = "AutoCheckHackType_12"    #自动检测外挂类型
-Def_Player_Dict_AutoCheckHack_State = "AutoCheckHackState_13"    #自动检测外挂账号状态识别
-Def_Player_Dict_Captcha_WaitTick = "CaptchaWaitTick_14"    #图形验证回复等待时间
-Def_Player_Dict_Captcha_WaitSign = "CaptchaWaitSign_15"    #图形验证回复等待标识
-Def_Player_Dict_Captcha_ErrCount = 'CaptchaErrCount_16'    #玩家回答错误次数
-Def_Player_Dict_Captcha_Answer = 'CaptchaAnswer_17'    #图形验证码答案
-Def_Player_Dict_AutoCheckHack_ErrCnt = "AutoCheckHackErrCnt_19"    #自动检测外挂随机源
-Max_StoryMissionNum = 99
-Def_Player_Dict_StoryMissionState = "StoryMissionState_%s"  # 剧情任务编号完成状态, 参数(key编号), 按编号位记录
-Def_Player_Dict_TaskLastKillNPCID = "TaskLastKillNPCID"    #任务上次随机击杀NPCID
-Def_Player_Dict_TaskLastVisitNPCID = "TaskLastVisitNPCID"    #任务上次随机访问NPCID
 LittleHelperSetNumCount = 20 # 小助手设置编号个数
 LittleHelperValueCount = 6 # 小助手设置值个数
 Def_Player_Dict_LittleHelperValue = "LittleHelperValue%s_%s" # 小助手设置值存储, 参数(设置编号, value编号)
@@ -4251,11 +4232,6 @@
 ShareDefine.PlayerJob_BowMaster : TYPE_ASSASSIN,   #射手对应弓手系
 ShareDefine.PlayerJob_Max : TYPE_CHAPLAIN,         #魔剑对应魔剑系
 }
-
-#版本修正标记, 使用key格式 Def_Player_Dict_VersionFix
-(
-Def_VerFix_LingGenShow, #灵根特效外观
-) = range(1)
 
 ##==================================================================================================
 #游戏消费点类型定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Captcha.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Captcha.py
deleted file mode 100644
index b05b08f..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Captcha.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package Captcha
-#
-# @todo: 显示图形验证码
-# @author Alee
-# @date 2011-06-05 01:50
-# @version 1.0
-#
-# 详细描述:
-#------------------------------------------------------------------------------ 
-"""Version = 2011-06-05 01:50"""
-
-import GameWorld
-import ShareDefine
-import PlayerAutoCheckOnline
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param list 参数列表
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, list):
-    tick = GameWorld.GetGameWorld().GetTick()
-    PlayerAutoCheckOnline.SendCaptcha(curPlayer, ShareDefine.Def_Captcha_First, tick)
-    
-    
-    
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetVerFix.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetVerFix.py
deleted file mode 100644
index 1679ec7..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetVerFix.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.SetVerFix
-#
-# @todo:设置版本修复状态
-# @author hxp
-# @date 2018-11-10
-# @version 1.0
-#
-# 详细描述: 设置版本修复状态
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-11-10 15:00"""
-#-------------------------------------------------------------------------------
-
-import PlayerControl
-import GameWorld
-import ChConfig
-
-
-## 逻辑实现
-#  @param curPlayer
-#  @param cmdList 参数列表
-#  @return None
-def OnExec(curPlayer, cmdList):
-    
-    if not cmdList:        
-        GameWorld.DebugAnswer(curPlayer, "重置所有版本修复状态: SetVerFix 0")
-        GameWorld.DebugAnswer(curPlayer, "设置某个版本修复状态: SetVerFix 修复索引 状态")
-        return
-    
-    if len(cmdList) == 1 and cmdList[0] == 0:
-        for i in xrange(5):
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_VersionFix % i, 0)
-        GameWorld.DebugAnswer(curPlayer, "重置版本修复成功!")
-        return
-    
-    if len(cmdList) == 2:
-        fixIndex, value = cmdList
-        state = 1 if value else 0
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, fixIndex, state)
-        GameWorld.DebugAnswer(curPlayer, "设置版本修复状态: fixIndex=%s,state=%s" % (fixIndex, state))
-        return
-    
-    return
-
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 3675dae..d5213c2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -1745,9 +1745,9 @@
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     
     #防外挂 不可移动
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
-                                      == ChConfig.Def_AutoCheck_State_Danger:
-        return
+    #if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
+    #                                  == ChConfig.Def_AutoCheck_State_Danger:
+    #    return
     
     
     #不可移动行为状态, 判断客户端限制
@@ -2113,18 +2113,6 @@
     
     #流向记录玩家下线
     DataRecordPack.DR_PlayerDisconnect(curPlayer)
-    
-    #玩家未回图形验证码下线将会记录错误次数
-    #===========================================================================
-    # if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_WaitSign) \
-    # == PlayerAutoCheckOnline.Def_Captcha_WaitAnswer:
-    #    PlayerAutoCheckOnline.CaptchaAnswerErr(curPlayer, tick, False)
-    # 
-    #    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitSign, PlayerAutoCheckOnline.Def_Captcha_Safe)
-    # 
-    #===========================================================================
-    #@warning: 等字段统一修改,删除双倍经验BUFF
-    #PlayerDoubleExpSys.DeleteDoubleExpBuff(curPlayer, ChConfig.Def_DoubleExpNote_StopOff)
     
     #设置RouteServerInitOK字典
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RouteServerInitOK, 0)
@@ -3829,9 +3817,9 @@
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     
     #防外挂 不可移动
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
-                                      == ChConfig.Def_AutoCheck_State_Danger:
-        return
+    #if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
+    #                                  == ChConfig.Def_AutoCheck_State_Danger:
+    #    return
 
     if not PYPlayerNormalMove(curPlayer, clientPack, tick):
         posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAutoCheckOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAutoCheckOnline.py
deleted file mode 100644
index 57401fa..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAutoCheckOnline.py
+++ /dev/null
@@ -1,666 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package PlayerAutoCheckOnline
-#
-# @todo: 反外挂验证,与客户端自动交互
-# @author Alee
-# @date 2010-05-31 21:30
-# @version 2.8
-#
-# 详细描述: 反外挂验证,与客户端自动交互
-
-# @change: "2011-05-31 21:30" Alee 修改回答错误的时候不再重发图片,依然是上一次的
-# @change: "2011-06-01 00:05" Alee 回答正确退出事件
-# @change: "2011-06-02 13:20" Alee 内网账号90不验证外挂
-# @change: "2011-06-02 18:30" panwei 内网账号90不验证外挂
-# @change: "2011-06-07 15:00" Alee 防外挂修改
-# @change: "2011-06-08 11:00" Alee 防外挂修改
-# @change: "2011-06-09 18:00" Alee 添加读取代码加密防外挂
-# @change: "2011-06-10 14:30" Alee 修改为随机获取编码加密验证
-# @change: "2011-06-13 17:00" Alee 图形验证码不回复则算错误次数加1
-# @change: "2011-06-17 11:00" Alee 加密函数转移
-
-# @change: "2011-06-23 13:40" Alee 随机生成验证码重载
-# @change: "2011-07-04 17:00" Alee 自动检测外挂改为一段时间内不回复连发3次
-# @change: "2011-07-15 19:30" Alee 防范关闭 恢复正常
-# @change: "2011-07-25 19:00" Alee 避免输出客户端的字符串导致错误
-# @change: "2011-09-01 18:30" Alee 封包修改
-
-# @change: "2011-10-17 19:50" Alee PY封包暂时关闭功能
-# @change: "2012-03-06 15:00" jiang 字典key改成ChConfig中
-# @change: "2012-06-26 18:00" jiang 补齐oss记录
-#---------------------------------------------------------------------
-"""Version = 2012-06-26 18:00"""
-#------------------------------------------------------------------------------ 
-
-import GameWorld
-import IPY_GameWorld
-import ReadChConfig
-import ChConfig
-import ShareDefine
-import PlayerControl
-import ReadCaptchaImage
-import PlayerGMOper
-import DataRecordPack
-
-import random
-import binascii
-import md5
-import math
-
-#自动检测回答错误次数
-Def_AutoCheck_ErrCnt = 5
-
-#错误标识
-Def_Error_Mark = -1
-
-#自动检测开启标识
-Def_AutoCheck_Mark_Open = 1
-#图形验证码开启标识
-Def_Captcha_Mark_Open = 1
-
-#C/S防外挂自动验证状态
-Def_AutoCheck_Safe = 0
-Def_AutoCheck_WaitAnswer = 1
-
-#图形验证码等待标识
-Def_Captcha_Safe = 0
-Def_Captcha_WaitAnswer = 1
-
-#自动检测不回复的次数
-Def_AutoCheck_NoAnswerCount = 3
-
-##防外挂检测
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def HackDefense(curPlayer, tick):
-    return
-    #内网账号不验证
-    if curPlayer.GetGMLevel() == ChConfig.Def_GM_LV_God:
-        ResumePlayerNormal(curPlayer)
-        return
-    
-    #自动检测
-    AutoCheckCheater(curPlayer, tick)
-    #图形验证
-    CaptchaWaitAnswer(curPlayer, tick)
-
-##玩家从SB恢复正常
-# @param curPlayer 玩家实例
-# @return 无意义
-def ResumePlayerNormal(curPlayer):
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) != ChConfig.Def_AutoCheck_State_Danger:
-        return
-    
-    #清空错误次数
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_ErrCnt, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_Wait, Def_AutoCheck_Safe)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_State, ChConfig.Def_AutoCheck_State_Safe)
-    return
-
-##防外挂自动检测
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def AutoCheckCheater(curPlayer, tick):
-    if ReadChConfig.GetEvalChConfig("AutoCheck_Open") != Def_AutoCheck_Mark_Open:
-        ResumePlayerNormal(curPlayer)
-        return
-    
-    DoLogic_AutoCheck_Send(curPlayer, tick)
-
-    DoLogic_AutoCheck_WaitRece(curPlayer, tick)
-
-##获得自动检测类型
-# @param 无
-# @return 检测类型
-def GetAutoCheckType():
-    randList = ReadChConfig.GetEvalChConfig('ChoiceAutoCheckType')
-    
-    return GameWorld.GetResultByRandomList(randList)
-    #return random.choice((ShareDefine.Def_AutoCheck_BigNum, ShareDefine.Def_AutoCheck_PyCode))
-
-##获得自动检测数据
-# @param curPlayer 玩家实例
-# @param checkType 自动检测类型
-# @return 检测数据,附加信息
-def GetAutoCheckNum(curPlayer, checkType):
-    rand = random.randint(0, 1000000)
-    
-    if checkType == ShareDefine.Def_AutoCheck_BigNum:
-        return rand, ''
-    elif checkType == ShareDefine.Def_AutoCheck_PyCode:
-        return GetPYCodeAndResult(curPlayer, rand)
-    
-    else:
-        GameWorld.ErrLog('GetAutoCheckNum交互验证选择类型错误,类型 %s'%checkType)
-    
-    return Def_Error_Mark, ''
-
-
-##获得检测的数据和代码加密信息
-# @param curPlayer, 玩家实例
-# @param rand 随机数
-# @return 检测的数据和代码加密信息
-def GetPYCodeAndResult(curPlayer, rand):
-    #配置文件中读取路径,再读取代码文件
-    randList = ReadChConfig.GetEvalChConfig("PYCodePath")
-    
-    filePath = GameWorld.GetResultByRandomList(randList)
-    codeStr = ReadChConfig.GetEvalChConfig(filePath)
-    
-    #编译代码,计算结果应该为一个整数,才可以存字典中
-    exec(codeStr)
-    
-    #GameWorld.Log("当前使用的代码文件是 %s"%filePath)
-    
-    return GetCodeStrExecResult(curPlayer, str(rand)), str(rand) + \
-                                ShareDefine.Def_Pack_Split + GotoHeaven(codeStr, rand)
-    
-
-##获得封包字符串
-# @param curPlayer 玩家实例
-# @param checkType 自动检测类型
-# @param checkNum 检测数据 
-# @return 封包字符串
-def GetAutoCheckMsg(curPlayer, checkType, checkNum, annexStr):
-    if checkType == ShareDefine.Def_AutoCheck_BigNum:
-        return GetBigNumPackStr(checkNum, checkType)
-    elif checkType == ShareDefine.Def_AutoCheck_PyCode:
-        return GetPYCodePackStr(checkType, annexStr)
-    
-    else:
-        GameWorld.ErrLog('GetAutoCheckMsg交互验证选择类型错误,类型 %s'%checkType)
-        
-    return ''
-
-
-##获得数字计算的字符串封包
-# @param checkType 自动检测类型
-# @param checkNum 检测数据 
-# @return 封包字符串
-def GetBigNumPackStr(checkNum, checkType):
-    checkMsg = checkNum * 30 + 2
-    
-    return ShareDefine.Def_AutoCheck_SendMsg%(checkType, checkMsg)
-
-
-##获得PY代码的字符串封包
-# @param checkType 自动检测类型
-# @param checkNum 检测数据 
-# @return 封包字符串
-def GetPYCodePackStr(checkType, annexStr):
-    return ShareDefine.Def_AutoCheck_SendMsg%(checkType, annexStr)
-    
-
-##字符串加密
-# @param codeStr 未加密字符
-# @param rand 随机数
-# @return 加密字符
-def GotoHeaven(codeStr, rand):
-    tmpList = []
-    tmpList_2 = []
-    
-    pos = rand//ShareDefine.Def_Cheater_PosArg
-    num = rand%ShareDefine.Def_Cheater_CharArg
-
-    tmpCount = 0
-    for cha in codeStr:
-        if tmpCount == pos:
-            tmpList.append(num)
-        
-        #异或后,将低位移植高位2次(确保是8位)
-        tmpNum = ord(cha)^ShareDefine.Def_Cheater_Mirror
-        tmpNum = tmpNum>>1 | ((tmpNum & 0x1)<<7)
-        tmpNum = tmpNum>>1 | ((tmpNum & 0x1)<<7)
-        
-        tmpList.append(tmpNum)
-
-        tmpCount += 1
-    
-    for num in tmpList:
-        tmpList_2.append(chr(num))
-    
-    return ''.join(tmpList_2)
-
-##自动检测发送封包
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def DoLogic_AutoCheck_Send(curPlayer, tick):
-    #掉线切地图验证
-    lastCheckTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_AutoCheck_SendTick)
-    
-    if lastCheckTick != 0 and tick - lastCheckTick \
-    < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_AutoCheck_SendTick]:
-        return
-    
-    SendAutoCheck(curPlayer, tick)
-
-##发送防外挂自动检测
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return None
-def SendAutoCheck(curPlayer, tick):
-    checkType = GetAutoCheckType()
-    
-#    GameWorld.Log("发送的验证类型为 %s"%checkType)
-    
-    #检测数据和附加信息
-    checkNum, annexStr = GetAutoCheckNum(curPlayer, checkType)
-    
-    #没有交互的类型
-    if checkNum == Def_Error_Mark:
-        return
-    
-    #清空错误次数
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_ErrCnt, 0)
-    
-    checkMsg = GetAutoCheckMsg(curPlayer, checkType, checkNum, annexStr)
-    
-    if checkMsg == '':
-        return
-    
-    #记录随机源 类型和等待标识, 通知客户端
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_Type, checkType)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_Source, checkNum) 
-
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_Wait, Def_AutoCheck_WaitAnswer)
-    curPlayer.SendFakePack(checkMsg, len(checkMsg))
-    
-    #计时
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_AutoCheck_SendTick, tick)
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_AutoCheck_ReceTick, tick)
-
-    #GameWorld.Log("发送验证")
-
-##自动检测等待回复封包
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def DoLogic_AutoCheck_WaitRece(curPlayer, tick):
-    waitRece = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_Wait)
-    
-    #不是等待响应中
-    if waitRece != Def_AutoCheck_WaitAnswer:
-        return
-    
-    waitStartTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_AutoCheck_ReceTick)
-    
-#    GameWorld.Log("等待回复 %s"%(tick - waitStartTick))
-    if tick - waitStartTick < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_AutoCheck_ReceTick]:
-        return
-    
-    noAnswerCount = curPlayer.GetDictByKey(ChConfig.Def_Player_AutoCheck_Count)
-    if noAnswerCount >= Def_AutoCheck_NoAnswerCount:
-        SetPlayerSB(curPlayer)
-        return
-    
-    curPlayer.SetDict(ChConfig.Def_Player_AutoCheck_Count, noAnswerCount + 1)
-    SendAutoCheck(curPlayer, tick)
-
-##玩家设置成SB状态
-# @param curPlayer 玩家实例
-# @return  无意义
-def SetPlayerSB(curPlayer):
-    #设置该账号为危险号
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_State, ChConfig.Def_AutoCheck_State_Danger)
-    PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Hack)
-    
-    DataRecordPack.SetPlayerSBState(curPlayer, ChConfig.Def_PlayerSight_Hack)
-    
-    GameWorld.Log('玩家(%s), 被鉴定使用外挂,角色变SB'%curPlayer.GetName(), curPlayer.GetID())
-    
-    #解除等待回包状态
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_Wait, Def_AutoCheck_Safe)
-
-##交互检测错误次数的处理
-# @param curPlayer 玩家实例
-# @return 无意义
-def DoLogicAutoCheckErr(curPlayer):
-    errCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_ErrCnt) + 1
-
-    #同一个问题中回答次数错误过多则设置成SB号,会在下一次问题前清空错误次数
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_ErrCnt, errCnt)
-    
-    if errCnt < Def_AutoCheck_ErrCnt:
-        return
-    
-    #GameWorld.Log("自动检测,回答错误次数过多")
-    SetPlayerSB(curPlayer)
-    
-##自动检测等待回复封包
-# @param curPlayer 玩家实例
-# @param packType 验证类型
-# @param packMsg 收报数据
-# @param tick 时间戳
-# @return 无意义
-def AutoCheckWaitAnswer(curPlayer, packType, packMsg, tick):
-    #系统关闭则不理睬
-    if ReadChConfig.GetEvalChConfig("AutoCheck_Open") != Def_AutoCheck_Mark_Open:
-        return
-    
-    #不是等待回答中不理睬
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_Wait) == Def_AutoCheck_Safe:
-        return
-    
-    checkType = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_Type)
-    
-    #验证错误次数。避免被外挂测试
-    if not IsAutoCheckAnswer(curPlayer, packType, checkType, packMsg):
-        DoLogicAutoCheckErr(curPlayer)
-        return
-    
-    #解除角色危险状态
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
-                                      == ChConfig.Def_AutoCheck_State_Danger:
-        
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_State, 
-                                       ChConfig.Def_AutoCheck_State_Safe)
-        
-        PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
-        
-        DataRecordPack.SetPlayerSBState(curPlayer, ChConfig.Def_AutoCheck_State_Safe)
-    
-    curPlayer.SetDict(ChConfig.Def_Player_AutoCheck_Count, 0)
-    #解状态
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoCheckHack_Wait, Def_AutoCheck_Safe)
-
-
-##检查回复答案是否正确
-# @param curPlayer 玩家实例
-# @param packType 封包类型
-# @param checkType 检验类型
-# @param packMsg 封包字符串
-# @return BOOL
-def IsAutoCheckAnswer(curPlayer, packType, checkType, packMsg):
-    if packType != checkType:
-        return False
-    
-    checkNum = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_Source) 
-    
-    #GameWorld.Log("交互结果%s : %s  - %s"%(checkType, GetAutoCheckParseResult(curPlayer, checkType, checkNum), packMsg))
-    if GetAutoCheckParseResult(curPlayer, checkType, checkNum) != packMsg:
-        return False
-    
-    return True
-     
-    
-##获得加密结果
-# @param curPlayer 玩家实例
-# @param checkType 自动检测类型
-# @param checkNum 自动检测数据
-# @return 加密结果
-def GetAutoCheckParseResult(curPlayer, checkType, checkNum):
-    if checkType == ShareDefine.Def_AutoCheck_BigNum:
-        return GetPreventPluginMsg(curPlayer, str(checkNum))
-    elif checkType == ShareDefine.Def_AutoCheck_PyCode:
-        return md5.md5(str(checkNum)).hexdigest()
-    else:
-        GameWorld.ErrLog("GetAutoCheckParseResult 类型错误, 玩家: %s 将变SB"%curPlayer.GetName(), curPlayer.GetID())
-        
-    return ''
-
-
-##防外挂检测
-# @param curPlayer 玩家实例
-# @param fakePackMsg 封包信息
-# @param playerID 玩家ID
-# @param tick 时间戳
-# @return 无意义
-def AutoCheckOnline(curPlayer, fakePackMsg, playerID, tick):
-    if ShareDefine.Def_Pack_Split not in fakePackMsg:
-        GameWorld.ErrLog("自定义封包数据格式异常", playerID)
-        return
-    
-    tmpList = fakePackMsg.split(ShareDefine.Def_Pack_Split, 1)
-    
-    packType, packMsg = tmpList
-    
-    packType = packType[1:]
-    if not packType.isdigit():
-        GameWorld.ErrLog("自定义封包类型数据错误 %s"%packType, playerID)
-        return
-    
-    packType = int(packType)
-    
-    if packType in [ShareDefine.Def_AutoCheck_BigNum, ShareDefine.Def_AutoCheck_PyCode]:
-        AutoCheckWaitAnswer(curPlayer, packType, packMsg, tick)
-        
-    elif packType == ShareDefine.Def_AutoCheck_Captcha:
-        CaptchaAnswer(curPlayer, packMsg, tick)
-        
-    else:
-        GameWorld.ErrLog("自定义封包,未知的防外挂验证类型 %s"%packType, playerID)
-        
-    return
-
-#===============================================================================
-##图形验证码回复
-# @param curPlayer 玩家实例
-# @param packMsg 封包数据
-# @param tick 时间戳
-# @return 无意义
-def CaptchaAnswer(curPlayer, packMsg, tick):
-    tmpList = packMsg.split(ShareDefine.Def_Pack_Split, 1)
-    
-    if len(tmpList) != 2:
-        GameWorld.ErrLog("封包图形验证码格式异常异常 %s"%packMsg)
-        return
-    
-    queryType, captchaMsg = tmpList
-    if not queryType.isdigit():
-        GameWorld.ErrLog("封包图形验证 类型错误 %s"%tmpList)
-        return
-    
-    queryType = int(queryType)
-    
-    if queryType == ShareDefine.Def_Captcha_Refresh:
-        #刷新图形验证码
-        if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_Captcha_Refresh) \
-        < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_Captcha_Refresh]:
-            return
-        
-        curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_Captcha_Refresh, tick)
-        
-        SendCaptcha(curPlayer, ShareDefine.Def_Captcha_Reset, tick, False)
-    
-    elif queryType == ShareDefine.Def_Captcha_Query:
-        
-        answer = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_Answer)
-        
-        #回复信息
-        if answer != GetPlusCrc32(captchaMsg):
-            #回答错误
-            CaptchaAnswerErr(curPlayer, tick)
-            return
-        
-        #回答正确
-        SendCaptcha(curPlayer, ShareDefine.Def_Captcha_Right, tick, False)
-        #恢复安全状态
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitSign, Def_Captcha_Safe)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_ErrCount, 0)
-        
-        if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Frist_Lock) != 1 \
-        and curPlayer.GetPlayerAction() == IPY_GameWorld.paEvent:
-            #解除锁定
-            curPlayer.ExitEvent()
-        
-    return
-
-##图形验证码回复错误处理
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @param isNotify 是否通知客户端错误
-# @return 是否封号
-def CaptchaAnswerErr(curPlayer, tick, isNotify=True):
-    return True
-    #记录错误次数
-    errCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_ErrCount) + 1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_ErrCount, errCount)
-    
-    if isNotify:
-        #每次错误都告诉客户端结果
-        SendCaptcha(curPlayer, ShareDefine.Def_Captcha_Error, tick, False)
-    
-    #错误次数判定
-    if errCount < ReadChConfig.GetEvalChConfig("Captcha_ErrCount"):
-        return False
-    
-#        PlayerControl.NotifyCode(curPlayer, "Old_andyshao_202580", [Def_Captcha_ErrCount])
-
-    #恢复安全状态
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitSign, Def_Captcha_Safe)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_ErrCount, 0)
-    
-    PlayerGMOper.ClosePlayerByAccIDEx(curPlayer, ReadChConfig.GetEvalChConfig("Captcha_SealTime"), 
-                                          "Captcha Err MaxCount", 1100)
-
-    return True
-
-    
-
-##玩家登陆发验证
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def PlayerLoginCaptcha(curPlayer, tick):
-    return
-    if ReadChConfig.GetEvalChConfig("Captcha_Open") != Def_Captcha_Mark_Open:
-        return
-    
-    #内网账号不验证
-    if curPlayer.GetGMLevel() == ChConfig.Def_GM_LV_God:
-        return
-    
-    SendCaptcha(curPlayer, ShareDefine.Def_Captcha_First, tick)
-
-
-##发送图形验证信息
-# @param curPlayer 玩家实例
-# @param captchaType 图形验证类型
-# @param tick 时间戳
-# @param refresh 是否重新计时
-# @return 无意义
-def SendCaptcha(curPlayer, captchaType, tick, refresh=True):
-
-    #初始化
-    captchaAnswer, captchaMsg = 0, '0'
-    
-    #回答正确或者错误要回发 不再取图片
-    if captchaType in [ShareDefine.Def_Captcha_Right, ShareDefine.Def_Captcha_Error]:
-        captchaAnswer, captchaMsg = 1, '0'
-    else:
-        captchaAnswer, captchaMsg = ReadCaptchaImage.GetCaptchaImage()
-        
-        if captchaAnswer == 0:
-            GameWorld.ErrLog("无法获得图形验证码 文件:%s "%(captchaAnswer))
-            return
-    
-        #正确或者错误 上一次的存储码号加密不变
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_Answer, GetPlusCrc32(captchaAnswer))
-    
-    errCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_ErrCount)
-    
-    #文件加密
-    captchaMsg = GotoHeaven(captchaMsg, 3)
-    msgContent = ShareDefine.Def_CaptchaS_SendMsg%(captchaType, errCount, captchaMsg)
-    sendMsg = ShareDefine.Def_AutoCheck_SendMsg%(ShareDefine.Def_AutoCheck_Captcha, msgContent)
-    
-    #GameWorld.Log("%s----------发送图形验证 %s"%(curPlayer.GetPlayerName(), captchaAnswer))
-    curPlayer.SendFakePack(sendMsg, len(sendMsg))
-    
-    if refresh:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitTick, tick)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitSign, Def_Captcha_WaitAnswer)
-
-
-##等待回复图形验证信息
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def CaptchaWaitAnswer(curPlayer, tick):    
-    if ReadChConfig.GetEvalChConfig("Captcha_Open") != Def_Captcha_Mark_Open:
-        return
-    
-    #安全期间不检测
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_WaitSign) == Def_Captcha_Safe:
-        return
-    
-    #判断时间
-    if tick - curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_WaitTick) \
-    < ReadChConfig.GetEvalChConfig("Captcha_WaitTime"):
-        return
-    
-    #恢复安全状态
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitSign, Def_Captcha_Safe)
-    
-    #没有封号就正常踢下去
-    if not CaptchaAnswerErr(curPlayer, tick, False):
-        curPlayer.Kick(IPY_GameWorld.disGMKick)
-    
-
-##获取CRC结果 ,存于数据库
-# @param msg 字符串
-# @return CRC结果
-def GetPlusCrc32(msg):
-    #全小写
-    msg = str(msg).lower()
-    num = binascii.crc32(msg)
-
-    #存数据库,将数据缩小
-    return num & 0x7fffffff
-
-##防外挂判断是否锁定
-# @param curPlayer 玩家实例
-# @return bool
-def CheckBeginEvent(curPlayer):
-    return False
-    #内网账号不验证
-    if curPlayer.GetGMLevel() == ChConfig.Def_GM_LV_God:
-        return False
-
-    return (curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_WaitSign) == Def_Captcha_WaitAnswer\
-                    and ReadChConfig.GetEvalChConfig("Captcha_Open") == Def_Captcha_Mark_Open)
-
-
-### 防外挂通讯加密
-##  @param curPlayer 玩家
-##  @param inMsg 传入的字符串
-##  @param 加密后的字符串
-##  @return None
-def GetPreventPluginMsg(curPlayer, inMsg):
-    key = "请挂采集,不要打怪"
-    md5Msg = md5.md5(inMsg).hexdigest()
-    # 取ascii最小和最大的字符
-    minChar = min(md5Msg)
-    randChar = md5Msg[10]    #不能取最大和最小,因为出现相同几率太高
-    
-    # 初始: md5码里ascii码最小的是"0",其ascii为32, ascii最大和最小字符相加至少64,2的64次方肯定大于50亿
-    # 第一次修改: 对64求余 再加上64,保证超过50亿
-    curPower = (ord(minChar) + ord(randChar))%64 + 64
-    
-    curJob = curPlayer.GetJob()
-    curSex = curPlayer.GetSex()
-
-    tmpNum = curJob*2%3
-    
-    floatNum = 0.123456
-    if tmpNum == 0:
-        floatNum = float(curJob*3)/7
-    elif tmpNum == 1:
-        floatNum = float(curJob*curSex + 1)/7
-    
-    # 保留六位小数 
-    floatNum = round(floatNum, 6)
-    calValue = math.pow(2, curPower) + floatNum
-    
-    #不管是用 %s %f str() repr() 整数部分过大都会造成结果不是预期的
-    return md5.md5(md5.md5("%s"%floatNum).hexdigest() + md5.md5('%s'%calValue).hexdigest() \
-                   + str(calValue) + key + md5Msg).hexdigest()
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 3c02df8..8202e9c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4578,14 +4578,14 @@
 # @return 无意义
 def SetSight(curPlayer, sight):
     #外挂号 视野验证
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
-                                      == ChConfig.Def_AutoCheck_State_Danger:
-        
-        if curPlayer.GetSight() > sight:
-            curPlayer.SetSight(sight)
-        
-        return
-    
+#    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
+#                                      == ChConfig.Def_AutoCheck_State_Danger:
+#        
+#        if curPlayer.GetSight() > sight:
+#            curPlayer.SetSight(sight)
+#        
+#        return
+#    
     curPlayer.SetSight(sight)
 
 ##获取攻击间隔
@@ -4595,9 +4595,9 @@
     atkInterval = curPlayer.GetAtkInterval()
     
     #外挂号 攻击间隔验证
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
-                                      == ChConfig.Def_AutoCheck_State_Danger:
-        atkInterval *= 100
+    #if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
+    #                                  == ChConfig.Def_AutoCheck_State_Danger:
+    #    atkInterval *= 100
     
     return atkInterval
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index ea48c5e..e163cbd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -1024,9 +1024,6 @@
     #玩家在线时间刷新
     #ProcessPlayer_OnlineTime(curPlayer, tick)
     
-    #反外挂验证
-    #PlayerAutoCheckOnline.HackDefense(curPlayer, tick)
-    
     #恶意攻击时间处理
     #AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
     

--
Gitblit v1.8.0