From cfb5a319f61b20bb184fdb6923fad9f28db171e0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 03 七月 2024 15:16:47 +0800 Subject: [PATCH] 10195 【香港】【越南】【主干】【砍树】新增消耗记录(代币获得、消耗记录;后台扣除货币支持扣代币;) --- ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 760 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 727 insertions(+), 33 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index a967c1f..7f66f5a 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -1085,7 +1085,7 @@ ("Type", c_ubyte), #类型 TBillboardType ("StartIndex", c_int), #查看的起始名次索引, 默认0 ("WatchCnt", c_ubyte), #查看条数,默认20,最大不超过100 - ("IsWatchSelf", c_ubyte), #是否查看自己名次前后,默认10条数据 + ("WatchID", c_int), #查看指定ID名次前后,如玩家ID、家族ID等 ] def __init__(self): @@ -1105,7 +1105,7 @@ self.Type = 0 self.StartIndex = 0 self.WatchCnt = 0 - self.IsWatchSelf = 0 + self.WatchID = 0 return def GetLength(self): @@ -1121,7 +1121,7 @@ Type:%d, StartIndex:%d, WatchCnt:%d, - IsWatchSelf:%d + WatchID:%d '''\ %( self.Cmd, @@ -1129,7 +1129,7 @@ self.Type, self.StartIndex, self.WatchCnt, - self.IsWatchSelf + self.WatchID ) return DumpString @@ -2117,6 +2117,110 @@ #------------------------------------------------------ +# B0 34 福地请求结算奖励 #tagCGMineAreaAwardGet + +class tagCGMineAreaAwardGet(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x34 + 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 = 0x34 + return + + def GetLength(self): + return sizeof(tagCGMineAreaAwardGet) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 34 福地请求结算奖励 //tagCGMineAreaAwardGet: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCGMineAreaAwardGet=tagCGMineAreaAwardGet() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaAwardGet.Cmd,m_NAtagCGMineAreaAwardGet.SubCmd))] = m_NAtagCGMineAreaAwardGet + + +#------------------------------------------------------ +# B0 33 福地查看 #tagCGMineAreaView + +class tagCGMineAreaView(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("QueryType", c_ubyte), # 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表;4-退出他人福地;5-查看记录 + ("QueryValue", c_int), # 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x33 + 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 = 0x33 + self.QueryType = 0 + self.QueryValue = 0 + return + + def GetLength(self): + return sizeof(tagCGMineAreaView) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 33 福地查看 //tagCGMineAreaView: + Cmd:%s, + SubCmd:%s, + QueryType:%d, + QueryValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.QueryType, + self.QueryValue + ) + return DumpString + + +m_NAtagCGMineAreaView=tagCGMineAreaView() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaView.Cmd,m_NAtagCGMineAreaView.SubCmd))] = m_NAtagCGMineAreaView + + +#------------------------------------------------------ #B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState class tagQueryFamilyArrestOverState(Structure): @@ -2275,6 +2379,66 @@ m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift + + +#------------------------------------------------------ +# B0 20 请求膜拜玩家 #tagCGWorship + +class tagCGWorship(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 目标玩家ID + ("WorshipType", c_ubyte), # 膜拜类型 + ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x20 + 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 = 0x20 + self.PlayerID = 0 + self.WorshipType = 0 + self.WorshipValue = 0 + return + + def GetLength(self): + return sizeof(tagCGWorship) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 20 请求膜拜玩家 //tagCGWorship: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + WorshipType:%d, + WorshipValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.WorshipType, + self.WorshipValue + ) + return DumpString + + +m_NAtagCGWorship=tagCGWorship() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGWorship.Cmd,m_NAtagCGWorship.SubCmd))] = m_NAtagCGWorship #------------------------------------------------------ @@ -4509,6 +4673,9 @@ ("Type", c_ubyte), #榜单类型 ("GroupValue1", c_ubyte), # 分组值1 ("GroupValue2", c_ubyte), # 分组值2,与分组值1组合归为同组榜单数据 + ("StartIndex", c_int), #查看的起始名次索引, 默认0 + ("WatchCnt", c_ubyte), #查看条数,默认20,最大不超过100 + ("WatchID", c_int), #查看指定ID名次前后,如玩家ID、家族ID等 ] def __init__(self): @@ -4528,6 +4695,9 @@ self.Type = 0 self.GroupValue1 = 0 self.GroupValue2 = 0 + self.StartIndex = 0 + self.WatchCnt = 0 + self.WatchID = 0 return def GetLength(self): @@ -4542,14 +4712,20 @@ SubCmd:%s, Type:%d, GroupValue1:%d, - GroupValue2:%d + GroupValue2:%d, + StartIndex:%d, + WatchCnt:%d, + WatchID:%d '''\ %( self.Cmd, self.SubCmd, self.Type, self.GroupValue1, - self.GroupValue2 + self.GroupValue2, + self.StartIndex, + self.WatchCnt, + self.WatchID ) return DumpString @@ -4720,6 +4896,84 @@ m_NAtagCMChangeJob=tagCMChangeJob() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeJob.Cmd,m_NAtagCMChangeJob.SubCmd))] = m_NAtagCMChangeJob + + +#------------------------------------------------------ +# A1 25 代币购买充值商品编号商品 #tagCMCoinBuyOrderInfo + +class tagCMCoinBuyOrderInfo(Structure): + Head = tagHead() + AppIDLen = 0 #(BYTE AppIDLen) + AppID = "" #(String AppID) + OrderInfoLen = 0 #(BYTE OrderInfoLen) + OrderInfo = "" #(String OrderInfo)//商品编号 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x25 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.AppIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AppID,_pos = CommFunc.ReadString(_lpData, _pos,self.AppIDLen) + self.OrderInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.OrderInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderInfoLen) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA1 + self.Head.SubCmd = 0x25 + self.AppIDLen = 0 + self.AppID = "" + self.OrderInfoLen = 0 + self.OrderInfo = "" + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += len(self.AppID) + length += 1 + length += len(self.OrderInfo) + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.AppIDLen) + data = CommFunc.WriteString(data, self.AppIDLen, self.AppID) + data = CommFunc.WriteBYTE(data, self.OrderInfoLen) + data = CommFunc.WriteString(data, self.OrderInfoLen, self.OrderInfo) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + AppIDLen:%d, + AppID:%s, + OrderInfoLen:%d, + OrderInfo:%s + '''\ + %( + self.Head.OutputString(), + self.AppIDLen, + self.AppID, + self.OrderInfoLen, + self.OrderInfo + ) + return DumpString + + +m_NAtagCMCoinBuyOrderInfo=tagCMCoinBuyOrderInfo() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCoinBuyOrderInfo.Head.Cmd,m_NAtagCMCoinBuyOrderInfo.Head.SubCmd))] = m_NAtagCMCoinBuyOrderInfo #------------------------------------------------------ @@ -4910,7 +5164,7 @@ _fields_ = [ ("Cmd", c_ubyte), ("SubCmd", c_ubyte), - ("RecordID", c_ubyte), #充值记录ID,也就是充值ID,发0则查全部 + ("RecordID", c_ushort), #充值记录ID,也就是充值ID,发0则查全部 ] def __init__(self): @@ -17263,6 +17517,170 @@ #------------------------------------------------------ +# B0 30 福地物品拉 #tagCMMineItemPull + +class tagCMMineItemPull(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("PlayerID", c_int), # 福地所属玩家ID,0默认自己 + ("ItemIndex", c_ubyte), # 物品所在位置索引0~n + ("WorkerCount", c_ubyte), # 上工人人数 + ("IsPreview", c_ubyte), # 是否预览;0-直接拉,1-预览大概时间 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x30 + 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 = 0x30 + self.PlayerID = 0 + self.ItemIndex = 0 + self.WorkerCount = 0 + self.IsPreview = 0 + return + + def GetLength(self): + return sizeof(tagCMMineItemPull) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 30 福地物品拉 //tagCMMineItemPull: + Cmd:%s, + SubCmd:%s, + PlayerID:%d, + ItemIndex:%d, + WorkerCount:%d, + IsPreview:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.PlayerID, + self.ItemIndex, + self.WorkerCount, + self.IsPreview + ) + return DumpString + + +m_NAtagCMMineItemPull=tagCMMineItemPull() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemPull.Cmd,m_NAtagCMMineItemPull.SubCmd))] = m_NAtagCMMineItemPull + + +#------------------------------------------------------ +# B0 31 福地物品刷新 #tagCMMineItemRefresh + +class tagCMMineItemRefresh(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("IsSuper", c_ubyte), # 是否超级刷新 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x31 + 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 = 0x31 + self.IsSuper = 0 + return + + def GetLength(self): + return sizeof(tagCMMineItemRefresh) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 31 福地物品刷新 //tagCMMineItemRefresh: + Cmd:%s, + SubCmd:%s, + IsSuper:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.IsSuper + ) + return DumpString + + +m_NAtagCMMineItemRefresh=tagCMMineItemRefresh() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemRefresh.Cmd,m_NAtagCMMineItemRefresh.SubCmd))] = m_NAtagCMMineItemRefresh + + +#------------------------------------------------------ +# B0 32 福地工人雇佣 #tagCMMineWorkerEmploy + +class tagCMMineWorkerEmploy(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB0 + self.SubCmd = 0x32 + 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 = 0x32 + return + + def GetLength(self): + return sizeof(tagCMMineWorkerEmploy) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B0 32 福地工人雇佣 //tagCMMineWorkerEmploy: + Cmd:%s, + SubCmd:%s + '''\ + %( + self.Cmd, + self.SubCmd + ) + return DumpString + + +m_NAtagCMMineWorkerEmploy=tagCMMineWorkerEmploy() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineWorkerEmploy.Cmd,m_NAtagCMMineWorkerEmploy.SubCmd))] = m_NAtagCMMineWorkerEmploy + + +#------------------------------------------------------ #B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState class tagQueryFamilyArrestAwardReceiveState(Structure): @@ -18235,6 +18653,139 @@ #------------------------------------------------------ +# B2 21 玩家砍树 #tagCMCutTree + +class tagCMCutTree(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("CutCount", c_ubyte), # 砍几次,默认1 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + 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 = 0xB2 + self.SubCmd = 0x21 + self.CutCount = 0 + return + + def GetLength(self): + return sizeof(tagCMCutTree) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 21 玩家砍树 //tagCMCutTree: + Cmd:%s, + SubCmd:%s, + CutCount:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.CutCount + ) + return DumpString + + +m_NAtagCMCutTree=tagCMCutTree() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCutTree.Cmd,m_NAtagCMCutTree.SubCmd))] = m_NAtagCMCutTree + + +#------------------------------------------------------ +# B2 22 砍树装备操作 #tagCMCutTreeEquipOP + +class tagCMCutTreeEquipOP(Structure): + Head = tagHead() + IndexCount = 0 #(BYTE IndexCount) + ItemIndexList = list() #(vector<BYTE> ItemIndexList)// 物品在砍树背包的索引列表 + OPType = 0 #(BYTE OPType)// 操作类型:1-替换;2-分解 + AutoDecompose = 0 #(BYTE AutoDecompose)// 替换后是否自动分解原装备:0否1是,仅替换操作下有用 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x22 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.IndexCount): + value,_pos=CommFunc.ReadBYTE(_lpData,_pos) + self.ItemIndexList.append(value) + self.OPType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.AutoDecompose,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB2 + self.Head.SubCmd = 0x22 + self.IndexCount = 0 + self.ItemIndexList = list() + self.OPType = 0 + self.AutoDecompose = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 1 * self.IndexCount + length += 1 + length += 1 + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.IndexCount) + for i in range(self.IndexCount): + data = CommFunc.WriteBYTE(data, self.ItemIndexList[i]) + data = CommFunc.WriteBYTE(data, self.OPType) + data = CommFunc.WriteBYTE(data, self.AutoDecompose) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + IndexCount:%d, + ItemIndexList:%s, + OPType:%d, + AutoDecompose:%d + '''\ + %( + self.Head.OutputString(), + self.IndexCount, + "...", + self.OPType, + self.AutoDecompose + ) + return DumpString + + +m_NAtagCMCutTreeEquipOP=tagCMCutTreeEquipOP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMCutTreeEquipOP.Head.Cmd,m_NAtagCMCutTreeEquipOP.Head.SubCmd))] = m_NAtagCMCutTreeEquipOP + + +#------------------------------------------------------ # B2 12 领取功能系统特权奖励 #tagCMGetFuncSysPrivilegeAward class tagCMGetFuncSysPrivilegeAward(Structure): @@ -18894,6 +19445,114 @@ m_NAtagCMTJGnpc=tagCMTJGnpc() ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTJGnpc.Cmd,m_NAtagCMTJGnpc.SubCmd))] = m_NAtagCMTJGnpc + + +#------------------------------------------------------ +# B2 23 仙树升级 #tagCMTreeLVUP + +class tagCMTreeLVUP(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("Type", c_ubyte), # 0-开始升级(请求扣除消耗,开始升级倒计时);1-执行升级(前端自行倒计时,时间到后发送该类型) + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x23 + 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 = 0xB2 + self.SubCmd = 0x23 + self.Type = 0 + return + + def GetLength(self): + return sizeof(tagCMTreeLVUP) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 23 仙树升级 //tagCMTreeLVUP: + Cmd:%s, + SubCmd:%s, + Type:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.Type + ) + return DumpString + + +m_NAtagCMTreeLVUP=tagCMTreeLVUP() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTreeLVUP.Cmd,m_NAtagCMTreeLVUP.SubCmd))] = m_NAtagCMTreeLVUP + + +#------------------------------------------------------ +# B2 24 使用仙树升级减时物品 #tagCMUseTreeLVUPTimeItem + +class tagCMUseTreeLVUPTimeItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("UseCount", c_int), # 使用个数 + ("IsAutoBuy", c_ubyte), # 不足个数是否自动购买 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xB2 + self.SubCmd = 0x24 + 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 = 0xB2 + self.SubCmd = 0x24 + self.UseCount = 0 + self.IsAutoBuy = 0 + return + + def GetLength(self): + return sizeof(tagCMUseTreeLVUPTimeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// B2 24 使用仙树升级减时物品 //tagCMUseTreeLVUPTimeItem: + Cmd:%s, + SubCmd:%s, + UseCount:%d, + IsAutoBuy:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.UseCount, + self.IsAutoBuy + ) + return DumpString + + +m_NAtagCMUseTreeLVUPTimeItem=tagCMUseTreeLVUPTimeItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseTreeLVUPTimeItem.Cmd,m_NAtagCMUseTreeLVUPTimeItem.SubCmd))] = m_NAtagCMUseTreeLVUPTimeItem #------------------------------------------------------ @@ -20360,60 +21019,95 @@ # B4 10 回合制战斗 #tagCMTurnFight class tagCMTurnFight(Structure): - _pack_ = 1 - _fields_ = [ - ("Cmd", c_ubyte), - ("SubCmd", c_ubyte), - ("MapID", c_int), # 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) - ("FuncLineID", c_ushort), - ("PlayerID", c_int), # 对应玩家ID,可为0,某些功能可能有用,如竞技场 - ] + Head = tagHead() + MapID = 0 #(DWORD MapID)// 自定义地图ID,可用于绑定战斗场景功能(如野外关卡,爬塔功能,竞技场等) + FuncLineID = 0 #(WORD FuncLineID) + TagType = 0 #(BYTE TagType)// 战斗目标类型,0-NPC,1-玩家,2-队伍 + TagID = 0 #(DWORD TagID)// 战斗目标类型对应的ID + ValueCount = 0 #(BYTE ValueCount) + ValueList = list() #(vector<DWORD> ValueList)// 附加值列表,可选,具体含义由MapID决定 + data = None def __init__(self): self.Clear() - self.Cmd = 0xB4 - self.SubCmd = 0x10 + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x10 return - def ReadData(self, stringData, _pos=0, _len=0): + def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() - memmove(addressof(self), stringData[_pos:], self.GetLength()) - return _pos + self.GetLength() + _pos = self.Head.ReadData(_lpData, _pos) + self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.FuncLineID,_pos = CommFunc.ReadWORD(_lpData, _pos) + self.TagType,_pos = CommFunc.ReadBYTE(_lpData, _pos) + self.TagID,_pos = CommFunc.ReadDWORD(_lpData, _pos) + self.ValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.ValueCount): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ValueList.append(value) + return _pos def Clear(self): - self.Cmd = 0xB4 - self.SubCmd = 0x10 + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xB4 + self.Head.SubCmd = 0x10 self.MapID = 0 self.FuncLineID = 0 - self.PlayerID = 0 + self.TagType = 0 + self.TagID = 0 + self.ValueCount = 0 + self.ValueList = list() return def GetLength(self): - return sizeof(tagCMTurnFight) + length = 0 + length += self.Head.GetLength() + length += 4 + length += 2 + length += 1 + length += 4 + length += 1 + length += 4 * self.ValueCount + + return length def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteDWORD(data, self.MapID) + data = CommFunc.WriteWORD(data, self.FuncLineID) + data = CommFunc.WriteBYTE(data, self.TagType) + data = CommFunc.WriteDWORD(data, self.TagID) + data = CommFunc.WriteBYTE(data, self.ValueCount) + for i in range(self.ValueCount): + data = CommFunc.WriteDWORD(data, self.ValueList[i]) + return data def OutputString(self): - DumpString = '''// B4 10 回合制战斗 //tagCMTurnFight: - Cmd:%s, - SubCmd:%s, + DumpString = ''' + Head:%s, MapID:%d, FuncLineID:%d, - PlayerID:%d + TagType:%d, + TagID:%d, + ValueCount:%d, + ValueList:%s '''\ %( - self.Cmd, - self.SubCmd, + self.Head.OutputString(), self.MapID, self.FuncLineID, - self.PlayerID + self.TagType, + self.TagID, + self.ValueCount, + "..." ) return DumpString m_NAtagCMTurnFight=tagCMTurnFight() -ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTurnFight.Cmd,m_NAtagCMTurnFight.SubCmd))] = m_NAtagCMTurnFight +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTurnFight.Head.Cmd,m_NAtagCMTurnFight.Head.SubCmd))] = m_NAtagCMTurnFight #------------------------------------------------------ -- Gitblit v1.8.0