Add: 1886 【后端】神兽功能及神兽装备相关;2615 【后端】神兽——强化功能;
| | |
| | | list AttrValue; //属性值
|
| | | };
|
| | |
|
| | | //神兽表
|
| | |
|
| | | struct tagDogz
|
| | | {
|
| | | BYTE _DogzID; //神兽ID
|
| | | list BaseAttrTypes; //基础属性类型列表
|
| | | list BaseAttrValues; //基础属性值列表
|
| | | list HelpBattleSkills; //助战技能ID列表
|
| | | list EquipPlaceColorList; //穿戴装备颜色限制
|
| | | };
|
| | |
|
| | | //神兽强化表
|
| | |
|
| | | struct tagDogzEquipPlus
|
| | | {
|
| | | BYTE _EquipPlace; //装备位
|
| | | BYTE _PlusLV; //强化等级
|
| | | list PlusAttrTypes; //强化属性类型列表
|
| | | list PlusAttrValues; //强化属性值列表
|
| | | DWORD PlusLVUPTotalExp; //升级所需累计熟练度总值
|
| | | };
|
| | |
|
| | | //符印表
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("DogzID", c_ubyte), # 神兽ID
|
| | | ("EquipIndex", c_ubyte), #神兽装备所在神兽背包索引
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | 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 = 0xA5
|
| | | self.SubCmd = 0xC0
|
| | | self.DogzID = 0
|
| | | self.EquipIndex = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMDogzEquipItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 C0 神兽穿戴装备 //tagCMDogzEquipItem:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | DogzID:%d,
|
| | | EquipIndex:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.DogzID,
|
| | | self.EquipIndex
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Cmd,m_NAtagCMDogzEquipItem.SubCmd))] = m_NAtagCMDogzEquipItem
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C4 神兽装备强化 #tagCMDogzEquipPlus
|
| | |
|
| | | class tagCMDogzEquipPlus(Structure):
|
| | | Head = tagHead()
|
| | | EquipIndex = 0 #(BYTE EquipIndex)//神兽装备背包中索引
|
| | | IndexCount = 0 #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
|
| | | IndexList = list() #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
|
| | | 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)
|
| | | 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.IsDouble = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1 * 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])
|
| | | data = CommFunc.WriteBYTE(data, self.IsDouble)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EquipIndex:%d,
|
| | | IndexCount:%d,
|
| | | IndexList:%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 48 兑换大师等级经验 #tagCMExchangeMasterEXP
|
| | |
|
| | | class tagCMExchangeMasterEXP(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):
|
| | |
| | | rptTempItem, # 临时存放背包 29
|
| | | rptTreasure, # 寻宝物品背包 30
|
| | | rptPet, # 宠物背包(用物品存储宠物的数据) 31
|
| | | rptDogzItem, # 神兽物品背包 32
|
| | | rptDogzEquip, # 神兽装备背包 33
|
| | | rptMax, # 最大背包类型数量,放在最后一个
|
| | | ) = range(28, 28 + 5) #C++定义的枚举到27
|
| | | ) = range(28, 28 + 7) #C++定义的枚举到27
|
| | |
|
| | | #虚拟背包类型, 从255递减
|
| | | Def_VPack_TypeList = (
|
| | | rptRune, # 符印背包 255
|
| | | ) = range(256 - 1, 256)
|
| | |
|
| | |
|
| | | #虚拟背包物品信息 ChConfig.Def_VPackItem_Dict
|
| | |
|
| | |
|
| | | #武器的手持形式
|
| | |
| | | Def_IudetPartSuiteLV = 25 # 部位套装等级 [套装类型1等级, 套装类型2等级, ...]
|
| | | Def_IudetWingMaterialItemID = 27 # 翅膀精炼材料ID列表
|
| | | Def_IudetWingMaterialItemCount = 29 # 翅膀精炼材料个数列表
|
| | | Def_IudetDogzEquipPlus = 31 # 神兽装备强化信息列表 [强化等级, 累计总熟练度]
|
| | |
|
| | | Def_IudetItemColor = 16 # 物品颜色,如果该值没有就取物品
|
| | | Def_IudetItemCount = 18 # 物品个数,支持20亿,目前仅特殊转化物品会用到
|
| | |
| | | )=range(5)
|
| | |
|
| | | # 战斗力模块类型
|
| | | Def_MFPType_Max = 24
|
| | | Def_MFPType_Max = 25
|
| | | ModuleFightPowerTypeList = (
|
| | | Def_MFPType_Role, # 角色 0
|
| | | Def_MFPType_Equip, # 装备(基本装备位) 1
|
| | |
| | | Def_MFPType_PetSoul, # 灵宠魂石 18
|
| | | Def_MFPType_HorseSoul, # 坐骑魂石 19
|
| | | Def_MFPType_MagicWeaponSoul, # 法宝之魂 20
|
| | | Def_MFPType_Dogz, # 神兽 21
|
| | | Def_MFPType_Other, # 其他
|
| | |
|
| | | #以下暂时没用到,改时再处理
|
| | |
| | | ) = range(1, 21)
|
| | |
|
| | |
|
| | | # 神兽装备位定义
|
| | | DogzEquipPlace = (
|
| | | dogzetHorn, # 神兽兽角
|
| | | dogzetEye, # 神兽魔眼
|
| | | dogzetTooth, # 神兽獠牙
|
| | | dogzetClaw, # 神兽兽爪
|
| | | dogzetScute, # 神兽鳞甲
|
| | | ) = range(101, 101 + 5)
|
| | |
|
| | |
|
| | | # 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
|
| | | EnterFBAskResult = (
|
| | | EntFBAskRet_OK, # 0 可以进入
|
| | |
| | | PacketSubCMD_1=0x03
|
| | | PacketCallFunc_1=OnActiveAllEquipAttr
|
| | |
|
| | | ;神兽
|
| | | [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
|
| | |
|
| | | ;个推
|
| | | [PlayerGeTui]
|
| | | ScriptName = Player\PlayerGeTui.py
|
| | |
| | | Def_ItemType_ResetAttrPoint = 59 #洗点卷轴 使用后将某个属性一定值变为未分配属性
|
| | |
|
| | | Def_ItemType_DogzEquipExp = 70 # 神兽装备经验
|
| | | Def_ItemType_DogzEquipHorn = 71 # 神兽装备兽角
|
| | | Def_ItemType_DogzEquipEye = 72 # 神兽装备魔眼
|
| | | Def_ItemType_DogzEquipTooth = 73 # 神兽装备獠牙
|
| | | Def_ItemType_DogzEquipClaw = 74 # 神兽装备兽爪
|
| | | Def_ItemType_DogzEquipSquama = 75 # 神兽装备鳞甲
|
| | |
|
| | | Def_ItemType_TreasureBox = 81 #不限制开启条件宝箱
|
| | | Def_ItemType_TreasureBox2 = 82 #限制开启条件宝箱
|
| | |
| | | Def_ItemType_retBaldric5 = 117 #17 佩饰
|
| | | Def_ItemType_retBaldric6 = 118 #18 佩饰
|
| | |
|
| | | Def_ItemType_DogzEquipHorn = 119 # 神兽兽角
|
| | | Def_ItemType_DogzEquipEye = 120 # 神兽魔眼
|
| | | Def_ItemType_DogzEquipTooth = 121 # 神兽獠牙
|
| | | Def_ItemType_DogzEquipClaw = 122 # 神兽兽爪
|
| | | Def_ItemType_DogzEquipScute = 123 # 神兽鳞甲
|
| | |
|
| | | #以下定义物品类型下次删除
|
| | | Def_Item_Type_Horse = 1000036 #坐骑
|
| | |
|
| | |
| | | }
|
| | |
|
| | | #虚拟背包可以放入的物品字典
|
| | | Def_VPackItem_Dict = {
|
| | | Def_PackItemTypeList_Dict = {
|
| | | ShareDefine.rptRune:[Def_ItemType_Rune, Def_ItemType_RuneExp],
|
| | | ShareDefine.rptDogzItem:[Def_ItemType_DogzEquipExp, Def_ItemType_DogzEquipHorn, Def_ItemType_DogzEquipEye, |
| | | Def_ItemType_DogzEquipTooth, Def_ItemType_DogzEquipClaw, Def_ItemType_DogzEquipScute],
|
| | | }
|
| | |
|
| | | def GetItemPackType(itemType):
|
| | | def GetItemPackType(itemType, defaultPack=IPY_GameWorld.rptItem):
|
| | | ## 获取物品类型对应存放的默认背包类型
|
| | | for pack, itemTypeList in Def_VPackItem_Dict.items():
|
| | | for pack, itemTypeList in Def_PackItemTypeList_Dict.items():
|
| | | if itemType in itemTypeList:
|
| | | return pack
|
| | | return IPY_GameWorld.rptItem
|
| | | return defaultPack
|
| | |
|
| | | # 部位对应装备类型列表
|
| | | Def_PlaceEquipType = {
|
| | |
| | | Def_Effect_ResetAttrPoint = 231 # 洗点
|
| | | Def_Effect_AddFBCnt = 233 # 增加副本可进入次数
|
| | | Def_Effect_AddKillBossCnt = 234 # 增加BOSS可击杀次数
|
| | | Def_Effect_DogzEquipPlusExp = 235 # 神兽强化材料经验效果,A值基础经验,B值双倍强化消耗仙玉
|
| | |
|
| | | #----以下未使用或代码依然存在的---
|
| | | Def_Effect_ItemGiveGongXun = 1920 #使用道具给予功勋
|
| | |
| | |
|
| | | Def_EquipItemType_TJGAutoEat = xrange(Def_ItemType_retWeapon, Def_ItemType_retShoes + 1)
|
| | | #装备类型
|
| | | Def_EquipItemType = xrange(Def_ItemType_retWeapon, Def_ItemType_retBaldric6 + 1)
|
| | | Def_EquipItemType = xrange(Def_ItemType_retWeapon, Def_ItemType_DogzEquipScute + 1)
|
| | |
|
| | | #武器类型
|
| | | Def_WeaponItemType = [Def_ItemType_retWeapon, Def_ItemType_retWeapon2]
|
| | |
|
| | | #神兽装备类型
|
| | | Def_DogzEquiipType = xrange(Def_ItemType_DogzEquipHorn, Def_ItemType_DogzEquipScute + 1)
|
| | |
|
| | | # 技能造成实质性伤害的类型
|
| | | Def_RealAttack_Type = [Def_HurtType_Normal, # 普通伤害 1
|
| | |
| | | Def_PackCnt_OfficerSkill = 0
|
| | | #寻宝背包格子数
|
| | | Def_PackCnt_Treasure = 100
|
| | | #初始化神兽背包格子数
|
| | | Def_PackCnt_DogzItem = 100
|
| | | #初始化神兽装备格子数
|
| | | Def_PackCnt_DogzEquip = 100
|
| | | #初始化装备栏2
|
| | | Def_PackCnt_Equip2 = 0
|
| | | #初始化回收站
|
| | |
| | | ShareDefine.rptTempItem,
|
| | | ShareDefine.rptTreasure,
|
| | | ShareDefine.rptPet,
|
| | | ShareDefine.rptDogzItem,
|
| | | ShareDefine.rptDogzEquip,
|
| | | ]
|
| | |
|
| | | #装备可强化背包列表
|
| | |
| | | #套装
|
| | | Def_PDict_EquipPartSuiteLV = "EQPartSuiteLV_%s_%s" #部位套装等级 参数 部位、套装类型
|
| | | Def_PDict_EquipPartSuiteNotify = "EQPartSuiteNotify_%s_%s_%s" #部位套装提示记录 参数 组合类型、套装类型、X件
|
| | |
|
| | | #神兽
|
| | | Def_PDict_DogzFightState = "DogzFightState_%s" # 神兽助战状态,参数为key编号,按神兽ID二进制位存储
|
| | | Def_PDict_DogzBuyHelpbattleCount = "DogzBuyHelpbattleCount" # 额外购买的神兽助战位
|
| | |
|
| | | #-------------------------------------------------------------------------------
|
| | | #可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]}
|
| | |
|
| | |
| | | Def_CalcAttrFunc_StoveYao, # 炼丹炉丹药 32
|
| | | Def_CalcAttrFunc_PetSign, # 宠物签到 33
|
| | | Def_CalcAttrFunc_MagicWeaponSoul, # 法宝之魂属性34
|
| | | ) = range(35)
|
| | | Def_CalcAttrFunc_Dogz, # 神兽35
|
| | | ) = range(36)
|
| | |
|
| | |
|
| | | # 在此列表中的功能属性,不享受百分比加成,--属性参与战力计算
|
| | |
| | | ShareDefine.Def_MFPType_MagicWeapon3:[Def_CalcAttrFunc_MagicWeapon3, Def_CalcAttrFunc_Stove, Def_CalcAttrFunc_VIP],
|
| | | ShareDefine.Def_MFPType_StoveYao:[Def_CalcAttrFunc_StoveYao],
|
| | | ShareDefine.Def_MFPType_MagicWeaponSoul:[Def_CalcAttrFunc_MagicWeaponSoul],
|
| | | ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz],
|
| | | ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose],
|
| | | }
|
| | |
|
| | |
| | | Def_Cost_EnterFB, # 进入副本
|
| | | Def_Cost_GameServer, # GameServer 30
|
| | | Def_Cost_FreeGoods, # 极品白拿
|
| | | Def_Cost_DogzEquipPlus, # 神兽装备强化
|
| | | #-----------以下为暂时没用的,先不删除,如有新增消费点则放在这些之前------------
|
| | | Def_Cost_RefreshArrestTask, # 刷新悬赏任务
|
| | | Def_Cost_OffLineExp, # 兑换离线经验
|
| | |
| | | Def_Cost_Trade, # 交易
|
| | | Def_Cost_Rename, # 改名
|
| | | Def_Cost_SkillLvUp, # 技能升级
|
| | | ) = range(2000, 2000 + 52)
|
| | | ) = range(2000, 2000 + 53)
|
| | |
|
| | | Def_Cost_Reason_SonKey = "reason_name_son" # 消费点原因子类说明key
|
| | |
|
| | |
| | | Def_Cost_FamilyBroadcast:"FamilyBroadcast",
|
| | | Def_Cost_FamilyRedPacket:"FamilyRedPacket",
|
| | | Def_Cost_FreeGoods:"FreeGoods",
|
| | | Def_Cost_DogzEquipPlus:"DogzEquipPlus",
|
| | | }
|
| | | ## -----------------------------------------------------
|
| | |
|
| | |
| | | ItemDel_EquipSuit, # 套装 30
|
| | | ItemDel_AddFBCnt, # 增加副本可进入次数 31
|
| | | ItemDel_AddKillBossCnt, # 增加BOSS可击杀次数 32
|
| | | ) = range(2000, 2000 + 33)
|
| | | ItemDel_DogzEquipPlus, # 神兽装备强化
|
| | | ) = range(2000, 2000 + 34)
|
| | |
|
| | | # 物品扣除类型对应信息 {类型:eventName, ...}
|
| | | ItemDelTypeDict = {
|
| | |
| | | ItemDel_EquipSuit:"EquipSuit",
|
| | | ItemDel_AddFBCnt:"AddFBCnt",
|
| | | ItemDel_AddKillBossCnt:"AddKillBossCnt",
|
| | | ItemDel_DogzEquipPlus:"DogzEquipPlus",
|
| | | }
|
| | |
|
| | | ##==================================================================================================
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("DogzID", c_ubyte), # 神兽ID
|
| | | ("EquipIndex", c_ubyte), #神兽装备所在神兽背包索引
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA5
|
| | | 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 = 0xA5
|
| | | self.SubCmd = 0xC0
|
| | | self.DogzID = 0
|
| | | self.EquipIndex = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMDogzEquipItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A5 C0 神兽穿戴装备 //tagCMDogzEquipItem:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | DogzID:%d,
|
| | | EquipIndex:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.DogzID,
|
| | | self.EquipIndex
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMDogzEquipItem=tagCMDogzEquipItem()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDogzEquipItem.Cmd,m_NAtagCMDogzEquipItem.SubCmd))] = m_NAtagCMDogzEquipItem
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C4 神兽装备强化 #tagCMDogzEquipPlus
|
| | |
|
| | | class tagCMDogzEquipPlus(Structure):
|
| | | Head = tagHead()
|
| | | EquipIndex = 0 #(BYTE EquipIndex)//神兽装备背包中索引
|
| | | IndexCount = 0 #(BYTE IndexCount)//材料所在神兽物品背包索引的数量
|
| | | IndexList = list() #(vector<BYTE> IndexList)//材料所在神兽物品背包索引列表
|
| | | 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)
|
| | | 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.IsDouble = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1 * 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])
|
| | | data = CommFunc.WriteBYTE(data, self.IsDouble)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EquipIndex:%d,
|
| | | IndexCount:%d,
|
| | | IndexList:%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 48 兑换大师等级经验 #tagCMExchangeMasterEXP
|
| | |
|
| | | class tagCMExchangeMasterEXP(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):
|
| | |
| | | ShareDefine.Def_MFPType_PetSoul:"宠魂",
|
| | | ShareDefine.Def_MFPType_HorseSoul:"骑魂",
|
| | | ShareDefine.Def_MFPType_MagicWeaponSoul:"法宝之魂",
|
| | | ShareDefine.Def_MFPType_Dogz:"神兽",
|
| | | ShareDefine.Def_MFPType_Other:"其他",
|
| | | }
|
| | |
|
| | |
| | | ChConfig.Def_CalcAttrFunc_StoveYao:"炼丹炉丹药",
|
| | | ChConfig.Def_CalcAttrFunc_PetSign:"宠物签到",
|
| | | ChConfig.Def_CalcAttrFunc_MagicWeaponSoul:"法宝之魂",
|
| | | ChConfig.Def_CalcAttrFunc_Dogz:"神兽",
|
| | | }
|
| | |
|
| | | GameWorld.DebugAnswer(curPlayer, "PrintFightPower 模块类型(可选)")
|
| | |
| | | ("list", "AttrValue", 0),
|
| | | ),
|
| | |
|
| | | "Dogz":(
|
| | | ("BYTE", "DogzID", 1),
|
| | | ("list", "BaseAttrTypes", 0),
|
| | | ("list", "BaseAttrValues", 0),
|
| | | ("list", "HelpBattleSkills", 0),
|
| | | ("list", "EquipPlaceColorList", 0),
|
| | | ),
|
| | |
|
| | | "DogzEquipPlus":(
|
| | | ("BYTE", "EquipPlace", 1),
|
| | | ("BYTE", "PlusLV", 1),
|
| | | ("list", "PlusAttrTypes", 0),
|
| | | ("list", "PlusAttrValues", 0),
|
| | | ("DWORD", "PlusLVUPTotalExp", 0),
|
| | | ),
|
| | |
|
| | | "Rune":(
|
| | | ("DWORD", "ID", 1),
|
| | | ("list", "AttrType", 0),
|
| | |
| | | def GetStarsNeed(self): return self.StarsNeed # 全身星数
|
| | | def GetAttrType(self): return self.AttrType # 属性类型
|
| | | def GetAttrValue(self): return self.AttrValue # 属性值 |
| | | |
| | | # 神兽表 |
| | | class IPY_Dogz(): |
| | | |
| | | def __init__(self): |
| | | self.DogzID = 0
|
| | | self.BaseAttrTypes = []
|
| | | self.BaseAttrValues = []
|
| | | self.HelpBattleSkills = []
|
| | | self.EquipPlaceColorList = [] |
| | | return |
| | | |
| | | def GetDogzID(self): return self.DogzID # 神兽ID
|
| | | def GetBaseAttrTypes(self): return self.BaseAttrTypes # 基础属性类型列表
|
| | | def GetBaseAttrValues(self): return self.BaseAttrValues # 基础属性值列表
|
| | | def GetHelpBattleSkills(self): return self.HelpBattleSkills # 助战技能ID列表
|
| | | def GetEquipPlaceColorList(self): return self.EquipPlaceColorList # 穿戴装备颜色限制 |
| | | |
| | | # 神兽强化表 |
| | | class IPY_DogzEquipPlus(): |
| | | |
| | | def __init__(self): |
| | | self.EquipPlace = 0
|
| | | self.PlusLV = 0
|
| | | self.PlusAttrTypes = []
|
| | | self.PlusAttrValues = []
|
| | | self.PlusLVUPTotalExp = 0 |
| | | return |
| | | |
| | | def GetEquipPlace(self): return self.EquipPlace # 装备位
|
| | | def GetPlusLV(self): return self.PlusLV # 强化等级
|
| | | def GetPlusAttrTypes(self): return self.PlusAttrTypes # 强化属性类型列表
|
| | | def GetPlusAttrValues(self): return self.PlusAttrValues # 强化属性值列表
|
| | | def GetPlusLVUPTotalExp(self): return self.PlusLVUPTotalExp # 升级所需累计熟练度总值 |
| | | |
| | | # 符印表 |
| | | class IPY_Rune(): |
| | |
| | | self.ipyItemPlusSumAttrLen = len(self.ipyItemPlusSumAttrCache)
|
| | | self.ipyRoleEquipStarsCache = self.__LoadFileData("RoleEquipStars", IPY_RoleEquipStars)
|
| | | self.ipyRoleEquipStarsLen = len(self.ipyRoleEquipStarsCache)
|
| | | self.ipyDogzCache = self.__LoadFileData("Dogz", IPY_Dogz)
|
| | | self.ipyDogzLen = len(self.ipyDogzCache)
|
| | | self.ipyDogzEquipPlusCache = self.__LoadFileData("DogzEquipPlus", IPY_DogzEquipPlus)
|
| | | self.ipyDogzEquipPlusLen = len(self.ipyDogzEquipPlusCache)
|
| | | self.ipyRuneCache = self.__LoadFileData("Rune", IPY_Rune)
|
| | | self.ipyRuneLen = len(self.ipyRuneCache)
|
| | | self.ipyEquipWashCache = self.__LoadFileData("EquipWash", IPY_EquipWash)
|
| | |
| | | def GetItemPlusSumAttrByIndex(self, index): return self.ipyItemPlusSumAttrCache[index]
|
| | | def GetRoleEquipStarsCount(self): return self.ipyRoleEquipStarsLen
|
| | | def GetRoleEquipStarsByIndex(self, index): return self.ipyRoleEquipStarsCache[index]
|
| | | def GetDogzCount(self): return self.ipyDogzLen
|
| | | def GetDogzByIndex(self, index): return self.ipyDogzCache[index]
|
| | | def GetDogzEquipPlusCount(self): return self.ipyDogzEquipPlusLen
|
| | | def GetDogzEquipPlusByIndex(self, index): return self.ipyDogzEquipPlusCache[index]
|
| | | def GetRuneCount(self): return self.ipyRuneLen
|
| | | def GetRuneByIndex(self, index): return self.ipyRuneCache[index]
|
| | | def GetEquipWashCount(self): return self.ipyEquipWashLen
|
| | |
| | | if not curItemData:
|
| | | return False
|
| | |
|
| | | vPackItemDict = ChConfig.Def_VPackItem_Dict
|
| | | |
| | | for pack, itemTypeList in vPackItemDict.items():
|
| | | if curItemData.GetType() in itemTypeList:
|
| | | packIndex = pack
|
| | | break
|
| | | packIndex = ChConfig.GetItemPackType(curItemData.GetType(), packIndex)
|
| | |
|
| | | if not self.CanPutInItem(packIndex, tagItem.GetItemTypeID(), tagItem.GetCount(), tagItem.GetIsBind(), defaultPile):
|
| | | GameWorld.DebugLog("背包满,不能放入物品 count = %d"%tagItem.GetCount())
|
| | |
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_GetSpecialItem, 1, [itemID])
|
| | | return True
|
| | |
|
| | | vPackItemDict = ChConfig.Def_VPackItem_Dict
|
| | | for pack, itemTypeList in vPackItemDict.items():
|
| | | if curItemData.GetType() in itemTypeList:
|
| | | packIndexList = [pack]
|
| | | break
|
| | | defaultPack = IPY_GameWorld.rptItem if not packIndexList else packIndexList[0]
|
| | | packIndex = ChConfig.GetItemPackType(curItemData.GetType(), defaultPack)
|
| | | if packIndex != defaultPack or not packIndexList:
|
| | | packIndexList = [packIndex]
|
| | |
|
| | | if not __Check_CanPutItemInPack(curPlayer, itemID, itemCount, itemIsBind, packIndexList, defaultPile):
|
| | | #不可放入
|
| | |
| | | def DoLogicSwitchItemEx(curPlayer, srcBackpack, desBackPack, srcIndex, destIndex):
|
| | |
|
| | | #---物品检查---
|
| | | srcItem = curPlayer.GetItemManager().GetPack(srcBackpack).GetAt(srcIndex)
|
| | | srcPack = curPlayer.GetItemManager().GetPack(srcBackpack)
|
| | | if srcIndex < 0 or srcIndex >= srcPack.GetCount():
|
| | | return
|
| | | srcItem = srcPack.GetAt(srcIndex)
|
| | | if not CheckItemCanUse(srcItem):
|
| | | return
|
| | |
|
| | | destItem = curPlayer.GetItemManager().GetPack(desBackPack).GetAt(destIndex)
|
| | | destPack = curPlayer.GetItemManager().GetPack(desBackPack)
|
| | | if destIndex < 0 or destIndex >= destPack.GetCount():
|
| | | return
|
| | | destItem = destPack.GetAt(destIndex)
|
| | | #目标格子只验证锁定, 可以允许空位
|
| | | if destItem == None or destItem.GetIsLocked():
|
| | | return
|
| | |
| | | def GetIsEquip(curItem):
|
| | | return curItem.GetType() in ChConfig.Def_EquipItemType
|
| | |
|
| | | def GetIsDogzEquip(curItem):
|
| | | ## 返回是否神兽装备
|
| | | return curItem.GetType() in ChConfig.Def_DogzEquiipType
|
| | |
|
| | | ## 返回是否武器
|
| | | # @param curItem 当前物品
|
| | | # @return None
|
| | |
| | | import PyGameData
|
| | | import PlayerCoin
|
| | | import PlayerGeTui
|
| | | import PlayerDogz
|
| | |
|
| | | import datetime
|
| | | import time
|
| | |
| | | SyncPackDownloadAward(curPlayer)
|
| | | # 登录触发功能开启(老号处理)
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer)
|
| | | # 神兽
|
| | | PlayerDogz.OnPlayerLogin(curPlayer)
|
| | | # 上线查询一次充值订单
|
| | | curPlayer.SendDBQueryRecharge()
|
| | |
|
| | |
| | | #初始化寻宝背包
|
| | | PlayerControl.Init_TreasurePack(curPlayer)
|
| | |
|
| | | #初始化神兽物品背包
|
| | | curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
|
| | | curPack.SetCount(ChConfig.Def_PackCnt_DogzItem)
|
| | | curPack.Sync_PackCanUseCount()
|
| | | #初始化神兽装备背包
|
| | | curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
| | | curPack.SetCount(ChConfig.Def_PackCnt_DogzEquip)
|
| | | curPack.Sync_PackCanUseCount()
|
| | | |
| | | #初始化临时交换背包
|
| | | curPack = itemManager.GetPack(ShareDefine.rptTempSwap)
|
| | | curPack.SetCount(ChConfig.Def_PackCnt_TempSwap)
|
| | |
| | | import ChNetSendPack
|
| | | import PlayerState
|
| | | import QuestCommon
|
| | | import PlayerDogz
|
| | | import GMShell
|
| | |
|
| | | import random
|
| | |
| | | PlayerRefineStove.CalcStoveAttr(curPlayer)
|
| | | PlayerFamilyTech.CalcFamilyTechAttr(curPlayer)
|
| | | PlayerEquipDecompose.RefreshEDAttr(curPlayer)
|
| | | PlayerDogz.RefreshDogzAttr(curPlayer)
|
| | | self.RefreshAllState(isForce=True)
|
| | | GameWorld.DebugLog("End ReCalcAllState!!!")
|
| | | return
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.PlayerDogz
|
| | | #
|
| | | # @todo:神兽系统
|
| | | # @author hxp
|
| | | # @date 2018-08-20
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 神兽系统
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2018-08-20 17:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import ItemCommon
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import IPY_GameWorld
|
| | | import IpyGameDataPY
|
| | | import ChConfig
|
| | | import ChEquip
|
| | |
|
| | | '''
|
| | | 神兽编号: 1~20,上线后不可修改
|
| | | 神兽装备位: 101~105 物品表中的装备位配置
|
| | | 神兽装备类型:119~123,策划说打死不会再加类型了,固定5个神兽装备类型
|
| | |
|
| | | 神兽物品背包(类型32,暂开放100格),存放神兽装备(类型119~123),及强化材料(类型70),
|
| | | 神兽装备背包(类型33,暂开放100格),所有神兽共用,每只神兽5格,(格子索引/5)+1=对应神兽编号,(格子索引%5)+100+1=对应神兽装备位
|
| | | '''
|
| | |
|
| | | DogzEquipCount = 5 # 神兽装备位数量,固定5个,策划说打死也不改
|
| | |
|
| | | def GetDogzEquipPlaceIndex(equipPlace):
|
| | | ## 获取神兽装备位对应的索引
|
| | | return equipPlace - 1 - 100
|
| | |
|
| | | def GetDogzEquipPackIndex(dogzID, equipPlaceIndex):
|
| | | ## 获取神兽装备在神兽装备背包中的固定位置索引
|
| | | return (dogzID - 1) * DogzEquipCount + equipPlaceIndex
|
| | |
|
| | | def GetDogzIsHelpFight(curPlayer, dogzID):
|
| | | ## 神兽是否助战状态
|
| | | return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, dogzID - 1)
|
| | |
|
| | | def SetDogzIsHelpFight(curPlayer, dogzID, isFight):
|
| | | ## 设置神兽是否助战状态
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, dogzID - 1, 1 if isFight else 0)
|
| | | Sync_DogzHelpbattleState(curPlayer, dogzID, isFight)
|
| | | return
|
| | |
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | |
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount):
|
| | | Sync_DogzInfo(curPlayer)
|
| | | |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetDogzCount()):
|
| | | ipyData = ipyDataMgr.GetDogzByIndex(i)
|
| | | if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
|
| | | Sync_DogzHelpbattleState(curPlayer, ipyData.GetDogzID(), 1)
|
| | | |
| | | return
|
| | |
|
| | | #// A5 C0 神兽穿戴装备 #tagCMDogzEquipItem
|
| | | #
|
| | | #struct tagCMDogzEquipItem
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE DogzID; // 神兽ID
|
| | | # BYTE EquipIndex; //神兽装备所在神兽背包索引
|
| | | #};
|
| | | def OnDogzEquipItem(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | dogzID = clientData.DogzID
|
| | | equipIndex = clientData.EquipIndex
|
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | dogzItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
|
| | | curEquip = dogzItemPack.GetAt(equipIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | GameWorld.DebugLog("物品不可用: equipIndex=%s" % equipIndex)
|
| | | return
|
| | | if not ItemCommon.GetIsDogzEquip(curEquip):
|
| | | GameWorld.DebugLog("非神兽装备: equipIndex=%s" % equipIndex)
|
| | | return
|
| | | |
| | | equipPlace = curEquip.GetEquipPlace()
|
| | | equipPlaceIndex = GetDogzEquipPlaceIndex(equipPlace)
|
| | | equipPlaceColorList = ipyData.GetEquipPlaceColorList()
|
| | | if equipPlaceIndex < 0 or equipPlaceIndex >= len(equipPlaceColorList):
|
| | | GameWorld.ErrLog("神兽装备位异常: equipPlace=%s,equipPlaceIndex=%s" % (equipPlace, equipPlaceIndex))
|
| | | return
|
| | | |
| | | dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
| | | equipPackIndex = GetDogzEquipPackIndex(dogzID, equipPlaceIndex)
|
| | | if equipPackIndex < 0 or equipPackIndex >= dogzEquipPack.GetCount():
|
| | | GameWorld.ErrLog("神兽装备背包索引异常: dogzID=%s,equipPlace=%s,equipPackIndex=%s" % (dogzID, equipPlace, equipPackIndex))
|
| | | return
|
| | | |
| | | equipColor = curEquip.GetItemColor()
|
| | | limitColor = equipPlaceColorList[equipPlaceIndex]
|
| | | if equipColor < limitColor:
|
| | | GameWorld.Log("神兽装备位穿戴颜色限制:dogzID=%s,equipPlaceIndex=%s,limitColor=%s > equipColor=%s" |
| | | % (dogzID, equipPlaceIndex, limitColor, equipColor), playerID)
|
| | | return
|
| | | |
| | | destEquip = dogzEquipPack.GetAt(equipPackIndex)
|
| | | isOK = ItemCommon.DoLogicSwitchItem(curPlayer, curEquip, destEquip, ShareDefine.rptDogzEquip)
|
| | | if not isOK:
|
| | | return
|
| | | |
| | | # 助战状态换装需要刷属性
|
| | | if GetDogzIsHelpFight(curPlayer, dogzID):
|
| | | RefreshDogzAttr(curPlayer)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | #// A5 C1 神兽卸下装备 #tagCMDogzUnEquipItem
|
| | | #
|
| | | #struct tagCMDogzUnEquipItem
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE DogzID; // 神兽ID
|
| | | # BYTE EquipPlace; //卸下的装备位, 0代表卸下全部
|
| | | #};
|
| | | def OnDogzUnEquipItem(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | dogzID = clientData.DogzID
|
| | | equipPlace = clientData.EquipPlace
|
| | | |
| | | if equipPlace and equipPlace not in ShareDefine.DogzEquipPlace:
|
| | | GameWorld.DebugLog("非神兽装备位,无法卸下!equipPlace=%s" % equipPlace, playerID)
|
| | | return
|
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | # 卸下全部
|
| | | if equipPlace == 0:
|
| | | unEquipIndexList = [] # 需要脱下的神兽装备索引
|
| | | dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
| | | equipPackCount = dogzEquipPack.GetCount()
|
| | | startIndex = (dogzID - 1) * DogzEquipCount
|
| | | for i in range(startIndex, startIndex + DogzEquipCount):
|
| | | if i < 0 or i >= equipPackCount:
|
| | | return
|
| | | curItem = dogzEquipPack.GetAt(i) |
| | | if not curItem.IsEmpty():
|
| | | unEquipIndexList.append(i)
|
| | | |
| | | if not unEquipIndexList:
|
| | | GameWorld.DebugLog("没有穿戴神兽装备!dogzID=%s" % dogzID, playerID)
|
| | | return
|
| | | |
| | | unEquipCount = len(unEquipIndexList)
|
| | | emptyIndexList = []
|
| | | |
| | | dogzItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
|
| | | for i in xrange(dogzItemPack.GetCount()):
|
| | | curItem = dogzItemPack.GetAt(i)
|
| | | if curItem.IsEmpty():
|
| | | emptyIndexList.append(i)
|
| | | if len(emptyIndexList) >= unEquipCount:
|
| | | break
|
| | | |
| | | if len(emptyIndexList) < unEquipCount:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [ShareDefine.rptDogzItem])
|
| | | #GameWorld.DebugLog("神兽背包空格不足,无法脱下所有装备")
|
| | | return
|
| | | |
| | | for i in xrange(unEquipCount):
|
| | | ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptDogzEquip, ShareDefine.rptDogzItem,
|
| | | unEquipIndexList[i], emptyIndexList[i])
|
| | | |
| | | else:
|
| | | equipPackIndex = GetDogzEquipPackIndex(dogzID, GetDogzEquipPlaceIndex(equipPlace))
|
| | | emptyIndex = ItemCommon.GetEmptyIndexInPack(curPlayer, ShareDefine.rptDogzItem)
|
| | | |
| | | if not ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptDogzEquip, ShareDefine.rptDogzItem, equipPackIndex, emptyIndex):
|
| | | GameWorld.DebugLog("神兽卸下装备失败: dogzID=%s,equipPlace=%s" % (dogzID, equipPlace), playerID)
|
| | | return
|
| | | |
| | | # 助战状态换装需要刷属性
|
| | | if GetDogzIsHelpFight(curPlayer, dogzID):
|
| | | SetDogzIsHelpFight(curPlayer, dogzID, False) # 因为脱下了状态,所以必须设置为非助战状态
|
| | | RefreshDogzAttr(curPlayer)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | #// A5 C2 神兽变更助战状态 #tagCMDogzBattleStateChange
|
| | | #
|
| | | #struct tagCMDogzBattleStateChange
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE DogzID; // 神兽ID
|
| | | # BYTE BatteState; //助战状态,0-召回,1-助战
|
| | | #};
|
| | | def OnDogzBattleStateChange(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | dogzID = clientData.DogzID
|
| | | batteState = clientData.BatteState
|
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | curState = GetDogzIsHelpFight(curPlayer, dogzID)
|
| | | if curState == batteState:
|
| | | GameWorld.DebugLog("神兽已经是该状态,无需变更助战状态! dogzID=%s,batteState=%s,curState=%s" |
| | | % (dogzID, batteState, curState), playerID)
|
| | | return
|
| | | |
| | | # 变为助战状态需检查神兽装备是否穿满
|
| | | if batteState:
|
| | | helpbattleInitCount = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 1)[0]
|
| | | helpbattleBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount)
|
| | | canHelpFightCount = helpbattleInitCount + helpbattleBuyCount
|
| | | |
| | | curHelpFightCount = 0
|
| | | dogzCount = IpyGameDataPY.IPY_Data().GetDogzCount()
|
| | | for i in xrange(dogzCount):
|
| | | if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
|
| | | curHelpFightCount += 1
|
| | | |
| | | if curHelpFightCount >= canHelpFightCount:
|
| | | GameWorld.DebugLog("当前神兽助战数已满,无法助战!canHelpFightCount=%s <= curHelpFightCount=%s" |
| | | % (canHelpFightCount, curHelpFightCount), playerID)
|
| | | return
|
| | | |
| | | dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
| | | equipPackCount = dogzEquipPack.GetCount()
|
| | | startIndex = (dogzID - 1) * DogzEquipCount
|
| | | for i in range(startIndex, startIndex + DogzEquipCount):
|
| | | if i < 0 or i >= equipPackCount:
|
| | | return
|
| | | curItem = dogzEquipPack.GetAt(i) |
| | | if curItem.IsEmpty():
|
| | | GameWorld.DebugLog("神兽有装备未穿戴,无法助战!dogzID=%s,packIndex=%s" % (dogzID, i), playerID)
|
| | | return
|
| | | |
| | | isFight = True if batteState else False
|
| | | GameWorld.DebugLog("神兽助战状态变更!dogzID=%s,isFight=%s" % (dogzID, isFight), playerID)
|
| | | SetDogzIsHelpFight(curPlayer, dogzID, isFight)
|
| | | RefreshDogzAttr(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | | #// A5 C3 神兽购买助战位 #tagCMDogzBuyBatteCount
|
| | | #
|
| | | #struct tagCMDogzBuyBatteCount
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | #};
|
| | | def OnDogzBuyBatteCount(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | helpbattleInitCount, helpbattleMaxCount = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 1)
|
| | | helpbattleBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount)
|
| | | curHelpFightCount = helpbattleInitCount + helpbattleBuyCount
|
| | | if curHelpFightCount >= helpbattleMaxCount:
|
| | | GameWorld.DebugLog("已超过最大神兽助战数,无法购买!curHelpFightCount=%s,helpbattleMaxCount=%s" |
| | | % (curHelpFightCount, helpbattleMaxCount), playerID)
|
| | | return
|
| | | |
| | | needItemID = IpyGameDataPY.GetFuncCfg("DogzAssist", 2)
|
| | | needCountList = IpyGameDataPY.GetFuncEvalCfg("DogzAssist", 3)
|
| | | needCount = needCountList[-1] if helpbattleBuyCount >= len(needCountList) else needCountList[helpbattleBuyCount]
|
| | | |
| | | costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, needItemID)
|
| | | if bindCnt + unBindCnt < needCount:
|
| | | GameWorld.DebugLog("购买神兽助战位所需道具不足 !needItemID=%s,needCount=%s" % (needItemID, needCount), playerID)
|
| | | return
|
| | | ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, needCount, "DogzBuyHelpFight")
|
| | | |
| | | updBuyCount = helpbattleBuyCount + 1
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DogzBuyHelpbattleCount, updBuyCount)
|
| | | GameWorld.DebugLog("购买神兽助战位! updBuyCount=%s" % updBuyCount, playerID)
|
| | | |
| | | Sync_DogzInfo(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | | #// A5 C4 神兽装备强化 #tagCMDogzEquipPlus
|
| | | #
|
| | | #struct tagCMDogzEquipPlus
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE EquipIndex; //神兽装备背包中索引
|
| | | # BYTE IndexCount; //材料所在神兽物品背包索引的数量
|
| | | # BYTE IndexList[IndexCount]; //材料所在神兽物品背包索引列表
|
| | | # BYTE IsDouble; //是否双倍强化
|
| | | #};
|
| | | def OnDogzEquipPlus(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | equipIndex = clientData.EquipIndex
|
| | | indexList = clientData.IndexList
|
| | | isDouble = clientData.IsDouble
|
| | | GameWorld.DebugLog("神兽装备强化: equipIndex=%s,indexList=%s,isDouble=%s" % (equipIndex, indexList, isDouble), playerID)
|
| | | |
| | | dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
| | | curEquip = dogzEquipPack.GetAt(equipIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip) or not ItemCommon.GetIsDogzEquip(curEquip):
|
| | | GameWorld.DebugLog(" 非神兽装备,无法强化!equipIndex=%s,itemID=%s" |
| | | % (equipIndex, curEquip.GetItemTypeID()), playerID)
|
| | | return
|
| | | |
| | | equipPlace = curEquip.GetEquipPlace()
|
| | | curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
|
| | | curPlusExpTotal = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 1)
|
| | | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("DogzEquipPlus", equipPlace, curPlusLV)
|
| | | if not ipyData:
|
| | | return
|
| | | curLVUPTotalExp = ipyData.GetPlusLVUPTotalExp()
|
| | | if not curLVUPTotalExp:
|
| | | GameWorld.Log("神兽装备升级所需总经验为0, 无法强化!equipPlace=%s,curPlusLV=%s" % (equipPlace, curPlusLV), playerID)
|
| | | return
|
| | | |
| | | nextLVIpyData = None
|
| | | if curPlusExpTotal >= curLVUPTotalExp:
|
| | | nextLVIpyData = IpyGameDataPY.GetIpyGameDataNotLog("DogzEquipPlus", equipPlace, curPlusLV + 1)
|
| | | if not nextLVIpyData:
|
| | | GameWorld.Log("神兽装备已满级, 无法强化!equipPlace=%s,curPlusLV=%s" % (equipPlace, curPlusLV), playerID)
|
| | | return
|
| | | |
| | | costGoldTotal = 0
|
| | | addExpTotal = 0
|
| | | delItemList = []
|
| | | dogzItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
|
| | | dogzItemPackCount = dogzItemPack.GetCount()
|
| | | for i in indexList:
|
| | | if i < 0 or i >= dogzItemPackCount:
|
| | | GameWorld.ErrLog("神兽背包索引不存在,无法强化!i=%s" % (i), playerID)
|
| | | return
|
| | | curItem = dogzItemPack.GetAt(i)
|
| | | if curItem.IsEmpty():
|
| | | GameWorld.ErrLog("神兽背包物品为空,无法强化!i=%s" % (i), playerID)
|
| | | return
|
| | | effect = ItemCommon.GetItemEffectByEffectID(curItem, ChConfig.Def_Effect_DogzEquipPlusExp)
|
| | | if not effect:
|
| | | GameWorld.ErrLog("神兽背包物品无经验效果,无法强化!i=%s,itemID=%s" % (i, curItem.GetItemTypeID()), playerID)
|
| | | return
|
| | | |
| | | baseExp = effect.GetEffectValue(0)
|
| | | doubleCostGold = effect.GetEffectValue(1)
|
| | | |
| | | addExp = baseExp
|
| | | plusInfoCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetDogzEquipPlus)
|
| | | if not plusInfoCount:
|
| | | if isDouble and doubleCostGold:
|
| | | addExp = (baseExp * 2)
|
| | | costGoldTotal += doubleCostGold
|
| | | GameWorld.DebugLog(" 强化: addExp=%s,baseExp=%s,isDouble=%s,doubleCostGold=%s,costGoldTotal=%s" |
| | | % (addExp, baseExp, isDouble, doubleCostGold, costGoldTotal), playerID)
|
| | | else:
|
| | | #plusLV = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
|
| | | plusExpTotal = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 1)
|
| | | addExp += plusExpTotal
|
| | | GameWorld.DebugLog(" 强化: addExp=%s,baseExp=%s,plusExpTotal=%s" % (addExp, baseExp, plusExpTotal), playerID)
|
| | | addExpTotal += addExp
|
| | | delItemList.append(curItem)
|
| | | |
| | | if not delItemList:
|
| | | GameWorld.DebugLog(" 没有材料可强化!", playerID)
|
| | | return
|
| | | |
| | | updPlusExpTotal = curPlusExpTotal + addExpTotal
|
| | | infoDict = {"updPlusExpTotal":updPlusExpTotal}
|
| | | |
| | | if costGoldTotal:
|
| | | if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGoldTotal, |
| | | ChConfig.Def_Cost_DogzEquipPlus, infoDict):
|
| | | return
|
| | | |
| | | for delItem in delItemList:
|
| | | ItemCommon.DelItem(curPlayer, delItem, curItem.GetCount(), False, ChConfig.ItemDel_DogzEquipPlus, infoDict)
|
| | | |
| | | updPlusLV = curPlusLV
|
| | | if updPlusExpTotal >= curLVUPTotalExp:
|
| | | doCount = 0
|
| | | while nextLVIpyData and updPlusExpTotal >= nextLVIpyData.GetPlusLVUPTotalExp() and doCount < 100:
|
| | | doCount += 1
|
| | | nextLV = updPlusLV + 1
|
| | | nextLVIpyData = IpyGameDataPY.GetIpyGameDataNotLog("DogzEquipPlus", equipPlace, nextLV)
|
| | | if not nextLVIpyData:
|
| | | break
|
| | | updPlusLV = nextLV
|
| | | |
| | | isRefreshAtrr = False
|
| | | # 未强化过
|
| | | if not curPlusExpTotal:
|
| | | curEquip.AddUserAttr(ShareDefine.Def_IudetDogzEquipPlus, updPlusLV)
|
| | | curEquip.AddUserAttr(ShareDefine.Def_IudetDogzEquipPlus, updPlusExpTotal)
|
| | | isRefreshAtrr = (updPlusLV > 0)
|
| | | else:
|
| | | if curPlusLV != updPlusLV:
|
| | | isRefreshAtrr = True
|
| | | curEquip.UpdataUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0, updPlusLV)
|
| | | curEquip.UpdataUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 1, updPlusExpTotal)
|
| | | |
| | | GameWorld.DebugLog(" curPlus(LV=%s,EXP=%s),addExpTotal=%s,updPlus(LV=%s,EXP=%s)" |
| | | % (curPlusLV, curPlusExpTotal, addExpTotal, updPlusLV, updPlusExpTotal), playerID)
|
| | | |
| | | if isRefreshAtrr:
|
| | | RefreshDogzAttr(curPlayer)
|
| | | |
| | | return
|
| | |
|
| | | def RefreshDogzAttr(curPlayer):
|
| | | ## 刷新神兽属性
|
| | | |
| | | allAttrList = [{} for _ in range(4)]
|
| | | |
| | | dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
| | | equipPackCount = dogzEquipPack.GetCount()
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for dogzIndex in xrange(ipyDataMgr.GetDogzCount()):
|
| | | if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, dogzIndex):
|
| | | continue
|
| | | |
| | | ipyData = ipyDataMgr.GetDogzByIndex(dogzIndex)
|
| | | dogzID = ipyData.GetDogzID()
|
| | | #GameWorld.DebugLog("神兽属性: dogzID=%s" % dogzID)
|
| | | |
| | | # 1. 基础属性
|
| | | attrTypeList = ipyData.GetBaseAttrTypes()
|
| | | attrValueList = ipyData.GetBaseAttrValues()
|
| | | if attrTypeList and len(attrTypeList) == len(attrValueList):
|
| | | for attrIndex, baseAttrID in enumerate(attrTypeList):
|
| | | baseAttrValue = attrValueList[attrIndex]
|
| | | PlayerControl.CalcAttrDict_Type(baseAttrID, baseAttrValue, allAttrList)
|
| | | #GameWorld.DebugLog(" 基础属性: baseAttrID=%s,baseAttrValue=%s, %s" % (baseAttrID, baseAttrValue, allAttrList))
|
| | | |
| | | # 2. 装备属性
|
| | | startIndex = (dogzID - 1) * DogzEquipCount
|
| | | for equipIndex in range(startIndex, startIndex + DogzEquipCount):
|
| | | if equipIndex < 0 or equipIndex >= equipPackCount:
|
| | | break
|
| | | curEquip = dogzEquipPack.GetAt(equipIndex) |
| | | if curEquip.IsEmpty():
|
| | | continue
|
| | | |
| | | #itemID = curEquip.GetItemTypeID()
|
| | | # 装备基础属性
|
| | | for effIndex in xrange(curEquip.GetEffectCount()):
|
| | | curEffect = curEquip.GetEffectByIndex(effIndex)
|
| | | if not curEffect or not curEffect.GetEffectID():
|
| | | break
|
| | | effID = curEffect.GetEffectID()
|
| | | if not effID or effID == ChConfig.Def_Effect_DogzEquipPlusExp:
|
| | | continue
|
| | | effValue = curEffect.GetEffectValue(0)
|
| | | PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrList)
|
| | | #GameWorld.DebugLog(" 装备基础: itemID=%s,effID=%s,effValue=%s, %s" % (itemID, effID, effValue, allAttrList))
|
| | | |
| | | # 强化属性
|
| | | curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0)
|
| | | plusIpyData = IpyGameDataPY.GetIpyGameData("DogzEquipPlus", curEquip.GetEquipPlace(), curPlusLV)
|
| | | if plusIpyData:
|
| | | plusAttrTypeList = plusIpyData.GetPlusAttrTypes()
|
| | | plusAttrValueList = plusIpyData.GetPlusAttrValues()
|
| | | if plusAttrTypeList and len(plusAttrTypeList) == len(plusAttrValueList):
|
| | | for plusIndex, plusAttrID in enumerate(plusAttrTypeList):
|
| | | plusAttrValue = plusAttrValueList[plusIndex]
|
| | | PlayerControl.CalcAttrDict_Type(plusAttrID, plusAttrValue, allAttrList)
|
| | | #GameWorld.DebugLog(" 装备强化: itemID=%s,plusAttrID=%s, plusAttrValue=%s, %s" % (itemID, plusAttrID, plusAttrValue, allAttrList))
|
| | | |
| | | # 传奇属性
|
| | | ChEquip.CalcAttr_LegendAttr(curPlayer, curEquip, allAttrList)
|
| | | #GameWorld.DebugLog(" 装备传奇: itemID=%s,%s" % (itemID, allAttrList))
|
| | | |
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dogz, allAttrList)
|
| | | return
|
| | |
|
| | | def Sync_DogzInfo(curPlayer):
|
| | | ## 同步神兽信息
|
| | | dogzInfoPack = ChPyNetSendPack.tagMCDogzInfo()
|
| | | dogzInfoPack.BuyHelpbattleCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DogzBuyHelpbattleCount)
|
| | | NetPackCommon.SendFakePack(curPlayer, dogzInfoPack)
|
| | | return
|
| | |
|
| | | def Sync_DogzHelpbattleState(curPlayer, dogzID, batteState):
|
| | | ## 同步神兽助战状态
|
| | | helpbattleState = ChPyNetSendPack.tagMCDogzHelpbattleState()
|
| | | helpbattleState.DogzID = dogzID
|
| | | helpbattleState.BatteState = 1 if batteState else 0
|
| | | NetPackCommon.SendFakePack(curPlayer, helpbattleState)
|
| | | return
|
| | |
|
| | |
| | | rptTempItem, # 临时存放背包 29
|
| | | rptTreasure, # 寻宝物品背包 30
|
| | | rptPet, # 宠物背包(用物品存储宠物的数据) 31
|
| | | rptDogzItem, # 神兽物品背包 32
|
| | | rptDogzEquip, # 神兽装备背包 33
|
| | | rptMax, # 最大背包类型数量,放在最后一个
|
| | | ) = range(28, 28 + 5) #C++定义的枚举到27
|
| | | ) = range(28, 28 + 7) #C++定义的枚举到27
|
| | |
|
| | | #虚拟背包类型, 从255递减
|
| | | Def_VPack_TypeList = (
|
| | | rptRune, # 符印背包 255
|
| | | ) = range(256 - 1, 256)
|
| | |
|
| | |
|
| | | #虚拟背包物品信息 ChConfig.Def_VPackItem_Dict
|
| | |
|
| | |
|
| | | #武器的手持形式
|
| | |
| | | Def_IudetPartSuiteLV = 25 # 部位套装等级 [套装类型1等级, 套装类型2等级, ...]
|
| | | Def_IudetWingMaterialItemID = 27 # 翅膀精炼材料ID列表
|
| | | Def_IudetWingMaterialItemCount = 29 # 翅膀精炼材料个数列表
|
| | | Def_IudetDogzEquipPlus = 31 # 神兽装备强化信息列表 [强化等级, 累计总熟练度]
|
| | |
|
| | | Def_IudetItemColor = 16 # 物品颜色,如果该值没有就取物品
|
| | | Def_IudetItemCount = 18 # 物品个数,支持20亿,目前仅特殊转化物品会用到
|
| | |
| | | )=range(5)
|
| | |
|
| | | # 战斗力模块类型
|
| | | Def_MFPType_Max = 24
|
| | | Def_MFPType_Max = 25
|
| | | ModuleFightPowerTypeList = (
|
| | | Def_MFPType_Role, # 角色 0
|
| | | Def_MFPType_Equip, # 装备(基本装备位) 1
|
| | |
| | | Def_MFPType_PetSoul, # 灵宠魂石 18
|
| | | Def_MFPType_HorseSoul, # 坐骑魂石 19
|
| | | Def_MFPType_MagicWeaponSoul, # 法宝之魂 20
|
| | | Def_MFPType_Dogz, # 神兽 21
|
| | | Def_MFPType_Other, # 其他
|
| | |
|
| | | #以下暂时没用到,改时再处理
|
| | |
| | | ) = range(1, 21)
|
| | |
|
| | |
|
| | | # 神兽装备位定义
|
| | | DogzEquipPlace = (
|
| | | dogzetHorn, # 神兽兽角
|
| | | dogzetEye, # 神兽魔眼
|
| | | dogzetTooth, # 神兽獠牙
|
| | | dogzetClaw, # 神兽兽爪
|
| | | dogzetScute, # 神兽鳞甲
|
| | | ) = range(101, 101 + 5)
|
| | |
|
| | |
|
| | | # 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
|
| | | EnterFBAskResult = (
|
| | | EntFBAskRet_OK, # 0 可以进入
|