ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -172,11 +172,18 @@
import PlayerActFamilyGCZ
import PlayerActYunshi
import PlayerActTask
import PlayerMail
import DBDataMgr
import GameServerRefresh
import IPY_ServerDefine
import CommFunc
from PyMongoDB import RecvPackToMapDB
import datetime
import time
import math
import re
import base64
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -480,7 +487,7 @@
#---------------------------------------------------------------------
'''
登录流程
旧登录流程 -- 留着对比
MapServer
    ChPlayer:def PlayerLogin(index, tick)
                    DoPlayerLogin
@@ -542,10 +549,7 @@
    Sync_PyServerDataTimeToClient(curPlayer)
    Sync_OpenServerDay(curPlayer)
    #通知玩家基本信息
    curPlayer.Sync_ClientPlayerLogin()
    #同步GameServer自己的地图ID
    curPlayer.Sync_GameServer_MapID()
    curPlayer.Sync_ClientPlayerLogin()  #01 02 玩家初始化#tagCDBPlayer
    
    # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
    # !!!必要发送的数据要注意位置
@@ -561,7 +565,7 @@
        PlayerControl.SetCrossMapID(curPlayer, curPlayer.GetMapID()) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为对应地图
        
    #通知运行成功
    curPlayer.BalanceServer_PlayerLoginInitOK()
    curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
    return
def __DoPlayerLoginServer(curPlayer, tick):
@@ -585,8 +589,6 @@
        EventReport.WriteEvent_login(curPlayer)
        #---玩家上线, 宠物逻辑处理---
        PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
        PlayerFamily.FamilyPlayerOnLoginCross(curPlayer)
        
        PlayerTeam.OnPlayerLoginCrossServer(curPlayer)
        return
@@ -726,8 +728,6 @@
    #充值活动玩家登入处理
    #PlayerGoldAction.DoLogic_PlayerOnLogin(curPlayer)
    
    # 通知玩家是否可以参加家族活动
    #PlayerFamily.SendClientForbidFamilyAction(curPlayer)
    # 提示贵宾俱乐部信息
    #PlayerVip.NoteVIPClubInfo(curPlayer)
    
@@ -785,7 +785,7 @@
    #同步自动战斗配置记录
#    Sync_AutoFightSetting(curPlayer)
    
    PlayerFamily.FamilyPlayerOnLogin(curPlayer, tick)
    PlayerFamily.OnPlayerLogin(curPlayer, tick)
    #改到 GameServerRefresh GameSever_PlayerInitOK后处理才能保证玩家已经在Gameserver注册
    #PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer)
    # 称号
@@ -1011,6 +1011,7 @@
        pass
    
    else:
        PlayerMail.OnPlayerLogin(curPlayer)
        PlayerChatBox.OnPlayerLogin(curPlayer)
        PlayerFace.OnPlayerLogin(curPlayer)
        PlayerXiangong.OnPlayerLogin(curPlayer)
@@ -1346,7 +1347,7 @@
#@remarks 玩家在地图服务器中登录ok,初始化自己
def DoPlayerLoginInMap(curPlayer, tick):
    #通知GameServer切换地图开始
    curPlayer.GameServer_SetLoadMapState(0)
    #curPlayer.GameServer_SetLoadMapState(0)
    #在玩家切换场景的时候, 不会调用到这里
    curPlayer.SetCanMove(False)
    curPlayer.SetInitOK(False)
@@ -1472,13 +1473,16 @@
        
        #锁住玩家, 等到读取地图成功, 再解锁
        curPlayer.SetCanMove(False)
        #登陆发图形验证码
        PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
        curPlayer.SendToBServerServerInitOK()   #通知route登录成功 ,route向客户端发送0109包
        OnAllServerInitOK(curPlayer, tick)
        #到此处已经可以保存数据,即使客户端不回包断线
        #后续登录流程等客户端回复 //01 07 地图读取OK#tagCInitMapOK 调用 LoadMapOK
    except:
        curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
        import traceback
        GameWorld.RaiseException("玩家上线逻辑错误\r\n%s" % traceback.format_exc())
    return
    
    
@@ -1541,9 +1545,6 @@
        #更改镖车记录的部分主人信息
        PlayerTruck.ChangeTruckNoteInfo(curPlayer)
        
        #更新镖车进排行榜
        PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetPlayerID(), curPlayer.GetName(), curPlayer.GetOperateInfo(),
                                                   curPlayer.GetLV(), truckLv, curPlayer.GetMapID())
    #---初始化自己的召唤兽---
    #===========================================================================
@@ -1680,6 +1681,7 @@
#@remarks C++封包触发, 切换地图成功( 目标地图 )
def LoadMapOK(index, tick):
    GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
    GameServerRefresh.GameSever_PlayerInitOK(index, tick)
    return
#---------------------------------------------------------------------
@@ -1723,7 +1725,7 @@
    GameWorld.Log("地图读取成功" , curPlayer.GetPlayerID())
    
    #通知GameServer切换地图停止
    curPlayer.GameServer_SetLoadMapState(1)
    #curPlayer.GameServer_SetLoadMapState(1)
    curPlayer.SetMapLoadOK(True)
    
    #将玩家放置在这个地图上
@@ -3115,10 +3117,19 @@
    except:
        import traceback
        GameWorld.RaiseException("玩家下线逻辑错误\r\n%s" % traceback.format_exc())
    RecvPackToMapDB.MapCallDB(GetPackSaveData(curPlayer))
    #调用底层使玩家下线
    curPlayer.DoDisconnect(tick)
    
# 简化c++的保存数据封包
def GetPackSaveData(curPlayer):
    roleSaveData = base64.b64decode(curPlayer.GetPackData())  # base64加密了
    allData = ""
    allData = CommFunc.WriteBYTE(allData, IPY_ServerDefine.gstUpdate)
    allData = CommFunc.WriteString(allData, len(roleSaveData), roleSaveData)
    return  allData
##玩家正常下线
#@param curPlayer 玩家索引
#@param tick 时间戳
@@ -5598,9 +5609,6 @@
    # 每日免费直购礼包
    elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
        PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
    # 仙盟活跃度奖励
    elif rewardType == ChConfig.Def_RewardType_FamilyActivity:
        PlayerFamily.GetFamilyActivityAward(curPlayer, dataEx)
    # 仙盟联赛冠军仙盟每日俸禄奖励
    elif rewardType == ChConfig.Def_RewardType_ChampionFamilyDailyReward:
        GameLogic_FamilyWar.GetChampionFamilyDailyReward(curPlayer)
@@ -6081,6 +6089,23 @@
    serverTime = GameWorld.GetCurrentTime()
    if not serverTime:
        return
    clientPack = ChPyNetSendPack.tagMCOpenServerDay()
    clientPack.Day = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay)
    clientPack.IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
    clientPack.MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay)
    clientPack.OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
    clientPack.NowYear = serverTime.year
    clientPack.NowMonth = serverTime.month
    clientPack.NowDay = serverTime.day
    clientPack.NowHour = serverTime.hour
    clientPack.NowMinute = serverTime.minute
    clientPack.NowSecond = serverTime.second
    clientPack.NowMicSecond = serverTime.microsecond
    clientPack.WeekOfYear = GameWorld.GetWeekOfYear()
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    #旧包先保留,之后删除
    gw = GameWorld.GetGameWorld()
    packData = ChPyNetSendPack.tagOpenServerDay()
    packData.Clear()