ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -43,7 +43,6 @@
import PlayerPrestigeSys
import PlayerFamily
import PlayerLoginDayAward
import PlayerGodWeapon
import PlayerGoldInvest
import PlayerActivity
import FBCommon
@@ -53,10 +52,9 @@
import PlayerCrossRealmPK
import PlayerCrossChampionship
import GameFuncComm
import PlayerBossReborn
import PlayerFamilyTaofa
import PlayerWeekParty
import PlayerFeastWeekParty
import PlayerFeastTravel
import PlayerFeastLogin
import PlayerFeastWish
import PlayerActLogin
@@ -64,7 +62,6 @@
import PlayerRune
import IpyGameDataPY
import EventReport
import OpenServerCampaign
import PassiveBuffEffMng
import PlayerFlashSale
import PlayerFlashGiftbag
@@ -82,16 +79,15 @@
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import PlayerSpringSale
import GY_Query_BossFirstKill
import PlayerCrossYaomoBoss
import PlayerLuckyCloudBuy
import PlayerLuckyTreasure
import Item_ResetAttrPoint
import CrossActCTGBillboard
import CrossActAllRecharge
import PlayerFuncSysPrivilege
import PlayerActTurntable
import PlayerTongTianLing
import OpenServerActivity
import CrossRealmPlayer
import ChNetSendPack
import PlayerArena
@@ -104,10 +100,10 @@
import PlayerFaQi
import SkillShell
import PlayerGubao
import PlayerShentong
import PlayerCustomAward
import PlayerZhanling
import PlayerTree
import PlayerLLMJ
import PlayerLianTi
import PlayerTask
import PlayerYinji
@@ -133,9 +129,10 @@
import PlayerTalk
import PlayerHero
import PlayerOnline
import PlayerBeauty
import PlayerTravel
import TurnAttack
import PlayerHJG
import ObjPool
import datetime
import time
@@ -494,7 +491,6 @@
    PlayerControl.SyncOnLineTimeTotal(curPlayer)
    #PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, IPY_GameWorld.rptItem)
    PlayerControl.SyncTrainRealmLV(curPlayer)
    PlayerGodWeapon.OnLogin(curPlayer)
    PlayerPrestigeSys.OnLogin(curPlayer)
    #DataRecordPack.DR_PlayerLogin(curPlayer)
    EventReport.WriteEvent_login(curPlayer)
@@ -505,9 +501,6 @@
    
    #玩家扩展信息
    __SyncPlayerInfoEx(curPlayer)
    #补丁包下载奖励
    GiveDownloadPatchAward(curPlayer)
    
    #PKģʽ
    #SyncPKModel(curPlayer)
@@ -545,12 +538,6 @@
    
    # 通知累计登陆礼
    PlayerLoginDayAward.OnLoginNotifyLoginDayAward(curPlayer)
    # 开服活动奖励信息
    OpenServerCampaign.OnOpenServerCampaignLogin(curPlayer)
    # 采集NPC次数通知
    #NPCCommon.SyncCollNPCTime(curPlayer)
    
    # 副本进入时间
    FBCommon.FBOnLogin(curPlayer)
@@ -628,8 +615,6 @@
    #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
    # 极品白拿
    PlayerFreeGoods.OnLogin(curPlayer)
    # BOSS复活活动
    PlayerBossReborn.OnLogin(curPlayer)
    # 周狂欢活动
    PlayerWeekParty.OnLogin(curPlayer)
    # 购买次数礼包活动
@@ -648,8 +633,6 @@
    PlayerFeastLogin.OnPlayerLogin(curPlayer)
    # 节日祝福活动
    PlayerFeastWish.OnPlayerLogin(curPlayer)
    # 节日游历活动
    PlayerFeastTravel.OnPlayerLogin(curPlayer)
    # 登录奖励活动
    PlayerActLogin.OnLogin(curPlayer)
    # 炼器活动
