From 1f8acf4823f6d7c2e19f0db8bd11d3b07d168a5c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 10 七月 2019 16:21:52 +0800
Subject: [PATCH] 7954 【主干】【后端】跨服PVP匹配机器人规则优化

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py                   |    3 +
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py                    |   52 ++++++++++++++++++++++----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py               |    1 
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                    |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py |   46 ++++++++++++----------
 5 files changed, 74 insertions(+), 29 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
index c6afb53..ad2bbf7 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -68,6 +68,9 @@
         if msgType == ShareDefine.ClientServerMsg_PKMatch:
             CrossRealmPK.ClientServerMsg_PKMatch(serverGroupID, msgData, tick)
             
+        elif msgType == ShareDefine.ClientServerMsg_PKScore:
+            CrossRealmPK.ClientServerMsg_PKScore(serverGroupID, msgData, tick)
+            
         elif msgType == ShareDefine.ClientServerMsg_PKCancel:
             CrossRealmPK.ClientServerMsg_PKCancel(msgData, tick)
             
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
index b15218c..39ea210 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
@@ -241,14 +241,16 @@
         return
     maxCount = min(2000, maxCount)
     upBillboardList = []
-    if winner.danLV >= danLVLimit:
-        upBillboardList.append(winner)
-    else:
-        GameWorld.DebugLog("    段位不足,无法上榜! winnerDanLV=%s < danLVLimit=%s" % (winner.danLV, danLVLimit), winner.playerID)
-    if loser.danLV >= danLVLimit:
-        upBillboardList.append(loser)
-    else:
-        GameWorld.DebugLog("    段位不足,无法上榜! loserDanLV=%s < danLVLimit=%s" % (loser.danLV, danLVLimit), loser.playerID)
+    if winner:
+        if winner.danLV >= danLVLimit:
+            upBillboardList.append(winner)
+        else:
+            GameWorld.DebugLog("    段位不足,无法上榜! winnerDanLV=%s < danLVLimit=%s" % (winner.danLV, danLVLimit), winner.playerID)
+    if loser:
+        if loser.danLV >= danLVLimit:
+            upBillboardList.append(loser)
+        else:
+            GameWorld.DebugLog("    段位不足,无法上榜! loserDanLV=%s < danLVLimit=%s" % (loser.danLV, danLVLimit), loser.playerID)
     if not upBillboardList:
         return
     
@@ -315,6 +317,40 @@
             
     return
 
+def ClientServerMsg_PKScore(serverGroupID, playerInfoDict, tick):
+    ## 收到子服同步的PK积分信息,子服可能直接更新积分,比如与机器人PK等
+    
+    if not GameWorld.IsCrossServer():
+        GameWorld.ErrLog("非跨服服务器不处理跨服PK匹配请求!")
+        return
+    
+    seasonID = playerInfoDict["seasonID"] # 赛季ID
+    pkZoneID = playerInfoDict["pkZoneID"] # 所属赛区
+    accID = playerInfoDict["accID"] # 角色账号
+    playerID = playerInfoDict["playerID"] # 角色ID
+    playerName = playerInfoDict["playerName"] # 玩家名
+    job = playerInfoDict["playerJob"] # 职业
+    fightPower = playerInfoDict["fightPower"] # 战斗力
+    realmLV = playerInfoDict["realmLV"] # 境界
+    pkScore = playerInfoDict["pkScore"] # 当前积分
+    danLV = playerInfoDict["danLV"] # 当前段位
+    
+    pkPlayer = CrossPKPlayer()
+    pkPlayer.accID = accID
+    pkPlayer.playerID = playerID
+    pkPlayer.playerName = playerName
+    pkPlayer.playerJob = job
+    pkPlayer.pkScore = pkScore
+    pkPlayer.danLV = danLV
+    pkPlayer.fightPower = fightPower
+    pkPlayer.realmLV = realmLV
+    pkPlayer.serverGroupID = serverGroupID
+    pkPlayer.pkZoneID = pkZoneID
+    pkPlayer.seasonID = seasonID
+    
+    UpdateCrossPKBillboard(pkZoneID, seasonID, pkPlayer, None)
+    return
+
 #// C0 01 查看跨服竞技场赛季排行榜 #tagCGViewCrossPKBillboard
 #
 #struct    tagCGViewCrossPKBillboard
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index b1c286d..bb724e6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1207,6 +1207,7 @@
 ClientServerMsg_GMCMD = "GMCMD"                         # GM命令
 ClientServerMsg_ViewPlayerCache = "ViewPlayerCache"     # 查看跨服玩家信息
 ClientServerMsg_PKMatch = "PKMatch"                     # 跨服PK匹配
