hxp
5 天以前 d5c268fa56e84359541b82f48fd657846dfd63c1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -48,7 +48,6 @@
import PlayerTreasure
import IpyGameDataPY
import EventReport
import PassiveBuffEffMng
import PlayerActBuyOne
import PlayerActCollectWords
import PlayerActTotalRecharge
@@ -57,12 +56,12 @@
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import OpenServerActivity
import GameLogic_Qunying
import ChNetSendPack
import PlayerArena
import PyGameData
import PlayerCoin
import PlayerFB
import SkillShell
import PlayerGubao
import PlayerCustomAward
import PlayerZhanling
@@ -71,16 +70,17 @@
import PlayerTask
import GameObj
import PlayerGoldRush
import PlayerActLoginNew
import PlayerActSign
import PlayerActBuyCountGift
import PlayerActLunhuidian
import PlayerActHeroAppear
import PlayerActFamilyGCZ
import PlayerActTask
import PlayerMail
import DBDataMgr
import PlayerViewCache
import UpdatePlayerName
import GameServerRefresh
#import GameServerRefresh
import IPY_ServerDefine
import IPY_PlayerDefine
import CommFunc
@@ -332,8 +332,6 @@
    PlayerActBuyCountGift.OnPlayerLogin(curPlayer)
    # 任务活动
    PlayerActTask.OnPlayerLogin(curPlayer)
    # 登录活动
    PlayerActLoginNew.OnPlayerLogin(curPlayer)
    # 炼器活动
    PlayerActLianqi.OnPlayerLogin(curPlayer)
    # 多日连充活动
@@ -420,6 +418,7 @@
        PlayerPreset.OnPlayerLogin(curPlayer)
        CrossPlayer.OnPlayerLogin(curPlayer)
        PlayerActLunhuidian.OnPlayerLogin(curPlayer)
        PlayerActHeroAppear.OnPlayerLogin(curPlayer)
        
        __OnFixVersion(curPlayer) # 修正线上玩家数据用,暂时放最后
        # 上线查询一次充值订单
