From f6b1972e51bb85ede4dcf4fbc3daf9f660c67cf4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 30 一月 2019 15:40:47 +0800
Subject: [PATCH] 6087 【后端】【1.5.200】春节红包雨活动(广播红包雨;新增红包GM命令 SetRedPacket)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py         |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py              |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py |   20 ++++--
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py                      |   50 +++++++++++++++-
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py                  |   65 +++++++++++----------
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                   |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py       |    2 
 7 files changed, 99 insertions(+), 46 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
index 91c1464..9a5ae44 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
@@ -18,6 +18,8 @@
 import PlayerFamilyRedPacket
 import ShareDefine
 import GameWorld
+import IpyGameDataPY
+import PlayerDBGSEvent
 
 
 ## GM命令执行入口
@@ -29,21 +31,61 @@
     if not paramList:
         return
     
+#    GameWorld.DebugAnswer(curPlayer, "重置所有红包领取:SetRedPacket 0")
+#    GameWorld.DebugAnswer(curPlayer, "清除所有类型红包:SetRedPacket 0 0")
+#    GameWorld.DebugAnswer(curPlayer, "清除指定类型红包:SetRedPacket 0 类型A 类型B ...")
+    
+    paramA = paramList[0]
+    paramB = paramList[1] if len(paramList) > 1 else None
     # 重置所有红包数据
-    if len(paramList) == 1 and paramList[0] == 0:
-        GameWorld.DebugAnswer(curPlayer, "清除所有红包领取记录")
+    if paramA == 0:
         PlayerFamilyRedPacket.g_allRecordDict = {}
         PlayerFamilyRedPacket.g_grabDataDict = {}
         PlayerFamilyRedPacket.g_redPackCountDict = {}
         
-        recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord
         universalRecMgr = GameWorld.GetUniversalRecMgr()
-        universalRecMgr.Delete(recordType)
+        # 清除所有类型红包
+        if paramB == 0:
+            universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord)
+            __ResetSendState([])
+            GameWorld.DebugAnswer(curPlayer, "清除所有类型红包OK!")
+            
+        # 清除指定类型红包
+        elif paramB:
+            delTypeList = paramList[1:]
+            allRecordList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord)
+            delCount = 0
+            for index in xrange(allRecordList.Count()):
+                universalRecData = allRecordList.At(index - delCount)
+                strValue1 = universalRecData.GetStrValue1()
+                strValue1List = strValue1.split('|')
+                getWay = int(strValue1List[3])
+                if getWay not in delTypeList:
+                    continue
+                allRecordList.Delete(index)
+                delCount += 1
+            __ResetSendState(delTypeList)
+            GameWorld.DebugAnswer(curPlayer, "清除指定类型红包OK!%s,条数:%s" % (delTypeList, delCount))
+            
+        # 清除抢的记录
+        universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord)
         PlayerFamilyRedPacket.NotifyRedPacketInfo(curPlayer)
+        GameWorld.DebugAnswer(curPlayer, "清除所有红包领取记录OK!")
         return
     
     
     return
 
+def __ResetSendState(delTypeList):
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in xrange(ipyDataMgr.GetFamilyRedPackCount()):
+        ipyData = ipyDataMgr.GetFamilyRedPackByIndex(index)
+        if delTypeList and ipyData.GetGetType() not in delTypeList:
+            continue
+        redPackID = ipyData.GetID()
+        if PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerFamilyRedPacket.DBKey_RedPacketSend % redPackID):
+            PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerFamilyRedPacket.DBKey_RedPacketSend % redPackID, 0)
+    return
+
 
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 74a25aa..3c5ea40 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -473,8 +473,8 @@
                 PlayerNewFairyCeremony.ResetNewFairyCeremony()
             elif actName == ShareDefine.OperationActionName_FeastRedPacket:
                 #重置节日红包
-                if ipyData and dayIndex == 0:
-                    PlayerFamilyRedPacket.OnResetFeastRedPacket(ipyData)
+                if ipyData:
+                    PlayerFamilyRedPacket.OnResetFeastRedPacket(ipyData, dayIndex)
             elif actName == ShareDefine.OperationActionName_FlashSale:
                 #限时抢购重置购买次数 本次活动每场不能重复
                 #dayIndex = sendMapServerMsgDict.get(ShareDefine.ActKey_DayIndex, 0)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
