From eda1e177e9227ce1a60423a77fa03e3a1f60e73d Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 17 三月 2021 17:34:29 +0800 Subject: [PATCH] 8835 【BT2】【主干】【后端】Part3-2 5)新增多日连充(领奖记录支持多个值) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py | 163 ++++++++++-------------------------------------------- 1 files changed, 30 insertions(+), 133 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py index 9ede044..f604d6c 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerBillboard.py @@ -20,10 +20,8 @@ import GameWorld import ChConfig import ShareDefine -import ReadChConfig import ChPyNetSendPack import NetPackCommon -import PlayerDBGSEvent import DataRecordPack import PlayerFamily @@ -40,7 +38,6 @@ #需要每天拷贝昨日榜单的排行榜类型字典 Def_NeedCopyYesterday_Dict = { #昨日榜(拷贝) #今日榜(源数据) - ShareDefine.Def_BT_HighLadder_Yester : ShareDefine.Def_BT_HighLadder, } def NoteOssBillboardInfoByDay(): @@ -75,50 +72,6 @@ #设置保存类型 billBoard.SetSaveToDB(ChConfig.Def_BT_SaveType.get(index, ChConfig.Def_BT_SaveType_SaveDB)) - return - -def ClearBillboardOnServerInit(): - ##开启服务器重置排行榜处理 - BillBoardClearSetting = ReadChConfig.GetEvalChConfig("BillBoardClearSetting") - - clearSign, clearIndexList = BillBoardClearSetting - - lastSign = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_ClearBillboardSign) - - if clearSign == lastSign: - GameWorld.Log("服务器开启清除排行榜检查:标记相同不用清除clearSign=%s" % (clearSign)) - return - - for billboardIndex in clearIndexList: - - # 合服累充活动判断 - if billboardIndex == ShareDefine.Def_BT_MixCampaign_Recharge: - isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) # 是否合服 - mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) # 合服天数 - - mixType = ShareDefine.Def_MixCampaign_Type_RechargeRank - mixServerCampaignDict = ReadChConfig.GetEvalChConfig("MixServerCampaign") - campaignInfoList = mixServerCampaignDict.get(mixType, []) - dayList = campaignInfoList[0] - if not isMixServer or mixServerDay not in dayList: - GameWorld.Log('非合服充值活动记录数据期间,不清除累充排行榜(%s)! isMixServer=%s,mixServerDay=%s,dayList=%s' - % (billboardIndex, isMixServer, mixServerDay, str(dayList))) - continue - - # 特惠充值判断 - elif billboardIndex == ShareDefine.Def_BT_RechargeTeHui: - actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_RechargeRank - actionNum = PlayerDBGSEvent.GetDBGSTrig_ByKey(actionNumKey) - if not actionNum: - GameWorld.Log('当前没有充值特惠排行活动,不清除排行榜(%s)!' % (billboardIndex)) - continue - - ClearBillboardByIndex(billboardIndex) - - PlayerDBGSEvent.SetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_ClearBillboardSign, clearSign) - - GameWorld.Log("服务器开启清除排行榜: lastSign=%s,clearSign=%s,clearIndexList=%s" - % (lastSign, clearSign, str(clearIndexList))) return def SortServerBillboard(): @@ -198,6 +151,33 @@ GameWorld.Log('billboardIndex %s clear.'%billboardIndex) return +def UpdateBillboardMaxCount(billboardIndex, updMaxCount, isDelExtra=True): + ''' 变更竞技场榜单最大数据数 + @param updMaxCount: 更新的最大数据排名 + @param isDelExtra: 是否删除原榜单排名数据超过更新后的最大排名,默认删除 + ''' + billBoard = GameWorld.GetBillboard().FindBillboard(billboardIndex) + if not billBoard: + return + curCount = billBoard.GetCount() + curMaxCount = billBoard.GetMaxCount() + # 不超过程序内置配置的最大数量 + if billboardIndex in ChConfig.Def_BT_Cnt: + updMaxCount = min(updMaxCount, ChConfig.Def_BT_Cnt[billboardIndex]) + if curMaxCount == updMaxCount: + return + billBoard.SetMaxCount(updMaxCount) + GameWorld.Log(" 变更榜单最大数据数! billboardIndex=%s,curCount=%s,curMaxCount=%s,updMaxCount=%s" + % (billboardIndex, curCount, curMaxCount, updMaxCount)) + + # 清除多余榜单数据 + if isDelExtra and curCount > updMaxCount: + for delIndex in xrange(curCount - 1, updMaxCount - 1, -1): + if delIndex >= 0: + GameWorld.Log(" DeleteByIndex: %s" % delIndex) + billBoard.DeleteByIndex(delIndex) + return + #################################################################################################### #class IPY_GSetWatchBillboardState @@ -259,6 +239,9 @@ if packType in ChConfig.Def_InterdictLook_BT_Type: #不可通过此封包查看 + return + if ChConfig.Def_BT_Cnt.get(packType, 0) > 100: + GameWorld.DebugLog("该榜单最大名次较大,需使用分页查询! A9 A2 查看排行榜#tagCPYWatchBillboard") return if not __CheckWatchCD(curPlayer, packType, tick): return @@ -671,13 +654,6 @@ return [playerBillBoard, playerBillBoardData] -def MapServer_UpdMSRechargeRankBillboard(cmdList): - ##合服活动充值点数排行更新 - playerID, playerName, playerOpInfo, playerJob, fightPower, familyName, totalChangeCoinPoint = cmdList - UpdatePlayerBillboard(playerID, playerName, familyName, ShareDefine.Def_BT_MixCampaign_Recharge, - playerJob, fightPower, totalChangeCoinPoint, totalChangeCoinPoint) - return - def MapServer_UpdateTotalRechargeBillboard(cmdList): ##总充值点数排行更新 playerID, playerName, playerOpInfo, playerJob, playerLV, totalChangeCoinPoint = cmdList @@ -703,89 +679,10 @@ def ViewBillboardRangeByObjID(index, clientData, tick): return -## 更新充值特惠排行榜 -# @param cmdList -# @return None -def MapServer_UpdateRechargeRankBillboard(cmdList): - playerID, playerName, playerOpInfo, playerJob, playerLV, familyName, actionID, actionNum, updateGold = cmdList - # 排行榜上榜限制 - RechargeRankInfoDict = ReadChConfig.GetEvalChConfig("TeHuiAction_RechargeRank") - gameWorld = GameWorld.GetGameWorld() - actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_RechargeRank - curActionNum = gameWorld.GetDictByKey(actionNumKey) - curActionID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey) - GameWorld.DebugLog("MapServer_UpdateRechargeRankBillboard...") - GameWorld.DebugLog(" actionID=%s,actionNum=%s,updateGold=%s,curActionID=%s,curActionNum=%s," - % (actionID, actionNum, updateGold, curActionID, curActionNum), playerID) - - # 非当前活动,不更新 - if actionNum not in RechargeRankInfoDict or actionNum != curActionNum or actionID != curActionID: - GameWorld.DebugLog(" 非当前充值特惠排行榜活动,不更新...", playerID) - return - - rechargeRankInfoList = RechargeRankInfoDict[actionNum] - if len(rechargeRankInfoList) <= 0: - return - - limitGold = rechargeRankInfoList[0] # 限制上榜充值数 - if updateGold < limitGold: - GameWorld.DebugLog(" 未达到最低上榜充值数=%s,不更新..." % limitGold, playerID) - return - - #排行榜 - cmpValue = updateGold - isOk = UpdatePlayerBillboard(playerID, playerName, familyName, ShareDefine.Def_BT_RechargeTeHui, - playerJob, playerLV, updateGold, cmpValue) - GameWorld.DebugLog(" 更新充值特惠排行榜 isOk=%s" % isOk, playerID) - return - -## 更新消费特惠排行榜 -# @param cmdList -# @return None -def MapServer_UpdateCostRankBillboard(cmdList): - playerID, playerName, playerOpInfo, playerJob, playerLV, familyName, actionID, actionNum, updateGold = cmdList - # 排行榜上榜限制 - costRankInfoDict = ReadChConfig.GetEvalChConfig("TeHuiAction_CostRank") - gameWorld = GameWorld.GetGameWorld() - actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_CostRank - curActionNum = gameWorld.GetDictByKey(actionNumKey) - curActionID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey) - GameWorld.DebugLog("MapServer_UpdateCostRankBillboard...") - GameWorld.DebugLog(" actionID=%s,actionNum=%s,updateGold=%s,curActionID=%s,curActionNum=%s," - % (actionID, actionNum, updateGold, curActionID, curActionNum), playerID) - - # 非当前活动,不更新 - if actionNum not in costRankInfoDict or actionNum != curActionNum or actionID != curActionID: - GameWorld.DebugLog(" 非当前消费特惠排行榜活动,不更新...", playerID) - return - - costRankInfoList = costRankInfoDict[actionNum] - if len(costRankInfoList) <= 0: - return - - limitGold = costRankInfoList[0] # 限制上榜消费数 - if updateGold < limitGold: - GameWorld.DebugLog(" 未达到最低上榜消费数=%s,不更新..." % limitGold, playerID) - return - - #排行榜 - cmpValue = updateGold - isOk = UpdatePlayerBillboard(playerID, playerName, familyName, ShareDefine.Def_BT_CostTeHui, - playerJob, playerLV, 0, cmpValue) - GameWorld.DebugLog(" 更新消费特惠排行榜 isOk=%s" % isOk, playerID) - return - ## 排行榜更新是否受等级限制 def IsBillboardLVLimit(playerLV, billboardType): # 等级判断已由地图处理掉,这里不再做判断 return True -# BillBoardLimitInfo = ReadChConfig.GetEvalChConfig("BillBoardLimit") -# defaultMinLV, limitLVDict = BillBoardLimitInfo -# lvBillBoardMinLV = limitLVDict.get(billboardType, defaultMinLV) -# if playerLV < lvBillBoardMinLV: -# return True -# -# return False def RedressBillboard(curPlayer): ## 纠正排行榜中的玩家名字记录 -- Gitblit v1.8.0