hch
2018-12-27 affca29e7500fc8e2e65cf15d19496a370f6329e
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
@@ -733,10 +733,38 @@
        
    # 跨服登录处理
    else:
        # 比如验证房间ID是否合法
        pass
        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 __CheckCanLoginCrossServerPKMap(curPlayer):
    # 检查玩家可否登录跨服PK房间
    playerID = curPlayer.GetPlayerID()
    vsRoomID = curPlayer.GetVsRoomId()
    if not vsRoomID:
        GameWorld.ErrLog("玩家没有对战房间ID,不可进入对战地图! 强制踢出跨服服务器!", playerID)
        return False
    if vsRoomID not in PyGameData.g_crossPKRoomDict:
        GameWorld.ErrLog("玩家对战房间ID已经不存在,不可进入对战地图! 强制踢出跨服服务器!vsRoomID=%s" % vsRoomID, playerID)
        return False
    vsRoom = PyGameData.g_crossPKRoomDict[vsRoomID]
    if playerID not in vsRoom.roomPlayerIDList:
        GameWorld.ErrLog("玩家对战房间ID不存在该玩家ID,不可进入对战地图! 强制踢出跨服服务器!vsRoomID=%s,roomPlayerIDList=%s"
                         % (vsRoomID, vsRoom.roomPlayerIDList), playerID)
        return False
    return True
## 玩家离线处理
def OnLeaveServer(curPlayer):    
@@ -779,6 +807,7 @@
               }
    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKCancel, dataMsg)
    PlayerControl.SetVsRoomId(curPlayer, 0)
    SetIsCrossPKMatching(curPlayer, 0)
    GameWorld.Log("发送取消跨服PK匹配到跨服服务器:dataMsg=%s" % str(dataMsg), curPlayer.GetPlayerID())
    return
@@ -809,14 +838,14 @@
    ondayScore = playerInfoDict["ondayScore"] # 过天时的积分
    
    zoneMatchPlayerList = PyGameData.g_crossPKZoneMatchPlayerDict.get(pkZoneID, [])
#    if playerID in zoneMatchPlayerList:
#        GameWorld.Log("玩家正在匹配中,无法重复发起匹配!playerID=%s,accID=%s" % (playerID, accID))
#        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PKMatchReqRet, [playerID, 1], [serverGroupID])
#        return
#    if playerID in PyGameData.g_crossPKPlayerDict:
#        GameWorld.Log("玩家正在战斗中,无法重复发起匹配!playerID=%s,accID=%s" % (playerID, accID))
#        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PKMatchReqRet, [playerID, -2], [serverGroupID])
#        return
    if playerID in zoneMatchPlayerList:
        GameWorld.Log("玩家正在匹配中,无法重复发起匹配!playerID=%s,accID=%s" % (playerID, accID))
        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PKMatchReqRet, [playerID, 1], [serverGroupID])
        return
    if playerID in PyGameData.g_crossPKPlayerDict:
        GameWorld.Log("玩家正在战斗中,无法重复发起匹配!playerID=%s,accID=%s" % (playerID, accID))
        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_PKMatchReqRet, [playerID, -2], [serverGroupID])
        return
    
    pkPlayer = CrossPKPlayer()
    pkPlayer.accID = accID
@@ -1266,7 +1295,7 @@
    GameWorld.Log("MapServer_CrossPKRoomOpen => roomID=%s" % roomID)
    return
def MapServer_MergePKOver(infoList):
def MapServer_CrossPKOver(infoList):
    ## 收到MapServer副本跨服PK结果同步
    
    GameWorld.Log("收到MapServer_跨服PK战斗结果: %s" % str(infoList))
@@ -1476,14 +1505,23 @@
        return
    
    if result == 1:
        SetIsCrossPKMatching(curPlayer, 1)
        NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagGCCrossRealmPKStartMatch())
        
    return
## 跨服匹配状态
def SetIsCrossPKMatching(curPlayer, isMatching):
    curPlayer.SetDict(ChConfig.Def_PlayerKey_IsCrossPKMatching, isMatching)
    sysMsg = str(isMatching)
    curPlayer.MapServer_QueryPlayerResult(0, 0, "CrossPKMatching", sysMsg, len(sysMsg))
    return
def GetIsCrossPKMatching(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IsCrossPKMatching)
def CrossServerMsg_PKMatchResult(vsRoomDict):
    ## 跨服PK匹配结果
    curServerGroupID = GameWorld.GetServerGroupID()
    actionType = ShareDefine.Def_MergeAction_MergePK
    actionType = ShareDefine.Def_CrossAction_PK
    mapPosList = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKMatch", 5)
    GameWorld.Log("=== 收到PK匹配结果处理  === curServerGroupID=%s" % curServerGroupID)
    if not mapPosList:
@@ -1549,6 +1587,7 @@
                    break
                
            PlayerControl.SetCrossRealmState(player, 1)
            SetIsCrossPKMatching(player, 0)
            
            # 通知匹配成功,可进入跨服
            matchOKPack = ChPyNetSendPack.tagGCCrossRealmPKMatchOK()
@@ -1560,8 +1599,6 @@
            NetPackCommon.SendFakePack(player, matchOKPack)
            GameWorld.Log("    通知玩家进入跨服PK对战房间! roomID=%s,playerID=%s,matchPlayerID=%s" % (roomID, playerID, matchPlayer.PlayerID))
            
            # 到这里默认认为一定会有结果的,所以本服直接增加次数
            #player.MapServer_QueryPlayerResult(0, 0, 'MergePKAddCnt', "", 0)
    return
def CrossServerMsg_PKTimeoutRoomList(timeoutRoomDict):
@@ -1615,6 +1652,7 @@
            PyGameData.g_crossPKUnNotifyOverInfo[playerID] = sendMapOverInfo
            continue
        
        PlayerControl.SetVsRoomId(player, 0)
        sysMsg = str(sendMapOverInfo)
        player.MapServer_QueryPlayerResult(0, 0, "CrossPKOverInfo", sysMsg, len(sysMsg))
        GameWorld.Log("通知地图跨服PK结算: roomID=%s,zoneID=%s,seasonID=%s,timeStr=%s,overType=%s,winnerID=%s,roundWinnerIDList=%s, pkScore=%s,danLV=%s,cWinCount=%s,addScore=%s,tagPlayerID=%s,notifyState=%s,mapID=%s" 
@@ -1627,6 +1665,7 @@
        return
    overInfo = PyGameData.g_crossPKUnNotifyOverInfo.pop(playerID)
    PlayerControl.SetCrossRealmState(curPlayer, 0)
    PlayerControl.SetVsRoomId(curPlayer, 0)
    sysMsg = str(overInfo)
    curPlayer.MapServer_QueryPlayerResult(0, 0, "CrossPKOverInfo", sysMsg, len(sysMsg))
    GameWorld.Log("玩家上线通知地图未结算的跨服PK结算: mapID=%s,overInfo=%s" % (curPlayer.GetMapID(), overInfo), playerID)