@@ -677,8 +660,6 @@
    PlayerFB.OnLogin(curPlayer)
    #技能专精信息
    #SkillShell.NotifyElementSkillInfo(curPlayer)
    #Boss首杀
    GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
    #通天令
    PlayerTongTianLing.OnPlayerLogin(curPlayer)
    #创角奖励
@@ -715,7 +696,7 @@
    curPlayer.SetState(0)   # 脱机挂恢复为正常上线
    curPlayer.SetCountryLastWeekHornor(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
    
    PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
    PlayerControl.OnPlayerLogin(curPlayer)
    DataRecordPack.DR_PlayerLogin(curPlayer) # 放最后,记录等级、经验等信息
    return
@@ -736,7 +717,6 @@
        PlayerHJG.OnPlayerLogin(curPlayer)
        PlayerXiangong.OnPlayerLogin(curPlayer)
        PlayerGubao.OnPlayerLogin(curPlayer)
        PlayerShentong.OnPlayerLogin(curPlayer)
        PlayerZhanling.OnPlayerLogin(curPlayer)
        PlayerTask.OnPlayerLogin(curPlayer)
        PlayerTree.OnPlayerLogin(curPlayer)
@@ -746,9 +726,13 @@
        SyncADCntInfo(curPlayer)
        UpdatePlayerName.OnPlayerLogin(curPlayer)
        PlayerActivity.OnPlayerLogin(curPlayer)
        PlayerLLMJ.OnPlayerLogin(curPlayer)
        PlayerBeauty.OnPlayerLogin(curPlayer)
        PlayerTravel.OnPlayerLogin(curPlayer)
        OpenServerActivity.OnPlayerLogin(curPlayer)
        
        # 上线查询一次充值订单
        curPlayer.SendDBQueryRecharge()
        # curPlayer.SendDBQueryRecharge() 不查了,由在线轮询触发即可
        
    # 通知GameServer地图最终登录成功了
    isMixServerFirstLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MixServerFirstLogin)
@@ -779,8 +763,7 @@
    # 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave
    # 那么在DoPlayerLogin 中设置的数据将不会被保存, 如会导致第一个任务重复触发问题,记录多次发送
    EventReport.WriteEvent_Entry(curPlayer, 4)
    #EventReport.EventReport(ShareDefine.Def_UserAction_FirstLogin, "", curPlayer)
    curPlayer.SetFightPoint(1) # 初始化为1倍消耗
    
    #---补满血满魔---
@@ -844,9 +827,6 @@
    
    # 重置首充双倍
    PlayerCoin.DoResetCTGCount(curPlayer, "MixServer")
    # 重置商店购买次数,暂定只重置类型 7 的
    FunctionNPCCommon.ResetShopItemBuyCount(curPlayer, [7])
    
    # 合服邮件,盟主专属邮件在GameServer处理
    mailItemList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 1)
@@ -1039,7 +1019,6 @@
    
    #检查更新总战斗力
    #PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer, True)
    EventReport.WriteEvent_FightPower(curPlayer)
    
    #清除在本地图离线记录信息
    PlayerControl.RemoveLeaveServerPlayerInfo(curPlayer.GetPlayerID())
