hxp
5 天以前 256fb6df5072850105da4b381f8ce1896c168ac1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -1218,742 +1218,6 @@
#------------------------------------------------------
# A1 12 玩家初始化 #tagMCDBPlayer
class  tagMCDBPlayer(Structure):
    Head = tagHead()
    AccID = ""    #(char AccID[65])//帐号名, 该角色所在的帐号的用户名
    PlayerID = 0    #(DWORD PlayerID)
    PlayerName = ""    #(char PlayerName[33])//size = 14
    AccState = 0    #(BYTE AccState)//0: 未创建, 1: 创建OK,正常登录 2:封号 3:已删除
    GMLevel = 0    #(BYTE GMLevel)//GM等级, 0:不是GM  >=1 : GM的等级
    Sex = 0    #(BYTE Sex)//性别
    Job = 0    #(BYTE Job)//职业, 0.新手 1.游侠 2.战士 3.弓箭手 4.术士 5.道士
    ReincarnationLv = 0    #(WORD ReincarnationLv)// 转生等级
    LV = 0    #(WORD LV)//等级
    LVEx = 0    #(WORD LVEx)//玩家等级副本,用于转生
    LV2 = 0    #(WORD LV2)//大师等级
    ExpPoint = 0    #(DWORD ExpPoint)//扩充经验点数
    TotalExp = 0    #(DWORD TotalExp)//总经验
    Family = 0    #(DWORD Family)//家族
    FamilyName = ""    #(char FamilyName[33])//家族名称
    TeamHornor = 0    #(int TeamHornor)//组队荣誉
    FamilyHornor = 0    #(int FamilyHornor)//家族荣耀
    FamilyActiveValue = 0    #(int FamilyActiveValue)//家族活跃度
    LastWeekFamilyActiveValue = 0    #(int LastWeekFamilyActiveValue)//上周家族活跃度
    CountryHornor = 0    #(int CountryHornor)//本周国家功勋值
    CountryLastWeekHornor = 0    #(int CountryLastWeekHornor)//上周国家功勋值
    Mate = 0    #(DWORD Mate)
    Gold = 0    #(DWORD Gold)//金子
    GoldPaper = 0    #(DWORD GoldPaper)//金票
    Silver = 0    #(DWORD Silver)//银子
    SilverPaper = 0    #(DWORD SilverPaper)//银票
    FightPoint = 0    #(DWORD FightPoint)//战斗值
    HappyPoint = 0    #(DWORD HappyPoint)//脱机挂时长(秒)
    LineID = 0    #(BYTE LineID)//角色所在线路
    MapID = 0    #(WORD MapID)//角色所在地图
    PosX = 0    #(WORD PosX)//角色坐标
    PosY = 0    #(WORD PosY)
    RebornMapID = 0    #(WORD RebornMapID)//重生点地图ID
    RebornPosX = 0    #(WORD RebornPosX)
    RebornPosY = 0    #(WORD RebornPosY)
    State = 0    #(BYTE State)//角色状态   0.正常在线1.脱机挂在线 2脱机挂死亡
    HP = 0    #(DWORD HP)//当前HP
    XP = 0    #(DWORD XP)//当前XP
    HPRestoreSetting = 0    #(WORD HPRestoreSetting)//少于这个值%自动喝血
    MPRestoreSetting = 0    #(WORD MPRestoreSetting)//少于这个值%自动喝魔
    FreePoint = 0    #(DWORD FreePoint)//未分配点数
    FreeSkillPoint = 0    #(DWORD FreeSkillPoint)//未分配的技能点
    BaseSTR = 0    #(int BaseSTR)//裸体力量
    BasePNE = 0    #(int BasePNE)//裸体真元
    BasePHY = 0    #(int BasePHY)//裸体筋骨
    BaseCON = 0    #(int BaseCON)//裸体体魄
    STR = 0    #(int STR)//力量
    PNE = 0    #(int PNE)//真元
    PHY = 0    #(int PHY)//筋骨
    CON = 0    #(int CON)//体魄
    PKValue = 0    #(WORD PKValue)//衡量PK能力的一项属性,由攻防计算而得
    BackpackLV = 0    #(BYTE BackpackLV)//背包等级
    WarehouseLV = 0    #(BYTE WarehouseLV)//仓库等级
    TeamID = 0    #(DWORD TeamID)//队伍ID
    UseGoldType = 0    #(BYTE UseGoldType)//默认用金子/金票      类型为MoneyType
    UseSilverType = 0    #(BYTE UseSilverType)//默认用的银子/银票
    AttackMode = 0    #(BYTE AttackMode)//攻击模式
    LastWeekOnlineTime = 0    #(DWORD LastWeekOnlineTime)//上周在线时间
    FBID = 0    #(BYTE FBID)//fb id
    FamilyLV = 0    #(BYTE FamilyLV)//家族等级
    FriendFavor = 0    #(DWORD FriendFavor)//好友人气值
    Energy = 0    #(DWORD Energy)//精力值
    EquipShowSwitch = 0    #(DWORD EquipShowSwitch)//装备显示开关
    LuckValue = 0    #(DWORD LuckValue)//幸运值
    ExAttr1 = 0    #(DWORD ExAttr1)//扩展属性1,各项目专用
    ExAttr2 = 0    #(DWORD ExAttr2)//扩展属性2,各项目专用
    ExAttr3 = 0    #(DWORD ExAttr3)//扩展属性3,各项目专用
    ExAttr4 = 0    #(DWORD ExAttr4)//扩展属性4,各项目专用
    ExAttr5 = 0    #(DWORD ExAttr5)//扩展属性5,各项目专用
    Faction = 0    #(BYTE Faction)//阵营
    InfamyValue = 0    #(DWORD InfamyValue)//恶名值
    OfficialRank = 0    #(BYTE OfficialRank)//官阶,官职等级
    ChangeCoinPointTotal = 0    #(DWORD ChangeCoinPointTotal)//兑换的点数总计
    VIPLv = 0    #(BYTE VIPLv)//VIP等级
    VIPLvForPhone = 0    #(BYTE VIPLvForPhone)//移动VIP等级
    ExAttr6 = 0    #(DWORD ExAttr6)//扩展属性6,各项目专用
    ExAttr7 = 0    #(DWORD ExAttr7)//扩展属性7,各项目专用
    ExAttr8 = 0    #(DWORD ExAttr8)//扩展属性8,各项目专用
    ExAttr9 = 0    #(DWORD ExAttr9)//扩展属性9,各项目专用
    ExAttr10 = 0    #(DWORD ExAttr10)//扩展属性10,各项目专用
    ModelMark = 0    #(DWORD ModelMark)// 变形模型mark
    ExAttr11 = 0    #(DWORD ExAttr11)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr12 = 0    #(DWORD ExAttr12)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr13 = 0    #(DWORD ExAttr13)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr14 = 0    #(DWORD ExAttr14)//预留的扩展属性字段,用来存放项目特定的属性
    OperateInfo = 0    #(DWORD OperateInfo)//玩家附加运营商信息
    Operate = ""    #(char Operate[15])//所属运营商平台名
    ServerID = 0    #(DWORD ServerID)//所属区服ID
    ExAttr15 = 0    #(DWORD ExAttr15)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr16 = 0    #(DWORD ExAttr16)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr17 = 0    #(DWORD ExAttr17)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr18 = 0    #(DWORD ExAttr18)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr19 = 0    #(DWORD ExAttr19)//预留的扩展属性字段,用来存放项目特定的属性
    ExAttr20 = 0    #(DWORD ExAttr20)//预留的扩展属性字段,用来存放项目特定的属性
    HPEx = 0    #(DWORD HPEx)//当前血量 超过E的记录
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    RoleType = 0    #(DWORD RoleType)//角色类型(各项目可自定义含义,如种族,与职业区分)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA1
        self.Head.SubCmd = 0x12
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,65)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.AccState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.GMLevel,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Sex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ReincarnationLv,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LVEx,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.LV2,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TotalExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Family,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.TeamHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FamilyHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LastWeekFamilyActiveValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CountryHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CountryLastWeekHornor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Mate,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SilverPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HappyPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MapID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PosX,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PosY,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RebornMapID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RebornPosX,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RebornPosY,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.State,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.HP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.XP,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.HPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.MPRestoreSetting,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.FreePoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FreeSkillPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BaseSTR,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BasePNE,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BasePHY,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BaseCON,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.STR,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PNE,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PHY,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.CON,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PKValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.BackpackLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WarehouseLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TeamID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.UseGoldType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.UseSilverType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AttackMode,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.LastWeekOnlineTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FBID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.FriendFavor,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Energy,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LuckValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr3,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr4,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr5,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.InfamyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ChangeCoinPointTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.VIPLv,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.VIPLvForPhone,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ExAttr6,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr7,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr8,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr9,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr10,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ModelMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr11,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr12,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr13,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr14,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.OperateInfo,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Operate,_pos = CommFunc.ReadString(_lpData, _pos,15)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr15,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr16,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ExAttr17,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        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.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RoleType,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA1
        self.Head.SubCmd = 0x12
        self.AccID = ""
        self.PlayerID = 0
        self.PlayerName = ""
        self.AccState = 0
        self.GMLevel = 0
        self.Sex = 0
        self.Job = 0
        self.ReincarnationLv = 0
        self.LV = 0
        self.LVEx = 0
        self.LV2 = 0
        self.ExpPoint = 0
        self.TotalExp = 0
        self.Family = 0
        self.FamilyName = ""
        self.TeamHornor = 0
        self.FamilyHornor = 0
        self.FamilyActiveValue = 0
        self.LastWeekFamilyActiveValue = 0
        self.CountryHornor = 0
        self.CountryLastWeekHornor = 0
        self.Mate = 0
        self.Gold = 0
        self.GoldPaper = 0
        self.Silver = 0
        self.SilverPaper = 0
        self.FightPoint = 0
        self.HappyPoint = 0
        self.LineID = 0
        self.MapID = 0
        self.PosX = 0
        self.PosY = 0
        self.RebornMapID = 0
        self.RebornPosX = 0
        self.RebornPosY = 0
        self.State = 0
        self.HP = 0
        self.XP = 0
        self.HPRestoreSetting = 0
        self.MPRestoreSetting = 0
        self.FreePoint = 0
        self.FreeSkillPoint = 0
        self.BaseSTR = 0
        self.BasePNE = 0
        self.BasePHY = 0
        self.BaseCON = 0
        self.STR = 0
        self.PNE = 0
        self.PHY = 0
        self.CON = 0
        self.PKValue = 0
        self.BackpackLV = 0
        self.WarehouseLV = 0
        self.TeamID = 0
        self.UseGoldType = 0
        self.UseSilverType = 0
        self.AttackMode = 0
        self.LastWeekOnlineTime = 0
        self.FBID = 0
        self.FamilyLV = 0
        self.FriendFavor = 0
        self.Energy = 0
        self.EquipShowSwitch = 0
        self.LuckValue = 0
        self.ExAttr1 = 0
        self.ExAttr2 = 0
        self.ExAttr3 = 0
        self.ExAttr4 = 0
        self.ExAttr5 = 0
        self.Faction = 0
        self.InfamyValue = 0
        self.OfficialRank = 0
        self.ChangeCoinPointTotal = 0
        self.VIPLv = 0
        self.VIPLvForPhone = 0
        self.ExAttr6 = 0
        self.ExAttr7 = 0
        self.ExAttr8 = 0
        self.ExAttr9 = 0
        self.ExAttr10 = 0
        self.ModelMark = 0
        self.ExAttr11 = 0
        self.ExAttr12 = 0
        self.ExAttr13 = 0
        self.ExAttr14 = 0
        self.OperateInfo = 0
        self.Operate = ""
        self.ServerID = 0
        self.ExAttr15 = 0
        self.ExAttr16 = 0
        self.ExAttr17 = 0
        self.ExAttr18 = 0
        self.ExAttr19 = 0
        self.ExAttr20 = 0
        self.HPEx = 0
        self.Face = 0
        self.FacePic = 0
        self.RoleType = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 65
        length += 4
        length += 33
        length += 1
        length += 1
        length += 1
        length += 1
        length += 2
        length += 2
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 33
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        length += 2
        length += 2
        length += 2
        length += 2
        length += 2
        length += 2
        length += 1
        length += 4
        length += 4
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 2
        length += 1
        length += 1
        length += 4
        length += 1
        length += 1
        length += 1
        length += 4
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 1
        length += 4
        length += 1
        length += 4
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 15
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 65, self.AccID)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.AccState)
        data = CommFunc.WriteBYTE(data, self.GMLevel)
        data = CommFunc.WriteBYTE(data, self.Sex)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.ReincarnationLv)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteWORD(data, self.LVEx)
        data = CommFunc.WriteWORD(data, self.LV2)
        data = CommFunc.WriteDWORD(data, self.ExpPoint)
        data = CommFunc.WriteDWORD(data, self.TotalExp)
        data = CommFunc.WriteDWORD(data, self.Family)
        data = CommFunc.WriteString(data, 33, self.FamilyName)
        data = CommFunc.WriteDWORD(data, self.TeamHornor)
        data = CommFunc.WriteDWORD(data, self.FamilyHornor)
        data = CommFunc.WriteDWORD(data, self.FamilyActiveValue)
        data = CommFunc.WriteDWORD(data, self.LastWeekFamilyActiveValue)
        data = CommFunc.WriteDWORD(data, self.CountryHornor)
        data = CommFunc.WriteDWORD(data, self.CountryLastWeekHornor)
        data = CommFunc.WriteDWORD(data, self.Mate)
        data = CommFunc.WriteDWORD(data, self.Gold)
        data = CommFunc.WriteDWORD(data, self.GoldPaper)
        data = CommFunc.WriteDWORD(data, self.Silver)
        data = CommFunc.WriteDWORD(data, self.SilverPaper)
        data = CommFunc.WriteDWORD(data, self.FightPoint)
        data = CommFunc.WriteDWORD(data, self.HappyPoint)
        data = CommFunc.WriteBYTE(data, self.LineID)
        data = CommFunc.WriteWORD(data, self.MapID)
        data = CommFunc.WriteWORD(data, self.PosX)
        data = CommFunc.WriteWORD(data, self.PosY)
        data = CommFunc.WriteWORD(data, self.RebornMapID)
        data = CommFunc.WriteWORD(data, self.RebornPosX)
        data = CommFunc.WriteWORD(data, self.RebornPosY)
        data = CommFunc.WriteBYTE(data, self.State)
        data = CommFunc.WriteDWORD(data, self.HP)
        data = CommFunc.WriteDWORD(data, self.XP)
        data = CommFunc.WriteWORD(data, self.HPRestoreSetting)
        data = CommFunc.WriteWORD(data, self.MPRestoreSetting)
        data = CommFunc.WriteDWORD(data, self.FreePoint)
        data = CommFunc.WriteDWORD(data, self.FreeSkillPoint)
        data = CommFunc.WriteDWORD(data, self.BaseSTR)
        data = CommFunc.WriteDWORD(data, self.BasePNE)
        data = CommFunc.WriteDWORD(data, self.BasePHY)
        data = CommFunc.WriteDWORD(data, self.BaseCON)
        data = CommFunc.WriteDWORD(data, self.STR)
        data = CommFunc.WriteDWORD(data, self.PNE)
        data = CommFunc.WriteDWORD(data, self.PHY)
        data = CommFunc.WriteDWORD(data, self.CON)
        data = CommFunc.WriteWORD(data, self.PKValue)
        data = CommFunc.WriteBYTE(data, self.BackpackLV)
        data = CommFunc.WriteBYTE(data, self.WarehouseLV)
        data = CommFunc.WriteDWORD(data, self.TeamID)
        data = CommFunc.WriteBYTE(data, self.UseGoldType)
        data = CommFunc.WriteBYTE(data, self.UseSilverType)
        data = CommFunc.WriteBYTE(data, self.AttackMode)
        data = CommFunc.WriteDWORD(data, self.LastWeekOnlineTime)
        data = CommFunc.WriteBYTE(data, self.FBID)
        data = CommFunc.WriteBYTE(data, self.FamilyLV)
        data = CommFunc.WriteDWORD(data, self.FriendFavor)
        data = CommFunc.WriteDWORD(data, self.Energy)
        data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
        data = CommFunc.WriteDWORD(data, self.LuckValue)
        data = CommFunc.WriteDWORD(data, self.ExAttr1)
        data = CommFunc.WriteDWORD(data, self.ExAttr2)
        data = CommFunc.WriteDWORD(data, self.ExAttr3)
        data = CommFunc.WriteDWORD(data, self.ExAttr4)
        data = CommFunc.WriteDWORD(data, self.ExAttr5)
        data = CommFunc.WriteBYTE(data, self.Faction)
        data = CommFunc.WriteDWORD(data, self.InfamyValue)
        data = CommFunc.WriteBYTE(data, self.OfficialRank)
        data = CommFunc.WriteDWORD(data, self.ChangeCoinPointTotal)
        data = CommFunc.WriteBYTE(data, self.VIPLv)
        data = CommFunc.WriteBYTE(data, self.VIPLvForPhone)
        data = CommFunc.WriteDWORD(data, self.ExAttr6)
        data = CommFunc.WriteDWORD(data, self.ExAttr7)
        data = CommFunc.WriteDWORD(data, self.ExAttr8)
        data = CommFunc.WriteDWORD(data, self.ExAttr9)
        data = CommFunc.WriteDWORD(data, self.ExAttr10)
        data = CommFunc.WriteDWORD(data, self.ModelMark)
        data = CommFunc.WriteDWORD(data, self.ExAttr11)
        data = CommFunc.WriteDWORD(data, self.ExAttr12)
        data = CommFunc.WriteDWORD(data, self.ExAttr13)
        data = CommFunc.WriteDWORD(data, self.ExAttr14)
        data = CommFunc.WriteDWORD(data, self.OperateInfo)
        data = CommFunc.WriteString(data, 15, self.Operate)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        data = CommFunc.WriteDWORD(data, self.ExAttr15)
        data = CommFunc.WriteDWORD(data, self.ExAttr16)
        data = CommFunc.WriteDWORD(data, self.ExAttr17)
        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.FacePic)
        data = CommFunc.WriteDWORD(data, self.RoleType)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                AccID:%s,
                                PlayerID:%d,
                                PlayerName:%s,
                                AccState:%d,
                                GMLevel:%d,
                                Sex:%d,
                                Job:%d,
                                ReincarnationLv:%d,
                                LV:%d,
                                LVEx:%d,
                                LV2:%d,
                                ExpPoint:%d,
                                TotalExp:%d,
                                Family:%d,
                                FamilyName:%s,
                                TeamHornor:%d,
                                FamilyHornor:%d,
                                FamilyActiveValue:%d,
                                LastWeekFamilyActiveValue:%d,
                                CountryHornor:%d,
                                CountryLastWeekHornor:%d,
                                Mate:%d,
                                Gold:%d,
                                GoldPaper:%d,
                                Silver:%d,
                                SilverPaper:%d,
                                FightPoint:%d,
                                HappyPoint:%d,
                                LineID:%d,
                                MapID:%d,
                                PosX:%d,
                                PosY:%d,
                                RebornMapID:%d,
                                RebornPosX:%d,
                                RebornPosY:%d,
                                State:%d,
                                HP:%d,
                                XP:%d,
                                HPRestoreSetting:%d,
                                MPRestoreSetting:%d,
                                FreePoint:%d,
                                FreeSkillPoint:%d,
                                BaseSTR:%d,
                                BasePNE:%d,
                                BasePHY:%d,
                                BaseCON:%d,
                                STR:%d,
                                PNE:%d,
                                PHY:%d,
                                CON:%d,
                                PKValue:%d,
                                BackpackLV:%d,
                                WarehouseLV:%d,
                                TeamID:%d,
                                UseGoldType:%d,
                                UseSilverType:%d,
                                AttackMode:%d,
                                LastWeekOnlineTime:%d,
                                FBID:%d,
                                FamilyLV:%d,
                                FriendFavor:%d,
                                Energy:%d,
                                EquipShowSwitch:%d,
                                LuckValue:%d,
                                ExAttr1:%d,
                                ExAttr2:%d,
                                ExAttr3:%d,
                                ExAttr4:%d,
                                ExAttr5:%d,
                                Faction:%d,
                                InfamyValue:%d,
                                OfficialRank:%d,
                                ChangeCoinPointTotal:%d,
                                VIPLv:%d,
                                VIPLvForPhone:%d,
                                ExAttr6:%d,
                                ExAttr7:%d,
                                ExAttr8:%d,
                                ExAttr9:%d,
                                ExAttr10:%d,
                                ModelMark:%d,
                                ExAttr11:%d,
                                ExAttr12:%d,
                                ExAttr13:%d,
                                ExAttr14:%d,
                                OperateInfo:%d,
                                Operate:%s,
                                ServerID:%d,
                                ExAttr15:%d,
                                ExAttr16:%d,
                                ExAttr17:%d,
                                ExAttr18:%d,
                                ExAttr19:%d,
                                ExAttr20:%d,
                                HPEx:%d,
                                Face:%d,
                                FacePic:%d,
                                RoleType:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.AccID,
                                self.PlayerID,
                                self.PlayerName,
                                self.AccState,
                                self.GMLevel,
                                self.Sex,
                                self.Job,
                                self.ReincarnationLv,
                                self.LV,
                                self.LVEx,
                                self.LV2,
                                self.ExpPoint,
                                self.TotalExp,
                                self.Family,
                                self.FamilyName,
                                self.TeamHornor,
                                self.FamilyHornor,
                                self.FamilyActiveValue,
                                self.LastWeekFamilyActiveValue,
                                self.CountryHornor,
                                self.CountryLastWeekHornor,
                                self.Mate,
                                self.Gold,
                                self.GoldPaper,
                                self.Silver,
                                self.SilverPaper,
                                self.FightPoint,
                                self.HappyPoint,
                                self.LineID,
                                self.MapID,
                                self.PosX,
                                self.PosY,
                                self.RebornMapID,
                                self.RebornPosX,
                                self.RebornPosY,
                                self.State,
                                self.HP,
                                self.XP,
                                self.HPRestoreSetting,
                                self.MPRestoreSetting,
                                self.FreePoint,
                                self.FreeSkillPoint,
                                self.BaseSTR,
                                self.BasePNE,
                                self.BasePHY,
                                self.BaseCON,
                                self.STR,
                                self.PNE,
                                self.PHY,
                                self.CON,
                                self.PKValue,
                                self.BackpackLV,
                                self.WarehouseLV,
                                self.TeamID,
                                self.UseGoldType,
                                self.UseSilverType,
                                self.AttackMode,
                                self.LastWeekOnlineTime,
                                self.FBID,
                                self.FamilyLV,
                                self.FriendFavor,
                                self.Energy,
                                self.EquipShowSwitch,
                                self.LuckValue,
                                self.ExAttr1,
                                self.ExAttr2,
                                self.ExAttr3,
                                self.ExAttr4,
                                self.ExAttr5,
                                self.Faction,
                                self.InfamyValue,
                                self.OfficialRank,
                                self.ChangeCoinPointTotal,
                                self.VIPLv,
                                self.VIPLvForPhone,
                                self.ExAttr6,
                                self.ExAttr7,
                                self.ExAttr8,
                                self.ExAttr9,
                                self.ExAttr10,
                                self.ModelMark,
                                self.ExAttr11,
                                self.ExAttr12,
                                self.ExAttr13,
                                self.ExAttr14,
                                self.OperateInfo,
                                self.Operate,
                                self.ServerID,
                                self.ExAttr15,
                                self.ExAttr16,
                                self.ExAttr17,
                                self.ExAttr18,
                                self.ExAttr19,
                                self.ExAttr20,
                                self.HPEx,
                                self.Face,
                                self.FacePic,
                                self.RoleType
                                )
        return DumpString
