hxp
5 天以前 388823edfe6308cba6f76ca6dc4f20022c5cb2be
ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py
@@ -17,7 +17,7 @@
# @change: "2014-12-23 15:30" xmnathan GameServer增加根据LineNO发送Py自定义包接口
# @change: "2015-10-22 23:00" hxp 增加Recv_MergerChildToCenter
#-------------------------------------------------------------------------------
"""Version = 2015-10-22 23:00"""
#"""Version = 2015-10-22 23:00"""
#-------------------------------------------------------------------------------
#---导入---
import IPY_GameServer
@@ -30,6 +30,9 @@
import traceback
import ChMapToGamePyPack
import CrossRealmMsg
import PlayerControl
import ChPlayer
import ShareDefine
#-------------------------------------------------------------------------------
#---全局变量---
@@ -208,9 +211,7 @@
        curPackHeadRegDict["CallFunc"](index, curPackData, tick)
        
    except Exception:
        Log("python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
        GameWorld.RaiseException("python自定义封包解析失败\r\n%s" % traceback.format_exc())
        return 
    
    
@@ -224,7 +225,52 @@
    innerPackData = clientPack.GetBuffer()
    curPlayer.Sync_GeneralPack(len(innerPackData), innerPackData)
    
def SendPackByPlayer(clientPack, curPlayer=None):
    ## 发送封包,当curPlayer为None时则发送全服玩家
    if not curPlayer:
        # 全服广播在线玩家
        playerManager = GameWorld.GetPlayerManager()
        for i in xrange(playerManager.GetActivePlayerCount()):
            curPlayer = playerManager.GetActivePlayerAt(i)
            if curPlayer == None:
                continue
            if PlayerControl.GetIsTJG(curPlayer):
                continue
            SendFakePack(curPlayer, clientPack)
    else:
        if PlayerControl.GetIsTJG(curPlayer):
            return
        SendFakePack(curPlayer, clientPack)
    return
def SendFakePackByCross(onlinePlayerIDDict, clientPack):
    '''由跨服服务器直接给子服在线玩家发送封包,适用于接受的玩家封包数据一致的
    @param onlinePlayerIDDict: 在线玩家GroupID字典 {playerID:groupID, ...}
        功能自行通过 onlineMgr = ChPlayer.GetOnlinePlayerMgr() 过滤
     onlineMgr.GetOLPlayerServerGroupID(playerID) 获取ServerGroupID
    '''
    if not onlinePlayerIDDict:
        return
    innerPackData = clientPack.GetBuffer()
    dataMsg = {"playerIDList":onlinePlayerIDDict.keys(), "innerPackData":innerPackData}
    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_SendFakePack, dataMsg, onlinePlayerIDDict.values())
    return
def CrossServerMsg_SendFakePack(msgData):
    ## 子服收到由跨服直接发送给玩家的封包
    playerIDList = msgData["playerIDList"]
    innerPackData = msgData["innerPackData"]
    playerManager = GameWorld.GetPlayerManager()
    for playerID in playerIDList:
        curPlayer = playerManager.FindPlayerByID(playerID)
        if curPlayer == None:
            continue
        if PlayerControl.GetIsTJG(curPlayer):
            continue
        curPlayer.Sync_GeneralPack(len(innerPackData), innerPackData)
    return
#-------------------------------------------------------------------------------
#---Py封包注册信息
PyPackTable = ReadPyPackTable("PyNetPack")
@@ -281,9 +327,7 @@
        curPackHeadRegDict["CallFunc"](routeIndex, mapID, curPackData, tick)
        #Log("RecvMapPyPack: CallFunc curPackHead = %s"%curPackHead)
    except Exception:
        Log("RecvMapPyPack python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("RecGamePyPack python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
        GameWorld.RaiseException("RecvMapPyPack python自定义封包解析失败\r\n%s" % traceback.format_exc())
        return 
    
#-------------------------------------------------------------------------------