index 88e6adb..7264f0b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
@@ -87,19 +87,23 @@
 
 ##---------------------------------------- 节日红包 -----------------------------------------------
 
-def OnResetFeastRedPacket(ipyData):
+def OnResetFeastRedPacket(ipyData, dayIndex):
     ## 重置节日红包状态
     
     if not ipyData:
         return
     
     dayRedPackIDList = ipyData.GetRedPacketIDList()
-    GameWorld.DebugLog("重置红包发放状态: dayRedPackIDList=%s" % dayRedPackIDList)
-    for redPackIDList in dayRedPackIDList:
-        for redPackID in redPackIDList:
-            if PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID):
-                PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 0)
-                
+    GameWorld.Log("重置节日红包发放状态: dayRedPackIDList=%s, dayIndex=%s" % (dayRedPackIDList, dayIndex))
+    if dayIndex < 0 or dayIndex >= len(dayRedPackIDList):
+        GameWorld.ErrLog("当前节日天索引没有配配置系统红包ID! dayRedPackIDList=%s, dayIndex=%s" % (dayRedPackIDList, dayIndex))
+        return
+    
+    for redPackID in dayRedPackIDList[dayIndex]:
+        GameWorld.Log("    重置节日红包发放状态: redPackID=%s" % redPackID)
+        if PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID):
+            PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 0)
+            
     return
 
 def __GetTodayRedPacketByTimeList():
@@ -221,12 +225,9 @@
     jobRank = 0
     playerName = ""
     playerID = 0
-    familyID = 0
     family = None
     
-    redPacketRecData = __SaveNewRedRecord(familyID, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime)
-    #通知
-    __NotifyFamilyRedPacketInfo(family, redPacketRecData, [])
+    __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime)
     return
 
 ## 生成新红包
@@ -254,22 +255,7 @@
     job = curPlayer.GetJob()
     jobRank = PlayerControl.GetJobRank(curPlayer)
     playerName = curPlayer.GetName()
-    redPacketRecData = __SaveNewRedRecord(familyID, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, wishStr)
-    #通知
-    if redPacketRecData:
-        __NotifyFamilyRedPacketInfo(family, redPacketRecData, [])
-        if not familyID:
-            if not PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket):
-                PlayerControl.WorldNotify(0, 'OpenRedBag2', [playerName, data, outputNum])
-                PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket, 1)
-            elif data in IpyGameDataPY.GetFuncEvalCfg('OSRSuccess'):
-                PlayerControl.WorldNotify(0, 'OpenRedBag3', [playerName, data, outputNum])
-            #大于200额度的红包
-            getTypeRainDict = IpyGameDataPY.GetFuncEvalCfg('OpenServerRedPacketRain', 2, {})
-            if str(getType) in getTypeRainDict:
-                PlayerControl.WorldNotify(0, getTypeRainDict[str(getType)])  
-            elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain'):
-                PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType])
+    __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, wishStr, data=data)
     return
 
 def CreatNewFamilyRedPacket(family, playerID, redPackID):
@@ -293,13 +279,11 @@
     jobRank = 0
     playerName = member.GetName()
     
-    redPacketRecData = __SaveNewRedRecord(familyID, playerID, playerName, job, jobRank, getType, moneyType, outputNum, 0)
-    #通知
-    __NotifyFamilyRedPacketInfo(family, redPacketRecData, [])
+    __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, 0)
     return
 
 ## 记录新红包数据
-def __SaveNewRedRecord(familyID, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None):
+def __SaveNewRedRecord(family, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None, data=0):
     global g_allRecordDict
     global g_redPackCountDict
     job = job + jobRank * 10   #个位是job 十位百位是jobrank
@@ -314,6 +298,7 @@
             GameWorld.DebugLog("当前红包数: g_redPackCountDict=%s" % g_redPackCountDict)
             break
         
+    familyID = family.GetID() if family else 0
     recData = recordList.AddRec()
     
     
@@ -337,6 +322,24 @@
     recData.SetStrValue3(wishStr)#祝福语
     g_allRecordDict[redPacketID] = recData
     GameWorld.Log("生成新的红包: familyID=%s,redPacketID=%s,ownerid=%s,ownername=%s,getType=%s,moneyType=%s,outputNum=%s,packetCnt=%s" % (familyID, redPacketID, ownerid, playerName, getType, moneyType, outputNum, packetCnt))
