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):