@@ -1381,30 +1360,6 @@
    #if curPlayer.GetPlayerAction() != IPY_GameWorld.paEvent:
    curPlayer.SetCanMove(True)
    
    #同步客户端tick
    #这个封包要在EndLoadMap, 上马之前发, 否则客户端处理时机不对(客户端封包缓存机制)
    #curPlayer.Sync_ClientTick()
    #做上一个地图的上马/骠车逻辑
    #恢复自己的状态
    playerVehicle = curPlayer.GetLastMapPlayerVehicle()
    if playerVehicle == IPY_GameWorld.pvHorse:
        #玩家在骑马中
        if not PlayerHorse.PlayerRideHorseUp(curPlayer, False, False):
        #=======================================================================
        #    playerHorseState = curPlayer.GetLastMapPlayerRidehorseState()
        #    if playerHorseState != IPY_GameWorld.prsNormal:
        #        #切换地图, 恢复急行状态
        #        curPlayer.SetPlayerRidehorseState(playerHorseState)
        #
        #    #刷新人物属性 所有状态
        #    playerControl = PlayerControl.PlayerControl(curPlayer)
        #    playerControl.RefreshAllState()
        # else:
        #=======================================================================
            #此时已经是下马状态不需要刷状态 但是需要通知客户端下马
            PlayerHorse.PlayerRideHorseDown(curPlayer, False)
    #激活玩家(保证持续性Buff处理间隔)
    PlayerControl.SetIsNeedProcess(curPlayer, True)
@@ -1619,7 +1574,7 @@
            return
        ItemCommon.ReduceItem(curPlayer, itemPack, [delIndex], 1, False, ChConfig.ItemDel_ResetAttrPoint)
    
    Item_ResetAttrPoint.DoResetAttrPoint(curPlayer, 0, 0, 0)
    #Item_ResetAttrPoint.DoResetAttrPoint(curPlayer, 0, 0, 0)
    return
def NotifyPlayerBasePoint(curPlayer, syncAttrIDList=[]):
@@ -1753,9 +1708,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
    
    
    #不可移动行为状态, 判断客户端限制
@@ -2121,18 +2076,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)
@@ -3166,54 +3109,6 @@
    curPlayer.Syn_OfflineTimeQueryResult() # 通知客服端离线时间
    return
#//B0 24 领取家族悬赏奖励 #tagReceiveFamilyArrestAward
#
#struct    tagReceiveFamilyArrestAward
#
#{
#    tagHead        Head;
#    DWORD        ArrestID;        //悬赏任务ID
#};
## 领取家族悬赏奖励
#  @param index: 玩家索引
#  @param clientData: 封包结构体
#  @param tick: 时间戳
#  @return: None
def ReceiveFamilyArrestAward(index, clientData, tick):
    return
