From a02d7379e60b7b3fe0ae8d1ada4cf86fc4d0a1be Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 11 九月 2020 14:27:11 +0800
Subject: [PATCH] 1111 媒体卡固定码支持按appid配置;

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py |   66 ++++++++++++++++++++++++++++++---
 1 files changed, 60 insertions(+), 6 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 a9e6ec7..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, # 开启开服天
@@ -80,7 +82,13 @@
     
     recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)
     
-    if campaignType not in [ShareDefine.Def_Campaign_Type_StoneLV, ShareDefine.Def_Campaign_Type_FightPower] and value <= recordData:
+    if value == recordData:
+        GameWorld.DebugLog("    开服活动数据等于历史记录, 不更新 campaignType=%s,recordData=%s,updValue=%s" 
+                           % (campaignType, recordData, value), curPlayer.GetPlayerID())
+        return
+    
+    if campaignType not in [ShareDefine.Def_Campaign_Type_StoneLV, ShareDefine.Def_Campaign_Type_FightPower, 
+                            ShareDefine.Def_Campaign_Type_RuneLV, ShareDefine.Def_Campaign_Type_LingGen, ShareDefine.Def_Campaign_Type_StarLV] and value < recordData:
         GameWorld.DebugLog("    开服活动数据小于历史记录, 不更新 campaignType=%s,recordData=%s,updValue=%s" 
                            % (campaignType, recordData, value), curPlayer.GetPlayerID())
         return
@@ -132,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)
@@ -158,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("    已经在查询中...")
@@ -208,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):
@@ -224,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):
@@ -261,6 +306,7 @@
     return
 
 def DoGiveOSCBillAward(curPlayer, awardResultList):
+    ## 给排行奖励
     campTypeList, isEndMail, queryResultList = awardResultList
     if len(campTypeList) != len(queryResultList):
         return
@@ -275,6 +321,8 @@
         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):
@@ -305,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):
@@ -331,7 +379,7 @@
         for itemInfo in giveItemList:
             itemID, itemCount = itemInfo[:2]
             isBind = itemInfo[2] if len(itemInfo) > 2 else 1
-            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], 
+            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem], 
                                          event=[ChConfig.ItemGive_OpenServerCampaign, True, drDict])
     return
 
@@ -358,5 +406,11 @@
     NetPackCommon.SendFakePack(curPlayer, oscAwardListPack)
     return
 
-
+def UpdOpenServerCampaignLingGenData(curPlayer):
+    # 记录开服活动数据
+    totalLingGen = curPlayer.GetFreePoint() + PlayerControl.GetMetal(curPlayer) + PlayerControl.GetWood(curPlayer) + \
+                    PlayerControl.GetWater(curPlayer) + PlayerControl.GetFire(curPlayer) + PlayerControl.GetEarth(curPlayer)
+    #GameWorld.DebugLog("总灵根: %s" % totalLingGen)
+    UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_LingGen, totalLingGen)
+    return
 

--
Gitblit v1.8.0