From f6a4dfb5b00b4a2ff652ac2a1669904a267a5830 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 06 五月 2021 16:55:27 +0800
Subject: [PATCH] 8721 【主干】【BT2】【后端】H.活动-合服庆典(转盘 同步主干冲突)
---
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 354 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 342 insertions(+), 12 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 631dd3a..8f6fbc3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -1272,7 +1272,8 @@
# A4 05 家族红包抢的信息 #tagGCFamilyRedPacketGrabInfo
class tagFGrabRedPacketInfo(Structure):
- Name = "" #(char Name[33])//名字
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)//名字
PlayeJob = 0 #(BYTE PlayeJob)//玩家职业
MoneyNum = 0 #(DWORD MoneyNum)//金钱数量
data = None
@@ -1283,12 +1284,14 @@
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.MoneyNum,_pos = CommFunc.ReadDWORD(_lpData, _pos)
return _pos
def Clear(self):
+ self.NameLen = 0
self.Name = ""
self.PlayeJob = 0
self.MoneyNum = 0
@@ -1296,7 +1299,8 @@
def GetLength(self):
length = 0
- length += 33
+ length += 1
+ length += len(self.Name)
length += 1
length += 4
@@ -1304,18 +1308,21 @@
def GetBuffer(self):
data = ''
- data = CommFunc.WriteString(data, 33, self.Name)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
data = CommFunc.WriteBYTE(data, self.PlayeJob)
data = CommFunc.WriteDWORD(data, self.MoneyNum)
return data
def OutputString(self):
DumpString = '''
+ NameLen:%d,
Name:%s,
PlayeJob:%d,
MoneyNum:%d
'''\
%(
+ self.NameLen,
self.Name,
self.PlayeJob,
self.MoneyNum
@@ -1402,7 +1409,8 @@
class tagFRedPacketInfo(Structure):
RedPacketID = 0 #(DWORD RedPacketID)//红包唯一ID
PlayerID = 0 #(DWORD PlayerID)//玩家ID
- Name = "" #(char Name[33])//玩家名字
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)//玩家名字
Time = 0 #(DWORD Time)//时间
PlayeJob = 0 #(BYTE PlayeJob)//玩家职业
MoneyType = 0 #(BYTE MoneyType)//金钱类型
@@ -1410,7 +1418,8 @@
GetWay = 0 #(BYTE GetWay)//获得途径
PacketCnt = 0 #(BYTE PacketCnt)//可抢个数
State = 0 #(BYTE State)//0未发,1未领取,2已领取,3全部领完
- Wish = "" #(char Wish[33])//祝福语
+ WishLen = 0 #(BYTE WishLen)
+ Wish = "" #(String Wish)//祝福语
IsAnonymous = 0 #(BYTE IsAnonymous)//是否匿名
data = None
@@ -1422,7 +1431,8 @@
self.Clear()
self.RedPacketID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
self.Time,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.PlayeJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.MoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -1430,13 +1440,15 @@
self.GetWay,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.PacketCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.WishLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Wish,_pos = CommFunc.ReadString(_lpData, _pos,self.WishLen)
self.IsAnonymous,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
self.RedPacketID = 0
self.PlayerID = 0
+ self.NameLen = 0
self.Name = ""
self.Time = 0
self.PlayeJob = 0
@@ -1445,6 +1457,7 @@
self.GetWay = 0
self.PacketCnt = 0
self.State = 0
+ self.WishLen = 0
self.Wish = ""
self.IsAnonymous = 0
return
@@ -1453,7 +1466,8 @@
length = 0
length += 4
length += 4
- length += 33
+ length += 1
+ length += len(self.Name)
length += 4
length += 1
length += 1
@@ -1461,7 +1475,8 @@
length += 1
length += 1
length += 1
- length += 33
+ length += 1
+ length += len(self.Wish)
length += 1
return length
@@ -1470,7 +1485,8 @@
data = ''
data = CommFunc.WriteDWORD(data, self.RedPacketID)
data = CommFunc.WriteDWORD(data, self.PlayerID)
- data = CommFunc.WriteString(data, 33, self.Name)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
data = CommFunc.WriteDWORD(data, self.Time)
data = CommFunc.WriteBYTE(data, self.PlayeJob)
data = CommFunc.WriteBYTE(data, self.MoneyType)
@@ -1478,7 +1494,8 @@
data = CommFunc.WriteBYTE(data, self.GetWay)
data = CommFunc.WriteBYTE(data, self.PacketCnt)
data = CommFunc.WriteBYTE(data, self.State)
- data = CommFunc.WriteString(data, 33, self.Wish)
+ data = CommFunc.WriteBYTE(data, self.WishLen)
+ data = CommFunc.WriteString(data, self.WishLen, self.Wish)
data = CommFunc.WriteBYTE(data, self.IsAnonymous)
return data
@@ -1486,6 +1503,7 @@
DumpString = '''
RedPacketID:%d,
PlayerID:%d,
+ NameLen:%d,
Name:%s,
Time:%d,
PlayeJob:%d,
@@ -1494,12 +1512,14 @@
GetWay:%d,
PacketCnt:%d,
State:%d,
+ WishLen:%d,
Wish:%s,
IsAnonymous:%d
'''\
%(
self.RedPacketID,
self.PlayerID,
+ self.NameLen,
self.Name,
self.Time,
self.PlayeJob,
@@ -1508,6 +1528,7 @@
self.GetWay,
self.PacketCnt,
self.State,
+ self.WishLen,
self.Wish,
self.IsAnonymous
)
@@ -26512,6 +26533,315 @@
#------------------------------------------------------
+# AA 52 转盘活动信息 #tagMCActTurntableInfo
+
+class tagMCActTurntableItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemNum", c_ubyte), #物品编号 1~n;注意转盘已确定物品编号 与 极品终极物品待选择库编号可能相同,但并不代表同一物品
+ ("ItemLibType", c_ubyte), #物品库类型;1-常规,2-极品,3-终极
+ ("ItemID", c_int),
+ ("ItemCount", 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.ItemNum = 0
+ self.ItemLibType = 0
+ self.ItemID = 0
+ self.ItemCount = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActTurntableItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 52 转盘活动信息 //tagMCActTurntableInfo:
+ ItemNum:%d,
+ ItemLibType:%d,
+ ItemID:%d,
+ ItemCount:%d
+ '''\
+ %(
+ self.ItemNum,
+ self.ItemLibType,
+ self.ItemID,
+ self.ItemCount
+ )
+ return DumpString
+
+
+class tagMCActTurntableInfo(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)// 限制等级
+ CTGPrizeCount = 0 #(BYTE CTGPrizeCount)
+ CTGPrizeList = list() #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...]
+ UseGoldPrizeCount = 0 #(BYTE UseGoldPrizeCount)
+ UseGoldPrizeList = list() #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第1次所需累计消费仙玉, 第2次, ...]
+ TurnItemCount = 0 #(BYTE TurnItemCount)
+ TurnItemList = list() #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘;
+ GoodItemCount = 0 #(BYTE GoodItemCount)
+ GoodItemList = list() #(vector<tagMCActTurntableItem> GoodItemList)// 极品物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
+ GoodItemCanChooseCount = 0 #(BYTE GoodItemCanChooseCount)// 极品物品可选择个数
+ SuperItemCount = 0 #(BYTE SuperItemCount)
+ SuperItemList = list() #(vector<tagMCActTurntableItem> SuperItemList)// 终极物品待选择库,由玩家从库中选择放入转盘的物品;注意此库中的物品编号仅表示在该库中的编号,可能与转盘已确定的物品编号重复,但并不代表同一物品;
+ SuperItemCanChooseCount = 0 #(BYTE SuperItemCanChooseCount)// 终极物品可选择个数
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x52
+ 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.CTGPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.CTGPrizeCount):
+ value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+ self.CTGPrizeList.append(value)
+ self.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.UseGoldPrizeCount):
+ value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+ self.UseGoldPrizeList.append(value)
+ self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.TurnItemCount):
+ temTurnItemList = tagMCActTurntableItem()
+ _pos = temTurnItemList.ReadData(_lpData, _pos)
+ self.TurnItemList.append(temTurnItemList)
+ self.GoodItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.GoodItemCount):
+ temGoodItemList = tagMCActTurntableItem()
+ _pos = temGoodItemList.ReadData(_lpData, _pos)
+ self.GoodItemList.append(temGoodItemList)
+ self.GoodItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.SuperItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.SuperItemCount):
+ temSuperItemList = tagMCActTurntableItem()
+ _pos = temSuperItemList.ReadData(_lpData, _pos)
+ self.SuperItemList.append(temSuperItemList)
+ self.SuperItemCanChooseCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x52
+ self.ActNum = 0
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.IsDayReset = 0
+ self.LimitLV = 0
+ self.CTGPrizeCount = 0
+ self.CTGPrizeList = list()
+ self.UseGoldPrizeCount = 0
+ self.UseGoldPrizeList = list()
+ self.TurnItemCount = 0
+ self.TurnItemList = list()
+ self.GoodItemCount = 0
+ self.GoodItemList = list()
+ self.GoodItemCanChooseCount = 0
+ self.SuperItemCount = 0
+ self.SuperItemList = list()
+ self.SuperItemCanChooseCount = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 10
+ length += 10
+ length += 1
+ length += 2
+ length += 1
+ length += 4 * self.CTGPrizeCount
+ length += 1
+ length += 4 * self.UseGoldPrizeCount
+ length += 1
+ for i in range(self.TurnItemCount):
+ length += self.TurnItemList[i].GetLength()
+ length += 1
+ for i in range(self.GoodItemCount):
+ length += self.GoodItemList[i].GetLength()
+ length += 1
+ length += 1
+ for i in range(self.SuperItemCount):
+ length += self.SuperItemList[i].GetLength()
+ length += 1
+
+ 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.CTGPrizeCount)
+ for i in range(self.CTGPrizeCount):
+ data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i])
+ data = CommFunc.WriteBYTE(data, self.UseGoldPrizeCount)
+ for i in range(self.UseGoldPrizeCount):
+ data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[i])
+ data = CommFunc.WriteBYTE(data, self.TurnItemCount)
+ for i in range(self.TurnItemCount):
+ data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.GoodItemCount)
+ for i in range(self.GoodItemCount):
+ data = CommFunc.WriteString(data, self.GoodItemList[i].GetLength(), self.GoodItemList[i].GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.GoodItemCanChooseCount)
+ data = CommFunc.WriteBYTE(data, self.SuperItemCount)
+ for i in range(self.SuperItemCount):
+ data = CommFunc.WriteString(data, self.SuperItemList[i].GetLength(), self.SuperItemList[i].GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.SuperItemCanChooseCount)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ StartDate:%s,
+ EndtDate:%s,
+ IsDayReset:%d,
+ LimitLV:%d,
+ CTGPrizeCount:%d,
+ CTGPrizeList:%s,
+ UseGoldPrizeCount:%d,
+ UseGoldPrizeList:%s,
+ TurnItemCount:%d,
+ TurnItemList:%s,
+ GoodItemCount:%d,
+ GoodItemList:%s,
+ GoodItemCanChooseCount:%d,
+ SuperItemCount:%d,
+ SuperItemList:%s,
+ SuperItemCanChooseCount:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.ActNum,
+ self.StartDate,
+ self.EndtDate,
+ self.IsDayReset,
+ self.LimitLV,
+ self.CTGPrizeCount,
+ "...",
+ self.UseGoldPrizeCount,
+ "...",
+ self.TurnItemCount,
+ "...",
+ self.GoodItemCount,
+ "...",
+ self.GoodItemCanChooseCount,
+ self.SuperItemCount,
+ "...",
+ self.SuperItemCanChooseCount
+ )
+ return DumpString
+
+
+m_NAtagMCActTurntableInfo=tagMCActTurntableInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntableInfo.Head.Cmd,m_NAtagMCActTurntableInfo.Head.SubCmd))] = m_NAtagMCActTurntableInfo
+
+
+#------------------------------------------------------
+# AA 53 转盘活动玩家信息 #tagMCActTurntablePlayerInfo
+
+class tagMCActTurntablePlayerInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ActNum", c_ubyte), #活动编号
+ ("CanUseCount", c_ubyte), #可转盘次数
+ ("CTGTotal", c_int), #累计充值额度
+ ("UseGoldTotal", c_int), #累计消费仙玉额度
+ ("TurnItemState", c_int), #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
+ ("GetItemNum", c_ubyte), #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x53
+ 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 = 0xAA
+ self.SubCmd = 0x53
+ self.ActNum = 0
+ self.CanUseCount = 0
+ self.CTGTotal = 0
+ self.UseGoldTotal = 0
+ self.TurnItemState = 0
+ self.GetItemNum = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActTurntablePlayerInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 53 转盘活动玩家信息 //tagMCActTurntablePlayerInfo:
+ Cmd:%s,
+ SubCmd:%s,
+ ActNum:%d,
+ CanUseCount:%d,
+ CTGTotal:%d,
+ UseGoldTotal:%d,
+ TurnItemState:%d,
+ GetItemNum:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ActNum,
+ self.CanUseCount,
+ self.CTGTotal,
+ self.UseGoldTotal,
+ self.TurnItemState,
+ self.GetItemNum
+ )
+ return DumpString
+
+
+m_NAtagMCActTurntablePlayerInfo=tagMCActTurntablePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActTurntablePlayerInfo.Cmd,m_NAtagMCActTurntablePlayerInfo.SubCmd))] = m_NAtagMCActTurntablePlayerInfo
+
+
+#------------------------------------------------------
# AA 1B 许愿池拖动结果 #tagMCActWishingDragResult
class tagMCPlayerWishingDragInfo(Structure):
--
Gitblit v1.8.0