+ClientServerMsg_PKScore = "PKScore"                     # 跨服PK同步积分到跨服服务器(某些情况会在本服加积分,如与机器人PK)
 ClientServerMsg_PKCancel = "PKCancel"                   # 跨服PK取消匹配
 ClientServerMsg_PKPrepareOK = "PKPrepareOK"             # 跨服PK准备完毕
 ClientServerMsg_PKBillboard = "PKBillboard"             # 跨服PK排行榜
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
index 16cdb27..85b32c2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
@@ -412,6 +412,16 @@
     danLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_DanLV)
     cWinCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_CWinCount)
     
+    if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 1:
+        GameWorld.Log("OnCrossRealmPKRobotOver 跨服赛季未开启,不可进行机器人结算!", playerID)
+        overPack = ChPyNetSendPack.tagGCCrossRealmPKOverInfo()
+        overPack.AddScore = 0
+        overPack.Score = pkScore
+        overPack.DanLV = danLV
+        overPack.CWinCnt = cWinCount
+        NetPackCommon.SendFakePack(curPlayer, overPack)
+        return
+    
     ondayScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_OnDayScore)
     dayScore = max(0, pkScore - ondayScore) # 今日已获得积分,正积分
     
@@ -452,29 +462,23 @@
     overPack.CWinCnt = cWinCount
     NetPackCommon.SendFakePack(curPlayer, overPack)
     
-    # 通知跨服更新榜单积分数据
+    # 如果能上榜的,则通知跨服更新榜单积分数据
     billboardCfg = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKCfg", 1, [])
     if billboardCfg and len(billboardCfg) > 1 or danLV >= billboardCfg[1]:
-        pass
-#        dataMsg = {
-#                   "seasonID":seasonID,
-#                   "pkZoneID":zoneID,
-#                   "accID":curPlayer.GetAccID(),
-#                   "playerID":playerID,
-#                   "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
-#                   "playerJob":curPlayer.GetJob(),
-#                   "playerLV":curPlayer.GetLV(),
-#                   "maxHP":curPlayer.GetMaxHP(),
-#                   "maxProDef":PlayerControl.GetMaxProDef(curPlayer),
-#                   "fightPower":curPlayer.GetFightPower(),
-#                   "realmLV":curPlayer.GetOfficialRank(),
-#                   "pkScore":pkScore,
-#                   "danLV":danLV,
-#                   "cWinCount":cWinCount,
-#                   "ondayScore":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_OnDayScore), # 过天时的积分
-#                   }
-#        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKMatch, dataMsg)
-#        GameWorld.Log("    更新积分到跨服服务器 dataMsg=%s" % str(dataMsg), playerID)
+        dataMsg = {
+                   "seasonID":seasonID,
+                   "pkZoneID":zoneID,
+                   "accID":curPlayer.GetAccID(),
+                   "playerID":playerID,
+                   "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
+                   "playerJob":curPlayer.GetJob(),
+                   "fightPower":curPlayer.GetFightPower(),
+                   "realmLV":curPlayer.GetOfficialRank(),
+                   "pkScore":pkScore,
+                   "danLV":danLV,
+                   }
+        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKScore, dataMsg)
+        GameWorld.Log("    更新积分到跨服服务器 dataMsg=%s" % str(dataMsg), playerID)
         
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index b1c286d..bb724e6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1207,6 +1207,7 @@
 ClientServerMsg_GMCMD = "GMCMD"                         # GM命令
 ClientServerMsg_ViewPlayerCache = "ViewPlayerCache"     # 查看跨服玩家信息
 ClientServerMsg_PKMatch = "PKMatch"                     # 跨服PK匹配
+ClientServerMsg_PKScore = "PKScore"                     # 跨服PK同步积分到跨服服务器(某些情况会在本服加积分,如与机器人PK)
 ClientServerMsg_PKCancel = "PKCancel"                   # 跨服PK取消匹配
 ClientServerMsg_PKPrepareOK = "PKPrepareOK"             # 跨服PK准备完毕
 ClientServerMsg_PKBillboard = "PKBillboard"             # 跨服PK排行榜

--
Gitblit v1.8.0