From 0d5d93d5adc8035d2a140ecb363fdb464cde9ed0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 10 七月 2024 19:29:28 +0800 Subject: [PATCH] 10192 【越南】【主干】【港台】【砍树】上线增加膜拜主动推送(膜拜玩家信息转json格式) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 482 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 418 insertions(+), 64 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 21dc35d..bde1c54 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -424,6 +424,190 @@ #------------------------------------------------------ +# A0 08 玩家记录信息 #tagGCPlayerRecInfo + +class tagGCPlayerRec(Structure): + Time = 0 #(DWORD Time)//时间 + Value1 = 0 #(DWORD Value1)//值1 + Value2 = 0 #(DWORD Value2)//值2 + Value3 = 0 #(DWORD Value3)//值3 + Value4 = 0 #(DWORD Value4)//值4 + Value5 = 0 #(DWORD Value5)//值5 + Value6 = 0 #(DWORD Value6)//值6 + Value7 = 0 #(DWORD Value7)//值7 + Value8 = 0 #(DWORD Value8)//值8 + UserDataLen = 0 #(WORD UserDataLen)//扩展数据长度 + UserData = "" #(String UserData)//扩展数据 + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value2,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value3,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value4,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value5,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value6,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value7,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.Value8,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.UserDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen) + return _pos + + def Clear(self): + self.Time = 0 + self.Value1 = 0 + self.Value2 = 0 + self.Value3 = 0 + self.Value4 = 0 + self.Value5 = 0 + self.Value6 = 0 + self.Value7 = 0 + self.Value8 = 0 + self.UserDataLen = 0 + self.UserData = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 4 + length += 2 + length += len(self.UserData) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.Time) + data = CommFunc.WriteDWORD(data, self.Value1) + data = CommFunc.WriteDWORD(data, self.Value2) + data = CommFunc.WriteDWORD(data, self.Value3) + data = CommFunc.WriteDWORD(data, self.Value4) + data = CommFunc.WriteDWORD(data, self.Value5) + data = CommFunc.WriteDWORD(data, self.Value6) + data = CommFunc.WriteDWORD(data, self.Value7) + data = CommFunc.WriteDWORD(data, self.Value8) + data = CommFunc.WriteWORD(data, self.UserDataLen) + data = CommFunc.WriteString(data, self.UserDataLen, self.UserData) + return data + + def OutputString(self): + DumpString = ''' + Time:%d, + Value1:%d, + Value2:%d, + Value3:%d, + Value4:%d, + Value5:%d, + Value6:%d, + Value7:%d, + Value8:%d, + UserDataLen:%d, + UserData:%s + '''\ + %( + self.Time, + self.Value1, + self.Value2, + self.Value3, + self.Value4, + self.Value5, + self.Value6, + self.Value7, + self.Value8, + self.UserDataLen, + self.UserData + ) + return DumpString + + +class tagGCPlayerRecInfo(Structure): + Head = tagHead() + Type = 0 #(BYTE Type)//类型 + Count = 0 #(WORD Count)//数量 + PlayerRecList = list() #(vector<tagGCPlayerRec> PlayerRecList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x08 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos) + for i in range(self.Count): + temPlayerRecList = tagGCPlayerRec() + _pos = temPlayerRecList.ReadData(_lpData, _pos) + self.PlayerRecList.append(temPlayerRecList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA0 + self.Head.SubCmd = 0x08 + self.Type = 0 + self.Count = 0 + self.PlayerRecList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 + for i in range(self.Count): + length += self.PlayerRecList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Type) + data = CommFunc.WriteWORD(data, self.Count) + for i in range(self.Count): + data = CommFunc.WriteString(data, self.PlayerRecList[i].GetLength(), self.PlayerRecList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Type:%d, + Count:%d, + PlayerRecList:%s + '''\ + %( + self.Head.OutputString(), + self.Type, + self.Count, + "..." + ) + return DumpString + + +m_NAtagGCPlayerRecInfo=tagGCPlayerRecInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerRecInfo.Head.Cmd,m_NAtagGCPlayerRecInfo.Head.SubCmd))] = m_NAtagGCPlayerRecInfo + + +#------------------------------------------------------ # A0 06 服务器地图线路人数状态 #tagGCPyServerMapState class tagGCPyServerMapLineState(Structure): @@ -4636,7 +4820,7 @@ class tagPYBillboardData(Structure): Head = tagHead() - IsWatchSelf = 0 #(BYTE IsWatchSelf) + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) Type = 0 #(BYTE Type)//排行榜类型 Billboard = list() #(vector<tagPYBillboardInfo> Billboard)//size = BillboardCount @@ -4651,7 +4835,7 @@ def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) - self.IsWatchSelf,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): @@ -4665,7 +4849,7 @@ self.Head.Clear() self.Head.Cmd = 0xA9 self.Head.SubCmd = 0xA2 - self.IsWatchSelf = 0 + self.WatchID = 0 self.BillboardCount = 0 self.Type = 0 self.Billboard = list() @@ -4674,7 +4858,7 @@ def GetLength(self): length = 0 length += self.Head.GetLength() - length += 1 + length += 4 length += 1 length += 1 for i in range(self.BillboardCount): @@ -4685,7 +4869,7 @@ def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) - data = CommFunc.WriteBYTE(data, self.IsWatchSelf) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) data = CommFunc.WriteBYTE(data, self.Type) for i in range(self.BillboardCount): @@ -4695,14 +4879,14 @@ def OutputString(self): DumpString = ''' Head:%s, - IsWatchSelf:%d, + WatchID:%d, BillboardCount:%d, Type:%d, Billboard:%s '''\ %( self.Head.OutputString(), - self.IsWatchSelf, + self.WatchID, self.BillboardCount, self.Type, "..." @@ -8554,6 +8738,213 @@ m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview + + +#------------------------------------------------------ +# B0 20 膜拜信息列表 #tagGCWorshipInfoList + +class tagGCWorshipInfo(Structure): + PlayerID = 0 #(DWORD PlayerID)// 目标玩家ID + WorshipType = 0 #(BYTE WorshipType)// 膜拜类型 + WorshipValue = 0 #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + InfoLen = 0 #(WORD InfoLen) + PlayerInfo = "" #(String PlayerInfo)// 玩家信息{k:v, ...} + data = None + + def __init__(self): + self.Clear() + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen) + return _pos + + def Clear(self): + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.InfoLen = 0 + self.PlayerInfo = "" + return + + def GetLength(self): + length = 0 + length += 4 + length += 1 + length += 4 + length += 2 + length += len(self.PlayerInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteDWORD(data, self.PlayerID) + data = CommFunc.WriteBYTE(data, self.WorshipType) + data = CommFunc.WriteDWORD(data, self.WorshipValue) + data = CommFunc.WriteWORD(data, self.InfoLen) + data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo) + return data + + def OutputString(self): + DumpString = ''' + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + InfoLen:%d, + PlayerInfo:%s + '''\ + %( + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.InfoLen, + self.PlayerInfo + ) + return DumpString + + +class tagGCWorshipInfoList(Structure): + Head = tagHead() + WorshipCount = 0 #(BYTE WorshipCount) + WorshipInfoList = list() #(vector<tagGCWorshipInfo> WorshipInfoList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.WorshipCount): + temWorshipInfoList = tagGCWorshipInfo() + _pos = temWorshipInfoList.ReadData(_lpData, _pos) + self.WorshipInfoList.append(temWorshipInfoList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB0 + self.Head.SubCmd = 0x20 + self.WorshipCount = 0 + self.WorshipInfoList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.WorshipCount): + length += self.WorshipInfoList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.WorshipCount) + for i in range(self.WorshipCount): + data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + WorshipCount:%d, + WorshipInfoList:%s + '''\ + %( + self.Head.OutputString(), + self.WorshipCount, + "..." + ) + return DumpString + + +m_NAtagGCWorshipInfoList=tagGCWorshipInfoList() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList + + +#------------------------------------------------------ +# B0 21 膜拜结果 #tagGCWorshipResult + +class tagGCWorshipResult(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 目标玩家ID + ("WorshipType", c_ubyte), # 膜拜类型 + ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + ("Result", c_ubyte), # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标; + ("MoneyType", c_ubyte), # 货币类型 + ("MoneyValue", c_int), # 货币奖励 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x21 + 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.Cmd = 0xB0 + self.SubCmd = 0x21 + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + self.Result = 0 + self.MoneyType = 0 + self.MoneyValue = 0 + return + + def GetLength(self): + return sizeof(tagGCWorshipResult) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d, + Result:%d, + MoneyType:%d, + MoneyValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.WorshipType, + self.WorshipValue, + self.Result, + self.MoneyType, + self.MoneyValue + ) + return DumpString + + +m_NAtagGCWorshipResult=tagGCWorshipResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult #------------------------------------------------------ @@ -15009,7 +15400,7 @@ Type = 0 #(BYTE Type)//榜单类型 GroupValue1 = 0 #(BYTE GroupValue1)// 分组值1 GroupValue2 = 0 #(BYTE GroupValue2)// 分组值2,与分组值1组合归为同组榜单数据 - IsWatchSelf = 0 #(BYTE IsWatchSelf) + WatchID = 0 #(DWORD WatchID)//查看指定ID名次前后,如玩家ID、家族ID等 BillboardCount = 0 #(BYTE BillboardCount) CrossBillboardDataList = list() #(vector<tagGCCrossBillboardData> CrossBillboardDataList) data = None @@ -15026,7 +15417,7 @@ self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue1,_pos = CommFunc.ReadBYTE(_lpData, _pos) self.GroupValue2,_pos = CommFunc.ReadBYTE(_lpData, _pos) - self.IsWatchSelf,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.WatchID,_pos = CommFunc.ReadDWORD(_lpData, _pos) self.BillboardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.BillboardCount): temCrossBillboardDataList = tagGCCrossBillboardData() @@ -15042,7 +15433,7 @@ self.Type = 0 self.GroupValue1 = 0 self.GroupValue2 = 0 - self.IsWatchSelf = 0 + self.WatchID = 0 self.BillboardCount = 0 self.CrossBillboardDataList = list() return @@ -15053,7 +15444,7 @@ length += 1 length += 1 length += 1 - length += 1 + length += 4 length += 1 for i in range(self.BillboardCount): length += self.CrossBillboardDataList[i].GetLength() @@ -15066,7 +15457,7 @@ data = CommFunc.WriteBYTE(data, self.Type) data = CommFunc.WriteBYTE(data, self.GroupValue1) data = CommFunc.WriteBYTE(data, self.GroupValue2) - data = CommFunc.WriteBYTE(data, self.IsWatchSelf) + data = CommFunc.WriteDWORD(data, self.WatchID) data = CommFunc.WriteBYTE(data, self.BillboardCount) for i in range(self.BillboardCount): data = CommFunc.WriteString(data, self.CrossBillboardDataList[i].GetLength(), self.CrossBillboardDataList[i].GetBuffer()) @@ -15078,7 +15469,7 @@ Type:%d, GroupValue1:%d, GroupValue2:%d, - IsWatchSelf:%d, + WatchID:%d, BillboardCount:%d, CrossBillboardDataList:%s '''\ @@ -15087,7 +15478,7 @@ self.Type, self.GroupValue1, self.GroupValue2, - self.IsWatchSelf, + self.WatchID, self.BillboardCount, "..." ) @@ -17085,6 +17476,7 @@ ("TotalPayCount", c_int), # 累计总购买次数 ("WeekPayCount", c_ushort), # 周总购买次数 ("MonthPayCount", c_ushort), # 月总购买次数 + ("SelectItemValue", c_int), # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 ] def __init__(self): @@ -17102,6 +17494,7 @@ self.TotalPayCount = 0 self.WeekPayCount = 0 self.MonthPayCount = 0 + self.SelectItemValue = 0 return def GetLength(self): @@ -17116,14 +17509,16 @@ TodayPayCount:%d, TotalPayCount:%d, WeekPayCount:%d, - MonthPayCount:%d + MonthPayCount:%d, + SelectItemValue:%d '''\ %( self.RecordID, self.TodayPayCount, self.TotalPayCount, self.WeekPayCount, - self.MonthPayCount + self.MonthPayCount, + self.SelectItemValue ) return DumpString @@ -31961,45 +32356,6 @@ return DumpString -class tagMCActBuyCountCTGID(Structure): - _pack_ = 1 - _fields_ = [ - ("CTGID", c_ushort), # 充值表ID - ("Discount", c_ushort), # 折扣力度百分比 - ] - - 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.CTGID = 0 - self.Discount = 0 - return - - def GetLength(self): - return sizeof(tagMCActBuyCountCTGID) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 74 购买次数礼包活动信息 //tagMCActBuyCountGiftInfo: - CTGID:%d, - Discount:%d - '''\ - %( - self.CTGID, - self.Discount - ) - return DumpString - - class tagMCActBuyCountGiftInfo(Structure): Head = tagHead() ActNum = 0 #(BYTE ActNum)// 活动编号 @@ -32009,7 +32365,7 @@ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 LimitLV = 0 #(WORD LimitLV)// 限制等级 CTGIDCount = 0 #(BYTE CTGIDCount) - CTGIDInfoList = list() #(vector<tagMCActBuyCountCTGID> CTGIDInfoList)// CTGID信息列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 + CTGIDList = list() #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 GiftCount = 0 #(BYTE GiftCount) BuyCountGiftList = list() #(vector<tagMCActBuyCountGift> BuyCountGiftList)// 购买次数礼包列表 data = None @@ -32031,9 +32387,8 @@ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.CTGIDCount): - temCTGIDInfoList = tagMCActBuyCountCTGID() - _pos = temCTGIDInfoList.ReadData(_lpData, _pos) - self.CTGIDInfoList.append(temCTGIDInfoList) + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.CTGIDList.append(value) self.GiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.GiftCount): temBuyCountGiftList = tagMCActBuyCountGift() @@ -32053,7 +32408,7 @@ self.ResetType = 0 self.LimitLV = 0 self.CTGIDCount = 0 - self.CTGIDInfoList = list() + self.CTGIDList = list() self.GiftCount = 0 self.BuyCountGiftList = list() return @@ -32068,8 +32423,7 @@ length += 1 length += 2 length += 1 - for i in range(self.CTGIDCount): - length += self.CTGIDInfoList[i].GetLength() + length += 2 * self.CTGIDCount length += 1 for i in range(self.GiftCount): length += self.BuyCountGiftList[i].GetLength() @@ -32087,7 +32441,7 @@ data = CommFunc.WriteWORD(data, self.LimitLV) data = CommFunc.WriteBYTE(data, self.CTGIDCount) for i in range(self.CTGIDCount): - data = CommFunc.WriteString(data, self.CTGIDInfoList[i].GetLength(), self.CTGIDInfoList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.CTGIDList[i]) data = CommFunc.WriteBYTE(data, self.GiftCount) for i in range(self.GiftCount): data = CommFunc.WriteString(data, self.BuyCountGiftList[i].GetLength(), self.BuyCountGiftList[i].GetBuffer()) @@ -32103,7 +32457,7 @@ ResetType:%d, LimitLV:%d, CTGIDCount:%d, - CTGIDInfoList:%s, + CTGIDList:%s, GiftCount:%d, BuyCountGiftList:%s '''\ -- Gitblit v1.8.0