From 21af42b4f4faaba0d2ccc6ee731c1deec4f514ab Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 27 一月 2022 11:10:38 +0800 Subject: [PATCH] 5349 【主干】【gt_1.103.1】【yn_1.0.1】【bt3_1.102.1】【bt4】【bt5】【bt5_1.101.1】【bt6】开服活动合服后上线的无法结算奖励bug --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py | 144 +++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 117 insertions(+), 27 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py index 16c993e..a8f1a9a 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py @@ -15,43 +15,133 @@ #"""Version = 2018-03-06 11:00""" #------------------------------------------------------------------------------- - import GameWorld import ShareDefine +import IpyGameDataPY +import PlayerDBGSEvent +import PlayerCompensation +import PlayerFamilyRedPacket +( +OSC_BillLimitValue, # 上榜限制值 +OSC_StartDay, # 开启开服天 +OSC_EndDay, # 结束开服天 +) = range(3) def CanGiveCampaignAward(curPlayer, msgList): ## 可否领取开服活动榜单奖励 - - if not curPlayer: - return msgList - - campTypeList, isEndMail = msgList - - queryResultList = [] - for oscType in campTypeList: - queryResultList.append(__GetGiveCampaignAwardInfo(curPlayer, oscType)) - msgList.append(queryResultList) - - GameWorld.DebugLog("请求领取开服活动奖励: campTypeList=%s,isEndMail=%s,queryResultList=%s" - % (campTypeList, isEndMail, queryResultList), curPlayer.GetPlayerID()) + # 不可手动领取榜单奖励,改为过天直接结算发放 return msgList +# if not curPlayer: +# return msgList +# +# campTypeList, isEndMail = msgList +# +# queryResultList = [] +# for oscType in campTypeList: +# queryResultList.append(__GetGiveCampaignAwardInfo(curPlayer, oscType)) +# msgList.append(queryResultList) +# +# GameWorld.DebugLog("请求领取开服活动奖励: campTypeList=%s,isEndMail=%s,queryResultList=%s" +# % (campTypeList, isEndMail, queryResultList), curPlayer.GetPlayerID()) +# return msgList +# +#def __GetGiveCampaignAwardInfo(curPlayer, campaignType): +# ## 获取领奖所需的信息 +# +# awardBillboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campaignType) +# if not awardBillboardType: +# return 0 +# +# billBoard = GameWorld.GetBillboard().FindBillboard(awardBillboardType) +# if not billBoard: +# return 0 +# +# curPlayerID = curPlayer.GetPlayerID() +# order = billBoard.IndexOfByID(curPlayerID) + 1 # 玩家在排行榜中的名次 +# GameWorld.DebugLog(" 奖励榜: campaignType=%s,order=%s" % (campaignType, order), curPlayerID) +# return order -def __GetGiveCampaignAwardInfo(curPlayer, campaignType): - ## 获取领奖所需的信息 +def DoOnDay(): - awardBillboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campaignType) - if not awardBillboardType: - return 0 + openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 + billAwardVerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay) + billAwardRecord = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord) + if not billAwardVerDay: + billAwardVerDay = openServerDay - 1 + PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay, billAwardVerDay) + GameWorld.Log("设置开服冲榜结算版本天: billAwardVerDay=%s" % (billAwardVerDay)) + GameWorld.DebugLog("过天处理开服活动榜单结算: billAwardVerDay=%s,openServerDay=%s,billAwardRecord=%s" % (billAwardVerDay, openServerDay, billAwardRecord)) - billBoard = GameWorld.GetBillboard().FindBillboard(awardBillboardType) + OSCBillboardDataLimitDict = IpyGameDataPY.GetFuncEvalCfg("OSCBillboardOpen", 1) + for campType in ShareDefine.Def_Campaign_Type_List: + campTypeS = str(campType) + if campTypeS not in OSCBillboardDataLimitDict: + continue + endOpenServerDay = OSCBillboardDataLimitDict[campTypeS][OSC_EndDay] + if endOpenServerDay < billAwardVerDay: + GameWorld.DebugLog(" 该开服活动结算天在结算版本天之前,不处理! campType=%s,endOpenServerDay=%s < billAwardVerDay=%s" + % (campType, endOpenServerDay, billAwardVerDay)) + continue + if openServerDay <= endOpenServerDay: + GameWorld.DebugLog(" 该开服活动还未结束,无需结算! campType=%s,openServerDay=%s <= endOpenServerDay=%s" + % (campType, openServerDay, endOpenServerDay)) + continue + DoGiveOSCBillAward(openServerDay, campType) + + return + +def DoGiveOSCBillAward(openServerDay, campType): + billAwardRecord = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord) + if billAwardRecord & pow(2, campType): + GameWorld.DebugLog(" 该开服活动排行奖励已经结算过! campType=%s" % (campType)) + return + + billboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campType) + GameWorld.Log("结算开服活动榜单! openServerDay=%s,campType=%s,billboardType=%s,billAwardRecord=%s" + % (openServerDay, campType, billboardType, billAwardRecord)) + billBoard = GameWorld.GetBillboard().FindBillboard(billboardType) if not billBoard: - return 0 + return - curPlayerID = curPlayer.GetPlayerID() - order = billBoard.IndexOfByID(curPlayerID) + 1 # 玩家在排行榜中的名次 - GameWorld.DebugLog(" 奖励榜: campaignType=%s,order=%s" % (campaignType, order), curPlayerID) - return order - - + billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campType) + if not billRankAwardIpyList: + return + orderAwardDict = {} + for billRankIpyData in billRankAwardIpyList: + orderAwardDict[int(billRankIpyData.GetRankB())] = billRankIpyData.GetRankAward() + + updBillAwardRecord = billAwardRecord | pow(2, campType) + PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord, updBillAwardRecord) + redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {}) + GameWorld.Log(" campType=%s,updBillAwardRecord=%s,orderAwardDict=%s,redPacketIDDict=%s" + % (campType, updBillAwardRecord, orderAwardDict, redPacketIDDict)) + + for index in xrange(billBoard.GetCount()): + billBoardData = billBoard.At(index) + if not billBoardData: + continue + order = index + 1 + playerID = billBoardData.GetID() + job = billBoardData.GetType2() + jobAwardDict = GameWorld.GetOrderValueByDict(orderAwardDict, order, False) + if not jobAwardDict: + #GameWorld.ErrLog("没有开服活动榜单奖励! campType=%s,order=%s,playerID=%s" % (campType, order, playerID)) + continue + if str(job) not in jobAwardDict: + GameWorld.ErrLog("没有配置该职业对应的开服活动榜单奖励! campType=%s,order=%s,job=%s,jobAwardDict=%s" + % (campType, order, job, jobAwardDict)) + continue + awardItemList = jobAwardDict[str(job)] + paramList = [order] + GameWorld.Log("发放开服活动榜单奖励: campType=%s,billboardType=%s,order=%s,playerID=%s,job=%s,awardItemList=%s" + % (campType, billboardType, order, playerID, job, awardItemList)) + PlayerCompensation.SendMailByKey("OSCBillAward%s" % campType, [playerID], awardItemList, paramList) + + #红包奖励 + redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0) + if redPacketID: + PlayerFamilyRedPacket.CreateSystemRedPacket(redPacketID) + + return -- Gitblit v1.8.0