From f4ba71b4f1f541fbf705ec7ccee1e49d097cb57f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 08 一月 2019 15:10:26 +0800
Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(登录、退出跨服流程优化)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py                            |    2 
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py                    |  110 +++++++++---------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                       |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py           |  190 ++++++++++++++++++++++++++++---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py                      |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py   |   11 -
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py                                |   17 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |    8 +
 8 files changed, 254 insertions(+), 93 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
index a49ec94..414e290 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
@@ -708,61 +708,63 @@
                 return zoneIpyData.GetZoneID()
     return 0
 
-def OnPlayerLogin(curPlayer):
-    
-    # 本服登录处理
-    if not GameWorld.IsCrossServer():
-        # 本服没有分配赛区不处理
-        if not GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID):
-            return
-        __OnLoginNotifyPKOverInfo(curPlayer)
-        
-        # 同步所有赛区赛季信息
-        zoneSeasonInfo = ChPyNetSendPack.tagGCCrossRealmPKSeasonInfo()
-        zoneSeasonInfo.ZoneList = []
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for index in xrange(ipyDataMgr.GetCrossRealmPKZoneCount()):
-            zoneIpyData = ipyDataMgr.GetCrossRealmPKZoneByIndex(index)
-            zoneID = zoneIpyData.GetZoneID()
-            zoneInfo = ChPyNetSendPack.tagGCCrossRealmPKZone()
-            zoneInfo.ZoneID = zoneID
-            zoneInfo.ZoneName = zoneIpyData.GetZoneName().decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
-            zoneInfo.ZoneNameLen = len(zoneInfo.ZoneName)
-            zoneInfo.SeasonList = []
-            seasonList = IpyGameDataPY.GetIpyGameDataList("CrossRealmPKSeason", zoneID)
-            seasonList = [] if not seasonList else seasonList
-            for seasonIpyData in seasonList:
-                seasonInfo = ChPyNetSendPack.tagGCCrossRealmPKSeason()
-                seasonInfo.SeasonID = seasonIpyData.GetSeasonID()
-                seasonInfo.StartDate = seasonIpyData.GetStartDate()
-                seasonInfo.EndDate = seasonIpyData.GetEndDate()
-                seasonInfo.EndTime = seasonIpyData.GetEndTime()
-                zoneInfo.SeasonList.append(seasonInfo)
-            zoneInfo.SeasonCount = len(zoneInfo.SeasonList)
-            zoneSeasonInfo.ZoneList.append(zoneInfo)
-        zoneSeasonInfo.ZoneCount = len(zoneSeasonInfo.ZoneList)
-        NetPackCommon.SendFakePack(curPlayer, zoneSeasonInfo)
-        
-        # 同步本服赛季状态
-        gameWorld = GameWorld.GetGameWorld()
-        seasonStatePack = ChPyNetSendPack.tagGCCrossRealmPKSeasonState()
-        seasonStatePack.ZoneID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-        seasonStatePack.SeasonID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
-        seasonStatePack.SeasonState = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState)
-        seasonStatePack.MatchState = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.DailyActionID_CrossReamPK)
-        NetPackCommon.SendFakePack(curPlayer, seasonStatePack)
-        
+def OnPlayerLoginCrossServer(curPlayer):
     # 跨服登录处理