m_NAtagMCDBPlayer=tagMCDBPlayer()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDBPlayer.Head.Cmd,m_NAtagMCDBPlayer.Head.SubCmd))] = m_NAtagMCDBPlayer
#------------------------------------------------------
#A1 05 元宝消费记录 #tagMCGoldCostReport
class  tagMCGoldCostReport(Structure):
@@ -2141,6 +1405,7 @@
                  ("NowSecond", c_ubyte),    
                  ("NowMicSecond", c_int),    
                  ("WeekOfYear", c_ubyte),    #一年中的第几周
                  ("OpenServerTime", c_int),    #开服时间戳
                  ]
    def __init__(self):
@@ -2169,6 +1434,7 @@
        self.NowSecond = 0
        self.NowMicSecond = 0
        self.WeekOfYear = 0
        self.OpenServerTime = 0
        return
    def GetLength(self):
@@ -2192,7 +1458,8 @@
                                NowMinute:%d,
                                NowSecond:%d,
                                NowMicSecond:%d,
                                WeekOfYear:%d
                                WeekOfYear:%d,
                                OpenServerTime:%d
                                '''\
                                %(
                                self.Cmd,
@@ -2208,7 +1475,8 @@
                                self.NowMinute,
                                self.NowSecond,
                                self.NowMicSecond,
                                self.WeekOfYear
                                self.WeekOfYear,
                                self.OpenServerTime
                                )
        return DumpString
@@ -4395,114 +3663,6 @@
#------------------------------------------------------
# A3 C1 神兽助战状态刷新 #tagMCDogzHelpbattleState
class  tagMCDogzHelpbattleState(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("DogzID", c_ubyte),    # 神兽ID
                  ("BatteState", c_ubyte),    #是否已助战, 0否1是
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0xC1
        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 = 0xA3
        self.SubCmd = 0xC1
        self.DogzID = 0
        self.BatteState = 0
        return
    def GetLength(self):
        return sizeof(tagMCDogzHelpbattleState)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 C1 神兽助战状态刷新 //tagMCDogzHelpbattleState:
                                Cmd:%s,
                                SubCmd:%s,
                                DogzID:%d,
                                BatteState:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.DogzID,
                                self.BatteState
                                )
        return DumpString
m_NAtagMCDogzHelpbattleState=tagMCDogzHelpbattleState()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzHelpbattleState.Cmd,m_NAtagMCDogzHelpbattleState.SubCmd))] = m_NAtagMCDogzHelpbattleState
#------------------------------------------------------
# A3 C0 神兽信息 #tagMCDogzInfo
class  tagMCDogzInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("BuyHelpbattleCount", c_ubyte),    #额外购买的助战数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0xC0
        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 = 0xA3
        self.SubCmd = 0xC0
        self.BuyHelpbattleCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCDogzInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 C0 神兽信息 //tagMCDogzInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                BuyHelpbattleCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.BuyHelpbattleCount
                                )
        return DumpString
m_NAtagMCDogzInfo=tagMCDogzInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCDogzInfo.Cmd,m_NAtagMCDogzInfo.SubCmd))] = m_NAtagMCDogzInfo
#------------------------------------------------------
# A3 1C 通知装备分解信息 #tagMCEquipDecomposeInfo
class  tagMCEquipDecomposeInfo(Structure):
@@ -5020,62 +4180,6 @@
m_NAtagMCEquipPartXLAttrInfo=tagMCEquipPartXLAttrInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartXLAttrInfo.Head.Cmd,m_NAtagMCEquipPartXLAttrInfo.Head.SubCmd))] = m_NAtagMCEquipPartXLAttrInfo
#------------------------------------------------------
# A3 54 法器信息 #tagMCFaQiInfo
class  tagMCFaQiInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("LV", c_ubyte),    #等阶
                  ("EatItemCount", c_int),    #当前阶已吃丹个数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x54
        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 = 0xA3
        self.SubCmd = 0x54
        self.LV = 0
        self.EatItemCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCFaQiInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 54 法器信息 //tagMCFaQiInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                LV:%d,
                                EatItemCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.LV,
                                self.EatItemCount
                                )
        return DumpString
m_NAtagMCFaQiInfo=tagMCFaQiInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
#------------------------------------------------------
@@ -5815,62 +4919,6 @@
m_NAtagSCInvestInfo=tagSCInvestInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCInvestInfo.Cmd,m_NAtagSCInvestInfo.SubCmd))] = m_NAtagSCInvestInfo
#------------------------------------------------------
# A3 55 炼体信息 #tagMCLianTiInfo
class  tagMCLianTiInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("LianTiLV", c_ubyte),    #炼体等级
                  ("EatItemCount", c_int),    #当前等级已吃丹个数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA3
        self.SubCmd = 0x55
        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 = 0xA3
        self.SubCmd = 0x55
        self.LianTiLV = 0
        self.EatItemCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCLianTiInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A3 55 炼体信息 //tagMCLianTiInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                LianTiLV:%d,
                                EatItemCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.LianTiLV,
                                self.EatItemCount
                                )
        return DumpString
m_NAtagMCLianTiInfo=tagMCLianTiInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLianTiInfo.Cmd,m_NAtagMCLianTiInfo.SubCmd))] = m_NAtagMCLianTiInfo
#------------------------------------------------------
@@ -8423,6 +7471,7 @@
    LuckValue = 0    #(WORD LuckValue)//当前幸运值
    TreasureCount = 0    #(DWORD TreasureCount)//已寻宝总次数
    TreasureCountToday = 0    #(DWORD TreasureCountToday)//今日已寻宝总次数
    TreasureCountTodayGold = 0    #(DWORD TreasureCountTodayGold)//今日消耗货币已寻宝总次数
    FreeCountToday = 0    #(WORD FreeCountToday)//今日已免费寻宝次数
    TreasureCntAward = 0    #(DWORD TreasureCntAward)//累计寻宝次数对应奖励领奖状态,按奖励记录索引二进制记录是否已领取
    GridLimitCnt = 0    #(BYTE GridLimitCnt)
@@ -8441,6 +7490,7 @@
        self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TreasureCountToday,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TreasureCountTodayGold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FreeCountToday,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureCntAward,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GridLimitCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
@@ -8460,6 +7510,7 @@
        self.LuckValue = 0
        self.TreasureCount = 0
        self.TreasureCountToday = 0
        self.TreasureCountTodayGold = 0
        self.FreeCountToday = 0
        self.TreasureCntAward = 0
        self.GridLimitCnt = 0
@@ -8472,6 +7523,7 @@
        length = 0
        length += 1
        length += 2
        length += 4
        length += 4
        length += 4
        length += 2
@@ -8491,6 +7543,7 @@
        data = CommFunc.WriteWORD(data, self.LuckValue)
        data = CommFunc.WriteDWORD(data, self.TreasureCount)
        data = CommFunc.WriteDWORD(data, self.TreasureCountToday)
        data = CommFunc.WriteDWORD(data, self.TreasureCountTodayGold)
        data = CommFunc.WriteWORD(data, self.FreeCountToday)
        data = CommFunc.WriteDWORD(data, self.TreasureCntAward)
        data = CommFunc.WriteBYTE(data, self.GridLimitCnt)
@@ -8507,6 +7560,7 @@
                                LuckValue:%d,
                                TreasureCount:%d,
                                TreasureCountToday:%d,
                                TreasureCountTodayGold:%d,
                                FreeCountToday:%d,
                                TreasureCntAward:%d,
                                GridLimitCnt:%d,
@@ -8519,6 +7573,7 @@
                                self.LuckValue,
                                self.TreasureCount,
                                self.TreasureCountToday,
                                self.TreasureCountTodayGold,
                                self.FreeCountToday,
                                self.TreasureCntAward,
                                self.GridLimitCnt,
@@ -8603,8 +7658,10 @@
    TreasureType = 0    #(BYTE TreasureType)//寻宝类型
    TreasureIndex = 0    #(BYTE TreasureIndex)//寻宝索引
    CostType = 0    #(BYTE CostType)//消耗类型:0-默认仙玉;1-免费次数;2-寻宝道具
    AddMoneyType = 0    #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0
    AddMoneyValue = 0    #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0
    AddMoneyType = 0    #(BYTE AddMoneyType)// 本次寻宝额外增加的积分货币类型,可能为0
    AddMoneyValue = 0    #(WORD AddMoneyValue)// 本次寻宝额外增加的积分货币值,可能为0
    AddItemID = 0    #(DWORD AddItemID)// 本次寻宝额外赠送的物品ID,可能为0
    AddItemCount = 0    #(DWORD AddItemCount)// 本次寻宝额外赠送的物品ID个数,可能为0
    AddTreasureLuck = 0    #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
    TreasureResultLen = 0    #(WORD TreasureResultLen)
    TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
@@ -8624,6 +7681,8 @@
        self.CostType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.AddItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AddItemCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
@@ -8639,6 +7698,8 @@
        self.CostType = 0
        self.AddMoneyType = 0
        self.AddMoneyValue = 0
        self.AddItemID = 0
        self.AddItemCount = 0
        self.AddTreasureLuck = 0
        self.TreasureResultLen = 0
        self.TreasureResult = ""
@@ -8652,6 +7713,8 @@
        length += 1
        length += 1
        length += 2
        length += 4
        length += 4
        length += 2
        length += 2
        length += len(self.TreasureResult)
@@ -8666,6 +7729,8 @@
        data = CommFunc.WriteBYTE(data, self.CostType)
        data = CommFunc.WriteBYTE(data, self.AddMoneyType)
        data = CommFunc.WriteWORD(data, self.AddMoneyValue)
        data = CommFunc.WriteDWORD(data, self.AddItemID)
        data = CommFunc.WriteDWORD(data, self.AddItemCount)
        data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
        data = CommFunc.WriteWORD(data, self.TreasureResultLen)
        data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
@@ -8679,6 +7744,8 @@
                                CostType:%d,
                                AddMoneyType:%d,
                                AddMoneyValue:%d,
                                AddItemID:%d,
                                AddItemCount:%d,
                                AddTreasureLuck:%d,
                                TreasureResultLen:%d,
                                TreasureResult:%s
@@ -8690,6 +7757,8 @@
                                self.CostType,
                                self.AddMoneyType,
                                self.AddMoneyValue,
                                self.AddItemID,
                                self.AddItemCount,
                                self.AddTreasureLuck,
                                self.TreasureResultLen,
                                self.TreasureResult
@@ -14003,6 +13072,7 @@
    _fields_ = [
                  ("MoneyType", c_ubyte),    
                  ("MoneyValue", c_int),    
                  ("IsBind", c_ubyte),    # 同物品IsBind标记逻辑
                  ]
    def __init__(self):
@@ -14017,6 +13087,7 @@
    def Clear(self):
        self.MoneyType = 0
        self.MoneyValue = 0
        self.IsBind = 0
        return
    def GetLength(self):
@@ -14028,11 +13099,13 @@
    def OutputString(self):
        DumpString = '''// A8 01 获得奖励信息 //tagMCGiveAwardInfo:
                                MoneyType:%d,
                                MoneyValue:%d
                                MoneyValue:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.MoneyType,
                                self.MoneyValue
                                self.MoneyValue,
                                self.IsBind
                                )
        return DumpString
