8901 【BT2】【后端】全服红包(修改红包GM命令;修复限制下发全服红包补充可领红包逻辑)
5个文件已修改
269 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetRedPacket.py
@@ -15,11 +15,12 @@
#"""Version = 2019-01-29 16:00"""
#-------------------------------------------------------------------------------
import PlayerFamilyRedPacket
import ShareDefine
import GameWorld
import IpyGameDataPY
import PlayerDBGSEvent
import PlayerFamilyRedPacket
import ChPyNetSendPack
import NetPackCommon
## GM命令执行入口
@@ -28,52 +29,66 @@
#  @return None or True
#  @remarks 函数详细说明.
def OnExec(curPlayer, paramList):
    GameWorld.DebugLog("执行GameServer->SetRedPacket: %s" % paramList)
    if not paramList:
#        GameWorld.DebugAnswer(curPlayer, "清除所有类型红包:SetRedPacket 0")
#        GameWorld.DebugAnswer(curPlayer, "清除指定类型红包:SetRedPacket 0 类型A 类型B ...")
#        GameWorld.DebugAnswer(curPlayer, "发送全服系统红包:SetRedPacket 36 红包编号 个数")
#        GameWorld.DebugAnswer(curPlayer, "全服系统红包编号:126~130")
#        GameWorld.DebugAnswer(curPlayer, "红包类型:36-全服红包;33-节日成就")
        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 == 36:
        redPackID = paramList[1] if len(paramList) > 1 else 0
        sendCount = paramList[2] if len(paramList) > 2 else 0
        sendCount = min(100, sendCount)
        canSendRedPacketIDList = range(126, 130 + 1) + []
        if redPackID not in canSendRedPacketIDList or not sendCount:
            GameWorld.DebugAnswer(curPlayer, "发送全服系统红包参数错误!")
            return
        for _ in xrange(sendCount):
            PlayerFamilyRedPacket.CreateSystemRedPacket(redPackID)
        GameWorld.DebugAnswer(curPlayer, "成功发送红包编号:%s 共:%s个" % (redPackID, sendCount))
    else:
        GameWorld.DebugAnswer(curPlayer, "红包命令参数错误!")
    return
def __ResetSendState(delTypeList):
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py
@@ -40,10 +40,6 @@
State_HasAllGot, #全部领完
) = range(4)
g_allRecordDict = {} #{红包ID:recData, ...}
g_grabDataDict = {} #{红包ID:{playerid:[抢到的钱,名字,job]}, ...}
g_redPackCountDict = {} #有限制最大红包个数的类型对应当前红包数 {类型组对应记录编号:当前个数, ...}
DBKey_RedPacketSend = "RedPacketSend_%s" # 系统定时红包是否已发放, 参数红包ID
DBKey_RedPacketSystemDayCount = "RedPacketSystemDayCount" # 全服系统红包已发放个数
@@ -159,17 +155,6 @@
        self.notifyAllServerRedPacketIDList = [] # 其他没有限制下发同步个数的全服红包ID [红包ID, ...]
        return
    
    def PrintData(self, sign=""):
        if sign:
            GameWorld.DebugLog("    === %s ===" % sign)
        GameWorld.DebugLog("    所有红包=%s" % self.allRedPacketDict.keys())
        GameWorld.DebugLog("    仙盟红包=%s" % self.familyRedPacketDict)
        GameWorld.DebugLog("    全服同步全部红包=%s" % self.notifyAllServerRedPacketIDList)
        GameWorld.DebugLog("    全服同步活跃红包=%s" % self.activeRedPacketIDInfo)
        GameWorld.DebugLog("    全服个人未开放红包=%s" % self.playerNosendRedPacketIDInfo)
        GameWorld.DebugLog("    全服个人可领取红包=%s" % self.playerCanGetRedPacketIDInfo)
        return
    def GetRedPacketObj(self, redPacketID, createNew):
        ## 获取红包实例
        redPacketObj = None
@@ -245,6 +230,8 @@
        
    def AddPlayerCanGetRedPacketID(self, playerID, getWay, redPacketID):
        ## 添加玩家可领取的红包ID缓存
        if not playerID:
            return
        if playerID not in self.playerCanGetRedPacketIDInfo:
            self.playerCanGetRedPacketIDInfo[playerID] = {}
        redPacketTypeIDInfo = self.playerCanGetRedPacketIDInfo[playerID]
