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