@@ -15086,1121 +14159,6 @@
#------------------------------------------------------
# A9 09 通知BOSS关注记录 #tagGCBossAttentionInfo
class  tagGCBossAttention(Structure):
    _pack_ = 1
    _fields_ = [
                  ("BossID", c_int),    # bossID
                  ("AddState", c_ubyte),    # 关注状态
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.BossID = 0
        self.AddState = 0
        return
    def GetLength(self):
        return sizeof(tagGCBossAttention)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 09 通知BOSS关注记录 //tagGCBossAttentionInfo:
                                BossID:%d,
                                AddState:%d
                                '''\
                                %(
                                self.BossID,
                                self.AddState
                                )
        return DumpString
class  tagGCBossAttentionInfo(Structure):
    Head = tagHead()
    BossCnt = 0    #(BYTE BossCnt)//boss个数
    BossList = list()    #(vector<tagGCBossAttention> BossList)//列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x09
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BossCnt):
            temBossList = tagGCBossAttention()
            _pos = temBossList.ReadData(_lpData, _pos)
            self.BossList.append(temBossList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x09
        self.BossCnt = 0
        self.BossList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.BossCnt):
            length += self.BossList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.BossCnt)
        for i in range(self.BossCnt):
            data = CommFunc.WriteString(data, self.BossList[i].GetLength(), self.BossList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                BossCnt:%d,
                                BossList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.BossCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCBossAttentionInfo=tagGCBossAttentionInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossAttentionInfo.Head.Cmd,m_NAtagGCBossAttentionInfo.Head.SubCmd))] = m_NAtagGCBossAttentionInfo
#------------------------------------------------------
# A9 01 世界boss分流线路boss状态 #tagGCBossShuntLineStateInfo
class  tagGCBossShuntLineState(Structure):
    BossID = 0    #(DWORD BossID)// bossID
    LineCount = 0    #(BYTE LineCount)
    LineIDList = list()    #(vector<BYTE> LineIDList)// 线路ID列表
    StateList = list()    #(vector<BYTE> StateList)// 对应状态列表, 0-被击杀,1-活着
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.LineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.LineCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.LineIDList.append(value)
        for i in range(self.LineCount):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.StateList.append(value)
        return _pos
    def Clear(self):
        self.BossID = 0
        self.LineCount = 0
        self.LineIDList = list()
        self.StateList = list()
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += 1 * self.LineCount
        length += 1 * self.LineCount
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.BossID)
        data = CommFunc.WriteBYTE(data, self.LineCount)
        for i in range(self.LineCount):
            data = CommFunc.WriteBYTE(data, self.LineIDList[i])
        for i in range(self.LineCount):
            data = CommFunc.WriteBYTE(data, self.StateList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                BossID:%d,
                                LineCount:%d,
                                LineIDList:%s,
                                StateList:%s
                                '''\
                                %(
                                self.BossID,
                                self.LineCount,
                                "...",
                                "..."
                                )
        return DumpString
class  tagGCBossShuntLineStateInfo(Structure):
    Head = tagHead()
    Count = 0    #(BYTE Count)
    BossLineStateInfo = list()    #(vector<tagGCBossShuntLineState> BossLineStateInfo)//boss分流线路信息列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x01
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temBossLineStateInfo = tagGCBossShuntLineState()
            _pos = temBossLineStateInfo.ReadData(_lpData, _pos)
            self.BossLineStateInfo.append(temBossLineStateInfo)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x01
        self.Count = 0
        self.BossLineStateInfo = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.Count):
            length += self.BossLineStateInfo[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.BossLineStateInfo[i].GetLength(), self.BossLineStateInfo[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                BossLineStateInfo:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCBossShuntLineStateInfo=tagGCBossShuntLineStateInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossShuntLineStateInfo.Head.Cmd,m_NAtagGCBossShuntLineStateInfo.Head.SubCmd))] = m_NAtagGCBossShuntLineStateInfo
#------------------------------------------------------
# A9 AC 交易所物品最新成交价通知 #tagGCBourseItemPrice
class  tagGCBourseItemPrice(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ItemID", c_int),    #物品ID
                  ("Price", c_int),    #最新成交单价
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA9
        self.SubCmd = 0xAC
        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 = 0xA9
        self.SubCmd = 0xAC
        self.ItemID = 0
        self.Price = 0
        return
    def GetLength(self):
        return sizeof(tagGCBourseItemPrice)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 AC 交易所物品最新成交价通知 //tagGCBourseItemPrice:
                                Cmd:%s,
                                SubCmd:%s,
                                ItemID:%d,
                                Price:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ItemID,
                                self.Price
                                )
        return DumpString
m_NAtagGCBourseItemPrice=tagGCBourseItemPrice()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseItemPrice.Cmd,m_NAtagGCBourseItemPrice.SubCmd))] = m_NAtagGCBourseItemPrice
#------------------------------------------------------
# A9 AB 交易所交易记录通知 #tagGCBourseRecordInfo
class  tagGCBourseRecord(Structure):
    Type = 0    #(BYTE Type)//类型 0-购买 1-卖出
    Timestamp = 0    #(DWORD Timestamp)//时间戳
    TradeTax = 0    #(DWORD TradeTax)//交易税
    TradeMoney = 0    #(DWORD TradeMoney)//收支
    ItemDataLen = 0    #(WORD ItemDataLen)
    ItemData = ""    #(String ItemData)//自定义数据
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Timestamp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TradeTax,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TradeMoney,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen)
        return _pos
    def Clear(self):
        self.Type = 0
        self.Timestamp = 0
        self.TradeTax = 0
        self.TradeMoney = 0
        self.ItemDataLen = 0
        self.ItemData = ""
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 4
        length += 4
        length += 4
        length += 2
        length += len(self.ItemData)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.Type)
        data = CommFunc.WriteDWORD(data, self.Timestamp)
        data = CommFunc.WriteDWORD(data, self.TradeTax)
        data = CommFunc.WriteDWORD(data, self.TradeMoney)
        data = CommFunc.WriteWORD(data, self.ItemDataLen)
        data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData)
        return data
    def OutputString(self):
        DumpString = '''
                                Type:%d,
                                Timestamp:%d,
                                TradeTax:%d,
                                TradeMoney:%d,
                                ItemDataLen:%d,
                                ItemData:%s
                                '''\
                                %(
                                self.Type,
                                self.Timestamp,
                                self.TradeTax,
                                self.TradeMoney,
                                self.ItemDataLen,
                                self.ItemData
                                )
        return DumpString
class  tagGCBourseRecordInfo(Structure):
    Head = tagHead()
    Count = 0    #(BYTE Count)//数量
    RecordList = list()    #(vector<tagGCBourseRecord> RecordList)//size = Count
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xAB
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temRecordList = tagGCBourseRecord()
            _pos = temRecordList.ReadData(_lpData, _pos)
            self.RecordList.append(temRecordList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xAB
        self.Count = 0
        self.RecordList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.Count):
            length += self.RecordList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.RecordList[i].GetLength(), self.RecordList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                RecordList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCBourseRecordInfo=tagGCBourseRecordInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBourseRecordInfo.Head.Cmd,m_NAtagGCBourseRecordInfo.Head.SubCmd))] = m_NAtagGCBourseRecordInfo
#------------------------------------------------------
#A9 AA 删除邮件通知 #tagGCDelCompensationResult
class  tagGCDelCompensationResult(Structure):
    Head = tagHead()
    GUID = ""    #(char GUID[40])
    Result = 0    #(BYTE Result)// 删除状态 0  不成功  1成功
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xAA
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
        self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xAA
        self.GUID = ""
        self.Result = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 40
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 40, self.GUID)
        data = CommFunc.WriteBYTE(data, self.Result)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                GUID:%s,
                                Result:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.GUID,
                                self.Result
                                )
        return DumpString
