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/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py | 175 +++++++++++++++++++++------------------------------------ 1 files changed, 65 insertions(+), 110 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py index 58c72e2..30a16b1 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py @@ -27,8 +27,6 @@ import PlayerFamilyRedPacket import ItemCommon -OSCBillAward_IsAutoMail = True # 排名奖励是否过天直接系统自动发放,如果不是则玩家可手动领取 - ( OSC_BillLimitValue, # 上榜限制值 OSC_StartDay, # 开启开服天 @@ -140,8 +138,6 @@ awardEndOpenServerDay = IpyGameDataPY.GetFuncCfg("OSCBillboardOpen", 2) if openServerDay <= awardEndOpenServerDay: GameWorld.DebugLog("开服活动中,过天不处理!openServerDay=%s,awardEndOpenServerDay=%s" % (openServerDay, awardEndOpenServerDay)) - if OSCBillAward_IsAutoMail: - __DoOSCBillAward_OnDayAutoGet(curPlayer, openServerDay) return False endMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_EndMailState) @@ -149,67 +145,27 @@ GameWorld.DebugLog("已经处理过开服活动奖励补发!") return True - billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord) - GameWorld.DebugLog("处理开服活动补发邮件, billAwardRecord=%s" % billAwardRecord, curPlayer.GetPlayerID()) - - sendMailCampTypeList = [] for campType in ShareDefine.Def_Campaign_Type_List: - if not billAwardRecord & pow(2, campType): - sendMailCampTypeList.append(campType) - tagAwardIpyList = GetOSCTagAwardIpyList(campType) for index, tagAwardIpyData in enumerate(tagAwardIpyList): DoGiveOSCTagAward(curPlayer, campType, index, tagAwardIpyData, True) - GameWorld.DebugLog(" 未领取奖励的活动榜单列表: %s" % sendMailCampTypeList) - if sendMailCampTypeList: - __SendOSCGameServerQuery(curPlayer, sendMailCampTypeList, True) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_EndMailState, 1) return True -def __DoOSCBillAward_OnDayAutoGet(curPlayer, openServerDay): - ## 排行奖励过天自动领取处理 - playerID = curPlayer.GetPlayerID() - - billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord) - #GameWorld.DebugLog("过天系统自动帮玩家领取开服活动排行奖励! billAwardRecord=%s" % billAwardRecord, playerID) - - sendMailCampTypeList = [] - 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 openServerDay <= endOpenServerDay: - #GameWorld.DebugLog(" 该开服活动还未结束,无需结算!campType=%s,openServerDay=%s <= endOpenServerDay=%s" - # % (campType, openServerDay, endOpenServerDay), playerID) - continue - if billAwardRecord & pow(2, campType): - #GameWorld.DebugLog(" 该开服活动排行奖励已经领取过!campType=%s" % (campType), playerID) - continue - sendMailCampTypeList.append(campType) - - #GameWorld.DebugLog(" 未领取奖励的活动榜单列表: %s" % sendMailCampTypeList, playerID) - if sendMailCampTypeList: - __SendOSCGameServerQuery(curPlayer, sendMailCampTypeList, True) - - return - -def __SendOSCGameServerQuery(curPlayer, campTypeList, isEndMail=False): - # 以下为需要向GameServer请求领取奖励所需信息 - # @param isEndMail: 是否使用邮件发放 - if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryOpenServerAwardState) == 1: - #已经在查询中 - GameWorld.DebugLog(" 已经在查询中...") - return - curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryOpenServerAwardState, 1) - - msgListStr = str([campTypeList, isEndMail]) - GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'OpenServerCampaignAward', msgListStr, len(msgListStr)) - GameWorld.DebugLog(" __SendOSCGameServerQuery campTypeList=%s, isEndMail=%s" % (campTypeList, isEndMail), curPlayer.GetPlayerID()) - return +#def __SendOSCGameServerQuery(curPlayer, campTypeList, isEndMail=False): +# # 以下为需要向GameServer请求领取奖励所需信息 +# # @param isEndMail: 是否使用邮件发放 +# if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryOpenServerAwardState) == 1: +# #已经在查询中 +# GameWorld.DebugLog(" 已经在查询中...") +# return +# curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryOpenServerAwardState, 1) +# +# msgListStr = str([campTypeList, isEndMail]) +# GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'OpenServerCampaignAward', msgListStr, len(msgListStr)) +# GameWorld.DebugLog(" __SendOSCGameServerQuery campTypeList=%s, isEndMail=%s" % (campTypeList, isEndMail), curPlayer.GetPlayerID()) +# return #// AB 11 开服活动奖励 #tagCMOpenServerCampaignAward @@ -249,11 +205,9 @@ # 排行奖励 if awardType == 1: - if OSCBillAward_IsAutoMail: - GameWorld.DebugLog("开服排名奖励玩家不可手动领取!") - return - __SendOSCGameServerQuery(curPlayer, [campaignType]) - + # 自动发放,不可手动领取 + return + # 目标奖励 elif awardType == 2: tagAwardIpyList = GetOSCTagAwardIpyList(campaignType) @@ -307,55 +261,56 @@ def DoGiveOSCBillAward(curPlayer, awardResultList): ## 给排行奖励 - campTypeList, isEndMail, queryResultList = awardResultList - if len(campTypeList) != len(queryResultList): - return - - job = str(curPlayer.GetJob()) - for i, campaignType in enumerate(campTypeList): - billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord) - if billAwardRecord & pow(2, campaignType): - GameWorld.DebugLog(" 已经领取过该排行活动奖励, campaignType=%s" % (campaignType), curPlayer.GetPlayerID()) - continue - - order = queryResultList[i] - billAwardInfo = None - billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campaignType) - if not billRankAwardIpyList: - continue - for billRankIpyData in billRankAwardIpyList: - if (billRankIpyData.GetRankA() <= order <= billRankIpyData.GetRankB()) \ - or (not billRankIpyData.GetRankB() and billRankIpyData.GetRankA() == order): - billAwardInfo = billRankIpyData.GetRankAward() - break - - if not billAwardInfo: - GameWorld.DebugLog(" 玩家名次没有奖励!campaignType=%s,order=%s" % (campaignType, order), curPlayer.GetPlayerID()) - continue - - billAwardDict = billAwardInfo - if job not in billAwardDict: - GameWorld.ErrLog("没有配置该职业对应的开服活动榜单奖励!campaignType=%s,job=%s" % (campaignType, job)) - continue - awardItemList = billAwardDict[job] - - updBillAwardRecord = billAwardRecord|pow(2, campaignType) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_BillAwardRecord, updBillAwardRecord) - GameWorld.DebugLog(" 发放活动榜单奖励,campaignType=%s,order=%s,awardItemList=%s,updBillAwardRecord=%s" - % (campaignType, order, awardItemList, updBillAwardRecord), curPlayer.GetPlayerID()) - - drDict = {"CampaignType":campaignType, "Order":order} - mailTypeKey = "OSCBillAward%s" % campaignType - mailParamList = [order] - __DoGiveOSCAwardItem(curPlayer, awardItemList, drDict, isEndMail, mailTypeKey, mailParamList) - #红包奖励 - redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {}) - redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0) - if redPacketID: - PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, redPacketID) - #if not isEndMail: - Sync_OpenServerCampaignAward(curPlayer, campaignType) return +# campTypeList, isEndMail, queryResultList = awardResultList +# if len(campTypeList) != len(queryResultList): +# return +# +# job = str(curPlayer.GetJob()) +# for i, campaignType in enumerate(campTypeList): +# billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord) +# if billAwardRecord & pow(2, campaignType): +# GameWorld.DebugLog(" 已经领取过该排行活动奖励, campaignType=%s" % (campaignType), curPlayer.GetPlayerID()) +# continue +# +# order = queryResultList[i] +# billAwardInfo = None +# billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campaignType) +# if not billRankAwardIpyList: +# continue +# for billRankIpyData in billRankAwardIpyList: +# if (billRankIpyData.GetRankA() <= order <= billRankIpyData.GetRankB()) \ +# or (not billRankIpyData.GetRankB() and billRankIpyData.GetRankA() == order): +# billAwardInfo = billRankIpyData.GetRankAward() +# break +# +# if not billAwardInfo: +# GameWorld.DebugLog(" 玩家名次没有奖励!campaignType=%s,order=%s" % (campaignType, order), curPlayer.GetPlayerID()) +# continue +# +# billAwardDict = billAwardInfo +# if job not in billAwardDict: +# GameWorld.ErrLog("没有配置该职业对应的开服活动榜单奖励!campaignType=%s,job=%s" % (campaignType, job)) +# continue +# awardItemList = billAwardDict[job] +# +# updBillAwardRecord = billAwardRecord|pow(2, campaignType) +# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_BillAwardRecord, updBillAwardRecord) +# GameWorld.DebugLog(" 发放活动榜单奖励,campaignType=%s,order=%s,awardItemList=%s,updBillAwardRecord=%s" +# % (campaignType, order, awardItemList, updBillAwardRecord), curPlayer.GetPlayerID()) +# +# drDict = {"CampaignType":campaignType, "Order":order} +# mailTypeKey = "OSCBillAward%s" % campaignType +# mailParamList = [order] +# __DoGiveOSCAwardItem(curPlayer, awardItemList, drDict, isEndMail, mailTypeKey, mailParamList) +# #红包奖励 +# redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {}) +# redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0) +# if redPacketID: +# PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, redPacketID) +# #if not isEndMail: +# Sync_OpenServerCampaignAward(curPlayer, campaignType) +# return def __DoGiveOSCAwardItem(curPlayer, giveItemList, drDict, isEndMail, mailTypeKey, mailParamList): ## 给开服活动奖励 [[itemID, itemCount], ...], 默认绑定 -- Gitblit v1.8.0