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) ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4152,6 +4152,7 @@ #竞技场 Def_PDict_ArenaOSSeasonState = "ArenaOSSeasonState" # 开服前定制X天赛季状态 0-未比赛过,1-进行中,>1结算时的开服天 Def_PDict_ArenaScore = "ArenaScore" # 当前积分 Def_PDict_ArenaHighestScore = "ArenaHighestScore" # 历史最高积分 Def_PDict_ArenaBattleCountDay = "ArenaBattleCountDay" # 今日已战斗次数 Def_PDict_ArenaMatchRefreshCount = "ArenaMatchRefreshCount" # 匹配刷新列表次数 Def_PDict_ArenaItemAddCount = "ArenaItemAddCount" # 今日已使用物品增加次数 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -2018,6 +2018,16 @@ RunQuestEvent(curPlayer, "activityplace", event, Def_RunQuestType_RunAll if runall else Def_RunQuestType_Normal) return def EventRespons_ArenaBattleOver(curPlayer): # 挑战竞技场 - 结算才算 RunQuestEvent(curPlayer, "arenabattleover", "arenabattleover", Def_RunQuestType_Normal) return def EventRespons_ArenaHighestScore(curPlayer): # 刷新竞技场历史最高分 RunQuestEvent(curPlayer, "arenahighestscore", "arenahighestscore", Def_RunQuestType_Normal) return #--------------------------------------------------------------------- #================================================================================ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -7361,6 +7361,32 @@ weapontype = GameWorld.ToIntDef(curActionNode.GetAttribute("weapontype"), 0) return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % weapontype) >= lv ##竞技场历史最高分是否达到x分 # @param None # @return None <Checkarenahighestscore score="验证是否达到x分"/> def ConditionType_Checkarenahighestscore(curPlayer, curMission, curActionNode): score = GameWorld.ToIntDef(curActionNode.GetAttribute("score"), 0) highestScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaHighestScore) return highestScore >= score ##设置竞技场历史最高分进度 # @param None # @return None <Setarenahighestscore key="当前历史最高分存储任务key" id="可选任务ID" /> def DoType_Setarenahighestscore(curPlayer, curMission, curActionNode): missionID = curMission.GetMissionID() highestScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaHighestScore) key = curActionNode.GetAttribute("key") # 显示进度用 questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0) if questID != 0: curMission = curPlayer.FindMission(questID) missionScore = curMission.GetProperty(key) if missionScore < highestScore: curMission.SetProperty(key, highestScore) GameWorld.DebugLog("更新竞技场任务历史最高分: missionID=%s,questID=%s,missionScore=%s to %s" % (missionID, questID, missionScore, highestScore)) return ##设置今日活跃度 # @param curPlayer 玩家实例 # @param curMission 任务实例 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Arena.py
@@ -44,6 +44,7 @@ value1 = msgList[0] if value1 <= 0: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaOSSeasonState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaHighestScore, 0) PlayerArena.__DoArenaSeasonReset(curPlayer) GameWorld.DebugAnswer(curPlayer, "重置成功!") return ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
@@ -26,6 +26,7 @@ import FBCommon import IPY_GameWorld import ItemControler import EventShell def DoArenaOpen(curPlayer): ## 竞技场功能开启 @@ -279,7 +280,12 @@ # 更新积分 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, updScore) highestScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaHighestScore) if updScore > highestScore: highestScore = updScore PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaHighestScore, highestScore) GameWorld.DebugLog(" 更新竞技场历史最高分! %s" % highestScore) # 胜利给额外奖励 itemList = retDict.get("awardItemList", []) ItemControler.GivePlayerItemOrMail(curPlayer, itemList) @@ -288,6 +294,10 @@ overDict = {FBCommon.Over_itemInfo:jsonItemList, "addScore":addScore, "updScore":updScore, "curOrder":curOrder, "updOrder":updOrder} FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_ArenaBattle, 0, isWin, overDict) Sync_ArenaInfo(curPlayer) # 触发任务 EventShell.EventRespons_ArenaBattleOver(curPlayer) EventShell.EventRespons_ArenaHighestScore(curPlayer) return def __DoUpdateArenaScore(curPlayer, cmdDict={}):