ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -100,7 +100,6 @@
import PassiveBuffEffMng
import PlayerDiceEx
import QuestCommon
import PlayerTJG
import GameLogic_XMZZ
import PlayerFlashSale
import PlayerFlashGiftbag
@@ -145,7 +144,6 @@
import PlayerArena
import PyGameData
import PlayerCoin
import PlayerGeTui
import PlayerCharm
import PlayerDogz
import PlayerCoat
@@ -156,7 +154,9 @@
import PlayerShentong
import PlayerCustomAward
import PlayerZhanling
import PlayerTree
import PlayerLianTi
#import PlayerTask
import PlayerYinji
import PlayerLove
import GameObj
@@ -175,11 +175,16 @@
import PlayerMail
import DBDataMgr
import GameServerRefresh
import IPY_ServerDefine
import CommFunc
from PyMongoDB import RecvPackToMapDB
import PlayerTalk
import datetime
import time
import math
import re
import base64
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -204,10 +209,6 @@
    #初始化玩家的时钟个数
    if curPlayer.GetTickTypeCount() == 0:
        curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
    #初始化玩家聊天频道
    if curPlayer.GetMaxChannelCount() == 0:
        curPlayer.SetMaxChannelCount(ChConfig.Def_PlayerTalkChannelMaxCount)
        
#===============================================================================
#    #初始化玩家鉴定管理器物品最大个数
@@ -483,52 +484,29 @@
#---------------------------------------------------------------------
'''
旧登录流程 -- 留着对比
登录流程
UserCrtlDB
    onAuthentication  玩家登录 :验证账号-若没有角色则创角-返回角色信息-通知Map C++
    Map C++调用 PlayerLogin
MapServer
    ChPlayer:def PlayerLogin(index, tick)
                    DoPlayerLogin
                        curPlayer.Sync_ClientPlayerLogin()
                        curPlayer.Sync_GameServer_MapID()                #同步GameServer自己的地图ID
                        curPlayer.BalanceServer_PlayerLoginInitOK()
GameServer
    ChPlayer:def PlayerLoadMapState(index, tick)    pack.GetLoadState()=0    此时的  LoadState 为0
                    curPlayer.SetIsLoadMap(True)    设置在加载地图
    ChPlayer:def PlayerLogin(index, tick)
                    curPlayer.MapServer_InitOK()    通知地图自己OK了
MapServer
    PlayerEventCounter:def GameServer_InitOK(index, tick)
        curPlayer.SendToBServerServerInitOK()                #通知BServer自己OK了
        ChPlayer:def OnAllServerInitOK(curPlayer, tick)
        DoPlayerLogin
            curPlayer.Sync_ClientPlayerLogin()  #01 02 玩家初始化#tagCDBPlayer
            curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
            curPlayer.SendToBServerServerInitOK()   #通知route登录成功 ,route向客户端发送//01 09 服务器准备就绪#tagServerPrepareOK
            ChPlayer:def OnAllServerInitOK(curPlayer, tick)
    ChPlayer:def LoadMapOK(curPlayer, tick)
        curPlayer.GameServer_SetLoadMapState(1)    #通知GameServer切换地图停止
        curPlayer.SetMapLoadOK(True)
        curPlayer.SetInitOK(True)
        curPlayer.EndLoadMap()
GameServer
    ChPlayer:def PlayerLoadMapState(index, tick)    pack.GetLoadState()=1    此时的  LoadState 为1
        PlayerLoginLoadMapOK
            ChPlayer:def __Func_LoadMapOK(curPlayer, tick)  #!!!直接调用不等待客户端封包 //01 07 地图读取OK#tagCInitMapOK
            curPlayer.SetMapLoadOK(True)
            curPlayer.SetInitOK(True)
        curPlayer.MapServer_GameServerRefreshOK()        #通知地图服务器玩家初始化成功
        curPlayer.SetIsLoadMap(False)
MapServer
    GameServerRefresh:GameSever_PlayerInitOK curPlayer.GetGameServerInitOK()=0
        curPlayer.SetGameServerInitOK(True)
后续补充流程
MapServer
    ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
                    玩家真正登录成功处理,用于替换  __DoPlayerLoginServer  中的功能登录逻辑
                    通知GameServer地图最终登录成功了
GameServer
    ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
                    玩家真正登录成功处理,用于替换  __DoPlayerLoginServer  中的功能登录逻辑
            curPlayer.EndLoadMap()  #通知客户端 04 03 玩家登录数据发送完毕OK#tagPlayerLoginLoadOK
            GameServerRefresh:GameSever_PlayerInitOK
            curPlayer.SetGameServerInitOK(True)
            ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) 玩家真正登录成功处理,用于替换  __DoPlayerLoginServer  中的功能登录逻辑
'''
##玩家登陆游戏逻辑处理
@@ -561,7 +539,7 @@
        PlayerControl.SetCrossMapID(curPlayer, curPlayer.GetMapID()) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为对应地图
        
    #通知运行成功
    curPlayer.BalanceServer_PlayerLoginInitOK()
    curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
    return