m_NAtagGCDelCompensationResult=tagGCDelCompensationResult()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDelCompensationResult.Head.Cmd,m_NAtagGCDelCompensationResult.Head.SubCmd))] = m_NAtagGCDelCompensationResult
#------------------------------------------------------
# A9 04 通知神兽副本NPC刷新时间 #tagGCDogzNPCRefreshTime
class  tagDogzTimeInfoObj(Structure):
    _pack_ = 1
    _fields_ = [
                  ("NPCID", c_int),    # npcid
                  ("RefreshSecond", c_int),    # 刷新倒计时, 秒
                  ]
    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.NPCID = 0
        self.RefreshSecond = 0
        return
    def GetLength(self):
        return sizeof(tagDogzTimeInfoObj)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 04 通知神兽副本NPC刷新时间 //tagGCDogzNPCRefreshTime:
                                NPCID:%d,
                                RefreshSecond:%d
                                '''\
                                %(
                                self.NPCID,
                                self.RefreshSecond
                                )
        return DumpString
class  tagGCDogzNPCRefreshTime(Structure):
    Head = tagHead()
    Cnt = 0    #(BYTE Cnt)//信息个数
    InfoList = list()    #(vector<tagDogzTimeInfoObj> InfoList)//信息列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x04
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Cnt):
            temInfoList = tagDogzTimeInfoObj()
            _pos = temInfoList.ReadData(_lpData, _pos)
            self.InfoList.append(temInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x04
        self.Cnt = 0
        self.InfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.Cnt):
            length += self.InfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Cnt)
        for i in range(self.Cnt):
            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Cnt:%d,
                                InfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Cnt,
                                "..."
                                )
        return DumpString
m_NAtagGCDogzNPCRefreshTime=tagGCDogzNPCRefreshTime()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCDogzNPCRefreshTime.Head.Cmd,m_NAtagGCDogzNPCRefreshTime.Head.SubCmd))] = m_NAtagGCDogzNPCRefreshTime
#------------------------------------------------------
# A9 A9 通知好友互赠精力信息 #tagGCFriendSendEnergyInfo
class  tagGCFriendSendEnergyInfo(Structure):
    Head = tagHead()
    DataSize = 0    #(DWORD DataSize)
    SendData = ""    #(String SendData)//赠送记录
    RecvSize = 0    #(DWORD RecvSize)
    RecvData = ""    #(String RecvData)//可接收记录
    HasRecvCnt = 0    #(DWORD HasRecvCnt)//已接收个数
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA9
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.DataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SendData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataSize)
        self.RecvSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RecvData,_pos = CommFunc.ReadString(_lpData, _pos,self.RecvSize)
        self.HasRecvCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA9
        self.DataSize = 0
        self.SendData = ""
        self.RecvSize = 0
        self.RecvData = ""
        self.HasRecvCnt = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += len(self.SendData)
        length += 4
        length += len(self.RecvData)
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.DataSize)
        data = CommFunc.WriteString(data, self.DataSize, self.SendData)
        data = CommFunc.WriteDWORD(data, self.RecvSize)
        data = CommFunc.WriteString(data, self.RecvSize, self.RecvData)
        data = CommFunc.WriteDWORD(data, self.HasRecvCnt)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                DataSize:%d,
                                SendData:%s,
                                RecvSize:%d,
                                RecvData:%s,
                                HasRecvCnt:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.DataSize,
                                self.SendData,
                                self.RecvSize,
                                self.RecvData,
                                self.HasRecvCnt
                                )
        return DumpString
m_NAtagGCFriendSendEnergyInfo=tagGCFriendSendEnergyInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFriendSendEnergyInfo.Head.Cmd,m_NAtagGCFriendSendEnergyInfo.Head.SubCmd))] = m_NAtagGCFriendSendEnergyInfo
#------------------------------------------------------
#A9 02 世界boss相关信息 #tagGCGameWorldBossInfo
class  tagBossInfoObj(Structure):
    BossID = 0    #(DWORD BossID)// bossID
    IsAlive = 0    #(BYTE IsAlive)// 是否存活
    RecordLen = 0    #(WORD RecordLen)// 长度
    KillRecord = ""    #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
    RefreshSecond = 0    #(DWORD RefreshSecond)// 刷新倒计时, 秒
    RefreshCD = 0    #(DWORD RefreshCD)// 刷新总CD时, 秒
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.BossID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.IsAlive,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RecordLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.KillRecord,_pos = CommFunc.ReadString(_lpData, _pos,self.RecordLen)
        self.RefreshSecond,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RefreshCD,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.BossID = 0
        self.IsAlive = 0
        self.RecordLen = 0
        self.KillRecord = ""
        self.RefreshSecond = 0
        self.RefreshCD = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += 2
        length += len(self.KillRecord)
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.BossID)
        data = CommFunc.WriteBYTE(data, self.IsAlive)
        data = CommFunc.WriteWORD(data, self.RecordLen)
        data = CommFunc.WriteString(data, self.RecordLen, self.KillRecord)
        data = CommFunc.WriteDWORD(data, self.RefreshSecond)
        data = CommFunc.WriteDWORD(data, self.RefreshCD)
        return data
    def OutputString(self):
        DumpString = '''
                                BossID:%d,
                                IsAlive:%d,
                                RecordLen:%d,
                                KillRecord:%s,
                                RefreshSecond:%d,
                                RefreshCD:%d
                                '''\
                                %(
                                self.BossID,
                                self.IsAlive,
                                self.RecordLen,
                                self.KillRecord,
                                self.RefreshSecond,
                                self.RefreshCD
                                )
        return DumpString
class  tagGCGameWorldBossInfo(Structure):
    Head = tagHead()
    BossCnt = 0    #(BYTE BossCnt)//boss信息个数
    BossInfoList = list()    #(vector<tagBossInfoObj> BossInfoList)//boss信息列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x02
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.BossCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.BossCnt):
            temBossInfoList = tagBossInfoObj()
            _pos = temBossInfoList.ReadData(_lpData, _pos)
            self.BossInfoList.append(temBossInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x02
        self.BossCnt = 0
        self.BossInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.BossCnt):
            length += self.BossInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.BossCnt)
        for i in range(self.BossCnt):
            data = CommFunc.WriteString(data, self.BossInfoList[i].GetLength(), self.BossInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                BossCnt:%d,
                                BossInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.BossCnt,
                                "..."
                                )
        return DumpString
m_NAtagGCGameWorldBossInfo=tagGCGameWorldBossInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGameWorldBossInfo.Head.Cmd,m_NAtagGCGameWorldBossInfo.Head.SubCmd))] = m_NAtagGCGameWorldBossInfo
#------------------------------------------------------
# A9 08 渡劫副本护法通知 #tagGCRealmFBHelpInfo
class  tagGCRealmFBHelpInfo(Structure):
    Head = tagHead()
    PlayerName = ""    #(char PlayerName[33])//玩家名字
    PlayerID = 0    #(DWORD PlayerID)//玩家ID
    RealmLV = 0    #(BYTE RealmLV)//玩家境界
    Job = 0    #(BYTE Job)//玩家职业
    JobRank = 0    #(BYTE JobRank)//玩家职业阶级
    AtkAdd = 0    #(BYTE AtkAdd)//获得加成
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x08
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.JobRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AtkAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x08
        self.PlayerName = ""
        self.PlayerID = 0
        self.RealmLV = 0
        self.Job = 0
        self.JobRank = 0
        self.AtkAdd = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 33
        length += 4
        length += 1
        length += 1
        length += 1
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 33, self.PlayerName)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.RealmLV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteBYTE(data, self.JobRank)
        data = CommFunc.WriteBYTE(data, self.AtkAdd)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerName:%s,
                                PlayerID:%d,
                                RealmLV:%d,
                                Job:%d,
                                JobRank:%d,
                                AtkAdd:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerName,
                                self.PlayerID,
                                self.RealmLV,
                                self.Job,
                                self.JobRank,
                                self.AtkAdd
                                )
        return DumpString
m_NAtagGCRealmFBHelpInfo=tagGCRealmFBHelpInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRealmFBHelpInfo.Head.Cmd,m_NAtagGCRealmFBHelpInfo.Head.SubCmd))] = m_NAtagGCRealmFBHelpInfo
#------------------------------------------------------
# A9 05 通知广播装备详细信息 #tagGCNotifyEquipDetailInfo
class  tagGCNotifyEquipClassEquip(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Star", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.Star = 0
        return
    def GetLength(self):
        return sizeof(tagGCNotifyEquipClassEquip)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 05 通知广播装备详细信息 //tagGCNotifyEquipDetailInfo:
                                ItemID:%d,
                                Star:%d
                                '''\
                                %(
                                self.ItemID,
                                self.Star
                                )
        return DumpString
class  tagGCNotifyEquipDetailInfo(Structure):
    Head = tagHead()
    ItemGUID = ""    #(char ItemGUID[40])
    ItemID = 0    #(DWORD ItemID)
    Star = 0    #(BYTE Star)//星级
    PlusLV = 0    #(WORD PlusLV)//强化等级
    EvolveLV = 0    #(BYTE EvolveLV)//进化等级
    WashLV = 0    #(BYTE WashLV)//洗练等级
    WashValueCount = 0    #(BYTE WashValueCount)
    WashValueList = list()    #(vector<DWORD> WashValueList)//洗练值
    StoneIDCount = 0    #(BYTE StoneIDCount)
    StoneIDList = list()    #(vector<DWORD> StoneIDList)//宝石
    ClassEquipCount = 0    #(BYTE ClassEquipCount)
    ClassEquipList = list()    #(vector<tagGCNotifyEquipClassEquip> ClassEquipList)//本境界穿戴的装备
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ItemGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Star,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlusLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.EvolveLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WashLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.WashValueCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.WashValueCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.WashValueList.append(value)
        self.StoneIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.StoneIDCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.StoneIDList.append(value)
        self.ClassEquipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.ClassEquipCount):
            temClassEquipList = tagGCNotifyEquipClassEquip()
            _pos = temClassEquipList.ReadData(_lpData, _pos)
            self.ClassEquipList.append(temClassEquipList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x05
        self.ItemGUID = ""
        self.ItemID = 0
        self.Star = 0
        self.PlusLV = 0
        self.EvolveLV = 0
        self.WashLV = 0
        self.WashValueCount = 0
        self.WashValueList = list()
        self.StoneIDCount = 0
        self.StoneIDList = list()
        self.ClassEquipCount = 0
        self.ClassEquipList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 40
        length += 4
        length += 1
        length += 2
        length += 1
        length += 1
        length += 1
        length += 4 * self.WashValueCount
        length += 1
        length += 4 * self.StoneIDCount
        length += 1
        for i in range(self.ClassEquipCount):
            length += self.ClassEquipList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteString(data, 40, self.ItemGUID)
        data = CommFunc.WriteDWORD(data, self.ItemID)
        data = CommFunc.WriteBYTE(data, self.Star)
        data = CommFunc.WriteWORD(data, self.PlusLV)
        data = CommFunc.WriteBYTE(data, self.EvolveLV)
        data = CommFunc.WriteBYTE(data, self.WashLV)
        data = CommFunc.WriteBYTE(data, self.WashValueCount)
        for i in range(self.WashValueCount):
            data = CommFunc.WriteDWORD(data, self.WashValueList[i])
        data = CommFunc.WriteBYTE(data, self.StoneIDCount)
        for i in range(self.StoneIDCount):
            data = CommFunc.WriteDWORD(data, self.StoneIDList[i])
        data = CommFunc.WriteBYTE(data, self.ClassEquipCount)
        for i in range(self.ClassEquipCount):
            data = CommFunc.WriteString(data, self.ClassEquipList[i].GetLength(), self.ClassEquipList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ItemGUID:%s,
                                ItemID:%d,
                                Star:%d,
                                PlusLV:%d,
                                EvolveLV:%d,
                                WashLV:%d,
                                WashValueCount:%d,
                                WashValueList:%s,
                                StoneIDCount:%d,
                                StoneIDList:%s,
                                ClassEquipCount:%d,
                                ClassEquipList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ItemGUID,
                                self.ItemID,
                                self.Star,
                                self.PlusLV,
                                self.EvolveLV,
                                self.WashLV,
                                self.WashValueCount,
                                "...",
                                self.StoneIDCount,
                                "...",
                                self.ClassEquipCount,
                                "..."
                                )
        return DumpString
m_NAtagGCNotifyEquipDetailInfo=tagGCNotifyEquipDetailInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCNotifyEquipDetailInfo.Head.Cmd,m_NAtagGCNotifyEquipDetailInfo.Head.SubCmd))] = m_NAtagGCNotifyEquipDetailInfo
#------------------------------------------------------
# A9 A2 排行榜信息#tagPYBillboardData
class  tagPYBillboardInfo(Structure):
@@ -16448,377 +14406,22 @@
#------------------------------------------------------
# A9 A3 喇叭聊天内容 #tagGCPYSpeakerContent
# A9 24 群英榜匹配玩家列表 #tagSCQunyingMatchList
class  tagGCPYSpeakerContent(Structure):
    Head = tagHead()
    AccIDLen = 0    #(BYTE AccIDLen)
    AccID = ""    #(String AccID)//size = AccIDLen
    PlayerID = 0    #(DWORD PlayerID)// 子服的玩家ID,该ID有值时为本服玩家
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)//size = NameLen
    SpeakerType = 0    #(BYTE SpeakerType)
    TextLen = 0    #(WORD TextLen)
    Text = ""    #(String Text)//size = TextLen
    ExtraValue = 0    #(DWORD ExtraValue)//附加值
    Extras = ""    #(char Extras[256])//附加值列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA3
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.AccIDLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.AccID,_pos = CommFunc.ReadString(_lpData, _pos,self.AccIDLen)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.SpeakerType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TextLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
        self.ExtraValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Extras,_pos = CommFunc.ReadString(_lpData, _pos,256)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA3
        self.AccIDLen = 0
        self.AccID = ""
        self.PlayerID = 0
        self.NameLen = 0
        self.Name = ""
        self.SpeakerType = 0
        self.TextLen = 0
        self.Text = ""
        self.ExtraValue = 0
        self.Extras = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += len(self.AccID)
        length += 4
        length += 1
        length += len(self.Name)
        length += 1
        length += 2
        length += len(self.Text)
        length += 4
        length += 256
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.AccIDLen)
        data = CommFunc.WriteString(data, self.AccIDLen, self.AccID)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteBYTE(data, self.SpeakerType)
        data = CommFunc.WriteWORD(data, self.TextLen)
        data = CommFunc.WriteString(data, self.TextLen, self.Text)
        data = CommFunc.WriteDWORD(data, self.ExtraValue)
        data = CommFunc.WriteString(data, 256, self.Extras)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                AccIDLen:%d,
                                AccID:%s,
                                PlayerID:%d,
                                NameLen:%d,
                                Name:%s,
                                SpeakerType:%d,
                                TextLen:%d,
                                Text:%s,
                                ExtraValue:%d,
                                Extras:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.AccIDLen,
                                self.AccID,
                                self.PlayerID,
                                self.NameLen,
                                self.Name,
                                self.SpeakerType,
                                self.TextLen,
                                self.Text,
                                self.ExtraValue,
                                self.Extras
                                )
        return DumpString
m_NAtagGCPYSpeakerContent=tagGCPYSpeakerContent()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPYSpeakerContent.Head.Cmd,m_NAtagGCPYSpeakerContent.Head.SubCmd))] = m_NAtagGCPYSpeakerContent
#------------------------------------------------------
#A9 A1 查询玩家补偿结果封包#tagGCQueryCompensationResult
class  tagGCCompensationItem(Structure):
    ItemID = 0    #(DWORD ItemID)//物品ID
    Count = 0    #(DWORD Count)//数量
    IsBind = 0    #(BYTE IsBind)//是否绑定
    UserDataLen = 0    #(DWORD UserDataLen)
    UserData = ""    #(String UserData)//自定义数据
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.IsBind,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.UserDataLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.UserData,_pos = CommFunc.ReadString(_lpData, _pos,self.UserDataLen)
        return _pos
    def Clear(self):
        self.ItemID = 0
        self.Count = 0
        self.IsBind = 0
        self.UserDataLen = 0
        self.UserData = ""
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 4
        length += 1
        length += 4
        length += len(self.UserData)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.ItemID)
        data = CommFunc.WriteDWORD(data, self.Count)
        data = CommFunc.WriteBYTE(data, self.IsBind)
        data = CommFunc.WriteDWORD(data, self.UserDataLen)
        data = CommFunc.WriteString(data, self.UserDataLen, self.UserData)
        return data
    def OutputString(self):
        DumpString = '''
                                ItemID:%d,
                                Count:%d,
                                IsBind:%d,
                                UserDataLen:%d,
                                UserData:%s
                                '''\
                                %(
                                self.ItemID,
                                self.Count,
                                self.IsBind,
                                self.UserDataLen,
                                self.UserData
                                )
        return DumpString
