#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package PlayerFamilyRedPacket # # @todo:¼Ò×åºì°ü # @author xdh # @date 2017-08-29 # @version 1.0 # # ÏêϸÃèÊö: ¼Ò×åºì°ü # #--------------------------------------------------------------------- #"""Version = 2017-08-29 18:00""" #--------------------------------------------------------------------- import GameWorld import ChPyNetSendPack import NetPackCommon import ShareDefine import IpyGameDataPY import PlayerDBGSEvent import PlayerUniversalGameRec import PlayerControl import ChConfig import PlayerCompensation import PlayerFamily import time import random #Def_UniversalGameRecType_FamilyRedPacketAllRecord #value1 ºì°üΨһID #value2 ¼Ò×åID #value3 ×ܶî¶È*10+½ðÇ®ÀàÐÍ #value4 ״̬ #value5 ʱ¼ä£¬ÓÃÀ´ÅжÏÊÇ·ñ¹ýÆÚɾ³ýµÄ #strValue1 ´´½¨ÕßID|´´½¨ÕßÃû×Ö|´´½¨ÕßÖ°Òµ|»ñµÃ;¾¶ #strValue2 ¿ÉÇÀ×ܸöÊý #strValue3 ×£¸£Óï #Def_UniversalGameRecType_FamilyRedPacketGrabRecord #value1 ºì°üΨһID #value2 playerID #value3 job #value4 moneyType #value5 getMoney #strValue1 Ãû×Ö ( State_NoSend, #δ·¢ State_NoGot, #δÁìÈ¡ State_HasGot, #ÒÑÁìÈ¡ State_HasAllGot,#È«²¿ÁìÍê )=range(4) g_allRecordDict = {} #{ºì°üID:recData, ...} g_grabDataDict = {} #{ºì°üID:{playerid:[ÇÀµ½µÄÇ®,Ãû×Ö,job]}, ...} g_osRedCnt = 0 #¿ª·þºì°ü¸öÊý ## Íæ¼ÒµÇ¼ # @param None # @return None def OnPlayerLogin(curPlayer): NotifyRedPacketInfo(curPlayer) return ## ¸ôÌì¸üР# @param None # @return None def DoOnDay(): __CheckGrabRecData() return ## Éú³Éкì°ü def CreatFamilyRedPacket(msgList): playerID, getType, packetCnt, moneyType, outputNum, wishStr, state, data = msgList curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) if not curPlayer: return if getType == IpyGameDataPY.GetFuncCfg('OpenServerRedPacketType'): familyID = 0 family = None else: familyID = curPlayer.GetFamilyID() family = GameWorld.GetFamilyManager().FindFamily(familyID) if not family: return packetCnt = min(packetCnt, family.GetCount()) # if getType != 0: # commonCntLimit = IpyGameDataPY.GetFuncCfg('FamilyRedPacketCnt') # packetCnt = max(packetCnt, commonCntLimit) if outputNum < packetCnt: GameWorld.DebugLog(" Éú³ÉÐÂÏÉÃ˺ì°ü ºì°ü¶î¶È²»ÄܵÍÓÚºì°ü¸öÊý£¡outputNum=%s,redCnt=%s" % (outputNum, packetCnt)) return 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¶î¶ÈµÄºì°ü if outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain'): PlayerControl.WorldNotify(0, 'OSRedpackSfx') return def CreatNewFamilyRedPacket(family, playerID, redPackID): '''Íⲿ½Ó¿Ú£¬Éú³ÉÏÉÃËкì°ü''' if not family or not playerID or not redPackID: return ipyData = IpyGameDataPY.GetIpyGameData('FamilyRedPack', redPackID) if not ipyData: return getType = ipyData.GetGetType() moneyType = ipyData.GetMoneyType() outputNum = ipyData.GetMoneyNum() familyID = family.GetID() member = family.FindMember(playerID) if not member: GameWorld.ErrLog("ÏÉÃËûÓиóÉÔ±, ÎÞ·¨·¢·ÅÏÉÃ˺ì°ü!familyID=%s,playerID=%s,redPackID=%s" % (familyID, playerID, redPackID)) return job = member.GetJob() jobRank = 0 playerName = member.GetName() redPacketRecData = __SaveNewRedRecord(familyID, playerID, playerName, job, jobRank, getType, moneyType, outputNum, 0) #֪ͨ __NotifyFamilyRedPacketInfo(family, redPacketRecData, []) return ## ¼Ç¼Ðºì°üÊý¾Ý def __SaveNewRedRecord(familyID, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr=''): global g_allRecordDict global g_osRedCnt job = job + jobRank * 10 #¸öλÊÇjob ʮλ°ÙλÊÇjobrank recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord universalRecMgr = GameWorld.GetUniversalRecMgr() recordList = universalRecMgr.GetTypeList(recordType) if getType == IpyGameDataPY.GetFuncCfg('OpenServerRedPacketType'): if not __CheckOSRedPacketCnt(recordList): return if g_osRedCnt: g_osRedCnt += 1 recData = recordList.AddRec() #ºì°üΨһID ´Ó1¿ªÊ¼ÀÛ¼Æ ³¬¹ý20ÒÚÔòÖØÐ¿ªÊ¼ # ºì°üΨһID DB_RedPacketID = "FamilyRedPacketID" redPacketID = PlayerDBGSEvent.GetDBGSTrig_ByKey(DB_RedPacketID) + 1 if redPacketID >= ChConfig.Def_UpperLimit_DWord: redPacketID = 1 PlayerDBGSEvent.SetDBGSTrig_ByKey(DB_RedPacketID, redPacketID) curTimeNum = int(time.time()) recData.SetTime(curTimeNum) recData.SetValue1(redPacketID) #ºì°üΨһID recData.SetValue2(familyID) #¼Ò×åID recData.SetValue3(moneyType + outputNum * 10) #×ܶî¶È*10+½ðÇ®ÀàÐÍ recData.SetValue4(state) #ÊÇ·ñÒÑ·¢ recData.SetValue5(curTimeNum) recData.SetStrValue1('%s|%s|%s|%s'%(ownerid,playerName,job,getType)) #´´½¨ÕßID|´´½¨ÕßÃû×Ö|´´½¨ÕßÖ°Òµ|;¾¶ recData.SetStrValue2(str(packetCnt))#¿ÉÇÀ×ܸöÊý 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)) return recData def __CheckOSRedPacketCnt(recordList): global g_grabDataDict global g_allRecordDict global g_osRedCnt ##¿ª·þºì°ü¸öÊýÊÇ·ñ´ïÉÏÏÞ openServerRedPacketCnt = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCnt') if g_osRedCnt and g_osRedCnt < openServerRedPacketCnt + 10: return True OpenServerRedPacketType = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketType') allCnt = recordList.Count() curCnt = 0 delRedPacketIDList = [] for index in xrange(allCnt): universalRecData = recordList.At(index) strValue1 = universalRecData.GetStrValue1() strValue1List = strValue1.split('|') getWay = int(strValue1List[3]) if getWay != OpenServerRedPacketType: continue redPacketID = universalRecData.GetValue1() curCnt += 1 if len(delRedPacketIDList) < 10: delRedPacketIDList.append(redPacketID) elif g_osRedCnt: break if not delRedPacketIDList: return True if not g_osRedCnt: g_osRedCnt = curCnt if g_osRedCnt < openServerRedPacketCnt + 10: return True delCnt = 0 for index in xrange(recordList.Count()): dataIndex = index - delCnt universalRecData = recordList.At(dataIndex) delRedPacketID = universalRecData.GetValue1() if delRedPacketID in delRedPacketIDList: recordList.Delete(dataIndex) delCnt +=1 g_grabDataDict.pop(delRedPacketID, 0) g_allRecordDict.pop(delRedPacketID, 0) g_osRedCnt -= delCnt recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord universalRecMgr = GameWorld.GetUniversalRecMgr() recordList = universalRecMgr.GetTypeList(recordType) delCnt = 0 for index in xrange(recordList.Count()): dataIndex = index - delCnt universalRecData = recordList.At(dataIndex) if universalRecData.GetValue1() in delRedPacketIDList: recordList.Delete(dataIndex) delCnt +=1 #֪ͨ NotifyDelRedPacketInfo(delRedPacketIDList) return True def __DelGrabRecord(): #ɾ³ý¶àÓàÇÀÐÅÏ¢ universalRecMgr = GameWorld.GetUniversalRecMgr() allRecordList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord) allCnt = allRecordList.Count() redPacketIDList = [] for index in xrange(allCnt): universalRecData = allRecordList.At(index) redPacketID = universalRecData.GetValue1() redPacketIDList.append(redPacketID) recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord recordList = universalRecMgr.GetTypeList(recordType) delCnt = 0 for index in xrange(recordList.Count()): dataIndex = index - delCnt universalRecData = recordList.At(dataIndex) if universalRecData.GetValue1() not in redPacketIDList: recordList.Delete(dataIndex) delCnt +=1 GameWorld.Log(' ɾ³ý¶àÓàÇÀºì°üÐÅÏ¢ delCnt=%s'%delCnt) return isdel = False if not isdel: __DelGrabRecord() isdel = True def SendFamilyRedPacket(msgList): '''·¢ÏµÍ³ÔùË͵ĺì°ü''' playerID, redPacketID, packetCnt = msgList curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) if not curPlayer: return recDataList = __FindGrabRecData(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord,redPacketID) if not recDataList: return recData=recDataList[0] strValue1 = recData.GetStrValue1() strValue1List = strValue1.split('|') ownID = int(strValue1List[0]) getWay = int(strValue1List[3]) ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FamilyRedPack', {'GetType':getWay}) if not ipyData: return if ipyData.GetLeaderOwn(): if not PlayerFamily.GetPlayerHasFamilyPow(curPlayer, ChConfig.Def_PurviewDictKey_CanSendRedPacket): GameWorld.DebugLog(' ·¢ÏµÍ³ÔùË͵ĺì°ü ȨÏÞ²»×㣡', playerID) return if playerID != ownID: strValue1List[0] = str(playerID) StrValue1 = '|'.join(strValue1List) recData.SetStrValue1(StrValue1) elif playerID != ownID: GameWorld.DebugLog(' ·¢ÏµÍ³ÔùË͵ĺì°ü ²»ÊDZ¾ÈË£¡', playerID) return recData.SetValue4(State_NoGot) recData.SetStrValue2(str(packetCnt)) #¸üÐÂʱ¼ä curTimeNum = int(time.time()) recData.SetValue5(curTimeNum) if recData.GetValue2() == 0: family = None else: family = curPlayer.GetFamily() if family == None: return __NotifyFamilyRedPacketInfo(family, recData, []) return ## ÇÀºì°ü def DoGrabFamilyRedPacket(curPlayer, msgList): global g_grabDataDict redPacketID, OSCanGrabCnt = msgList playerID= curPlayer.GetPlayerID() job = curPlayer.GetJob() jobRank = PlayerControl.GetJobRank(curPlayer) job = jobRank * 10 + job playerName = curPlayer.GetName() recDataList = __FindGrabRecData(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord, redPacketID) if not recDataList: GameWorld.Log(' δÕÒµ½¸ÃÏÉÃ˺ì°ü¼Ç¼redPacketID=%s'%redPacketID) return redPacketRecData = recDataList[0] state = redPacketRecData.GetValue4() if state in [State_NoSend]: GameWorld.DebugLog(" ¸ÃÏÉÃ˺ì°ü»¹Î´·¢ËÍ£¡",playerID) return familyID = redPacketRecData.GetValue2() if familyID: curFamily = curPlayer.GetFamily() if curFamily == None: return else: curFamily = None value3 = redPacketRecData.GetValue3() moneyType, totalMoney =value3%10, value3/10 packetCnt = int(redPacketRecData.GetStrValue2()) #ÕҸúì°üµÄÇÀÐÅÏ¢ grabRecordDict = __GetGrabRecord(redPacketID) if playerID in grabRecordDict or len(grabRecordDict) >= packetCnt: GameWorld.DebugLog(" ¸ÃÍæ¼ÒÒÑÇÀ¹ý´Ëºì°ü£¡",playerID) __NotifyGrabRedPacketInfo(curPlayer, redPacketID, grabRecordDict) return outNum = sum([a[0] for a in grabRecordDict.values()]) #Òѱ»ÇÀµÄÇ® remainNum = totalMoney - outNum #Ê£ÓàµÄÇ® remainPacketCnt = packetCnt-len(grabRecordDict) if remainNum < remainPacketCnt: GameWorld.Log(' ¸Ãºì°üÊ£ÓàµÄÇ®²»¹»·¢ packetCnt =%s,totalMoney=%s,outNum=%s,remainMoney=%s,grabRecordDict=%s'%(packetCnt, totalMoney,outNum,remainNum, grabRecordDict)) return strValue1 = redPacketRecData.GetStrValue1() strValue1List = strValue1.split('|') getWay = int(strValue1List[3]) owerID = int(strValue1List[0]) isSelf = owerID == playerID if getWay == IpyGameDataPY.GetFuncCfg('OpenServerRedPacketType'): #¿ª·þºì°üÐèÒªÅжϴÎÊý if not isSelf and OSCanGrabCnt <= 0: GameWorld.DebugLog(' ÇÀ¿ª·þºì°ü£¬´ÎÊý²»×㣡£¡') return getNumformula = IpyGameDataPY.GetFuncCompileCfg('OpenRedRacketOutNum') else: getNumformula = IpyGameDataPY.GetFuncCompileCfg('FamilyRedRacketOutNum') getMoney = eval(getNumformula) if remainPacketCnt > 1 else remainNum GameWorld.DebugLog(" ¸ÃÍæ¼ÒÇÀµ½ºì°ü=%s£¡"%getMoney, playerID) grabRecordDict[playerID] = [getMoney, playerName, job] #ÐÂÔöÒ»ÌõÇÀµÄ¼Ç¼ recType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord valueList = [redPacketID, playerID, job, moneyType, getMoney] strValueList = [playerName] PlayerUniversalGameRec.MapServer_UniversalGameRec(None, recType, valueList, strValueList) #{playerid:[ÇÀµ½µÄÇ®,Ãû×Ö,job]} g_grabDataDict[redPacketID] = grabRecordDict if len(grabRecordDict) == packetCnt: redPacketRecData.SetValue4(State_HasAllGot) #֪ͨ¸ÃÍæ¼Òºì°üÇÀ½á¹û __NotifyFamilyRedPacketInfo(curFamily, redPacketRecData, grabRecordDict.keys()) else: NotifyRedPacketInfo(curPlayer, [redPacketRecData, grabRecordDict.keys()]) __NotifyGrabRedPacketInfo(curPlayer, redPacketID, grabRecordDict) #¸øÇ® result = str([moneyType, getMoney, getWay, isSelf]) curPlayer.MapServer_QueryPlayerResult(0, 0, "GrabFamilyRedPacketResult", result, len(result)) return getMoney ## »ñÈ¡ÇÀºì°ü¼Ç¼ def __GetGrabRecord(redPacketID): if redPacketID in g_grabDataDict: return g_grabDataDict[redPacketID] recDataList = __FindGrabRecData(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord, redPacketID) if not recDataList: return {} grabRecordDict = {} for recData in recDataList: #{playerid:[ÇÀµ½µÄÇ®,Ãû×Ö,job]} grabRecordDict[recData.GetValue2()] = [recData.GetValue5(), recData.GetStrValue1(), recData.GetValue3()] return grabRecordDict def __FindGrabRecData(recordType, redPacketID): global g_allRecordDict if recordType == ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord: if redPacketID in g_allRecordDict: frecData = g_allRecordDict[redPacketID] if frecData: return [frecData] recDataList = [] universalRecMgr = GameWorld.GetUniversalRecMgr() allRecordList = universalRecMgr.GetTypeList(recordType) allCnt = allRecordList.Count() for index in xrange(allCnt): recData = allRecordList.At(index) if recData.GetValue1() == redPacketID: recDataList.append(recData) if recordType == ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord: g_allRecordDict[redPacketID] = recData break return recDataList ## ¼ì²éºì°üÊÇ·ñ¹ýÆÚ def __CheckGrabRecData(): global g_grabDataDict global g_allRecordDict global g_osRedCnt g_osRedCnt = 0 universalRecMgr = GameWorld.GetUniversalRecMgr() allRecordList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord) allCnt = allRecordList.Count() curTimeNum = int(time.time()) rangeTime = 24*60*60 backMoneyDict = {} delRedPacketIDList = [] familyIDList = [] delCnt = 0 for index in xrange(allCnt): dataIndex = index - delCnt universalRecData = allRecordList.At(dataIndex) saveTime = universalRecData.GetValue5() GameWorld.DebugLog(" ¼ì²éºì°üÊÇ·ñ¹ýÆÚ curTime=%s,saveTime=%s,rangeTime=%s,redPacketID=%s"%(curTimeNum, saveTime, curTimeNum -saveTime,universalRecData.GetValue1())) if curTimeNum -saveTime > rangeTime:#¹ýÆÚ redPacketID = universalRecData.GetValue1() strValue1 = universalRecData.GetStrValue1() strValue1List = strValue1.split('|') playerID = strValue1List[0] if playerID: playerID = int(playerID) grabRecordDict = __GetGrabRecord(redPacketID) outNum = sum([a[0] for a in grabRecordDict.values()]) #Òѱ»ÇÀµÄÇ® value3 = universalRecData.GetValue3() moneyType, totalMoney =value3%10, value3/10 remainMoney = totalMoney - outNum #Ê£ÓàµÄÇ® #GameWorld.DebugLog(' outNum=%s,remainMoney=%s,moneyType=%s'%(outNum,remainMoney,moneyType)) if moneyType ==1 and remainMoney: backMoneyDict[playerID] = backMoneyDict.get(playerID, 0) + remainMoney delRedPacketIDList.append(redPacketID) familyID=universalRecData.GetValue2() if familyID not in familyIDList: familyIDList.append(familyID) allRecordList.Delete(dataIndex) delCnt +=1 if not delRedPacketIDList: return for redID in delRedPacketIDList: g_grabDataDict.pop(redID, 0) g_allRecordDict.pop(redID, 0) recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord recordList = universalRecMgr.GetTypeList(recordType) delCnt = 0 for index in xrange(recordList.Count()): dataIndex = index - delCnt universalRecData = recordList.At(dataIndex) if universalRecData.GetValue1() in delRedPacketIDList: recordList.Delete(dataIndex) delCnt +=1 NotifyDelRedPacketInfo(delRedPacketIDList) #·µ»ØÍæ¼Òδ±»ÁìÈ¡µÄÏÉÓñ if backMoneyDict: for playerID, moneyNum in backMoneyDict.items(): PlayerCompensation.SendMailByKey('RedPackBack', [playerID], [], [], moneyNum) return def DelRedPackByFamilyID(delfamilyID): global g_grabDataDict global g_allRecordDict #ɾ³ýij¸ö¼Ò×åµÄºì°ü¼Ç¼ universalRecMgr = GameWorld.GetUniversalRecMgr() allRecordList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord) allCnt = allRecordList.Count() delRedPacketIDList = [] delCnt = 0 for index in xrange(allCnt): dataIndex = index - delCnt universalRecData = allRecordList.At(dataIndex) familyID=universalRecData.GetValue2() if delfamilyID != familyID: continue redPacketID = universalRecData.GetValue1() delRedPacketIDList.append(redPacketID) allRecordList.Delete(dataIndex) delCnt +=1 if not delRedPacketIDList: return for redID in delRedPacketIDList: g_grabDataDict.pop(redID, 0) g_allRecordDict.pop(redID, 0) recordList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyRedPacketGrabRecord) delCnt = 0 for index in xrange(recordList.Count()): dataIndex = index - delCnt universalRecData = recordList.At(dataIndex) if universalRecData.GetValue1() in delRedPacketIDList: recordList.Delete(dataIndex) delCnt +=1 #NotifyDelRedPacketInfo(delRedPacketIDList) return ## ºì°ü±ä¸ü֪ͨµ¥¸öºì°ü¸ø¶ÔÓ¦Õ½ÃËËùÓгÉÔ± def __NotifyFamilyRedPacketInfo(family, redPacketRecData, grabHeroIDList): syncPacketDataList = [redPacketRecData, grabHeroIDList] # recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord # universalRecMgr = GameWorld.GetUniversalRecMgr() # recordList = universalRecMgr.GetTypeList(recordType) # for index in xrange(recordList.Count()): # recData = recordList.At(index) # familyID = recData.GetValue2() # if familyID and family and family.GetID() != familyID: # continue # if redPacketID: # if recData.GetValue1() == redPacketID: # syncPacketDataList = [recData, grabHeroIDList] # break # else: # syncPacketDataList.append(recData) if not syncPacketDataList: return playerManager = GameWorld.GetPlayerManager() if not family: for i in xrange(0, playerManager.GetActivePlayerCount()): curPlayer = playerManager.GetActivePlayerAt(i) if curPlayer == None or not curPlayer.GetInitOK(): continue NotifyRedPacketInfo(curPlayer, syncPacketDataList) else: for i in xrange(0, family.GetCount()): notifyMember = family.GetAt(i) notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID()) if notifyPlayer == None: continue NotifyRedPacketInfo(notifyPlayer, syncPacketDataList) return ## ֪ͨºì°üÐÅÏ¢ # Í¨ÖªÍæ¼Ò±¾Õ½ÃËËùÓкì°ü»òµ¥¸öºì°ü def NotifyRedPacketInfo(curPlayer, packetDataList=[]): if PlayerControl.GetIsTJG(curPlayer): return if not packetDataList: syncPacketDataList = [] recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord universalRecMgr = GameWorld.GetUniversalRecMgr() recordList = universalRecMgr.GetTypeList(recordType) for index in xrange(recordList.Count()): recData = recordList.At(index) familyID = recData.GetValue2() if familyID and curPlayer.GetFamilyID() != familyID: continue grabRecordDict = __GetGrabRecord(recData.GetValue1()) syncPacketDataList.append([recData, grabRecordDict.keys()]) else: syncPacketDataList = [packetDataList] if not syncPacketDataList: return joinFamilyTime = PlayerFamily.GetPlayerJoinFamilyTime(curPlayer) sendPack = ChPyNetSendPack.tagGCFamilyRedPacketInfo() sendPack.Clear() sendPack.IsAll = int(packetDataList==[]) sendPack.RedPacketInfo = [] for packetData, grabHeroIDList in syncPacketDataList: #ÏÉÃ˺ì°üÖ»Í¨ÖªÍæ¼Ò½øÈëÏÉÃ˺óÉú³ÉµÄºì°ü #GameWorld.Log('1111packetData.GetValue2()=%s,joinFamilyTime=%s,packetData.GetValue5()=%s'%(packetData.GetValue2(),joinFamilyTime,packetData.GetValue5())) if packetData.GetValue2() and joinFamilyTime and packetData.GetValue5() < joinFamilyTime: continue packetInfo = ChPyNetSendPack.tagFRedPacketInfo() packetInfo.Clear() packetInfo.RedPacketID = packetData.GetValue1() strValue1 = packetData.GetStrValue1() strValue1List = strValue1.split('|') if len(strValue1List) != 4: return playerID, playerName, job, getWay = strValue1List packetInfo.PlayerID = int(playerID) packetInfo.Name = playerName packetInfo.Time = packetData.GetTime() packetInfo.PlayeJob = int(job) value3 = packetData.GetValue3() packetInfo.MoneyType = value3 % 10 packetInfo.MoneyNum = value3 / 10 packetInfo.GetWay = int(getWay) state = packetData.GetValue4() if curPlayer.GetPlayerID() in grabHeroIDList: state = State_HasGot packetInfo.State = state packetInfo.PacketCnt = int(packetData.GetStrValue2()) packetInfo.Wish = packetData.GetStrValue3() sendPack.RedPacketInfo.append(packetInfo) sendPack.Count = len(sendPack.RedPacketInfo) NetPackCommon.SendFakePack(curPlayer, sendPack) #GameWorld.Log('ÏÉÃ˺ì°ü֪ͨ IsAll=%s,Count=%s,syncPacketDataList=%s,redPacketID=%s'%(sendPack.IsAll,sendPack.Count,syncPacketDataList,redPacketID)) return def __NotifyGrabRedPacketInfo(curPlayer, redPacketID, grabRecordDict): '''֪ͨÇÀºì°üÐÅÏ¢''' sendPack = ChPyNetSendPack.tagGCFamilyRedPacketGrabInfo() sendPack.Clear() sendPack.RedPacketID = redPacketID #grabRecordDict = __GetGrabRecord(redPacketID) #{playerid:[ÇÀµ½µÄÇ®,Ãû×Ö,job]} sendPack.Count = len(grabRecordDict) sendPack.GrabInfo = [] for playerID, info in grabRecordDict.items(): money, name, job = info grabInfo = ChPyNetSendPack.tagFGrabRedPacketInfo() grabInfo.Name = name grabInfo.PlayeJob = job grabInfo.MoneyNum = money sendPack.GrabInfo.append(grabInfo) NetPackCommon.SendFakePack(curPlayer, sendPack) return def NotifyDelRedPacketInfo(delRedPacketIDList): ##֪ͨºì°üɾ³ýÐÅÏ¢ sendPack = ChPyNetSendPack.tagGCRedPacketDel() sendPack.Clear() sendPack.DelRedPacketID = delRedPacketIDList sendPack.Cnt = len(delRedPacketIDList) playerManager = GameWorld.GetPlayerManager() for i in xrange(0, playerManager.GetActivePlayerCount()): curPlayer = playerManager.GetActivePlayerAt(i) if curPlayer == None or not curPlayer.GetInitOK(): continue NetPackCommon.SendFakePack(curPlayer, sendPack) return