From 7edbbb07b1e442a11a65c76b48f8238ffb520d79 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 三月 2020 12:05:27 +0800
Subject: [PATCH] 8399 每日灵石礼包修改(改为运营活动)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDailyGiftbag.py |  245 +++++++++++++++++++++++++++++++++++++++++++++++++
 PyNetPack                                                                                        |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py               |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py           |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py         |    7 +
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                    |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    4 
 8 files changed, 270 insertions(+), 5 deletions(-)

diff --git a/PyNetPack b/PyNetPack
index 5d2c941..8f2ab74 160000
--- a/PyNetPack
+++ b/PyNetPack
@@ -1 +1 @@
-Subproject commit 5d2c941bb636d7725df79f71f03afb2375bb2db8
+Subproject commit 8f2ab740c1e7139456629265d52d237a273b8177
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 7523028..debc9a8 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -204,6 +204,7 @@
 OperationActionName_SpringSale = "ActSpringSale" # 限时特惠活动
 OperationActionName_BossReborn = "ActBossReborn" # BOSS复活活动
 OperationActionName_FlashGiftbag = "ActFlashGiftbag" # 限时礼包活动
+OperationActionName_DailyGiftbag = "ActDailyGiftbag" # 每日礼包活动
 OperationActionName_FairyCeremony = "ActFairyCeremony" # 仙界盛典活动
 OperationActionName_NewFairyCeremony = "ActNewFairyCeremony" # 仙界盛典活动
 OperationActionName_RealmPoint = "ActRealmPoint" # 多倍修行点活动
@@ -225,7 +226,8 @@
                            OperationActionName_RealmPoint, OperationActionName_FlashSale,
                            OperationActionName_WishingWell, OperationActionName_TotalRecharge, 
                            OperationActionName_WeekParty, OperationActionName_LoginAward, 
-                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure] \
+                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
+                           OperationActionName_DailyGiftbag] \
                            + FeastOperationActionNameList
 #需要记录开启活动时的世界等级的运营活动
 NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 16143ec..224bf86 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3699,6 +3699,10 @@
 Def_PDict_FlashGiftbagBuyCount = "FlashGiftbagBuyCount_%s"  # 限时礼包已购买次数,参数(礼包ID)
 Def_PDict_FlashGiftbagMailState = "FlashGiftbagMailState"  # 玩家身上的活动更新提醒邮件状态
 
+#每日礼包活动
+Def_PDict_DailyGiftbagID = "DailyGiftbagID"  # 玩家身上的每日礼包活动ID,唯一标识,取活动开始日期time
+Def_PDict_DailyGiftbagBuyCount = "DailyGiftbagBuyCount_%s"  # 每日礼包已购买次数,参数(礼包ID)
+
 #BOSS复活
 Def_PDict_BossRebornID = "BossRebornID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
 Def_PDict_BossRebornTemplateID = "BossRebornTemplateID"  # 玩家身上的BOSS复活模板ID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index f16d602..9273980 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -97,6 +97,7 @@
 import GameLogic_XMZZ
 import PlayerFlashSale
 import PlayerFlashGiftbag
+import PlayerDailyGiftbag
 import PlayerCostRebate
 import PlayerActTotalRecharge
 import PlayerSpringSale
@@ -634,6 +635,8 @@
     PlayerSpringSale.OnPlayerLogin(curPlayer)
     #限时礼包
     PlayerFlashGiftbag.OnPlayerLogin(curPlayer)
+    #每日礼包
+    PlayerDailyGiftbag.OnPlayerLogin(curPlayer)
     #限时抢购
     PlayerFlashSale.OnPlayerLogin(curPlayer)
     # 世界boss
@@ -5296,7 +5299,7 @@
         PlayerActivity.GetActivityPlaceReward(curPlayer)
     # 每日免费直购礼包
     elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
-        PlayerCoin.OnGetDayFreeGoldGift(curPlayer)
+        PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
     # 仙盟活跃度奖励
     elif rewardType == ChConfig.Def_RewardType_FamilyActivity:
         PlayerFamily.GetFamilyActivityAward(curPlayer, dataEx)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index 6a42394..7eaddd0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -43,6 +43,7 @@
 import IpyGameDataPY
 import ShareDefine
 import PlayerFlashGiftbag
