Tool/RobotTest/Protocol/PacketsReceived.py
@@ -1028,7 +1028,7 @@
    BackpackLV = 0    #(BYTE BackpackLV)//背包等级
    WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
    TeamID = 0    #(DWORD TeamID)//队伍ID
    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票        类型为MoneyType
    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票      类型为MoneyType
    UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
    AttackMode = 0    #(BYTE AttackMode)//攻击模式
    LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
@@ -1068,6 +1068,9 @@
    ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
    HPEx = 0    #(DWORD HPEx)//当前血量 超过E的记录
    Face = 0    #(DWORD Face)//基本脸型
    RoleType = 0    #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分)
    data = None
    def __init__(self):
@@ -1175,6 +1178,9 @@
        self.ExAttr18,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr19,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr20,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -1278,6 +1284,9 @@
        self.ExAttr18 = 0
        self.ExAttr19 = 0
        self.ExAttr20 = 0
        self.HPEx = 0
        self.Face = 0
        self.RoleType = 0
        return
    def GetLength(self):
@@ -1372,6 +1381,9 @@
        length += 4
        length += 4
        length += 15
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
@@ -1481,6 +1493,9 @@
        data = CommFunc.WriteDWORD(data, self.ExAttr18)
        data = CommFunc.WriteDWORD(data, self.ExAttr19)
        data = CommFunc.WriteDWORD(data, self.ExAttr20)
        data = CommFunc.WriteDWORD(data, self.HPEx)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.RoleType)
        return data
    def OutputString(self):
@@ -1581,7 +1596,10 @@
                                ExAttr17:%d,
                                ExAttr18:%d,
                                ExAttr19:%d,
                                ExAttr20:%d
                                ExAttr20:%d,
                                HPEx:%d,
                                Face:%d,
                                RoleType:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -1680,7 +1698,10 @@
                                self.ExAttr17,
                                self.ExAttr18,
                                self.ExAttr19,
                                self.ExAttr20
                                self.ExAttr20,
                                self.HPEx,
                                self.Face,
                                self.RoleType
                                )
        return DumpString
@@ -5889,7 +5910,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("StartYear", c_ushort),    #年,    如果填写0, 就隐藏此窗口
                  ("StartYear", c_ushort),    #年,   如果填写0, 就隐藏此窗口
                  ("StartMonth", c_ushort),    #月
                  ("StartDate", c_ubyte),    #日
                  ("EndYear", c_ushort),    
@@ -6021,7 +6042,7 @@
    PlayerID = 0    #(DWORD PlayerID)
    FamilyNameLen = 0    #(BYTE FamilyNameLen)
    FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
    FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位
    FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位
    data = None
    def __init__(self):
@@ -7061,67 +7082,36 @@
#03 09 主角登录时候的简短信息#tagPlayerLoginInfo
class  tagLoginInfoEquip(Structure):
    ItemPlace = 0    #(BYTE ItemPlace)
    ItemID = 0    #(DWORD ItemID)
    IsSuite = 0    #(BYTE IsSuite)//是否已经套装化
    UserDataLen = 0    #(DWORD UserDataLen)
    UserData = ""    #(String UserData)//size = UserDataLen
    data = None
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        self.ItemPlace,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.IsSuite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
        return _pos
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemPlace = 0
        self.ItemID = 0
        self.IsSuite = 0
        self.UserDataLen = 0
        self.UserData = ""
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 4
        length += 1
        length += 4
        length += len(self.UserData)
        return length
        return sizeof(tagLoginInfoEquip)
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.ItemPlace)
        data = CommFunc.WriteDWORD(data, self.ItemID)
        data = CommFunc.WriteBYTE(data, self.IsSuite)
        data = CommFunc.WriteDWORD(data, self.UserDataLen)
        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
        return data
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''
                                ItemPlace:%d,
                                ItemID:%d,
                                IsSuite:%d,
                                UserDataLen:%d,
                                UserData:%s
        DumpString = '''//03 09 主角登录时候的简短信息//tagPlayerLoginInfo:
                                ItemID:%d
                                '''\
                                %(
                                self.ItemPlace,
                                self.ItemID,
                                self.IsSuite,
                                self.UserDataLen,
                                self.UserData
                                self.ItemID
                                )
        return DumpString
@@ -8054,7 +8044,7 @@
class  tagFBEventList(Structure):
    Head = tagHead()
    EventCount = 0    #(BYTE EventCount)//副本活动数
    EventList = list()    #(vector<tagFBEventDetail> EventList)//副本活动列表
    EventList = list()    #(vector<tagFBEventDetail> EventList)//副本活动列表
    data = None
    def __init__(self):