class  tagGCCompensationPack(Structure):
    GUID = ""    #(char GUID[40])//补偿标识
    CreateTime = ""    #(char CreateTime[30])//邮件接收时间
    TextLen = 0    #(DWORD TextLen)//文字内容长度
    Text = ""    #(String Text)//文字内容
    Count = 0    #(BYTE Count)//当前补偿物品数
    IsRead = 0    #(BYTE IsRead)//已读状态 0 未读取 1已读取
    Gold = 0    #(DWORD Gold)//仙玉
    GoldPaper = 0    #(DWORD GoldPaper)//绑定仙玉
    Silver = 0    #(DWORD Silver)//ͭǮ
    Items = list()    #(vector<tagGCCompensationItem> Items)//补偿物品信息
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.GUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
        self.CreateTime,_pos = CommFunc.ReadString(_lpData, _pos,30)
        self.TextLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Text,_pos = CommFunc.ReadString(_lpData, _pos,self.TextLen)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.IsRead,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Gold,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GoldPaper,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Silver,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        for i in range(self.Count):
            temItems = tagGCCompensationItem()
            _pos = temItems.ReadData(_lpData, _pos)
            self.Items.append(temItems)
        return _pos
    def Clear(self):
        self.GUID = ""
        self.CreateTime = ""
        self.TextLen = 0
        self.Text = ""
        self.Count = 0
        self.IsRead = 0
        self.Gold = 0
        self.GoldPaper = 0
        self.Silver = 0
        self.Items = list()
        return
    def GetLength(self):
        length = 0
        length += 40
        length += 30
        length += 4
        length += len(self.Text)
        length += 1
        length += 1
        length += 4
        length += 4
        length += 4
        for i in range(self.Count):
            length += self.Items[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, 40, self.GUID)
        data = CommFunc.WriteString(data, 30, self.CreateTime)
        data = CommFunc.WriteDWORD(data, self.TextLen)
        data = CommFunc.WriteString(data, self.TextLen, self.Text)
        data = CommFunc.WriteBYTE(data, self.Count)
        data = CommFunc.WriteBYTE(data, self.IsRead)
        data = CommFunc.WriteDWORD(data, self.Gold)
        data = CommFunc.WriteDWORD(data, self.GoldPaper)
        data = CommFunc.WriteDWORD(data, self.Silver)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                GUID:%s,
                                CreateTime:%s,
                                TextLen:%d,
                                Text:%s,
                                Count:%d,
                                IsRead:%d,
                                Gold:%d,
                                GoldPaper:%d,
                                Silver:%d,
                                Items:%s
                                '''\
                                %(
                                self.GUID,
                                self.CreateTime,
                                self.TextLen,
                                self.Text,
                                self.Count,
                                self.IsRead,
                                self.Gold,
                                self.GoldPaper,
                                self.Silver,
                                "..."
                                )
        return DumpString
class  tagGCQueryCompensationResult(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)//可领取补偿数
    PackList = list()    #(vector<tagGCCompensationPack> PackList)//补偿物品信息
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA1
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temPackList = tagGCCompensationPack()
            _pos = temPackList.ReadData(_lpData, _pos)
            self.PackList.append(temPackList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA1
        self.Count = 0
        self.PackList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.Count):
            length += self.PackList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.PackList[i].GetLength(), self.PackList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                PackList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCQueryCompensationResult=tagGCQueryCompensationResult()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCQueryCompensationResult.Head.Cmd,m_NAtagGCQueryCompensationResult.Head.SubCmd))] = m_NAtagGCQueryCompensationResult
#------------------------------------------------------
# A9 A8 通知可添加的好友信息 #tagGCRecommendFriendsInfo
class  tagRecommendFriendsData(Structure):
    ID = 0    #(DWORD ID)
    Name = ""    #(char Name[33])
    LV = 0    #(DWORD LV)//等级
    Job = 0    #(BYTE Job)
    RealmLV = 0    #(WORD RealmLV)//境界
class  tagSCQunyingMatchInfo(Structure):
    Rank = 0    #(WORD Rank)//排名,从1开始
    PlayerID = 0    #(DWORD PlayerID)//目标玩家ID
    PlayerName = ""    #(char PlayerName[33])
    LV = 0    #(WORD LV)// 玩家等级
    RealmLV = 0    #(WORD RealmLV)//境界,机器人读境界表取等级对应境界
    FightPower = 0    #(DWORD FightPower)//战力求余亿部分
    FightPowerEx = 0    #(DWORD FightPowerEx)//战力整除亿部分
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    TitleID = 0    #(DWORD TitleID)//称号
    ModelMark = 0    #(DWORD ModelMark)//变形模型mark
    EquipShowSwitch = 0    #(DWORD EquipShowSwitch)//其他外观信息
    ServerID = 0    #(DWORD ServerID)
    data = None
    def __init__(self):
@@ -16827,32 +14430,50 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.LV,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Rank,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TitleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ModelMark,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.ID = 0
        self.Name = ""
        self.Rank = 0
        self.PlayerID = 0
        self.PlayerName = ""
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.FightPower = 0
        self.FightPowerEx = 0
        self.Face = 0
        self.FacePic = 0
        self.TitleID = 0
        self.ModelMark = 0
        self.EquipShowSwitch = 0
        self.ServerID = 0
        return
    def GetLength(self):
        length = 0
        length += 2
        length += 4
        length += 33
        length += 4
        length += 1
        length += 2
        length += 2
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
@@ -16860,101 +14481,183 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.ID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteDWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.Rank)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.PlayerName)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.FightPower)
        data = CommFunc.WriteDWORD(data, self.FightPowerEx)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.TitleID)
        data = CommFunc.WriteDWORD(data, self.ModelMark)
        data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        return data
    def OutputString(self):
        DumpString = '''
                                ID:%d,
                                Name:%s,
                                Rank:%d,
                                PlayerID:%d,
                                PlayerName:%s,
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                FightPower:%d,
                                FightPowerEx:%d,
                                Face:%d,
                                FacePic:%d
                                FacePic:%d,
                                TitleID:%d,
                                ModelMark:%d,
                                EquipShowSwitch:%d,
                                ServerID:%d
                                '''\
                                %(
                                self.ID,
                                self.Name,
                                self.Rank,
                                self.PlayerID,
                                self.PlayerName,
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.FightPower,
                                self.FightPowerEx,
                                self.Face,
                                self.FacePic
                                self.FacePic,
                                self.TitleID,
                                self.ModelMark,
                                self.EquipShowSwitch,
                                self.ServerID
                                )
        return DumpString
class  tagGCRecommendFriendsInfo(Structure):
class  tagSCQunyingMatchList(Structure):
    Head = tagHead()
    Cnt = 0    #(BYTE Cnt)//信息数
    FriendsList = list()    #(vector<tagRecommendFriendsData> FriendsList)//成员信息
    MatchCount = 0    #(BYTE MatchCount)
    MatchList = list()    #(vector<tagSCQunyingMatchInfo> MatchList)// 匹配列表,从高分到低分
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA8
        self.Head.SubCmd = 0x24
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Cnt):
            temFriendsList = tagRecommendFriendsData()
            _pos = temFriendsList.ReadData(_lpData, _pos)
            self.FriendsList.append(temFriendsList)
        self.MatchCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.MatchCount):
            temMatchList = tagSCQunyingMatchInfo()
            _pos = temMatchList.ReadData(_lpData, _pos)
            self.MatchList.append(temMatchList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0xA8
        self.Cnt = 0
        self.FriendsList = list()
        self.Head.SubCmd = 0x24
        self.MatchCount = 0
        self.MatchList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.Cnt):
            length += self.FriendsList[i].GetLength()
        for i in range(self.MatchCount):
            length += self.MatchList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Cnt)
        for i in range(self.Cnt):
            data = CommFunc.WriteString(data, self.FriendsList[i].GetLength(), self.FriendsList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.MatchCount)
        for i in range(self.MatchCount):
            data = CommFunc.WriteString(data, self.MatchList[i].GetLength(), self.MatchList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Cnt:%d,
                                FriendsList:%s
                                MatchCount:%d,
                                MatchList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Cnt,
                                self.MatchCount,
                                "..."
                                )
        return DumpString
m_NAtagGCRecommendFriendsInfo=tagGCRecommendFriendsInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRecommendFriendsInfo.Head.Cmd,m_NAtagGCRecommendFriendsInfo.Head.SubCmd))] = m_NAtagGCRecommendFriendsInfo
m_NAtagSCQunyingMatchList=tagSCQunyingMatchList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCQunyingMatchList.Head.Cmd,m_NAtagSCQunyingMatchList.Head.SubCmd))] = m_NAtagSCQunyingMatchList
#------------------------------------------------------
# A9 25 群英榜玩家信息 #tagSCQunyingPlayerInfo
class  tagSCQunyingPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("RefreshCnt", c_int),    # 本周已刷新匹配次数
                  ("LastRecoverTime", c_int),    # 上次免费恢复挑战令时间戳,为0时可不用倒计时
                  ("RankHighest", c_ushort),    # 历史最高名次,第1名为最高
                  ("RankSuccAward", c_int),    # 历史最高名次成就领奖记录,按奖励记录索引位运算记录是否已领取
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xA9
        self.SubCmd = 0x25
        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 = 0xA9
        self.SubCmd = 0x25
        self.RefreshCnt = 0
        self.LastRecoverTime = 0
        self.RankHighest = 0
        self.RankSuccAward = 0
        return
    def GetLength(self):
        return sizeof(tagSCQunyingPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 25 群英榜玩家信息 //tagSCQunyingPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                RefreshCnt:%d,
                                LastRecoverTime:%d,
                                RankHighest:%d,
                                RankSuccAward:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.RefreshCnt,
                                self.LastRecoverTime,
                                self.RankHighest,
                                self.RankSuccAward
                                )
        return DumpString
m_NAtagSCQunyingPlayerInfo=tagSCQunyingPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCQunyingPlayerInfo.Cmd,m_NAtagSCQunyingPlayerInfo.SubCmd))] = m_NAtagSCQunyingPlayerInfo
#------------------------------------------------------
@@ -17012,492 +14715,6 @@
m_NAtagSCRenameResult=tagSCRenameResult()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCRenameResult.Head.Cmd,m_NAtagSCRenameResult.Head.SubCmd))] = m_NAtagSCRenameResult
#------------------------------------------------------
# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo
class  tagGCStoreServerBuyCnt(Structure):
    _pack_ = 1
    _fields_ = [
                  ("GoodsID", c_int),    #商品标识
                  ("BuyCnt", c_int),    #购买次数
                  ]
    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.GoodsID = 0
        self.BuyCnt = 0
        return
    def GetLength(self):
        return sizeof(tagGCStoreServerBuyCnt)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// A9 06 商城全服购买次数通知 //tagGCStoreServerBuyCntInfo:
                                GoodsID:%d,
                                BuyCnt:%d
                                '''\
                                %(
                                self.GoodsID,
                                self.BuyCnt
                                )
        return DumpString
class  tagGCStoreServerBuyCntInfo(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)//数量
    InfoList = list()    #(vector<tagGCStoreServerBuyCnt> InfoList)//次数信息
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x06
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temInfoList = tagGCStoreServerBuyCnt()
            _pos = temInfoList.ReadData(_lpData, _pos)
            self.InfoList.append(temInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x06
        self.Count = 0
        self.InfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.Count):
            length += self.InfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                InfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
#------------------------------------------------------
# A9 27 仙宫新晋玩家信息 #tagGCXiangongNewPlayerInfo
class  tagGCXiangongNewPlayer(Structure):
    AddTime = 0    #(DWORD AddTime)// 新晋时间戳
    ServerID = 0    #(DWORD ServerID)
    PlayerID = 0    #(DWORD PlayerID)
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)// 玩家名,size = NameLen
    LV = 0    #(WORD LV)// 玩家等级
    Job = 0    #(BYTE Job)// 玩家职业
    RealmLV = 0    #(WORD RealmLV)// 玩家境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    EquipShowSwitch = 0    #(DWORD EquipShowSwitch)
    EquipShowIDCount = 0    #(BYTE EquipShowIDCount)
    EquipShowID = list()    #(vector<DWORD> EquipShowID)
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.EquipShowIDCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.EquipShowID.append(value)
        return _pos
    def Clear(self):
        self.AddTime = 0
        self.ServerID = 0
        self.PlayerID = 0
        self.NameLen = 0
        self.Name = ""
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        self.EquipShowSwitch = 0
        self.EquipShowIDCount = 0
        self.EquipShowID = list()
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 4
        length += 4
        length += 1
        length += len(self.Name)
        length += 2
        length += 1
        length += 2
        length += 4
        length += 4
        length += 4
        length += 1
        length += 4 * self.EquipShowIDCount
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.AddTime)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
        data = CommFunc.WriteBYTE(data, self.EquipShowIDCount)
        for i in range(self.EquipShowIDCount):
            data = CommFunc.WriteDWORD(data, self.EquipShowID[i])
        return data
    def OutputString(self):
        DumpString = '''
                                AddTime:%d,
                                ServerID:%d,
                                PlayerID:%d,
                                NameLen:%d,
                                Name:%s,
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d,
                                EquipShowSwitch:%d,
                                EquipShowIDCount:%d,
                                EquipShowID:%s
                                '''\
                                %(
                                self.AddTime,
                                self.ServerID,
                                self.PlayerID,
                                self.NameLen,
                                self.Name,
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic,
                                self.EquipShowSwitch,
                                self.EquipShowIDCount,
                                "..."
                                )
        return DumpString
class  tagGCXiangongNewPlayerInfo(Structure):
    Head = tagHead()
    XiangongID = 0    #(WORD XiangongID)// 仙宫ID
    NewPlayerCount = 0    #(BYTE NewPlayerCount)
    NewPlayerList = list()    #(vector<tagGCXiangongNewPlayer> NewPlayerList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x27
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.NewPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.NewPlayerCount):
            temNewPlayerList = tagGCXiangongNewPlayer()
            _pos = temNewPlayerList.ReadData(_lpData, _pos)
            self.NewPlayerList.append(temNewPlayerList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x27
        self.XiangongID = 0
        self.NewPlayerCount = 0
        self.NewPlayerList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 1
        for i in range(self.NewPlayerCount):
            length += self.NewPlayerList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.XiangongID)
        data = CommFunc.WriteBYTE(data, self.NewPlayerCount)
        for i in range(self.NewPlayerCount):
            data = CommFunc.WriteString(data, self.NewPlayerList[i].GetLength(), self.NewPlayerList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                XiangongID:%d,
                                NewPlayerCount:%d,
                                NewPlayerList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.XiangongID,
                                self.NewPlayerCount,
                                "..."
                                )
        return DumpString