#//B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState
#
#struct    tagQueryFamilyArrestAwardReceiveState
#
#{
#    tagHead        Head;
#};
## 请求家族悬赏奖励领取情况
#  @param index: 玩家索引
#  @param clientData: 封包结构体
#  @param tick: 时间戳
#  @return: None
def QueryFamilyArrestAwardReceiveState(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    Sync_FamilyArrestAwardReceiveState(curPlayer)
    return
## 通知客户端家族悬赏任务奖励领取情况
#  @param curPlayer: 玩家实例
#  @return: None
def Sync_FamilyArrestAwardReceiveState(curPlayer):
    awardReceiveState = ChPyNetSendPack.tagFamilyArrestAwardReceiveState()
    awardReceiveState.Clear()
    state = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
    awardReceiveState.ReceiveState = state
    NetPackCommon.SendFakePack(curPlayer, awardReceiveState)
    return
def PlayerOnDay(curPlayer):
    #玩法前瞻奖励
    gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
@@ -3270,16 +3165,36 @@
        PlayerSuccess.GetSuccessAward(curPlayer, dataEx)
    # 仙树免费减时
    elif rewardType == ChConfig.Def_RewardType_TreeFreeTime:
        PlayerTree.FreeReduceTreeLVTime(curPlayer)
        PlayerTree.FreeReduceTreeLVTime(curPlayer, dataEx)
    # 广告奖励
    elif rewardType == ChConfig.Def_RewardType_ADAward:
        OnGetADAward(curPlayer, dataEx)
    # 历练秘笈升级
    elif rewardType == ChConfig.Def_RewardType_LLMJLVUp:
        PlayerLLMJ.OnLLMJLVUp(curPlayer)
    # 公会讨伐领取宝箱奖励
    elif rewardType == ChConfig.Def_RewardType_FamilyTaofaBox:
        PlayerFamilyTaofa.GetTaofaBoxAward(curPlayer)
    # 阵容推荐奖励
    elif rewardType == ChConfig.Def_RewardType_LineupRecommend:
        PlayerHero.GetLineupRecommendAward(curPlayer, dataEx, dataExStr)
    # 功能开启奖励
    elif rewardType == ChConfig.Def_RewardType_OpenFunc:
        GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
    # 红颜等级奖励
    elif rewardType == ChConfig.Def_RewardType_BeautyLVAward:
        PlayerBeauty.GetBeautyLVAward(curPlayer, dataEx)
    # 领取分包下载奖励
    elif rewardType == ChConfig.Def_RewardType_DownLoad:
        GetDownloadAward(curPlayer, dataEx)
    # 开服庆典积分阶段奖励
    elif rewardType == ChConfig.Def_RewardType_OSACelebrationPointAward:
        OpenServerActivity.GetOSACelebrationPointAward(curPlayer, dataEx)
    # 每日免费直购礼包
    elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
        PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
    # 仙盟每日福利奖励
    #elif rewardType == ChConfig.Def_RewardType_FamilyDayAward:
    #    PlayerFamily.GetFamilyDayAward(curPlayer)
    # 玩家等级奖励
    elif rewardType == ChConfig.Def_RewardType_LVAward:
        PlayerLVAward.GetPlayerLVAward(curPlayer, dataEx)
@@ -3301,18 +3216,9 @@
    # 领取单笔累充领取
    elif rewardType == ChConfig.Def_RewardType_SingleRecharge:
        PlayerActSingleRecharge.OnGetSingleRechargeAward(curPlayer, dataEx, dataExStr)
    # 领取boss复活活动奖励
    elif rewardType == ChConfig.Def_RewardType_BossReborn:
        PlayerBossReborn.GetBossRebornActionAward(curPlayer, dataEx)
    # 领取分包下载奖励
    elif rewardType == ChConfig.Def_RewardType_DownLoad:
        GetDownloadAward(curPlayer, dataEx)
    # 领取许愿池奖励
    elif rewardType == ChConfig.Def_RewardType_WishingWell:
        PlayerWishingWell.DoGetWishingAward(curPlayer)
    # 功能开启奖励
    elif rewardType == ChConfig.Def_RewardType_OpenFunc:
        GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
    # 领取周狂欢活动奖励
    elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
        PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
@@ -3331,9 +3237,6 @@
    # 领取节日登录奖励
    elif rewardType == ChConfig.Def_RewardType_FeastLogin:
        PlayerFeastLogin.GetFeastLoginAward(curPlayer, dataEx)
    # 领取节日游历奖励
    elif rewardType == ChConfig.Def_RewardType_FeastTravel:
        PlayerFeastTravel.GetFeastTravelAward(curPlayer, dataEx)
    # 领取登录活动奖励
    elif rewardType == ChConfig.Def_RewardType_ActLoginAwardNew:
        PlayerActLoginNew.OnGetActLoginAward(curPlayer, dataEx, dataExStr)
@@ -3373,9 +3276,6 @@
    #历史累计充值领取
    elif rewardType == ChConfig.Def_RewardType_HistoryChargeAward:
        PlayerGoldGift.OnGetHistoryRechargeAward(curPlayer, dataEx)
    #在线特惠充值额外奖励
    elif rewardType == ChConfig.Def_RewardType_OnlineRechargeTH:
        PlayerCoin.OnGetOnlineRechargeTH(curPlayer)
    #创角奖励
    elif rewardType == ChConfig.Def_RewardType_CreateRole:
        OnGetCreateRoleAward(curPlayer)
@@ -3423,22 +3323,34 @@
        return
    adCntMax = ipyData.GetADCntMax()
    adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
    if adCnt >= adCntMax:
    if adCntMax and adCnt >= adCntMax:
        GameWorld.DebugLog("今日该广告奖励已达上限! adID=%s,adCnt=%s > %s" % (adID, adCnt, adCntMax))
        return
    adCnt += 1
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADCnt % adID, adCnt)
    awardItemList = ipyData.GetADAwardItemList()
    adMapID = ipyData.GetADMapID()
    GameWorld.DebugLog("领取广告奖励! adID=%s,adCnt=%s,adMapID=%s,awardItemList=%s" % (adID, adCnt, adMapID, awardItemList))
    adAwardType = ipyData.GetADAwardType()
    adAwardValue = ipyData.GetADAwardValue()
    GameWorld.DebugLog("领取广告奖励! adID=%s,adCnt=%s,adAwardType=%s,adAwardValue=%s,awardItemList=%s" % (adID, adCnt, adAwardType, adAwardValue, awardItemList))
    SyncADCntInfo(curPlayer, [adID])
    
    if adMapID:
        FBCommon.AddFBADCnt(curPlayer, adMapID)
    if awardItemList:
        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["ADAward", False, {}])
        
    # 领取祝福树充能奖励
    if adAwardType == 1:
        PlayerTree.GetTreeEnergyAward(curPlayer, False)
    # 副本次数
    elif adAwardType == 2:
        adMapID = adAwardValue
        FBCommon.AddFBADCnt(curPlayer, adMapID)
    # 寻宝
    elif adAwardType == 3:
        treasureType = adAwardValue
        PlayerTreasure.DoTreasure(curPlayer, treasureType, PlayerTreasure.CostType_ADFree)
    # 游历体力
    elif adAwardType == 4:
        PlayerTravel.AddTravelEnergy(curPlayer, adAwardValue)
    return