def __DoPlayerLoginServer(curPlayer, tick):
@@ -661,9 +639,6 @@
    
    #大师
    PlayerGreatMaster.MasterOnLogin(curPlayer)
    # 推送提醒
    PlayerGeTui.LoginNotifySetting(curPlayer)
    
    #֪ͨVIP
    PlayerVip.DoOnLogin(curPlayer, tick)
@@ -864,8 +839,6 @@
    PlayerEquipDecompose.PlayerLogin(curPlayer)
    #防沉迷
    PlayerGameWallow.DoLogic_CheckWallow(curPlayer, tick)
    # 通知脱机挂信息
    #PlayerTJG.NotifyTJGInfo(curPlayer)
    # 协助
    PlayerAssist.OnPlayerLogin(curPlayer)
    # 极品白拿
@@ -983,10 +956,7 @@
        
    curPlayer.SetState(0)   # 脱机挂恢复为正常上线
    curPlayer.SetCountryLastWeekHornor(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
    #tjgTime = PlayerTJG.GetTJGTime(curPlayer)
    #if tjgTime:
    #    PlayerControl.SendGameServerRefreshState(curPlayer, IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
    PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
    DataRecordPack.DR_PlayerLogin(curPlayer) # 放最后,记录等级、经验等信息
    return
@@ -1014,9 +984,12 @@
        PlayerGubao.OnPlayerLogin(curPlayer)
        PlayerShentong.OnPlayerLogin(curPlayer)
        PlayerZhanling.OnPlayerLogin(curPlayer)
        #PlayerTask.OnPlayerLogin(curPlayer)
        PlayerTree.OnPlayerLogin(curPlayer)
        PlayerMineArea.OnPlayerLogin(curPlayer)
        PlayerGuaji.OnPlayerLogin(curPlayer)
        PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
        PlayerTalk.OnPlayerLogin(curPlayer)
        
        # 上线查询一次充值订单
        curPlayer.SendDBQueryRecharge()
@@ -1296,7 +1269,6 @@
    #---等级限制---
    if GameWorld.IsCrossServer():
        return
    #PlayerTJG.TJGDeadOffline(curPlayer)
    
#===============================================================================
#    #---等级限制---
@@ -1469,17 +1441,13 @@
        
        #锁住玩家, 等到读取地图成功, 再解锁
        curPlayer.SetCanMove(False)
        #登陆发图形验证码
        PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
    except:
        curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
        import traceback
        GameWorld.RaiseException("玩家上线逻辑错误\r\n%s" % traceback.format_exc())
    try:
        curPlayer.SendToBServerServerInitOK()   #通知route登录成功 ,route向客户端发送0109包
        OnAllServerInitOK(curPlayer, tick)
        #后续登录流程等客户端回复 //01 07 地图读取OK#tagCInitMapOK 调用 LoadMapOK
        #到此处已经可以保存数据,即使客户端不回包断线
        #原 //01 07 地图读取OK#tagCInitMapOK 逻辑 直接调用
        __Func_LoadMapOK(index, tick)
        GameServerRefresh.GameSever_PlayerInitOK(index, tick)
    except:
        curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
        import traceback
@@ -1547,9 +1515,6 @@
        #更改镖车记录的部分主人信息
        PlayerTruck.ChangeTruckNoteInfo(curPlayer)
        
        #更新镖车进排行榜
        PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetPlayerID(), curPlayer.GetName(), curPlayer.GetOperateInfo(),
                                                   curPlayer.GetLV(), truckLv, curPlayer.GetMapID())
    #---初始化自己的召唤兽---
    #===========================================================================
@@ -1570,7 +1535,7 @@
    PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
    #通知GameServer自己现在的地图
    curPlayer.Sync_GameServer_MapID()
    #curPlayer.Sync_GameServer_MapID()
    
    #如果本地图是副本的话, 则通知GameServer玩家进入副本
    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam:
@@ -1685,8 +1650,9 @@
#@return 返回值无意义
#@remarks C++封包触发, 切换地图成功( 目标地图 )
def LoadMapOK(index, tick):
    GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
    GameServerRefresh.GameSever_PlayerInitOK(index, tick)
    #不需要等待客户端,以前有视野客户端未加载成功会被偷袭的问题,可以通过加x秒无敌BUFF解决,不应该增加流程
    # GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
    # GameServerRefresh.GameSever_PlayerInitOK(index, tick)
    return
#---------------------------------------------------------------------
@@ -3122,10 +3088,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 时间戳
@@ -3179,8 +3154,6 @@
    
    #下线召回宠物
    PetControl.ReCallFightPet(curPlayer)
    #PlayerTJG.CalcPlayerTJG(curPlayer, tick)
    
    #离线session
    EventReport.WriteEvent_session(curPlayer)