@@ -253,6 +240,7 @@
        redPacketIDList = redPacketTypeIDInfo[getWay]
        if redPacketID not in redPacketIDList:
            redPacketIDList.append(redPacketID)
            return redPacketIDList
        return
    
    def DelPlayerCanGetRedPacketID(self, playerID, getWay, redPacketID):
@@ -268,6 +256,24 @@
        redPacketIDList.remove(redPacketID)
        # 返回当前类型可用红包ID列表
        return redPacketIDList
def PrintRedPacketData(sign=""):
    redPacketMgr = GetRedpacketMgr()
    if sign:
        GameWorld.DebugLog("    === %s ===" % sign)
    GameWorld.DebugLog("    所有红包:count=%s,=%s" % (len(redPacketMgr.allRedPacketDict), redPacketMgr.allRedPacketDict.keys()))
    for familyID, redIDList in redPacketMgr.familyRedPacketDict.items():
        GameWorld.DebugLog("    仙盟红包:familyID=%s,count=%s,%s" % (familyID, len(redIDList), redIDList))
    GameWorld.DebugLog("    全服全部下发红包=%s" % redPacketMgr.notifyAllServerRedPacketIDList)
    for getWay, redIDList in redPacketMgr.activeRedPacketIDInfo.items():
        GameWorld.DebugLog("    全服公共活跃红包:getWay=%s,count=%s,%s" % (getWay, len(redIDList), redIDList))
    for playerID, redIDInfo in redPacketMgr.playerNosendRedPacketIDInfo.items():
        for getWay, redIDList in redIDInfo.items():
            GameWorld.DebugLog("    全服个人未开放红包:playerID=%s,getWay=%s,count=%s,%s" % (playerID, getWay, len(redIDList), redIDList))
    for playerID, redIDInfo in redPacketMgr.playerCanGetRedPacketIDInfo.items():
        for getWay, redIDList in redIDInfo.items():
            GameWorld.DebugLog("    全服个人可领取红包:playerID=%s,getWay=%s,count=%s,%s" % (playerID, getWay, len(redIDList), redIDList))
    return
    
def GetRedpacketMgr():
    redPacketMgr = PyGameData.g_redPacketMgr
@@ -358,7 +364,7 @@
        
        redPacketObj.grabDict[playerID] = grabObj
        
    redPacketMgr.PrintData("OnServerStart")
    #PrintRedPacketData("OnServerStart")
    return
def OnServerClose():
@@ -398,7 +404,6 @@
        redPacketMgr = GetRedpacketMgr()
        playerID = curPlayer.GetPlayerID()
        redPacketMgr.playerCanGetRedPacketIDInfo[playerID] = {}
        redPacketMgr.PrintData("OnPlayerLogin %s" % playerID)
        
        notifyLimitTypeList = IpyGameDataPY.GetFuncEvalCfg("RedPacketSys", 1)
        maxNotifyCount = IpyGameDataPY.GetFuncCfg("RedPacketSys", 2)
@@ -425,7 +430,7 @@
                    break
            redPacketMgr.playerCanGetRedPacketIDInfo[playerID][getWay] = playerCanGetIDList
            
        redPacketMgr.PrintData("loginOK")
        #PrintRedPacketData("OnPlayerLogin %s" % playerID)
        
    NotifyRedPacketInfo(curPlayer, isLogin=True)
    return
@@ -527,7 +532,7 @@
    playerManager = GameWorld.GetPlayerManager()
    
    # 同步删除的仙盟红包
    GameWorld.DebugLog("同步删除的仙盟红包: %s" % delFamilyRedPacketInfo)
    #GameWorld.DebugLog("同步删除的仙盟红包: %s" % delFamilyRedPacketInfo)
    for familyID, delIDList in delFamilyRedPacketInfo.items():
        family = GameWorld.GetFamilyManager().FindFamily(familyID)
        if not family:
@@ -545,7 +550,7 @@
            NetPackCommon.SendFakePack(curPlayer, sendPack)
            
    # 同步删除个人未开放的全服红包
    GameWorld.DebugLog("同步删除个人未开放的全服红包: %s" % delNosendRedPacketInfo)
    #GameWorld.DebugLog("同步删除个人未开放的全服红包: %s" % delNosendRedPacketInfo)
    for playerID, nosendIDList in delNosendRedPacketInfo.items():
        curPlayer = playerManager.FindPlayerByID(playerID)
        if curPlayer == None or not curPlayer.GetInitOK() or PlayerControl.GetIsTJG(curPlayer):