m_NAtagGCXiangongNewPlayerInfo=tagGCXiangongNewPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongNewPlayerInfo.Head.Cmd,m_NAtagGCXiangongNewPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongNewPlayerInfo
#------------------------------------------------------
# A9 28 仙宫仙名录玩家信息 #tagGCXiangongRecPlayerInfo
class  tagGCXiangongRecPlayer(Structure):
    AddTime = 0    #(DWORD AddTime)// 新晋时间戳
    ServerID = 0    #(DWORD ServerID)
    PlayerID = 0    #(DWORD PlayerID)
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)// 玩家名,size = NameLen
    LV = 0    #(WORD LV)// 玩家等级
    Job = 0    #(BYTE Job)// 玩家职业
    RealmLV = 0    #(WORD RealmLV)// 玩家境界
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.AddTime = 0
        self.ServerID = 0
        self.PlayerID = 0
        self.NameLen = 0
        self.Name = ""
        self.LV = 0
        self.Job = 0
        self.RealmLV = 0
        self.Face = 0
        self.FacePic = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 4
        length += 4
        length += 1
        length += len(self.Name)
        length += 2
        length += 1
        length += 2
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.AddTime)
        data = CommFunc.WriteDWORD(data, self.ServerID)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteWORD(data, self.LV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteWORD(data, self.RealmLV)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
    def OutputString(self):
        DumpString = '''
                                AddTime:%d,
                                ServerID:%d,
                                PlayerID:%d,
                                NameLen:%d,
                                Name:%s,
                                LV:%d,
                                Job:%d,
                                RealmLV:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.AddTime,
                                self.ServerID,
                                self.PlayerID,
                                self.NameLen,
                                self.Name,
                                self.LV,
                                self.Job,
                                self.RealmLV,
                                self.Face,
                                self.FacePic
                                )
        return DumpString
class  tagGCXiangongRecPlayerInfo(Structure):
    Head = tagHead()
    XiangongID = 0    #(WORD XiangongID)// 仙宫ID
    RecPlayerCount = 0    #(BYTE RecPlayerCount)
    RecPlayerList = list()    #(vector<tagGCXiangongRecPlayer> RecPlayerList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x28
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RecPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.RecPlayerCount):
            temRecPlayerList = tagGCXiangongRecPlayer()
            _pos = temRecPlayerList.ReadData(_lpData, _pos)
            self.RecPlayerList.append(temRecPlayerList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA9
        self.Head.SubCmd = 0x28
        self.XiangongID = 0
        self.RecPlayerCount = 0
        self.RecPlayerList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 1
        for i in range(self.RecPlayerCount):
            length += self.RecPlayerList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.XiangongID)
        data = CommFunc.WriteBYTE(data, self.RecPlayerCount)
        for i in range(self.RecPlayerCount):
            data = CommFunc.WriteString(data, self.RecPlayerList[i].GetLength(), self.RecPlayerList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                XiangongID:%d,
                                RecPlayerCount:%d,
                                RecPlayerList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.XiangongID,
                                self.RecPlayerCount,
                                "..."
                                )
        return DumpString
m_NAtagGCXiangongRecPlayerInfo=tagGCXiangongRecPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongRecPlayerInfo.Head.Cmd,m_NAtagGCXiangongRecPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongRecPlayerInfo
#------------------------------------------------------
@@ -18772,259 +15989,108 @@
#------------------------------------------------------
# AA 69 登录活动信息新 #tagMCActLoginNew
# AA 21 武将登场活动信息 #tagSCActHeroAppearInfo
class  tagMCActLoginNewItem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("ItemCount", c_ushort),
                  ("IsBind", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.ItemCount = 0
        self.IsBind = 0
        return
    def GetLength(self):
        return sizeof(tagMCActLoginNewItem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 69 登录活动信息新 //tagMCActLoginNew:
                                ItemID:%d,
                                ItemCount:%d,
                                IsBind:%d
                                '''\
                                %(
                                self.ItemID,
                                self.ItemCount,
                                self.IsBind
                                )
        return DumpString
class  tagMCActLoginNewDay(Structure):
    DayNum = 0    #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
    Count = 0    #(BYTE Count)// 奖励物品数
    AwardItemList = list()    #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
    CountEx = 0    #(BYTE CountEx)// 额外奖励物品数
    AwardItemListEx = list()    #(vector<tagMCActLoginNewItem> AwardItemListEx)//  额外奖励物品列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.DayNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            temAwardItemList = tagMCActLoginNewItem()
            _pos = temAwardItemList.ReadData(_lpData, _pos)
            self.AwardItemList.append(temAwardItemList)
        self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.CountEx):
            temAwardItemListEx = tagMCActLoginNewItem()
            _pos = temAwardItemListEx.ReadData(_lpData, _pos)
            self.AwardItemListEx.append(temAwardItemListEx)
        return _pos
    def Clear(self):
        self.DayNum = 0
        self.Count = 0
        self.AwardItemList = list()
        self.CountEx = 0
        self.AwardItemListEx = list()
        return
    def GetLength(self):
        length = 0
        length += 1
        length += 1
        for i in range(self.Count):
            length += self.AwardItemList[i].GetLength()
        length += 1
        for i in range(self.CountEx):
            length += self.AwardItemListEx[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.DayNum)
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.CountEx)
        for i in range(self.CountEx):
            data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                DayNum:%d,
                                Count:%d,
                                AwardItemList:%s,
                                CountEx:%d,
                                AwardItemListEx:%s
                                '''\
                                %(
                                self.DayNum,
                                self.Count,
                                "...",
                                self.CountEx,
                                "..."
                                )
        return DumpString
class  tagMCActLoginNew(Structure):
class  tagSCActHeroAppearInfo(Structure):
    Head = tagHead()
    ActType = 0    #(BYTE ActType)// 活动类型,用于关联活动相关模块用,如签到、任务等
    ActNum = 0    #(BYTE ActNum)// 活动编号
    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
    LimitLV = 0    #(WORD LimitLV)// 限制等级
    RepSignMoneyType = 0    #(BYTE RepSignMoneyType)// 补签消耗货币类型
    RepSignMoneyValue = 0    #(DWORD RepSignMoneyValue)// 补签消耗货币值
    AwardExCTGID = 0    #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
    DayCount = 0    #(BYTE DayCount)
    AwardDayList = list()    #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
    CfgID = 0    #(WORD CfgID)// 活动时间表配置ID
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x69
        self.Head.SubCmd = 0x21
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.ActType,_pos = CommFunc.ReadBYTE(_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.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DayCount):
            temAwardDayList = tagMCActLoginNewDay()
            _pos = temAwardDayList.ReadData(_lpData, _pos)
            self.AwardDayList.append(temAwardDayList)
        self.CfgID,_pos = CommFunc.ReadWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x69
        self.Head.SubCmd = 0x21
        self.ActType = 0
        self.ActNum = 0
        self.StartDate = ""
        self.EndtDate = ""
        self.LimitLV = 0
        self.RepSignMoneyType = 0
        self.RepSignMoneyValue = 0
        self.AwardExCTGID = 0
        self.DayCount = 0
        self.AwardDayList = list()
        self.CfgID = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        length += 10
        length += 10
        length += 2
        length += 1
        length += 4
        length += 2
        length += 1
        for i in range(self.DayCount):
            length += self.AwardDayList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.ActType)
        data = CommFunc.WriteBYTE(data, self.ActNum)
        data = CommFunc.WriteString(data, 10, self.StartDate)
        data = CommFunc.WriteString(data, 10, self.EndtDate)
        data = CommFunc.WriteWORD(data, self.LimitLV)
        data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
        data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
        data = CommFunc.WriteWORD(data, self.AwardExCTGID)
        data = CommFunc.WriteBYTE(data, self.DayCount)
        for i in range(self.DayCount):
            data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
        data = CommFunc.WriteWORD(data, self.CfgID)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                ActType:%d,
                                ActNum:%d,
                                StartDate:%s,
                                EndtDate:%s,
                                LimitLV:%d,
                                RepSignMoneyType:%d,
                                RepSignMoneyValue:%d,
                                AwardExCTGID:%d,
                                DayCount:%d,
                                AwardDayList:%s
                                CfgID:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.ActType,
                                self.ActNum,
                                self.StartDate,
                                self.EndtDate,
                                self.LimitLV,
                                self.RepSignMoneyType,
                                self.RepSignMoneyValue,
                                self.AwardExCTGID,
                                self.DayCount,
                                "..."
                                self.CfgID
                                )
        return DumpString
m_NAtagMCActLoginNew=tagMCActLoginNew()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginNew.Head.Cmd,m_NAtagMCActLoginNew.Head.SubCmd))] = m_NAtagMCActLoginNew
m_NAtagSCActHeroAppearInfo=tagSCActHeroAppearInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActHeroAppearInfo.Head.Cmd,m_NAtagSCActHeroAppearInfo.Head.SubCmd))] = m_NAtagSCActHeroAppearInfo
#------------------------------------------------------
# AA 70 登录活动玩家信息新 #tagMCActLoginPlayerInfoNew
# AA 22 武将登场活动玩家信息 #tagSCActHeroAppearPlayerInfo
class  tagMCActLoginPlayerInfoNew(Structure):
class  tagSCActHeroAppearPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActNum", c_ubyte),    # 活动编号
                  ("LoginAward", c_int),    # 普通奖励领取记录,按天对应二进制位记录是否已领取
                  ("LoginAwardEx", c_int),    # 额外奖励领取记录,按天对应二进制位记录是否已领取
                  ("StarHeroIndex", c_ubyte),    # 升星计划选择的武将ID索引
                  ("StarFreeAward", c_int),    # 升星计划免费奖励记录,按奖励记录索引二进制位运算记录是否已领取
                  ("CallHeroIndex", c_ubyte),    # 招募选择的武将ID索引
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        self.SubCmd = 0x70
        self.SubCmd = 0x22
        return
    def ReadData(self, stringData, _pos=0, _len=0):
@@ -19034,38 +16100,41 @@
    def Clear(self):
        self.Cmd = 0xAA
        self.SubCmd = 0x70
        self.SubCmd = 0x22
        self.ActNum = 0
        self.LoginAward = 0
        self.LoginAwardEx = 0
        self.StarHeroIndex = 0
        self.StarFreeAward = 0
        self.CallHeroIndex = 0
        return
    def GetLength(self):
        return sizeof(tagMCActLoginPlayerInfoNew)
        return sizeof(tagSCActHeroAppearPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 70 登录活动玩家信息新 //tagMCActLoginPlayerInfoNew:
        DumpString = '''// AA 22 武将登场活动玩家信息 //tagSCActHeroAppearPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ActNum:%d,
                                LoginAward:%d,
                                LoginAwardEx:%d
                                StarHeroIndex:%d,
                                StarFreeAward:%d,
                                CallHeroIndex:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActNum,
                                self.LoginAward,
                                self.LoginAwardEx
                                self.StarHeroIndex,
                                self.StarFreeAward,
                                self.CallHeroIndex
                                )
        return DumpString
m_NAtagMCActLoginPlayerInfoNew=tagMCActLoginPlayerInfoNew()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActLoginPlayerInfoNew.Cmd,m_NAtagMCActLoginPlayerInfoNew.SubCmd))] = m_NAtagMCActLoginPlayerInfoNew
m_NAtagSCActHeroAppearPlayerInfo=tagSCActHeroAppearPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActHeroAppearPlayerInfo.Cmd,m_NAtagSCActHeroAppearPlayerInfo.SubCmd))] = m_NAtagSCActHeroAppearPlayerInfo
#------------------------------------------------------
@@ -20048,6 +17117,66 @@
m_NAtagMCActRecharegeCouponPlayerInfo=tagMCActRecharegeCouponPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRecharegeCouponPlayerInfo.Cmd,m_NAtagMCActRecharegeCouponPlayerInfo.SubCmd))] = m_NAtagMCActRecharegeCouponPlayerInfo
#------------------------------------------------------
# AA 20 活动签到奖励信息 #tagSCActSignPlayerInfo
class  tagSCActSignPlayerInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ActType", c_ubyte),    # 活动类型
                  ("ActNum", c_ubyte),    # 活动编号
                  ("SignAward", c_int),    # 奖励领取记录,按天对应二进制位记录是否已领取
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAA
        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 = 0xAA
        self.SubCmd = 0x20
        self.ActType = 0
        self.ActNum = 0
        self.SignAward = 0
        return
    def GetLength(self):
        return sizeof(tagSCActSignPlayerInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 20 活动签到奖励信息 //tagSCActSignPlayerInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ActType:%d,
                                ActNum:%d,
                                SignAward:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ActType,
                                self.ActNum,
                                self.SignAward
                                )
        return DumpString