+import PlayerDailyGiftbag
 import PlayerFairyCeremony
 import PlayerNewFairyCeremony
 import PlayerGoldGift
@@ -218,7 +219,11 @@
         addGold, prizeGold, giveItemList, notifyMark = ctgResultInfo
         
     elif ipyData.GetGiftbagID():
-        if not PlayerFlashGiftbag.OnPlayerOrderGiftbag(curPlayer, [ipyData.GetGiftbagID()], addDRDict):
+        giftbagID = ipyData.GetGiftbagID()
+        if 100 <= giftbagID < 199:
+            if not PlayerDailyGiftbag.OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict):
+                return
+        elif not PlayerFlashGiftbag.OnPlayerOrderGiftbag(curPlayer, [ipyData.GetGiftbagID()], addDRDict):
             return
     else:
         #用于支付其他的商品,待扩展...
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDailyGiftbag.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDailyGiftbag.py
new file mode 100644
index 0000000..48c7724
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDailyGiftbag.py
@@ -0,0 +1,245 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerDailyGiftbag
+#
+# @todo:每日礼包
+# @author hxp
+# @date 2020年3月12日
+# @version 1.0
+#
+# 详细描述: 每日礼包
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2020年3月12日 12:00"""
+#-------------------------------------------------------------------------------
+
+import PyGameData
+import ShareDefine
+import PlayerControl
+import IpyGameDataPY
+import NetPackCommon
+import ChPyNetSendPack
+import DataRecordPack
+import ItemControler
+import IPY_GameWorld
+import ItemCommon
+import GameWorld
+import ChConfig
+
+def OnPlayerLogin(curPlayer):
+    __CheckPlayerDailyGiftbagAction(curPlayer)
+    return
+
+def RefreshDailyGiftbagActionInfo():
+    ## 收到GameServer同步的活动信息,刷新活动信息
+    playerManager = GameWorld.GetPlayerManager()
+    for index in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(index)
+        if curPlayer.GetID() == 0:
+            continue
+        __CheckPlayerDailyGiftbagAction(curPlayer)
+    return
+
+def __CheckPlayerDailyGiftbagAction(curPlayer):
+    ## 检查玩家每日礼包活动数据信息
+    
+    playerID = curPlayer.GetPlayerID()
+    
+    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
+    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
+    state = actInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+    if not state or not cfgID:
+        return
+    
+    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagID) # 玩家身上的活动ID
+    cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
+    if not cfgIpyData:
+        return
+    giftbagType = cfgIpyData.GetGiftbagType()
+    
+    isReset = False
+    if actID != playerActID:
+        isReset = True
+        __ResetGiftbagItemBuyCount(curPlayer, giftbagType)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagID, actID)
+        GameWorld.DebugLog("每日礼包重置! actID=%s,playerActID=%s,state=%s,giftbagType=%s" % (actID, playerActID, state, giftbagType), playerID)
+    else:
+        GameWorld.DebugLog("每日礼包活动ID不变,不处理!", curPlayer.GetPlayerID())
+        SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
+        
+    Sync_DailyGiftbagActionInfo(curPlayer)
+    return isReset
+
+def __ResetGiftbagItemBuyCount(curPlayer, giftbagType):
+    ##重置每日礼包限购物品次数
+    
+    giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
+    if not giftbagIpyDataList:
+        return
+    for giftIpyData in giftbagIpyDataList:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagBuyCount % giftIpyData.GetGiftbagID(), 0)
+    SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
+    return
+
+def OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict, isCTG=True):
+    ## 玩家订购每日礼包
+    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
+    if not actInfo:
+        if isCTG:
+            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag action info is null!", addDRDict)
+        return
+    
+    state = actInfo.get(ShareDefine.ActKey_State, 0)
+    if not state:
+        if isCTG:
+            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag state is 0!", addDRDict)
+        return
+    
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+    cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
+    if not cfgIpyData:
+        if isCTG:
+            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag GiftbagType is null!", addDRDict)
+        return
+    giftbagType = cfgIpyData.GetGiftbagType()
+    
+    giftbagIpyData = IpyGameDataPY.GetIpyGameData("DailyGiftbag", giftbagType, giftbagID)
+    if not giftbagIpyData:
+        if isCTG:
+            DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag giftbagType=%s giftbagID=%s can not found!" 
+                                       % (giftbagType, giftbagID), addDRDict)
+        return
+    
+    giftItemList = __GetJobItemList(giftbagIpyData.GetGiftItemList(), curPlayer.GetJob())
+    addDRDict.update({"giftbagType":giftbagType, "giftbagID":giftbagID, "giftItemList":giftItemList})
+    buyCountLimit = giftbagIpyData.GetBuyCountLimit()
+    buyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID)
+    if buyCountLimit:
+        addDRDict.update({"buyCountLimit":buyCountLimit, "buyCount":buyCount})
+        if buyCount >= buyCountLimit:
+            if isCTG:
+                DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag Pay count limit !buyCount=%s,buyCountLimit=%s" 
+                                           % (buyCount, buyCountLimit), addDRDict)
+            return
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID, buyCount + 1)
+    
+    if giftItemList:
+        needSpace = len(giftItemList)
+        emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
+        if emptySpace < needSpace:
+            PlayerControl.SendMailByKey("", [curPlayer.GetPlayerID()], giftItemList)
+        else:
+            for itemID, itemCount, isBind in giftItemList:
+                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem], 
+                                             event=[ChConfig.ItemGive_CTG, True, addDRDict])
+                
+    SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
+    return True
+
+def OnGetDailyFreeGiftbag(curPlayer):
+    ## 领取每日免费直购礼包
+    giftbagID = 0 # 免费礼包ID固定为0
+    addDRDict = {}
+    OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict, False)
+    return
+
+def __GetJobItemList(itemList, job):
+    jobItemList = []
+    for itemID, itemCnt, isBind in itemList:
+        if type(itemID) == int:
+            jobItemList.append([itemID, itemCnt, isBind])
+        elif job in itemID:
+            jobItemList.append([itemID[job], itemCnt, isBind])
+    return jobItemList
+
+def SyncDailyGiftbagBuyCount(curPlayer, giftbagType):
+    ## 通知每日礼包玩家活动信息
+    
+    giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
+    if not giftbagIpyDataList:
+        return
+    
+    giftbagBuyInfo = ChPyNetSendPack.tagMCDailyGiftbagPlayerInfo()
+    giftbagBuyInfo.BuyCountList = []
+    for giftIpyData in giftbagIpyDataList:
+        giftbagID = giftIpyData.GetGiftbagID()
+        buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID)
+        if buyCnt <= 0:
+            continue
+        buyCountInfo = ChPyNetSendPack.tagMCDailyGiftbagBuyCount()
+        buyCountInfo.GiftbagID = giftbagID
+        buyCountInfo.BuyCount = buyCnt
+        giftbagBuyInfo.BuyCountList.append(buyCountInfo)
+    giftbagBuyInfo.Count = len(giftbagBuyInfo.BuyCountList)
+    NetPackCommon.SendFakePack(curPlayer, giftbagBuyInfo)
+    return
+
+def Sync_DailyGiftbagActionInfo(curPlayer):
+    ## 通知每日礼包活动信息
+    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
+    if not actInfo:
+        return
+    
+    if not actInfo.get(ShareDefine.ActKey_State):
+        return
+    
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+    if not cfgID:
+        return
+    
+    cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
+    if not cfgIpyData:
+        return
+    giftbagType = cfgIpyData.GetGiftbagType()
+    
+    giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
+    if not giftbagIpyDataList:
+        return
+    
+    # 取玩家APPID,混服使用
+    appID = GameWorld.GetPlayerPlatform(curPlayer)
+    
+    packInfo = ChPyNetSendPack.tagMCDailyGiftbagInfo()
+    packInfo.GiftbagInfo = []
+    
+    for giftIpyData in giftbagIpyDataList:
+        giftbagID = giftIpyData.GetGiftbagID()
+        orderIpyData = GetGiftbagIDOrderInfoIpyData(giftbagID, appID)
+        
+        giftBag = ChPyNetSendPack.tagMCDailyGiftbag()
+        giftBag.GiftID = giftbagID
+        giftBag.OrderInfo = "" if not orderIpyData else orderIpyData.GetOrderInfo()
+        giftBag.OrderInfoLen = len(giftBag.OrderInfo)
+        giftBag.BuyCountLimit = giftIpyData.GetBuyCountLimit()
+        giftBag.RMB = 0 if not orderIpyData else int(orderIpyData.GetPayRMBNum())
+        giftBag.ItemInfo = []
+        for itemID, itemCount, isBind in __GetJobItemList(giftIpyData.GetGiftItemList(), curPlayer.GetJob()):
+            item = ChPyNetSendPack.tagMCDailyGiftbagItem()
+            item.ItemID = itemID
+            item.ItemCount = itemCount
+            giftBag.ItemInfo.append(item)
+        giftBag.GiftItemCount = len(giftBag.ItemInfo)
+        packInfo.GiftbagInfo.append(giftBag)
+        
+    packInfo.GiftbagCount = len(packInfo.GiftbagInfo)
+    NetPackCommon.SendFakePack(curPlayer, packInfo)
+    return
+
+def GetGiftbagIDOrderInfoIpyData(giftbagID, appID):
+    ## 获取礼包ID对应数据配置
+    key = "GiftbagIpyDataDict"
+    GiftbagIpyDataDict = IpyGameDataPY.GetConfigEx(key)
+    if not GiftbagIpyDataDict:
+        GiftbagIpyDataDict = {}
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for i in xrange(ipyDataMgr.GetOrderInfoCount()):
+            ipyData = ipyDataMgr.GetOrderInfoByIndex(i)
+            if not ipyData.GetGiftbagID():
+                continue
+            GiftbagIpyDataDict[(ipyData.GetGiftbagID(), ipyData.GetAppID())] = ipyData
+        IpyGameDataPY.SetConfigEx(key, GiftbagIpyDataDict)
+    return GiftbagIpyDataDict.get((giftbagID, appID))
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 230dd3c..8ef3d65 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -81,6 +81,7 @@
 import PlayerFeastWeekParty
 import PlayerActLogin
 import PlayerFlashGiftbag
+import PlayerDailyGiftbag
 import PlayerFairyCeremony
 import PlayerNewFairyCeremony
 import PlayerFeastRedPacket
@@ -1336,6 +1337,9 @@
                 
             elif actionName == ShareDefine.OperationActionName_FlashGiftbag:
                 PlayerFlashGiftbag.RefreshFlashGiftbagActionInfo()
+                
+            elif actionName == ShareDefine.OperationActionName_DailyGiftbag:
+                PlayerDailyGiftbag.RefreshDailyGiftbagActionInfo()
             
             elif actionName == ShareDefine.OperationActionName_FairyCeremony:
                 PlayerFairyCeremony.RefreshOperationAction_FairyCeremony()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 7523028..debc9a8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -204,6 +204,7 @@
 OperationActionName_SpringSale = "ActSpringSale" # 限时特惠活动
 OperationActionName_BossReborn = "ActBossReborn" # BOSS复活活动
 OperationActionName_FlashGiftbag = "ActFlashGiftbag" # 限时礼包活动
+OperationActionName_DailyGiftbag = "ActDailyGiftbag" # 每日礼包活动
 OperationActionName_FairyCeremony = "ActFairyCeremony" # 仙界盛典活动
 OperationActionName_NewFairyCeremony = "ActNewFairyCeremony" # 仙界盛典活动
 OperationActionName_RealmPoint = "ActRealmPoint" # 多倍修行点活动
@@ -225,7 +226,8 @@
                            OperationActionName_RealmPoint, OperationActionName_FlashSale,
                            OperationActionName_WishingWell, OperationActionName_TotalRecharge, 
                            OperationActionName_WeekParty, OperationActionName_LoginAward, 
-                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure] \
+                           OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
+                           OperationActionName_DailyGiftbag] \
                            + FeastOperationActionNameList
 #需要记录开启活动时的世界等级的运营活动
 NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell, 

--
Gitblit v1.8.0