8901 【BT2】【后端】全服红包
# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
| | |
| | | PacketCnt = 0 #(WORD PacketCnt)// 红包数量
|
| | | MoneyNum = 0 #(WORD MoneyNum)//金钱数量
|
| | | Wish = "" #(char Wish[33])//祝福语
|
| | | IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.PacketCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.PacketCnt = 0
|
| | | self.MoneyNum = 0
|
| | | self.Wish = ""
|
| | | self.IsAnonymous = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 2
|
| | | length += 2
|
| | | length += 33
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteWORD(data, self.PacketCnt)
|
| | | data = CommFunc.WriteWORD(data, self.MoneyNum)
|
| | | data = CommFunc.WriteString(data, 33, self.Wish)
|
| | | data = CommFunc.WriteBYTE(data, self.IsAnonymous)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | RedPacketID:%d,
|
| | | PacketCnt:%d,
|
| | | MoneyNum:%d,
|
| | | Wish:%s
|
| | | Wish:%s,
|
| | | IsAnonymous:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.RedPacketID,
|
| | | self.PacketCnt,
|
| | | self.MoneyNum,
|
| | | self.Wish
|
| | | self.Wish,
|
| | | self.IsAnonymous
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | PacketCnt = 0 #(BYTE PacketCnt)//可抢个数
|
| | | State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完
|
| | | Wish = "" #(char Wish[33])//祝福语
|
| | | IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.PacketCnt = 0
|
| | | self.State = 0
|
| | | self.Wish = ""
|
| | | self.IsAnonymous = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | length += 1
|
| | | length += 33
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.PacketCnt)
|
| | | data = CommFunc.WriteBYTE(data, self.State)
|
| | | data = CommFunc.WriteString(data, 33, self.Wish)
|
| | | data = CommFunc.WriteBYTE(data, self.IsAnonymous)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | GetWay:%d,
|
| | | PacketCnt:%d,
|
| | | State:%d,
|
| | | Wish:%s
|
| | | Wish:%s,
|
| | | IsAnonymous:%d
|
| | | '''\
|
| | | %(
|
| | | self.RedPacketID,
|
| | |
| | | self.GetWay,
|
| | | self.PacketCnt,
|
| | | self.State,
|
| | | self.Wish
|
| | | self.Wish,
|
| | | self.IsAnonymous
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("HasSendGold", c_int), # 已用额度
|
| | | ("ServerGrabCnt", c_int), # 全服红包已抢次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x05
|
| | | self.HasSendGold = 0
|
| | | self.ServerGrabCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | HasSendGold:%d
|
| | | HasSendGold:%d,
|
| | | ServerGrabCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.HasSendGold
|
| | | self.HasSendGold,
|
| | | self.ServerGrabCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | #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))
|
| | |
| | | getTypeRainDict = IpyGameDataPY.GetFuncEvalCfg('OpenServerRedPacketRain', 2, {})
|
| | | if str(getType) in getTypeRainDict:
|
| | | PlayerControl.WorldNotify(0, getTypeRainDict[str(getType)])
|
| | | elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain'):
|
| | | 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)
|
| | |
| | | RedPackType_FeastSysBig = 31 # 节日系统大红包
|
| | | RedPackType_FeastSysSmall = 32 # 节日系统小红包
|
| | | RedPackType_FeastSucc = 33 # 节日成就红包
|
| | | RedPackType_Server = 36 # 全服红包
|
| | |
|
| | | # 节日红包类型
|
| | | FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
|
| | | # 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
|
| | | RedPackMaxCountDict = {1:[RedPackType_OpenServer],
|
| | | 2:[RedPackType_FeastSucc],
|
| | | 3:[RedPackType_Server],
|
| | | }
|
| | |
|
| | |
| | | Def_PDict_FirstGoldRemainTime = "FirstGoldRemainTime" # 首充提示剩余时间
|
| | | Def_PDict_FirstGoldTipStartTime = "FirstGoldTipStartTime" # 首充提示开始时间
|
| | | Def_PDict_FirstGoldTry = "FirstGoldTry" # 首充试用状态 0-不可试用 1-可试用 2-已试用
|
| | | Def_PDict_DailyChargeState = "DailyChargeState" # 当日是否已充值
|
| | | Def_PDict_SuperGiftStartTime = "SuperGiftStartTime" # 超值礼包开始时间
|
| | | Def_PDict_IsReBorn = "Def_PDict_IsReBorn" # 是否回城复活
|
| | | Def_PDict_FamilyWarDailyReward = "FamilyWarDailyReward" # 王者仙盟每日俸禄领取状态
|
| | |
| | | Def_PDict_OSRedPacketGrabMoney = "OSRedPacketGrabMoney" # 开服红包已抢数量
|
| | | Def_PDict_OSRedPacketCanGrabCnt = "OSRedPacketCanGrabCnt" # 开服红包可抢次数
|
| | | Def_PDict_OSRedPacketStartTime = "OSRedPacketStartTime" #开服红包开始倒计时时间
|
| | | Def_PDict_ServerRedPacketGrabCnt = "ServerRedPacketGrabCnt" # 今日已抢全服红包次数
|
| | |
|
| | | #节日红包
|
| | | Def_PDict_FeastRedPacketActID = "FeastRedPacketActID" # 玩家身上的节日红包活动ID,唯一标识,取活动开始日期time值
|
| | |
| | | PacketCnt = 0 #(WORD PacketCnt)// 红包数量
|
| | | MoneyNum = 0 #(WORD MoneyNum)//金钱数量
|
| | | Wish = "" #(char Wish[33])//祝福语
|
| | | IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.PacketCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.MoneyNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.PacketCnt = 0
|
| | | self.MoneyNum = 0
|
| | | self.Wish = ""
|
| | | self.IsAnonymous = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 2
|
| | | length += 2
|
| | | length += 33
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteWORD(data, self.PacketCnt)
|
| | | data = CommFunc.WriteWORD(data, self.MoneyNum)
|
| | | data = CommFunc.WriteString(data, 33, self.Wish)
|
| | | data = CommFunc.WriteBYTE(data, self.IsAnonymous)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | RedPacketID:%d,
|
| | | PacketCnt:%d,
|
| | | MoneyNum:%d,
|
| | | Wish:%s
|
| | | Wish:%s,
|
| | | IsAnonymous:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.RedPacketID,
|
| | | self.PacketCnt,
|
| | | self.MoneyNum,
|
| | | self.Wish
|
| | | self.Wish,
|
| | | self.IsAnonymous
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | PacketCnt = 0 #(BYTE PacketCnt)//可抢个数
|
| | | State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完
|
| | | Wish = "" #(char Wish[33])//祝福语
|
| | | IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | |
| | | self.PacketCnt = 0
|
| | | self.State = 0
|
| | | self.Wish = ""
|
| | | self.IsAnonymous = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | length += 1
|
| | | length += 33
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.PacketCnt)
|
| | | data = CommFunc.WriteBYTE(data, self.State)
|
| | | data = CommFunc.WriteString(data, 33, self.Wish)
|
| | | data = CommFunc.WriteBYTE(data, self.IsAnonymous)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | |
| | | GetWay:%d,
|
| | | PacketCnt:%d,
|
| | | State:%d,
|
| | | Wish:%s
|
| | | Wish:%s,
|
| | | IsAnonymous:%d
|
| | | '''\
|
| | | %(
|
| | | self.RedPacketID,
|
| | |
| | | self.GetWay,
|
| | | self.PacketCnt,
|
| | | self.State,
|
| | | self.Wish
|
| | | self.Wish,
|
| | | self.IsAnonymous
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("HasSendGold", c_int), # 已用额度
|
| | | ("ServerGrabCnt", c_int), # 全服红包已抢次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x05
|
| | | self.HasSendGold = 0
|
| | | self.ServerGrabCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''// A5 05 通知家族钻石红包已用额度 //tagMCFamilyRedPacketGoldLimit:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | HasSendGold:%d
|
| | | HasSendGold:%d,
|
| | | ServerGrabCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.HasSendGold
|
| | | self.HasSendGold,
|
| | | self.ServerGrabCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | if onEventType == ShareDefine.Def_OnEventType:
|
| | | #发钻石红包额度重置
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ServerRedPacketGrabCnt, 0)
|
| | | __NotifyGoldLimt(curPlayer)
|
| | | elif onEventType == ShareDefine.Def_OnEventTypeEx:
|
| | | oscDay = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg')
|
| | |
| | | sendCnt = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 5)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketCanGrabCnt, grabCnt+sendCnt)
|
| | | NotifyOSRedPacket(curPlayer)
|
| | | return
|
| | |
|
| | | def OnPlayerRecharge(curPlayer, orderRMB):
|
| | | ## 玩家充值
|
| | | |
| | | todayCoin = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AllCoinToday)
|
| | | # 每日首充红包
|
| | | if todayCoin - orderRMB * 100 == 0:
|
| | | dayFirstRedPacketID = IpyGameDataPY.GetFuncCfg("RechargeRedPacket", 1)
|
| | | GameWorld.DebugLog("每日首充红包: dayFirstRedPacketID=%s" % dayFirstRedPacketID)
|
| | | if dayFirstRedPacketID:
|
| | | CreatRedPacketByID(curPlayer, dayFirstRedPacketID)
|
| | | #else:
|
| | | # GameWorld.DebugLog("非每日首充: todayCoin=%s" % todayCoin)
|
| | | |
| | | # 单笔充值红包
|
| | | rmbRedPacketID = 0
|
| | | rmbRedPackIDDict = IpyGameDataPY.GetFuncEvalCfg("RechargeRedPacket", 2, {})
|
| | | rmbList = rmbRedPackIDDict.keys()
|
| | | rmbList.sort()
|
| | | for rmb in rmbList:
|
| | | if orderRMB <= rmb:
|
| | | rmbRedPacketID = rmbRedPackIDDict[rmb]
|
| | | break
|
| | | |
| | | if rmbRedPacketID:
|
| | | GameWorld.DebugLog("单笔充值红包: orderRMB=%s,rmbRedPacketID=%s" % (orderRMB, rmbRedPacketID))
|
| | | CreatRedPacketByID(curPlayer, rmbRedPacketID)
|
| | | return
|
| | |
|
| | | def CreatCacheRedPacktet(curPlayer):
|
| | |
| | | if not PlayerFeastRedPacket.GetFeastRedPacketState():
|
| | | GameWorld.DebugLog(' 非节日红包活动中,不可发送!')
|
| | | return
|
| | | isFamilyRedPacket = False
|
| | | elif getType == ShareDefine.RedPackType_Server:
|
| | | isFamilyRedPacket = False
|
| | | else:
|
| | | if not curPlayer.GetFamilyID():
|
| | |
| | | # DWORD RedPacketID; // 红包ID,没有发0
|
| | | # WORD PacketCnt; // 红包数量
|
| | | # WORD MoneyNum; //金钱数量
|
| | | # WORD WishLen; //祝福语长度
|
| | | # char Wish[NameLen]; //size=WishLen
|
| | | # char Wish[33]; //祝福语
|
| | | # BYTE IsAnonymous; //是否匿名
|
| | | #};
|
| | | ## 发家族红包
|
| | | def OnSendFamilyRedPacket(index, clientData, tick):
|
| | |
| | | packetCnt = clientData.PacketCnt
|
| | | moneyNum = clientData.MoneyNum
|
| | | wishInfo = clientData.Wish
|
| | | isAnonymous = clientData.IsAnonymous
|
| | | if not redPacketID:
|
| | | #主动发的钻石红包 vip限制
|
| | | if not PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FamilyGoldPack):
|
| | |
| | | __DoCreatRedPacket(curPlayer, ShareDefine.RedPackType_GoldPacket, IPY_GameWorld.TYPE_Price_Gold_Money, moneyNum, packetCnt, State_NoGot, wishInfo)
|
| | | else:
|
| | | # 注意:该函数发放的是已创建的红包,该操作只是把该红包开放给玩家可抢
|
| | | msg = str([curPlayer.GetPlayerID(), redPacketID, packetCnt])
|
| | | msg = str([curPlayer.GetPlayerID(), redPacketID, packetCnt, isAnonymous])
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "SendFamilyRedPacket", msg, len(msg))
|
| | | return
|
| | |
|
| | |
| | | packData = ChPyNetSendPack.tagMCFamilyRedPacketGoldLimit()
|
| | | packData.Clear()
|
| | | packData.HasSendGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 0)
|
| | | packData.ServerGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt)
|
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|
| | |
| | | canGrabCnt = GetOSCanGrabCnt(curPlayer)
|
| | | elif reqGetWay == ShareDefine.RedPackType_FeastSucc:
|
| | | canGrabCnt = PlayerFeastRedPacket.GetFeastSuccRedPacketCanGrabCnt(curPlayer)
|
| | | elif reqGetWay == ShareDefine.RedPackType_Server:
|
| | | canGrabCnt = GetServerRedPackCanGrabCnt(curPlayer)
|
| | | else:
|
| | | canGrabCnt = -1
|
| | | msg = str([redPacketID, reqGetWay, canGrabCnt])
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "GrabFamilyRedPacket", msg, len(msg))
|
| | | GameWorld.DebugLog(' 抢红包 getWay=%s,canGrabCnt=%s' % (reqGetWay, canGrabCnt))
|
| | | GameWorld.DebugLog(' 抢红包 redPacketID=%s,getWay=%s,canGrabCnt=%s' % (redPacketID, reqGetWay, canGrabCnt))
|
| | | return
|
| | |
|
| | |
|
| | |
| | | NotifyOSRedPacket(curPlayer)
|
| | | return
|
| | |
|
| | | def GetServerRedPackCanGrabCnt(curPlayer):
|
| | | #获取全服红包可抢次数
|
| | | # @return: -1为不限
|
| | | vipLVMaxGrabCntDict = IpyGameDataPY.GetFuncEvalCfg("RechargeRedPacket", 3, {})
|
| | | vipLVList = vipLVMaxGrabCntDict.keys()
|
| | | vipLVList.sort()
|
| | | for vipLV in vipLVList:
|
| | | if curPlayer.GetVIPLv() <= vipLV:
|
| | | maxGrabCnt = vipLVMaxGrabCntDict[vipLV]
|
| | | if not maxGrabCnt:
|
| | | return -1
|
| | | todayGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt)
|
| | | return max(0, maxGrabCnt - todayGrabCnt)
|
| | | return 0
|
| | |
|
| | | def GrabServerRedPacketResult(curPlayer, moneyNum, isSelf):
|
| | | ##抢全服红包结果
|
| | | |
| | | if isSelf:
|
| | | return
|
| | | |
| | | grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ServerRedPacketGrabCnt, grabCnt + 1)
|
| | | |
| | | __NotifyGoldLimt(curPlayer)
|
| | | return
|
| | |
|
| | | def ProcessOSRedPacket(curPlayer, tick):
|
| | | return
|
| | | #开服红包恢复次数
|
| | |
| | | PlayerFamilyRedPacket.GrabOSRedPacketResult(curPlayer, moneyNum, isSelf)
|
| | | elif getWay in ShareDefine.FeastRedPackType:
|
| | | PlayerFeastRedPacket.GrabFeastRedPacketResult(curPlayer, moneyNum, getWay, isSelf)
|
| | | elif getWay == ShareDefine.RedPackType_Server:
|
| | | PlayerFamilyRedPacket.GrabServerRedPacketResult(curPlayer, moneyNum, isSelf)
|
| | |
|
| | | return
|
| | |
|
| | |
| | | RedPackType_FeastSysBig = 31 # 节日系统大红包
|
| | | RedPackType_FeastSysSmall = 32 # 节日系统小红包
|
| | | RedPackType_FeastSucc = 33 # 节日成就红包
|
| | | RedPackType_Server = 36 # 全服红包
|
| | |
|
| | | # 节日红包类型
|
| | | FeastRedPackType = [RedPackType_FeastSysBig, RedPackType_FeastSysSmall, RedPackType_FeastSucc]
|
| | | # 需要限制服务器最大红包数的红包类型 {统计个数编号:[红包类型, ...], ...}
|
| | | RedPackMaxCountDict = {1:[RedPackType_OpenServer],
|
| | | 2:[RedPackType_FeastSucc],
|
| | | 3:[RedPackType_Server],
|
| | | }
|
| | |
|