From 65f05c143e3d8221200ef65eb84c850c8c183191 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 11 八月 2021 21:07:29 +0800
Subject: [PATCH] 8585 【BT3】【主干】竞技场(匹配优化前X后X开出配置;增加概率匹配机器人)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
index 9a35b2a..a8b5747 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldArena.py
@@ -568,13 +568,13 @@
         playerOrder = maxOrder + 1
         
     GameWorld.DebugLog("    maxOrder=%s,playerOrder=%s" % (maxOrder, playerOrder), playerID)
-    
+    highRandOrder, lowRandOrder = IpyGameDataPY.GetFuncEvalCfg("ArenaMatch", 5) # 前X名匹配比自己高名次时直接随机
     matchOrderList = [] # 匹配到的名次
     # 非第一名的匹配比自身名次高的
     if playerOrder > 1 and higherOrderPerList:
         higherOrderCount = playerOrder - 1 # 比玩家高的名次的个数
         # 小于10个的直接纯随机
-        if 0 < higherOrderCount < 10:
+        if 0 < higherOrderCount < highRandOrder:
             randOrderList = range(1, playerOrder)
             random.shuffle(randOrderList)
             matchOrderList.extend(randOrderList[:len(higherOrderPerList)])
@@ -582,7 +582,7 @@
                                % (higherOrderCount, randOrderList, matchOrderList), playerID)
             
         # 按比例划分
-        elif higherOrderCount >= 10:
+        elif higherOrderCount >= highRandOrder:
             randMaxOrder = playerOrder - 1
             for per in higherOrderPerList:
                 per = min(per, 100) # 最多到100
@@ -605,7 +605,7 @@
     if 1 <= playerOrder < maxOrder and lowerOrderPerList:
         lowerOrderCount = maxOrder - playerOrder # 比玩家低的名次的个数
         # 小于10个的直接纯随机
-        if 0 < lowerOrderCount < 10:
+        if 0 < lowerOrderCount < lowRandOrder:
             randOrderList = range(playerOrder + 1, maxOrder + 1)
             random.shuffle(randOrderList)
             matchOrderList.extend(randOrderList[:len(lowerOrderPerList)])
@@ -613,7 +613,7 @@
                                % (lowerOrderCount, randOrderList, matchOrderList), playerID)
             
         # 按比例划分
-        elif lowerOrderCount >= 10:
+        elif lowerOrderCount >= lowRandOrder:
             randMinOrder = playerOrder + 1
             for per in lowerOrderPerList:
                 per = min(per, 100) # 最多到100
@@ -657,24 +657,30 @@
             if gmMatchOrder in matchOrderList:
                 continue
             gmMatchOrderList.append(gmMatchOrder)
-            GameWorld.DebugAnswer(curPlayer, "指定匹配ID(%s),order(%s)" % (gmMatchID, gmMatchOrder))
+            GameWorld.DebugAnswer(curPlayer, "指定匹配ID(%s),order(%s)" % (gmMatchID, gmMatchOrder), playerID)
             
         GameWorld.DebugLog("matchOrderList=%s,needMatchCount=%s" % (str(matchOrderList), needMatchCount))
         if matchOrderList:
             matchOrderList = matchOrderList[:needMatchCount - len(gmMatchOrderList)]
         matchOrderList += gmMatchOrderList
         matchOrderList.sort()
+            
+    matchRobotRate = IpyGameDataPY.GetFuncCfg("ArenaMatch", 4) # 每次可直接匹配一个机器人概率
+    if matchRobotRate and matchOrderList and len(matchOrderList) >= needMatchCount and GameWorld.CanHappen(matchRobotRate, 100):
+        popOrder = matchOrderList.pop(-1) # 去掉最后一个
+        GameWorld.DebugLog("    概率匹配到一个机器人,去掉最后一个! matchRobotRate=%s,popOrder=%s" % (matchRobotRate, popOrder), playerID)
+        
     GameWorld.DebugLog("    最终匹配到的名次列表: matchOrderList=%s" % matchOrderList, playerID)
     
     # 随机机器人备用信息
-    openJobList = IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1)
+    openJobList = IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1)    
     
-    randRobotLVPerRange = IpyGameDataPY.GetFuncEvalCfg("ArenaMatch", 3)
+    randRobotLVScorePerInfo = IpyGameDataPY.GetFuncEvalCfg("ArenaMatch", 3)
+    randRobotLVPerRange, randRobotScorePerRange = randRobotLVScorePerInfo
     minLV, maxLV = IpyGameDataPY.GetFuncEvalCfg("ArenaRobot", 2) # 机器人最小、最大等级
     randMinLV = min(minLV, int(playerLV * randRobotLVPerRange[0] / 100.0))
     randMaxLV = min(maxLV, int(playerLV * randRobotLVPerRange[1] / 100.0))
     
-    randRobotScorePerRange = IpyGameDataPY.GetFuncEvalCfg("ArenaMatch", 4)
     randMinScore = int(playerScore * randRobotScorePerRange[0] / 100.0)
     randMaxScore = int(playerScore * randRobotScorePerRange[1] / 100.0)
     

--
Gitblit v1.8.0