| | |
| | |
|
| | | # 跨服登录处理
|
| | | 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):
|
| | |
| | | }
|
| | | CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKCancel, dataMsg)
|
| | | PlayerControl.SetVsRoomId(curPlayer, 0)
|
| | | SetIsCrossPKMatching(curPlayer, 0)
|
| | | GameWorld.Log("发送取消跨服PK匹配到跨服服务器:dataMsg=%s" % str(dataMsg), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | |
| | | 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
|
| | |
| | | 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))
|
| | |
| | | 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:
|
| | |
| | | break
|
| | |
|
| | | PlayerControl.SetCrossRealmState(player, 1)
|
| | | SetIsCrossPKMatching(player, 0)
|
| | |
|
| | | # 通知匹配成功,可进入跨服
|
| | | matchOKPack = ChPyNetSendPack.tagGCCrossRealmPKMatchOK()
|
| | |
| | | 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):
|
| | |
| | | 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"
|
| | |
| | | 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)
|