@@ -8593,67 +8583,36 @@
#04 34 周围玩家出现合并封包#tagAreaPlayerAppearEx
class  tagEquipInfo(Structure):
    Place = 0    #(BYTE Place)//装备位置
    ItemID = 0    #(DWORD ItemID)//物品ID
    IsSuite = 0    #(BYTE IsSuite)//是否已经套装化
    UserDataLen = 0    #(DWORD UserDataLen)
    UserData = ""    #(String UserData)// 附加数据
    data = None
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),    #物品ID
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        self.Place,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.IsSuite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
        return _pos
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Place = 0
        self.ItemID = 0
        self.IsSuite = 0
        self.UserDataLen = 0
        self.UserData = ""
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 4
        length += 1
        length += 4
        length += len(self.UserData)
        return length
        return sizeof(tagEquipInfo)
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.Place)
        data = CommFunc.WriteDWORD(data, self.ItemID)
        data = CommFunc.WriteBYTE(data, self.IsSuite)
        data = CommFunc.WriteDWORD(data, self.UserDataLen)
        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
        return data
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''
                                Place:%d,
                                ItemID:%d,
                                IsSuite:%d,
                                UserDataLen:%d,
                                UserData:%s
        DumpString = '''//04 34 周围玩家出现合并封包//tagAreaPlayerAppearEx:
                                ItemID:%d
                                '''\
                                %(
                                self.Place,
                                self.ItemID,
                                self.IsSuite,
                                self.UserDataLen,
                                self.UserData
                                self.ItemID
                                )
        return DumpString
@@ -8720,11 +8679,14 @@
    ReincarnationLv = 0    #(WORD ReincarnationLv)
    LV = 0    #(WORD LV)//等级
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)
    TeamLV = 0    #(BYTE TeamLV)//组队等级
    TeamID = 0    #(DWORD TeamID)//组队ID
    HP = 0    #(DWORD HP)
    HPEx = 0    #(DWORD HPEx)
    MaxHP = 0    #(DWORD MaxHP)
    PlayerState = 0    #(BYTE PlayerState)//TClientPlayerState    玩家状态 打坐/马上/人镖合一
    MaxHPEx = 0    #(DWORD MaxHPEx)
    PlayerState = 0    #(BYTE PlayerState)//TClientPlayerState   玩家状态 打坐/马上/人镖合一
    IsHideMask = 0    #(BYTE IsHideMask)
    Country = 0    #(BYTE Country)//玩家国家
    FamilyID = 0    #(DWORD FamilyID)//家族ID
@@ -8777,10 +8739,13 @@
        self.ReincarnationLv,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TeamLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsHideMask,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Country,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -8836,10 +8801,13 @@
        self.ReincarnationLv = 0
        self.LV = 0
        self.Job = 0
        self.Face = 0
        self.TeamLV = 0
        self.TeamID = 0
        self.HP = 0
        self.HPEx = 0
        self.MaxHP = 0
        self.MaxHPEx = 0
        self.PlayerState = 0
        self.IsHideMask = 0
        self.Country = 0
@@ -8887,7 +8855,10 @@
        length += 2
        length += 2
        length += 1
        length += 4
        length += 1
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
@@ -8941,10 +8912,13 @@
        data = CommFunc.WriteWORD(data, self.ReincarnationLv)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteBYTE(data, self.TeamLV)
        data = CommFunc.WriteDWORD(data, self.TeamID)
        data = CommFunc.WriteDWORD(data, self.HP)
        data = CommFunc.WriteDWORD(data, self.HPEx)
        data = CommFunc.WriteDWORD(data, self.MaxHP)
        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
        data = CommFunc.WriteBYTE(data, self.PlayerState)
        data = CommFunc.WriteBYTE(data, self.IsHideMask)
        data = CommFunc.WriteBYTE(data, self.Country)
@@ -8994,10 +8968,13 @@
                                ReincarnationLv:%d,
                                LV:%d,
                                Job:%d,
                                Face:%d,
                                TeamLV:%d,
                                TeamID:%d,
                                HP:%d,
                                HPEx:%d,
                                MaxHP:%d,
                                MaxHPEx:%d,
                                PlayerState:%d,
                                IsHideMask:%d,
                                Country:%d,