-    else:
-        mapID = curPlayer.GetMapID()
-        mapIDList = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatch", 4)
-        if mapID not in mapIDList:
-            return
-        
-        GameWorld.Log("玩家登录跨服PK地图, mapID=%s" % mapID, curPlayer.GetPlayerID())
-        if not __CheckCanLoginCrossServerPKMap(curPlayer):
-            CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
-            return
+    
+    mapID = curPlayer.GetMapID()
+    mapIDList = IpyGameDataPY.GetFuncCfg("CrossRealmPKMatch", 4)
+    if mapID not in mapIDList:
+        return
+    
+    GameWorld.Log("玩家登录跨服PK地图, mapID=%s" % mapID, curPlayer.GetPlayerID())
+    if not __CheckCanLoginCrossServerPKMap(curPlayer):
+        CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
+        return
+    
+    return
+
+def OnPlayerLogin(curPlayer):
+    # 本服登录处理
+    
+    # 本服没有分配赛区不处理
+    if not GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID):
+        return
+    __OnLoginNotifyPKOverInfo(curPlayer)
+    
+    # 同步所有赛区赛季信息
+    zoneSeasonInfo = ChPyNetSendPack.tagGCCrossRealmPKSeasonInfo()
+    zoneSeasonInfo.ZoneList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in xrange(ipyDataMgr.GetCrossRealmPKZoneCount()):
+        zoneIpyData = ipyDataMgr.GetCrossRealmPKZoneByIndex(index)
+        zoneID = zoneIpyData.GetZoneID()
+        zoneInfo = ChPyNetSendPack.tagGCCrossRealmPKZone()
+        zoneInfo.ZoneID = zoneID
+        zoneInfo.ZoneName = zoneIpyData.GetZoneName().decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
+        zoneInfo.ZoneNameLen = len(zoneInfo.ZoneName)
+        zoneInfo.SeasonList = []
+        seasonList = IpyGameDataPY.GetIpyGameDataList("CrossRealmPKSeason", zoneID)
+        seasonList = [] if not seasonList else seasonList
+        for seasonIpyData in seasonList:
+            seasonInfo = ChPyNetSendPack.tagGCCrossRealmPKSeason()
+            seasonInfo.SeasonID = seasonIpyData.GetSeasonID()
+            seasonInfo.StartDate = seasonIpyData.GetStartDate()
+            seasonInfo.EndDate = seasonIpyData.GetEndDate()
+            seasonInfo.EndTime = seasonIpyData.GetEndTime()
+            zoneInfo.SeasonList.append(seasonInfo)
+        zoneInfo.SeasonCount = len(zoneInfo.SeasonList)
+        zoneSeasonInfo.ZoneList.append(zoneInfo)
+    zoneSeasonInfo.ZoneCount = len(zoneSeasonInfo.ZoneList)
+    NetPackCommon.SendFakePack(curPlayer, zoneSeasonInfo)
+    
+    # 同步本服赛季状态
+    gameWorld = GameWorld.GetGameWorld()
+    seasonStatePack = ChPyNetSendPack.tagGCCrossRealmPKSeasonState()
+    seasonStatePack.ZoneID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
+    seasonStatePack.SeasonID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID)
+    seasonStatePack.SeasonState = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState)
+    seasonStatePack.MatchState = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.DailyActionID_CrossReamPK)
+    NetPackCommon.SendFakePack(curPlayer, seasonStatePack)
         
     return
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index 2481af4..3e50463 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -103,6 +103,20 @@
     InitPlayerOnLineReply(curPlayer, tick)
     # 统计登入人数
     GameDataRecord.PlayerLoginRecord(curPlayer, tick)
+    __DoPlayerLoginServer(curPlayer, tick)
+    
+    #通知地图服务器自己初始化成功
+    curPlayer.MapServer_InitOK()
+    return
+
+def __DoPlayerLoginServer(curPlayer, tick):
+    ''' 玩家登录需要处理的内容,本服及跨服服务器分开
+    '''
+    if GameWorld.IsCrossServer():
+        #跨服PK
+        CrossRealmPK.OnPlayerLoginCrossServer(curPlayer)
+        return
+    
     #玩家家族刷新
     #家族任务需要刷新 FamilyLV, 地图服务器需要知道FamilyLV来通知玩家家族任务次数 
     PlayerFamily.PlayerLoginRefreshFamily(curPlayer, tick)
@@ -165,9 +179,6 @@
         
         GMShell.OnPlayerLogin(curPlayer)
         GMT_CTG.OnPlayerLogin(curPlayer)
-        
-    #通知地图服务器自己初始化成功
-    curPlayer.MapServer_InitOK()
     return
 
 ## 增加高手玩家上线广播
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
index ba4f61b..954a651 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
@@ -175,6 +175,9 @@
 #  @remarks 函数详细说明.
 def PlayerOnDay(curPlayer):
     
+    if GameWorld.IsCrossServer():
+        return
+    
     #通知开服天数
     Sync_OpenServerDay(curPlayer)
     
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index 2831347..5c4c4b4 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -1856,8 +1856,6 @@
 #  @return None
 #  @remarks 函数详细说明.
 def PlayerLoginRefreshFamily(curPlayer, tick):
