4319 【后端】【1.2】超值礼包拆分成精彩活动的3个礼包
| | |
| | | # AA 16 通知超值礼包信息 #tagMCSuperGiftInfo
|
| | |
|
| | | class tagMCSuperGiftInfo(Structure):
|
| | | Head = tagHead()
|
| | | GiftID = 0 #(DWORD GiftID)//商品ID
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | data = None
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("StartTime", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x16
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x16
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | return _pos
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x16
|
| | | self.GiftID = 0
|
| | | self.EndtDate = ""
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x16
|
| | | self.StartTime = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 10
|
| | |
|
| | | return length
|
| | | return sizeof(tagMCSuperGiftInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.GiftID)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | return data
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | GiftID:%d,
|
| | | EndtDate:%s
|
| | | DumpString = '''// AA 16 通知超值礼包信息 //tagMCSuperGiftInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | StartTime:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.GiftID,
|
| | | self.EndtDate
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.StartTime
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSuperGiftInfo=tagMCSuperGiftInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Head.Cmd,m_NAtagMCSuperGiftInfo.Head.SubCmd))] = m_NAtagMCSuperGiftInfo
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Cmd,m_NAtagMCSuperGiftInfo.SubCmd))] = m_NAtagMCSuperGiftInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | Def_PDict_FirstGoldTry = "FirstGoldTry" # 首充试用状态 0-不可试用 1-可试用 2-已试用
|
| | | Def_PDict_DailyGoldChargeState = "DailyGoldChargeState" # 天天首充活动状态,0-未开启;1-已开启
|
| | | Def_PDict_DailyChargeState = "DailyChargeState" # 当日是否已充值
|
| | | Def_PDict_SuperGiftData = "SuperGiftData" # 超值礼包数据
|
| | | Def_PDict_SuperGiftStartTime = "SuperGiftStartTime" # 超值礼包开始时间
|
| | | Def_PDict_DailyGoldChargePrizeRecord = "DailyGoldChargePrizeRecord" # 天天首充领奖记录,0-不可领;1-可领;2-已领
|
| | | Def_PDict_DailyGoldChargeCnt = "DailyGoldChargeCnt" # 当日已充值数
|
| | | Def_PDict_SingleGoldGiftIndex = "SingleGoldGiftIndex" # 单日充值多选一礼包领取状态, 0-未领取,>0已领取索引
|
| | |
| | | # AA 16 通知超值礼包信息 #tagMCSuperGiftInfo
|
| | |
|
| | | class tagMCSuperGiftInfo(Structure):
|
| | | Head = tagHead()
|
| | | GiftID = 0 #(DWORD GiftID)//商品ID
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | data = None
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("StartTime", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x16
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x16
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.GiftID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | return _pos
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x16
|
| | | self.GiftID = 0
|
| | | self.EndtDate = ""
|
| | | self.Cmd = 0xAA
|
| | | self.SubCmd = 0x16
|
| | | self.StartTime = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 10
|
| | |
|
| | | return length
|
| | | return sizeof(tagMCSuperGiftInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.GiftID)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | return data
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | GiftID:%d,
|
| | | EndtDate:%s
|
| | | DumpString = '''// AA 16 通知超值礼包信息 //tagMCSuperGiftInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | StartTime:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.GiftID,
|
| | | self.EndtDate
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.StartTime
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCSuperGiftInfo=tagMCSuperGiftInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Head.Cmd,m_NAtagMCSuperGiftInfo.Head.SubCmd))] = m_NAtagMCSuperGiftInfo
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuperGiftInfo.Cmd,m_NAtagMCSuperGiftInfo.SubCmd))] = m_NAtagMCSuperGiftInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | import random
|
| | | import math
|
| | | import time
|
| | | #---------------------------------------------------------------------
|
| | | ##开始交易
|
| | | # @param curPlayer 玩家实例
|
| | |
| | | def ShopItemOnDay(curPlayer, onEventType):
|
| | | if onEventType == ShareDefine.Def_OnEventType:
|
| | | UpdataSuperGiftTime(curPlayer, True)
|
| | | SyncSuperGiftInfo(curPlayer)
|
| | | OSSaleOpenMail(curPlayer)
|
| | | refreshType = [3]
|
| | | elif onEventType == ShareDefine.Def_OnEventTypeEx:
|
| | |
| | |
|
| | | #超值礼包购买时间
|
| | | def UpdataSuperGiftTime(curPlayer, isOnday=False):
|
| | | superGiftData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftData)
|
| | | giftIndex, startDay = superGiftData%10, superGiftData/10
|
| | | superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')
|
| | | if giftIndex >= len(superGiftTimeList):
|
| | | return
|
| | | if isOnday and not giftIndex:
|
| | | return
|
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)+1
|
| | | newIndex = giftIndex
|
| | | curTime = int(time.time())
|
| | | if isOnday:
|
| | | lastDays = 0
|
| | | pastDay = openServerDay - startDay
|
| | | for i in xrange(giftIndex-1, len(superGiftTimeList)):
|
| | | lastDays += superGiftTimeList[i][1]
|
| | | if pastDay < lastDays:
|
| | | break
|
| | | if pastDay >= lastDays:
|
| | | newIndex = i+2
|
| | | |
| | | startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime)
|
| | | if not startTime:
|
| | | return
|
| | | superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')
|
| | | maxDay = max([info[1] for info in superGiftTimeList])
|
| | | if curTime - startTime >= maxDay * 86400:
|
| | | #活动结束 重置
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, 0)
|
| | | else:
|
| | | newIndex = min(len(superGiftTimeList), giftIndex+1)
|
| | | |
| | | if newIndex == giftIndex:
|
| | | return
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftData, openServerDay*10+newIndex)
|
| | | #֪ͨ
|
| | | if not isOnday:
|
| | | SyncSuperGiftInfo(curPlayer)
|
| | | if newIndex == 1:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, curTime)
|
| | | addItemList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList', 2)
|
| | | PlayerControl.SendMailByKey('SellMail2', [curPlayer.GetID()], addItemList)
|
| | | SyncSuperGiftInfo(curPlayer)
|
| | | return True
|
| | |
|
| | | def SyncSuperGiftInfo(curPlayer):
|
| | | superGiftData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftData)
|
| | | giftIndex, startDay = superGiftData%10, superGiftData/10
|
| | | superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')
|
| | | if giftIndex == 0 or giftIndex > len(superGiftTimeList):
|
| | | startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime)
|
| | | if not startTime:
|
| | | return
|
| | | giftID, day = superGiftTimeList[giftIndex-1]
|
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)+1
|
| | | remainDay = max(0, day - openServerDay+startDay)-1
|
| | | |
| | | packData = ChPyNetSendPack.tagMCSuperGiftInfo()
|
| | | packData.GiftID = giftID
|
| | | packData.EndtDate = str(GameWorld.GetDatetimeByDiffDays(remainDay))[:10]
|
| | | packData.StartTime = startTime
|
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | | def CheckSuperGiftBuy(curPlayer, giftID):
|
| | | #超值礼包是否可购买
|
| | | superGiftData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftData)
|
| | | giftIndex, startDay = superGiftData%10, superGiftData/10
|
| | | superGiftTimeList = IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList')
|
| | | if giftIndex == 0 or giftIndex > len(superGiftTimeList):
|
| | | startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuperGiftStartTime)
|
| | | if not startTime:
|
| | | return
|
| | | curGiftID, day = superGiftTimeList[giftIndex-1]
|
| | | if giftID != curGiftID:
|
| | | |
| | | superGiftTimeDict = dict(IpyGameDataPY.GetFuncEvalCfg('SuperGiftTimeList'))
|
| | | totalDay = superGiftTimeDict.get(giftID, 0)
|
| | | if not totalDay:
|
| | | return
|
| | | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)+1
|
| | | if not max(0, day - openServerDay+startDay):
|
| | | curTime = int(time.time())
|
| | | if (curTime - startTime)/86400 >= totalDay:
|
| | | #已结束
|
| | | return
|
| | | return True
|
| | |
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 0)
|
| | | # 重置今日已充值数
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGoldChargeCnt, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftData, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, 0)
|
| | | # 重置充值次数信息
|
| | | syncRecordIDList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|