@@ -448,7 +447,7 @@
    '''
    
    playerID = curPlayer.GetPlayerID()
    sysFixVersion = 2025123012 # 系统定义的最后一次修正版本号,一般以 yyyyMMddhh 定义为版本号
    sysFixVersion = 2026021300 # 系统定义的最后一次修正版本号,一般以 yyyyMMddhh 定义为版本号
    playerVersion = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FixVersion)
    if not playerVersion:
        createRoleTime = curPlayer.GetCreateRoleTime() # 按创角
@@ -468,6 +467,13 @@
        # 每个版本修正完需要立即更新到对应的版本号值,防止中间某个版本修正失败,导致重登后重复修正已经处理的版本
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FixVersion, fixVersion)
        
    # 修正公会跨服首次没有过天
    fixVersion = 2026021300
    if playerVersion < fixVersion:
        if DBFamily.IsFamilyCross():
            GameWorld.Log("跨服公会玩家登录补过天")
            PlayerFamily.__doPlayerOnDay(curPlayer)
    # 其他
    # 需要按修正版本时间顺序依次处理!!!需要按修正版本时间顺序依次处理!!!需要按修正版本时间顺序依次处理!!!
    
@@ -692,7 +698,12 @@
    #首登邮件
    mailList = IpyGameDataPY.GetFuncEvalCfg("MailLVAward", 2)
    for mailTypeKey, mailItemList in mailList:
        PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
        PlayerMail.SendMailByKey(mailTypeKey, playerID, mailItemList)
    appID = GameWorld.GetAppIDByAccID(curPlayer.GetAccID())
    appIDMailDict = IpyGameDataPY.GetFuncEvalCfg("MailLVAward", 3, {})
    mailDict = appIDMailDict.get(appID, {})
    for mailTypeKey, mailItemList in mailDict.items():
        PlayerMail.SendMailByKey(mailTypeKey, playerID, mailItemList)
        
    PlayerHero.OnPlayerFirstLogin(curPlayer)
    
@@ -760,7 +771,7 @@
    PlayerControl.SendMailByKey("MixServer1", [playerID], addItemList, gold=gold, silver=silver, detail=detailDict)
    
    # 同步排行榜
    PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
    #PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
    return
#---------------------------------------------------------------------
        
@@ -1366,6 +1377,7 @@
    if (curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidByPy)) <= 0:
        return True
    
    GameWorld.Log("玩家被封号禁止登录" , curPlayer.GetPlayerID())
    curPlayer.Kick(IPY_GameWorld.disGMKick)
    return
@@ -1897,7 +1909,8 @@
#@return 返回值无意义
#@remarks C++封包触发, 玩家下线
def PlayerDisconnect(index, tick):
    GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick)
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    PlayerDisconnectEx(curPlayer, tick)
    return
##C++封包触发, 玩家下线
@@ -1905,8 +1918,7 @@
#@param tick 时间戳
#@return 返回值无意义
#@remarks C++封包触发, 玩家下线
def __Func_PlayerDisconnect(index, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
def PlayerDisconnectEx(curPlayer, tick):
    try:
        # 避免因逻辑错误导致下线失败,可能导致回档的情况
        DoPlayerDisconnect(curPlayer, tick)
@@ -3130,8 +3142,17 @@
    # 轮回殿奖励
    elif rewardType == ChConfig.Def_RewardType_LunhuidianAward:
        PlayerActLunhuidian.GetLunhuidianAward(curPlayer, dataEx, dataExStr)
    # 武将登场升星计划免费奖励 10
    elif rewardType == ChConfig.Def_RewardType_ActHeroAppearStarFreeAward:
        PlayerActHeroAppear.GetHeroAppearStarFreeAward(curPlayer, dataEx)
    # 领取活动签到奖励 70
    elif rewardType == ChConfig.Def_RewardType_ActSignAward:
        PlayerActSign.OnGetActSignAward(curPlayer, dataEx, dataExStr)
    # 群英榜历史最高名次奖励 7
    elif rewardType == ChConfig.Def_RewardType_QunyingRankHighest:
        GameLogic_Qunying.GetQunyingRankHighestAward(curPlayer)
        
    # 首充礼包奖励
    elif rewardType == ChConfig.Def_RewardType_FirstCharge:
        PlayerGoldGift.GetPlayerFirstCharge(curPlayer, dataEx, dataExStr)
@@ -3144,9 +3165,6 @@
    # 领取单笔累充领取
    elif rewardType == ChConfig.Def_RewardType_SingleRecharge:
        PlayerActSingleRecharge.OnGetSingleRechargeAward(curPlayer, dataEx, dataExStr)
    # 领取登录活动奖励
    elif rewardType == ChConfig.Def_RewardType_ActLoginAwardNew:
        PlayerActLoginNew.OnGetActLoginAward(curPlayer, dataEx, dataExStr)
    # 领取购买次数礼包活动
    elif rewardType == ChConfig.Def_RewardType_ActBuyCountGift:
        PlayerActBuyCountGift.OnGetBuyCountGiftAward(curPlayer, dataEx, dataExStr)
@@ -3188,16 +3206,16 @@
        PlayerZhanling.GetZhanlingReward(curPlayer, dataEx, dataExStr)
    #玩法前瞻奖励
    elif rewardType == ChConfig.Def_RewardType_GameNotice:
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GameNoticeAwardState, IpyGameDataPY.GetFuncEvalCfg("GameNoticeReward", 1))
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GameNoticeAwardState, IpyGameDataPY.GetFuncEvalCfg("GameNoticeReward", 1), "GameNotice")
    #每日分享奖励34
    elif rewardType == ChConfig.Def_RewardType_ShareGame:
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_ShareGameAwardState, IpyGameDataPY.GetFuncEvalCfg("ShareGameReward", 1))
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_ShareGameAwardState, IpyGameDataPY.GetFuncEvalCfg("ShareGameReward", 1), "ShareGame")
    #游戏好评奖励35
    elif rewardType == ChConfig.Def_RewardType_GoodGame:
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GoodGameAwardState, IpyGameDataPY.GetFuncEvalCfg("GoodGameReward", 1))
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GoodGameAwardState, IpyGameDataPY.GetFuncEvalCfg("GoodGameReward", 1), "GoodGame")
    #游戏点赞奖励67
    elif rewardType == ChConfig.Def_RewardType_LikeGame:
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_LikeGameAwardState, IpyGameDataPY.GetFuncEvalCfg("GoodGameReward", 4))
        OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_LikeGameAwardState, IpyGameDataPY.GetFuncEvalCfg("GoodGameReward", 4), "LikeGame")
    #领取开服每日奖励
    elif rewardType == ChConfig.Def_RewardType_OpenServerDailyAward:
        openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
@@ -3243,6 +3261,8 @@
    # 游历体力
    elif adAwardType == 4:
        PlayerTravel.AddTravelEnergy(curPlayer, adAwardValue)
    DataRecordPack.DR_ADAward(curPlayer, adID)
    return
def ADCntOnDay(curPlayer):
@@ -3630,6 +3650,7 @@
    clientPack.NowSecond = serverTime.second
    clientPack.NowMicSecond = serverTime.microsecond
    clientPack.WeekOfYear = GameWorld.GetWeekOfYear()
    clientPack.OpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_InitOpenServerTime)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
@@ -3865,14 +3886,17 @@
    if recType in ShareDefine.Def_ViewGameRecSelfList:
        recID = curPlayer.GetPlayerID()
    recTypeIDMgr = DBDataMgr.GetGameRecMgr().GetRecTypeIDMgr(recType, recID)
    SyncGameRecInfo(curPlayer, recType, recID, recTypeIDMgr.GetDataList())
    SyncGameRecInfo(curPlayer, recTypeIDMgr.GetDataList(), recType, recID)
    return
def SyncGameRecInfo(curPlayer, recType, recID, recDataList):
def SyncGameRecInfo(curPlayer, recDataList, recType=0, recID=0):
    recList = []
    for recData in recDataList:
        if not recData:
            continue
        if not recType:
            recType = recData.GetRecType()
            recID = recData.GetRecID()
        rec = ChPyNetSendPack.tagSCGameRec()
        rec.Time = recData.GetTime()
        rec.Value1 = recData.GetValue1()