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,10 +205,8 @@
    
    # 排行奖励
    if awardType == 1:
        if OSCBillAward_IsAutoMail:
            GameWorld.DebugLog("开服排名奖励玩家不可手动领取!")
        # 自动发放,不可手动领取
            return
        __SendOSCGameServerQuery(curPlayer, [campaignType])
        
    # 目标奖励
    elif awardType == 2:
@@ -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], ...], 默认绑定