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/GM/Commands/ClearOpenServerDay.py                 |    2 
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                                  |   26 +++
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py                |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py |  175 +++++++++---------------
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py     |  144 ++++++++++++++++---
 PySysDB/PySysDBG.h                                                                               |   10 +
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py                         |    5 
 7 files changed, 227 insertions(+), 137 deletions(-)

diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index b2a77bc..26ad42b 100644
--- a/PySysDB/PySysDBG.h
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
index 717ac12..12a1a49 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
+++ b/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)
     
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
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 6c323bc..f5a72f5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/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()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 184986f..76e2ec6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
index e9f1e45..bd006c6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
@@ -77,6 +77,11 @@
 #服务器合服首次启动OK
 Def_IsMixServerInitOK = 'IsMixServerInitOK'
 
+#开服活动榜单结算版本更新时的开服天,主要用于旧服判断不重复发放奖励
+Def_OSCBillAwardVerDay = 'OSCBillAwardVerDay'
+#开服活动榜单结算状态,按冲榜类型二进制位存储是否已结算
+Def_OSCBillAwardRecord = 'OSCBillAwardRecord'
+
 #上次合服时的开服天数
 Def_LastMixServerDay = 'LastMixServerDay'
 
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