@@ -9043,10 +9020,13 @@
                                self.ReincarnationLv,
                                self.LV,
                                self.Job,
                                self.Face,
                                self.TeamLV,
                                self.TeamID,
                                self.HP,
                                self.HPEx,
                                self.MaxHP,
                                self.MaxHPEx,
                                self.PlayerState,
                                self.IsHideMask,
                                self.Country,
@@ -9786,6 +9766,7 @@
                  ("PlayerID", c_int),    # 主人ID
                  ("PosX", c_int),    # X坐标
                  ("PosY", c_int),    # Y坐标
                  ("Rank", c_ubyte),    #阶段
                  ]
    def __init__(self):
@@ -9807,6 +9788,7 @@
        self.PlayerID = 0
        self.PosX = 0
        self.PosY = 0
        self.Rank = 0
        return
    def GetLength(self):
@@ -9823,7 +9805,8 @@
                                NPCID:%d,
                                PlayerID:%d,
                                PosX:%d,
                                PosY:%d
                                PosY:%d,
                                Rank:%d
                                '''\
                                %(
                                self.Cmd,
@@ -9832,7 +9815,8 @@
                                self.NPCID,
                                self.PlayerID,
                                self.PosX,
                                self.PosY
                                self.PosY,
                                self.Rank
                                )
        return DumpString
@@ -9851,8 +9835,9 @@
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),    
                  ("ObjType", c_ubyte),    
                  ("RefreshType", c_ubyte),
                  ("RefreshType", c_ushort),
                  ("Value", c_int),    
                  ("ValueEx", c_int),
                  ]
    def __init__(self):
@@ -9873,6 +9858,7 @@
        self.ObjType = 0
        self.RefreshType = 0
        self.Value = 0
        self.ValueEx = 0
        return
    def GetLength(self):
@@ -9888,7 +9874,8 @@
                                ObjID:%d,
                                ObjType:%d,
                                RefreshType:%d,
                                Value:%d
                                Value:%d,
                                ValueEx:%d
                                '''\
                                %(
                                self.Cmd,
@@ -9896,7 +9883,8 @@
                                self.ObjID,
                                self.ObjType,
                                self.RefreshType,
                                self.Value
                                self.Value,
                                self.ValueEx
                                )
        return DumpString
@@ -10132,7 +10120,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    
                  ("FamilyMemberLV", c_ubyte),    #玩家在家族中的职位
                  ("FamilyMemberLV", c_ubyte),    #玩家在家族中的职位
                  ]
    def __init__(self):
@@ -10180,7 +10168,7 @@
#------------------------------------------------------
#04 36    周围玩家家族名刷新#tagPlayerFamilyNameRefresh
#04 36   周围玩家家族名刷新#tagPlayerFamilyNameRefresh
class  tagPlayerFamilyNameRefresh(Structure):
    Head = tagHead()
@@ -10258,7 +10246,7 @@
    PlayerID = 0    #(DWORD PlayerID)
    FamilyNameLen = 0    #(BYTE FamilyNameLen)
    FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
    FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位
    FamilyMemberLV = 0    #(BYTE FamilyMemberLV)//玩家在家族中的职位
    data = None
    def __init__(self):
@@ -10688,6 +10676,7 @@
                  ("ObjType", c_ubyte),    #对象类型
                  ("SkillID", c_int),    #技能ID
                  ("DiffValue", c_int),    #ֵ
                  ("DiffValueEx", c_int),    #超亿值
                  ("AttackType", c_ubyte),    #攻击类型
                  ("SrcObjID", c_int),    #飘血来源
                  ("SrcObjType", c_ubyte),    
@@ -10713,6 +10702,7 @@
        self.ObjType = 0
        self.SkillID = 0
        self.DiffValue = 0
        self.DiffValueEx = 0
        self.AttackType = 0
        self.SrcObjID = 0
        self.SrcObjType = 0
@@ -10734,6 +10724,7 @@
                                ObjType:%d,
                                SkillID:%d,
                                DiffValue:%d,
                                DiffValueEx:%d,
                                AttackType:%d,
                                SrcObjID:%d,
                                SrcObjType:%d,
@@ -10747,6 +10738,7 @@
                                self.ObjType,
                                self.SkillID,
                                self.DiffValue,
                                self.DiffValueEx,
                                self.AttackType,
                                self.SrcObjID,
                                self.SrcObjType,
@@ -10888,7 +10880,7 @@
    MaxHP = 0    #(DWORD MaxHP)
    MaxHPEx = 0    #(DWORD MaxHPEx)
    Speed = 0    #(WORD Speed)
    LV = 0    #(BYTE LV)
    LV = 0    #(WORD LV)
    OwnerNameLen = 0    #(BYTE OwnerNameLen)
    OwnerName = ""    #(String OwnerName)//size = OwnerNameLen
    data = None