-    if GameWorld.IsCrossServer():
-        return
     SyncFakeFamilyInfo(curPlayer)
     familyID = curPlayer.GetFamilyID()
     curFamily = None
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index ba09622..4b080be 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -339,7 +339,7 @@
 Writer = hxp
 Releaser = hxp
 RegType = 0
-RegisterPackCount = 18
+RegisterPackCount = 19
 
 PacketCMD_1 = 0xA5
 PacketSubCMD_1 = 0x04
@@ -413,6 +413,10 @@
 PacketSubCMD_18=0x30
 PacketCallFunc_18=OnSetChatBubbleBox
 
+PacketCMD_19=0xA1
+PacketSubCMD_19=0x08
+PacketCallFunc_19=OnRefreshMainServerRole
+
 ;购买相关的
 [BuySomething]
 ScriptName = Event\EventSrc\Operate_PlayerBuyZhenQi.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 6cba5b1..00674aa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -179,7 +179,8 @@
     #先发送所有任务, 再刷新日期, 否则会有2个相同的任务在玩家身上
     #把玩家当前的所有任务发送给客户端
     #GameWorld.Log('EventShell.NotifyAllQuestDetail')
-    EventShell.NotifyAllQuestDetail(curPlayer, True)
+    if not GameWorld.IsCrossServer():
+        EventShell.NotifyAllQuestDetail(curPlayer, True)
     
     #刷新人物日期状态
     #GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
@@ -222,6 +223,128 @@
     
     return
 
