9873 【骨折2】【主干】买1送5活动
# Conflicts:
# ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
| | |
| | | BYTE IsDayReset; //是否每天重置
|
| | | };
|
| | |
|
| | | //买一送多活动表
|
| | |
|
| | | struct tagActBuyOne
|
| | | {
|
| | | DWORD _CfgID; //配置ID
|
| | | list PlatformList; //活动平台列表["平台A", "平台A", ...],配[]代表所有
|
| | | list ServerGroupIDList; //服务器ID列表
|
| | | BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | | dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
|
| | | list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | };
|
| | |
|
| | | //集字活动时间表
|
| | |
|
| | | struct tagActCollectWords
|
| | |
| | | char NotifyKey; //全服广播key,默认两个参数(玩家名, 档位额度)
|
| | | };
|
| | |
|
| | | //买一送多活动表
|
| | |
|
| | | struct tagActBuyOne
|
| | | {
|
| | | DWORD _CfgID; //配置ID
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | WORD LVLimit; //限制等级
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | list TemplateIDList; //模板ID列表
|
| | | };
|
| | |
|
| | | //买一送多模板表
|
| | |
|
| | | struct tagActBuyOneTemplate
|
| | | {
|
| | | DWORD _TemplateID; //模板ID
|
| | | DWORD NeedCTGID; //需要充值ID
|
| | | BYTE RecordIndex; //记录索引
|
| | | dict FreeItemInfo; //免费领取的物品信息列表{领取记录索引:[[物品ID,个数,是否拍品]], ...}
|
| | | };
|
| | |
|
| | | //集字活动时间表
|
| | |
|
| | | struct tagActCollectWords
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 65 买一送多活动信息 #tagMCActBuyOneInfo
|
| | |
|
| | | class tagMCActBuyOneInfoFreeItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("ItemCount", c_ushort), |
| | | ("IsBind", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.ItemCount = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCActBuyOneInfoFreeItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 65 买一送多活动信息 //tagMCActBuyOneInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActBuyOneInfoFreeGift(Structure):
|
| | | FreeIndex = 0 #(BYTE FreeIndex)// 免费领取索引
|
| | | FreeItemCount = 0 #(BYTE FreeItemCount)// 免费礼包数
|
| | | FreeItemList = list() #(vector<tagMCActBuyOneInfoFreeItem> FreeItemList)// 免费礼包列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.FreeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FreeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FreeItemCount):
|
| | | temFreeItemList = tagMCActBuyOneInfoFreeItem()
|
| | | _pos = temFreeItemList.ReadData(_lpData, _pos)
|
| | | self.FreeItemList.append(temFreeItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.FreeIndex = 0
|
| | | self.FreeItemCount = 0
|
| | | self.FreeItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.FreeItemCount):
|
| | | length += self.FreeItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.FreeIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.FreeItemCount)
|
| | | for i in range(self.FreeItemCount):
|
| | | data = CommFunc.WriteString(data, self.FreeItemList[i].GetLength(), self.FreeItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | FreeIndex:%d,
|
| | | FreeItemCount:%d,
|
| | | FreeItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.FreeIndex,
|
| | | self.FreeItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActBuyOneInfoGiftbag(Structure):
|
| | | CTGID = 0 #(DWORD CTGID)//所需充值ID
|
| | | RecordIndex = 0 #(BYTE RecordIndex)// 记录索引
|
| | | FreeGiftCount = 0 #(BYTE FreeGiftCount)// 免费礼包数
|
| | | FreeGiftList = list() #(vector<tagMCActBuyOneInfoFreeGift> FreeGiftList)// 免费礼包列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.CTGID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FreeGiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FreeGiftCount):
|
| | | temFreeGiftList = tagMCActBuyOneInfoFreeGift()
|
| | | _pos = temFreeGiftList.ReadData(_lpData, _pos)
|
| | | self.FreeGiftList.append(temFreeGiftList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.CTGID = 0
|
| | | self.RecordIndex = 0
|
| | | self.FreeGiftCount = 0
|
| | | self.FreeGiftList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.FreeGiftCount):
|
| | | length += self.FreeGiftList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.CTGID)
|
| | | data = CommFunc.WriteBYTE(data, self.RecordIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.FreeGiftCount)
|
| | | for i in range(self.FreeGiftCount):
|
| | | data = CommFunc.WriteString(data, self.FreeGiftList[i].GetLength(), self.FreeGiftList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | CTGID:%d,
|
| | | RecordIndex:%d,
|
| | | FreeGiftCount:%d,
|
| | | FreeGiftList:%s
|
| | | '''\
|
| | | %(
|
| | | self.CTGID,
|
| | | self.RecordIndex,
|
| | | self.FreeGiftCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActBuyOneInfo(Structure):
|
| | | Head = tagHead()
|
| | | ActNum = 0 #(BYTE ActNum)//活动编号
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | GiftbagCount = 0 #(BYTE GiftbagCount)// 活动礼包个数
|
| | | GiftbagList = list() #(vector<tagMCActBuyOneInfoGiftbag> GiftbagList)// 礼包列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x65
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.GiftbagCount):
|
| | | temGiftbagList = tagMCActBuyOneInfoGiftbag()
|
| | | _pos = temGiftbagList.ReadData(_lpData, _pos)
|
| | | self.GiftbagList.append(temGiftbagList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x65
|
| | | self.ActNum = 0
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.IsDayReset = 0
|
| | | self.LimitLV = 0
|
| | | self.GiftbagCount = 0
|
| | | self.GiftbagList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.GiftbagCount):
|
| | | length += self.GiftbagList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActNum)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.IsDayReset)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.GiftbagCount)
|
| | | for i in range(self.GiftbagCount):
|
| | | data = CommFunc.WriteString(data, self.GiftbagList[i].GetLength(), self.GiftbagList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActNum:%d,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | IsDayReset:%d,
|
| | | LimitLV:%d,
|
| | | GiftbagCount:%d,
|
| | | GiftbagList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActNum,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.IsDayReset,
|
| | | self.LimitLV,
|
| | | self.GiftbagCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActBuyOneInfo=tagMCActBuyOneInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOneInfo.Head.Cmd,m_NAtagMCActBuyOneInfo.Head.SubCmd))] = m_NAtagMCActBuyOneInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 66 买一送多活动玩家信息 #tagMCActBuyOnePlayerInfo
|
| | |
|
| | | class tagMCActBuyOnePlayerInfo(Structure):
|
| | | Head = tagHead()
|
| | | ActNum = 0 #(BYTE ActNum)// 活动编号
|
| | | FreeRecordCount = 0 #(BYTE FreeRecordCount)// 免费礼包领奖记录个数
|
| | | FreeRecordList = list() #(vector<DWORD> FreeRecordList)// 免费礼包领奖记录列表,按所需充值ID记录索引取记录,每个记录代表每个充值ID对应免费礼包的领取记录,按免费领取索引位运算记录是否已领取
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x66
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FreeRecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FreeRecordCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.FreeRecordList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x66
|
| | | self.ActNum = 0
|
| | | self.FreeRecordCount = 0
|
| | | self.FreeRecordList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4 * self.FreeRecordCount
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActNum)
|
| | | data = CommFunc.WriteBYTE(data, self.FreeRecordCount)
|
| | | for i in range(self.FreeRecordCount):
|
| | | data = CommFunc.WriteDWORD(data, self.FreeRecordList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActNum:%d,
|
| | | FreeRecordCount:%d,
|
| | | FreeRecordList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActNum,
|
| | | self.FreeRecordCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActBuyOnePlayerInfo=tagMCActBuyOnePlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOnePlayerInfo.Head.Cmd,m_NAtagMCActBuyOnePlayerInfo.Head.SubCmd))] = m_NAtagMCActBuyOnePlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 40 集字活动信息 #tagMCActCollectWordsInfo
|
| | |
|
| | | class tagMCActCollectWordsNeedItem(Structure):
|
| | |
| | | ("BYTE", "IsDayReset", 0),
|
| | | ),
|
| | |
|
| | | "ActBuyOne":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("list", "PlatformList", 0),
|
| | | ("list", "ServerGroupIDList", 0),
|
| | | ("BYTE", "ActNum", 0),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("dict", "NotifyInfoStart", 0),
|
| | | ("dict", "NotifyInfoEnd", 0),
|
| | | ("list", "NotifyInfoLoop", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ),
|
| | |
|
| | | "ActCollectWords":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("list", "PlatformList", 0),
|
| | |
| | | def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | def GetIsDayReset(self): return self.IsDayReset # 是否每天重置 |
| | | |
| | | # 买一送多活动表 |
| | | class IPY_ActBuyOne(): |
| | | |
| | | def __init__(self): |
| | | self.CfgID = 0
|
| | | self.PlatformList = []
|
| | | self.ServerGroupIDList = []
|
| | | self.ActNum = 0
|
| | | self.StartDate = ""
|
| | | self.EndDate = ""
|
| | | self.NotifyInfoStart = {}
|
| | | self.NotifyInfoEnd = {}
|
| | | self.NotifyInfoLoop = []
|
| | | self.IsDayReset = 0 |
| | | return |
| | | |
| | | def GetCfgID(self): return self.CfgID # 配置ID
|
| | | def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
|
| | | def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器ID列表
|
| | | def GetActNum(self): return self.ActNum # 活动分组编号, 活动类型 * 10 + 不同界面编号
|
| | | def GetStartDate(self): return self.StartDate # 开启日期
|
| | | def GetEndDate(self): return self.EndDate # 结束日期
|
| | | def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
|
| | | def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
|
| | | def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | def GetIsDayReset(self): return self.IsDayReset # 是否每天重置 |
| | | |
| | | # 集字活动时间表 |
| | | class IPY_ActCollectWords(): |
| | | |
| | |
| | | self.ipyActExpRateLen = len(self.ipyActExpRateCache)
|
| | | self.ipyActCostRebateCache = self.__LoadFileData("ActCostRebate", IPY_ActCostRebate)
|
| | | self.ipyActCostRebateLen = len(self.ipyActCostRebateCache)
|
| | | self.ipyActBuyOneCache = self.__LoadFileData("ActBuyOne", IPY_ActBuyOne)
|
| | | self.ipyActBuyOneLen = len(self.ipyActBuyOneCache)
|
| | | self.ipyActCollectWordsCache = self.__LoadFileData("ActCollectWords", IPY_ActCollectWords)
|
| | | self.ipyActCollectWordsLen = len(self.ipyActCollectWordsCache)
|
| | | self.ipyActGarbageSortingCache = self.__LoadFileData("ActGarbageSorting", IPY_ActGarbageSorting)
|
| | |
| | | def GetActExpRateByIndex(self, index): return self.ipyActExpRateCache[index]
|
| | | def GetActCostRebateCount(self): return self.ipyActCostRebateLen
|
| | | def GetActCostRebateByIndex(self, index): return self.ipyActCostRebateCache[index]
|
| | | def GetActBuyOneCount(self): return self.ipyActBuyOneLen
|
| | | def GetActBuyOneByIndex(self, index): return self.ipyActBuyOneCache[index]
|
| | | def GetActCollectWordsCount(self): return self.ipyActCollectWordsLen
|
| | | def GetActCollectWordsByIndex(self, index): return self.ipyActCollectWordsCache[index]
|
| | | def GetActGarbageSortingCount(self): return self.ipyActGarbageSortingLen
|
| | |
| | | Def_PDict_GrowupBuyID = "GrowupBuyID" # 玩家身上的重置成长必买活动ID,唯一标识,取活动开始日期time值
|
| | | Def_PDict_GrowupBuyState = "GrowupBuyState" # 当前可购买的活动充值ID索引状态,按组索引位存储对应组可购买的充值ID所对应的索引
|
| | |
|
| | | #买一送多
|
| | | Def_PDict_BuyOneID = "BuyOneID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time,参数(活动编号)
|
| | | Def_PDict_BuyOneFreeItemState = "BuyOneFreeItemState_%s_%s" # 玩家免费礼包领取记录,参数(活动编号,记录索引)
|
| | |
|
| | | #限时特惠活动
|
| | | Def_PDict_SpringSaleID = "SpringSaleID_%s" # 玩家身上的限时特惠活动ID,唯一标识,取活动开始日期time,参数(活动编号)
|
| | | Def_PDict_SpringSaleMailState = "SpringSaleMailState_%s" # 玩家身上的活动更新提醒邮件状态,参数(活动编号)
|
| | |
| | | Def_RewardType_SponsorStar, #赞助星级礼包奖励 57
|
| | | Def_RewardType_GubaoItemEff, #古宝特殊效果物品奖励 58
|
| | | Def_RewardType_SuccessScore, #成就积分奖励 59
|
| | | )= range(60)
|
| | | Def_RewardType_BuyOne, #买一送多活动免费奖励 60
|
| | | )= range(61)
|
| | |
|
| | |
|
| | | #boss复活相关活动定义
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 65 买一送多活动信息 #tagMCActBuyOneInfo
|
| | |
|
| | | class tagMCActBuyOneInfoFreeItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("ItemCount", c_ushort), |
| | | ("IsBind", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.ItemCount = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCActBuyOneInfoFreeItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AA 65 买一送多活动信息 //tagMCActBuyOneInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActBuyOneInfoFreeGift(Structure):
|
| | | FreeIndex = 0 #(BYTE FreeIndex)// 免费领取索引
|
| | | FreeItemCount = 0 #(BYTE FreeItemCount)// 免费礼包数
|
| | | FreeItemList = list() #(vector<tagMCActBuyOneInfoFreeItem> FreeItemList)// 免费礼包列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.FreeIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FreeItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FreeItemCount):
|
| | | temFreeItemList = tagMCActBuyOneInfoFreeItem()
|
| | | _pos = temFreeItemList.ReadData(_lpData, _pos)
|
| | | self.FreeItemList.append(temFreeItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.FreeIndex = 0
|
| | | self.FreeItemCount = 0
|
| | | self.FreeItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.FreeItemCount):
|
| | | length += self.FreeItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.FreeIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.FreeItemCount)
|
| | | for i in range(self.FreeItemCount):
|
| | | data = CommFunc.WriteString(data, self.FreeItemList[i].GetLength(), self.FreeItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | FreeIndex:%d,
|
| | | FreeItemCount:%d,
|
| | | FreeItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.FreeIndex,
|
| | | self.FreeItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActBuyOneInfoGiftbag(Structure):
|
| | | CTGID = 0 #(DWORD CTGID)//所需充值ID
|
| | | RecordIndex = 0 #(BYTE RecordIndex)// 记录索引
|
| | | FreeGiftCount = 0 #(BYTE FreeGiftCount)// 免费礼包数
|
| | | FreeGiftList = list() #(vector<tagMCActBuyOneInfoFreeGift> FreeGiftList)// 免费礼包列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.CTGID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.RecordIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FreeGiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FreeGiftCount):
|
| | | temFreeGiftList = tagMCActBuyOneInfoFreeGift()
|
| | | _pos = temFreeGiftList.ReadData(_lpData, _pos)
|
| | | self.FreeGiftList.append(temFreeGiftList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.CTGID = 0
|
| | | self.RecordIndex = 0
|
| | | self.FreeGiftCount = 0
|
| | | self.FreeGiftList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.FreeGiftCount):
|
| | | length += self.FreeGiftList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.CTGID)
|
| | | data = CommFunc.WriteBYTE(data, self.RecordIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.FreeGiftCount)
|
| | | for i in range(self.FreeGiftCount):
|
| | | data = CommFunc.WriteString(data, self.FreeGiftList[i].GetLength(), self.FreeGiftList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | CTGID:%d,
|
| | | RecordIndex:%d,
|
| | | FreeGiftCount:%d,
|
| | | FreeGiftList:%s
|
| | | '''\
|
| | | %(
|
| | | self.CTGID,
|
| | | self.RecordIndex,
|
| | | self.FreeGiftCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCActBuyOneInfo(Structure):
|
| | | Head = tagHead()
|
| | | ActNum = 0 #(BYTE ActNum)//活动编号
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | GiftbagCount = 0 #(BYTE GiftbagCount)// 活动礼包个数
|
| | | GiftbagList = list() #(vector<tagMCActBuyOneInfoGiftbag> GiftbagList)// 礼包列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x65
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.GiftbagCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.GiftbagCount):
|
| | | temGiftbagList = tagMCActBuyOneInfoGiftbag()
|
| | | _pos = temGiftbagList.ReadData(_lpData, _pos)
|
| | | self.GiftbagList.append(temGiftbagList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x65
|
| | | self.ActNum = 0
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.IsDayReset = 0
|
| | | self.LimitLV = 0
|
| | | self.GiftbagCount = 0
|
| | | self.GiftbagList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.GiftbagCount):
|
| | | length += self.GiftbagList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActNum)
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.IsDayReset)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.GiftbagCount)
|
| | | for i in range(self.GiftbagCount):
|
| | | data = CommFunc.WriteString(data, self.GiftbagList[i].GetLength(), self.GiftbagList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActNum:%d,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | IsDayReset:%d,
|
| | | LimitLV:%d,
|
| | | GiftbagCount:%d,
|
| | | GiftbagList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActNum,
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.IsDayReset,
|
| | | self.LimitLV,
|
| | | self.GiftbagCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActBuyOneInfo=tagMCActBuyOneInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOneInfo.Head.Cmd,m_NAtagMCActBuyOneInfo.Head.SubCmd))] = m_NAtagMCActBuyOneInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 66 买一送多活动玩家信息 #tagMCActBuyOnePlayerInfo
|
| | |
|
| | | class tagMCActBuyOnePlayerInfo(Structure):
|
| | | Head = tagHead()
|
| | | ActNum = 0 #(BYTE ActNum)// 活动编号
|
| | | FreeRecordCount = 0 #(BYTE FreeRecordCount)// 免费礼包领奖记录个数
|
| | | FreeRecordList = list() #(vector<DWORD> FreeRecordList)// 免费礼包领奖记录列表,按所需充值ID记录索引取记录,每个记录代表每个充值ID对应免费礼包的领取记录,按免费领取索引位运算记录是否已领取
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x66
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.FreeRecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.FreeRecordCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.FreeRecordList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAA
|
| | | self.Head.SubCmd = 0x66
|
| | | self.ActNum = 0
|
| | | self.FreeRecordCount = 0
|
| | | self.FreeRecordList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4 * self.FreeRecordCount
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActNum)
|
| | | data = CommFunc.WriteBYTE(data, self.FreeRecordCount)
|
| | | for i in range(self.FreeRecordCount):
|
| | | data = CommFunc.WriteDWORD(data, self.FreeRecordList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActNum:%d,
|
| | | FreeRecordCount:%d,
|
| | | FreeRecordList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActNum,
|
| | | self.FreeRecordCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActBuyOnePlayerInfo=tagMCActBuyOnePlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActBuyOnePlayerInfo.Head.Cmd,m_NAtagMCActBuyOnePlayerInfo.Head.SubCmd))] = m_NAtagMCActBuyOnePlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 40 集字活动信息 #tagMCActCollectWordsInfo
|
| | |
|
| | | class tagMCActCollectWordsNeedItem(Structure):
|
| | |
| | | return {}
|
| | | return actNumDict[actNum]
|
| | |
|
| | | def GetTemplateID(ipyData, cfgID, dayIndex):
|
| | | if cfgID == None or dayIndex == None or not ipyData:
|
| | | return 0
|
| | | templateIDList = ipyData.GetTemplateIDList()
|
| | | templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
|
| | | return templateID
|
| | |
|
| | | def GetOperationActionDateStr(ipyData):
|
| | | ## 获取运营活动对应日期,存数字代表开服天配置,需要转化为对应的日期
|
| | | curDateTime = datetime.datetime.today()
|
| | |
| | | ("char", "NotifyKey", 0),
|
| | | ),
|
| | |
|
| | | "ActBuyOne":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ("list", "TemplateIDList", 0),
|
| | | ),
|
| | |
|
| | | "ActBuyOneTemplate":(
|
| | | ("DWORD", "TemplateID", 1),
|
| | | ("DWORD", "NeedCTGID", 0),
|
| | | ("BYTE", "RecordIndex", 0),
|
| | | ("dict", "FreeItemInfo", 0),
|
| | | ),
|
| | |
|
| | | "ActCollectWords":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "StartDate", 0),
|
| | |
| | | def GetAwardItemList(self): return self.AwardItemList # 返利物品信息列表 {世界等级范围:[({职业:物品ID,..},个数,是否绑定), ...]}
|
| | | def GetNotifyKey(self): return self.NotifyKey # 全服广播key,默认两个参数(玩家名, 档位额度) |
| | | |
| | | # 买一送多活动表 |
| | | class IPY_ActBuyOne(): |
| | | |
| | | def __init__(self): |
| | | self.CfgID = 0
|
| | | self.StartDate = ""
|
| | | self.EndDate = ""
|
| | | self.LVLimit = 0
|
| | | self.IsDayReset = 0
|
| | | self.TemplateIDList = [] |
| | | return |
| | | |
| | | def GetCfgID(self): return self.CfgID # 配置ID
|
| | | def GetStartDate(self): return self.StartDate # 开启日期
|
| | | def GetEndDate(self): return self.EndDate # 结束日期
|
| | | def GetLVLimit(self): return self.LVLimit # 限制等级
|
| | | def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
|
| | | def GetTemplateIDList(self): return self.TemplateIDList # 模板ID列表 |
| | | |
| | | # 买一送多模板表 |
| | | class IPY_ActBuyOneTemplate(): |
| | | |
| | | def __init__(self): |
| | | self.TemplateID = 0
|
| | | self.NeedCTGID = 0
|
| | | self.RecordIndex = 0
|
| | | self.FreeItemInfo = {} |
| | | return |
| | | |
| | | def GetTemplateID(self): return self.TemplateID # 模板ID
|
| | | def GetNeedCTGID(self): return self.NeedCTGID # 需要充值ID
|
| | | def GetRecordIndex(self): return self.RecordIndex # 记录索引
|
| | | def GetFreeItemInfo(self): return self.FreeItemInfo # 免费领取的物品信息列表{领取记录索引:[[物品ID,个数,是否拍品]], ...} |
| | | |
| | | # 集字活动时间表 |
| | | class IPY_ActCollectWords(): |
| | | |
| | |
| | | self.ipyActCostRebateLen = len(self.ipyActCostRebateCache)
|
| | | self.ipyCostRebateTemplateCache = self.__LoadFileData("CostRebateTemplate", IPY_CostRebateTemplate)
|
| | | self.ipyCostRebateTemplateLen = len(self.ipyCostRebateTemplateCache)
|
| | | self.ipyActBuyOneCache = self.__LoadFileData("ActBuyOne", IPY_ActBuyOne)
|
| | | self.ipyActBuyOneLen = len(self.ipyActBuyOneCache)
|
| | | self.ipyActBuyOneTemplateCache = self.__LoadFileData("ActBuyOneTemplate", IPY_ActBuyOneTemplate)
|
| | | self.ipyActBuyOneTemplateLen = len(self.ipyActBuyOneTemplateCache)
|
| | | self.ipyActCollectWordsCache = self.__LoadFileData("ActCollectWords", IPY_ActCollectWords)
|
| | | self.ipyActCollectWordsLen = len(self.ipyActCollectWordsCache)
|
| | | self.ipyCollectWordsExchangeCache = self.__LoadFileData("CollectWordsExchange", IPY_CollectWordsExchange)
|
| | |
| | | def GetActCostRebateByIndex(self, index): return self.ipyActCostRebateCache[index]
|
| | | def GetCostRebateTemplateCount(self): return self.ipyCostRebateTemplateLen
|
| | | def GetCostRebateTemplateByIndex(self, index): return self.ipyCostRebateTemplateCache[index]
|
| | | def GetActBuyOneCount(self): return self.ipyActBuyOneLen
|
| | | def GetActBuyOneByIndex(self, index): return self.ipyActBuyOneCache[index]
|
| | | def GetActBuyOneTemplateCount(self): return self.ipyActBuyOneTemplateLen
|
| | | def GetActBuyOneTemplateByIndex(self, index): return self.ipyActBuyOneTemplateCache[index]
|
| | | def GetActCollectWordsCount(self): return self.ipyActCollectWordsLen
|
| | | def GetActCollectWordsByIndex(self, index): return self.ipyActCollectWordsCache[index]
|
| | | def GetCollectWordsExchangeCount(self): return self.ipyCollectWordsExchangeLen
|
New file |
| | |
| | | #!/usr/bin/python |
| | | # -*- coding: GBK -*- |
| | | #------------------------------------------------------------------------------- |
| | | # |
| | | ##@package Player.PlayerActBuyOne |
| | | # |
| | | # @todo:买一送多活动 |
| | | # @author hxp |
| | | # @date 2023-08-01 |
| | | # @version 1.0 |
| | | # |
| | | # 详细描述: 买一送多活动 |
| | | # |
| | | #------------------------------------------------------------------------------- |
| | | #"""Version = 2023-08-01 16:00""" |
| | | #------------------------------------------------------------------------------- |
| | | |
| | | import PyGameData |
| | | import ShareDefine |
| | | import PlayerControl |
| | | import IpyGameDataPY |
| | | import ChPyNetSendPack |
| | | import DataRecordPack |
| | | import NetPackCommon |
| | | import ItemControler |
| | | import IPY_GameWorld |
| | | import PlayerCoin |
| | | import GameWorld |
| | | import ChConfig |
| | | |
| | | RecordIndexMax = 10 # 每个模板最大支持充值ID数 |
| | | |
| | | def OnPlayerLogin(curPlayer): |
| | | |
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BuyOne, {}).values(): |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) |
| | | isReset = __CheckPlayerBuyOneAction(curPlayer, actNum) |
| | | # 活动中同步活动信息 |
| | | if not isReset and actInfo.get(ShareDefine.ActKey_State): |
| | | Sync_BuyOneActionInfo(curPlayer, actNum) |
| | | Sync_BuyOnePlayerInfo(curPlayer, actNum) |
| | | |
| | | return |
| | | |
| | | def RefreshBuyOneActionInfo(actNum): |
| | | ## 收到GameServer同步的活动信息,刷新活动信息 |
| | | playerManager = GameWorld.GetPlayerManager() |
| | | for index in xrange(playerManager.GetPlayerCount()): |
| | | curPlayer = playerManager.GetPlayerByIndex(index) |
| | | if curPlayer.GetID() == 0: |
| | | continue |
| | | __CheckPlayerBuyOneAction(curPlayer, actNum) |
| | | return |
| | | |
| | | |
| | | def __CheckPlayerBuyOneAction(curPlayer, actNum): |
| | | ## 检查玩活动数据信息 |
| | | |
| | | playerID = curPlayer.GetPlayerID() |
| | | |
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BuyOne, actNum) |
| | | actID = actInfo.get(ShareDefine.ActKey_ID, 0) |
| | | state = actInfo.get(ShareDefine.ActKey_State, 0) |
| | | #cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0) |
| | | #dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) |
| | | |
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyOneID % actNum) # 玩家身上的活动ID |
| | | |
| | | # 活动ID 相同的话不处理 |
| | | if actID == playerActID: |
| | | GameWorld.DebugLog("买一送多活动ID不变,不处理! actID=%s" % actID, curPlayer.GetPlayerID()) |
| | | return |
| | | GameWorld.DebugLog("买一送多活动重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID) |
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BuyOneID % actNum, actID) |
| | | for i in range(RecordIndexMax): |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BuyOneFreeItemState % (actNum, i), 0) |
| | | |
| | | if state: |
| | | # 重置充值ID充值记录 |
| | | __ResetCTGIDCount(curPlayer, actInfo) |
| | | |
| | | Sync_BuyOneActionInfo(curPlayer, actNum) |
| | | Sync_BuyOnePlayerInfo(curPlayer, actNum) |
| | | |
| | | return True |
| | | |
| | | def __ResetCTGIDCount(curPlayer, actInfo): |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID) |
| | | dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) |
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActBuyOne", cfgID) |
| | | if not ipyData: |
| | | return |
| | | templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex) |
| | | if not templateID: |
| | | return |
| | | tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBuyOneTemplate", templateID) |
| | | if not tempIpyDataList: |
| | | return |
| | | resetCTGIDList = [] |
| | | for tempIpyData in tempIpyDataList: |
| | | resetCTGIDList.append(tempIpyData.GetNeedCTGID()) |
| | | PlayerCoin.DoResetCTGCountByIDList(curPlayer, "ActBuyOne", resetCTGIDList) |
| | | return |
| | | |
| | | def GetBuyOneFreeAward(curPlayer, awardIndex, actNum): |
| | | '''活动免费奖励 |
| | | @param awardIndex: 奖励索引 = recordIndex*100 + freeIndex |
| | | @param actNum: 活动编号,如11 或 12 代表不同的活动 |
| | | ''' |
| | | playerID = curPlayer.GetPlayerID() |
| | | |
| | | actNum = GameWorld.ToIntDef(actNum, 0) |
| | | if actNum <= 0: |
| | | GameWorld.Log("没有指定领取的活动编号! actNum=%s" % actNum, playerID) |
| | | return |
| | | |
| | | recordIndex = awardIndex / 100 |
| | | freeIndex = awardIndex % 100 |
| | | |
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BuyOne, actNum) |
| | | |
| | | if not actInfo.get(ShareDefine.ActKey_State): |
| | | GameWorld.Log("买一送一非活动中无法领取奖励! actNum=%s" % actNum, playerID) |
| | | return |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID) |
| | | dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) |
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActBuyOne", cfgID) |
| | | if not ipyData: |
| | | return |
| | | templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex) |
| | | if not templateID: |
| | | return |
| | | |
| | | tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBuyOneTemplate", templateID) |
| | | if not tempIpyDataList: |
| | | return |
| | | |
| | | needCTGID = 0 |
| | | freeItemList = [] |
| | | |
| | | for tempIpyData in tempIpyDataList: |
| | | if recordIndex != tempIpyData.GetRecordIndex(): |
| | | continue |
| | | needCTGID = tempIpyData.GetNeedCTGID() |
| | | freeItemInfo = tempIpyData.GetFreeItemInfo() |
| | | freeItemList = freeItemInfo.get(freeIndex, []) |
| | | break |
| | | |
| | | if not needCTGID or not freeItemList: |
| | | GameWorld.ErrLog("买一送一活动没有该奖励信息! actNum=%s,cfgID=%s,templateID=%s,recordIndex=%s,freeIndex=%s" |
| | | % (actNum, cfgID, templateID, recordIndex, freeIndex), playerID) |
| | | return |
| | | |
| | | totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % needCTGID) |
| | | if not totalBuyCount: |
| | | GameWorld.Log("买一送一活动该奖励未充值,无法免费领取! actNum=%s,cfgID=%s,templateID=%s,recordIndex=%s,needCTGID=%s" |
| | | % (actNum, cfgID, templateID, recordIndex, needCTGID), playerID) |
| | | return |
| | | |
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyOneFreeItemState % (actNum, recordIndex)) |
| | | if awardRecord & pow(2, freeIndex): |
| | | GameWorld.Log("买一送一活动已经领取过该免费奖励! actNum=%s,cfgID=%s,templateID=%s,recordIndex=%s,freeIndex=%s" |
| | | % (actNum, cfgID, templateID, recordIndex, freeIndex), playerID) |
| | | return |
| | | |
| | | # 检查背包 |
| | | if not ItemControler.CheckPackSpaceEnough(curPlayer, freeItemList): |
| | | return |
| | | |
| | | awardRecord |= pow(2, freeIndex) |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BuyOneFreeItemState % (actNum, recordIndex), awardRecord) |
| | | Sync_BuyOnePlayerInfo(curPlayer, actNum) |
| | | |
| | | for itemID, itemCount, isAuctionItem in freeItemList: |
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem]) |
| | | |
| | | addDataDict = {"templateID":templateID, "cfgID":cfgID, "recordIndex":recordIndex, "freeIndex":freeIndex, |
| | | "freeItemList":str(freeItemList), "actNum":actNum} |
| | | DataRecordPack.DR_FuncGiveItem(curPlayer, "ActBuyOne", addDataDict) |
| | | GameWorld.Log("买一送一活动领取免费奖励! actNum=%s,cfgID=%s,templateID=%s,recordIndex=%s,freeIndex=%s,freeItemList=%s" |
| | | % (actNum, cfgID, templateID, recordIndex, freeIndex, freeItemList), playerID) |
| | | return |
| | | |
| | | def Sync_BuyOnePlayerInfo(curPlayer, actNum): |
| | | ## 通知玩家数据信息 |
| | | clientPack = ChPyNetSendPack.tagMCActBuyOnePlayerInfo() |
| | | clientPack.ActNum = actNum |
| | | clientPack.FreeRecordList = [] |
| | | for i in range(RecordIndexMax): |
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyOneFreeItemState % (actNum, i)) |
| | | clientPack.FreeRecordList.append(awardRecord) |
| | | clientPack.FreeRecordCount = len(clientPack.FreeRecordList) |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack) |
| | | return |
| | | |
| | | def Sync_BuyOneActionInfo(curPlayer, actNum): |
| | | ## 通知活动信息 |
| | | |
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BuyOne, actNum) |
| | | if not actInfo.get(ShareDefine.ActKey_State): |
| | | return |
| | | |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID) |
| | | dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) |
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActBuyOne", cfgID) |
| | | if not ipyData: |
| | | return |
| | | templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex) |
| | | if not templateID: |
| | | return |
| | | tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBuyOneTemplate", templateID) |
| | | if not tempIpyDataList: |
| | | return |
| | | |
| | | startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) |
| | | startDateSync = actInfo.get(ShareDefine.ActKey_StartDateSync, startDateStr) |
| | | actInfo = ChPyNetSendPack.tagMCActBuyOneInfo() |
| | | actInfo.ActNum = actNum |
| | | actInfo.StartDate = startDateSync |
| | | actInfo.EndtDate = endDateStr |
| | | actInfo.LimitLV = ipyData.GetLVLimit() |
| | | actInfo.IsDayReset = ipyData.GetIsDayReset() |
| | | actInfo.GiftbagList = [] |
| | | |
| | | for tempIpyData in tempIpyDataList: |
| | | giftbag = ChPyNetSendPack.tagMCActBuyOneInfoGiftbag() |
| | | giftbag.CTGID = tempIpyData.GetNeedCTGID() |
| | | giftbag.RecordIndex = tempIpyData.GetRecordIndex() |
| | | giftbag.FreeGiftList = [] |
| | | |
| | | freeItemInfo = tempIpyData.GetFreeItemInfo() |
| | | freeIndexList = freeItemInfo.keys() |
| | | freeIndexList.sort() |
| | | for freeIndex in freeIndexList: |
| | | freeGift = ChPyNetSendPack.tagMCActBuyOneInfoFreeGift() |
| | | freeGift.FreeIndex = freeIndex |
| | | freeGift.FreeItemList = [] |
| | | freeItemList = freeItemInfo[freeIndex] |
| | | for itemID, itemCount, isAuctionItem in freeItemList: |
| | | freeItem = ChPyNetSendPack.tagMCActBuyOneInfoFreeItem() |
| | | freeItem.ItemID = itemID |
| | | freeItem.ItemCount = itemCount |
| | | freeItem.IsBind = isAuctionItem |
| | | freeGift.FreeItemList.append(freeItem) |
| | | freeGift.FreeItemCount = len(freeGift.FreeItemList) |
| | | giftbag.FreeGiftList.append(freeGift) |
| | | |
| | | giftbag.FreeGiftCount = len(giftbag.FreeGiftList) |
| | | |
| | | actInfo.GiftbagList.append(giftbag) |
| | | |
| | | actInfo.GiftbagCount = len(actInfo.GiftbagList) |
| | | NetPackCommon.SendFakePack(curPlayer, actInfo) |
| | | return |
| | |
| | | Sync_CoinToGoldCountInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def DoResetCTGCountByIDList(curPlayer, resetEvent, resetCTGIDList):
|
| | | # 重置充值次数
|
| | | if not resetCTGIDList:
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | for recordID in resetCTGIDList:
|
| | | totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
|
| | | todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
|
| | | if not totalBuyCount and not todayBuyCount:
|
| | | continue
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
|
| | | drDict = {"PlayerID":curPlayer.GetPlayerID(),"AccID":curPlayer.GetAccID(), "ResetEvent":resetEvent,
|
| | | "totalBuyCount":totalBuyCount, "todayBuyCount":todayBuyCount, "recordID":recordID}
|
| | | DataRecordPack.SendEventPack("ResetCTGCount", drDict, curPlayer)
|
| | | GameWorld.Log("重置充值次数: resetEvent=%s,recordID=%s,totalBuyCount=%s,todayBuyCount=%s" |
| | | % (resetEvent, recordID, totalBuyCount, todayBuyCount), playerID)
|
| | | Sync_CoinToGoldCountInfo(curPlayer, resetCTGIDList)
|
| | | return
|
| | |
|
| | | def OnDay(curPlayer):
|
| | | ## 充值相关过天
|
| | |
| | | import PlayerActRechargePrize
|
| | | import PlayerActGrowupBuy
|
| | | import PlayerActTurntable
|
| | | import PlayerActBuyOne
|
| | | import PlayerSpringSale
|
| | | import PlayerBossReborn
|
| | | import PlayerWeekParty
|
| | |
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_DailyGiftbag:
|
| | | PlayerDailyGiftbag.RefreshDailyGiftbagActionInfo()
|
| | | |
| | | |
| | | elif actionName == ShareDefine.OperationActionName_BuyOne:
|
| | | PlayerActBuyOne.RefreshBuyOneActionInfo(actNum)
|
| | | |
| | | elif actionName == ShareDefine.OperationActionName_FairyCeremony:
|
| | | PlayerFairyCeremony.RefreshOperationAction_FairyCeremony()
|
| | |
|