From 82a9f8b4c10bb73b9b8f3716681379d4bafb79aa Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 29 八月 2024 15:50:19 +0800 Subject: [PATCH] 10256 【越南】【砍树】排行榜名次加入积分限制(仙匣秘境;古宝养成;boss历练) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActGubao.py | 147 +++++++++++++++++++++++++++++++------------------ 1 files changed, 93 insertions(+), 54 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActGubao.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActGubao.py index d0845a5..0c3030d 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActGubao.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActGubao.py @@ -86,36 +86,55 @@ if not templateID: GameWorld.Log("本次活动没有个人榜奖励!") return - tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGubaoBillTemp", templateID) - if not tempIpyDataList: + billboardDataCount = billBoard.GetCount() + billBoard.Sort() + + GameWorld.Log("结算个人榜单奖励: billboardType=%s,templateID=%s,billboardDataCount=%s" % (billboardType, templateID, billboardDataCount)) + + orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGubaoBillTemp", templateID) + if not orderIpyDataList: return - rankAwardDict = {} - for tempIpyData in tempIpyDataList: - rankAwardDict[tempIpyData.GetRank()] = tempIpyData.GetAwardItemList() + rankPre = 0 + billboardIndex = 0 + for ipyData in orderIpyDataList: + rank = ipyData.GetRank() + needScore = ipyData.GetNeedScore() + scoreAwardEx = ipyData.GetScoreAwardEx() + scoreAwardExList = scoreAwardEx.keys() + scoreAwardExList.sort() + awardItemList = ipyData.GetAwardItemList() + orderCountTotal = rank - rankPre # 奖励名次数量 + rankPre = rank - GameWorld.Log("结算个人榜单奖励: templateID=%s,rankAwardDict=%s" % (templateID, rankAwardDict)) - billBoard.Sort() - for index in xrange(billBoard.GetCount()): - billBoardData = billBoard.At(index) - if not billBoardData: - continue - - rank = index + 1 - - awardItemList = GameWorld.GetOrderValueByDict(rankAwardDict, rank, False) - if not awardItemList: - break - - playerID = billBoardData.GetID() - name2 = billBoardData.GetName2() - cmpValue = billBoardData.GetCmpValue() - - GameWorld.Log(" 发放古宝养成个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" - % (rank, playerID, cmpValue, awardItemList, name2)) - - PlayerCompensation.SendMailByKey("ActGubaoPlayer", [playerID], awardItemList, [rank]) - + for index in xrange(billboardIndex, billboardDataCount): + if orderCountTotal <= 0: + break + + billBoardData = billBoard.At(index) + playerID = billBoardData.GetID() + name2 = billBoardData.GetName2() + cmpValue = billBoardData.GetCmpValue() + + if cmpValue < needScore: + GameWorld.Log(" 积分不足该榜单所需积分,跳过该名次: index=%s,rank=%s,playerID=%s,cmpValue=%s < %s" % (index, rank, playerID, cmpValue, needScore)) + break + + awardItemExList = [] + for scoreEx in scoreAwardExList: + if cmpValue < scoreEx: + break + awardItemExList = scoreAwardEx[scoreEx] # 取最大满足条件的一档 + finalAwardItemList = awardItemList + awardItemExList + + playerRank = rank - orderCountTotal + 1 + GameWorld.Log(" 发放古宝养成个人榜单奖励: index=%s,rank=%s,playerRank=%s,playerID=%s,cmpValue=%s,awardItemList=%s,scoreAwardEx=%s,finalAwardItemList=%s, %s" + % (index, rank, playerRank, playerID, cmpValue, awardItemList, scoreAwardEx, finalAwardItemList, name2)) + PlayerCompensation.SendMailByKey("ActGubaoPlayer", [playerID], finalAwardItemList, [playerRank]) + + orderCountTotal -= 1 + billboardIndex += 1 + return def MapServer_Gubao(curPlayer, msgList): @@ -188,7 +207,12 @@ ipyData = IpyGameDataPY.GetIpyGameData("CrossActGubao", cfgID) if not ipyData: return - personlLimit = ipyData.GetRankLimitPersonal() + PersonalTemplateID = ipyData.GetPersonalTemplateID() + rankIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGubaoBillTemp", PersonalTemplateID) + if not rankIpyDataList: + return + lastRankIpyData = rankIpyDataList[-1] # 取最后一个为最低上榜积分限制 + personlLimit = lastRankIpyData.GetNeedScore() playerID = playerInfo["playerID"] playerName = playerInfo["playerName"] @@ -202,7 +226,7 @@ if playerScore >= personlLimit: name2, type2, value1, value2 = accID, job, realmLV, 0 CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_GubaoScore, groupValue1, playerID, playerName, - name2, type2, value1, value2, playerScore) + name2, type2, value1, value2, playerScore, autoSort=False) return def OnCrossActIDChange(cfgID, zoneID, ipyData, state): @@ -279,32 +303,47 @@ % (billboardType, zoneID, cfgID, templateID, billboardDataCount)) orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActGubaoBillTemp", templateID) - if orderIpyDataList: - rankPre = 0 - billboardIndex = 0 - for ipyData in orderIpyDataList: - rank = ipyData.GetRank() - awardItemList = ipyData.GetAwardItemList() - orderCountTotal = rank - rankPre # 奖励名次数量 - rankPre = rank - orderCount = 0 + if not orderIpyDataList: + return + + rankPre = 0 + billboardIndex = 0 + for ipyData in orderIpyDataList: + rank = ipyData.GetRank() + needScore = ipyData.GetNeedScore() + scoreAwardEx = ipyData.GetScoreAwardEx() + scoreAwardExList = scoreAwardEx.keys() + scoreAwardExList.sort() + awardItemList = ipyData.GetAwardItemList() + orderCountTotal = rank - rankPre # 奖励名次数量 + rankPre = rank + + for index in xrange(billboardIndex, billboardDataCount): + if orderCountTotal <= 0: + break - for index in xrange(billboardIndex, billboardDataCount): - if orderCount >= orderCountTotal: + billboardData = billboardObj.At(index) + playerID = billboardData.ID + name2 = billboardData.Name2 + cmpValue = billboardData.CmpValue + if cmpValue < needScore: + GameWorld.Log(" 积分不足该榜单所需积分,跳过该名次: index=%s,rank=%s,playerID=%s,cmpValue=%s < %s" % (index, rank, playerID, cmpValue, needScore)) + break + + awardItemExList = [] + for scoreEx in scoreAwardExList: + if cmpValue < scoreEx: break - - billboardData = billboardObj.At(index) - playerID = billboardData.ID - name2 = billboardData.Name2 - cmpValue = billboardData.CmpValue - - playerRank = index + 1 - GameWorld.Log(" 发放古宝养成个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s" - % (rank, playerID, cmpValue, awardItemList, name2)) - PlayerCompensation.SendMailByKey("ActGubaoCrossPlayer", [playerID], awardItemList, [playerRank], crossMail=True) - - orderCount += 1 - billboardIndex += 1 - + awardItemExList = scoreAwardEx[scoreEx] # 取最大满足条件的一档 + finalAwardItemList = awardItemList + awardItemExList + + playerRank = rank - orderCountTotal + 1 + GameWorld.Log(" 发放古宝养成个人榜单奖励: index=%s,rank=%s,playerRank=%s,playerID=%s,cmpValue=%s,awardItemList=%s,scoreAwardEx=%s,finalAwardItemList=%s, %s" + % (index, rank, playerRank, playerID, cmpValue, awardItemList, scoreAwardEx, finalAwardItemList, name2)) + PlayerCompensation.SendMailByKey("ActGubaoCrossPlayer", [playerID], finalAwardItemList, [playerRank], crossMail=True) + + orderCountTotal -= 1 + billboardIndex += 1 + return -- Gitblit v1.8.0