@@ -556,7 +561,7 @@
        NetPackCommon.SendFakePack(curPlayer, sendPack)
        
    # 同步删除已开放的全服红包
    GameWorld.DebugLog("同步删除已开放的全服红包: %s" % delRedPacketIDList)
    #GameWorld.DebugLog("同步删除已开放的全服红包: %s" % delRedPacketIDList)
    if delRedPacketIDList:
        sendPack = ChPyNetSendPack.tagGCRedPacketDel()
        sendPack.Clear()
@@ -584,7 +589,6 @@
    
    GameWorld.DebugLog("红包状态变更处理: redPacketID=%s,ownerID=%s,familyID=%s,beforeState=%s,state=%s" 
                       % (redPacketID, ownerID, familyID, beforeState, state))
    redPacketMgr.PrintData("a")
    
    notifyPlayerDict = {ownerID:[redPacketID]} # 通知给指定玩家的信息,每个玩家可能不一样
    
@@ -592,7 +596,11 @@
    if family:
        if state in [State_NoSend, State_NoGot]:
            redPacketMgr.AddFamilyRedPacketID(family.GetID(), redPacketID)
        elif state == State_HasAllGot:
            redPacketMgr.DelFamilyRedPacketID(familyID, redPacketID)
    # 除仙盟红包外,以下是全服红包的相关处理
    # 2. 全服未开放红包默认只发给个人
    elif state == State_NoSend:
        if not ownerID:
@@ -642,24 +650,14 @@
            nowActiveRedPacketIDList = redPacketMgr.activeRedPacketIDInfo.get(getWay, []) # 当前此类型还可用的公共已开放红包列表
            
            # 检查需要补充红包记录的玩家,采用 减去1  补充1 的模式
            for playerID, typeRedIDDict in redPacketMgr.playerCanGetRedPacketIDInfo.items():
                canGetIDList = redPacketMgr.DelPlayerCanGetRedPacketID(playerID, getWay, redPacketID) # 移出私有已开放红包队列
                if canGetIDList == None:
                    continue
                lastCanGetID = 0 if not canGetIDList else canGetIDList[-1]
                checkIndex = nowActiveRedPacketIDList.index(lastCanGetID) if lastCanGetID in nowActiveRedPacketIDList else 0
                for i in xrange(checkIndex, len(nowActiveRedPacketIDList)):
                    newCanGetRedID = nowActiveRedPacketIDList[i]
                    if newCanGetRedID not in canGetIDList:
                        if redPacketMgr.AddPlayerCanGetRedPacketID(playerID, getWay, newCanGetRedID): # 添加目标玩家私有已开放红包队列
                            notifyPlayerDict[playerID] = [redPacketID, newCanGetRedID]
                            break
            for playerID in redPacketMgr.playerCanGetRedPacketIDInfo.keys():
                notifyRedIDList = DoPlayerReductCanGetRedPacket(playerID, redPacketObj, nowActiveRedPacketIDList)
                if notifyRedIDList:
                    notifyPlayerDict[playerID] = notifyRedIDList
    else:
        return
    
    redPacketMgr.PrintData("b")
    #PrintRedPacketData("StateChange")
    
    syncRedPacketList = [redPacketID]
    playerManager = GameWorld.GetPlayerManager()
@@ -684,11 +682,41 @@
    # 通知指定玩家
    else:
        for playerID, syncRedPacketList in notifyPlayerDict.items():
            if not playerID:
                continue
            player = playerManager.FindPlayerByID(playerID)
            if player == None or not player.GetInitOK() or PlayerControl.GetIsTJG(player):
                continue
            NotifyRedPacketInfo(player, syncRedPacketList)
    return
