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/GameWorldLogic/CrossRealmPK.py | 110 ++++++++++++++++++++++++++++--------------------------- 1 files changed, 56 insertions(+), 54 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 -- Gitblit v1.8.0