hxp
2021-11-17 ffa8a645ed6a92a3c723bbf5c7f1eb4d5425c826
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -44,7 +44,7 @@
#import PlayerFamilyStore
import PlayerSocial
import PlayerFamilyParty
import PlayerSealDemon
#import PlayerSealDemon
import PlayerBillboard
import PlayerLVAward
import PlayerDuJie
@@ -56,13 +56,18 @@
import GameWorldActionControl
import GameWorldFamilyWar
import PlayerFBHelpBattle
import GameWorldSkyTower
import GMT_CTG
import PyGameData
import GMShell
import IPY_PlayerDefine
import GameWorldArena
import CrossRealmPK
import AuctionHouse
import PlayerAssist
import PlayerFB
import PlayerLove
import PlayerCharm
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -87,9 +92,7 @@
    except:
        curPlayer.Kick(IPY_PlayerDefine.disWaitForPlayerLoinError)
        import traceback
        GameWorld.ErrLog("玩家上线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("玩家上线逻辑错误~~~~\r\n%s" % traceback.format_exc())
        GameWorld.RaiseException("玩家上线逻辑错误\r\n%s" % traceback.format_exc())
    return
#---------------------------------------------------------------------
@@ -159,7 +162,7 @@
        #仙盟宴会
        PlayerFamilyParty.OnPlayerLogin(curPlayer)
        #封魔坛
        PlayerSealDemon.OnPlayerLogin(curPlayer)
        #PlayerSealDemon.OnPlayerLogin(curPlayer)
        #仙魔之争
        PlayerXMZZ.OnXMZZOnLogin(curPlayer)
        #等级奖励
@@ -168,28 +171,53 @@
        PlayerStore.OnPlayerLogin(curPlayer)
        #通知世界boss信息
        GameWorldBoss.OnPlayerLogin(curPlayer)
        #家族副本boss状态通知
        PlayerFamilyBoss.OnLogin(curPlayer)
        #渡劫
        PlayerDuJie.OnPlayerLogin(curPlayer)
        #守卫人皇
        PlayerFamilySWRH.OnLogin(curPlayer)
        PlayerTalk.LoginChatMi(curPlayer)
        PlayerTalk.NotifyTalkCache(curPlayer)
        PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
        #PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
        #活动
        GameWorldActionControl.OnPlayerLogin(curPlayer)
        #玩家等级记录
        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
        #副本助战
        PlayerFBHelpBattle.OnHelpPlayerLogin(curPlayer)
        #竞技场
        GameWorldArena.OnPlayerLogin(curPlayer)
        #跨服PK
        CrossRealmPK.OnPlayerLogin(curPlayer)
        #诛仙BOSS
        PlayerZhuXianBoss.OnPlayerLogin(curPlayer)
        #骑宠boss状态通知
        PlayerHorsePetBoss.OnLogin(curPlayer)
        #协助
        PlayerAssist.OnPlayerLogin(curPlayer, False)
        #天星塔
        GameWorldSkyTower.OnPlayerLogin(curPlayer)
        GMT_CTG.OnPlayerLogin(curPlayer)
    else:
        #协助
        PlayerAssist.OnPlayerLogin(curPlayer, True)
    return
def DoPlayerRealLoginOK(curPlayer, tick):
    ''' 玩家最终登录成功处理, 由  MapServer  DoPlayerRealLoginOK  通知
        该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
        旧的功能先不动( __DoPlayerLoginServer 函数中的功能),如果有登录相关的bug再考虑是否移动到此函数
    '''
    GameWorld.Log("GameServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
    if not PlayerControl.GetIsTJG(curPlayer):
        #家族副本boss状态通知
        PlayerFamilyBoss.OnLogin(curPlayer)
        #魅力
        PlayerCharm.OnPlayerLogin(curPlayer)
        #情缘
        PlayerLove.OnPlayerLogin(curPlayer)
    return
def __UpdOnedayJobPlayerLoginoffTime(curPlayer):
@@ -510,9 +538,7 @@
        __Func_PlayerDisconnect(curPlayer, tick)
    except:
        import traceback
        GameWorld.ErrLog("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("玩家下线逻辑错误~~~~\r\n%s" % traceback.format_exc())
        GameWorld.RaiseException("玩家下线逻辑错误\r\n%s" % traceback.format_exc())
    #调用底层下线
    curPlayer.DoDisconnect()
    return
@@ -537,13 +563,22 @@
    PlayerFriend.OnPlayerDisconnect(curPlayer, tick)
    
    __UpdOnedayJobPlayerLoginoffTime(curPlayer)
    PlayerGeTui.NewGuyCallBackGeTui(curPlayer, tick)
    #PlayerGeTui.NewGuyCallBackGeTui(curPlayer, tick)
    # 设置家族成员离线时间
    SetPlayerOfflineTime(curPlayer)
    #拍卖行
    AuctionHouse.OnPlayerLeaveServer(curPlayer)
    #协助
    PlayerAssist.OnLeaveServer(curPlayer)
    #红包
    PlayerFamilyRedPacket.OnLeaveServer(curPlayer)
    #------------镖车逻辑
    #TruckPlayerDisconnectProcess(curPlayer, tick)
    if not PlayerControl.GetIsTJG(curPlayer):
        playerID = curPlayer.GetPlayerID()
        PyGameData.g_unTJLogoffTime[playerID] = int(time.time())
    return
## 设置玩家离线时间
@@ -551,8 +586,8 @@
#  @return None
#  @remarks 函数详细说明.
def SetPlayerOfflineTime(curPlayer):
    if PlayerControl.GetIsTJG(curPlayer):
        return
    #if PlayerControl.GetIsTJG(curPlayer):
    #    return
    
    curPlayerID = curPlayer.GetPlayerID()
    curFamily = curPlayer.GetFamily()
@@ -606,6 +641,7 @@
    
    playerStatePack = IPY_GameServer.IPY_GRefreshPlayerProperty()
    packValue = playerStatePack.GetValue()
    packValueEx = playerStatePack.GetValueEx()
    packType = playerStatePack.GetType()
    
    #---特殊逻辑处理---
@@ -613,6 +649,10 @@
        PlayerControl.SetGMForbidenTalk(curPlayer, packValue)
        return
    
    if packType == ShareDefine.CDBPlayerRefresh_ExAttr17:
        PlayerControl.SetPlayerAccState(curPlayer, packValue)
        return
    if packType == IPY_GameServer.CDBPlayerRefresh_State:
        # 脱机在线
        PlayerControl.SetIsTJG(curPlayer, packValue)
@@ -628,7 +668,7 @@
        return
    
    if packType == IPY_GameServer.CDBPlayerRefresh_FightPower:
        curPlayer.SetFightPower(packValue)
        curPlayer.SetFightPower(packValue, packValueEx)
        return
    if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr2:
@@ -636,11 +676,19 @@
        PlayerTeam.SetTeamCheckState(curPlayer, packValue)
        return
    
    #if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr1:
    #    PlayerControl.SetAssistTagPlayerID(curPlayer, packValue)
    #    return
    if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr3:
        PlayerControl.SetFBFuncLineID(curPlayer, packValue)
        return
    #---常规逻辑处理---
        
    elif packType == IPY_GameServer.CDBPlayerRefresh_LV:
        curPlayer.SetLV(packValue)
        PlayerSocial.UpdateSocialInfo(curPlayer, packType, packValue)
        PlayerSocial.UpdateSocialInfo(curPlayer.GetID(), packType, packValue)
        #玩家等级记录
        playerID = curPlayer.GetID()
        if playerID in PyGameData.g_todayPlayerLVDict:
@@ -679,9 +727,6 @@
    elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr10:
        PlayerControl.SetChatBubbleBox(curPlayer, packValue)
        
    elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr11:
        PlayerControl.SetTodayXianyuanCoin(curPlayer, packValue)
    elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr13:
        PlayerControl.SetPlayerServerGroupID(curPlayer, packValue)
        
@@ -690,7 +735,7 @@
    
    elif packType == IPY_GameServer.CDBPlayerRefresh_OfficialRank:
        curPlayer.SetOfficialRank(packValue)
        PlayerSocial.UpdateSocialInfo(curPlayer, packType, packValue)
        PlayerSocial.UpdateSocialInfo(curPlayer.GetID(), packType, packValue)
        #更新排行榜的境界
        PlayerBillboard.UpdateBillboardRealm(curPlayer)