From 8418473f574503da7bcd4891e9b9ce4af456147f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 九月 2019 15:36:25 +0800
Subject: [PATCH] 8279 【后端】【主干】开服排行榜的奖励过天通过邮件发放

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py |   46 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 43 insertions(+), 3 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 76d9f06..595dc4d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py
@@ -27,6 +27,8 @@
 import PlayerFamilyRedPacket
 import ItemCommon
 
+OSCBillAward_IsAutoMail = True # 排名奖励是否过天直接系统自动发放,如果不是则玩家可手动领取
+
 (
 OSC_BillLimitValue, # 上榜限制值
 OSC_StartDay, # 开启开服天
@@ -138,6 +140,8 @@
     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)
@@ -164,9 +168,38 @@
     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("    已经在查询中...")
@@ -214,9 +247,14 @@
         GameWorld.DebugLog("该开服活动领奖已结束!campaignType=%s,openServerDay=%s > awardEndOpenServerDay=%s" % (campaignType, openServerDay, awardEndOpenServerDay))
         return
     
-    if awardType == 1:        
+    # 排行奖励
+    if awardType == 1:
+        if OSCBillAward_IsAutoMail:
+            GameWorld.DebugLog("开服排名奖励玩家不可手动领取!")
+            return
         __SendOSCGameServerQuery(curPlayer, [campaignType])
         
+    # 目标奖励
     elif awardType == 2:
         tagAwardIpyList = GetOSCTagAwardIpyList(campaignType)
         if not tagAwardIpyList or awardIndex < 0 or awardIndex >= len(tagAwardIpyList):
@@ -230,6 +268,7 @@
     return
 
 def DoGiveOSCTagAward(curPlayer, campaignType, index, tagAwardIpyData, isEndMail=False):
+    ## 给目标奖励
     
     tagAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_TagAwardRecord % campaignType)
     if tagAwardRecord & pow(2, index):
@@ -267,6 +306,7 @@
     return
 
 def DoGiveOSCBillAward(curPlayer, awardResultList):
+    ## 给排行奖励
     campTypeList, isEndMail, queryResultList = awardResultList
     if len(campTypeList) != len(queryResultList):
         return
@@ -313,8 +353,8 @@
         redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0)
         if redPacketID:
             PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, redPacketID)
-        if not isEndMail:
-            Sync_OpenServerCampaignAward(curPlayer, campaignType)
+        #if not isEndMail:
+        Sync_OpenServerCampaignAward(curPlayer, campaignType)
     return
 
 def __DoGiveOSCAwardItem(curPlayer, giveItemList, drDict, isEndMail, mailTypeKey, mailParamList):

--
Gitblit v1.8.0