| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | 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)
|
| | |
| | | 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)
|
| | |
| | | self.LuckValue = 0
|
| | | self.TreasureCount = 0
|
| | | self.TreasureCountToday = 0
|
| | | self.TreasureCountTodayGold = 0
|
| | | self.FreeCountToday = 0
|
| | | self.TreasureCntAward = 0
|
| | | self.GridLimitCnt = 0
|
| | |
| | | length = 0
|
| | | length += 1
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | |
| | | 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)
|
| | |
| | | LuckValue:%d,
|
| | | TreasureCount:%d,
|
| | | TreasureCountToday:%d,
|
| | | TreasureCountTodayGold:%d,
|
| | | FreeCountToday:%d,
|
| | | TreasureCntAward:%d,
|
| | | GridLimitCnt:%d,
|
| | |
| | | self.LuckValue,
|
| | | self.TreasureCount,
|
| | | self.TreasureCountToday,
|
| | | self.TreasureCountTodayGold,
|
| | | self.FreeCountToday,
|
| | | self.TreasureCntAward,
|
| | | self.GridLimitCnt,
|
| | |
| | | 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,个数,是否绑定], ...]
|
| | |
| | | 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)
|
| | |
| | | self.CostType = 0
|
| | | self.AddMoneyType = 0
|
| | | self.AddMoneyValue = 0
|
| | | self.AddItemID = 0
|
| | | self.AddItemCount = 0
|
| | | self.AddTreasureLuck = 0
|
| | | self.TreasureResultLen = 0
|
| | | self.TreasureResult = ""
|
| | |
| | | length += 1
|
| | | length += 1
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += 2
|
| | | length += len(self.TreasureResult)
|
| | |
| | | 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)
|
| | |
| | | CostType:%d,
|
| | | AddMoneyType:%d,
|
| | | AddMoneyValue:%d,
|
| | | AddItemID:%d,
|
| | | AddItemCount:%d,
|
| | | AddTreasureLuck:%d,
|
| | | TreasureResultLen:%d,
|
| | | TreasureResult:%s
|
| | |
| | | self.CostType,
|
| | | self.AddMoneyType,
|
| | | self.AddMoneyValue,
|
| | | self.AddItemID,
|
| | | self.AddItemCount,
|
| | | self.AddTreasureLuck,
|
| | | self.TreasureResultLen,
|
| | | self.TreasureResult
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AA 74 购买次数礼包活动信息 #tagMCActBuyCountGiftInfo
|
| | |
|
| | | class tagMCActBuyCountGiftItem(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | 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
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #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):
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|