def DoPlayerReductCanGetRedPacket(playerID, redPacketObj, nowActiveRedPacketIDList=None):
    ## 玩家减少全服限制下发红包可领取个数处理
    ## @return: 需要通知的红包ID列表
    getWay = redPacketObj.getWay
    redPacketID = redPacketObj.redPacketID
    redPacketMgr = GetRedpacketMgr()
    if nowActiveRedPacketIDList == None:
        nowActiveRedPacketIDList = redPacketMgr.activeRedPacketIDInfo.get(getWay, []) # 当前此类型还可用的公共已开放红包列表
    # 检查需要补充红包记录的玩家,采用 减去1  补充1 的模式
    canGetIDList = redPacketMgr.DelPlayerCanGetRedPacketID(playerID, getWay, redPacketID) # 移出私有已开放红包队列
    if canGetIDList == None:
        return
    lastCanGetID = 0 if not canGetIDList else canGetIDList[-1]
    checkIndex = nowActiveRedPacketIDList.index(lastCanGetID) if lastCanGetID in nowActiveRedPacketIDList else 0
    for i in xrange(checkIndex + 1, len(nowActiveRedPacketIDList)):
        newCanGetRedID = nowActiveRedPacketIDList[i]
        newRedPacketObj = redPacketMgr.GetRedPacketObj(newCanGetRedID, False)
        if playerID in newRedPacketObj.grabDict:
            continue
        if newCanGetRedID not in canGetIDList:
            if redPacketMgr.AddPlayerCanGetRedPacketID(playerID, getWay, newCanGetRedID): # 添加目标玩家私有已开放红包队列
                return [redPacketID, newCanGetRedID]
    return [redPacketID]
def DelRedPackByFamilyID(delfamilyID):
    ## 删除仙盟的时候才需要删除红包,所以这里不做通知,重新加入仙盟时会重新同步一次 isAll 的情况
@@ -961,7 +989,7 @@
#        packetCnt = max(packetCnt, commonCntLimit)
    
    if outputNum < packetCnt:
        GameWorld.DebugLog("    生成新仙盟红包 红包额度不能低于红包个数!outputNum=%s,redCnt=%s" % (outputNum, packetCnt))
        GameWorld.DebugLog("    生成新仙盟红包 红包额度不能低该红包个数!outputNum=%s,redCnt=%s" % (outputNum, packetCnt))
        return
    job = curPlayer.GetJob()
    jobRank = 0
@@ -1050,7 +1078,7 @@
    return redPacketObj
def SendFamilyRedPacket(msgList):
    '''发系统赠送的红包,该红包已存在,只是状态未发放,由归属玩家自由选择发放时机'''
    '''开放红包可领取,该红包已存在,只是状态未发放,由归属玩家自由选择发放时机'''
    playerID, redPacketID, packetCnt, isAnonymous = msgList
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
    if not curPlayer:
@@ -1101,7 +1129,7 @@
    redPacketMgr = GetRedpacketMgr()
    redPacketObj = redPacketMgr.GetRedPacketObj(redPacketID, False)
    if not redPacketObj:
        PlayerControl.NotifyCode(curPlayer, "该红包不存在!")
        GameWorld.ErrLog("红包不存在!")
        return
    
    playerID = curPlayer.GetPlayerID()
@@ -1165,7 +1193,8 @@
    getMoney = eval(getNumformula) if remainPacketCnt > 1 else remainNum
    getMoney = min(getMoney, remainNum)
    remainNum -= getMoney
    GameWorld.DebugLog("    该玩家抢到红包=%s!" % getMoney, playerID)
    GameWorld.DebugLog("    该玩家抢到红包: redPacketID=%s,getWay=%s,getMoney=%s,remainNum=%s"
                       % (redPacketID, getWay, getMoney, remainNum), playerID)
    
    # 新增抢的记录
    grabObj = RedPacketGrab(redPacketID, playerID)
@@ -1180,8 +1209,13 @@
        OnChangeRedPacketState(curFamily, redPacketObj, beforeState)
    else:
        if getWay in IpyGameDataPY.GetFuncEvalCfg("RedPacketSys", 1):
            redPacketMgr.DelPlayerCanGetRedPacketID(playerID, getWay, redPacketID)
        NotifyRedPacketInfo(curPlayer, [redPacketID])
            #PrintRedPacketData("GrabBefore")
            notifyRedIDList = DoPlayerReductCanGetRedPacket(playerID, redPacketObj)
            if notifyRedIDList:
                NotifyRedPacketInfo(curPlayer, notifyRedIDList)
            #PrintRedPacketData("GrabAfter")
        else:
            NotifyRedPacketInfo(curPlayer, [redPacketID])
        
    __NotifyGrabRedPacketInfo(curPlayer, redPacketID, grabRecordDict)
    
@@ -1239,7 +1273,7 @@
    redPacketInfo = []
    playerID = curPlayer.GetPlayerID()
    joinFamilyTime = PlayerFamily.GetPlayerJoinFamilyTime(curPlayer)
    GameWorld.DebugLog("通知红包信息: isLogin=%s,isAll=%s,syncRedPacketIDList=%s" % (isLogin, isAll, syncRedPacketIDList), playerID)
    #GameWorld.DebugLog("通知红包信息: isLogin=%s,isAll=%s,syncRedPacketIDList=%s" % (isLogin, isAll, syncRedPacketIDList), playerID)
    
    for redPacketID in syncRedPacketIDList:
        redPacketObj = redPacketMgr.GetRedPacketObj(redPacketID, False)
