From 95fb3b3d2ebabcc183b50722f7e7c0d65c115952 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 24 二月 2021 14:13:56 +0800
Subject: [PATCH] 4949 【主干】【BT2】节日祝福-在boss之家击杀个人boss完成了击杀boss之家boss游历值

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py |   80 +++++++++++++++++++++++++++-------------
 1 files changed, 54 insertions(+), 26 deletions(-)

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 0b6b448..ca42a7b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -15,10 +15,13 @@
 #"""Version = 2018-12-21 18:00"""
 #-------------------------------------------------------------------------------
 import GameWorld
+import PyGameData
 import ReadChConfig
 import PlayerControl
 import IpyGameDataPY
 import IPY_GameWorld
+import ChPyNetSendPack
+import NetPackCommon
 import ShareDefine
 import ChConfig
 import FBLogic
@@ -36,26 +39,28 @@
     
     return opName.decode('gbk').encode(GameWorld.GetCharacterEncoding()) + playerName
 
-def GetServerCrossZoneIpyData(mapID, serverGroupID=0):
-    ## 获取本服对应跨服玩法分区地图信息
-    if mapID not in ChConfig.Def_CrossZoneTableName:
+def GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID):
+    ## 获取跨服分区
+    zoneTypeName = ChConfig.Def_CrossZoneTypeName.get(mapID, "CrossZoneComm")
+    crossZoneName = GameWorld.GetCrossZoneName()
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition(zoneTypeName, {"CrossZoneName":crossZoneName}, True)
+    if not ipyDataList:
         return
-    if not serverGroupID:
-        serverGroupID = GameWorld.GetServerGroupID()
-        
-    tableName = ChConfig.Def_CrossZoneTableName[mapID]
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
-        return
-    
-    for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
-        ipyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
+    for ipyData in ipyDataList:
         serverGroupIDList = ipyData.GetServerGroupIDList()
         for serverGroupIDInfo in serverGroupIDList:
             if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
                 or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID):
                 return ipyData
+    GameWorld.ErrLog("没有找到跨服玩法对应分区! mapID=%s, serverGroupID=%s, zoneTypeName=%s" % (mapID, serverGroupID, zoneTypeName))
     return
+
+def GetServerCrossZoneMapIpyData(zoneID, mapID):
+    ## 获取本服对应跨服玩法分区地图信息 - 仅适用于固定地图及虚拟分线的跨服玩法
+    if mapID not in ChConfig.Def_CrossZoneMapTableName:
+        return
+    tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
+    return IpyGameDataPY.GetIpyGameDataByCondition(tableName, {"ZoneID":zoneID})
 
 def IsCrossServerOpen():
     ## 跨服服务器是否开放中
@@ -145,24 +150,47 @@
 
 def DoEnterCrossRealm(curPlayer):
     ## 玩家进入跨服处理,本服的逻辑处理
-    curPlayer.SetVisible(False)
-    curPlayer.SetSight(0)
-    curPet = curPlayer.GetPetMgr().GetFightPet()
-    if curPet:
-        curPet.SetVisible(False)
+    PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
     return
 
 def DoExitCrossRealm(curPlayer):
     ## 玩家退出跨服处理,本服的逻辑处理
     GameWorld.Log("DoExitCrossRealm...", curPlayer.GetPlayerID())
-    curPlayer.SetVisible(True)
-    curPlayer.SetSight(1)
-    curPlayer.RefreshView()
-    curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
-    curPlayer.RefreshView()
-    curPet = curPlayer.GetPetMgr().GetFightPet()
-    if curPet:
-        curPet.SetVisible(True)
+    PlayerControl.SetPlayerSightLevel(curPlayer, 0)
     if PlayerControl.GetCrossMapID(curPlayer):
         PlayerControl.SetCrossMapID(curPlayer, 0)
     return
+
+def GetPlayerCrossActInfo(curPlayer, actName):
+    ## 获取跨服玩家对应的跨服活动信息
+    actInfoDict = PyGameData.g_crossActInfoDict.get(actName, {})
+    if not actInfoDict:
+        return {}
+    playerServerID = GameWorld.GetPlayerServerID(curPlayer)
+    for actInfo in actInfoDict.values():
+        if ShareDefine.ActKey_ServerIDRangeList not in actInfo:
+            continue
+        serverIDRangeList = actInfo[ShareDefine.ActKey_ServerIDRangeList]
+        if not serverIDRangeList:
+            # 全服开启
+            return actInfo
+        for serverIDA, serverIDB in serverIDRangeList:
+            if serverIDA <= playerServerID <= serverIDB:
+                return actInfo
+    return {}
+
+def NotifyCrossActEnd(curPlayer, actName):
+    '''通知跨服运营活动结束
+                    防止跨服服务器与子服时间不一致导致可能出现活动实际已关闭
+                    但是前端根据本服服务器时间判断还未关闭,可能引起玩家误以为活动未关闭而引发的一系列问题
+                    前端跨服活动显隐规则:
+                    显示:根据通知的活动包 且 时间>=活动开始日期 才显示
+                    关闭:收到后端通知的活动结束包 或 时间>=活动结束日期 则直接关闭活动界面
+    '''
+    
+    clientPack = ChPyNetSendPack.tagGCCrossActEnd()
+    clientPack.ActName = actName
+    clientPack.ActNameLen = len(clientPack.ActName)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
+

--
Gitblit v1.8.0