m_NAtagSCActSignPlayerInfo=tagSCActSignPlayerInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCActSignPlayerInfo.Cmd,m_NAtagSCActSignPlayerInfo.SubCmd))] = m_NAtagSCActSignPlayerInfo
#------------------------------------------------------
@@ -23891,118 +21020,6 @@
#------------------------------------------------------
# B1 11 功能系统特权信息 #tagMCFuncSysPrivilegeInfoList
class  tagMCFuncSysPrivilegeInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("FuncSysID", c_ubyte),    # 功能系统ID
                  ("ActivateTime", c_int),    # 激活时间戳
                  ("AwardState", c_int),    # 领奖状态,按天对应二进制位计算是否领奖
                  ]
    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.FuncSysID = 0
        self.ActivateTime = 0
        self.AwardState = 0
        return
    def GetLength(self):
        return sizeof(tagMCFuncSysPrivilegeInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B1 11 功能系统特权信息 //tagMCFuncSysPrivilegeInfoList:
                                FuncSysID:%d,
                                ActivateTime:%d,
                                AwardState:%d
                                '''\
                                %(
                                self.FuncSysID,
                                self.ActivateTime,
                                self.AwardState
                                )
        return DumpString
class  tagMCFuncSysPrivilegeInfoList(Structure):
    Head = tagHead()
    PrivilegeCount = 0    #(BYTE PrivilegeCount)// 特权个数
    PrivilegeInfoList = list()    #(vector<tagMCFuncSysPrivilegeInfo> PrivilegeInfoList)// 特权信息列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x11
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PrivilegeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PrivilegeCount):
            temPrivilegeInfoList = tagMCFuncSysPrivilegeInfo()
            _pos = temPrivilegeInfoList.ReadData(_lpData, _pos)
            self.PrivilegeInfoList.append(temPrivilegeInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x11
        self.PrivilegeCount = 0
        self.PrivilegeInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.PrivilegeCount):
            length += self.PrivilegeInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.PrivilegeCount)
        for i in range(self.PrivilegeCount):
            data = CommFunc.WriteString(data, self.PrivilegeInfoList[i].GetLength(), self.PrivilegeInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PrivilegeCount:%d,
                                PrivilegeInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PrivilegeCount,
                                "..."
                                )
        return DumpString
m_NAtagMCFuncSysPrivilegeInfoList=tagMCFuncSysPrivilegeInfoList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFuncSysPrivilegeInfoList.Head.Cmd,m_NAtagMCFuncSysPrivilegeInfoList.Head.SubCmd))] = m_NAtagMCFuncSysPrivilegeInfoList
#------------------------------------------------------
# B1 31 宿缘信息 #tagSCHeroFatesInfo
class  tagSCHeroFates(Structure):
@@ -24117,16 +21134,12 @@
#------------------------------------------------------
# B1 22 武将信息 #tagSCHeroInfo
class  tagSCHero(Structure):
class  tagSCHeroSkin(Structure):
    _pack_ = 1
    _fields_ = [
                  ("HeroID", c_int),    # 武将ID
                  ("SkinState", c_int),    # 武将皮肤已解锁状态信息,按皮肤所在索引二进制位运算判断是否解锁,0索引位默认皮肤,不用验证
                  ("BookInitState", c_ubyte),    # 图鉴激活状态:0-未激活;1-可激活;2-已激活
                  ("BookStarLV", c_ushort),    # 图鉴星级等级
                  ("BookBreakLV", c_ushort),    # 图鉴突破等级
                  ("BookStarLVH", c_ushort),    # 图鉴星级历史最高等级
                  ("BookBreakLVH", c_ushort),    # 图鉴突破历史最高等级
                  ("SkinID", c_int),    #皮肤ID,只通知非默认皮肤
                  ("State", c_ubyte),    #是否已激活
                  ("Star", c_ubyte),    #星级
                  ]
    def __init__(self):
@@ -24139,39 +21152,91 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.HeroID = 0
        self.SkinState = 0
        self.BookInitState = 0
        self.BookStarLV = 0
        self.BookBreakLV = 0
        self.BookStarLVH = 0
        self.BookBreakLVH = 0
        self.SkinID = 0
        self.State = 0
        self.Star = 0
        return
    def GetLength(self):
        return sizeof(tagSCHero)
        return sizeof(tagSCHeroSkin)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B1 22 武将信息 //tagSCHeroInfo:
                                SkinID:%d,
                                State:%d,
                                Star:%d
                                '''\
                                %(
                                self.SkinID,
                                self.State,
                                self.Star
                                )
        return DumpString
class  tagSCHero(Structure):
    HeroID = 0    #(DWORD HeroID)// 武将ID
    BookInitState = 0    #(BYTE BookInitState)// 图鉴激活状态:0-未激活;1-可激活;2-已激活
    SkinCnt = 0    #(BYTE SkinCnt)
    SkinList = list()    #(vector<tagSCHeroSkin> SkinList)// 非默认皮肤信息列表
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.HeroID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BookInitState,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.SkinCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.SkinCnt):
            temSkinList = tagSCHeroSkin()
            _pos = temSkinList.ReadData(_lpData, _pos)
            self.SkinList.append(temSkinList)
        return _pos
    def Clear(self):
        self.HeroID = 0
        self.BookInitState = 0
        self.SkinCnt = 0
        self.SkinList = list()
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += 1
        for i in range(self.SkinCnt):
            length += self.SkinList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.HeroID)
        data = CommFunc.WriteBYTE(data, self.BookInitState)
        data = CommFunc.WriteBYTE(data, self.SkinCnt)
        for i in range(self.SkinCnt):
            data = CommFunc.WriteString(data, self.SkinList[i].GetLength(), self.SkinList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                HeroID:%d,
                                SkinState:%d,
                                BookInitState:%d,
                                BookStarLV:%d,
                                BookBreakLV:%d,
                                BookStarLVH:%d,
                                BookBreakLVH:%d
                                SkinCnt:%d,
                                SkinList:%s
                                '''\
                                %(
                                self.HeroID,
                                self.SkinState,
                                self.BookInitState,
                                self.BookStarLV,
                                self.BookBreakLV,
                                self.BookStarLVH,
                                self.BookBreakLVH
                                self.SkinCnt,
                                "..."
                                )
        return DumpString
@@ -25176,54 +22241,6 @@
#------------------------------------------------------
#B1 08 开始印记流失时间 #tagMCYinjiStartTime
class  tagMCYinjiStartTime(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB1
        self.SubCmd = 0x08
        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 = 0xB1
        self.SubCmd = 0x08
        return
    def GetLength(self):
        return sizeof(tagMCYinjiStartTime)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B1 08 开始印记流失时间 //tagMCYinjiStartTime:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagMCYinjiStartTime=tagMCYinjiStartTime()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCYinjiStartTime.Cmd,m_NAtagMCYinjiStartTime.SubCmd))] = m_NAtagMCYinjiStartTime
#------------------------------------------------------
# B1 10 当前任务信息 #tagMCTaskInfo
class  tagMCTask(Structure):
@@ -25337,80 +22354,6 @@
m_NAtagMCTaskInfo=tagMCTaskInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Head.Cmd,m_NAtagMCTaskInfo.Head.SubCmd))] = m_NAtagMCTaskInfo
#------------------------------------------------------
# B1 15 天道树信息 #tagMCTiandaoTreeInfo
class  tagMCTiandaoTreeInfo(Structure):
    Head = tagHead()
    Qiyun = 0    #(DWORD Qiyun)// 当前气运值
    AwardCount = 0    #(BYTE AwardCount)// 天道果领取记录值个数
    AwardStateList = list()    #(vector<DWORD> AwardStateList)// 天道果领取记录值列表,按奖励索引位二进制记录是否已领取,一个值可存31位,如值1存0~30,值2存31~61,...
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x15
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Qiyun,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardCount):
            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
            self.AwardStateList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x15
        self.Qiyun = 0
        self.AwardCount = 0
        self.AwardStateList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += 4 * self.AwardCount
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.Qiyun)
        data = CommFunc.WriteBYTE(data, self.AwardCount)
        for i in range(self.AwardCount):
            data = CommFunc.WriteDWORD(data, self.AwardStateList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Qiyun:%d,
                                AwardCount:%d,
                                AwardStateList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Qiyun,
                                self.AwardCount,
                                "..."
                                )
        return DumpString
m_NAtagMCTiandaoTreeInfo=tagMCTiandaoTreeInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTiandaoTreeInfo.Head.Cmd,m_NAtagMCTiandaoTreeInfo.Head.SubCmd))] = m_NAtagMCTiandaoTreeInfo
#------------------------------------------------------
@@ -25811,121 +22754,6 @@
m_NAtagMCUseMoneyTotalInfo=tagMCUseMoneyTotalInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseMoneyTotalInfo.Head.Cmd,m_NAtagMCUseMoneyTotalInfo.Head.SubCmd))] = m_NAtagMCUseMoneyTotalInfo
#------------------------------------------------------
# B1 14 仙宫信息 #tagMCXiangongInfo
class  tagMCXiangong(Structure):
    _pack_ = 1
    _fields_ = [
                  ("XiangongID", c_ushort),    # 仙宫ID
                  ("LikeStateToday", c_ubyte),    # 今日是否已点赞
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.XiangongID = 0
        self.LikeStateToday = 0
        return
    def GetLength(self):
        return sizeof(tagMCXiangong)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B1 14 仙宫信息 //tagMCXiangongInfo:
                                XiangongID:%d,
                                LikeStateToday:%d
                                '''\
                                %(
                                self.XiangongID,
                                self.LikeStateToday
                                )
        return DumpString
class  tagMCXiangongInfo(Structure):
    Head = tagHead()
    LikeStateToday = 0    #(BYTE LikeStateToday)// 今日是否已点赞,指仙宫的外层点赞,非某个指定仙宫
    XiangongCount = 0    #(BYTE XiangongCount)
    XiangongList = list()    #(vector<tagMCXiangong> XiangongList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x14
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.LikeStateToday,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.XiangongCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.XiangongCount):
            temXiangongList = tagMCXiangong()
            _pos = temXiangongList.ReadData(_lpData, _pos)
            self.XiangongList.append(temXiangongList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB1
        self.Head.SubCmd = 0x14
        self.LikeStateToday = 0
        self.XiangongCount = 0
        self.XiangongList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1
        for i in range(self.XiangongCount):
            length += self.XiangongList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.LikeStateToday)
        data = CommFunc.WriteBYTE(data, self.XiangongCount)
        for i in range(self.XiangongCount):
            data = CommFunc.WriteString(data, self.XiangongList[i].GetLength(), self.XiangongList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                LikeStateToday:%d,
                                XiangongCount:%d,
                                XiangongList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.LikeStateToday,
                                self.XiangongCount,
                                "..."
                                )
        return DumpString
m_NAtagMCXiangongInfo=tagMCXiangongInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCXiangongInfo.Head.Cmd,m_NAtagMCXiangongInfo.Head.SubCmd))] = m_NAtagMCXiangongInfo
#------------------------------------------------------
@@ -26407,904 +23235,6 @@
#------------------------------------------------------
# B3 24 喜糖列表 #tagGCCandyList
class  tagGCCandyInfo(Structure):
    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
    NameALen = 0    #(BYTE NameALen)
    PlayerNameA = ""    #(String PlayerNameA)
    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
    NameBLen = 0    #(BYTE NameBLen)
    PlayerNameB = ""    #(String PlayerNameB)
    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
    MarryTime = 0    #(DWORD MarryTime)// 成亲时间戳,秒
    EndTime = 0    #(DWORD EndTime)// 结束时间戳,秒
    Prosperity = 0    #(DWORD Prosperity)// 当前繁荣度
    FireworksTotalBuyCount = 0    #(BYTE FireworksTotalBuyCount)// 烟花总已购买次数
    FireworksPlayerBuyCount = 0    #(BYTE FireworksPlayerBuyCount)// 烟花玩家已购买次数
    PlayerFreeEatCandyCount = 0    #(BYTE PlayerFreeEatCandyCount)// 玩家已免费吃该喜糖总次数,包含免费次数、烟花赠送次数
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Prosperity,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FireworksTotalBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.FireworksPlayerBuyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerFreeEatCandyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.PlayerIDA = 0
        self.NameALen = 0
        self.PlayerNameA = ""
        self.PlayerIDB = 0
        self.NameBLen = 0
        self.PlayerNameB = ""
        self.BridePriceID = 0
        self.MarryTime = 0
        self.EndTime = 0
        self.Prosperity = 0
        self.FireworksTotalBuyCount = 0
        self.FireworksPlayerBuyCount = 0
        self.PlayerFreeEatCandyCount = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += len(self.PlayerNameA)
        length += 4
        length += 1
        length += len(self.PlayerNameB)
        length += 1
        length += 4
        length += 4
        length += 4
        length += 1
        length += 1
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
        data = CommFunc.WriteBYTE(data, self.NameALen)
        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
        data = CommFunc.WriteBYTE(data, self.NameBLen)
        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
        data = CommFunc.WriteBYTE(data, self.BridePriceID)
        data = CommFunc.WriteDWORD(data, self.MarryTime)
        data = CommFunc.WriteDWORD(data, self.EndTime)
        data = CommFunc.WriteDWORD(data, self.Prosperity)
        data = CommFunc.WriteBYTE(data, self.FireworksTotalBuyCount)
        data = CommFunc.WriteBYTE(data, self.FireworksPlayerBuyCount)
        data = CommFunc.WriteBYTE(data, self.PlayerFreeEatCandyCount)
        return data
    def OutputString(self):
        DumpString = '''
                                PlayerIDA:%d,
                                NameALen:%d,
                                PlayerNameA:%s,
                                PlayerIDB:%d,
                                NameBLen:%d,
                                PlayerNameB:%s,
                                BridePriceID:%d,
                                MarryTime:%d,
                                EndTime:%d,
                                Prosperity:%d,
                                FireworksTotalBuyCount:%d,
                                FireworksPlayerBuyCount:%d,
                                PlayerFreeEatCandyCount:%d
                                '''\
                                %(
                                self.PlayerIDA,
                                self.NameALen,
                                self.PlayerNameA,
                                self.PlayerIDB,
                                self.NameBLen,
                                self.PlayerNameB,
                                self.BridePriceID,
                                self.MarryTime,
                                self.EndTime,
                                self.Prosperity,
                                self.FireworksTotalBuyCount,
                                self.FireworksPlayerBuyCount,
                                self.PlayerFreeEatCandyCount
                                )
        return DumpString
class  tagGCCandyList(Structure):
    Head = tagHead()
    CandyCount = 0    #(WORD CandyCount)
    CandyInfoList = list()    #(vector<tagGCCandyInfo> CandyInfoList)// 可吃喜糖列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x24
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.CandyCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.CandyCount):
            temCandyInfoList = tagGCCandyInfo()
            _pos = temCandyInfoList.ReadData(_lpData, _pos)
            self.CandyInfoList.append(temCandyInfoList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x24
        self.CandyCount = 0
        self.CandyInfoList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.CandyCount):
            length += self.CandyInfoList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.CandyCount)
        for i in range(self.CandyCount):
            data = CommFunc.WriteString(data, self.CandyInfoList[i].GetLength(), self.CandyInfoList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                CandyCount:%d,
                                CandyInfoList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.CandyCount,
                                "..."
                                )
        return DumpString
m_NAtagGCCandyList=tagGCCandyList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCandyList.Head.Cmd,m_NAtagGCCandyList.Head.SubCmd))] = m_NAtagGCCandyList
#------------------------------------------------------
# B3 19 魅力贡献榜 #tagGCCharmOfferBillboardDataList
class  tagGCCharmOfferBillboardData(Structure):
    OrderIndex = 0    #(DWORD OrderIndex)//名次索引,0代表第一名
    PlayerID = 0    #(DWORD PlayerID)// 玩家ID - 贡献者
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)
    CharmValue = 0    #(DWORD CharmValue)//贡献魅力值
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.OrderIndex,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.CharmValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.OrderIndex = 0
        self.PlayerID = 0
        self.NameLen = 0
        self.PlayerName = ""
        self.CharmValue = 0
        return
    def GetLength(self):
        length = 0
        length += 4
        length += 4
        length += 1
        length += len(self.PlayerName)
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteDWORD(data, self.OrderIndex)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteDWORD(data, self.CharmValue)
        return data
    def OutputString(self):
        DumpString = '''
                                OrderIndex:%d,
                                PlayerID:%d,
                                NameLen:%d,
                                PlayerName:%s,
                                CharmValue:%d
                                '''\
                                %(
                                self.OrderIndex,
                                self.PlayerID,
                                self.NameLen,
                                self.PlayerName,
                                self.CharmValue
                                )
        return DumpString
class  tagGCCharmOfferBillboardDataList(Structure):
    Head = tagHead()
    PlayerID = 0    #(DWORD PlayerID)// 魅力玩家ID
    QueryType = 0    #(BYTE QueryType)// 查看类型: 1-总榜,2-周榜,3-日榜
    DataCount = 0    #(BYTE DataCount)
    OfferBillboardDataList = list()    #(vector<tagGCCharmOfferBillboardData> OfferBillboardDataList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x19
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.DataCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.DataCount):
            temOfferBillboardDataList = tagGCCharmOfferBillboardData()
            _pos = temOfferBillboardDataList.ReadData(_lpData, _pos)
            self.OfferBillboardDataList.append(temOfferBillboardDataList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x19
        self.PlayerID = 0
        self.QueryType = 0
        self.DataCount = 0
        self.OfferBillboardDataList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += 1
        for i in range(self.DataCount):
            length += self.OfferBillboardDataList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.QueryType)
        data = CommFunc.WriteBYTE(data, self.DataCount)
        for i in range(self.DataCount):
            data = CommFunc.WriteString(data, self.OfferBillboardDataList[i].GetLength(), self.OfferBillboardDataList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerID:%d,
                                QueryType:%d,
                                DataCount:%d,
                                OfferBillboardDataList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerID,
                                self.QueryType,
                                self.DataCount,
                                "..."
                                )
        return DumpString