def ADCntOnDay(curPlayer):
@@ -3467,7 +3379,7 @@
        adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
        if not adCnt and syncADIDList == None:
            continue
        adInfo = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfo)
        adInfo = ChPyNetSendPack.tagSCADInfo()
        adInfo.ADID = adID
        adInfo.ADCnt = adCnt
        adInfoList.append(adInfo)
@@ -3475,7 +3387,7 @@
    if not adInfoList:
        return
    
    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfoList)
    clientPack = ChPyNetSendPack.tagSCADInfoList()
    clientPack.ADInfoList = adInfoList[:255]
    clientPack.Count = len(clientPack.ADInfoList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
@@ -3519,6 +3431,37 @@
    sendPack = ChPyNetSendPack.tagMCCreateRoleAwardState()
    sendPack.Clear()
    sendPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CreateRoleAwardState)
    NetPackCommon.SendFakePack(curPlayer, sendPack)
    return
def GetDownloadAward(curPlayer, dataEx):
    ##分包下载奖励 dataEx 0直接领取 1发邮件
    playerID = curPlayer.GetPlayerID()
    downloadAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 2)
    curAwardNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState)
    if curAwardNum == downloadAwardNum:
        GameWorld.DebugLog("已领取分包奖励! curAwardNum(%s) == downloadAwardNum(%s)" % (curAwardNum, downloadAwardNum), playerID)
        return
    awardItemList = IpyGameDataPY.GetFuncEvalCfg('DownReward', 1)
    if not awardItemList:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DownloadAwardState, downloadAwardNum)
    GameWorld.DebugLog("领取分包下载奖励: curAwardNum=%s,downloadAwardNum=%s" % (curAwardNum, downloadAwardNum), playerID)
    if dataEx == 1:
        PlayerMail.SendMailByKey('SubpackageDownload', curPlayer.GetID(), awardItemList)
    else:
        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["PackDownload", False, {}])
    SyncPackDownloadAward(curPlayer)
    return
def SyncPackDownloadAward(curPlayer):
    #分包下载奖励记录通知
    downloadAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 2)
    sendPack = ChPyNetSendPack.tagMCPackDownloadRecord()
    sendPack.Clear()
    sendPack.Record = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState) == downloadAwardNum
    NetPackCommon.SendFakePack(curPlayer, sendPack)
    return