+#// A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
+#
+#struct tagCMRefreshMainServerRole
+#{
+#    tagHead        Head;
+#};
+def OnRefreshMainServerRole(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    
+    Sync_DBPlayer(curPlayer)
+    
+    # 强刷一次属性,刷之前重置还没同步过所有属性
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_NotifyAllAttrState, 0)
+    playerControl = PlayerControl.PlayerControl(curPlayer)
+    playerControl.ReCalcAllState()
+    
+    if PlayerControl.GetCrossRealmState(curPlayer):
+        CrossRealmPlayer.DoExitCrossRealm(curPlayer)
+        
+    return
+
+def Sync_DBPlayer(curPlayer):
+    ## 同步DBPlayer信息,同0102封包
+    dbPlayer = ChPyNetSendPack.tagMCDBPlayer()
+    dbPlayer.AccID = curPlayer.GetAccID()
+    dbPlayer.PlayerID = curPlayer.GetPlayerID()
+    dbPlayer.PlayerName = curPlayer.GetPlayerName()
+    dbPlayer.AccState = curPlayer.GetAccState()
+    dbPlayer.GMLevel = curPlayer.GetGMLevel()
+    dbPlayer.Sex = curPlayer.GetSex()
+    dbPlayer.Job = curPlayer.GetJob()
+    dbPlayer.ReincarnationLv = curPlayer.GetReincarnationLv()
+    dbPlayer.LV = curPlayer.GetLV()
+    dbPlayer.LVEx = curPlayer.GetLVEx()
+    dbPlayer.LV2 = curPlayer.GetLV2()
+    dbPlayer.ExpPoint = curPlayer.GetExpPoint()
+    dbPlayer.TotalExp = curPlayer.GetTotalExp()
+    dbPlayer.Family = curPlayer.GetFamilyID()
+    dbPlayer.FamilyName = curPlayer.GetFamilyName()
+    dbPlayer.TeamHornor = curPlayer.GetTeamHornor()
+    dbPlayer.FamilyHornor = curPlayer.GetFamilyHornor()
+    dbPlayer.FamilyActiveValue = curPlayer.GetFamilyActiveValue()
+    dbPlayer.LastWeekFamilyActiveValue = curPlayer.GetLastWeekFamilyActiveValue()
+    dbPlayer.CountryHornor = curPlayer.GetCountryHornor()
+    dbPlayer.CountryLastWeekHornor = curPlayer.GetCountryLastWeekHornor()
+    dbPlayer.Mate = curPlayer.GetMate()
+    dbPlayer.Gold = curPlayer.GetGold()
+    dbPlayer.GoldPaper = curPlayer.GetGoldPaper()
+    dbPlayer.Silver = curPlayer.GetSilver()
+    dbPlayer.SilverPaper = curPlayer.GetSilverPaper()
+    dbPlayer.FightPoint = curPlayer.GetFightPoint()
+    dbPlayer.HappyPoint = curPlayer.GetHappyPoint()
+    dbPlayer.LineID = curPlayer.GetLineID()
+    dbPlayer.MapID = curPlayer.GetMapID() # 玩家身上的 GetMapID 返回的就是 GetDataMapID
+    dbPlayer.PosX = curPlayer.GetPosX()
+    dbPlayer.PosY = curPlayer.GetPosY()
+    dbPlayer.RebornMapID = curPlayer.GetRebornMapID()
+    dbPlayer.RebornPosX = curPlayer.GetRebornPosX()
+    dbPlayer.RebornPosY = curPlayer.GetRebornPosY()
+    dbPlayer.State = curPlayer.GetState()
+    dbPlayer.HP = curPlayer.GetHP()
+    dbPlayer.XP = curPlayer.GetXP()
+    dbPlayer.HPRestoreSetting = curPlayer.GetHPRestoreSetting()
+    dbPlayer.MPRestoreSetting = curPlayer.GetMPRestoreSetting()
+    dbPlayer.FreePoint = curPlayer.GetFreePoint()
+    dbPlayer.FreeSkillPoint = curPlayer.GetFreeSkillPoint()
+    dbPlayer.BaseSTR = curPlayer.GetBaseSTR()
+    dbPlayer.BasePNE = curPlayer.GetBasePNE()
+    dbPlayer.BasePHY = curPlayer.GetBasePHY()
+    dbPlayer.BaseCON = curPlayer.GetBaseCON()
+    dbPlayer.STR = curPlayer.GetSTR()
+    dbPlayer.PNE = curPlayer.GetPNE()
+    dbPlayer.PHY = curPlayer.GetPHY()
+    dbPlayer.CON = curPlayer.GetCON()
+    #dbPlayer.Setting = curPlayer.GetSetting() # 没有
+    dbPlayer.PKValue = curPlayer.GetPKValue()
+    #dbPlayer.ActiveValue = curPlayer.GetActiveValue() # 没有
+    dbPlayer.BackpackLV = curPlayer.GetBackpackLV()
+    dbPlayer.WarehouseLV = curPlayer.GetWarehouseLV()
+    dbPlayer.TeamID = curPlayer.GetTeamID()
+    dbPlayer.UseGoldType = curPlayer.GetUseGoldType()
+    dbPlayer.UseSilverType = curPlayer.GetUseSilverType()
+    dbPlayer.AttackMode = curPlayer.GetAttackMode()
+    dbPlayer.LastWeekOnlineTime = curPlayer.GetLastWeekOnlineTime()
+    dbPlayer.FBID = curPlayer.GetClientLineID()
+    dbPlayer.FamilyLV = curPlayer.GetFamilyLV()
+    dbPlayer.FriendFavor = curPlayer.GetFriendFavor()
+    dbPlayer.Energy = curPlayer.GetEnergy()
+    dbPlayer.EquipShowSwitch = curPlayer.GetEquipShowSwitch()
+    dbPlayer.LuckValue = curPlayer.GetLuckValue()
+    dbPlayer.ExAttr1 = curPlayer.GetExAttr1()
+    dbPlayer.ExAttr2 = curPlayer.GetExAttr2()
+    dbPlayer.ExAttr3 = curPlayer.GetExAttr3()
+    dbPlayer.ExAttr4 = curPlayer.GetExAttr4()
+    dbPlayer.ExAttr5 = curPlayer.GetExAttr5()
+    dbPlayer.Faction = curPlayer.GetFaction()
+    dbPlayer.InfamyValue = curPlayer.GetInfamyValue()
+    dbPlayer.OfficialRank = curPlayer.GetOfficialRank()
+    dbPlayer.ChangeCoinPointTotal = curPlayer.GetChangeCoinPointTotal()
+    dbPlayer.VIPLv = curPlayer.GetVIPLv()
+    dbPlayer.VIPLvForPhone = curPlayer.GetVIPLvForPhone()
+    dbPlayer.ExAttr6 = curPlayer.GetExAttr6()
+    dbPlayer.ExAttr7 = curPlayer.GetExAttr7()
+    dbPlayer.ExAttr8 = curPlayer.GetExAttr8()
+    dbPlayer.ExAttr9 = curPlayer.GetExAttr9()
+    dbPlayer.ExAttr10 = curPlayer.GetExAttr10()
+    dbPlayer.ModelMark = curPlayer.GetModelMark()
+    dbPlayer.ExAttr11 = curPlayer.GetExAttr11()
+    dbPlayer.ExAttr12 = curPlayer.GetExAttr12()
+    dbPlayer.ExAttr13 = curPlayer.GetExAttr13()
+    dbPlayer.ExAttr14 = curPlayer.GetExAttr14()
+    dbPlayer.OperateInfo = curPlayer.GetOperateInfo()
+    dbPlayer.Operate = curPlayer.GetOperate()
+    dbPlayer.ServerID = curPlayer.GetServerID()
+    dbPlayer.ExAttr15 = curPlayer.GetExAttr15()
+    dbPlayer.ExAttr16 = curPlayer.GetExAttr16()
+    dbPlayer.ExAttr17 = curPlayer.GetExAttr17()
+    dbPlayer.ExAttr18 = curPlayer.GetExAttr18()
+    dbPlayer.ExAttr19 = curPlayer.GetExAttr19()
+    dbPlayer.ExAttr20 = curPlayer.GetExAttr20()
+    NetPackCommon.SendFakePack(curPlayer, dbPlayer)
+    return
 
 #---------------------------------------------------------------------
 ##玩家登陆游戏逻辑处理
