| | |
| | | PacketSubCMD_1=0x16
|
| | | PacketCallFunc_1=OnZhenbaogeOP
|
| | |
|
| | | ;家族仓库
|
| | | [PlayerFamilyStore]
|
| | | ScriptName = Player\PlayerFamilyStore.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | |
|
| | | PacketCMD_1=0xA6
|
| | | PacketSubCMD_1=0x09
|
| | | PacketCallFunc_1=OnFamilyStoreDonate
|
| | |
|
| | | PacketCMD_2=0xA6
|
| | | PacketSubCMD_2=0x10
|
| | | PacketCallFunc_2=OnFamilyStoreExchange
|
| | |
|
| | | ;家族阵法
|
| | | [PlayerFamilyZhenfa]
|
| | | ScriptName = Player\PlayerFamilyZhenfa.py
|
| | |
| | | Def_PlayerKey_BuyItemCnt = "BuyItemCnt" # 购买物品数量
|
| | | Def_PlayerKey_SpeedHorse = "SpeedHorse" # 骑乘时附加移动速度值
|
| | | Def_PlayerKey_QueryOpenServerAwardState = "QueryOpenServerAwardState" # 查询开服奖励状态
|
| | | Def_PlayerKey_QueryFamilyStoreTick = "QueryFamilyStoreTick" # 战盟仓库操作tick
|
| | |
|
| | | Def_PlayerKey_QueryMarkIdCardIndex = 'QueryMarkIdCardIndex' # 指定账号生成卡类型
|
| | | Def_PlayerKey_QueryNewGuyCardType = 'QueryNewGuyCardType' # 查询的新手卡类型
|
| | |
| | | ItemGive_OpenServerCampaign, # 开服活动
|
| | | ItemGive_CTG, # CTG
|
| | | ItemGive_DiceEx, # 我要天机 15
|
| | | ItemGive_FamilyStore, # 仙盟宝库
|
| | | ItemGive_16, # 仙盟宝库
|
| | | ItemGive_Refine, # 炼丹
|
| | | ItemGive_Chests, # 宝箱
|
| | | ItemGive_TrialExchange, # 宗门兑换
|
| | |
| | | ItemGive_OpenServerCampaign:"OpenServerCampaign",
|
| | | ItemGive_CTG:"CTG",
|
| | | ItemGive_DiceEx:"DiceEx",
|
| | | ItemGive_FamilyStore:"FamilyStore",
|
| | | ItemGive_Refine:"Refine",
|
| | | ItemGive_Chests:"Chests",
|
| | | ItemGive_TrialExchange:"TrialExchange",
|
| | |
| | | ItemDel_AttrFruit, # 属性道具
|
| | | ItemDel_AddBourseItem, # 上架交易所
|
| | | ItemDel_EquipDecompose, # 装备分解
|
| | | ItemDel_FamilyStore, # 捐献装备 20
|
| | | ItemDel_20, # 捐献装备 20
|
| | | ItemDel_Treasure, # 寻宝
|
| | | ItemDel_WingExp, # 翅膀精炼经验
|
| | | ItemDel_StoneUpgrade, # 宝石升级
|
| | |
| | | ItemDel_AttrFruit:"AttrFruit",
|
| | | ItemDel_AddBourseItem:"AddBourseItem",
|
| | | ItemDel_EquipDecompose:"EquipDecompose",
|
| | | ItemDel_FamilyStore:"FamilyStore",
|
| | | ItemDel_Treasure:"Treasure",
|
| | | ItemDel_WingExp:"WingExp",
|
| | | ItemDel_StoneUpgrade:"StoneUpgrade",
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A4 09 家族仓库删除物品 #tagCGFamilyStoreDel
|
| | |
|
| | | class tagCGFamilyStoreDel(Structure):
|
| | | Head = tagHead()
|
| | | IndexCount = 0 #(BYTE IndexCount)
|
| | | StoreItemIndex = list() #(vector<BYTE> StoreItemIndex)// 仓库物品索引,1代表索引0的物品,与兑换一致
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x09
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.IndexCount):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.StoreItemIndex.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x09
|
| | | self.IndexCount = 0
|
| | | self.StoreItemIndex = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1 * self.IndexCount
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.IndexCount)
|
| | | for i in range(self.IndexCount):
|
| | | data = CommFunc.WriteBYTE(data, self.StoreItemIndex[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | IndexCount:%d,
|
| | | StoreItemIndex:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.IndexCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGFamilyStoreDel=tagCGFamilyStoreDel()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGFamilyStoreDel.Head.Cmd,m_NAtagCGFamilyStoreDel.Head.SubCmd))] = m_NAtagCGFamilyStoreDel
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A4 03 加入家族审核情况 #tagCGJoinFamilyReply
|
| | |
|
| | | class tagCGJoinFamilyReply(Structure):
|
| | |
| | |
|
| | | m_NAtagCMFamilyMoneyDonate=tagCMFamilyMoneyDonate()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyMoneyDonate.Cmd,m_NAtagCMFamilyMoneyDonate.SubCmd))] = m_NAtagCMFamilyMoneyDonate
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A6 09 家族仓库捐赠物品 #tagCMFamilyStoreDonate
|
| | |
|
| | | class tagCMFamilyStoreDonate(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ItemIndex", c_ubyte), # 捐赠物品在背包中的索引
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA6
|
| | | 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 = 0xA6
|
| | | self.SubCmd = 0x09
|
| | | self.ItemIndex = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMFamilyStoreDonate)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A6 09 家族仓库捐赠物品 //tagCMFamilyStoreDonate:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ItemIndex:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ItemIndex
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMFamilyStoreDonate=tagCMFamilyStoreDonate()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyStoreDonate.Cmd,m_NAtagCMFamilyStoreDonate.SubCmd))] = m_NAtagCMFamilyStoreDonate
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A6 10 家族仓库兑换物品 #tagCMFamilyStoreExchange
|
| | |
|
| | | class tagCMFamilyStoreExchange(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("StoreItemIndex", c_ubyte), # 0-兑换口粮;>0-兑换仓库物品,1代表索引0的物品
|
| | | ("ItemID", c_int), # 兑换的物品ID
|
| | | ("ExcangeCount", c_ushort), # 兑换个数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA6
|
| | | 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 = 0xA6
|
| | | self.SubCmd = 0x10
|
| | | self.StoreItemIndex = 0
|
| | | self.ItemID = 0
|
| | | self.ExcangeCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMFamilyStoreExchange)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A6 10 家族仓库兑换物品 //tagCMFamilyStoreExchange:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | StoreItemIndex:%d,
|
| | | ItemID:%d,
|
| | | ExcangeCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.StoreItemIndex,
|
| | | self.ItemID,
|
| | | self.ExcangeCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMFamilyStoreExchange=tagCMFamilyStoreExchange()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyStoreExchange.Cmd,m_NAtagCMFamilyStoreExchange.SubCmd))] = m_NAtagCMFamilyStoreExchange
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A4 06 家族仓库物品信息 #tagGCFamilyStoreItemInfo
|
| | |
|
| | | class tagGCFamilyStoreItem(Structure):
|
| | | Index = 0 #(BYTE Index)// 仓库格子索引,从0开始代表第一格
|
| | | ItemID = 0 #(DWORD ItemID)// 物品ID
|
| | | ItemDataLen = 0 #(WORD ItemDataLen)
|
| | | ItemData = "" #(String ItemData)//size = ItemDataLen
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ItemDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Index = 0
|
| | | self.ItemID = 0
|
| | | self.ItemDataLen = 0
|
| | | self.ItemData = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 4
|
| | | length += 2
|
| | | length += len(self.ItemData)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.Index)
|
| | | data = CommFunc.WriteDWORD(data, self.ItemID)
|
| | | data = CommFunc.WriteWORD(data, self.ItemDataLen)
|
| | | data = CommFunc.WriteString(data, self.ItemDataLen, self.ItemData)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Index:%d,
|
| | | ItemID:%d,
|
| | | ItemDataLen:%d,
|
| | | ItemData:%s
|
| | | '''\
|
| | | %(
|
| | | self.Index,
|
| | | self.ItemID,
|
| | | self.ItemDataLen,
|
| | | self.ItemData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCFamilyStoreItemInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)//数量
|
| | | StoreItemList = list() #(vector<tagGCFamilyStoreItem> StoreItemList)//size = Count
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x06
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temStoreItemList = tagGCFamilyStoreItem()
|
| | | _pos = temStoreItemList.ReadData(_lpData, _pos)
|
| | | self.StoreItemList.append(temStoreItemList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x06
|
| | | self.Count = 0
|
| | | self.StoreItemList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.StoreItemList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.StoreItemList[i].GetLength(), self.StoreItemList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | StoreItemList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyStoreItemInfo=tagGCFamilyStoreItemInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemInfo.Head.Cmd,m_NAtagGCFamilyStoreItemInfo.Head.SubCmd))] = m_NAtagGCFamilyStoreItemInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A4 07 家族仓库物品清除 #tagGCFamilyStoreItemClear
|
| | |
|
| | | class tagGCFamilyStoreItemClear(Structure):
|
| | | Head = tagHead()
|
| | | ClearType = 0 #(BYTE ClearType)//0-指定格子清除; 1-所有物品清除
|
| | | IndexCount = 0 #(BYTE IndexCount)
|
| | | IndexList = list() #(vector<BYTE> IndexList)//清除的格子索引, 仅指定格子清除时有效,从0开始代表第一格
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x07
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ClearType,_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)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA4
|
| | | self.Head.SubCmd = 0x07
|
| | | self.ClearType = 0
|
| | | self.IndexCount = 0
|
| | | self.IndexList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1 * self.IndexCount
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.ClearType)
|
| | | data = CommFunc.WriteBYTE(data, self.IndexCount)
|
| | | for i in range(self.IndexCount):
|
| | | data = CommFunc.WriteBYTE(data, self.IndexList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ClearType:%d,
|
| | | IndexCount:%d,
|
| | | IndexList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ClearType,
|
| | | self.IndexCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCFamilyStoreItemClear=tagGCFamilyStoreItemClear()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyStoreItemClear.Head.Cmd,m_NAtagGCFamilyStoreItemClear.Head.SubCmd))] = m_NAtagGCFamilyStoreItemClear
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A4 09 家族守卫人皇信息通知 #tagGCFamilySWRHInfo
|
| | |
|
| | | class tagGCFamilySWRHInfo(Structure):
|
| | |
| | | CDBPlayerRefresh_ProDefHPPer, # 生命上限换算为防护值的百分比 165
|
| | | CDBPlayerRefresh_ProDefAbsorb, # 防护盾吸收伤害百分比
|
| | | CDBPlayerRefresh_FamilyContribution, # 战盟贡献度
|
| | | CDBPlayerRefresh_FamilyStoreScore, # 战盟仓库积分
|
| | | CDBPlayerRefresh_168, # 战盟仓库积分
|
| | | CDBPlayerRefresh_Rune, # 符印精华点
|
| | | CDBPlayerRefresh_RuneSplinters, # 符印碎片 170
|
| | | CDBPlayerRefresh_RealmPoint, # 境界修炼点
|
| | |
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_FamilyExp = 6 # 战盟经验
|
| | | TYPE_Price_FamilyStoreScore = 10 # 战盟仓库积分
|
| | | TYPE_Price_10 = 10 # 战盟仓库积分
|
| | | TYPE_Price_RealmPoint = 13 # 境界修炼点
|
| | | TYPE_Price_Ysog = 14 # 魔精
|
| | | TYPE_Price_FamilyCoin = 15 # 仙盟公会贡献币
|
| | |
| | |
|
| | | # 自定义积分及通知字典 {货币类型:通知客户端刷新类型, ...} , 如果不通知的话刷新类型则配置 None
|
| | | TYPE_Price_CurrencyDict = {
|
| | | TYPE_Price_FamilyStoreScore:CDBPlayerRefresh_FamilyStoreScore,
|
| | | TYPE_Price_Rune:CDBPlayerRefresh_Rune,
|
| | | TYPE_Price_RuneSplinters:CDBPlayerRefresh_RuneSplinters,
|
| | | TYPE_Price_TreasureScore:CDBPlayerRefresh_TreasureScore,
|