16 卡牌服务端(删除不需要旧功能:法器、炼体、魅力、情缘、仙宫、神兽、系统特权、印记;)
| | |
| | | list AwardItemList; //奖励物品列表
|
| | | };
|
| | |
|
| | | //境界炼体属性表
|
| | |
|
| | | struct tagLianTi
|
| | | {
|
| | | BYTE _LianTiLV; //炼体等级
|
| | | list FixedAttrType; //固定属性类型(非累积)
|
| | | list FixedAttrValue; //固定属性值(非累积)
|
| | | list PlusAttrType; //增强属性类型(非累积)
|
| | | list PlusAttrRate; //增强属性万分率(非累积)
|
| | | list EatItemAttrType; //每x个培养丹增加属性类型,x=UpEatItemPerCount
|
| | | list EatItemAttrValue; //每x个培养丹增加属性值,x=UpEatItemPerCount
|
| | | WORD NeedEatCount; //升级所需个数(非累计)
|
| | | WORD EatPerCount; //每次培养消耗x个
|
| | | list LVUpCostItemInfo; //突破等级道具ID|个数
|
| | | DWORD ActivateSkillID; //激活技能ID
|
| | | };
|
| | |
|
| | | //功能配置表格 #tagFuncConfig
|
| | |
|
| | | struct tagFuncConfig
|
| | |
| | | dict LVLegendAttrLibNumInfo; //属性ID等级段对应数值库编号 {属性ID:{等级:库编号, ...}}
|
| | | };
|
| | |
|
| | | //神兽表
|
| | |
|
| | | struct tagDogz
|
| | | {
|
| | | BYTE _DogzID; //神兽ID
|
| | | list BaseAttrTypes; //基础属性类型列表
|
| | | list BaseAttrValues; //基础属性值列表
|
| | | list HelpBattleSkills; //助战技能ID列表
|
| | | DWORD FightPowerEx; //助战附加战力
|
| | | list EquipPlaceColorList; //穿戴装备颜色限制
|
| | | list HelpBattleNotify; //助战广播 ["广播key",[参数1,参数2,...],广播CD分钟]
|
| | | };
|
| | |
|
| | | //神兽强化表
|
| | |
|
| | | struct tagDogzEquipPlus
|
| | | {
|
| | | BYTE _EquipPlace; //装备位
|
| | | BYTE _PlusLV; //强化等级
|
| | | list PlusAttrTypes; //强化属性类型列表
|
| | | list PlusAttrValues; //强化属性值列表
|
| | | DWORD PlusLVUPTotalExp; //升级所需累计熟练度总值
|
| | | };
|
| | |
|
| | | //洗练表 #tagEquipWash
|
| | |
|
| | | struct tagEquipWash
|
| | |
| | | WORD _LV; //等级
|
| | | DWORD UpNeedExp; //升级所需经验数
|
| | | dict Attr; //属性加成
|
| | | };
|
| | |
|
| | | //法器升级表
|
| | |
|
| | | struct tagFaQiLVUp
|
| | | {
|
| | | BYTE _FaQiLV; //法器等级
|
| | | WORD NeedEatCount; //升级所需个数(非累计)
|
| | | list LVAttrType; //每级额外属性类型(非累积)
|
| | | list LVAttrValue; //每级额外属性值(非累积)
|
| | | list UpItemAttrType; //每x个培养丹增加属性类型,x=UpEatItemPerCount
|
| | | list UpItemAttrValue; //每x个培养丹增加属性值,x=UpEatItemPerCount
|
| | | DWORD UpEatItemPerCount; //每次培养消耗x个
|
| | | };
|
| | |
|
| | | //坐骑阶级表
|
| | |
| | | BYTE _QualityLV; //品级
|
| | | };
|
| | |
|
| | | //情缘礼物表
|
| | |
|
| | | struct tagLoveGift
|
| | | {
|
| | | BYTE _GiftNum; //聘礼ID
|
| | | DWORD GiftItemID; //物品ID
|
| | | BYTE AllowBatch; //是否允许批量赠送
|
| | | };
|
| | |
|
| | | //情缘提亲表
|
| | |
|
| | | struct tagMarry
|
| | | {
|
| | | BYTE _BridePriceID; //聘礼ID
|
| | | list CostMoneyInfo; //消耗货币类型|数值
|
| | | };
|
| | |
|
| | | //情缘情戒表
|
| | |
|
| | | struct tagLoveRing
|
| | | {
|
| | | BYTE _RingClassLV; //情戒阶级
|
| | | BYTE _RingStarLV; //情戒星级
|
| | | list CoupleAttrType; //仙侣属性类型(非累积)
|
| | | list CoupleAttrValue; //仙侣属性值(非累积)
|
| | | list StarAttrType; //星级额外属性类型(非累积)
|
| | | list StarAttrValue; //星级额外属性值(非累积)
|
| | | list UpItemAttrType; //每x个培养丹增加属性类型,x=UpEatItemPerCount
|
| | | list UpItemAttrValue; //每x个培养丹增加属性值,x=UpEatItemPerCount
|
| | | DWORD NeedEatCount; //升级所需个数(非累计)
|
| | | DWORD UpEatItemPerCount; //每次培养消耗x个
|
| | | };
|
| | |
|
| | | //情缘魅力属性表
|
| | |
|
| | | struct tagLoveCharm
|
| | | {
|
| | | BYTE _CharmLV; //魅力等级
|
| | | DWORD UpNeedCharm; //升下级所需总魅力
|
| | | list LVAttrType; //属性类型
|
| | | list LVAttrValue; //总属性值
|
| | | list LVAwardItemInfo; //等级物品奖励[[物品ID,个数,是否拍品], ...]
|
| | | };
|
| | |
|
| | | //骑宠觉醒表
|
| | |
|
| | | struct tagHorsePetSkin
|
| | |
| | | DWORD NeedExp; //升级需要经验
|
| | | dict AttrInfo; //属性
|
| | | BYTE SkinIndex; //外观
|
| | | };
|
| | |
|
| | | //功能特权奖励表
|
| | |
|
| | | struct tagFuncSysPrivilege
|
| | | {
|
| | | BYTE _FuncSysID; //功能系统ID
|
| | | BYTE DayNum; //第X天
|
| | | list DayAwardItemInfo; // 奖励物品信息 [[物品ID,个数,是否拍品], ...]
|
| | | };
|
| | |
|
| | | //累计充值奖励表
|
| | |
| | | list FreeRewardItemList; //免费奖励物品列表 [[物品ID,个数,是否拍品],...]
|
| | | list ZLRewardItemList; //战令奖励物品列表 [[物品ID,个数,是否拍品],...]
|
| | | list ZLRewardItemListH; //高级战令奖励物品列表 [[物品ID,个数,是否拍品],...]
|
| | | };
|
| | |
|
| | | //仙宫表
|
| | |
|
| | | struct tagXiangong
|
| | | {
|
| | | WORD _XiangongID; //仙宫ID
|
| | | };
|
| | |
|
| | | //仙宫天道树
|
| | |
|
| | | struct tagTiandaoTree
|
| | | {
|
| | | WORD _AwardIndex; //奖励索引
|
| | | DWORD NeedQiyun; //所需气运值
|
| | | list AwardItemList; //奖励物品列表
|
| | | };
|
| | |
|
| | | //祝福树
|
| | |
| | | PacketSubCMD_1=0x30
|
| | | PacketCallFunc_1=OnViewBillboard
|
| | |
|
| | | ;法器
|
| | | [PlayerFaQi]
|
| | | ScriptName = Player\PlayerFaQi.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 1
|
| | |
|
| | | PacketCMD_1=0xA5
|
| | | PacketSubCMD_1=0x32
|
| | | PacketCallFunc_1=OnFaQiLVUp
|
| | |
|
| | | ;坐骑培养
|
| | | [PlayerHorse]
|
| | | ScriptName = Player\PlayerHorse.py
|
| | |
| | | PacketSubCMD_18=0x30
|
| | | PacketCallFunc_18=
|
| | |
|
| | | PacketCMD_19=0xA1
|
| | | PacketSubCMD_19=0x08
|
| | | PacketCallFunc_19=OnRefreshMainServerRole
|
| | | PacketCMD_19=
|
| | | PacketSubCMD_19=
|
| | | PacketCallFunc_19=
|
| | |
|
| | | PacketCMD_20=0xB2
|
| | | PacketSubCMD_20=0x06
|
| | |
| | | PacketSubCMD_23=0x35
|
| | | PacketCallFunc_23=OnSelectRealmDifficulty
|
| | |
|
| | | PacketCMD_24=0xA1
|
| | | PacketSubCMD_24=0x21
|
| | | PacketCallFunc_24=OnChangeJob
|
| | | PacketCMD_24=
|
| | | PacketSubCMD_24=
|
| | | PacketCallFunc_24=
|
| | |
|
| | | PacketCMD_25=0xA1
|
| | | PacketSubCMD_25=0x20
|
| | | PacketCallFunc_25=OnMoneyExchange
|
| | | PacketCMD_25=
|
| | | PacketSubCMD_25=
|
| | | PacketCallFunc_25=
|
| | |
|
| | | PacketCMD_26=0xA0
|
| | | PacketSubCMD_26=0x08
|
| | |
| | | PacketCMD_1 = 0xA5
|
| | | PacketSubCMD_1 = 0x23
|
| | | PacketCallFunc_1 = DoRealmLVUp
|
| | |
|
| | | ;炼体
|
| | | [PlayerLianTi]
|
| | | ScriptName = Player\PlayerLianTi.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | |
|
| | | PacketCMD_1 = 0xA5
|
| | | PacketSubCMD_1 = 0x33
|
| | | PacketCallFunc_1 = OnLianTiUp
|
| | |
|
| | | PacketCMD_2 = 0xA5
|
| | | PacketSubCMD_2 = 0x34
|
| | | PacketCallFunc_2 = OnLianTiLVUp
|
| | |
|
| | | ;改名功能
|
| | | [UpdatePlayerName]
|
| | |
| | | PacketSubCMD_4=0x16
|
| | | PacketCallFunc_4=OnSelectSkillElement
|
| | |
|
| | |
|
| | | ;印记
|
| | | [yinji]
|
| | | ScriptName = Player\PlayerYinji.py
|
| | | Writer = Alee
|
| | | Releaser = Alee
|
| | | RegType = 0
|
| | | RegisterPackCount = 1
|
| | |
|
| | | PacketCMD_1=0xB4
|
| | | PacketSubCMD_1=0x0D
|
| | | PacketCallFunc_1=OnYinji
|
| | |
|
| | | ;副本
|
| | | [FBCommon]
|
| | | ScriptName = GameWorldLogic\FBProcess\FBCommon.py
|
| | |
| | | PacketCMD_4=A3
|
| | | PacketSubCMD_4=27
|
| | | PacketCallFunc_4=OnLingQiTrain
|
| | |
|
| | | ;神兽
|
| | | [PlayerDogz]
|
| | | ScriptName = Player\PlayerDogz.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 5
|
| | |
|
| | | PacketCMD_1=0xA5
|
| | | PacketSubCMD_1=0xC0
|
| | | PacketCallFunc_1=OnDogzEquipItem
|
| | |
|
| | | PacketCMD_2=0xA5
|
| | | PacketSubCMD_2=0xC1
|
| | | PacketCallFunc_2=OnDogzUnEquipItem
|
| | |
|
| | | PacketCMD_3=0xA5
|
| | | PacketSubCMD_3=0xC2
|
| | | PacketCallFunc_3=OnDogzBattleStateChange
|
| | |
|
| | | PacketCMD_4=0xA5
|
| | | PacketSubCMD_4=0xC3
|
| | | PacketCallFunc_4=OnDogzBuyBatteCount
|
| | |
|
| | | PacketCMD_5=0xA5
|
| | | PacketSubCMD_5=0xC4
|
| | | PacketCallFunc_5=OnDogzEquipPlus
|
| | |
|
| | | ;充值
|
| | | [PlayerCoin]
|
| | |
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | | RegisterPackCount = 1
|
| | |
|
| | | PacketCMD_1=0xB2
|
| | | PacketSubCMD_1=0x09
|
| | | PacketCallFunc_1=OnArenaMatch
|
| | |
|
| | | PacketCMD_2=
|
| | | PacketSubCMD_2=
|
| | | PacketCallFunc_2=
|
| | |
|
| | | ;功能系统特权
|
| | | [PlayerFuncSysPrivilege]
|
| | | ScriptName = Player\PlayerFuncSysPrivilege.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | |
|
| | | PacketCMD_1=0xB2
|
| | | PacketSubCMD_1=0x11
|
| | | PacketCallFunc_1=OnActivateFuncSysPrivilege
|
| | |
|
| | | PacketCMD_2=0xB2
|
| | | PacketSubCMD_2=0x12
|
| | | PacketCallFunc_2=OnGetFuncSysPrivilegeAward
|
| | |
|
| | | ;情缘
|
| | | [PlayerLove]
|
| | | ScriptName = Player\PlayerLove.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 7
|
| | |
|
| | | PacketCMD_1=0xB3
|
| | | PacketSubCMD_1=0x10
|
| | | PacketCallFunc_1=OnSendGifts
|
| | |
|
| | | PacketCMD_2=0xB3
|
| | | PacketSubCMD_2=0x11
|
| | | PacketCallFunc_2=OnMarryReq
|
| | |
|
| | | PacketCMD_3=0xB3
|
| | | PacketSubCMD_3=0x13
|
| | | PacketCallFunc_3=OnMarryEatCandy
|
| | |
|
| | | PacketCMD_4=0xB3
|
| | | PacketSubCMD_4=0x14
|
| | | PacketCallFunc_4=OnMarryBuyFireworks
|
| | |
|
| | | PacketCMD_5=0xB3
|
| | | PacketSubCMD_5=0x15
|
| | | PacketCallFunc_5=OnMarryBreak
|
| | |
|
| | | PacketCMD_6=0xB3
|
| | | PacketSubCMD_6=0x17
|
| | | PacketCallFunc_6=OnLoveRingUnlock
|
| | |
|
| | | PacketCMD_7=0xB3
|
| | | PacketSubCMD_7=0x18
|
| | | PacketCallFunc_7=OnLoveRingUp
|
| | |
|
| | | ;古宝
|
| | | [PlayerGubao]
|
| | |
| | | Def_PDict_FamilyGCZSQGridItemCnt = "FamilyGCZSQItemCnt_%s" # 圣泉当前层格子抽中物品个数,参数(格子编号)
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | # 法器
|
| | | Def_PDict_FaQiLV = "FaQiLV" # 法器等级
|
| | | Def_PDict_FaQiEatItemCount = "FaQiEatItemCount" # 当前阶已吃丹个数
|
| | |
|
| | | # 炼体
|
| | | Def_PDict_LianTiLV = "LianTiLV" # 炼体等级
|
| | | Def_PDict_LianTiEatItemCount = "LianTiEatItemCount" # 当前级已吃丹个数
|
| | |
|
| | | # 坐骑
|
| | | Def_PDict_HorseClassLV = "HorseClassLV" # 坐骑阶级
|
| | | Def_PDict_HorseLV = "HorseLV" # 坐骑阶等级
|
| | |
| | | Def_PDict_EquipPartSuiteLV = "EQPartSuiteLV_%s_%s" #部位套装等级 参数 部位、套装类型
|
| | | Def_PDict_EquipPartSuiteActivate = "EQPartSuiteActivate_%s" #套装激活记录 参数 key编号
|
| | |
|
| | | #神兽
|
| | | Def_PDict_DogzFightState = "DogzFightState_%s" # 神兽助战状态,参数为key编号,按神兽ID二进制位存储
|
| | | Def_PDict_DogzBuyHelpbattleCount = "DogzBuyHelpbattleCount" # 额外购买的神兽助战位
|
| | |
|
| | | #装备部位星数
|
| | | Def_PDict_TotalEquipStar = "TotalEquipStar" #装备部位星数总数
|
| | | Def_PDict_EquipPartStar = "EQPartStar_%s" #装备部位星数 参数 装备背包格子索引
|
| | |
| | | #竞技场
|
| | | Def_PDict_ArenaScore = "ArenaScore" # 当前积分
|
| | | Def_PDict_ArenaWinCnt = "ArenaWinCnt" # 累计胜利次数
|
| | |
|
| | | #功能系统特权
|
| | | Def_PDict_FuncSysPrivilegeActTime = "FuncSysPrivilegeActTime_%s" # 系统功能特权激活时间戳,参数(系统功能ID)
|
| | | Def_PDict_FuncSysPrivilegeAward = "FuncSysPrivilegeAward_%s" # 系统功能特权领奖记录,参数(系统功能ID)
|
| | |
|
| | | #情缘
|
| | | Def_PDict_LoveRingClassLV = "LoveRingClassLV" # 情戒 - 阶级
|
| | | Def_PDict_LoveRingStarLV = "LoveRingStarLV" # 情戒 - 星级
|
| | | Def_PDict_LoveRingEatCount = "LoveRingEatCount" # 情戒 - 本星已淬炼道具数
|
| | | Def_PDict_LoveCoupleIntimacy = "LoveCoupleIntimacy" # 伴侣亲密度
|
| | | Def_PDict_LoveEatCandyToday = "LoveEatCandyToday" # 今日已吃喜糖次数
|
| | | Def_PDict_CharmLV = "CharmLV" # 魅力等级
|
| | |
|
| | | #古宝
|
| | | Def_PDict_GubaoInfo = "Gubao_%s" # 古宝信息,参数(古宝ID),特殊效果层*100000 + 等级*100 + 星级
|
| | |
| | | Def_PDict_GoldRushWarehouse = "GoldRushWarehouse_%s" # 仓库完成淘金ID,参数(仓库位置索引)
|
| | | Def_PDict_GoldRushRecoverTime = "GoldRushRecoverTime" # 上次恢复淘金令时间戳
|
| | | Def_PDict_GoldRushAutoEndTime = "GoldRushAutoEndTime" # 自动淘金到期时间戳
|
| | |
|
| | | #仙宫
|
| | | Def_PDict_XiangongLikeState = "XiangongLikeState_%s" # 指定仙宫今日是否已点赞,参数(仙宫ID),仙宫ID为0时代表每日的仙宫功能点赞
|
| | | Def_PDict_TiandaoQiyun = "TiandaoQiyun" # 天道树当前气运
|
| | | Def_PDict_TiandaoAward = "TiandaoAward_%s" # 天道树领奖记录,按奖励索引记录是否已领取,参数(key编号)
|
| | |
|
| | | #武将
|
| | | Def_PDict_HeroSkin = "HeroSkin_%s" # 武将皮肤解锁状态,按皮肤索引二进制存储,参数(武将ID)
|
| | |
| | | Def_Cost_BuyKillBossCnt:"BuyKillBossCnt",
|
| | | Def_Cost_EquipStar:"EquipStar",
|
| | | Def_Cost_ActivityPlace:"ActivityPlace",
|
| | | Def_Cost_FaQi:"FaQi",
|
| | | Def_Cost_Love:"Love",
|
| | | Def_Cost_BuyOrderInfo:"BuyOrderInfo",
|
| | | Def_Cost_CrossBattlefield:"CrossBattlefield",
|
| | | Def_Cost_LianTi:"LianTi",
|
| | | }
|
| | | ## -----------------------------------------------------
|
| | |
|
| | |
| | | ItemDel_HorsePetAwake:"HorsePetAwake",
|
| | | ItemDel_ActivityPlace:"ActivityPlace",
|
| | | ItemDel_AuctionHouse:"AuctionHouse",
|
| | | ItemDel_FaQi:"FaQi",
|
| | | ItemDel_BTGM:"BTGM",
|
| | | ItemDel_LianTi:"LianTi",
|
| | | }
|
| | |
|
| | | ##==================================================================================================
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A1 21 תְҵ #tagCMChangeJob
|
| | |
|
| | | class tagCMChangeJob(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("TagJob", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA1
|
| | | 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 = 0xA1
|
| | | self.SubCmd = 0x21
|
| | | self.TagJob = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMChangeJob)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A1 21 תְҵ //tagCMChangeJob:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | TagJob:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.TagJob
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMChangeJob=tagCMChangeJob()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChangeJob.Cmd,m_NAtagCMChangeJob.SubCmd))] = m_NAtagCMChangeJob
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A1 25 代币购买充值商品编号商品 #tagCMCoinBuyOrderInfo
|
| | |
|
| | | class tagCMCoinBuyOrderInfo(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A1 20 货币兑换 #tagCMMoneyExchange
|
| | |
|
| | | class tagCMMoneyExchange(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("SrcMoneyType", c_ubyte), # 源货币类型
|
| | | ("TagMoneyType", c_ubyte), # 目标货币类型
|
| | | ("ExchangeValue", c_int), # 兑换数量(消耗源货币的数量)
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA1
|
| | | 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 = 0xA1
|
| | | self.SubCmd = 0x20
|
| | | self.SrcMoneyType = 0
|
| | | self.TagMoneyType = 0
|
| | | self.ExchangeValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMMoneyExchange)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A1 20 货币兑换 //tagCMMoneyExchange:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | SrcMoneyType:%d,
|
| | | TagMoneyType:%d,
|
| | | ExchangeValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.SrcMoneyType,
|
| | | self.TagMoneyType,
|
| | | self.ExchangeValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMMoneyExchange=tagCMMoneyExchange()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMoneyExchange.Cmd,m_NAtagCMMoneyExchange.SubCmd))] = m_NAtagCMMoneyExchange
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A1 23 查询充值次数 #tagCMQueryCoinToGoldCount
|
| | |
|
| | | class tagCMQueryCoinToGoldCount(Structure):
|
| | |
| | |
|
| | | m_NAtagCMQueryCoinToGoldCount=tagCMQueryCoinToGoldCount()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMQueryCoinToGoldCount.Cmd,m_NAtagCMQueryCoinToGoldCount.SubCmd))] = m_NAtagCMQueryCoinToGoldCount
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
|
| | |
|
| | | class tagCMRefreshMainServerRole(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA1
|
| | | 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 = 0xA1
|
| | | self.SubCmd = 0x08
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMRefreshMainServerRole)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A1 08 刷新主服角色信息 //tagCMRefreshMainServerRole:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMRefreshMainServerRole=tagCMRefreshMainServerRole()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMRefreshMainServerRole.Cmd,m_NAtagCMRefreshMainServerRole.SubCmd))] = m_NAtagCMRefreshMainServerRole
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C2 神兽变更助战状态 #tagCMDogzBattleStateChange
|
| | |
|
| | | class tagCMDogzBattleStateChange(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 = 0xA5
|
| | | self.SubCmd = 0xC2
|
| | | 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 = 0xA5
|
| | | self.SubCmd = 0xC2
|
| | | self.DogzID = 0
|
| | | self.BatteState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMDogzBattleStateChange)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 C2 神兽变更助战状态 //tagCMDogzBattleStateChange:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | DogzID:%d,
|
| | | BatteState:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.DogzID,
|
| | | self.BatteState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMDogzBattleStateChange=tagCMDogzBattleStateChange()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBattleStateChange.Cmd,m_NAtagCMDogzBattleStateChange.SubCmd))] = m_NAtagCMDogzBattleStateChange
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C3 神兽购买助战位 #tagCMDogzBuyBatteCount
|
| | |
|
| | | class tagCMDogzBuyBatteCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0xC3
|
| | | 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 = 0xA5
|
| | | self.SubCmd = 0xC3
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMDogzBuyBatteCount)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 C3 神兽购买助战位 //tagCMDogzBuyBatteCount:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMDogzBuyBatteCount=tagCMDogzBuyBatteCount()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzBuyBatteCount.Cmd,m_NAtagCMDogzBuyBatteCount.SubCmd))] = m_NAtagCMDogzBuyBatteCount
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C0 神兽穿戴装备 #tagCMDogzEquipItem
|
| | |
|
| | | class tagCMDogzEquipItem(Structure):
|
| | | Head = tagHead()
|
| | | DogzID = 0 #(BYTE DogzID)// 神兽ID
|
| | | EquipIndexCount = 0 #(BYTE EquipIndexCount)
|
| | | EquipIndexList = list() #(vector<BYTE> EquipIndexList)//神兽装备所在神兽背包索引列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC0
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.DogzID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.EquipIndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.EquipIndexCount):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.EquipIndexList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC0
|
| | | self.DogzID = 0
|
| | | self.EquipIndexCount = 0
|
| | | self.EquipIndexList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1 * self.EquipIndexCount
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.DogzID)
|
| | | data = CommFunc.WriteBYTE(data, self.EquipIndexCount)
|
| | | for i in range(self.EquipIndexCount):
|
| | | data = CommFunc.WriteBYTE(data, self.EquipIndexList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | DogzID:%d,
|
| | | EquipIndexCount:%d,
|
| | | EquipIndexList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.DogzID,
|
| | | self.EquipIndexCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Head.Cmd,m_NAtagCMDogzEquipItem.Head.SubCmd))] = m_NAtagCMDogzEquipItem
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C4 神兽装备强化 #tagCMDogzEquipPlus
|
| | |
|
| | | class tagCMDogzEquipPlus(Structure):
|
| | | Head = tagHead()
|
| | | EquipIndex = 0 #(BYTE EquipIndex)//神兽装备背包中索引
|
| | | IndexCount = 0 #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
|
| | | IndexList = list() #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
|
| | | IndexUseCountList = list() #(vector<DWORD> IndexUseCountList)//材料所在神兽物品背包索引对应使用个数列表
|
| | | IsDouble = 0 #(BYTE IsDouble)//是否双倍强化
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC4
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.IndexCount):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.IndexList.append(value)
|
| | | for i in range(self.IndexCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.IndexUseCountList.append(value)
|
| | | self.IsDouble,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC4
|
| | | self.EquipIndex = 0
|
| | | self.IndexCount = 0
|
| | | self.IndexList = list()
|
| | | self.IndexUseCountList = list()
|
| | | self.IsDouble = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1 * self.IndexCount
|
| | | length += 4 * self.IndexCount
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.EquipIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.IndexCount)
|
| | | for i in range(self.IndexCount):
|
| | | data = CommFunc.WriteBYTE(data, self.IndexList[i])
|
| | | for i in range(self.IndexCount):
|
| | | data = CommFunc.WriteDWORD(data, self.IndexUseCountList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.IsDouble)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EquipIndex:%d,
|
| | | IndexCount:%d,
|
| | | IndexList:%s,
|
| | | IndexUseCountList:%s,
|
| | | IsDouble:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.EquipIndex,
|
| | | self.IndexCount,
|
| | | "...",
|
| | | "...",
|
| | | self.IsDouble
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMDogzEquipPlus=tagCMDogzEquipPlus()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipPlus.Head.Cmd,m_NAtagCMDogzEquipPlus.Head.SubCmd))] = m_NAtagCMDogzEquipPlus
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C1 神兽卸下装备 #tagCMDogzUnEquipItem
|
| | |
|
| | | class tagCMDogzUnEquipItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("DogzID", c_ubyte), # 神兽ID
|
| | | ("EquipPlace", c_ubyte), #卸下的装备位, 0代表卸下全部
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | 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 = 0xA5
|
| | | self.SubCmd = 0xC1
|
| | | self.DogzID = 0
|
| | | self.EquipPlace = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMDogzUnEquipItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 C1 神兽卸下装备 //tagCMDogzUnEquipItem:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | DogzID:%d,
|
| | | EquipPlace:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.DogzID,
|
| | | self.EquipPlace
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMDogzUnEquipItem=tagCMDogzUnEquipItem()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzUnEquipItem.Cmd,m_NAtagCMDogzUnEquipItem.SubCmd))] = m_NAtagCMDogzUnEquipItem
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C5 装备部位升星 #tagCMEquipPartStarUp
|
| | |
|
| | | class tagCMEquipPartStarUp(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 32 法器升级 #tagCMFaQiLVUp
|
| | |
|
| | | class tagCMFaQiLVUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("UseItemCnt", c_ushort), #消耗材料个数
|
| | | ("IsAutoBuy", c_ubyte), #是否自动购买
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x32
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x32
|
| | | self.UseItemCnt = 0
|
| | | self.IsAutoBuy = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMFaQiLVUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 32 法器升级 //tagCMFaQiLVUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | UseItemCnt:%d,
|
| | | IsAutoBuy:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.UseItemCnt,
|
| | | self.IsAutoBuy
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMFaQiLVUp=tagCMFaQiLVUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFaQiLVUp.Cmd,m_NAtagCMFaQiLVUp.SubCmd))] = m_NAtagCMFaQiLVUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 41 领取投资理财回报 #tagCMGetInvestReward
|
| | |
|
| | | class tagCMGetInvestReward(Structure):
|
| | |
| | |
|
| | | m_NAtagCMGoldInvest=tagCMGoldInvest()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGoldInvest.Cmd,m_NAtagCMGoldInvest.SubCmd))] = m_NAtagCMGoldInvest
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 34 炼体突破 #tagCMLianTiLVUp
|
| | |
|
| | | class tagCMLianTiLVUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x34
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x34
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMLianTiLVUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 34 炼体突破 //tagCMLianTiLVUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMLianTiLVUp=tagCMLianTiLVUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiLVUp.Cmd,m_NAtagCMLianTiLVUp.SubCmd))] = m_NAtagCMLianTiLVUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 33 炼体提升 #tagCMLianTiUp
|
| | |
|
| | | class tagCMLianTiUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("UseItemCnt", c_int), #消耗材料个数
|
| | | ("IsAutoBuy", c_ubyte), #是否自动购买
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x33
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA5
|
| | | self.SubCmd = 0x33
|
| | | self.UseItemCnt = 0
|
| | | self.IsAutoBuy = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMLianTiUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 33 炼体提升 //tagCMLianTiUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | UseItemCnt:%d,
|
| | | IsAutoBuy:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.UseItemCnt,
|
| | | self.IsAutoBuy
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMLianTiUp=tagCMLianTiUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLianTiUp.Cmd,m_NAtagCMLianTiUp.SubCmd))] = m_NAtagCMLianTiUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 07 点赞仙宫 #tagCGLikeXiangong
|
| | |
|
| | | class tagCGLikeXiangong(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("XiangongID", c_ushort), # 仙宫ID,为0时代表每日的仙宫点赞
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA9
|
| | | self.SubCmd = 0x07
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA9
|
| | | self.SubCmd = 0x07
|
| | | self.XiangongID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGLikeXiangong)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A9 07 点赞仙宫 //tagCGLikeXiangong:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | XiangongID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.XiangongID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGLikeXiangong=tagCGLikeXiangong()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGLikeXiangong.Cmd,m_NAtagCGLikeXiangong.SubCmd))] = m_NAtagCGLikeXiangong
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 A5 查看竞技场对战玩家最新信息 #tagCGQueryArenaBattlePlayer
|
| | |
|
| | | class tagCGQueryArenaBattlePlayer(Structure):
|
| | |
| | |
|
| | | m_NAtagCGQueryRecommendFriends=tagCGQueryRecommendFriends()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryRecommendFriends.Cmd,m_NAtagCGQueryRecommendFriends.SubCmd))] = m_NAtagCGQueryRecommendFriends
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 06 查看仙宫仙名录 #tagCGQueryXiangongRecPlayers
|
| | |
|
| | | class tagCGQueryXiangongRecPlayers(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("XiangongID", c_ushort), # 仙宫ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA9
|
| | | self.SubCmd = 0x06
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xA9
|
| | | self.SubCmd = 0x06
|
| | | self.XiangongID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGQueryXiangongRecPlayers)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A9 06 查看仙宫仙名录 //tagCGQueryXiangongRecPlayers:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | XiangongID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.XiangongID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGQueryXiangongRecPlayers=tagCGQueryXiangongRecPlayers()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGQueryXiangongRecPlayers.Cmd,m_NAtagCGQueryXiangongRecPlayers.SubCmd))] = m_NAtagCGQueryXiangongRecPlayers
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 11 激活功能系统特权奖励 #tagCMActivateFuncSysPrivilege
|
| | |
|
| | | class tagCMActivateFuncSysPrivilege(Structure):
|
| | | Head = tagHead()
|
| | | ActivateCount = 0 #(BYTE ActivateCount)// 激活个数
|
| | | ActivateFuncSysIDList = list() #(vector<BYTE> ActivateFuncSysIDList)// 激活功能系统ID列表,全部激活则需要发所有ID列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x11
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ActivateCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.ActivateCount):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.ActivateFuncSysIDList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x11
|
| | | self.ActivateCount = 0
|
| | | self.ActivateFuncSysIDList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1 * self.ActivateCount
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ActivateCount)
|
| | | for i in range(self.ActivateCount):
|
| | | data = CommFunc.WriteBYTE(data, self.ActivateFuncSysIDList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ActivateCount:%d,
|
| | | ActivateFuncSysIDList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ActivateCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMActivateFuncSysPrivilege=tagCMActivateFuncSysPrivilege()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMActivateFuncSysPrivilege.Head.Cmd,m_NAtagCMActivateFuncSysPrivilege.Head.SubCmd))] = m_NAtagCMActivateFuncSysPrivilege
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 06 玩家加点 #tagCMAddPoint
|
| | |
|
| | | class tagCMAddPoint(Structure):
|
| | |
| | |
|
| | | m_NAtagCSFuncPresetUpdName=tagCSFuncPresetUpdName()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSFuncPresetUpdName.Head.Cmd,m_NAtagCSFuncPresetUpdName.Head.SubCmd))] = m_NAtagCSFuncPresetUpdName
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 12 领取功能系统特权奖励 #tagCMGetFuncSysPrivilegeAward
|
| | |
|
| | | class tagCMGetFuncSysPrivilegeAward(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("FuncSysID", c_ubyte), # 功能系统ID
|
| | | ("DayNum", c_ubyte), # 第X天,1为第1天
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x12
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x12
|
| | | self.FuncSysID = 0
|
| | | self.DayNum = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMGetFuncSysPrivilegeAward)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 12 领取功能系统特权奖励 //tagCMGetFuncSysPrivilegeAward:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | FuncSysID:%d,
|
| | | DayNum:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.FuncSysID,
|
| | | self.DayNum
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMGetFuncSysPrivilegeAward=tagCMGetFuncSysPrivilegeAward()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGetFuncSysPrivilegeAward.Cmd,m_NAtagCMGetFuncSysPrivilegeAward.SubCmd))] = m_NAtagCMGetFuncSysPrivilegeAward
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 19 提升魅力等级 #tagCGCharmLVUp
|
| | |
|
| | | class tagCGCharmLVUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x19
|
| | | 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 = 0x19
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGCharmLVUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 19 提升魅力等级 //tagCGCharmLVUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGCharmLVUp=tagCGCharmLVUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmLVUp.Cmd,m_NAtagCGCharmLVUp.SubCmd))] = m_NAtagCGCharmLVUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 09 魅力贡献榜查看 #tagCGCharmOfferBillboardQuery
|
| | |
|
| | | class tagCGCharmOfferBillboardQuery(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int), # 魅力玩家ID
|
| | | ("QueryType", c_ubyte), # 查看类型: 1-总榜,2-周榜,3-日榜
|
| | | ("QueryCount", c_ubyte), # 查看名次数量,最大255
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x09
|
| | | 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 = 0x09
|
| | | self.PlayerID = 0
|
| | | self.QueryType = 0
|
| | | self.QueryCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGCharmOfferBillboardQuery)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 09 魅力贡献榜查看 //tagCGCharmOfferBillboardQuery:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | PlayerID:%d,
|
| | | QueryType:%d,
|
| | | QueryCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.PlayerID,
|
| | | self.QueryType,
|
| | | self.QueryCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGCharmOfferBillboardQuery=tagCGCharmOfferBillboardQuery()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCharmOfferBillboardQuery.Cmd,m_NAtagCGCharmOfferBillboardQuery.SubCmd))] = m_NAtagCGCharmOfferBillboardQuery
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 17 情戒解锁 #tagCMLoveRingUnlock
|
| | |
|
| | | class tagCMLoveRingUnlock(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x17
|
| | | 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 = 0x17
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMLoveRingUnlock)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 17 情戒解锁 //tagCMLoveRingUnlock:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMLoveRingUnlock=tagCMLoveRingUnlock()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUnlock.Cmd,m_NAtagCMLoveRingUnlock.SubCmd))] = m_NAtagCMLoveRingUnlock
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 18 情戒升级 #tagCMLoveRingUp
|
| | |
|
| | | class tagCMLoveRingUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("UseItemCnt", c_int), #消耗材料个数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x18
|
| | | 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 = 0x18
|
| | | self.UseItemCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMLoveRingUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 18 情戒升级 //tagCMLoveRingUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | UseItemCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.UseItemCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMLoveRingUp=tagCMLoveRingUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoveRingUp.Cmd,m_NAtagCMLoveRingUp.SubCmd))] = m_NAtagCMLoveRingUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 15 离婚 #tagCMMarryBreak
|
| | |
|
| | | class tagCMMarryBreak(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("BreakType", c_ubyte), # 0-和平离婚;1-强制离婚
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x15
|
| | | 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 = 0x15
|
| | | self.BreakType = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMMarryBreak)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 15 离婚 //tagCMMarryBreak:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | BreakType:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.BreakType
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMMarryBreak=tagCMMarryBreak()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBreak.Cmd,m_NAtagCMMarryBreak.SubCmd))] = m_NAtagCMMarryBreak
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 16 和平离婚回应 #tagGCMarryBreakResponse
|
| | |
|
| | | class tagGCMarryBreakResponse(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("IsOK", c_ubyte), # 是否同意,0-否,1-是
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x16
|
| | | 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 = 0x16
|
| | | self.IsOK = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCMarryBreakResponse)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 16 和平离婚回应 //tagGCMarryBreakResponse:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | IsOK:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.IsOK
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCMarryBreakResponse=tagGCMarryBreakResponse()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMarryBreakResponse.Cmd,m_NAtagGCMarryBreakResponse.SubCmd))] = m_NAtagGCMarryBreakResponse
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 14 购买婚礼烟花 #tagCMMarryBuyFireworks
|
| | |
|
| | | class tagCMMarryBuyFireworks(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerIDA", c_int), # 喜糖所属玩家IDA
|
| | | ("PlayerIDB", c_int), # 喜糖所属玩家IDB
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x14
|
| | | 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 = 0x14
|
| | | self.PlayerIDA = 0
|
| | | self.PlayerIDB = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMMarryBuyFireworks)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 14 购买婚礼烟花 //tagCMMarryBuyFireworks:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | PlayerIDA:%d,
|
| | | PlayerIDB:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.PlayerIDA,
|
| | | self.PlayerIDB
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMMarryBuyFireworks=tagCMMarryBuyFireworks()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryBuyFireworks.Cmd,m_NAtagCMMarryBuyFireworks.SubCmd))] = m_NAtagCMMarryBuyFireworks
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 13 吃喜糖 #tagCMMarryEatCandy
|
| | |
|
| | | class tagCMMarryEatCandy(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerIDA", c_int), # 喜糖所属玩家IDA
|
| | | ("PlayerIDB", c_int), # 喜糖所属玩家IDB
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x13
|
| | | 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 = 0x13
|
| | | self.PlayerIDA = 0
|
| | | self.PlayerIDB = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMMarryEatCandy)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 13 吃喜糖 //tagCMMarryEatCandy:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | PlayerIDA:%d,
|
| | | PlayerIDB:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.PlayerIDA,
|
| | | self.PlayerIDB
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMMarryEatCandy=tagCMMarryEatCandy()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryEatCandy.Cmd,m_NAtagCMMarryEatCandy.SubCmd))] = m_NAtagCMMarryEatCandy
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 11 提亲 #tagCMMarryReq
|
| | |
|
| | | class tagCMMarryReq(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("TagPlayerID", c_int), # 目标玩家ID
|
| | | ("BridePriceID", c_ubyte), # 聘礼ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x11
|
| | | 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 = 0x11
|
| | | self.TagPlayerID = 0
|
| | | self.BridePriceID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMMarryReq)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 11 提亲 //tagCMMarryReq:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | TagPlayerID:%d,
|
| | | BridePriceID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.TagPlayerID,
|
| | | self.BridePriceID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMMarryReq=tagCMMarryReq()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMarryReq.Cmd,m_NAtagCMMarryReq.SubCmd))] = m_NAtagCMMarryReq
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 12 提亲回应 #tagCGMarryResponse
|
| | |
|
| | | class tagCGMarryResponse(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ReqPlayerID", c_int), # 提亲的玩家ID
|
| | | ("IsOK", c_ubyte), # 是否同意,0-否,1-是
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x12
|
| | | 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 = 0x12
|
| | | self.ReqPlayerID = 0
|
| | | self.IsOK = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGMarryResponse)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 12 提亲回应 //tagCGMarryResponse:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ReqPlayerID:%d,
|
| | | IsOK:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ReqPlayerID,
|
| | | self.IsOK
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGMarryResponse=tagCGMarryResponse()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMarryResponse.Cmd,m_NAtagCGMarryResponse.SubCmd))] = m_NAtagCGMarryResponse
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B3 10 送礼物 #tagCMSendGifts
|
| | |
|
| | | class tagCMSendGifts(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("TagPlayerID", c_int), # 目标玩家ID
|
| | | ("GiftNum", c_ushort), # 赠送礼物编号
|
| | | ("GiftCount", c_int), # 赠送礼物数量
|
| | | ("IsAutoBuy", c_ubyte), # 是否自动购买
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB3
|
| | | self.SubCmd = 0x10
|
| | | 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 = 0x10
|
| | | self.TagPlayerID = 0
|
| | | self.GiftNum = 0
|
| | | self.GiftCount = 0
|
| | | self.IsAutoBuy = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMSendGifts)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B3 10 送礼物 //tagCMSendGifts:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | TagPlayerID:%d,
|
| | | GiftNum:%d,
|
| | | GiftCount:%d,
|
| | | IsAutoBuy:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.TagPlayerID,
|
| | | self.GiftNum,
|
| | | self.GiftCount,
|
| | | self.IsAutoBuy
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMSendGifts=tagCMSendGifts()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSendGifts.Cmd,m_NAtagCMSendGifts.SubCmd))] = m_NAtagCMSendGifts
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B3 04 加入黑名单 #tagCGAddBlackList
|
| | |
|
| | | class tagCGAddBlackList(Structure):
|
| | |
| | |
|
| | | m_NAtagCMUseSkillEx=tagCMUseSkillEx()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMUseSkillEx.Cmd,m_NAtagCMUseSkillEx.SubCmd))] = m_NAtagCMUseSkillEx
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B4 0D 战斗印记 #tagCMYinji
|
| | |
|
| | | class tagCMYinji(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Count", c_ubyte), |
| | | ("Type", c_ubyte), # 0 加,1减
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB4
|
| | | self.SubCmd = 0x0D
|
| | | 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 = 0xB4
|
| | | self.SubCmd = 0x0D
|
| | | self.Count = 0
|
| | | self.Type = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMYinji)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B4 0D 战斗印记 //tagCMYinji:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Count:%d,
|
| | | Type:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Count,
|
| | | self.Type
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMYinji=tagCMYinji()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMYinji.Cmd,m_NAtagCMYinji.SubCmd))] = m_NAtagCMYinji
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | | m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 27 仙宫新晋玩家信息 #tagGCXiangongNewPlayerInfo
|
| | |
|
| | | class tagGCXiangongNewPlayer(Structure):
|
| | | AddTime = 0 #(DWORD AddTime)// 新晋时间戳
|
| | | ServerID = 0 #(DWORD ServerID)
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | NameLen = 0 #(BYTE NameLen)
|
| | | Name = "" #(String Name)// 玩家名,size = NameLen
|
| | | LV = 0 #(WORD LV)// 玩家等级
|
| | | Job = 0 #(BYTE Job)// 玩家职业
|
| | | RealmLV = 0 #(WORD RealmLV)// 玩家境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | EquipShowSwitch = 0 #(DWORD EquipShowSwitch)
|
| | | EquipShowIDCount = 0 #(BYTE EquipShowIDCount)
|
| | | EquipShowID = list() #(vector<DWORD> EquipShowID)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EquipShowSwitch,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.EquipShowIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.EquipShowIDCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.EquipShowID.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AddTime = 0
|
| | | self.ServerID = 0
|
| | | self.PlayerID = 0
|
| | | self.NameLen = 0
|
| | | self.Name = ""
|
| | | self.LV = 0
|
| | | self.Job = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.EquipShowSwitch = 0
|
| | | self.EquipShowIDCount = 0
|
| | | self.EquipShowID = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.Name)
|
| | | length += 2
|
| | | length += 1
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += 4 * self.EquipShowIDCount
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.AddTime)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteBYTE(data, self.NameLen)
|
| | | data = CommFunc.WriteString(data, self.NameLen, self.Name)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.EquipShowSwitch)
|
| | | data = CommFunc.WriteBYTE(data, self.EquipShowIDCount)
|
| | | for i in range(self.EquipShowIDCount):
|
| | | data = CommFunc.WriteDWORD(data, self.EquipShowID[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AddTime:%d,
|
| | | ServerID:%d,
|
| | | PlayerID:%d,
|
| | | NameLen:%d,
|
| | | Name:%s,
|
| | | LV:%d,
|
| | | Job:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | EquipShowSwitch:%d,
|
| | | EquipShowIDCount:%d,
|
| | | EquipShowID:%s
|
| | | '''\
|
| | | %(
|
| | | self.AddTime,
|
| | | self.ServerID,
|
| | | self.PlayerID,
|
| | | self.NameLen,
|
| | | self.Name,
|
| | | self.LV,
|
| | | self.Job,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.EquipShowSwitch,
|
| | | self.EquipShowIDCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCXiangongNewPlayerInfo(Structure):
|
| | | Head = tagHead()
|
| | | XiangongID = 0 #(WORD XiangongID)// 仙宫ID
|
| | | NewPlayerCount = 0 #(BYTE NewPlayerCount)
|
| | | NewPlayerList = list() #(vector<tagGCXiangongNewPlayer> NewPlayerList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA9
|
| | | self.Head.SubCmd = 0x27
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.NewPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.NewPlayerCount):
|
| | | temNewPlayerList = tagGCXiangongNewPlayer()
|
| | | _pos = temNewPlayerList.ReadData(_lpData, _pos)
|
| | | self.NewPlayerList.append(temNewPlayerList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA9
|
| | | self.Head.SubCmd = 0x27
|
| | | self.XiangongID = 0
|
| | | self.NewPlayerCount = 0
|
| | | self.NewPlayerList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.NewPlayerCount):
|
| | | length += self.NewPlayerList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.XiangongID)
|
| | | data = CommFunc.WriteBYTE(data, self.NewPlayerCount)
|
| | | for i in range(self.NewPlayerCount):
|
| | | data = CommFunc.WriteString(data, self.NewPlayerList[i].GetLength(), self.NewPlayerList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | XiangongID:%d,
|
| | | NewPlayerCount:%d,
|
| | | NewPlayerList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.XiangongID,
|
| | | self.NewPlayerCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCXiangongNewPlayerInfo=tagGCXiangongNewPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongNewPlayerInfo.Head.Cmd,m_NAtagGCXiangongNewPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongNewPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 28 仙宫仙名录玩家信息 #tagGCXiangongRecPlayerInfo
|
| | |
|
| | | class tagGCXiangongRecPlayer(Structure):
|
| | | AddTime = 0 #(DWORD AddTime)// 新晋时间戳
|
| | | ServerID = 0 #(DWORD ServerID)
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | NameLen = 0 #(BYTE NameLen)
|
| | | Name = "" #(String Name)// 玩家名,size = NameLen
|
| | | LV = 0 #(WORD LV)// 玩家等级
|
| | | Job = 0 #(BYTE Job)// 玩家职业
|
| | | RealmLV = 0 #(WORD RealmLV)// 玩家境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.AddTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AddTime = 0
|
| | | self.ServerID = 0
|
| | | self.PlayerID = 0
|
| | | self.NameLen = 0
|
| | | self.Name = ""
|
| | | self.LV = 0
|
| | | self.Job = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.Name)
|
| | | length += 2
|
| | | length += 1
|
| | | length += 2
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.AddTime)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteBYTE(data, self.NameLen)
|
| | | data = CommFunc.WriteString(data, self.NameLen, self.Name)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AddTime:%d,
|
| | | ServerID:%d,
|
| | | PlayerID:%d,
|
| | | NameLen:%d,
|
| | | Name:%s,
|
| | | LV:%d,
|
| | | Job:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FacePic:%d
|
| | | '''\
|
| | | %(
|
| | | self.AddTime,
|
| | | self.ServerID,
|
| | | self.PlayerID,
|
| | | self.NameLen,
|
| | | self.Name,
|
| | | self.LV,
|
| | | self.Job,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FacePic
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCXiangongRecPlayerInfo(Structure):
|
| | | Head = tagHead()
|
| | | XiangongID = 0 #(WORD XiangongID)// 仙宫ID
|
| | | RecPlayerCount = 0 #(BYTE RecPlayerCount)
|
| | | RecPlayerList = list() #(vector<tagGCXiangongRecPlayer> RecPlayerList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA9
|
| | | self.Head.SubCmd = 0x28
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.XiangongID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RecPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.RecPlayerCount):
|
| | | temRecPlayerList = tagGCXiangongRecPlayer()
|
| | | _pos = temRecPlayerList.ReadData(_lpData, _pos)
|
| | | self.RecPlayerList.append(temRecPlayerList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA9
|
| | | self.Head.SubCmd = 0x28
|
| | | self.XiangongID = 0
|
| | | self.RecPlayerCount = 0
|
| | | self.RecPlayerList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.RecPlayerCount):
|
| | | length += self.RecPlayerList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.XiangongID)
|
| | | data = CommFunc.WriteBYTE(data, self.RecPlayerCount)
|
| | | for i in range(self.RecPlayerCount):
|
| | | data = CommFunc.WriteString(data, self.RecPlayerList[i].GetLength(), self.RecPlayerList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | XiangongID:%d,
|
| | | RecPlayerCount:%d,
|
| | | RecPlayerList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.XiangongID,
|
| | | self.RecPlayerCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCXiangongRecPlayerInfo=tagGCXiangongRecPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCXiangongRecPlayerInfo.Head.Cmd,m_NAtagGCXiangongRecPlayerInfo.Head.SubCmd))] = m_NAtagGCXiangongRecPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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 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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | ("list", "AwardItemList", 0),
|
| | | ),
|
| | |
|
| | | "LianTi":(
|
| | | ("BYTE", "LianTiLV", 1),
|
| | | ("list", "FixedAttrType", 0),
|
| | | ("list", "FixedAttrValue", 0),
|
| | | ("list", "PlusAttrType", 0),
|
| | | ("list", "PlusAttrRate", 0),
|
| | | ("list", "EatItemAttrType", 0),
|
| | | ("list", "EatItemAttrValue", 0),
|
| | | ("WORD", "NeedEatCount", 0),
|
| | | ("WORD", "EatPerCount", 0),
|
| | | ("list", "LVUpCostItemInfo", 0),
|
| | | ("DWORD", "ActivateSkillID", 0),
|
| | | ),
|
| | |
|
| | | "FuncConfig":(
|
| | | ("char", "Key", 1),
|
| | | ("char", "Numerical1", 0),
|
| | |
| | | ("dict", "LVLegendAttrLibNumInfo", 0),
|
| | | ),
|
| | |
|
| | | "Dogz":(
|
| | | ("BYTE", "DogzID", 1),
|
| | | ("list", "BaseAttrTypes", 0),
|
| | | ("list", "BaseAttrValues", 0),
|
| | | ("list", "HelpBattleSkills", 0),
|
| | | ("DWORD", "FightPowerEx", 0),
|
| | | ("list", "EquipPlaceColorList", 0),
|
| | | ("list", "HelpBattleNotify", 0),
|
| | | ),
|
| | |
|
| | | "DogzEquipPlus":(
|
| | | ("BYTE", "EquipPlace", 1),
|
| | | ("BYTE", "PlusLV", 1),
|
| | | ("list", "PlusAttrTypes", 0),
|
| | | ("list", "PlusAttrValues", 0),
|
| | | ("DWORD", "PlusLVUPTotalExp", 0),
|
| | | ),
|
| | |
|
| | | "EquipWash":(
|
| | | ("BYTE", "WashType", 1),
|
| | | ("BYTE", "WashLV", 1),
|
| | |
| | | ("WORD", "LV", 1),
|
| | | ("DWORD", "UpNeedExp", 0),
|
| | | ("dict", "Attr", 0),
|
| | | ),
|
| | |
|
| | | "FaQiLVUp":(
|
| | | ("BYTE", "FaQiLV", 1),
|
| | | ("WORD", "NeedEatCount", 0),
|
| | | ("list", "LVAttrType", 0),
|
| | | ("list", "LVAttrValue", 0),
|
| | | ("list", "UpItemAttrType", 0),
|
| | | ("list", "UpItemAttrValue", 0),
|
| | | ("DWORD", "UpEatItemPerCount", 0),
|
| | | ),
|
| | |
|
| | | "HorseClass":(
|
| | |
| | | ("BYTE", "QualityLV", 1),
|
| | | ),
|
| | |
|
| | | "LoveGift":(
|
| | | ("BYTE", "GiftNum", 1),
|
| | | ("DWORD", "GiftItemID", 0),
|
| | | ("BYTE", "AllowBatch", 0),
|
| | | ),
|
| | |
|
| | | "Marry":(
|
| | | ("BYTE", "BridePriceID", 1),
|
| | | ("list", "CostMoneyInfo", 0),
|
| | | ),
|
| | |
|
| | | "LoveRing":(
|
| | | ("BYTE", "RingClassLV", 1),
|
| | | ("BYTE", "RingStarLV", 1),
|
| | | ("list", "CoupleAttrType", 0),
|
| | | ("list", "CoupleAttrValue", 0),
|
| | | ("list", "StarAttrType", 0),
|
| | | ("list", "StarAttrValue", 0),
|
| | | ("list", "UpItemAttrType", 0),
|
| | | ("list", "UpItemAttrValue", 0),
|
| | | ("DWORD", "NeedEatCount", 0),
|
| | | ("DWORD", "UpEatItemPerCount", 0),
|
| | | ),
|
| | |
|
| | | "LoveCharm":(
|
| | | ("BYTE", "CharmLV", 1),
|
| | | ("DWORD", "UpNeedCharm", 0),
|
| | | ("list", "LVAttrType", 0),
|
| | | ("list", "LVAttrValue", 0),
|
| | | ("list", "LVAwardItemInfo", 0),
|
| | | ),
|
| | |
|
| | | "HorsePetSkin":(
|
| | | ("BYTE", "Type", 1),
|
| | | ("DWORD", "ID", 1),
|
| | |
| | | ("DWORD", "NeedExp", 0),
|
| | | ("dict", "AttrInfo", 0),
|
| | | ("BYTE", "SkinIndex", 0),
|
| | | ),
|
| | |
|
| | | "FuncSysPrivilege":(
|
| | | ("BYTE", "FuncSysID", 1),
|
| | | ("BYTE", "DayNum", 0),
|
| | | ("list", "DayAwardItemInfo", 0),
|
| | | ),
|
| | |
|
| | | "HistoryRechargeAward":(
|
| | |
| | | ("list", "FreeRewardItemList", 0),
|
| | | ("list", "ZLRewardItemList", 0),
|
| | | ("list", "ZLRewardItemListH", 0),
|
| | | ),
|
| | |
|
| | | "Xiangong":(
|
| | | ("WORD", "XiangongID", 1),
|
| | | ),
|
| | |
|
| | | "TiandaoTree":(
|
| | | ("WORD", "AwardIndex", 1),
|
| | | ("DWORD", "NeedQiyun", 0),
|
| | | ("list", "AwardItemList", 0),
|
| | | ),
|
| | |
|
| | | "TreeLV":(
|
| | |
| | | def GetNeedValueList(self): return self.attrTuple[3] # 所需值列表 list
|
| | | def GetAwardItemList(self): return self.attrTuple[4] # 奖励物品列表 list |
| | | |
| | | # 境界炼体属性表 |
| | | class IPY_LianTi(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetLianTiLV(self): return self.attrTuple[0] # 炼体等级 BYTE
|
| | | def GetFixedAttrType(self): return self.attrTuple[1] # 固定属性类型(非累积) list
|
| | | def GetFixedAttrValue(self): return self.attrTuple[2] # 固定属性值(非累积) list
|
| | | def GetPlusAttrType(self): return self.attrTuple[3] # 增强属性类型(非累积) list
|
| | | def GetPlusAttrRate(self): return self.attrTuple[4] # 增强属性万分率(非累积) list
|
| | | def GetEatItemAttrType(self): return self.attrTuple[5] # 每x个培养丹增加属性类型,x=UpEatItemPerCount list
|
| | | def GetEatItemAttrValue(self): return self.attrTuple[6] # 每x个培养丹增加属性值,x=UpEatItemPerCount list
|
| | | def GetNeedEatCount(self): return self.attrTuple[7] # 升级所需个数(非累计) WORD
|
| | | def GetEatPerCount(self): return self.attrTuple[8] # 每次培养消耗x个 WORD
|
| | | def GetLVUpCostItemInfo(self): return self.attrTuple[9] # 突破等级道具ID|个数 list
|
| | | def GetActivateSkillID(self): return self.attrTuple[10] # 激活技能ID DWORD |
| | | |
| | | # 功能配置表格 |
| | | class IPY_FuncConfig(): |
| | | |
| | |
| | | def GetItemQuality(self): return self.attrTuple[4] # 物品星级 BYTE
|
| | | def GetLVLegendAttrLibNumInfo(self): return self.attrTuple[5] # 属性ID等级段对应数值库编号 {属性ID:{等级:库编号, ...}} dict |
| | | |
| | | # 神兽表 |
| | | class IPY_Dogz(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetDogzID(self): return self.attrTuple[0] # 神兽ID BYTE
|
| | | def GetBaseAttrTypes(self): return self.attrTuple[1] # 基础属性类型列表 list
|
| | | def GetBaseAttrValues(self): return self.attrTuple[2] # 基础属性值列表 list
|
| | | def GetHelpBattleSkills(self): return self.attrTuple[3] # 助战技能ID列表 list
|
| | | def GetFightPowerEx(self): return self.attrTuple[4] # 助战附加战力 DWORD
|
| | | def GetEquipPlaceColorList(self): return self.attrTuple[5] # 穿戴装备颜色限制 list
|
| | | def GetHelpBattleNotify(self): return self.attrTuple[6] # 助战广播 ["广播key",[参数1,参数2,...],广播CD分钟] list |
| | | |
| | | # 神兽强化表 |
| | | class IPY_DogzEquipPlus(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetEquipPlace(self): return self.attrTuple[0] # 装备位 BYTE
|
| | | def GetPlusLV(self): return self.attrTuple[1] # 强化等级 BYTE
|
| | | def GetPlusAttrTypes(self): return self.attrTuple[2] # 强化属性类型列表 list
|
| | | def GetPlusAttrValues(self): return self.attrTuple[3] # 强化属性值列表 list
|
| | | def GetPlusLVUPTotalExp(self): return self.attrTuple[4] # 升级所需累计熟练度总值 DWORD |
| | | |
| | | # 洗练表 |
| | | class IPY_EquipWash(): |
| | | |
| | |
| | | def GetLV(self): return self.attrTuple[0] # 等级 WORD
|
| | | def GetUpNeedExp(self): return self.attrTuple[1] # 升级所需经验数 DWORD
|
| | | def GetAttr(self): return self.attrTuple[2] # 属性加成 dict |
| | | |
| | | # 法器升级表 |
| | | class IPY_FaQiLVUp(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetFaQiLV(self): return self.attrTuple[0] # 法器等级 BYTE
|
| | | def GetNeedEatCount(self): return self.attrTuple[1] # 升级所需个数(非累计) WORD
|
| | | def GetLVAttrType(self): return self.attrTuple[2] # 每级额外属性类型(非累积) list
|
| | | def GetLVAttrValue(self): return self.attrTuple[3] # 每级额外属性值(非累积) list
|
| | | def GetUpItemAttrType(self): return self.attrTuple[4] # 每x个培养丹增加属性类型,x=UpEatItemPerCount list
|
| | | def GetUpItemAttrValue(self): return self.attrTuple[5] # 每x个培养丹增加属性值,x=UpEatItemPerCount list
|
| | | def GetUpEatItemPerCount(self): return self.attrTuple[6] # 每次培养消耗x个 DWORD |
| | | |
| | | # 坐骑阶级表 |
| | | class IPY_HorseClass(): |
| | |
| | | def GetPointID(self): return self.attrTuple[1] # 灵根ID DWORD
|
| | | def GetQualityLV(self): return self.attrTuple[2] # 品级 BYTE |
| | | |
| | | # 情缘礼物表 |
| | | class IPY_LoveGift(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetGiftNum(self): return self.attrTuple[0] # 聘礼ID BYTE
|
| | | def GetGiftItemID(self): return self.attrTuple[1] # 物品ID DWORD
|
| | | def GetAllowBatch(self): return self.attrTuple[2] # 是否允许批量赠送 BYTE |
| | | |
| | | # 情缘提亲表 |
| | | class IPY_Marry(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetBridePriceID(self): return self.attrTuple[0] # 聘礼ID BYTE
|
| | | def GetCostMoneyInfo(self): return self.attrTuple[1] # 消耗货币类型|数值 list |
| | | |
| | | # 情缘情戒表 |
| | | class IPY_LoveRing(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetRingClassLV(self): return self.attrTuple[0] # 情戒阶级 BYTE
|
| | | def GetRingStarLV(self): return self.attrTuple[1] # 情戒星级 BYTE
|
| | | def GetCoupleAttrType(self): return self.attrTuple[2] # 仙侣属性类型(非累积) list
|
| | | def GetCoupleAttrValue(self): return self.attrTuple[3] # 仙侣属性值(非累积) list
|
| | | def GetStarAttrType(self): return self.attrTuple[4] # 星级额外属性类型(非累积) list
|
| | | def GetStarAttrValue(self): return self.attrTuple[5] # 星级额外属性值(非累积) list
|
| | | def GetUpItemAttrType(self): return self.attrTuple[6] # 每x个培养丹增加属性类型,x=UpEatItemPerCount list
|
| | | def GetUpItemAttrValue(self): return self.attrTuple[7] # 每x个培养丹增加属性值,x=UpEatItemPerCount list
|
| | | def GetNeedEatCount(self): return self.attrTuple[8] # 升级所需个数(非累计) DWORD
|
| | | def GetUpEatItemPerCount(self): return self.attrTuple[9] # 每次培养消耗x个 DWORD |
| | | |
| | | # 情缘魅力属性表 |
| | | class IPY_LoveCharm(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetCharmLV(self): return self.attrTuple[0] # 魅力等级 BYTE
|
| | | def GetUpNeedCharm(self): return self.attrTuple[1] # 升下级所需总魅力 DWORD
|
| | | def GetLVAttrType(self): return self.attrTuple[2] # 属性类型 list
|
| | | def GetLVAttrValue(self): return self.attrTuple[3] # 总属性值 list
|
| | | def GetLVAwardItemInfo(self): return self.attrTuple[4] # 等级物品奖励[[物品ID,个数,是否拍品], ...] list |
| | | |
| | | # 骑宠觉醒表 |
| | | class IPY_HorsePetSkin(): |
| | | |
| | |
| | | def GetNeedExp(self): return self.attrTuple[3] # 升级需要经验 DWORD
|
| | | def GetAttrInfo(self): return self.attrTuple[4] # 属性 dict
|
| | | def GetSkinIndex(self): return self.attrTuple[5] # 外观 BYTE |
| | | |
| | | # 功能特权奖励表 |
| | | class IPY_FuncSysPrivilege(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetFuncSysID(self): return self.attrTuple[0] # 功能系统ID BYTE
|
| | | def GetDayNum(self): return self.attrTuple[1] # 第X天 BYTE
|
| | | def GetDayAwardItemInfo(self): return self.attrTuple[2] # 奖励物品信息 [[物品ID,个数,是否拍品], ...] list |
| | | |
| | | # 累计充值奖励表 |
| | | class IPY_HistoryRechargeAward(): |
| | |
| | | def GetFreeRewardItemList(self): return self.attrTuple[3] # 免费奖励物品列表 [[物品ID,个数,是否拍品],...] list
|
| | | def GetZLRewardItemList(self): return self.attrTuple[4] # 战令奖励物品列表 [[物品ID,个数,是否拍品],...] list
|
| | | def GetZLRewardItemListH(self): return self.attrTuple[5] # 高级战令奖励物品列表 [[物品ID,个数,是否拍品],...] list |
| | | |
| | | # 仙宫表 |
| | | class IPY_Xiangong(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetXiangongID(self): return self.attrTuple[0] # 仙宫ID WORD |
| | | |
| | | # 仙宫天道树 |
| | | class IPY_TiandaoTree(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetAwardIndex(self): return self.attrTuple[0] # 奖励索引 WORD
|
| | | def GetNeedQiyun(self): return self.attrTuple[1] # 所需气运值 DWORD
|
| | | def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表 list |
| | | |
| | | # 祝福树 |
| | | class IPY_TreeLV(): |
| | |
| | | self.__LoadFileData("RealmXXZL", onlyCheck)
|
| | | self.__LoadFileData("Realm", onlyCheck)
|
| | | self.__LoadFileData("RealmLVUPTask", onlyCheck)
|
| | | self.__LoadFileData("LianTi", onlyCheck)
|
| | | self.__LoadFileData("FuncConfig", onlyCheck)
|
| | | self.__LoadFileData("FuncOpenLV", onlyCheck)
|
| | | self.__LoadFileData("ItemCompound", onlyCheck)
|
| | |
| | | self.__LoadFileData("EquipLegendAttrType", onlyCheck)
|
| | | self.__LoadFileData("EquipLegendAttrLib", onlyCheck)
|
| | | self.__LoadFileData("EquipLegendAttrValue", onlyCheck)
|
| | | self.__LoadFileData("Dogz", onlyCheck)
|
| | | self.__LoadFileData("DogzEquipPlus", onlyCheck)
|
| | | self.__LoadFileData("EquipWash", onlyCheck)
|
| | | self.__LoadFileData("AttrFruit", onlyCheck)
|
| | | self.__LoadFileData("EquipDecompose", onlyCheck)
|
| | | self.__LoadFileData("FaQiLVUp", onlyCheck)
|
| | | self.__LoadFileData("HorseClass", onlyCheck)
|
| | | self.__LoadFileData("HorseSkin", onlyCheck)
|
| | | self.__LoadFileData("Gubao", onlyCheck)
|
| | |
| | | self.__LoadFileData("ItemWashMax", onlyCheck)
|
| | | self.__LoadFileData("SkillElement", onlyCheck)
|
| | | self.__LoadFileData("LingGenEffect", onlyCheck)
|
| | | self.__LoadFileData("LoveGift", onlyCheck)
|
| | | self.__LoadFileData("Marry", onlyCheck)
|
| | | self.__LoadFileData("LoveRing", onlyCheck)
|
| | | self.__LoadFileData("LoveCharm", onlyCheck)
|
| | | self.__LoadFileData("HorsePetSkin", onlyCheck)
|
| | | self.__LoadFileData("FuncSysPrivilege", onlyCheck)
|
| | | self.__LoadFileData("HistoryRechargeAward", onlyCheck)
|
| | | self.__LoadFileData("CustomAward", onlyCheck)
|
| | | self.__LoadFileData("Zhanling", onlyCheck)
|
| | | self.__LoadFileData("Xiangong", onlyCheck)
|
| | | self.__LoadFileData("TiandaoTree", onlyCheck)
|
| | | self.__LoadFileData("TreeLV", onlyCheck)
|
| | | self.__LoadFileData("LLMJ", onlyCheck)
|
| | | self.__LoadFileData("GoldRushCamp", onlyCheck)
|
| | |
| | | self.CheckLoadData("RealmLVUPTask") |
| | | return self.ipyRealmLVUPTaskCache[index]
|
| | | |
| | | def GetLianTiCount(self): |
| | | self.CheckLoadData("LianTi") |
| | | return self.ipyLianTiLen
|
| | | def GetLianTiByIndex(self, index): |
| | | self.CheckLoadData("LianTi") |
| | | return self.ipyLianTiCache[index]
|
| | | |
| | | def GetFuncConfigCount(self): |
| | | self.CheckLoadData("FuncConfig") |
| | | return self.ipyFuncConfigLen
|
| | |
| | | self.CheckLoadData("EquipLegendAttrValue") |
| | | return self.ipyEquipLegendAttrValueCache[index]
|
| | | |
| | | def GetDogzCount(self): |
| | | self.CheckLoadData("Dogz") |
| | | return self.ipyDogzLen
|
| | | def GetDogzByIndex(self, index): |
| | | self.CheckLoadData("Dogz") |
| | | return self.ipyDogzCache[index]
|
| | | |
| | | def GetDogzEquipPlusCount(self): |
| | | self.CheckLoadData("DogzEquipPlus") |
| | | return self.ipyDogzEquipPlusLen
|
| | | def GetDogzEquipPlusByIndex(self, index): |
| | | self.CheckLoadData("DogzEquipPlus") |
| | | return self.ipyDogzEquipPlusCache[index]
|
| | | |
| | | def GetEquipWashCount(self): |
| | | self.CheckLoadData("EquipWash") |
| | | return self.ipyEquipWashLen
|
| | |
| | | def GetEquipDecomposeByIndex(self, index): |
| | | self.CheckLoadData("EquipDecompose") |
| | | return self.ipyEquipDecomposeCache[index]
|
| | | |
| | | def GetFaQiLVUpCount(self): |
| | | self.CheckLoadData("FaQiLVUp") |
| | | return self.ipyFaQiLVUpLen
|
| | | def GetFaQiLVUpByIndex(self, index): |
| | | self.CheckLoadData("FaQiLVUp") |
| | | return self.ipyFaQiLVUpCache[index]
|
| | | |
| | | def GetHorseClassCount(self): |
| | | self.CheckLoadData("HorseClass") |
| | |
| | | self.CheckLoadData("LingGenEffect") |
| | | return self.ipyLingGenEffectCache[index]
|
| | | |
| | | def GetLoveGiftCount(self): |
| | | self.CheckLoadData("LoveGift") |
| | | return self.ipyLoveGiftLen
|
| | | def GetLoveGiftByIndex(self, index): |
| | | self.CheckLoadData("LoveGift") |
| | | return self.ipyLoveGiftCache[index]
|
| | | |
| | | def GetMarryCount(self): |
| | | self.CheckLoadData("Marry") |
| | | return self.ipyMarryLen
|
| | | def GetMarryByIndex(self, index): |
| | | self.CheckLoadData("Marry") |
| | | return self.ipyMarryCache[index]
|
| | | |
| | | def GetLoveRingCount(self): |
| | | self.CheckLoadData("LoveRing") |
| | | return self.ipyLoveRingLen
|
| | | def GetLoveRingByIndex(self, index): |
| | | self.CheckLoadData("LoveRing") |
| | | return self.ipyLoveRingCache[index]
|
| | | |
| | | def GetLoveCharmCount(self): |
| | | self.CheckLoadData("LoveCharm") |
| | | return self.ipyLoveCharmLen
|
| | | def GetLoveCharmByIndex(self, index): |
| | | self.CheckLoadData("LoveCharm") |
| | | return self.ipyLoveCharmCache[index]
|
| | | |
| | | def GetHorsePetSkinCount(self): |
| | | self.CheckLoadData("HorsePetSkin") |
| | | return self.ipyHorsePetSkinLen
|
| | | def GetHorsePetSkinByIndex(self, index): |
| | | self.CheckLoadData("HorsePetSkin") |
| | | return self.ipyHorsePetSkinCache[index]
|
| | | |
| | | def GetFuncSysPrivilegeCount(self): |
| | | self.CheckLoadData("FuncSysPrivilege") |
| | | return self.ipyFuncSysPrivilegeLen
|
| | | def GetFuncSysPrivilegeByIndex(self, index): |
| | | self.CheckLoadData("FuncSysPrivilege") |
| | | return self.ipyFuncSysPrivilegeCache[index]
|
| | | |
| | | def GetHistoryRechargeAwardCount(self): |
| | | self.CheckLoadData("HistoryRechargeAward") |
| | |
| | | def GetZhanlingByIndex(self, index): |
| | | self.CheckLoadData("Zhanling") |
| | | return self.ipyZhanlingCache[index]
|
| | | |
| | | def GetXiangongCount(self): |
| | | self.CheckLoadData("Xiangong") |
| | | return self.ipyXiangongLen
|
| | | def GetXiangongByIndex(self, index): |
| | | self.CheckLoadData("Xiangong") |
| | | return self.ipyXiangongCache[index]
|
| | | |
| | | def GetTiandaoTreeCount(self): |
| | | self.CheckLoadData("TiandaoTree") |
| | | return self.ipyTiandaoTreeLen
|
| | | def GetTiandaoTreeByIndex(self, index): |
| | | self.CheckLoadData("TiandaoTree") |
| | | return self.ipyTiandaoTreeCache[index]
|
| | | |
| | | def GetTreeLVCount(self): |
| | | self.CheckLoadData("TreeLV") |
| | |
| | | itemEffIdCallFuncDic = {
|
| | | ChConfig.Def_Effect_ItemAddLV:"Item_AddLV", #升级道具
|
| | | ChConfig.Def_Effect_PrizeCoin:"Item_PrizeCoin", # 奖励充值点券
|
| | | ChConfig.Def_Effect_TiandaoQiyun:"Item_TiandaoQiyun", # 天道树气运
|
| | | ChConfig.Def_Effect_TrainRealmLV:"Item_TrainRealmLV", # 境界培养卡
|
| | | ChConfig.Def_Effect_AddFBCnt:"Item_AddFBCnt", # 增加副本可进入次数
|
| | | ChConfig.Def_Effect_EmojiPack:"Item_EmojiPack",
|
| | |
| | | import PlayerActivity
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import PlayerXiangong
|
| | | import IpyGameDataPY
|
| | | import PlayerGubao
|
| | | import PyGameData
|
| | |
| | | tagItem.Clear()
|
| | | return True
|
| | |
|
| | | #气运
|
| | | if itemEff.GetEffectID() == ChConfig.Def_Effect_TiandaoQiyun:
|
| | | isAutoUse = itemEff.GetEffectValue(1)
|
| | | if isAutoUse:
|
| | | addQiyun = itemEff.GetEffectValue(0) * tagItemCount
|
| | | PlayerXiangong.AddTiandaoQiyun(curPlayer, addQiyun, {"ItemID":itemID, "ItemCount":tagItemCount, "isAutoUse":1})
|
| | | tagItem.Clear()
|
| | | return True
|
| | | #增加副本次数
|
| | | if itemEff.GetEffectID() == ChConfig.Def_Effect_AddFBCnt:
|
| | | isAutoUse = itemEff.GetEffectValue(1)
|
| | |
| | | initCount = IpyGameDataPY.GetFuncCfg("InitDepotCellCount", 1)
|
| | | elif packType == ShareDefine.rptTreasure:
|
| | | initCount = IpyGameDataPY.GetFuncCfg("TreasureSet", 3)
|
| | | elif packType == ShareDefine.rptDogzItem:
|
| | | initCount = IpyGameDataPY.GetFuncCfg("DogzPack", 1)
|
| | | elif packType == ShareDefine.rptDogzEquip:
|
| | | initCount = IpyGameDataPY.GetFuncCfg("DogzPack", 2)
|
| | |
|
| | | if not initCount:
|
| | | bagInitCntDict = IpyGameDataPY.GetFuncEvalCfg("InitBagCellCount", 2, {})
|
| | |
| | | import PlayerActFamilyCTGAssist
|
| | | import PlayerActManyDayRecharge
|
| | | import PlayerActSingleRecharge
|
| | | import PlayerFuncSysPrivilege
|
| | | import OpenServerActivity
|
| | | import ChNetSendPack
|
| | | import PlayerArena
|
| | | import PyGameData
|
| | | import PlayerCoin
|
| | | import PlayerCharm
|
| | | import PlayerDogz
|
| | | import PlayerFB
|
| | | import PlayerFaQi
|
| | | import SkillShell
|
| | | import PlayerGubao
|
| | | import PlayerCustomAward
|
| | | import PlayerZhanling
|
| | | import PlayerTree
|
| | | import PlayerLLMJ
|
| | | import PlayerLianTi
|
| | | import PlayerTask
|
| | | import PlayerYinji
|
| | | import PlayerLove
|
| | | import GameObj
|
| | | import PlayerChangeJob
|
| | | import PlayerXiangong
|
| | | import PlayerGoldRush
|
| | | import PlayerActLoginNew
|
| | | import PlayerActBuyCountGift
|
| | |
| | | if FBLogic.PlayerLoginInFBCheck(curPlayer, tick):
|
| | | #玩家是第一次登录, 并且玩家需要踢回原来地图
|
| | | return
|
| | | return
|
| | |
|
| | | #// A1 20 货币兑换 #tagCMMoneyExchange
|
| | | #
|
| | | #struct tagCMMoneyExchange
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE SrcMoneyType; // 源货币类型
|
| | | # BYTE TagMoneyType; // 目标货币类型
|
| | | # DWORD ExchangeValue; // 兑换数量(消耗源货币的数量)
|
| | | #};
|
| | | def OnMoneyExchange(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | srcMoneyType = clientData.SrcMoneyType
|
| | | tagMoneyType = clientData.TagMoneyType
|
| | | exchangeValue = clientData.ExchangeValue
|
| | | |
| | | exchangeMoneyInfo = IpyGameDataPY.GetFuncEvalCfg("EqualValueMoney", 1, {})
|
| | | if str(srcMoneyType) not in exchangeMoneyInfo:
|
| | | return
|
| | | exchangeInfo = exchangeMoneyInfo[str(srcMoneyType)]
|
| | | if tagMoneyType != exchangeInfo[0]:
|
| | | return
|
| | | multiple = exchangeInfo[1]
|
| | | if exchangeValue <= 0:
|
| | | return
|
| | | |
| | | if not PlayerControl.PayMoney(curPlayer, srcMoneyType, exchangeValue, "MoneyExchange"):
|
| | | return
|
| | | |
| | | tagMoneyAdd = exchangeValue * multiple
|
| | | PlayerControl.GiveMoney(curPlayer, tagMoneyType, tagMoneyAdd, "MoneyExchange")
|
| | | GameWorld.Log("货币兑换: srcMoneyType=%s,exchangeValue=%s,tagMoneyType=%s,tagMoneyAdd=%s" |
| | | % (srcMoneyType, exchangeValue, tagMoneyType, tagMoneyAdd), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | #// A1 21 תְҵ #tagCMChangeJob
|
| | | #
|
| | | #struct tagCMChangeJob
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE TagJob;
|
| | | #};
|
| | | def OnChangeJob(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | PlayerChangeJob.DoChangeJob(curPlayer, curPlayer.GetJob(), clientData.TagJob)
|
| | | return
|
| | |
|
| | | #// A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
|
| | | #
|
| | | #struct tagCMRefreshMainServerRole
|
| | | #{
|
| | | # tagHead Head;
|
| | | #};
|
| | | def OnRefreshMainServerRole(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | |
| | | Sync_DBPlayer(curPlayer)
|
| | | |
| | | # 死亡复活
|
| | | if GameObj.GetHP(curPlayer) <=0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
|
| | | PlayerRebornByType(curPlayer, ChConfig.rebornType_System, tick)
|
| | | |
| | | # 强刷一次属性,刷之前重置还没同步过所有属性
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_NotifyAllAttrState, 0)
|
| | | playerControl = PlayerControl.PlayerControl(curPlayer)
|
| | | playerControl.ReCalcAllState()
|
| | | |
| | | # 同步所有buff
|
| | | __Sync_ClientBuff(curPlayer)
|
| | | |
| | | PlayerState.Sync_PKBossState(curPlayer)
|
| | | |
| | | # 恢复视野,刷新自己的视野
|
| | | curPlayer.SetVisible(True)
|
| | | PlayerControl.SetSight(curPlayer, 0)
|
| | | curPlayer.RefreshView()
|
| | | PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
|
| | | curPlayer.RefreshView()
|
| | | |
| | | msgInfo = ""
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
|
| | | return
|
| | |
|
| | | def Sync_DBPlayer(curPlayer):
|
| | | ## 同步DBPlayer信息,同0102封包
|
| | | dbPlayer = ChPyNetSendPack.tagMCDBPlayer()
|
| | | dbPlayer.AccID = curPlayer.GetAccID()
|
| | | dbPlayer.PlayerID = curPlayer.GetPlayerID()
|
| | | dbPlayer.PlayerName = curPlayer.GetPlayerName()
|
| | | dbPlayer.AccState = curPlayer.GetAccState()
|
| | | dbPlayer.GMLevel = curPlayer.GetGMLevel()
|
| | | dbPlayer.Sex = curPlayer.GetSex()
|
| | | dbPlayer.Job = curPlayer.GetJob()
|
| | | dbPlayer.ReincarnationLv = curPlayer.GetReincarnationLv()
|
| | | dbPlayer.LV = curPlayer.GetLV()
|
| | | dbPlayer.LVEx = curPlayer.GetLVEx()
|
| | | dbPlayer.LV2 = curPlayer.GetLV2()
|
| | | dbPlayer.ExpPoint = curPlayer.GetExpPoint()
|
| | | dbPlayer.TotalExp = curPlayer.GetTotalExp()
|
| | | dbPlayer.Family = curPlayer.GetFamilyID()
|
| | | dbPlayer.FamilyName = curPlayer.GetFamilyName()
|
| | | dbPlayer.TeamHornor = curPlayer.GetTeamHornor()
|
| | | dbPlayer.FamilyHornor = curPlayer.GetFamilyHornor()
|
| | | dbPlayer.FamilyActiveValue = curPlayer.GetFamilyActiveValue()
|
| | | dbPlayer.LastWeekFamilyActiveValue = curPlayer.GetLastWeekFamilyActiveValue()
|
| | | dbPlayer.CountryHornor = curPlayer.GetCountryHornor()
|
| | | dbPlayer.CountryLastWeekHornor = curPlayer.GetCountryLastWeekHornor()
|
| | | dbPlayer.Mate = curPlayer.GetMate()
|
| | | dbPlayer.Gold = curPlayer.GetGold()
|
| | | dbPlayer.GoldPaper = curPlayer.GetGoldPaper()
|
| | | dbPlayer.Silver = curPlayer.GetSilver()
|
| | | dbPlayer.SilverPaper = curPlayer.GetSilverPaper()
|
| | | dbPlayer.FightPoint = curPlayer.GetFightPoint()
|
| | | dbPlayer.HappyPoint = curPlayer.GetHappyPoint()
|
| | | dbPlayer.LineID = curPlayer.GetLineID()
|
| | | dbPlayer.MapID = curPlayer.GetMapID() # 玩家身上的 GetMapID 返回的就是 GetDataMapID
|
| | | dbPlayer.PosX = curPlayer.GetPosX()
|
| | | dbPlayer.PosY = curPlayer.GetPosY()
|
| | | dbPlayer.RebornMapID = curPlayer.GetRebornMapID()
|
| | | dbPlayer.RebornPosX = curPlayer.GetRebornPosX()
|
| | | dbPlayer.RebornPosY = curPlayer.GetRebornPosY()
|
| | | dbPlayer.State = curPlayer.GetState()
|
| | | dbPlayer.HP = curPlayer.GetHP()
|
| | | dbPlayer.HPEx = curPlayer.GetHPEx()
|
| | | dbPlayer.XP = curPlayer.GetXP()
|
| | | dbPlayer.HPRestoreSetting = curPlayer.GetHPRestoreSetting()
|
| | | dbPlayer.MPRestoreSetting = curPlayer.GetMPRestoreSetting()
|
| | | dbPlayer.FreePoint = curPlayer.GetFreePoint()
|
| | | dbPlayer.FreeSkillPoint = curPlayer.GetFreeSkillPoint()
|
| | | dbPlayer.BaseSTR = curPlayer.GetBaseSTR()
|
| | | dbPlayer.BasePNE = curPlayer.GetBasePNE()
|
| | | dbPlayer.BasePHY = curPlayer.GetBasePHY()
|
| | | dbPlayer.BaseCON = curPlayer.GetBaseCON()
|
| | | dbPlayer.STR = curPlayer.GetSTR()
|
| | | dbPlayer.PNE = curPlayer.GetPNE()
|
| | | dbPlayer.PHY = curPlayer.GetPHY()
|
| | | dbPlayer.CON = curPlayer.GetCON()
|
| | | #dbPlayer.Setting = curPlayer.GetSetting() # 没有
|
| | | dbPlayer.PKValue = curPlayer.GetPKValue()
|
| | | #dbPlayer.ActiveValue = curPlayer.GetActiveValue() # 没有
|
| | | dbPlayer.BackpackLV = curPlayer.GetBackpackLV()
|
| | | dbPlayer.WarehouseLV = curPlayer.GetWarehouseLV()
|
| | | dbPlayer.TeamID = curPlayer.GetTeamID()
|
| | | dbPlayer.UseGoldType = curPlayer.GetUseGoldType()
|
| | | dbPlayer.UseSilverType = curPlayer.GetUseSilverType()
|
| | | dbPlayer.AttackMode = curPlayer.GetAttackMode()
|
| | | dbPlayer.LastWeekOnlineTime = curPlayer.GetLastWeekOnlineTime()
|
| | | dbPlayer.FBID = curPlayer.GetClientLineID()
|
| | | dbPlayer.FamilyLV = curPlayer.GetFamilyLV()
|
| | | dbPlayer.FriendFavor = curPlayer.GetFriendFavor()
|
| | | dbPlayer.Energy = curPlayer.GetEnergy()
|
| | | dbPlayer.EquipShowSwitch = curPlayer.GetEquipShowSwitch()
|
| | | dbPlayer.LuckValue = curPlayer.GetLuckValue()
|
| | | dbPlayer.ExAttr1 = curPlayer.GetExAttr1()
|
| | | dbPlayer.ExAttr2 = curPlayer.GetExAttr2()
|
| | | dbPlayer.ExAttr3 = curPlayer.GetExAttr3()
|
| | | dbPlayer.ExAttr4 = curPlayer.GetExAttr4()
|
| | | dbPlayer.ExAttr5 = curPlayer.GetExAttr5()
|
| | | dbPlayer.Faction = curPlayer.GetFaction()
|
| | | dbPlayer.InfamyValue = curPlayer.GetInfamyValue()
|
| | | dbPlayer.OfficialRank = curPlayer.GetOfficialRank()
|
| | | dbPlayer.ChangeCoinPointTotal = curPlayer.GetChangeCoinPointTotal()
|
| | | dbPlayer.VIPLv = curPlayer.GetVIPLv()
|
| | | dbPlayer.VIPLvForPhone = curPlayer.GetVIPLvForPhone()
|
| | | dbPlayer.ExAttr6 = curPlayer.GetExAttr6()
|
| | | dbPlayer.ExAttr7 = curPlayer.GetExAttr7()
|
| | | dbPlayer.ExAttr8 = curPlayer.GetExAttr8()
|
| | | dbPlayer.ExAttr9 = curPlayer.GetExAttr9()
|
| | | dbPlayer.ExAttr10 = curPlayer.GetExAttr10()
|
| | | dbPlayer.ModelMark = curPlayer.GetModelMark()
|
| | | dbPlayer.ExAttr11 = curPlayer.GetExAttr11()
|
| | | dbPlayer.ExAttr12 = curPlayer.GetExAttr12()
|
| | | dbPlayer.ExAttr13 = curPlayer.GetExAttr13()
|
| | | dbPlayer.ExAttr14 = curPlayer.GetExAttr14()
|
| | | dbPlayer.OperateInfo = curPlayer.GetOperateInfo()
|
| | | dbPlayer.Operate = curPlayer.GetOperate()
|
| | | dbPlayer.ServerID = curPlayer.GetServerID()
|
| | | dbPlayer.ExAttr15 = curPlayer.GetExAttr15()
|
| | | dbPlayer.ExAttr16 = curPlayer.GetExAttr16()
|
| | | dbPlayer.ExAttr17 = curPlayer.GetExAttr17()
|
| | | dbPlayer.ExAttr18 = curPlayer.GetExAttr18()
|
| | | dbPlayer.ExAttr19 = curPlayer.GetExAttr19()
|
| | | dbPlayer.ExAttr20 = curPlayer.GetExAttr20()
|
| | | dbPlayer.Face = curPlayer.GetFace()
|
| | | dbPlayer.FacePic = curPlayer.GetFacePic()
|
| | | dbPlayer.RoleType = curPlayer.GetRoleType()
|
| | | NetPackCommon.SendFakePack(curPlayer, dbPlayer)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | # 坐骑相关通知
|
| | | PlayerHorse.PlayerHorseLogin(curPlayer)
|
| | |
|
| | | # 法器
|
| | | PlayerFaQi.PlayerFaQiLogin(curPlayer)
|
| | | |
| | | # 炼体
|
| | | PlayerLianTi.OnPlayerLogin(curPlayer)
|
| | | |
| | | PlayerTreasure.OnTreasureLogin(curPlayer)
|
| | |
|
| | | # 副本进入时间
|
| | |
| | |
|
| | | #成就
|
| | | PlayerSuccess.SuccOnLogin(curPlayer)
|
| | | |
| | | #魅力
|
| | | PlayerCharm.OnPlayerLogin(curPlayer)
|
| | | |
| | | #情缘
|
| | | PlayerLove.DoPlayerLogin(curPlayer)
|
| | |
|
| | | #同步自动战斗配置记录
|
| | | # Sync_AutoFightSetting(curPlayer)
|
| | |
| | | SyncPackDownloadAward(curPlayer)
|
| | | # 登录触发功能开启(老号处理)
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer)
|
| | | # 神兽
|
| | | PlayerDogz.OnPlayerLogin(curPlayer)
|
| | | # 小助手
|
| | | SyncLittleHelper(curPlayer)
|
| | | PlayerFB.OnLogin(curPlayer)
|
| | |
| | | Sync_CreateRoleAwardInfo(curPlayer)
|
| | | #自定义奖励
|
| | | PlayerCustomAward.OnPlayerLogin(curPlayer)
|
| | | #功能系统特权
|
| | | PlayerFuncSysPrivilege.OnPlayerLogin(curPlayer)
|
| | | #玩法前瞻奖励
|
| | | gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
|
| | | if gameNoticeAwardState:
|
| | |
| | | PlayerHero.OnPlayerLogin(curPlayer)
|
| | | PlayerMail.OnPlayerLogin(curPlayer)
|
| | | PlayerHJG.OnPlayerLogin(curPlayer)
|
| | | PlayerXiangong.OnPlayerLogin(curPlayer)
|
| | | PlayerGubao.OnPlayerLogin(curPlayer)
|
| | | PlayerZhanling.OnPlayerLogin(curPlayer)
|
| | | PlayerTask.OnPlayerLogin(curPlayer)
|
| | |
| | | #初始化寻宝背包
|
| | | PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTreasure)
|
| | |
|
| | | #初始化神兽物品背包
|
| | | #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
|
| | | #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
|
| | | #curPack.Sync_PackCanUseCount()
|
| | | #初始化神兽装备背包
|
| | | #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
| | | #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip))
|
| | | #curPack.Sync_PackCanUseCount()
|
| | | #初始化垃圾分类背包
|
| | | #curPack = itemManager.GetPack(ShareDefine.rptGarbage)
|
| | |
| | | SyncPKModel(curPlayer)
|
| | | GameWorld.DebugLog("进入地图强制切换PK模式: %s" % initAttackModel)
|
| | |
|
| | | PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
|
| | | PlayerYinji.OnLoadMap(curPlayer)
|
| | | #PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
|
| | |
|
| | | #EndLoadMap需放在最后, 0403 tagPlayerLoginLoadOK
|
| | | curPlayer.EndLoadMap()
|
| | |
| | | GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer) * resetHpPercent / ChConfig.Def_MaxRateValue)
|
| | | #curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue)
|
| | | #护盾
|
| | | PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer))
|
| | | #PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer))
|
| | |
|
| | | #玩家复活后副本处理
|
| | | FBLogic.OnPlayerRebornOver(curPlayer, rebornType)
|
| | |
| | | # 仙盟攻城战活动奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_FamilyGCZ:
|
| | | PlayerActFamilyGCZ.GetFamilyGCZAward(curPlayer, dataEx, tick)
|
| | | # 天道树奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_TiandaoTree:
|
| | | PlayerXiangong.GetTiandaoTreeAward(curPlayer, dataEx)
|
| | | # 寻宝累计次数奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_TreasureCntAward:
|
| | | PlayerTreasure.GetTreasureCntAward(curPlayer, dataEx, dataExStr)
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | ## 魅力等级
|
| | | def GetCharmLV(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CharmLV)
|
| | | def SetCharmLV(curPlayer, charmLV):
|
| | | NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CharmLV, charmLV)
|
| | | SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_CharmLV, charmLV)
|
| | | return
|
| | |
|
| | | def GetTotalLingGenPoint(curPlayer):
|
| | | # 总灵根点数(金木水火土+自由点数)
|
| | | return 0
|
| | |
|
| | | # 灵根 - 金木水火土
|
| | | def GetMetal(curPlayer): return 0
|
| | | def GetWood(curPlayer): return 0
|
| | |
| | | def GetReduceSkillCDPer(curPlayer): return 0
|
| | | def SetReduceSkillCDPer(curPlayer, reducePer): return
|
| | |
|
| | | # 血瓶恢复效果
|
| | | def GetHPCureEnhance(curPlayer): return 0
|
| | |
|
| | | # 仙盟职位,使用 GetReceivedSalary,因为FamilyMemberLV没有入库
|
| | | def GetFamilyMemberLV(curPlayer): return curPlayer.GetReceivedSalary()
|
| | | def SetFamilyMemberLV(curPlayer, fmLV):
|
| | |
| | | curPlayer.SetReceivedSalary(fmLV)
|
| | | curPlayer.SetFamilyMemberLV(fmLV) # 也同步设置该值,防止有些地方直接调用 curPlayer.GetFamilyMemberLV()
|
| | | return
|
| | |
|
| | | #---当前防护值,需存DB----
|
| | | def GetProDef(curPlayer): return 0
|
| | | def SetProDef(curPlayer, value): return
|
| | |
|
| | | #---最大防护值----
|
| | | def GetMaxProDef(curPlayer): return 0
|
| | | def SetMaxProDef(curPlayer, value): return
|
| | |
|
| | | # 每X秒自动消失一个印记, 毫秒记录
|
| | | def GetLostYinjiTime(curPlayer): return 0
|
| | | def SetLostYinjiTime(curPlayer, value): return
|
| | |
|
| | | # 当前印记数
|
| | | def GetYinjiCnt(curPlayer): return 0
|
| | | def SetYinjiCnt(curPlayer, value): return
|
| | |
|
| | | # 减少指定技能组CD XX%
|
| | | def GetTheFBSkillsCD(curPlayer): return 0
|
| | | def SetTheFBSkillsCD(curPlayer, value): return
|
| | | # 灼烧固定伤害
|
| | | def GetBurnValue(curPlayer): return 0
|
| | | def SetBurnValue(curPlayer, value): return
|
| | | # 延长灼烧时间百分比
|
| | | def GetBurnTimePer(curPlayer): return 0
|
| | | def SetBurnTimePer(curPlayer, value): return
|
| | | # 减移动速度百分比
|
| | | def GetSubSpeedPer(curPlayer): return 0
|
| | | def SetSubSpeedPer(curPlayer, value): return
|
| | |
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | |
| | | import PlayerOfflineSupport
|
| | | import PlayerTreasure
|
| | | import PlayerZhanling
|
| | | import PlayerLove
|
| | | import IpyGameDataPY
|
| | | import PlayerArena
|
| | | import PyGameData
|
| | | import OpenServerActivity
|
| | | import PlayerXiangong
|
| | | import PlayerBillboard
|
| | | import PlayerViewCache
|
| | | import GameFuncComm
|
| | |
| | | #寻宝
|
| | | PlayerTreasure.OnDay(curPlayer)
|
| | | PlayerGoldGift.OnDay(curPlayer)
|
| | | #情缘
|
| | | PlayerLove.DoPlayerOnDay(curPlayer)
|
| | | #仙宫
|
| | | PlayerXiangong.PlayerOnDay(curPlayer)
|
| | | PlayerControl.PlayerOnDay(curPlayer)
|
| | | ChPlayer.PlayerOnDay(curPlayer)
|
| | | PlayerActivity.OnDay(curPlayer)
|
| | |
| | | #if curPlayerAction == IPY_GameWorld.paPreparing :
|
| | | # ProcessPlayerPrepareState(curPlayer, tick)
|
| | |
|
| | | #PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
|
| | | |
| | | #刷新组队状态
|
| | | #ProcessTeamState(curPlayer, tick)
|
| | |
|
| | |
| | | # }
|
| | |
|
| | | #需要记录累计消耗的货币类型
|
| | | UseTotalPriceTypeList = [TYPE_Price_TiandaoFruit]
|
| | | UseTotalPriceTypeList = []
|
| | |
|
| | | # 自定义积分及通知字典 {货币类型:通知客户端刷新类型, ...} , 如果不通知的话刷新类型则配置 None
|
| | | TYPE_Price_CurrencyDict = {
|
| | |
| | | #TYPE_Price_SoulCore:CDBPlayerRefresh_SoulCore,
|
| | | #TYPE_Price_Honor:CDBPlayerRefresh_Honor,
|
| | | #TYPE_Price_BossActScore:CDBPlayerRefresh_BossActScore,
|
| | | #TYPE_Price_FuncSysPrivilege:CDBPlayerRefresh_FuncSysPrivilege,
|
| | | #TYPE_Price_Environment:CDBPlayerRefresh_Environment,
|
| | | #TYPE_Price_BTGMPoint:CDBPlayerRefresh_BTGMPoint,
|
| | | #TYPE_Price_GuShenMoney:CDBPlayerRefresh_GuShenMoney,
|
| | | #TYPE_Price_GongdePoint:CDBPlayerRefresh_GongdePoint,
|
| | | #TYPE_Price_FamilyFlagWarPoint:CDBPlayerRefresh_FamilyFlagWarPoint,
|
| | | #TYPE_Price_GatherSoul:CDBPlayerRefresh_GatherSoul,
|
| | | #TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
|
| | | #TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
|
| | | #TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
|
| | | }
|
| | |
| | | CrossServerMsg_CrossAssist = "CrossAssist" # 跨服协助
|
| | | CrossServerMsg_FamilyFlagwarOver = "FamilyFlagwarOver" # 逐鹿万界结算信息
|
| | | CrossServerMsg_Worship = "Worship" # 膜拜信息
|
| | | CrossServerMsg_Xiangong = "Xiangong" # 仙宫信息
|
| | | CrossServerMsg_FuncTeamInfo = "FuncTeamInfo" # 功能队伍信息同步
|
| | | CrossServerMsg_FuncTeamDel = "FuncTeamDel" # 功能队伍删除同步
|
| | | CrossServerMsg_FuncTeamList = "FuncTeamList" # 功能队伍列表同步
|
| | |
| | | ClientServerMsg_ChangeFuncTeam = "ChangeFuncTeam" # 修改功能队伍
|
| | | ClientServerMsg_FuncTeamMemOP = "FuncTeamMemOP" # 功能队伍成员操作
|
| | | ClientServerMsg_QueryFuncTeam = "QueryFuncTeam" # 查询功能队伍
|
| | | ClientServerMsg_QueryXiangong = "QueryXiangong" # 查看仙宫仙名录
|
| | | ClientServerMsg_LianqiScore = "LianqiScore" # 炼器积分
|
| | | ClientServerMsg_SyncFamilyInfo = "SyncFamilyInfo" # 仙盟信息同步
|
| | | ClientServerMsg_QueryCrossFamily = "QueryCrossFamily" # 查询跨服仙盟
|
| | |
| | | buffTime = curSkill.GetLastTime()
|
| | | if not attacker:
|
| | | return buffTime
|
| | | if curSkill.GetEffect(0).GetEffectID() == ChConfig.Def_Skill_Effect_Burn:
|
| | | # 灼烧的时间特殊处理
|
| | | buffTime = buffTime*(ChConfig.Def_MaxRateValue + PlayerControl.GetBurnTimePer(attacker))/ChConfig.Def_MaxRateValue
|
| | | #if curSkill.GetEffect(0).GetEffectID() == ChConfig.Def_Skill_Effect_Burn:
|
| | | # # 灼烧的时间特殊处理
|
| | | # buffTime = buffTime*(ChConfig.Def_MaxRateValue + PlayerControl.GetBurnTimePer(attacker))/ChConfig.Def_MaxRateValue
|
| | |
|
| | | buffTime += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, None, curSkill, ChConfig.TriggerType_BuffTime)
|
| | | return buffTime
|
| | |
| | | recoverHP = curBuff.GetValue() # 固定值
|
| | |
|
| | | # 血瓶恢复效果加成
|
| | | recoverHP += PlayerControl.GetHPCureEnhance(defender)
|
| | | #recoverHP += PlayerControl.GetHPCureEnhance(defender)
|
| | | SkillCommon.SkillAddHP(defender, curBuff.GetBuffID(), recoverHP)
|
| | | return
|
| | |
|
| | |
| | | return
|
| | |
|
| | | recoverHP = curBuff.GetValue()
|
| | | recoverHP += PlayerControl.GetHPCureEnhance(defender)
|
| | | #recoverHP += PlayerControl.GetHPCureEnhance(defender)
|
| | | SkillCommon.SkillAddHP(defender, curSkill.GetSkillID(), recoverHP*count)
|
| | | return
|
| | |
|
| | |
| | | skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BurnPer)
|
| | | skillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BurnPer)
|
| | |
|
| | | skillEnhance = curEffect.GetEffectValue(1) + PlayerControl.GetBurnValue(attacker)
|
| | | skillEnhance = curEffect.GetEffectValue(1)
|
| | | skillPer = skillPer*1.0/ChConfig.Def_MaxRateValue
|
| | | # 灼烧特殊公式
|
| | | hurtValue, hurtType = AttackCommon.CalcHurtHP(attacker, defender, curSkill,
|
| | |
| | | coolDownTime = curSkill.GetCoolDownTime()
|
| | | remainTime = coolDownTime
|
| | |
|
| | | skillTypeID = curSkill.GetSkillTypeID()
|
| | | if atkObj and skillTypeID in IpyGameDataPY.GetFuncEvalCfg("SkillCD", 1):
|
| | | reduceSkillCDPer += PlayerControl.GetTheFBSkillsCD(atkObj)
|
| | | #skillTypeID = curSkill.GetSkillTypeID()
|
| | | #if atkObj and skillTypeID in IpyGameDataPY.GetFuncEvalCfg("SkillCD", 1):
|
| | | # reduceSkillCDPer += PlayerControl.GetTheFBSkillsCD(atkObj)
|
| | |
|
| | | if isPassiveSkill(curSkill):
|
| | | if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
|
| | |
| | | GetPassiveEffManager().RegistPassiveEffSet(curPlayer)
|
| | |
|
| | | GetPassiveEffManager().RegistPassiveBuff(curPlayer)
|
| | |
|
| | | # 助战神兽技能
|
| | | GetPassiveEffManager().RegistPassiveEffDogz(curPlayer)
|
| | |
|
| | | GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)
|
| | |
|
| | |
| | | 4083:ChConfig.TriggerType_AddThumpHitPer, # 增加重击伤害百分比
|
| | | 4084:ChConfig.TriggerType_ThumpHit, # 对第一目标重击触发技能
|
| | | 4085:ChConfig.TriggerType_SkillSuccess, # 任何技能释放成功都可触发 76 加印记
|
| | | 4086:ChConfig.TriggerType_AttackAddSkillPerYinji, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
|
| | | 4087:ChConfig.TriggerType_AttackAddSkillPerYinji, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
|
| | | 4088:ChConfig.TriggerType_AttackAddSkillPerYinji, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
|
| | | 4089:ChConfig.TriggerType_AttackAddSkillPerYinji, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 为了飘字使用
|
| | | 4090:ChConfig.TriggerType_AttackOver, # 攻击(对敌技能)后被动技能被触发 4
|
| | | 4091:ChConfig.TriggerType_SkillOverNoAttack, # 技能释放后 与TriggerType_AttackOver相反19,
|
| | | 4092:ChConfig.TriggerType_SkillSuccessExpend, # 任何技能释放成功都可触发 76 减印记
|
| | |
| | | # 获得被动触发的 buff
|
| | | def GetBuffsByTriggerType(self, triggerType, useSkillID=0):
|
| | | return self.AffectBuffDict.get((triggerType, 0), {})
|
| | | |
| | | |
| | | # 重刷神兽助战技能
|
| | | def RefreshDogzBattleSkill(self):
|
| | | self.AffectDogzSkillDict = {}
|
| | | skills = FindDogzBattleSkills(self.gameObj)
|
| | | |
| | | for curSkill in skills:
|
| | | if not SkillCommon.isPassiveTriggerSkill(curSkill):
|
| | | continue
|
| | | |
| | | skillTypeID = curSkill.GetSkillTypeID()
|
| | | |
| | | connSkillID = SkillShell.GetConnectSkillID(curSkill) # 关联技能ID, 0代表不限技能
|
| | | for i in xrange(curSkill.GetEffectCount()):
|
| | | curEffect = curSkill.GetEffect(i)
|
| | | effectID = curEffect.GetEffectID()
|
| | | if effectID == 0:
|
| | | continue
|
| | | |
| | | triggerType = GetTriggerTypeByEffectID(effectID)
|
| | | if triggerType == -1:
|
| | | continue
|
| | | |
| | | key = (triggerType,connSkillID)
|
| | | if key not in self.AffectDogzSkillDict:
|
| | | self.AffectDogzSkillDict[key] = []
|
| | | |
| | | self.AffectDogzSkillDict[key].append((skillTypeID, effectID))
|
| | | |
| | | return self.AffectDogzSkillDict
|
| | | |
| | |
|
| | | # 重刷特殊装备技能
|
| | | def RefreshSuperEquipSkillDict(self):
|
| | |
| | | else:
|
| | | passiveEff.RefreshPassiveSkillSet(isCD)
|
| | | return
|
| | | |
| | | |
| | | # 人物需同步注册神兽技能
|
| | | def RegistPassiveEffDogz(self, gameObj):
|
| | | passiveEff = self.GetPassiveEff(gameObj)
|
| | | if not passiveEff:
|
| | | # 强制刷新所有被动技能
|
| | | passiveEff = PassiveEff(gameObj)
|
| | | if not passiveEff.RefreshDogzBattleSkill():
|
| | | return
|
| | | self.AddPassiveEff(gameObj, passiveEff)
|
| | | else:
|
| | | passiveEff.RefreshDogzBattleSkill()
|
| | | return
|
| | | |
| | | |
| | | |
| | | |
| | | # 人物需同步注册装备技能,技能目前为可触发的被动类,若有定义冲突则可用功能类型划分
|
| | | def RegistSuperEquipSkillDict(self, gameObj):
|
| | | passiveEff = self.GetPassiveEff(gameObj)
|
| | |
| | | curValue += callFunc(attacker, defender, passiveEffect)
|
| | |
|
| | | return curValue
|
| | |
|
| | |
|
| | | # 因为要兼容低等级技能,所以技能只能是在助战的时候,先删除神兽技能再学习新的助战神兽技能
|
| | | def PlayerDogzSkill(curPlayer):
|
| | |
|
| | | dogzSkills = [] # 需要学习的技能
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetDogzCount()):
|
| | | ipyData = ipyDataMgr.GetDogzByIndex(i)
|
| | | if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
|
| | | continue
|
| | | |
| | | dogzSkills.extend(ipyData.GetHelpBattleSkills())
|
| | | |
| | | delDogzSkills = [] # 删除不在助战神兽队列的技能
|
| | | skillManager = curPlayer.GetSkillManager()
|
| | | for i in xrange(skillManager.GetSkillCount()):
|
| | | curSkill = skillManager.GetSkillByIndex(i)
|
| | | if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_Dogz:
|
| | | continue
|
| | | skillID = curSkill.GetSkillID()
|
| | | |
| | | delDogzSkills.append(skillID)
|
| | | |
| | | GameWorld.DebugLog("PlayerDogzSkill:%s - 删除%s"%(dogzSkills, delDogzSkills))
|
| | | |
| | | # 删除神兽技能
|
| | | for skillID in delDogzSkills:
|
| | | skillManager.DeleteSkillBySkillID(skillID, False)
|
| | | |
| | | # 添加助战技能,同类技能取最高
|
| | | dogzSkills.sort()
|
| | | for skillID in dogzSkills:
|
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not skillData:
|
| | | continue
|
| | | if skillData.GetSkillType() == ChConfig.Def_SkillType_AttrSkillNoLearn:
|
| | | # 同技能可多个叠加的技能不能学,算属性时直接取表
|
| | | continue
|
| | | |
| | | skillManager.LearnSkillByID(skillID, False)
|
| | | |
| | | # 刷被动效果
|
| | | GetPassiveEffManager().RegistPassiveEffDogz(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | | # 获取助战神兽的技能列表
|
| | | def FindDogzBattleSkills(gameObj):
|
| | | skills = []
|
| | | if gameObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return skills
|
| | | |
| | | skillManager = gameObj.GetSkillManager()
|
| | | for i in xrange(skillManager.GetSkillCount()):
|
| | | curSkill = skillManager.GetSkillByIndex(i)
|
| | | if not curSkill:
|
| | | continue
|
| | | |
| | | if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_Dogz:
|
| | | continue
|
| | | skills.append(curSkill)
|
| | | |
| | | return skills
|
| | |
|
| | |
|
| | | # 遍历身上装备技能以及各自个数,装备技能不需要学习
|
| | | # 保证不同的装备技能不会有相同的效果, 效果数值的衰减是根据相同技能个数计算而不是效果个数 1-pow((1-初始值),相同技能个数)
|