@@ -3793,24 +3736,6 @@
    clientPack.NowMicSecond = serverTime.microsecond
    clientPack.WeekOfYear = GameWorld.GetWeekOfYear()
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    #旧包先保留,之后删除
    gw = GameWorld.GetGameWorld()
    packData = ChPyNetSendPack.tagOpenServerDay()
    packData.Clear()
    packData.Day = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
    packData.IsMixServer = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
    packData.MixDay = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
    packData.OpenWeekday = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday)
    packData.NowYear = serverTime.year
    packData.NowMonth = serverTime.month
    packData.NowDay = serverTime.day
    packData.NowHour = serverTime.hour
    packData.NowMinute = serverTime.minute
    packData.NowSecond = serverTime.second
    packData.NowMicSecond = serverTime.microsecond
    packData.WeekOfYear = GameWorld.GetWeekOfYear()
    NetPackCommon.SendFakePack(curPlayer, packData)
    return
#===============================================================================
@@ -3834,9 +3759,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()
@@ -3989,64 +3914,6 @@
    sendPack.MoveType = moveType
    # NotifyAll 做过滤或者数量处理
    PlayerControl.PyNotifyAll(curPlayer, sendPack, False, 0)
    return
def GiveDownloadPatchAward(curPlayer):
    ## 发放下载补丁包奖励
    playerID = curPlayer.GetPlayerID()
    patchAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 4)
    curAwardNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadPatchAward)
    if curAwardNum == patchAwardNum:
        GameWorld.DebugLog("已发放下载补丁包奖励! curAwardNum(%s) == patchAwardNum(%s)" % (curAwardNum, patchAwardNum), playerID)
        return
    awardItemList = IpyGameDataPY.GetFuncEvalCfg('DownReward', 3)
    if not awardItemList:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DownloadPatchAward, patchAwardNum)
    GameWorld.DebugLog("发放补丁包下载奖励: curAwardNum=%s,patchAwardNum=%s" % (curAwardNum, patchAwardNum), playerID)
    PlayerControl.SendMailByKey("DownloadPatchAward", [playerID], awardItemList)
    return
def GetDownloadAward(curPlayer, dataEx):
    ##分包下载奖励 dataEx 0直接领取 1发邮件
    playerID = curPlayer.GetPlayerID()
    downloadAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 5)
    curAwardNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState)
    if curAwardNum == downloadAwardNum:
        GameWorld.DebugLog("已领取分包奖励! curAwardNum(%s) == downloadAwardNum(%s)" % (curAwardNum, downloadAwardNum), playerID)
        return
    awardItemList = IpyGameDataPY.GetFuncEvalCfg('DownReward', 1)
    if not awardItemList:
        return
    # 检查背包
    if dataEx == 0:
        needSpace = len(awardItemList)
        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
        if needSpace > packSpace:
            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
            return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DownloadAwardState, downloadAwardNum)
    GameWorld.DebugLog("领取分包下载奖励: curAwardNum=%s,downloadAwardNum=%s" % (curAwardNum, downloadAwardNum), playerID)
    if dataEx == 1:
        PlayerControl.SendMailByKey('SubpackageDownload', [curPlayer.GetID()], awardItemList)
    else:
        for itemID, itemCnt, isBind in awardItemList:
            ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
    SyncPackDownloadAward(curPlayer)
    return
def SyncPackDownloadAward(curPlayer):
    #分包下载奖励记录通知
    downloadAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 5)
    sendPack = ChPyNetSendPack.tagMCPackDownloadRecord()
    sendPack.Clear()
    sendPack.Record = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState) == downloadAwardNum
    NetPackCommon.SendFakePack(curPlayer, sendPack)
    return
def NotifyPlayerMove(curPlayer, posX, posY, npcID=0):