@@ -246,25 +369,54 @@
     if GameWorld.IsCrossServer():
         curPlayer.SetForbiddenSyncClientState(True)
     
-    SyncGuideState(curPlayer)
+    __DoPlayerLoginServer(curPlayer, tick)
     
+    # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
+    # !!!必要发送的数据要注意位置
+    if GameWorld.IsCrossServer():
+        curPlayer.SetForbiddenSyncClientState(False)
+        PlayerControl.SetCrossRealmState(curPlayer, 1) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为1
+        
+    return
+
+def __DoPlayerLoginServer(curPlayer, tick):
+    ''' 玩家登录需要处理的内容,本服及跨服服务器分开
+    '''
+    
+    #设置上线时间
+    curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
     #初始化玩家背包
     InitPlayerPack(curPlayer)
+    #通知玩家物品信息
+    __Sync_PackDetel(curPlayer)
+    
+    if GameWorld.IsCrossServer():
+        SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
+        # 重置所有技能CD
+        
+        DoPlayerLoginInMap(curPlayer, tick)
+        
+        DataRecordPack.DR_PlayerLogin(curPlayer)
+        EventReport.WriteEvent_login(curPlayer)
+        #---玩家上线, 宠物逻辑处理---
+        PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
+        
+        #通知运行成功
+        curPlayer.BalanceServer_PlayerLoginInitOK()
+        return
+    
+    SyncGuideState(curPlayer)
     
     #上线检查一次装备属性
     ItemControler.PlayerItemControler(curPlayer).CheckRolePackEquipAttr()
     #上线检查加点属性点
     PlayerControl.FixOldAddPoint(curPlayer)
-    #通知玩家物品信息
-    __Sync_PackDetel(curPlayer)
     
     #更新服务器组ID
     PlayerControl.UpdPlayerServerGroupID(curPlayer)
     
     #上线学习技能
     SkillCommon.PlayerLoginCheckLearnSkill(curPlayer)
-    
-    SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
     
     #刷新技能CD
     SkillCommon.PlayerLoginUpdateSkillCD(curPlayer, tick)
@@ -285,12 +437,10 @@
     
     #初始化现实时间物品
     InitRealityTimeItem(curPlayer, tick)
-
+    
     #---刷新了玩家属性, 登陆只刷新一次,其他地方不用刷
     DoPlayerLoginInMap(curPlayer, tick)
     
