| | |
| | | #value4 ״̬
|
| | | #value5 时间,用来判断是否过期删除的,实际开放该红包领取的时间
|
| | | #strValue1 创建者ID|创建者名字|创建者职业|获得途径(红包类型)
|
| | | #strValue2 可抢总个数
|
| | | #strValue2 可抢总个数|是否匿名(默认不匿名兼容老数据)
|
| | | #strValue3 祝福语,玩家自己编辑的内容
|
| | |
|
| | | #Def_UniversalGameRecType_FamilyRedPacketGrabRecord
|
| | |
| | | g_redPackCountDict = {} #有限制最大红包个数的类型对应当前红包数 {类型组对应记录编号:当前个数, ...}
|
| | |
|
| | | DBKey_RedPacketSend = "RedPacketSend_%s" # 系统定时红包是否已发放, 参数红包ID
|
| | | DBKey_RedPacketSystemDayCount = "RedPacketSystemDayCount" # 全服系统红包已发放个数
|
| | |
|
| | | ## 玩家登录
|
| | | # @param None
|
| | |
| | | # @return None
|
| | | def DoOnDay():
|
| | | __CheckGrabRecData()
|
| | | |
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount, 0) # 重置每日全服系统红包发放个数
|
| | | RandTodayServerSystemRedPacketSendTime()
|
| | | return
|
| | |
|
| | | ##---------------------------------------- 节日红包 -----------------------------------------------
|
| | |
| | | def OnRedPacketMinuteProcess():
|
| | | ## 每分钟处理,定时发放系统红包
|
| | |
|
| | | CheckSendServerSystemRedPacket()
|
| | | |
| | | todayRedPacketByTimeList = __GetTodayRedPacketByTimeList()
|
| | | if not todayRedPacketByTimeList:
|
| | | return
|
| | |
| | | return
|
| | |
|
| | | ##--------------------------------------------------------------------------------------------------
|
| | | ##---------------------------------------- 全服系统红包 ---------------------------------------------
|
| | |
|
| | | def RandTodayServerSystemRedPacketSendTime():
|
| | | ## 随机生成今日全服系统红包发放时间点
|
| | | |
| | | sendTimeList = []
|
| | | sysRedPackketSendCountToday = PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount) |
| | | maxCount = IpyGameDataPY.GetFuncCfg("ServerSysRedPacket", 1)
|
| | | needSendCount = max(0, maxCount - sysRedPackketSendCountToday)
|
| | | |
| | | GameWorld.Log("随机生成发放全服系统红包时间! maxCount=%s,sysRedPackketSendCountToday=%s,needSendCount=%s" |
| | | % (maxCount, sysRedPackketSendCountToday, needSendCount))
|
| | | if needSendCount > 0:
|
| | | startHour, endHour = IpyGameDataPY.GetFuncEvalCfg("ServerSysRedPacket", 3)
|
| | | serverTime = GameWorld.GetServerTime()
|
| | | year, month, day = serverTime.year, serverTime.month, serverTime.day
|
| | | startDateTime = datetime.datetime(year, month, day, startHour)
|
| | | if endHour == 0:
|
| | | endDateTime = datetime.datetime(year, month, day) + datetime.timedelta(days=1)
|
| | | else:
|
| | | endDateTime = datetime.datetime(year, month, day, endHour)
|
| | | |
| | | totalSeconds = (endDateTime - startDateTime).seconds # 可处理的总秒数
|
| | | aveSeconds = totalSeconds / maxCount # 平均间隔
|
| | | GameWorld.Log(" startDateTime=%s" % startDateTime)
|
| | | GameWorld.Log(" endDateTime=%s" % endDateTime)
|
| | | GameWorld.Log(" totalSeconds=%s,aveSeconds=%s" % (totalSeconds, aveSeconds))
|
| | | |
| | | nextStartDateTime = startDateTime
|
| | | for _ in xrange(maxCount):
|
| | | randSeconds = random.randint(60, aveSeconds - 60) # 前后扣掉1分钟,防止随机到同分钟
|
| | | randSendDateTime = nextStartDateTime + datetime.timedelta(seconds=randSeconds)
|
| | | if randSendDateTime > serverTime:
|
| | | sendTimeList.append(randSendDateTime)
|
| | | GameWorld.Log(" 随机起始时间=%s,randSeconds=%s,随机发放时间=%s" % (nextStartDateTime, randSeconds, randSendDateTime))
|
| | | |
| | | nextStartDateTime += datetime.timedelta(seconds=aveSeconds)
|
| | | |
| | | GameWorld.Log(" sendTimeList=%s" % sendTimeList)
|
| | | IpyGameDataPY.SetConfigEx("ServerSystemRedPacketSendTime", sendTimeList)
|
| | | return sendTimeList
|
| | |
|
| | | def CheckSendServerSystemRedPacket():
|
| | | ## 检查发送今日全服系统红包
|
| | | |
| | | sendTimeList = IpyGameDataPY.GetConfigEx("ServerSystemRedPacketSendTime")
|
| | | if sendTimeList == None:
|
| | | sendTimeList = RandTodayServerSystemRedPacketSendTime()
|
| | | |
| | | if not sendTimeList:
|
| | | #GameWorld.DebugLog("没有随机发放系统红包时间了!")
|
| | | return
|
| | | |
| | | serverTime = GameWorld.GetServerTime()
|
| | | nextSendTime = sendTimeList[0]
|
| | | if serverTime.hour == nextSendTime.hour and serverTime.minute == nextSendTime.minute:
|
| | | sendTimeList.pop(0)
|
| | | |
| | | randSysRedPacketList = IpyGameDataPY.GetFuncEvalCfg("ServerSysRedPacket", 2)
|
| | | redPackID = GameWorld.GetResultByRandomList(randSysRedPacketList)
|
| | | if not redPackID:
|
| | | return
|
| | | |
| | | CreateSystemRedPacket(redPackID)
|
| | | |
| | | sysRedPackketSendCountToday = PlayerDBGSEvent.GetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount) + 1
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount, sysRedPackketSendCountToday)
|
| | | GameWorld.Log("发放全服系统红包: redPackID=%s, sysRedPackketSendCountToday=%s" % (redPackID, sysRedPackketSendCountToday))
|
| | | |
| | | maxCount = IpyGameDataPY.GetFuncCfg("ServerSysRedPacket", 1)
|
| | | if sysRedPackketSendCountToday >= maxCount:
|
| | | IpyGameDataPY.SetConfigEx("ServerSystemRedPacketSendTime", [])
|
| | | GameWorld.Log(" 今日全服系统红包已经全部发完了! maxCount=%s" % maxCount)
|
| | | |
| | | elif nextSendTime < serverTime:
|
| | | sendTimeList.pop(0)
|
| | | #GameWorld.DebugLog("发放系统红包时间过期了!serverTime=%s, nextSendTime=%s" % (serverTime, nextSendTime))
|
| | | #else:
|
| | | # GameWorld.DebugLog("非发放系统红包时间!serverTime=%s, nextSendTime=%s" % (serverTime, nextSendTime))
|
| | | |
| | | return
|
| | |
|
| | | ##--------------------------------------------------------------------------------------------------
|
| | |
|
| | | def CreateSystemRedPacket(redPackID):
|
| | | ## 发放系统红包
|
| | |
| | | openTime = ipyData.GetPacketOpenTime() # 如果有指定发放时间的
|
| | | sysCreateTime = GameWorld.ChangeTimeStrToNum("%s:00" % openTime) if openTime else None
|
| | |
|
| | | isAnonymous = 0
|
| | | state = State_NoGot # 暂直接设定已发放
|
| | | if ipyData.GetPacketOpenTime():
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 1)
|
| | | GameWorld.DebugLog("定时发放的红包,设置已发放! redPackID=%s" % redPackID)
|
| | | |
| | | if getType == ShareDefine.RedPackType_Server:
|
| | | isAnonymous = 1
|
| | |
|
| | | job = 0
|
| | | jobRank = 0
|
| | |
| | | playerID = 0
|
| | | family = None
|
| | |
|
| | | __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime)
|
| | | __SaveNewRedRecord(family, playerID, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt, state, sysCreateTime=sysCreateTime, isAnonymous=isAnonymous)
|
| | | return
|
| | |
|
| | | ## 生成新红包
|
| | |
| | | return
|
| | |
|
| | | ## 记录新红包数据
|
| | | def __SaveNewRedRecord(family, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None, data=0):
|
| | | def __SaveNewRedRecord(family, ownerid, playerName, job, jobRank, getType, moneyType, outputNum, packetCnt,state=State_NoSend, wishStr='', sysCreateTime=None, data=0, isAnonymous=0):
|
| | | global g_allRecordDict
|
| | | global g_redPackCountDict
|
| | | recordType = ShareDefine.Def_UniversalGameRecType_FamilyRedPacketAllRecord
|
| | |
| | | recData.SetValue4(state) #是否已发
|
| | | recData.SetValue5(curTimeNum) #该时间为开放领取的时间,不一定等于创建时间
|
| | | recData.SetStrValue1('%s|%s|%s|%s'%(ownerid,playerName,job,getType)) #创建者ID|创建者名字|创建者职业|途径
|
| | | recData.SetStrValue2(str(packetCnt))#可抢总个数
|
| | | recData.SetStrValue2('%s|%s' % (packetCnt, int(isAnonymous)))#可抢总个数|是否匿名
|
| | | 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))
|
| | |
| | | #大于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, getTypeRainDict[str(getType)])
|
| | | elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain') \
|
| | | and getType not in [ShareDefine.RedPackType_Server]:
|
| | | PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType])
|
| | |
|
| | | return recData
|
| | |
| | |
|
| | | def SendFamilyRedPacket(msgList):
|
| | | '''发系统赠送的红包,该红包已存在,只是状态未发放,由归属玩家自由选择发放时机'''
|
| | | playerID, redPacketID, packetCnt = msgList
|
| | | playerID, redPacketID, packetCnt, isAnonymous = msgList
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
| | | if not curPlayer:
|
| | | return
|
| | |
| | | return
|
| | |
|
| | | recData.SetValue4(State_NoGot)
|
| | | recData.SetStrValue2(str(packetCnt))
|
| | | recData.SetStrValue2('%s|%s' % (packetCnt, int(isAnonymous)))
|
| | | #更新时间
|
| | | curTimeNum = int(time.time())
|
| | | recData.SetValue5(curTimeNum)
|
| | |
| | |
|
| | | value3 = redPacketRecData.GetValue3()
|
| | | moneyType, totalMoney =value3%10, value3/10
|
| | | packetCnt = int(redPacketRecData.GetStrValue2())
|
| | | strValue2 = redPacketRecData.GetStrValue2()
|
| | | strValue2List = strValue2.split('|')
|
| | | packetCnt = int(strValue2List[0])
|
| | |
|
| | | #找该红包的抢信息
|
| | | grabRecordDict = __GetGrabRecord(redPacketID)
|
| | |
| | | if reqGetWay != getWay:
|
| | | GameWorld.ErrLog("领取的红包类型不一致,无法领取! reqGetWay=%s,getWay=%s" % (reqGetWay, getWay))
|
| | | return
|
| | | if getWay == ShareDefine.RedPackType_OpenServer:
|
| | | if getWay in [ShareDefine.RedPackType_OpenServer, ShareDefine.RedPackType_Server]:
|
| | | getNumformula = IpyGameDataPY.GetFuncCompileCfg('OpenRedRacketOutNum')
|
| | | elif getWay in ShareDefine.FeastRedPackType:
|
| | | getNumformula = IpyGameDataPY.GetFuncCompileCfg('FeastRedPacket', 2)
|
| | |
| | | #GameWorld.DebugLog("已抢或抢完的不发: RedPacketID=%s,state=%s" % (packetInfo.RedPacketID, state))
|
| | | continue
|
| | | packetInfo.State = state
|
| | | packetInfo.PacketCnt = int(packetData.GetStrValue2())
|
| | | strValue2 = packetData.GetStrValue2()
|
| | | strValue2List = strValue2.split('|')
|
| | | packetInfo.PacketCnt = int(strValue2List[0])
|
| | | packetInfo.IsAnonymous = int(strValue2List[1]) if len(strValue2List) > 1 else 0
|
| | |
|
| | | packetInfo.Wish = packetData.GetStrValue3()
|
| | | sendPack.RedPacketInfo.append(packetInfo)
|