@@ -1249,14 +1283,14 @@
        #仙盟红包只通知玩家进入仙盟后生成的红包
        if redPacketObj.familyID:
            if joinFamilyTime and redPacketObj.calcTime < joinFamilyTime:
                GameWorld.DebugLog("    加入仙盟之前的红包不发: redPacketID=%s,joinFamilyTime=%s > %s" % (redPacketID, joinFamilyTime, redPacketObj.calcTime))
                #GameWorld.DebugLog("    加入仙盟之前的红包不发: redPacketID=%s,joinFamilyTime=%s > %s" % (redPacketID, joinFamilyTime, redPacketObj.calcTime))
                continue
            
        state = redPacketObj.state
        if playerID in redPacketObj.grabDict:
            state = State_HasGot
        if isAll and state in [State_HasGot, State_HasAllGot]:
            GameWorld.DebugLog("    已抢或抢完的不发: redPacketID=%s,state=%s" % (redPacketID, state))
            #GameWorld.DebugLog("    已抢或抢完的不发: redPacketID=%s,state=%s" % (redPacketID, state))
            continue
        
        packetInfo = ChPyNetSendPack.tagFRedPacketInfo()
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1875,9 +1875,3 @@
# 节日红包类型
FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
# 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
RedPackMaxCountDict = {1:[RedPackType_OpenServer],
                       2:[RedPackType_FeastSucc],
                       3:[RedPackType_Server],
                       }
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetRedPacket.py
@@ -17,11 +17,11 @@
import GameWorld
import PlayerControl
import ChConfig
import PlayerFamilyRedPacket
import PlayerFeastRedPacket
import IpyGameDataPY
import PlayerSuccess
import ChConfig
## GM命令执行入口
#  @param curPlayer 当前玩家
@@ -30,30 +30,38 @@
#  @remarks 函数详细说明.
def OnExec(curPlayer, paramList):
    if not paramList:
        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-节日红包")
        GameWorld.DebugAnswer(curPlayer, "---------------------------")
        GameWorld.DebugAnswer(curPlayer, "清所有红包:SetRedPacket 0")
        GameWorld.DebugAnswer(curPlayer, "清指定红包:SetRedPacket 0 类型A 类型B ...")
        GameWorld.DebugAnswer(curPlayer, "发全服红包:SetRedPacket 36 红包编号 个数")
        GameWorld.DebugAnswer(curPlayer, "类型:36-全服红包;33-节日成就")
        GameWorld.DebugAnswer(curPlayer, "全服红包编号:126~130")
        GameWorld.DebugAnswer(curPlayer, "设置红包:SetRedPacket 功能  可抢数 已抢额度")
        GameWorld.DebugAnswer(curPlayer, "红包功能:1-开服红包;2-节日红包")
        return
    
    sendGameServer = False
    paramA = paramList[0]
    # 重置所有红包数据
    if paramA == 0:
        sendGameServer = True
        __DOResetSuccRedPack(curPlayer)
        __DoResetRedPackFunc(curPlayer, 1, None, 0)
        __DoResetRedPackFunc(curPlayer, 2, None, 0)
    elif paramA in [1, 2]:
        if len(paramList) == 3:
            redPackFuncType, grabCount, grabMoney = paramList
            __DoResetRedPackFunc(curPlayer, redPackFuncType, grabCount, grabMoney)
            return
    else:
        sendGameServer = True
    if sendGameServer:
        paramStr = ""
        for param in paramList:
            paramStr += " %s" % param
        curPlayer.GameServer_GMCmd("SetRedPacket%s" % paramStr) # 发送到GameServer清除红包
        return
    if len(paramList) == 3:
        redPackFuncType, grabCount, grabMoney = paramList
        __DoResetRedPackFunc(curPlayer, redPackFuncType, grabCount, grabMoney)
        return
    return
def __DOResetSuccRedPack(curPlayer):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1875,9 +1875,3 @@
# 节日红包类型
FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
# 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
RedPackMaxCountDict = {1:[RedPackType_OpenServer],
                       2:[RedPackType_FeastSucc],
                       3:[RedPackType_Server],
                       }