m_NAtagGCCharmOfferBillboardDataList=tagGCCharmOfferBillboardDataList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCharmOfferBillboardDataList.Head.Cmd,m_NAtagGCCharmOfferBillboardDataList.Head.SubCmd))] = m_NAtagGCCharmOfferBillboardDataList
#------------------------------------------------------
# B3 26 伴侣信息 #tagGCCoupleInfo
class  tagGCCoupleInfo(Structure):
    Head = tagHead()
    CoupleID = 0    #(DWORD CoupleID)// 伴侣玩家ID,一定是好友,社交信息从好友系统中获取
    NameLen = 0    #(BYTE NameLen)
    CoupleName = ""    #(String CoupleName)
    NewMarryTime = 0    #(DWORD NewMarryTime)// 新婚时间戳, 秒,计算结婚天数按该时间计算
    MarryTime = 0    #(DWORD MarryTime)// 最近一次提亲成功时间戳, 秒,计算可离婚时间按该时间计算
    BridePriceState = 0    #(DWORD BridePriceState)// 聘礼状态,按位存储已购买次数,如205代表ID1买了5次,ID2买了0次,ID3买了2次,最高9次
    BreakRequestID = 0    #(DWORD BreakRequestID)// 当前请求中的和离时间戳 - 请求方ID,0代表没人发起请求
    BreakRequestTime = 0    #(DWORD BreakRequestTime)// 当前请求中的和离时间戳, 秒,用于计算和离回应有效期
    PlayerBreakRequestTime = 0    #(DWORD PlayerBreakRequestTime)// 玩家最近一次和离请求时间戳, 秒,用于计算自身的请求和离CD
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x26
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.CoupleID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.CoupleName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.NewMarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.MarryTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BridePriceState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BreakRequestID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.BreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PlayerBreakRequestTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x26
        self.CoupleID = 0
        self.NameLen = 0
        self.CoupleName = ""
        self.NewMarryTime = 0
        self.MarryTime = 0
        self.BridePriceState = 0
        self.BreakRequestID = 0
        self.BreakRequestTime = 0
        self.PlayerBreakRequestTime = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.CoupleName)
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.CoupleID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.CoupleName)
        data = CommFunc.WriteDWORD(data, self.NewMarryTime)
        data = CommFunc.WriteDWORD(data, self.MarryTime)
        data = CommFunc.WriteDWORD(data, self.BridePriceState)
        data = CommFunc.WriteDWORD(data, self.BreakRequestID)
        data = CommFunc.WriteDWORD(data, self.BreakRequestTime)
        data = CommFunc.WriteDWORD(data, self.PlayerBreakRequestTime)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                CoupleID:%d,
                                NameLen:%d,
                                CoupleName:%s,
                                NewMarryTime:%d,
                                MarryTime:%d,
                                BridePriceState:%d,
                                BreakRequestID:%d,
                                BreakRequestTime:%d,
                                PlayerBreakRequestTime:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.CoupleID,
                                self.NameLen,
                                self.CoupleName,
                                self.NewMarryTime,
                                self.MarryTime,
                                self.BridePriceState,
                                self.BreakRequestID,
                                self.BreakRequestTime,
                                self.PlayerBreakRequestTime
                                )
        return DumpString
m_NAtagGCCoupleInfo=tagGCCoupleInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCoupleInfo.Head.Cmd,m_NAtagGCCoupleInfo.Head.SubCmd))] = m_NAtagGCCoupleInfo
#------------------------------------------------------
# B3 30 情缘相关信息 #tagMCLoveInfo
class  tagMCLoveInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("EatCandyToday", c_int),    # 今日已吃喜糖次数,包含免费及付费的所有次数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        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 = 0xB3
        self.SubCmd = 0x30
        self.EatCandyToday = 0
        return
    def GetLength(self):
        return sizeof(tagMCLoveInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 30 情缘相关信息 //tagMCLoveInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                EatCandyToday:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.EatCandyToday
                                )
        return DumpString
m_NAtagMCLoveInfo=tagMCLoveInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveInfo.Cmd,m_NAtagMCLoveInfo.SubCmd))] = m_NAtagMCLoveInfo
#------------------------------------------------------
# B3 27 情戒信息 #tagMCLoveRingInfo
class  tagMCLoveRingInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("ClassLV", c_ubyte),    # 阶
                  ("StarLV", c_ubyte),    # 星
                  ("EatCount", c_int),    # 本星已淬炼道具数
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        self.SubCmd = 0x27
        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 = 0xB3
        self.SubCmd = 0x27
        self.ClassLV = 0
        self.StarLV = 0
        self.EatCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCLoveRingInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 27 情戒信息 //tagMCLoveRingInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                ClassLV:%d,
                                StarLV:%d,
                                EatCount:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.ClassLV,
                                self.StarLV,
                                self.EatCount
                                )
        return DumpString
m_NAtagMCLoveRingInfo=tagMCLoveRingInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingInfo.Cmd,m_NAtagMCLoveRingInfo.SubCmd))] = m_NAtagMCLoveRingInfo
#------------------------------------------------------
# B3 29 情戒解锁成功 #tagMCLoveRingUnlockOK
class  tagMCLoveRingUnlockOK(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        self.SubCmd = 0x29
        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 = 0xB3
        self.SubCmd = 0x29
        return
    def GetLength(self):
        return sizeof(tagMCLoveRingUnlockOK)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 29 情戒解锁成功 //tagMCLoveRingUnlockOK:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagMCLoveRingUnlockOK=tagMCLoveRingUnlockOK()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLoveRingUnlockOK.Cmd,m_NAtagMCLoveRingUnlockOK.SubCmd))] = m_NAtagMCLoveRingUnlockOK
#------------------------------------------------------
# B3 22 收到提亲信息 #tagGCMarryReqInfo
class  tagGCMarryReqInfo(Structure):
    Head = tagHead()
    PlayerID = 0    #(DWORD PlayerID)// 同一个玩家ID多次提亲时可能同步多次,前端覆盖数据即可
    NameLen = 0    #(BYTE NameLen)
    PlayerName = ""    #(String PlayerName)
    BridePriceID = 0    #(BYTE BridePriceID)// 聘礼ID
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x22
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.BridePriceID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x22
        self.PlayerID = 0
        self.NameLen = 0
        self.PlayerName = ""
        self.BridePriceID = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.PlayerName)
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.PlayerName)
        data = CommFunc.WriteBYTE(data, self.BridePriceID)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerID:%d,
                                NameLen:%d,
                                PlayerName:%s,
                                BridePriceID:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerID,
                                self.NameLen,
                                self.PlayerName,
                                self.BridePriceID
                                )
        return DumpString
m_NAtagGCMarryReqInfo=tagGCMarryReqInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqInfo.Head.Cmd,m_NAtagGCMarryReqInfo.Head.SubCmd))] = m_NAtagGCMarryReqInfo
#------------------------------------------------------
# B3 21 提亲发送成功 #tagGCMarryReqOK
class  tagGCMarryReqOK(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        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 = 0xB3
        self.SubCmd = 0x21
        return
    def GetLength(self):
        return sizeof(tagGCMarryReqOK)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 21 提亲发送成功 //tagGCMarryReqOK:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagGCMarryReqOK=tagGCMarryReqOK()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryReqOK.Cmd,m_NAtagGCMarryReqOK.SubCmd))] = m_NAtagGCMarryReqOK
#------------------------------------------------------
# B3 23 提亲回应结果 #tagGCMarryResponseRet
class  tagGCMarryResponseRet(Structure):
    Head = tagHead()
    PlayerIDA = 0    #(DWORD PlayerIDA)// 玩家ID - 请求方
    NameALen = 0    #(BYTE NameALen)
    PlayerNameA = ""    #(String PlayerNameA)
    PlayerIDB = 0    #(DWORD PlayerIDB)// 玩家ID - 接受方
    NameBLen = 0    #(BYTE NameBLen)
    PlayerNameB = ""    #(String PlayerNameB)
    IsOK = 0    #(BYTE IsOK)// 是否同意,0-否,1-是;  如果同意则双方都会收到该包,根据玩家ID判断自己是请求或接受方,显示不同的同意结果界面;不同意只有请求方会收到
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x23
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.PlayerIDA,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameALen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameA,_pos = CommFunc.ReadString(_lpData, _pos,self.NameALen)
        self.PlayerIDB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.NameBLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PlayerNameB,_pos = CommFunc.ReadString(_lpData, _pos,self.NameBLen)
        self.IsOK,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x23
        self.PlayerIDA = 0
        self.NameALen = 0
        self.PlayerNameA = ""
        self.PlayerIDB = 0
        self.NameBLen = 0
        self.PlayerNameB = ""
        self.IsOK = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.PlayerNameA)
        length += 4
        length += 1
        length += len(self.PlayerNameB)
        length += 1
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.PlayerIDA)
        data = CommFunc.WriteBYTE(data, self.NameALen)
        data = CommFunc.WriteString(data, self.NameALen, self.PlayerNameA)
        data = CommFunc.WriteDWORD(data, self.PlayerIDB)
        data = CommFunc.WriteBYTE(data, self.NameBLen)
        data = CommFunc.WriteString(data, self.NameBLen, self.PlayerNameB)
        data = CommFunc.WriteBYTE(data, self.IsOK)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                PlayerIDA:%d,
                                NameALen:%d,
                                PlayerNameA:%s,
                                PlayerIDB:%d,
                                NameBLen:%d,
                                PlayerNameB:%s,
                                IsOK:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.PlayerIDA,
                                self.NameALen,
                                self.PlayerNameA,
                                self.PlayerIDB,
                                self.NameBLen,
                                self.PlayerNameB,
                                self.IsOK
                                )
        return DumpString
m_NAtagGCMarryResponseRet=tagGCMarryResponseRet()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryResponseRet.Head.Cmd,m_NAtagGCMarryResponseRet.Head.SubCmd))] = m_NAtagGCMarryResponseRet
#------------------------------------------------------
# B3 25 玩家魅力值信息 #tagGCPlayerCharmValueInfo
class  tagGCPlayerCharmValueInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("CharmValueTotal", c_int),    #当前魅力值 - 总
                  ("CharmValueWeek", c_int),    #当前魅力值 - 周
                  ("CharmValueDay", c_int),    #当前魅力值 - 日
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB3
        self.SubCmd = 0x25
        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 = 0xB3
        self.SubCmd = 0x25
        self.CharmValueTotal = 0
        self.CharmValueWeek = 0
        self.CharmValueDay = 0
        return
    def GetLength(self):
        return sizeof(tagGCPlayerCharmValueInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// B3 25 玩家魅力值信息 //tagGCPlayerCharmValueInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                CharmValueTotal:%d,
                                CharmValueWeek:%d,
                                CharmValueDay:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.CharmValueTotal,
                                self.CharmValueWeek,
                                self.CharmValueDay
                                )
        return DumpString
m_NAtagGCPlayerCharmValueInfo=tagGCPlayerCharmValueInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCPlayerCharmValueInfo.Cmd,m_NAtagGCPlayerCharmValueInfo.SubCmd))] = m_NAtagGCPlayerCharmValueInfo
#------------------------------------------------------
# B3 15 相关玩家在线状态变更同步 #tagGCRelatedPlayerOnlineState
class  tagGCRelatedPlayerOnlineState(Structure):
@@ -27362,148 +23292,6 @@
m_NAtagGCRelatedPlayerOnlineState=tagGCRelatedPlayerOnlineState()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCRelatedPlayerOnlineState.Cmd,m_NAtagGCRelatedPlayerOnlineState.SubCmd))] = m_NAtagGCRelatedPlayerOnlineState
#------------------------------------------------------
# B3 20 送礼物成功通知 #tagGCSendGiftsOKList
class  tagGCSendGiftsOK(Structure):
    NameLen = 0    #(BYTE NameLen)
    Name = ""    #(String Name)// 赠送方玩家名
    PlayerID = 0    #(DWORD PlayerID)// 赠送方玩家ID
    GiftNum = 0    #(WORD GiftNum)// 赠送礼物编号
    GiftCount = 0    #(DWORD GiftCount)// 赠送礼物数量
    SendTime = 0    #(DWORD SendTime)// 赠送时间戳
    data = None
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.GiftNum,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.GiftCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.SendTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
    def Clear(self):
        self.NameLen = 0
        self.Name = ""
        self.PlayerID = 0
        self.GiftNum = 0
        self.GiftCount = 0
        self.SendTime = 0
        return
    def GetLength(self):
        length = 0
        length += 1
        length += len(self.Name)
        length += 4
        length += 2
        length += 4
        length += 4
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteBYTE(data, self.NameLen)
        data = CommFunc.WriteString(data, self.NameLen, self.Name)
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteWORD(data, self.GiftNum)
        data = CommFunc.WriteDWORD(data, self.GiftCount)
        data = CommFunc.WriteDWORD(data, self.SendTime)
        return data
    def OutputString(self):
        DumpString = '''
                                NameLen:%d,
                                Name:%s,
                                PlayerID:%d,
                                GiftNum:%d,
                                GiftCount:%d,
                                SendTime:%d
                                '''\
                                %(
                                self.NameLen,
                                self.Name,
                                self.PlayerID,
                                self.GiftNum,
                                self.GiftCount,
                                self.SendTime
                                )
        return DumpString
class  tagGCSendGiftsOKList(Structure):
    Head = tagHead()
    Count = 0    #(WORD Count)
    SendGiftsOKList = list()    #(vector<tagGCSendGiftsOK> SendGiftsOKList)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x20
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
        for i in range(self.Count):
            temSendGiftsOKList = tagGCSendGiftsOK()
            _pos = temSendGiftsOKList.ReadData(_lpData, _pos)
            self.SendGiftsOKList.append(temSendGiftsOKList)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB3
        self.Head.SubCmd = 0x20
        self.Count = 0
        self.SendGiftsOKList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        for i in range(self.Count):
            length += self.SendGiftsOKList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteString(data, self.SendGiftsOKList[i].GetLength(), self.SendGiftsOKList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                SendGiftsOKList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagGCSendGiftsOKList=tagGCSendGiftsOKList()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCSendGiftsOKList.Head.Cmd,m_NAtagGCSendGiftsOKList.Head.SubCmd))] = m_NAtagGCSendGiftsOKList
#------------------------------------------------------