+    
+    #通知
+    __NotifyFamilyRedPacketInfo(family, recData, [])
+    if getType == ShareDefine.RedPackType_OpenServer:
+        if not PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket):
+            PlayerControl.WorldNotify(0, 'OpenRedBag2', [playerName, data, outputNum])
+            PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket, 1)
+        elif data in IpyGameDataPY.GetFuncEvalCfg('OSRSuccess'):
+            PlayerControl.WorldNotify(0, 'OpenRedBag3', [playerName, data, outputNum])
+            
+    if not familyID:
+        #大于200额度的红包
+        getTypeRainDict = IpyGameDataPY.GetFuncEvalCfg('OpenServerRedPacketRain', 2, {})
+        if str(getType) in getTypeRainDict:
+            PlayerControl.WorldNotify(0, getTypeRainDict[str(getType)])  
+        elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain'):
+            PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType])   
+            
     return recData
 
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index a91cb04..6680a4f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1873,6 +1873,6 @@
 FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
 # 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
 RedPackMaxCountDict = {1:[RedPackType_OpenServer],
-                       2:[RedPackType_FeastSysBig, RedPackType_FeastSysSmall],
+                       2:[RedPackType_FeastSucc],
                        }
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py
index b93b483..3e4e9f2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py
@@ -19,6 +19,7 @@
 import PlayerControl
 import ChConfig
 import PlayerFamilyRedPacket
+import PlayerFeastRedPacket
 import IpyGameDataPY
 import PlayerSuccess
 
@@ -29,17 +30,23 @@
 #  @remarks 函数详细说明.
 def OnExec(curPlayer, paramList):
     if not paramList:
-        GameWorld.DebugAnswer(curPlayer, "重置红包:SetRedPacket 0")
-        GameWorld.DebugAnswer(curPlayer, "SetRedPacket 红包功能  可抢个数 已抢额度")
+        GameWorld.DebugAnswer(curPlayer, "重置所有红包领取:SetRedPacket 0")
+        GameWorld.DebugAnswer(curPlayer, "清除所有类型红包:SetRedPacket 0 0")
+        GameWorld.DebugAnswer(curPlayer, "清除指定类型红包:SetRedPacket 0 类型A 类型B ...")
+        GameWorld.DebugAnswer(curPlayer, "设置功能红包数据:SetRedPacket 红包功能  可抢个数 已抢额度")
         GameWorld.DebugAnswer(curPlayer, "红包功能: 1-开服红包;2-节日红包")
         return
     
+    paramA = paramList[0]
     # 重置所有红包数据
-    if len(paramList) == 1 and paramList[0] == 0:
+    if paramA == 0:
         __DOResetSuccRedPack(curPlayer)
         __DoResetRedPackFunc(curPlayer, 1, None, 0)
         __DoResetRedPackFunc(curPlayer, 2, None, 0)
-        curPlayer.GameServer_GMCmd("SetRedPacket 0") # 发送到GameServer清除红包
+        paramStr = ""
+        for param in paramList:
+            paramStr += " %s" % param
+        curPlayer.GameServer_GMCmd("SetRedPacket%s" % paramStr) # 发送到GameServer清除红包
         return
     
     if len(paramList) == 3:
@@ -84,8 +91,9 @@
     elif redPackFuncType == 2:
         if not isinstance(grabCount, int):
             grabCount = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 1)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketCanGrabCnt, grabCount)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketGrabMoney, grabMoney)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, grabCount)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, grabMoney)
+        PlayerFeastRedPacket.Sync_FeastRedPackInfo(curPlayer)
     return
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index c99aa27..981b4d0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -1269,7 +1269,7 @@
     #成就
     PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick, False)
     #开服红包处理
-    PlayerFamilyRedPacket.ProcessOSRedPacket(curPlayer, tick)
+    #PlayerFamilyRedPacket.ProcessOSRedPacket(curPlayer, tick)
     #限时抢购
     PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
     #地图经验
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index a91cb04..6680a4f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1873,6 +1873,6 @@
 FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
 # 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
 RedPackMaxCountDict = {1:[RedPackType_OpenServer],
-                       2:[RedPackType_FeastSysBig, RedPackType_FeastSysSmall],
+                       2:[RedPackType_FeastSucc],
                        }
 

--
Gitblit v1.8.0