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