@@ -10913,7 +10905,7 @@
        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Speed,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.OwnerNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.OwnerName,_pos = CommFunc.ReadString(_lpData, _pos,self.OwnerNameLen)
        return _pos
@@ -10953,7 +10945,7 @@
        length += 4
        length += 4
        length += 2
        length += 1
        length += 2
        length += 1
        length += len(self.OwnerName)
@@ -10973,7 +10965,7 @@
        data = CommFunc.WriteDWORD(data, self.MaxHP)
        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
        data = CommFunc.WriteWORD(data, self.Speed)
        data = CommFunc.WriteBYTE(data, self.LV)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.OwnerNameLen)
        data = CommFunc.WriteString(data, self.OwnerNameLen, self.OwnerName)
        return data
@@ -11018,74 +11010,6 @@
m_NAtagPlayerSummonNPCAppear=tagPlayerSummonNPCAppear()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagPlayerSummonNPCAppear.Head.Cmd,m_NAtagPlayerSummonNPCAppear.Head.SubCmd))] = m_NAtagPlayerSummonNPCAppear
#------------------------------------------------------
#04 40 周围对象刷新(支持大数值) #tagObjInfoRefreshEx
class  tagObjInfoRefreshEx(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ObjID", c_int),
                  ("ObjType", c_ubyte),
                  ("RefreshType", c_ubyte),
                  ("Value", c_int),
                  ("ValueEx", c_int),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0x04
        self.SubCmd = 0x40
        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 = 0x04
        self.SubCmd = 0x40
        self.ObjID = 0
        self.ObjType = 0
        self.RefreshType = 0
        self.Value = 0
        self.ValueEx = 0
        return
    def GetLength(self):
        return sizeof(tagObjInfoRefreshEx)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//04 40 周围对象刷新(支持大数值) //tagObjInfoRefreshEx:
                                Cmd:%s,
                                SubCmd:%s,
                                ObjID:%d,
                                ObjType:%d,
                                RefreshType:%d,
                                Value:%d,
                                ValueEx:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ObjID,
                                self.ObjType,
                                self.RefreshType,
                                self.Value,
                                self.ValueEx
                                )
        return DumpString
m_NAtagObjInfoRefreshEx=tagObjInfoRefreshEx()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagObjInfoRefreshEx.Cmd,m_NAtagObjInfoRefreshEx.SubCmd))] = m_NAtagObjInfoRefreshEx
#------------------------------------------------------
@@ -11225,6 +11149,7 @@
    NPCID = 0    #(DWORD NPCID)
    NPCFaceDir = 0    #(WORD NPCFaceDir)//NPC的面向
    NPCHP = 0    #(DWORD NPCHP)
    NPCHPEx = 0    #(DWORD NPCHPEx)
    NPCEventType = 0    #(WORD NPCEventType)//0 攻击 1 事件
    IsActive = 0    #(BYTE IsActive)//这个NPC是否活着
    PosX = 0    #(WORD PosX)
@@ -11249,6 +11174,7 @@
        self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NPCFaceDir,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.NPCHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NPCHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NPCEventType,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.IsActive,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PosX,_pos = CommFunc.ReadWORD(_lpData, _pos)
@@ -11269,6 +11195,7 @@
        self.NPCID = 0
        self.NPCFaceDir = 0
        self.NPCHP = 0
        self.NPCHPEx = 0
        self.NPCEventType = 0
        self.IsActive = 0
        self.PosX = 0
@@ -11286,6 +11213,7 @@
        length += 4
        length += 4
        length += 2
        length += 4
        length += 4
        length += 2
        length += 1
@@ -11306,6 +11234,7 @@
        data = CommFunc.WriteDWORD(data, self.NPCID)
        data = CommFunc.WriteWORD(data, self.NPCFaceDir)
        data = CommFunc.WriteDWORD(data, self.NPCHP)
        data = CommFunc.WriteDWORD(data, self.NPCHPEx)
        data = CommFunc.WriteWORD(data, self.NPCEventType)
        data = CommFunc.WriteBYTE(data, self.IsActive)
        data = CommFunc.WriteWORD(data, self.PosX)
@@ -11324,6 +11253,7 @@
                                NPCID:%d,
                                NPCFaceDir:%d,
                                NPCHP:%d,
                                NPCHPEx:%d,
                                NPCEventType:%d,
                                IsActive:%d,
                                PosX:%d,
