| | |
| | | Head = tagHead()
|
| | | Type = 0 #(BYTE Type)//类型
|
| | | Count = 0 #(WORD Count)//数量
|
| | | UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count |
| | | UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | FamilyID = 0 #(DWORD FamilyID)//家族ID
|
| | | ActionType = 0 #(BYTE ActionType)//类型
|
| | | Count = 0 #(WORD Count)//数量
|
| | | FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count |
| | | FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | IsAlive = 0 #(BYTE IsAlive)// 是否存活
|
| | | RecordLen = 0 #(WORD RecordLen)// 长度
|
| | | KillRecord = "" #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
|
| | | RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 |
| | | RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 |
| | | RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒
|
| | | RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagGCNotifyEquipClassEquip(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("Star", c_ubyte), |
| | | ("ItemID", c_int),
|
| | | ("Star", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | OrderIndex = 0 #(DWORD OrderIndex)//名次索引,0代表第一名
|
| | | ID = 0 #(DWORD ID)
|
| | | ID2 = 0 #(DWORD ID2)
|
| | | Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字 |
| | | Name1 = "" #(char Name1[33])//名字1,用来显示排序对象名字
|
| | | Name2 = "" #(char Name2[33])//名字2
|
| | | Type2 = 0 #(BYTE Type2)//附加类型,用来表示排序对象的类型,比如,玩家所属职业门派,宠物类型等
|
| | | Value1 = 0 #(DWORD Value1)//排序依赖的值,比如,等级
|
| | |
| | | Count = 0 #(DWORD Count)//数量
|
| | | IsBind = 0 #(BYTE IsBind)//是否绑定
|
| | | UserDataLen = 0 #(DWORD UserDataLen)
|
| | | UserData = "" #(String UserData)//自定义数据 |
| | | UserData = "" #(String UserData)//自定义数据
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | Name = "" #(char Name[33])
|
| | | LV = 0 #(DWORD LV)//等级
|
| | | Job = 0 #(BYTE Job)
|
| | | RealmLV = 0 #(WORD RealmLV)//境界 |
| | | RealmLV = 0 #(WORD RealmLV)//境界
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("StartTime", c_int), |
| | | ("StartTime", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagFamilyArrestOverStateInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(WORD Count)
|
| | | ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count |
| | | ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
|
| | | ("PlayerID", c_int), |
| | | ("PlayerID", c_int),
|
| | | ("SortValue", c_int), #最近联系人和仇人按时间排序
|
| | | ]
|
| | |
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GroupType", c_ubyte), # 分组 1 最近联系人 2 好友 3 仇人 4 黑名单
|
| | | ("PlayerID", c_int), |
| | | ("PlayerID", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagGCGroupPlayer(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("PlayerID", c_int), |
| | | ("SortValue", c_int), |
| | | ("PlayerID", c_int),
|
| | | ("SortValue", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int), |
| | | ("PlayerID", c_int),
|
| | | ("OnlineType", c_ubyte), #0不在线 1在线 2脱机在线
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int), |
| | | ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ |
| | | ("Value", c_int), |
| | | ("PlayerID", c_int),
|
| | | ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__
|
| | | ("Value", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | | class tagGCVoiceChat(Structure):
|
| | | Head = tagHead()
|
| | | ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域 |
| | | ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域
|
| | | SrcNameLen = 0 #(BYTE SrcNameLen)
|
| | | SrcName = "" #(String SrcName)//size = SrcNameLen
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | |
| | | ItemGUID = "" #(char ItemGUID[40])
|
| | | AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
|
| | | AddTime = "" #(char AddTime[19])//上架时间
|
| | | BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID |
| | | BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID
|
| | | BidderPrice = 0 #(DWORD BidderPrice)//最高竞拍价格
|
| | | BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
|
| | | data = None
|
| | |
| | | class tagGCTeamMemPrepareState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("PlayerID", c_int), |
| | | ("PlayerID", c_int),
|
| | | ("PrepareState", c_ubyte), # 状态,0-未准备,1-已准备,2-拒绝
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int), |
| | | ("PlayerID", c_int),
|
| | | ("RefreshType", c_ubyte), #刷新类型,同0418属性类型
|
| | | ("Value", c_int), |
| | | ("Value", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | | class tagGCCrossRealmPKBillboardInfo(Structure):
|
| | | Head = tagHead()
|
| | | ZoneID = 0 #(BYTE ZoneID)// 赛区ID |
| | | SeasonID = 0 #(BYTE SeasonID)// 赛季ID |
| | | ZoneID = 0 #(BYTE ZoneID)// 赛区ID
|
| | | SeasonID = 0 #(BYTE SeasonID)// 赛季ID
|
| | | Count = 0 #(WORD Count)
|
| | | PKBillboardList = list() #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
|
| | | data = None
|
| | |
| | | class tagMCCoinToGoldCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RecordID", c_ubyte), |
| | | ("RecordID", c_ubyte),
|
| | | ("TodayPayCount", c_ushort), # 今日已购买次数
|
| | | ("TotalPayCount", c_int), # 累计总购买次数
|
| | | ]
|
| | |
| | | BackpackLV = 0 #(BYTE BackpackLV)//背包等级
|
| | | WarehouseLV = 0 #(BYTE WarehouseLV)//仓库等级
|
| | | TeamID = 0 #(DWORD TeamID)//队伍ID
|
| | | UseGoldType = 0 #(BYTE UseGoldType)//默认用金子/金票 类型为MoneyType
|
| | | UseGoldType = 0 #(BYTE UseGoldType)//默认用金子/金票 类型为MoneyType
|
| | | UseSilverType = 0 #(BYTE UseSilverType)//默认用的银子/银票
|
| | | AttackMode = 0 #(BYTE AttackMode)//攻击模式
|
| | | LastWeekOnlineTime = 0 #(DWORD LastWeekOnlineTime)//上周在线时间
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_ushort), |
| | | ("MapID", c_ushort),
|
| | | ("FuncLineID", c_ushort), #功能线路ID
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_int), |
| | | ("MapID", c_int),
|
| | | ("FuncLineID", c_ushort), #功能线路ID
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Mode", c_ubyte), |
| | | ("Mode", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("LockState", c_ubyte), |
| | | ("LockState", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("ItemID", c_int), #果实物品ID
|
| | | ("EatCnt", c_ushort), #已使用个数
|
| | | ("AddItemCnt", c_int), #增幅丹使用个数
|
| | | ("ItemAddCnt", c_int), #增幅丹增加上限
|
| | | ("ItemBreakCnt", c_int), #增幅丹突破次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.EatCnt = 0
|
| | | self.AddItemCnt = 0
|
| | | self.ItemAddCnt = 0
|
| | | self.ItemBreakCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''// A3 39 玩家属性果实已使用个数信息//tagMCAttrFruitEatCntList:
|
| | | ItemID:%d,
|
| | | EatCnt:%d,
|
| | | AddItemCnt:%d
|
| | | ItemAddCnt:%d,
|
| | | ItemBreakCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.EatCnt,
|
| | | self.AddItemCnt
|
| | | self.ItemAddCnt,
|
| | | self.ItemBreakCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | Seting = 0 #(DWORD Seting)// 操作数据记录
|
| | | DecomposeCnt = 0 #(BYTE DecomposeCnt)// 分解件数进度
|
| | | GetItemLen = 0 #(WORD GetItemLen)
|
| | | GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...] |
| | | GetItemData = "" #(String GetItemData)// 获得物品信息 [[itemID,itemCount,isBind], [或itemID,itemCount,isBind,isAppoint], {或物品信息字典}, ...]
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCEquipPartStar(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("EquipPackIndex", c_ushort), |
| | | ("Star", c_ubyte), |
| | | ("EquipPackIndex", c_ushort),
|
| | | ("Star", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | |
|
| | |
|
| | | class tagMCEquipPartXLAttr(Structure):
|
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位 |
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位
|
| | | XLAttrLV = 0 #(BYTE XLAttrLV)// 洗练等级
|
| | | XLAttrCnt = 0 #(BYTE XLAttrCnt)// 属性条数
|
| | | XLAttrList = list() #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增
|
| | |
| | | class tagMCFairyAdventuresData(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("EventID", c_ubyte), |
| | | ("EventID", c_ubyte),
|
| | | ("Gear", c_ubyte), #第几档
|
| | | ("Condition", c_int), #条件
|
| | | ]
|
| | |
| | |
|
| | | class tagMCFBEncourageInfo(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)// |
| | | Cnt = 0 #(BYTE Cnt)//
|
| | | InfoList = list() #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息
|
| | | data = None
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Cnt", c_int), |
| | | ("Cnt", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCMagicWeaponInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MWID", c_int), |
| | | ("LV", c_ubyte), |
| | | ("Exp", c_int), |
| | | ("MWID", c_int),
|
| | | ("LV", c_ubyte),
|
| | | ("Exp", c_int),
|
| | | ("FBPassLV", c_ubyte), #副本关卡
|
| | | ("IsWear", c_ubyte), #是否佩戴(仅适用王者法宝)
|
| | | ]
|
| | |
| | | class tagMCEquipPartPlusLV(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("PackType", c_ubyte), |
| | | ("EquipIndex", c_ubyte), |
| | | ("EquipPartStarLV", c_ushort), |
| | | ("Proficiency", c_int), |
| | | ("EvolveLV", c_ubyte), |
| | | ("PackType", c_ubyte),
|
| | | ("EquipIndex", c_ubyte),
|
| | | ("EquipPartStarLV", c_ushort),
|
| | | ("Proficiency", c_int),
|
| | | ("EvolveLV", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCNPCAttackCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("NPCID", c_int), |
| | | ("NPCID", c_int),
|
| | | ("AttackCount", c_ubyte), #已攻击次数
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Record", c_ubyte), #0-未领取 1-已领取 |
| | | ("Record", c_ubyte), #0-未领取 1-已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PrizeItem", c_int), |
| | | ("ItemCount", c_ubyte), |
| | | ("PrizeItem", c_int),
|
| | | ("ItemCount", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCPlayerOnlinePrizeInfo(Structure):
|
| | | Head = tagHead()
|
| | | RemaindTime = 0 #(DWORD RemaindTime)//产生奖励剩余时间
|
| | | HasPrize = 0 #(BYTE HasPrize)//是否可以领取 |
| | | HasPrize = 0 #(BYTE HasPrize)//是否可以领取
|
| | | PrizeType = 0 #(BYTE PrizeType)//在线奖励类型
|
| | | PrizeCnt = 0 #(BYTE PrizeCnt)//在线奖励类型
|
| | | PrizeInfo = list() #(vector<tagMCOnlinePrizeItem> PrizeInfo)//在线奖励类型
|
| | |
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("AlchemyID", c_int), # 丹 ID
|
| | | ("StartTime", c_int), # 开始炼的时间 |
| | | ("StartTime", c_int), # 开始炼的时间
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | # A3 BC 通知装备位孔位宝石ID #tagMCStoneInfo
|
| | |
|
| | | class tagMCStoneMsg(Structure):
|
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位 |
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位
|
| | | MaxStoneCount = 0 #(BYTE MaxStoneCount)// 最大孔数
|
| | | StoneInfo = list() #(vector<DWORD> StoneInfo)// 孔内宝石信息
|
| | | StoneBind = list() #(vector<BYTE> StoneBind)// 孔内宝石是否绑定
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PassLV", c_int), |
| | | ("YesterDayPassLV", c_int), |
| | | ("PassLV", c_int),
|
| | | ("YesterDayPassLV", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Exp", c_int), # 当前VIP等级经验
|
| | | ("VIPLV", c_int), #vip等级 |
| | | ("VIPLV", c_int), #vip等级
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCCollectAwardItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("Count", c_ubyte), |
| | | ("ItemID", c_int),
|
| | | ("Count", c_ubyte),
|
| | | ("IsAuctionItem", c_ubyte), #是否拍品
|
| | | ]
|
| | |
|
| | |
| | | class tagMCDynamicBarrier(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("APosX", c_ushort), |
| | | ("APosY", c_ushort), |
| | | ("BPosX", c_ushort), |
| | | ("BPosY", c_ushort), |
| | | ("Angle", c_ushort), |
| | | ("APosX", c_ushort),
|
| | | ("APosY", c_ushort),
|
| | | ("BPosX", c_ushort),
|
| | | ("BPosY", c_ushort),
|
| | | ("Angle", c_ushort),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCNPCCntInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("NPCID", c_int), |
| | | ("Cnt", c_int), |
| | | ("NPCID", c_int),
|
| | | ("Cnt", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCNPCInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ObjID", c_int), |
| | | ("NPCID", c_int), |
| | | ("NPCHP", c_int), |
| | | ("MaxHP", c_int), |
| | | ("ObjID", c_int),
|
| | | ("NPCID", c_int),
|
| | | ("NPCHP", c_int),
|
| | | ("MaxHP", c_int),
|
| | | ("IsActive", c_ubyte), #这个NPC是否活着
|
| | | ("PosX", c_ushort), |
| | | ("PosY", c_ushort), |
| | | ("PosX", c_ushort),
|
| | | ("PosY", c_ushort),
|
| | | ("RefreshSecond", c_int), # 剩余多少秒刷新
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("NPCID", c_int), |
| | | ("PosX", c_ushort), |
| | | ("PosY", c_ushort), |
| | | ("NPCID", c_int),
|
| | | ("PosX", c_ushort),
|
| | | ("PosY", c_ushort),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("NPCID", c_int), |
| | | ("NPCID", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | PlayerID = 0 #(DWORD PlayerID)//玩家ID
|
| | | EquipClassLV = 0 #(BYTE EquipClassLV)
|
| | | ItemDataSize = 0 #(WORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录 |
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCRunTaskAwardRecord(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Type", c_ubyte), |
| | | ("Num", c_int), |
| | | ("AwardState", c_ubyte), |
| | | ("Type", c_ubyte),
|
| | | ("Num", c_int),
|
| | | ("AwardState", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ItemDataSize = 0 #(DWORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | PlusDataSize = 0 #(DWORD PlusDataSize)
|
| | | PlusData = "" #(String PlusData)//扩展记录 |
| | | PlusData = "" #(String PlusData)//扩展记录
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("GuideID", c_ushort), |
| | | ("GuideID", c_ushort),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagRefreshType(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RefreshType", c_ubyte), |
| | | ("Value", c_int), |
| | | ("RefreshType", c_ubyte),
|
| | | ("Value", c_int),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagMCItemDayUseCnt(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("ItemID", c_int),
|
| | | ("UseCnt", c_ushort), # 今日已使用次数
|
| | | ]
|
| | |
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("Result", c_ubyte), #是否成功
|
| | | ("MakeItemID", c_int), #合成的物品ID
|
| | | ]
|
| | |
| | | Def_PDict_AddPointValue = "AddPointValue_%s" # 已加属性点数, 参数(属性ID)
|
| | | Def_PDict_AttrFruitEatCnt = "AttrFruitEatCnt_%s" # 已吃属性果实个数,参数为物品id
|
| | | Def_PDict_AttrFruitAddValue = "AttrFruitAddValue_%s" # 已吃属性果实增加的属性,参数为物品id
|
| | | Def_PDict_AttrFruitAddItemCnt = "FruitAddItemCnt_%s" # 已吃增幅丹个数,参数为果实物品id
|
| | |
|
| | | Def_PDict_AttrFruitAddItemCnt = "FruitAddItemCnt_%s" # 增幅丹增加上限数,参数为果实物品id
|
| | | Def_PDict_AttrFruitItemBreakCnt = "FruitItemBreakCnt_%s" # 增幅丹突破次数,参数为果实物品id
|
| | |
|
| | | Def_PDict_NobleLV = "NobleLV" # 贵族等级, 0位为不同贵族模式版本切换标记位, 从1位开始表示每种等级贵族开通情况, 1-已开通过;9-永久
|
| | | Def_PDict_NobleEndTime = "NobleEndTime_%s" # 贵族到期结束时间<单位s>, 参数为贵族等级, 从1开始
|
| | |
| | | Head = tagHead()
|
| | | Type = 0 #(BYTE Type)//类型
|
| | | Count = 0 #(WORD Count)//数量
|
| | | UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count |
| | | UniversalGameRec = list() #(vector<tagUniversalGameRec> UniversalGameRec)///size = Count |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | FamilyID = 0 #(DWORD FamilyID)//家族ID
|
| | | ActionType = 0 #(BYTE ActionType)//类型
|
| | | Count = 0 #(WORD Count)//数量
|
| | | FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count |
| | | FamilyActionList = list() #(vector<tagGCFamilyAction> FamilyActionList)//size = Count |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | IsAlive = 0 #(BYTE IsAlive)// 是否存活
|
| | | RecordLen = 0 #(WORD RecordLen)// 长度
|
| | | KillRecord = "" #(String KillRecord)// 最近击杀记录时间玩家名size = RecordLen
|
| | | RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 |
| | | RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 |
| | | RefreshSecond = 0 #(DWORD RefreshSecond)// 刷新倒计时, 秒 |
| | | RefreshCD = 0 #(DWORD RefreshCD)// 刷新总CD时, 秒 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | Count = 0 #(DWORD Count)//数量
|
| | | IsBind = 0 #(BYTE IsBind)//是否绑定
|
| | | UserDataLen = 0 #(DWORD UserDataLen)
|
| | | UserData = "" #(String UserData)//自定义数据 |
| | | UserData = "" #(String UserData)//自定义数据 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | Name = "" #(char Name[33])
|
| | | LV = 0 #(DWORD LV)//等级
|
| | | Job = 0 #(BYTE Job)
|
| | | RealmLV = 0 #(WORD RealmLV)//境界 |
| | | RealmLV = 0 #(WORD RealmLV)//境界 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | class tagFamilyArrestOverStateInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(WORD Count)
|
| | | ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count |
| | | ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int),
|
| | | ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ |
| | | ("RefreshType", c_ubyte), #参考CDBPlayerRefresh__ |
| | | ("Value", c_int),
|
| | | ]
|
| | |
|
| | |
| | |
|
| | | class tagGCVoiceChat(Structure):
|
| | | Head = tagHead()
|
| | | ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域 |
| | | ChannelType = 0 #(BYTE ChannelType)// 1 世界 2 仙盟 3 私聊(好友) 4 队伍 5 区域 |
| | | SrcNameLen = 0 #(BYTE SrcNameLen)
|
| | | SrcName = "" #(String SrcName)//size = SrcNameLen
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | |
| | | ItemGUID = "" #(char ItemGUID[40])
|
| | | AuctionType = 0 #(BYTE AuctionType)//拍品类型,0-全服拍品,1-仙盟拍品
|
| | | AddTime = "" #(char AddTime[19])//上架时间
|
| | | BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID |
| | | BidderID = 0 #(DWORD BidderID)//最高竞拍玩家ID,也就是当前最高竞价玩家ID |
| | | BidderPrice = 0 #(DWORD BidderPrice)//最高竞拍价格
|
| | | BiddingTime = "" #(char BiddingTime[19])//竞价时间 yyyy-MM-dd hh:mm:ss
|
| | | data = None
|
| | |
| | |
|
| | | class tagGCCrossRealmPKBillboardInfo(Structure):
|
| | | Head = tagHead()
|
| | | ZoneID = 0 #(BYTE ZoneID)// 赛区ID |
| | | SeasonID = 0 #(BYTE SeasonID)// 赛季ID |
| | | ZoneID = 0 #(BYTE ZoneID)// 赛区ID |
| | | SeasonID = 0 #(BYTE SeasonID)// 赛季ID |
| | | Count = 0 #(WORD Count)
|
| | | PKBillboardList = list() #(vector<tagGCCrossRealmPKBillboardData> PKBillboardList)
|
| | | data = None
|
| | |
| | | BackpackLV = 0 #(BYTE BackpackLV)//背包等级
|
| | | WarehouseLV = 0 #(BYTE WarehouseLV)//仓库等级
|
| | | TeamID = 0 #(DWORD TeamID)//队伍ID
|
| | | UseGoldType = 0 #(BYTE UseGoldType)//默认用金子/金票 类型为MoneyType
|
| | | UseGoldType = 0 #(BYTE UseGoldType)//默认用金子/金票 类型为MoneyType
|
| | | UseSilverType = 0 #(BYTE UseSilverType)//默认用的银子/银票
|
| | | AttackMode = 0 #(BYTE AttackMode)//攻击模式
|
| | | LastWeekOnlineTime = 0 #(DWORD LastWeekOnlineTime)//上周在线时间
|
| | |
| | | _fields_ = [
|
| | | ("ItemID", c_int), #果实物品ID
|
| | | ("EatCnt", c_ushort), #已使用个数
|
| | | ("AddItemCnt", c_int), #增幅丹使用个数
|
| | | ("ItemAddCnt", c_int), #增幅丹增加上限
|
| | | ("ItemBreakCnt", c_int), #增幅丹突破次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.ItemID = 0
|
| | | self.EatCnt = 0
|
| | | self.AddItemCnt = 0
|
| | | self.ItemAddCnt = 0
|
| | | self.ItemBreakCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | DumpString = '''// A3 39 玩家属性果实已使用个数信息//tagMCAttrFruitEatCntList:
|
| | | ItemID:%d,
|
| | | EatCnt:%d,
|
| | | AddItemCnt:%d
|
| | | ItemAddCnt:%d,
|
| | | ItemBreakCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.EatCnt,
|
| | | self.AddItemCnt
|
| | | self.ItemAddCnt,
|
| | | self.ItemBreakCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | |
|
| | | class tagMCEquipPartXLAttr(Structure):
|
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位 |
| | | EquipPlace = 0 #(BYTE EquipPlace)// 装备位 |
| | | XLAttrLV = 0 #(BYTE XLAttrLV)// 洗练等级
|
| | | XLAttrCnt = 0 #(BYTE XLAttrCnt)// 属性条数
|
| | | XLAttrList = list() #(vector<tagMCEquipPartXLAttrValue> XLAttrList)// 属性列表,索引0的代表属性1,依次递增
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Record", c_ubyte), #0-未领取 1-已领取 |
| | | ("Record", c_ubyte), #0-未领取 1-已领取 |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | PlayerID = 0 #(DWORD PlayerID)//玩家ID
|
| | | EquipClassLV = 0 #(BYTE EquipClassLV)
|
| | | ItemDataSize = 0 #(WORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录 |
| | | ItemData = "" #(String ItemData)//物品记录 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | ItemDataSize = 0 #(DWORD ItemDataSize)
|
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | PlusDataSize = 0 #(DWORD PlusDataSize)
|
| | | PlusData = "" #(String PlusData)//扩展记录 |
| | | PlusData = "" #(String PlusData)//扩展记录 |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("MakeType", c_ubyte), #类型 TMakeItemType
|
| | | ("Result", c_ubyte), #是否成功
|
| | | ("MakeItemID", c_int), #合成的物品ID
|
| | | ]
|
| | |
| | | Sync_AttrFruitEatCnt(curPlayer, [itemID])
|
| | |
|
| | | # 增加属性
|
| | | attrIDList = __AddFruitAttr(curPlayer, itemID, funcIndex, addValue)
|
| | | __AddFruitAttr(curPlayer, itemID, funcIndex, addValue)
|
| | |
|
| | | # 刷新属性
|
| | | __RefreshAttr(curPlayer, funcIndex)
|
| | |
| | |
|
| | | #[属性索引, 是否基础属性,(非)线性]
|
| | | attrInfo = ChConfig.ItemEffect_AttrDict.get(effPerID, [])
|
| | | if attrInfo == []:
|
| | | if attrInfo is []:
|
| | | return
|
| | |
|
| | | addAttrList = attrInfo[0]
|
| | |
| | | # @param curPlayer
|
| | | # @param fruitItemID
|
| | | # @return None
|
| | | def Sync_AttrFruitEatCnt(curPlayer, fruitItemIDList=[]):
|
| | | def Sync_AttrFruitEatCnt(curPlayer, fruitItemIDList=None):
|
| | |
|
| | | eatPack = ChPyNetSendPack.tagMCAttrFruitEatCntList()
|
| | | eatPack.Clear()
|
| | | eatPack.EatCntList = []
|
| | | if fruitItemIDList == []:
|
| | | if fruitItemIDList is None:
|
| | | itemidList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | maxCnt = ipyDataMgr.GetAttrFruitCount()
|
| | |
| | | eatCntPack.Clear()
|
| | | eatCntPack.ItemID = fruitItemID
|
| | | eatCntPack.EatCnt = curPlayer.NomalDictGetProperty(eatCntKey)
|
| | | eatCntPack.AddItemCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % fruitItemID)
|
| | | eatCntPack.ItemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % fruitItemID)
|
| | | eatCntPack.ItemBreakCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitItemBreakCnt % fruitItemID)
|
| | | eatPack.EatCntList.append(eatCntPack)
|
| | |
|
| | | eatPack.count = len(eatPack.EatCntList)
|
| | |
| | | maxEatCnt = maxEatCntDict[order]
|
| | | break
|
| | | addItemUseCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID)
|
| | | if addItemUseCnt:
|
| | | addItemInfo = ipyData.GetAddItemInfo()
|
| | | if addItemInfo:
|
| | | singleItemCnt, singleAddCnt = addItemInfo[1:]
|
| | | maxEatCnt += (addItemUseCnt/singleItemCnt*singleAddCnt)
|
| | | maxEatCnt += addItemUseCnt
|
| | | return maxEatCnt
|
| | |
|
| | |
|
| | |
| | | ipyData = GetAttrFruitIpyData(itemID)
|
| | | if not ipyData:
|
| | | return
|
| | | addItemInfo = ipyData.GetAddItemInfo()
|
| | | if not addItemInfo:
|
| | | addItemInfoList = ipyData.GetAddItemInfo()
|
| | | if not addItemInfoList:
|
| | | return
|
| | | addItemUseCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID)
|
| | | needItemID, singleItemCnt, singleAddCnt = addItemInfo
|
| | | if addItemUseCnt + singleItemCnt> ChConfig.Def_UpperLimit_DWord:
|
| | | itemBreakCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitItemBreakCnt % itemID)
|
| | | itemAddUseCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID)
|
| | | needUseCnt = canUpCnt = 0
|
| | | for breakCnt, useCnt, upCnt in addItemInfoList:
|
| | | if itemBreakCnt >= breakCnt:
|
| | | continue
|
| | | needUseCnt, canUpCnt = useCnt, upCnt
|
| | | break
|
| | | if not needUseCnt:
|
| | | return
|
| | |
|
| | | needItemID = IpyGameDataPY.GetFuncCfg('AlchemyOverLimit')
|
| | | if itemAddUseCnt + canUpCnt> ChConfig.Def_UpperLimit_DWord:
|
| | | return
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(needItemID, itemPack, singleItemCnt)
|
| | | enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(needItemID, itemPack, needUseCnt)
|
| | | if not enough:
|
| | | return
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, indexList, singleItemCnt, False, "AddFruitUseLimit")
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID, addItemUseCnt+singleItemCnt)
|
| | | |
| | | ItemCommon.ReduceItem(curPlayer, itemPack, indexList, needUseCnt, False, "AddFruitUseLimit")
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID, itemAddUseCnt+canUpCnt)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AttrFruitItemBreakCnt % itemID,
|
| | | itemBreakCnt + 1)
|
| | | Sync_AttrFruitEatCnt(curPlayer, [itemID])
|
| | | return
|