|  |  |  | 
|---|
|  |  |  | import IpyGameDataPY | 
|---|
|  |  |  | import PlayerTalk | 
|---|
|  |  |  | import PlayerGeTui | 
|---|
|  |  |  | import PlayerStore | 
|---|
|  |  |  | import GameWorldActionControl | 
|---|
|  |  |  | import GMT_CTG | 
|---|
|  |  |  | import PyGameData | 
|---|
|  |  |  | import GMShell | 
|---|
|  |  |  | import IPY_PlayerDefine | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | #  @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态 | 
|---|
|  |  |  | def PlayerLogin(index, tick): | 
|---|
|  |  |  | GameWorld.GetPsycoFunc(__Func_PlayerLogin)(index, tick) | 
|---|
|  |  |  | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) | 
|---|
|  |  |  | try: | 
|---|
|  |  |  | __Func_PlayerLogin(curPlayer, tick) | 
|---|
|  |  |  | 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()) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @param tick 当前时间 | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | #  @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态 | 
|---|
|  |  |  | def __Func_PlayerLogin(index, tick): | 
|---|
|  |  |  | def __Func_PlayerLogin(curPlayer, tick): | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #玩家登录初始化 | 
|---|
|  |  |  | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) | 
|---|
|  |  |  | #玩家在线时间初始化 | 
|---|
|  |  |  | InitPlayerOnLineTime(curPlayer, tick) | 
|---|
|  |  |  | #玩家响应信息初始化 | 
|---|
|  |  |  | 
|---|
|  |  |  | #通知玩家登陆信息,来自运营方 | 
|---|
|  |  |  | #DoLogic_LoginUserData(curPlayer) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #通知开服天数 | 
|---|
|  |  |  | PlayerEventCounter.Sync_OpenServerDay(curPlayer) | 
|---|
|  |  |  | #通知开服天数, 登录时改为地图通知,因为GameServer的PlayerLogin在地图之后,前端有些功能处理需要提前得到开服天 | 
|---|
|  |  |  | #PlayerEventCounter.Sync_OpenServerDay(curPlayer) | 
|---|
|  |  |  | # 通知广播信息 | 
|---|
|  |  |  | GMCommon.SendBroadCastToClient(curPlayer) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | PlayerXMZZ.OnXMZZOnLogin(curPlayer) | 
|---|
|  |  |  | #等级奖励 | 
|---|
|  |  |  | PlayerLVAward.OnPlayerLogin(curPlayer) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #商店购买次数 | 
|---|
|  |  |  | PlayerStore.OnPlayerLogin(curPlayer) | 
|---|
|  |  |  | #通知世界boss信息 | 
|---|
|  |  |  | GameWorldBoss.OnPlayerLogin(curPlayer) | 
|---|
|  |  |  | #家族副本boss状态通知 | 
|---|
|  |  |  | 
|---|
|  |  |  | #玩家等级记录 | 
|---|
|  |  |  | PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | GMShell.OnPlayerLogin(curPlayer) | 
|---|
|  |  |  | GMT_CTG.OnPlayerLogin(curPlayer) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #通知地图服务器自己初始化成功 | 
|---|
|  |  |  | 
|---|
|  |  |  | def MSGetReward(curPlayer): | 
|---|
|  |  |  | #PlayerCanGetReward.SynClient_CanGetRewardList(curPlayer) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 通知首次开服时间 | 
|---|
|  |  |  | #  @param curPlayer: 玩家实例 | 
|---|
|  |  |  | #  @return: None | 
|---|
|  |  |  | def Sync_InitOpenServerTime(curPlayer): | 
|---|
|  |  |  | #    initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime) | 
|---|
|  |  |  | #    packData = ChPyNetSendPack.tagInitOpenServerTime() | 
|---|
|  |  |  | #    packData.Clear() | 
|---|
|  |  |  | #    packData.Time = initOpenServerTime | 
|---|
|  |  |  | #    NetPackCommon.SendFakePack(curPlayer, packData) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 运营登陆信息处理 | 
|---|
|  |  |  | #  @param curPlayer | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | #  @remarks 函数详细说明. | 
|---|
|  |  |  | def PlayerDisconnect(index, tick): | 
|---|
|  |  |  | GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick) | 
|---|
|  |  |  | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) | 
|---|
|  |  |  | try: | 
|---|
|  |  |  | __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()) | 
|---|
|  |  |  | #调用底层下线 | 
|---|
|  |  |  | curPlayer.DoDisconnect() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 玩家下线(封包参数) | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @param tick 当前时间 | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | #  @remarks 函数详细说明. | 
|---|
|  |  |  | def __Func_PlayerDisconnect(index, tick): | 
|---|
|  |  |  | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) | 
|---|
|  |  |  | def __Func_PlayerDisconnect(curPlayer, tick): | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #跨服匹配PK | 
|---|
|  |  |  | #GameWorldMergePK.OnLeaveServer(curPlayer) | 
|---|
|  |  |  | 
|---|
|  |  |  | #MergePlayer.OnPlayerLeaveGotoMergeServer(curPlayer, tick) | 
|---|
|  |  |  | #------------镖车逻辑 | 
|---|
|  |  |  | #TruckPlayerDisconnectProcess(curPlayer, tick) | 
|---|
|  |  |  | #调用底层下线 | 
|---|
|  |  |  | curPlayer.DoDisconnect() | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 设置玩家离线时间 | 
|---|
|  |  |  | 
|---|
|  |  |  | PlayerTeam.OnPlayerChangeMap(curPlayer, tick) | 
|---|
|  |  |  | GameWorldBoss.OnPlayerChangeMap(curPlayer) | 
|---|
|  |  |  | PlayerFamily.OnPlayerChangeMap(curPlayer, tick) | 
|---|
|  |  |  | PlayerFamilyParty.OnPlayerChangeMap(curPlayer, tick) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 玩家切换真实地图 | 
|---|