@@ -11340,6 +11270,7 @@
                                self.NPCID,
                                self.NPCFaceDir,
                                self.NPCHP,
                                self.NPCHPEx,
                                self.NPCEventType,
                                self.IsActive,
                                self.PosX,
@@ -12582,6 +12513,7 @@
                  ("ObjType", c_ubyte),    #对象类型
                  ("AttackType", c_ubyte),    #普攻, 闪躲, 致命 类型
                  ("Value", c_int),    
                  ("ValueEx", c_int),
                  ("RemainHP", c_int),    #对方剩余的血
                  ("RemainHPEx", c_int),    #对方剩余的血, 超亿支持
                  ]
@@ -12607,6 +12539,7 @@
        self.ObjType = 0
        self.AttackType = 0
        self.Value = 0
        self.ValueEx = 0
        self.RemainHP = 0
        self.RemainHPEx = 0
        return
@@ -12628,6 +12561,7 @@
                                ObjType:%d,
                                AttackType:%d,
                                Value:%d,
                                ValueEx:%d,
                                RemainHP:%d,
                                RemainHPEx:%d
                                '''\
@@ -12641,6 +12575,7 @@
                                self.ObjType,
                                self.AttackType,
                                self.Value,
                                self.ValueEx,
                                self.RemainHP,
                                self.RemainHPEx
                                )
@@ -12785,6 +12720,7 @@
                  ("ObjID", c_int),    
                  ("AttackType", c_ubyte),    #爆击, miss
                  ("HurtHP", c_int),    
                  ("HurtHPEx", c_int),
                  ("CurHP", c_int),    
                  ("CurHPEx", c_int),    
                  ]
@@ -12803,6 +12739,7 @@
        self.ObjID = 0
        self.AttackType = 0
        self.HurtHP = 0
        self.HurtHPEx = 0
        self.CurHP = 0
        self.CurHPEx = 0
        return
@@ -12819,6 +12756,7 @@
                                ObjID:%d,
                                AttackType:%d,
                                HurtHP:%d,
                                HurtHPEx:%d,
                                CurHP:%d,
                                CurHPEx:%d
                                '''\
@@ -12827,6 +12765,7 @@
                                self.ObjID,
                                self.AttackType,
                                self.HurtHP,
                                self.HurtHPEx,
                                self.CurHP,
                                self.CurHPEx
                                )
@@ -12951,6 +12890,7 @@
                  ("ObjID", c_int),    
                  ("AttackType", c_ubyte),    #爆击, miss
                  ("HurtHP", c_int),    
                  ("HurtHPEx", c_int),
                  ("CurHP", c_int),    
                  ("CurHPEx", c_int),    
                  ]
@@ -12969,6 +12909,7 @@
        self.ObjID = 0
        self.AttackType = 0
        self.HurtHP = 0
        self.HurtHPEx = 0
        self.CurHP = 0
        self.CurHPEx = 0
        return
@@ -12985,6 +12926,7 @@
                                ObjID:%d,
                                AttackType:%d,
                                HurtHP:%d,
                                HurtHPEx:%d,
                                CurHP:%d,
                                CurHPEx:%d
                                '''\
@@ -12993,6 +12935,7 @@
                                self.ObjID,
                                self.AttackType,
                                self.HurtHP,
                                self.HurtHPEx,
                                self.CurHP,
                                self.CurHPEx
                                )
@@ -13009,6 +12952,7 @@
    PosY = 0    #(WORD PosY)
    HurtCount = 0    #(WORD HurtCount)//伤害数目
    HurtList = list()    #(vector<tagSkillPosHurtObj> HurtList)//size = HurtCount
    SkillElementID = 0    #(WORD SkillElementID)//专精技能ID
    data = None
    def __init__(self):
@@ -13031,6 +12975,7 @@
            temHurtList = tagSkillPosHurtObj()
            _pos = temHurtList.ReadData(_lpData, _pos)
            self.HurtList.append(temHurtList)
        self.SkillElementID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
@@ -13046,6 +12991,7 @@
        self.PosY = 0
        self.HurtCount = 0
        self.HurtList = list()
        self.SkillElementID = 0
        return
    def GetLength(self):
@@ -13060,6 +13006,7 @@
        length += 2
        for i in range(self.HurtCount):
            length += self.HurtList[i].GetLength()
        length += 2
        return length
@@ -13075,6 +13022,7 @@
        data = CommFunc.WriteWORD(data, self.HurtCount)
        for i in range(self.HurtCount):
            data = CommFunc.WriteString(data, self.HurtList[i].GetLength(), self.HurtList[i].GetBuffer())
        data = CommFunc.WriteWORD(data, self.SkillElementID)
        return data
    def OutputString(self):
@@ -13087,7 +13035,8 @@
                                PosX:%d,
                                PosY:%d,
                                HurtCount:%d,
                                HurtList:%s
                                HurtList:%s,
                                SkillElementID:%d
                                '''\
                                %(
                                self.Head.OutputString(),
@@ -13098,7 +13047,8 @@
                                self.PosX,
                                self.PosY,
                                self.HurtCount,
                                "..."
                                "...",
                                self.SkillElementID
                                )
        return DumpString
