hxp
2019-01-10 94c9b0759bfa49e66bfce3f790c40f15d362ba1a
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -17,6 +17,7 @@
import GameWorld
import ReadChConfig
import PlayerControl
import IpyGameDataPY
import IPY_GameWorld
import ShareDefine
import ChConfig
@@ -26,13 +27,39 @@
def GetCrossPlayerName(curPlayer):
    # 通过游戏账号中的平台标志获取名称,目前为spid
    playerName = curPlayer.GetPlayerName()
    nameFormat = ReadChConfig.GetPyMongoConfig("Merge", "NameFormat", True)
    if not nameFormat:
    opName = ReadChConfig.GetPyMongoConfig("Merge", "OpName_%s_%s" % (GameWorld.GetPlayerPlatform(curPlayer),
                                           GameWorld.GetPlayerServerSID(curPlayer)))
    if not opName:
        return playerName
    
    opName = ReadChConfig.GetPyMongoConfig("Merge", "OpName_%s" % GameWorld.GetPlayerPlatform(curPlayer))
    return opName.decode('gbk').encode(GameWorld.GetCharacterEncoding()) + playerName
def GetServerCrossZoneIpyData(mapID, serverGroupID=0):
    ## 获取本服对应跨服玩法分区地图信息
    if mapID not in ChConfig.Def_CrossZoneTableName:
        return
    if not serverGroupID:
        serverGroupID = GameWorld.GetServerGroupID()
    tableName = ChConfig.Def_CrossZoneTableName[mapID]
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
        return
    
    return (nameFormat%{"opname":opName, "sid":GameWorld.GetPlayerServerID(curPlayer)}).decode('gbk').encode(GameWorld.GetCharacterEncoding()) + playerName
    for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
        ipyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
        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
    return
def IsCrossServerOpen():
    ## 跨服服务器是否开放中
    return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
#// C1 04 主动退出跨服 #tagCMExitCrossRealm
#
@@ -56,7 +83,7 @@
    
    # 通知子服玩家退出跨服服务器
    playerID = curPlayer.GetPlayerID()
    serverGroupID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ServerGroupID)
    serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
    GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_ExitCrossServer, playerID, [serverGroupID])
    
    # 设置非跨服状态,踢下线
@@ -68,13 +95,23 @@
def DoEnterCrossRealm(curPlayer):
    ## 玩家进入跨服处理,本服的逻辑处理
    curPlayer.SetVisible(False)
    curPlayer.SetSight(0)
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(False)
    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)
    if PlayerControl.GetCrossRealmState(curPlayer):
        PlayerControl.SetCrossRealmState(curPlayer, 0)
    return