-    #设置上线时间
-    curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
     #PlayerControl.SyncOnLineTimeTotal(curPlayer)
     #PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, IPY_GameWorld.rptItem)
     PlayerGodWeapon.OnLogin(curPlayer)
@@ -575,13 +725,6 @@
     # 如果被禁言的,上线同步前端
     if curPlayer.GetGMForbidenTalk():
         curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, curPlayer.GetGMForbidenTalk(), False)
-        
-    # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
-    # !!!必要发送的数据要注意位置
-    if GameWorld.IsCrossServer():
-        curPlayer.SetForbiddenSyncClientState(False)
-        PlayerControl.SetCrossRealmState(curPlayer, 1) # 因为主服上传数据之前该值为1,所以登录跨服后在跨服服务器要设置为1
-        
     return
 
 
@@ -862,7 +1005,10 @@
     SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)
             
     #刷新玩家的视野
-    PlayerState.ChangePlayerSigh(curPlayer, tick)
+    if not GameWorld.IsCrossServer() and PlayerControl.GetCrossRealmState(curPlayer):
+        GameWorld.DebugLog("===登录本服地图时,处于跨服状态,不刷新视野!", curPlayer.GetPlayerID())
+    else:
+        PlayerState.ChangePlayerSigh(curPlayer, tick)
     
     if GameWorld.IsCrossServer():
         curPlayer.SetForbiddenSyncClientState(False)
@@ -1213,8 +1359,11 @@
     firstMission = QuestCommon.GetCommonMission(curPlayer)
     if not (firstMission and firstMission.GetProperty(QuestCommon.Def_NewGuyNoSight) == 1):
         #刷新自己的视野
-        curPlayer.RefreshView()
-        curPlayer.SetVisible(True)
+        if not GameWorld.IsCrossServer() and PlayerControl.GetCrossRealmState(curPlayer):
+            GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服状态,不设置可见!", curPlayer.GetPlayerID())
+        else:
+            curPlayer.RefreshView()
+            curPlayer.SetVisible(True)
     
     #如果玩家hp为0,设置玩家为死亡状态
     if curPlayer.GetHP() <= 0:
@@ -1367,9 +1516,6 @@
     
     PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
     ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount()   # 刷新装备珍品星级
-    
-    #最后处理下跨服
-    CrossRealmPlayer.OnLoadMapOK(curPlayer)
     
     #EndLoadMap需放在最后
     curPlayer.EndLoadMap()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
index e1cb159..11a0900 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -70,17 +70,6 @@
     GameWorld.Log("PlayerExitCrossServer...", curPlayer.GetPlayerID())
     return
 
-def OnLoadMapOK(curPlayer):
-    ## 主服登录地图成功
-    if GameWorld.IsCrossServer():
-        return
-    
-    # 跨服状态下断线重连
-    if PlayerControl.GetCrossRealmState(curPlayer):
-        GameWorld.Log("跨服状态下登录本服地图成功...", curPlayer.GetPlayerID())
-        DoEnterCrossRealm(curPlayer)
-    return
-
 def DoEnterCrossRealm(curPlayer):
     ## 玩家进入跨服处理,本服的逻辑处理
     curPlayer.SetVisible(False)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 2abd246..a6d40c5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -467,6 +467,9 @@
     
 def __DoPlayerOnDay(curPlayer, onEventType):
     
+    if GameWorld.IsCrossServer():
+        return
+    
     # 常规过天
     if onEventType == ShareDefine.Def_OnEventType:
         
@@ -640,6 +643,9 @@
 
 def __DoPlayerOnWeek(curPlayer, onEventType):
     
+    if GameWorld.IsCrossServer():
+        return
+    
     if onEventType == ShareDefine.Def_OnEventType:
         #记录上周工资相关流向
         lastWeekOnlineTime = curPlayer.GetLastWeekOnlineTime()
@@ -717,6 +723,8 @@
 
 def __DoPlayerOnMonth(curPlayer, onEventType):
     
+    if GameWorld.IsCrossServer():
+        return
     
     if onEventType == ShareDefine.Def_OnEventType:
         pass

--
Gitblit v1.8.0