@@ -13602,7 +13552,7 @@
    ByObjID = 0    #(DWORD ByObjID)//物品原本在哪个对象身上
    DropTick = 0    #(DWORD DropTick)//物品掉落Tick
    UserDataLen = 0    #(WORD UserDataLen)//附加属性长度
    UserData = ""    #(String UserData)//附加属性  size = UserDataLen
    UserData = ""    #(String UserData)//附加属性  size = UserDataLen
    data = None
    def __init__(self):
@@ -14020,7 +13970,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("MakeType", c_ubyte),    #类型        TMakeItemType
                  ("MakeType", c_ubyte),    #类型      TMakeItemType
                  ("Result", c_ubyte),    #是否成功
                  ]
@@ -15108,7 +15058,7 @@
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("PlayerID", c_int),    
                  ("PrepareState", c_ubyte),    #准备类型,    TPreparingState
                  ("PrepareState", c_ubyte),    #准备类型,   TPreparingState
                  ("MaxTime", c_int),    #最大时间
                  ("PrepareID", c_int),    #准备ID, 如果是技能, 则是技能ID
                  ]
@@ -18649,7 +18599,9 @@
    LVEx = 0    #(WORD LVEx)//玩家等级副本,用于转生
    LV2 = 0    #(WORD LV2)//大师等级
    HP = 0    #(DWORD HP)
    HPEx = 0    #(DWORD HPEx)
    MaxHP = 0    #(DWORD MaxHP)
    MaxHPEx = 0    #(DWORD MaxHPEx)
    MP = 0    #(DWORD MP)
    MaxMP = 0    #(DWORD MaxMP)
    PlayerType = 0    #(BYTE PlayerType)//五行
@@ -18682,7 +18634,9 @@
        self.LVEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LV2,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxMP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -18711,7 +18665,9 @@
        self.LVEx = 0
        self.LV2 = 0
        self.HP = 0
        self.HPEx = 0
        self.MaxHP = 0
        self.MaxHPEx = 0
        self.MP = 0
        self.MaxMP = 0
        self.PlayerType = 0
@@ -18741,6 +18697,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        length += 1
        length += 1
@@ -18766,7 +18724,9 @@
        data = CommFunc.WriteWORD(data, self.LVEx)
        data = CommFunc.WriteWORD(data, self.LV2)
        data = CommFunc.WriteDWORD(data, self.HP)
        data = CommFunc.WriteDWORD(data, self.HPEx)
        data = CommFunc.WriteDWORD(data, self.MaxHP)
        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
        data = CommFunc.WriteDWORD(data, self.MP)
        data = CommFunc.WriteDWORD(data, self.MaxMP)
        data = CommFunc.WriteBYTE(data, self.PlayerType)
@@ -18793,7 +18753,9 @@
                                LVEx:%d,
                                LV2:%d,
                                HP:%d,
                                HPEx:%d,
                                MaxHP:%d,
                                MaxHPEx:%d,
                                MP:%d,
                                MaxMP:%d,
                                PlayerType:%d,
@@ -18818,7 +18780,9 @@
                                self.LVEx,
                                self.LV2,
                                self.HP,
                                self.HPEx,
                                self.MaxHP,
                                self.MaxHPEx,
                                self.MP,
                                self.MaxMP,
                                self.PlayerType,
@@ -18845,7 +18809,9 @@
                  ("PlayerID", c_int),    
                  ("LV", c_ushort),    
                  ("HP", c_int),    
                  ("HPEx", c_int),
                  ("MaxHP", c_int),    
                  ("MaxHPEx", c_int),
                  ("MP", c_int),    
                  ("MaxMP", c_int),    
                  ]
@@ -18867,7 +18833,9 @@
        self.PlayerID = 0
        self.LV = 0
        self.HP = 0
        self.HPEx = 0
        self.MaxHP = 0
        self.MaxHPEx = 0
        self.MP = 0
        self.MaxMP = 0
        return
