From 49070a560884ed182b8fb8ca8d5b515c6305fa7c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 27 三月 2024 14:45:53 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(优化强化灵兽、弱化灵兽、强化治疗、弱化治疗属性对灵宠治疗技能值的计算规则)

---
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py |  104 ++++++++++++++++++++++++++++++++--------------------
 1 files changed, 64 insertions(+), 40 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
index 9a5ae44..8cbc53c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
@@ -15,11 +15,13 @@
 #"""Version = 2019-01-29 16:00"""
 #-------------------------------------------------------------------------------
 
-import PlayerFamilyRedPacket
-import ShareDefine
 import GameWorld
 import IpyGameDataPY
 import PlayerDBGSEvent
+import PlayerFamilyRedPacket
+import ChPyNetSendPack
+import NetPackCommon
+import ShareDefine
 
 
 ## GM命令执行入口
@@ -28,52 +30,74 @@
 #  @return None or True
 #  @remarks 函数详细说明.
 def OnExec(curPlayer, paramList):
+    GameWorld.DebugLog("执行GameServer->SetRedPacket: %s" % paramList)
     if not paramList:
+#        GameWorld.DebugAnswer(curPlayer, "---------------------------")
+#        GameWorld.DebugAnswer(curPlayer, "清所有红包:SetRedPacket 0")
+#        GameWorld.DebugAnswer(curPlayer, "清指定红包:SetRedPacket 0 类型A 类型B ...")
+#        GameWorld.DebugAnswer(curPlayer, "发指定红包:SetRedPacket 1 红包编号 个数")
+#        GameWorld.DebugAnswer(curPlayer, "设置抢红包:SetRedPacket 2 红包功能  可抢数 已抢额度")
+#        GameWorld.DebugAnswer(curPlayer, "红包功能:1-开服红包;2-节日红包")
         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 paramA == 0:
-        PlayerFamilyRedPacket.g_allRecordDict = {}
-        PlayerFamilyRedPacket.g_grabDataDict = {}
-        PlayerFamilyRedPacket.g_redPackCountDict = {}
+        delRedIDList = []
+        delTypeList = paramList[1:]
+        redpacketMgr = PlayerFamilyRedPacket.GetRedpacketMgr()
+        for redPacketID, redPacketObj in redpacketMgr.allRedPacketDict.items():
+            getWay = redPacketObj.getWay
+            if delTypeList and getWay not in delTypeList:
+                continue
+            delRedIDList.append(redPacketID)
+            redpacketMgr.allRedPacketDict.pop(redPacketID)
+            familyID = redPacketObj.familyID
+            if familyID in redpacketMgr.familyRedPacketDict:
+                redpacketMgr.DelFamilyRedPacketID(familyID, redPacketID)
+            redpacketMgr.DelActiveRedPacketID(getWay, redPacketID)
+            for playerID in redpacketMgr.playerNosendRedPacketIDInfo.keys():
+                redpacketMgr.DelPlayerNosendRedPacketID(playerID, getWay, redPacketID)
+            for playerID in redpacketMgr.playerCanGetRedPacketIDInfo.keys():
+                redpacketMgr.DelPlayerCanGetRedPacketID(playerID, getWay, redPacketID)
+            if redPacketID in redpacketMgr.notifyAllServerRedPacketIDList:
+                redpacketMgr.notifyAllServerRedPacketIDList.remove(redPacketID)
+                
+        __ResetSendState(delTypeList)
+        GameWorld.DebugAnswer(curPlayer, "清除类型红包OK!%s,条数:%s" % (delTypeList, len(delRedIDList)))
         
-        universalRecMgr = GameWorld.GetUniversalRecMgr()
-        # 清除所有类型红包
-        if paramB == 0:
-            universalRecMgr.Delete(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord)
-            __ResetSendState([])
-            GameWorld.DebugAnswer(curPlayer, "清除所有类型红包OK!")
+        if delRedIDList:
+            sendPack = ChPyNetSendPack.tagGCRedPacketDel()
+            sendPack.DelRedPacketID = delRedIDList
+            sendPack.Cnt = len(delRedIDList)
             
-        # 清除指定类型红包
-        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:
+            playerManager = GameWorld.GetPlayerManager()
+            for index in xrange(playerManager.GetPlayerCount()):
+                curPlayer = playerManager.GetPlayerByIndex(index)
+                if not curPlayer.GetID():
                     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
-    
-    
+                NetPackCommon.SendFakePack(curPlayer, sendPack)
+                
+    elif paramA == 1:
+        redPackID = paramList[1] if len(paramList) > 1 else 0
+        sendCount = paramList[2] if len(paramList) > 2 else 0
+        sendCount = min(100, sendCount)
+        ipyData = IpyGameDataPY.GetIpyGameData('FamilyRedPack', redPackID)
+        if not ipyData:
+            return
+        getType = ipyData.GetGetType()
+        wayType = PlayerFamilyRedPacket.GetRedPackGetWayType(getType)
+        if wayType == ShareDefine.RedPackWayType_Family:
+            return
+        openTime = ipyData.GetPacketOpenTime() # 如果有指定发放时间的
+        if openTime:
+            sendCount = 1
+        for _ in xrange(sendCount):
+            PlayerFamilyRedPacket.CreateSystemRedPacket(redPackID)
+        GameWorld.DebugAnswer(curPlayer, "成功发送红包编号:%s 共:%s个" % (redPackID, sendCount))
+        
+    else:
+        GameWorld.DebugAnswer(curPlayer, "红包命令参数错误!")
+        
     return
 
 def __ResetSendState(delTypeList):

--
Gitblit v1.8.0