| | |
| | | import PlayerFamilyRedPacket
|
| | | import ItemCommon
|
| | |
|
| | | OSCBillAward_IsAutoMail = True # 排名奖励是否过天直接系统自动发放,如果不是则玩家可手动领取
|
| | |
|
| | | (
|
| | | OSC_BillLimitValue, # 上榜限制值
|
| | | OSC_StartDay, # 开启开服天
|
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | |
|
| | | # 排行奖励
|
| | | if awardType == 1:
|
| | | if OSCBillAward_IsAutoMail:
|
| | | GameWorld.DebugLog("开服排名奖励玩家不可手动领取!")
|
| | | return
|
| | | __SendOSCGameServerQuery(curPlayer, [campaignType])
|
| | | |
| | | # 自动发放,不可手动领取
|
| | | return
|
| | | |
| | | # 目标奖励
|
| | | elif awardType == 2:
|
| | | tagAwardIpyList = GetOSCTagAwardIpyList(campaignType)
|
| | |
| | |
|
| | | 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], ...], 默认绑定
|