@@ -18885,7 +18853,9 @@
                                PlayerID:%d,
                                LV:%d,
                                HP:%d,
                                HPEx:%d,
                                MaxHP:%d,
                                MaxHPEx:%d,
                                MP:%d,
                                MaxMP:%d
                                '''\
@@ -18895,7 +18865,9 @@
                                self.PlayerID,
                                self.LV,
                                self.HP,
                                self.HPEx,
                                self.MaxHP,
                                self.MaxHPEx,
                                self.MP,
                                self.MaxMP
                                )
@@ -20627,7 +20599,7 @@
    FamilyName = ""    #(String FamilyName)//size = FamilyNameLen
    Job = 0    #(BYTE Job)//ְҵ
    FamilyActiveValue = 0    #(DWORD FamilyActiveValue)//本周家族活跃度
    LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度
    LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度
    OfficialRank = 0    #(BYTE OfficialRank)//境界
    Exattr1 = 0    #(DWORD Exattr1)//扩展属性
    Exattr2 = 0    #(DWORD Exattr2)//扩展属性
@@ -20791,7 +20763,7 @@
    Point = 0    #(DWORD Point)//家族战积分
    Broadcast = ""    #(String Broadcast)//size = BroadcastLen
    FamilyActiveValue = 0    #(DWORD FamilyActiveValue)//本周家族活跃度
    LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度
    LastWeekFamilyActiveValue = 0    #(DWORD LastWeekFamilyActiveValue)//上周家族活跃度
    Member = list()    #(vector<tagRoleFamilyMember> Member)//size = MemberCount
    Extra1 = 0    #(DWORD Extra1)//附加字段1
    Extra2 = 0    #(DWORD Extra2)//附加字段2
@@ -21968,7 +21940,7 @@
class  tagFamilyTechInfo(Structure):
    Head = tagHead()
    TechCount = 0    #(WORD TechCount)//帮会科技数量 
    TechInfoList = list()    #(vector<tagTechInfo> TechInfoList)//科技信息列表
    TechInfoList = list()    #(vector<tagTechInfo> TechInfoList)//科技信息列表
    data = None
    def __init__(self):
@@ -22299,7 +22271,7 @@
#10 01 排行榜信息#tagBillboard 对性能影响比较大, 需要限制tick
class  tagBillboardList(Structure):
    ID = 0    #(DWORD ID)// 不一定都能用上,目前用于保存宠物NPCID
    ID = 0    #(DWORD ID)// 不一定都能用上,目前用于保存宠物NPCID
    Name1 = ""    #(char Name1[33])//名字1,用来显示排序对象名字 
    Name2 = ""    #(char Name2[33])//名字2
    Type2 = 0    #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
@@ -23765,7 +23737,7 @@
    MakerNameLen = 0    #(BYTE MakerNameLen)//制造者名字
    MakerName = ""    #(String MakerName)//size = MakerNameLen
    UserDataLen = 0    #(DWORD UserDataLen)
    UserData = ""    #(String UserData)//自定义数据
    UserData = ""    #(String UserData)//自定义数据
    data = None
    def __init__(self):
@@ -24365,7 +24337,7 @@
                  ("SubCmd", c_ubyte),
                  ("Type", c_ubyte),    #答题类型
                  ("QuestionNO", c_ushort),    # 答题号
                  ("FunctionNO", c_ubyte),    # 功能号
                  ("FunctionNO", c_ubyte),    # 功能号
                  ("FunctionOpt1", c_ubyte),    #功能选项1
                  ("FunctionOpt2", c_ubyte),    #功能选项2
                  ("FunctionOpt3", c_ubyte),    #功能选项3
@@ -26062,7 +26034,9 @@
    CON = 0    #(DWORD CON)//体魄
    LeftPoints = 0    #(WORD LeftPoints)//潜力,即剩余点数
    HP = 0    #(DWORD HP)// 当前气血
    HPEx = 0    #(DWORD HPEx)// 当前气血 超亿
    MaxHP = 0    #(DWORD MaxHP)// 最大气血
    MaxHPEx = 0    #(DWORD MaxHPEx)// 最大气血 超亿
    PhysicAtk = 0    #(DWORD PhysicAtk)// 外功
    PhysicDef = 0    #(DWORD PhysicDef)// 外防
    MagicAtk = 0    #(DWORD MagicAtk)// 内攻
@@ -26132,7 +26106,9 @@
        self.CON,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LeftPoints,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MaxHPEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PhysicAtk,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PhysicDef,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MagicAtk,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -26200,7 +26176,9 @@
        self.CON = 0
        self.LeftPoints = 0
        self.HP = 0
        self.HPEx = 0
        self.MaxHP = 0
        self.MaxHPEx = 0
        self.PhysicAtk = 0
        self.PhysicDef = 0
        self.MagicAtk = 0
@@ -26271,6 +26249,8 @@
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        for i in range(self.SkillListCnt):
            length += self.SkillList[i].GetLength()
@@ -26334,7 +26314,9 @@
        data = CommFunc.WriteDWORD(data, self.CON)
        data = CommFunc.WriteWORD(data, self.LeftPoints)
        data = CommFunc.WriteDWORD(data, self.HP)
        data = CommFunc.WriteDWORD(data, self.HPEx)
        data = CommFunc.WriteDWORD(data, self.MaxHP)
        data = CommFunc.WriteDWORD(data, self.MaxHPEx)
        data = CommFunc.WriteDWORD(data, self.PhysicAtk)
        data = CommFunc.WriteDWORD(data, self.PhysicDef)
        data = CommFunc.WriteDWORD(data, self.MagicAtk)
@@ -26401,7 +26383,9 @@
                                CON:%d,
                                LeftPoints:%d,
                                HP:%d,
                                HPEx:%d,
                                MaxHP:%d,
                                MaxHPEx:%d,
                                PhysicAtk:%d,
                                PhysicDef:%d,
                                MagicAtk:%d,
@@ -26465,7 +26449,9 @@
                                self.CON,
                                self.LeftPoints,
                                self.HP,
                                self.HPEx,
                                self.MaxHP,
                                self.MaxHPEx,
                                self.PhysicAtk,
                                self.PhysicDef,
                                self.MagicAtk,
@@ -27054,8 +27040,8 @@
                  ("PlayerID", c_int),    #挂单玩家的id
                  ("FormID", c_int),    # 挂单ID
                  ("UnitPrice", c_int),    #该单购买元宝的银两单价(每组)
                  ("LefGold", c_int),    #该单的剩余购买元宝组数
                  ("LeftTime", c_ushort),    #该单的剩余在架时间
                  ("LefGold", c_int),    #该单的剩余购买元宝组数
                  ("LeftTime", c_ushort),    #该单的剩余在架时间
                  ]
    def __init__(self):
@@ -27189,7 +27175,7 @@
                  ("SubCmd", c_ubyte),
                  ("FormID", c_int),    # 挂单ID
                  ("UnitPrice", c_int),    #该单购买元宝的银两单价(每组)
                  ("LefGold", c_int),    #该单的剩余购买元宝组数
                  ("LefGold", c_int),    #该单的剩余购买元宝组数
                  ("LeftTime", c_ushort),    #该单的剩余在架时间
                  ]
@@ -27478,7 +27464,7 @@
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("LabelID", c_int),    # 删除标签
                  ("LabelID", c_int),    # 删除标签
                  ]
    def __init__(self):
@@ -28719,7 +28705,7 @@
class  tagHightLadderTopPlayerList(Structure):
    Head = tagHead()
    Size = 0    #(BYTE Size)
    PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表
    PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表
    data = None
    def __init__(self):
@@ -28981,7 +28967,7 @@
class  tagVsTeam(Structure):
    TeamIndex = 0    #(BYTE TeamIndex)// 竞技队Index
    MemberCount = 0    #(WORD MemberCount)// 成员人数
    Members = list()    #(vector<tagVsMemberInfo> Members)// 成员列表
    Members = list()    #(vector<tagVsMemberInfo> Members)// 成员列表
    data = None
    def __init__(self):
@@ -29108,7 +29094,7 @@
    Head = tagHead()
    MyOrder = 0    #(WORD MyOrder)//自身排名
    Size = 0    #(BYTE Size)
    PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表
    PlayerList = list()    #(vector<tagHightLadderPlayerInfo> PlayerList)//玩家信息列表
    data = None
    def __init__(self):
@@ -29281,7 +29267,7 @@
class  tagBourseItem(Structure):
    ItemGUID = ""    #(char ItemGUID[40])
    PlayerID = 0    #(DWORD PlayerID)//挂单玩家ID
    PlayerID = 0    #(DWORD PlayerID)//挂单玩家ID
    ItemTypeID = 0    #(DWORD ItemTypeID)//物品ID
    PriceType = 0    #(BYTE PriceType)//出售价格类型
    PriceCount = 0    #(DWORD PriceCount)//出售价格