5349 【主干】【gt_1.103.1】【yn_1.0.1】【bt3_1.102.1】【bt4】【bt5】【bt5_1.101.1】【bt6】开服活动合服后上线的无法结算奖励bug
7个文件已修改
364 ■■■■■ 已修改文件
PySysDB/PySysDBG.h 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBG.h
@@ -232,6 +232,16 @@
    list        ServerFirstKillPlayerAward;    // 全服首杀玩家奖励 [[物品ID,个数,是否拍品], ...]
};
//全民冲榜排行奖励表
struct tagOSCBillRankAward
{
    BYTE        _OSCBillType;    //冲榜类型
    BYTE        RankA;    //排名A
    BYTE        RankB;    //至排名B
    dict        RankAward; //排名奖励 {"职业":[[物品ID,个数],...], ...}
};
//宴会题库表
struct tagQuestionBank
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
@@ -65,6 +65,8 @@
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday, openServerWeekday)
    
    # 清除开服活动相关排行榜
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay, 0)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord, 0)
    for oscBillboardType in ShareDefine.Def_Campaign_Billboard_Dict.values():
        PlayerBillboard.ClearBillboardByIndex(oscBillboardType)
    
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
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -107,6 +107,7 @@
import CrossBoss
import ChPlayer
import PyDataManager
import GameWorldOpenServerCampaign
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -167,6 +168,7 @@
    # 通知开服天数
    #openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
    #GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
    GameWorldOpenServerCampaign.DoOnDay()
    #清理过期补偿
    PlayerCompensation.ClearUpTimeOutCompensation()
    #PlayerGeTui.ClearFMTGeTuiLimit()
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -209,6 +209,13 @@
                        ("list", "ServerFirstKillPlayerAward", 0),
                        ),
                "OSCBillRankAward":(
                        ("BYTE", "OSCBillType", 1),
                        ("BYTE", "RankA", 0),
                        ("BYTE", "RankB", 0),
                        ("dict", "RankAward", 0),
                        ),
                "QuestionBank":(
                        ("DWORD", "ID", 1),
                        ("char", "Answer", 0),
@@ -1190,6 +1197,21 @@
        
    def GetNPCID(self): return self.NPCID # ID
    def GetServerFirstKillPlayerAward(self): return self.ServerFirstKillPlayerAward #  全服首杀玩家奖励 [[物品ID,个数,是否拍品], ...]
# 全民冲榜排行奖励表
class IPY_OSCBillRankAward():
    def __init__(self):
        self.OSCBillType = 0
        self.RankA = 0
        self.RankB = 0
        self.RankAward = {}
        return
    def GetOSCBillType(self): return self.OSCBillType # 冲榜类型
    def GetRankA(self): return self.RankA # 排名A
    def GetRankB(self): return self.RankB # 至排名B
    def GetRankAward(self): return self.RankAward # 排名奖励 {"职业":[[物品ID,个数],...], ...}
# 宴会题库表
class IPY_QuestionBank():
@@ -2522,6 +2544,8 @@
        self.ipyBOSSInfoLen = len(self.ipyBOSSInfoCache)
        self.ipyBOSSFirstKillCache = self.__LoadFileData("BOSSFirstKill", IPY_BOSSFirstKill)
        self.ipyBOSSFirstKillLen = len(self.ipyBOSSFirstKillCache)
        self.ipyOSCBillRankAwardCache = self.__LoadFileData("OSCBillRankAward", IPY_OSCBillRankAward)
        self.ipyOSCBillRankAwardLen = len(self.ipyOSCBillRankAwardCache)
        self.ipyQuestionBankCache = self.__LoadFileData("QuestionBank", IPY_QuestionBank)
        self.ipyQuestionBankLen = len(self.ipyQuestionBankCache)
        self.ipyFamilyRedPackCache = self.__LoadFileData("FamilyRedPack", IPY_FamilyRedPack)
@@ -2836,6 +2860,8 @@
    def GetBOSSInfoByIndex(self, index): return self.ipyBOSSInfoCache[index]
    def GetBOSSFirstKillCount(self): return self.ipyBOSSFirstKillLen
    def GetBOSSFirstKillByIndex(self, index): return self.ipyBOSSFirstKillCache[index]
    def GetOSCBillRankAwardCount(self): return self.ipyOSCBillRankAwardLen
    def GetOSCBillRankAwardByIndex(self, index): return self.ipyOSCBillRankAwardCache[index]
    def GetQuestionBankCount(self): return self.ipyQuestionBankLen
    def GetQuestionBankByIndex(self, index): return self.ipyQuestionBankCache[index]
    def GetFamilyRedPackCount(self): return self.ipyFamilyRedPackLen
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
@@ -77,6 +77,11 @@
#服务器合服首次启动OK
Def_IsMixServerInitOK = 'IsMixServerInitOK'
#开服活动榜单结算版本更新时的开服天,主要用于旧服判断不重复发放奖励
Def_OSCBillAwardVerDay = 'OSCBillAwardVerDay'
#开服活动榜单结算状态,按冲榜类型二进制位存储是否已结算
Def_OSCBillAwardRecord = 'OSCBillAwardRecord'
#上次合服时的开服天数
Def_LastMixServerDay = 'LastMixServerDay'
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], ...], 默认绑定