From 8bb11f630222dfe8d264d915ca7b638167af95eb Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 01 八月 2023 15:56:40 +0800 Subject: [PATCH] 9873 【骨折2】【主干】买1送5活动 --- ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 44 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 342 ++++++++++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 58 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py | 19 + PySysDB/PySysDBPY.h | 22 + ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py | 7 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyOne.py | 255 +++++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 6 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 342 ++++++++++++++++++ PySysDB/PySysDBG.h | 16 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 7 11 files changed, 1,116 insertions(+), 2 deletions(-) diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h index 0f5f445..d61ad48 100644 --- a/PySysDB/PySysDBG.h +++ b/PySysDB/PySysDBG.h @@ -473,6 +473,22 @@ 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 diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index 2d732ce..d47397c 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -1631,6 +1631,28 @@ 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 diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index c2f6256..e58e723 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -29319,6 +29319,348 @@ #------------------------------------------------------ +# 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): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py index e03e206..65f0b57 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py @@ -398,6 +398,19 @@ ("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), @@ -1663,6 +1676,33 @@ 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(): @@ -2795,6 +2835,8 @@ 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) @@ -3125,6 +3167,8 @@ 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 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index 4392eb8..f704a64 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -3823,6 +3823,10 @@ 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" # 玩家身上的活动更新提醒邮件状态,参数(活动编号) @@ -5718,7 +5722,8 @@ Def_RewardType_SponsorStar, #赞助星级礼包奖励 57 Def_RewardType_GubaoItemEff, #古宝特殊效果物品奖励 58 Def_RewardType_SuccessScore, #成就积分奖励 59 -)= range(60) +Def_RewardType_BuyOne, #买一送多活动免费奖励 60 +)= range(61) #boss复活相关活动定义 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index c2f6256..e58e723 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -29319,6 +29319,348 @@ #------------------------------------------------------ +# 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): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py index 47a18b2..9b7c547 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py @@ -611,6 +611,13 @@ 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() diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index 92dbdec..703f7f3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -1298,6 +1298,22 @@ ("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), @@ -4749,6 +4765,40 @@ 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(): @@ -6702,6 +6752,10 @@ 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) @@ -7294,6 +7348,10 @@ 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 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyOne.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyOne.py new file mode 100644 index 0000000..2d0fc50 --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyOne.py @@ -0,0 +1,255 @@ +#!/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 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py index 304ec51..aa4e7f6 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py @@ -145,6 +145,25 @@ 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): ## 充值相关过天 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py index 5a22cae..09fe777 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py @@ -89,6 +89,7 @@ import PlayerActRechargePrize import PlayerActGrowupBuy import PlayerActTurntable +import PlayerActBuyOne import PlayerSpringSale import PlayerBossReborn import PlayerWeekParty @@ -1428,7 +1429,10 @@ elif actionName == ShareDefine.OperationActionName_DailyGiftbag: PlayerDailyGiftbag.RefreshDailyGiftbagActionInfo() - + + elif actionName == ShareDefine.OperationActionName_BuyOne: + PlayerActBuyOne.RefreshBuyOneActionInfo(actNum) + elif actionName == ShareDefine.OperationActionName_FairyCeremony: PlayerFairyCeremony.RefreshOperationAction_FairyCeremony() -- Gitblit v1.8.0