9765 【BT8】【后端】神通
# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
| | |
| | | list LVAttrValueList; //ççº§å±æ§å¼å表
|
| | | };
|
| | |
|
| | | //ç¥é表
|
| | |
|
| | | struct tagShentong
|
| | | {
|
| | | BYTE _ShentongID; //ç¥éID
|
| | | WORD NeedGubaoID; //è§£éæéå¤å®ID
|
| | | };
|
| | |
|
| | | //ç¥éå级表
|
| | |
|
| | | struct tagShentongLV
|
| | | {
|
| | | BYTE _ShentongID; //ç¥éID
|
| | | BYTE _ShentongClassLV; //ç¥éé¶çº§
|
| | | BYTE _ShentongLV; //ç¥éç级
|
| | | list LVLightNeedItem; //ç¹äº®è¯¥çº§æéç©å [[ç©åID,个æ°], ...]
|
| | | list LVAttrTypeList; //è¯¥çº§å±æ§ç±»åå表
|
| | | list LVAttrValueList; //è¯¥çº§å±æ§å¼å表
|
| | | DWORD LVSkillID; //该级èä¸éç¨æè½ID
|
| | | DWORD FightPowerEx; //éå æå
|
| | | };
|
| | |
|
| | | //ç©å®¶ç级表
|
| | |
|
| | | struct tagPlayerLV
|
| | |
| | | [config]
|
| | |
|
| | | ; é¡¹ç®æ ¹è·¯å¾
|
| | | CodeProjectPath = E:\SnxxServerCode\ServerPython
|
| | | ; é¡¹ç®æ ¹è·¯å¾
|
| | | CodeProjectPath = E:\Git\SnxxServerCode\ServerPython
|
| | |
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 19 ç¥éå级 #tagCMShentongLVUp
|
| | |
|
| | | class tagCMShentongLVUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ShentongID", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x19
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x19
|
| | | self.ShentongID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMShentongLVUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 19 ç¥éå级 //tagCMShentongLVUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ShentongID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ShentongID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMShentongLVUp=tagCMShentongLVUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongLVUp.Cmd,m_NAtagCMShentongLVUp.SubCmd))] = m_NAtagCMShentongLVUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 20 ç¥éæè½è®¾ç½® #tagCMShentongSkillSet
|
| | |
|
| | | class tagCMShentongSkillSet(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | SkillIDList = list() #(vector<DWORD> SkillIDList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x20
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.SkillIDList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x20
|
| | | self.Count = 0
|
| | | self.SkillIDList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4 * self.Count
|
| | |
|
| | | 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.WriteDWORD(data, self.SkillIDList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | SkillIDList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMShentongSkillSet=tagCMShentongSkillSet()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongSkillSet.Head.Cmd,m_NAtagCMShentongSkillSet.Head.SubCmd))] = m_NAtagCMShentongSkillSet
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B2 01 è±æºæç¶æ # tagCMLoginState
|
| | |
|
| | | class tagCMLoginState(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 C8 ç¥éççº§ä¿¡æ¯ #tagMCShentongLVInfo
|
| | |
|
| | | class tagMCShentongLV(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ShentongID", c_ubyte), |
| | | ("ClassLV", c_ubyte), |
| | | ("LV", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ShentongID = 0
|
| | | self.ClassLV = 0
|
| | | self.LV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCShentongLV)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 C8 ç¥éççº§ä¿¡æ¯ //tagMCShentongLVInfo:
|
| | | ShentongID:%d,
|
| | | ClassLV:%d,
|
| | | LV:%d
|
| | | '''\
|
| | | %(
|
| | | self.ShentongID,
|
| | | self.ClassLV,
|
| | | self.LV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCShentongLVInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | ShentongLVList = list() #(vector<tagMCShentongLV> ShentongLVList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC8
|
| | | 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):
|
| | | temShentongLVList = tagMCShentongLV()
|
| | | _pos = temShentongLVList.ReadData(_lpData, _pos)
|
| | | self.ShentongLVList.append(temShentongLVList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC8
|
| | | self.Count = 0
|
| | | self.ShentongLVList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.ShentongLVList[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.ShentongLVList[i].GetLength(), self.ShentongLVList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | ShentongLVList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCShentongLVInfo=tagMCShentongLVInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongLVInfo.Head.Cmd,m_NAtagMCShentongLVInfo.Head.SubCmd))] = m_NAtagMCShentongLVInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 C9 ç¥éæè½è®¾ç½®ä¿¡æ¯ #tagMCShentongSkillInfo
|
| | |
|
| | | class tagMCShentongSkillInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | SkillIDList = list() #(vector<DWORD> SkillIDList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC9
|
| | | 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):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.SkillIDList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC9
|
| | | self.Count = 0
|
| | | self.SkillIDList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4 * self.Count
|
| | |
|
| | | 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.WriteDWORD(data, self.SkillIDList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | SkillIDList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCShentongSkillInfo=tagMCShentongSkillInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongSkillInfo.Head.Cmd,m_NAtagMCShentongSkillInfo.Head.SubCmd))] = m_NAtagMCShentongSkillInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 44 彿¥ç´¯è®¡å
å¼å¤éä¸ç¤¼å
ä¿¡æ¯ #tagMCSingleGoldGift
|
| | |
|
| | | class tagMCSingleGoldGift(Structure):
|
| | |
| | | PacketSubCMD_3=0x18
|
| | | PacketCallFunc_3=OnGubaoLVUp
|
| | |
|
| | | ;ç¥é
|
| | | [PlayerShentong]
|
| | | ScriptName = Player\PlayerShentong.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | |
|
| | | PacketCMD_1=0xB2
|
| | | PacketSubCMD_1=0x19
|
| | | PacketCallFunc_1=OnShentongLVUp
|
| | |
|
| | | PacketCMD_2=0xB2
|
| | | PacketSubCMD_2=0x20
|
| | | PacketCallFunc_2=OnShentongSkillSet
|
| | |
|
| | | ;ç¼¥ç¼ä»å
|
| | | [PlayerFairyDomain]
|
| | | ScriptName = Player\PlayerFairyDomain.py
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 19 ç¥éå级 #tagCMShentongLVUp
|
| | |
|
| | | class tagCMShentongLVUp(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ShentongID", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x19
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB2
|
| | | self.SubCmd = 0x19
|
| | | self.ShentongID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMShentongLVUp)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 19 ç¥éå级 //tagCMShentongLVUp:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ShentongID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ShentongID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMShentongLVUp=tagCMShentongLVUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongLVUp.Cmd,m_NAtagCMShentongLVUp.SubCmd))] = m_NAtagCMShentongLVUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 20 ç¥éæè½è®¾ç½® #tagCMShentongSkillSet
|
| | |
|
| | | class tagCMShentongSkillSet(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | SkillIDList = list() #(vector<DWORD> SkillIDList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x20
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.SkillIDList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x20
|
| | | self.Count = 0
|
| | | self.SkillIDList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4 * self.Count
|
| | |
|
| | | 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.WriteDWORD(data, self.SkillIDList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | SkillIDList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMShentongSkillSet=tagCMShentongSkillSet()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMShentongSkillSet.Head.Cmd,m_NAtagCMShentongSkillSet.Head.SubCmd))] = m_NAtagCMShentongSkillSet
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B2 01 è±æºæç¶æ # tagCMLoginState
|
| | |
|
| | | class tagCMLoginState(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 C8 ç¥éççº§ä¿¡æ¯ #tagMCShentongLVInfo
|
| | |
|
| | | class tagMCShentongLV(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ShentongID", c_ubyte), |
| | | ("ClassLV", c_ubyte), |
| | | ("LV", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.ShentongID = 0
|
| | | self.ClassLV = 0
|
| | | self.LV = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCShentongLV)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 C8 ç¥éççº§ä¿¡æ¯ //tagMCShentongLVInfo:
|
| | | ShentongID:%d,
|
| | | ClassLV:%d,
|
| | | LV:%d
|
| | | '''\
|
| | | %(
|
| | | self.ShentongID,
|
| | | self.ClassLV,
|
| | | self.LV
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCShentongLVInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | ShentongLVList = list() #(vector<tagMCShentongLV> ShentongLVList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC8
|
| | | 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):
|
| | | temShentongLVList = tagMCShentongLV()
|
| | | _pos = temShentongLVList.ReadData(_lpData, _pos)
|
| | | self.ShentongLVList.append(temShentongLVList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC8
|
| | | self.Count = 0
|
| | | self.ShentongLVList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.ShentongLVList[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.ShentongLVList[i].GetLength(), self.ShentongLVList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | ShentongLVList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCShentongLVInfo=tagMCShentongLVInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongLVInfo.Head.Cmd,m_NAtagMCShentongLVInfo.Head.SubCmd))] = m_NAtagMCShentongLVInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 C9 ç¥éæè½è®¾ç½®ä¿¡æ¯ #tagMCShentongSkillInfo
|
| | |
|
| | | class tagMCShentongSkillInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | SkillIDList = list() #(vector<DWORD> SkillIDList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC9
|
| | | 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):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.SkillIDList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xC9
|
| | | self.Count = 0
|
| | | self.SkillIDList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4 * self.Count
|
| | |
|
| | | 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.WriteDWORD(data, self.SkillIDList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | SkillIDList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCShentongSkillInfo=tagMCShentongSkillInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCShentongSkillInfo.Head.Cmd,m_NAtagMCShentongSkillInfo.Head.SubCmd))] = m_NAtagMCShentongSkillInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 44 彿¥ç´¯è®¡å
å¼å¤éä¸ç¤¼å
ä¿¡æ¯ #tagMCSingleGoldGift
|
| | |
|
| | | class tagMCSingleGoldGift(Structure):
|
| | |
| | | 16 : "çµå® 主人æè½",
|
| | | 17 : "ç§°å·æè½",
|
| | | 18 : "è£
å¤è¢«å¨æè½",
|
| | | 19 : "ç¼ä½æè½",
|
| | | 20 : "ç¥éæè½",
|
| | | }
|
| | |
|
| | | for funcType, skillInfo in skillDict.items():
|
New file |
| | |
| | | #!/usr/bin/python |
| | | # -*- coding: GBK -*- |
| | | #------------------------------------------------------------------------------- |
| | | # |
| | | ##@package GM.Commands.Shentong |
| | | # |
| | | # @todo:ç¥é |
| | | # @author hxp |
| | | # @date 2023-01-08 |
| | | # @version 1.0 |
| | | # |
| | | # è¯¦ç»æè¿°: ç¥é |
| | | # |
| | | #------------------------------------------------------------------------------- |
| | | #"""Version = 2023-01-08 18:00""" |
| | | #------------------------------------------------------------------------------- |
| | | |
| | | import GameWorld |
| | | import IpyGameDataPY |
| | | import PlayerShentong |
| | | import PlayerControl |
| | | import ChConfig |
| | | |
| | | #--------------------------------------------------------------------- |
| | | #é»è¾å®ç° |
| | | |
| | | ## GMå½ä»¤æ§è¡å
¥å£ |
| | | # @param curPlayer å½åç©å®¶ |
| | | # @param msgList åæ°å表 |
| | | # @return None |
| | | # @remarks 彿°è¯¦ç»è¯´æ. |
| | | def OnExec(curPlayer, msgList): |
| | | |
| | | if not msgList: |
| | | GameWorld.DebugAnswer(curPlayer, "éç½®ç¥é: Shentong 0") |
| | | GameWorld.DebugAnswer(curPlayer, "设置ç¥é: Shentong ç¥éID é¶ ç级") |
| | | return |
| | | |
| | | syncIDList = [] |
| | | |
| | | if len(msgList) == 1: |
| | | if msgList[0] == 0: |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in range(ipyDataMgr.GetShentongCount()): |
| | | ipyData = ipyDataMgr.GetShentongByIndex(index) |
| | | shentongID = ipyData.GetShentongID() |
| | | classLV, lv = PlayerShentong.GetShentongLVInfo(curPlayer, shentongID) |
| | | if not classLV and not lv: |
| | | continue |
| | | syncIDList.append(shentongID) |
| | | PlayerShentong.SetShentongLVInfo(curPlayer, shentongID, 0, 0) |
| | | |
| | | ShentongSkillCountMax = IpyGameDataPY.GetFuncCfg("Shentong", 1) |
| | | skillManager = curPlayer.GetSkillManager() |
| | | playerCtl = PlayerControl.PlayerControl(curPlayer) |
| | | for num in range(ShentongSkillCountMax): |
| | | skillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShentongSkillID % num) |
| | | if skillID and skillManager.FindSkillBySkillID(skillID): |
| | | skillManager.DeleteSkillBySkillID(skillID, True) |
| | | playerCtl.RefreshSkillFightPowerByDel(skillID) |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShentongSkillID % num, 0) |
| | | PlayerShentong.Sync_ShentongSkillInfo(curPlayer) |
| | | |
| | | GameWorld.DebugAnswer(curPlayer, "éç½®ç¥éOK") |
| | | |
| | | elif len(msgList) == 3: |
| | | shentongID, classLV, lv = msgList |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Shentong", shentongID) |
| | | if not ipyData: |
| | | GameWorld.DebugAnswer(curPlayer, "ä¸åå¨è¯¥ç¥é!shentongID=%s" % shentongID) |
| | | return |
| | | lvIpyData = IpyGameDataPY.GetIpyGameData("ShentongLV", shentongID, classLV, lv) |
| | | if not lvIpyData: |
| | | GameWorld.DebugAnswer(curPlayer, "ä¸åå¨è¯¥ç¥éç级!shentongID=%s,classLV=%s,lv=%s" % (shentongID, classLV, lv)) |
| | | return |
| | | GameWorld.DebugAnswer(curPlayer, "设置ç¥é:%s,é¶(%s),ç级(%s)" % (shentongID, classLV, lv)) |
| | | PlayerShentong.SetShentongLVInfo(curPlayer, shentongID, classLV, lv) |
| | | syncIDList.append(shentongID) |
| | | else: |
| | | return |
| | | |
| | | PlayerShentong.RefreshShentongAttr(curPlayer) |
| | | PlayerShentong.Sync_ShentongLVInfo(curPlayer, syncIDList) |
| | | return |
| | | |
| | | |
| | |
| | | ("list", "LVAttrValueList", 0),
|
| | | ),
|
| | |
|
| | | "Shentong":(
|
| | | ("BYTE", "ShentongID", 1),
|
| | | ("WORD", "NeedGubaoID", 0),
|
| | | ),
|
| | |
|
| | | "ShentongLV":(
|
| | | ("BYTE", "ShentongID", 1),
|
| | | ("BYTE", "ShentongClassLV", 1),
|
| | | ("BYTE", "ShentongLV", 1),
|
| | | ("list", "LVLightNeedItem", 0),
|
| | | ("list", "LVAttrTypeList", 0),
|
| | | ("list", "LVAttrValueList", 0),
|
| | | ("DWORD", "LVSkillID", 0),
|
| | | ("DWORD", "FightPowerEx", 0),
|
| | | ),
|
| | |
|
| | | "PlayerLV":(
|
| | | ("WORD", "LV", 1),
|
| | | ("DWORD", "ExpPoint", 0),
|
| | |
| | | def GetLVUPNeedItemInfo(self): return self.LVUPNeedItemInfo # å级æéç©å [[ç©åID,个æ°], ...]
|
| | | def GetLVAttrTypeList(self): return self.LVAttrTypeList # ççº§å±æ§ç±»åå表
|
| | | def GetLVAttrValueList(self): return self.LVAttrValueList # ççº§å±æ§å¼å表 |
| | | |
| | | # ç¥é表 |
| | | class IPY_Shentong(): |
| | | |
| | | def __init__(self): |
| | | self.ShentongID = 0
|
| | | self.NeedGubaoID = 0 |
| | | return |
| | | |
| | | def GetShentongID(self): return self.ShentongID # ç¥éID
|
| | | def GetNeedGubaoID(self): return self.NeedGubaoID # è§£éæéå¤å®ID |
| | | |
| | | # ç¥éå级表 |
| | | class IPY_ShentongLV(): |
| | | |
| | | def __init__(self): |
| | | self.ShentongID = 0
|
| | | self.ShentongClassLV = 0
|
| | | self.ShentongLV = 0
|
| | | self.LVLightNeedItem = []
|
| | | self.LVAttrTypeList = []
|
| | | self.LVAttrValueList = []
|
| | | self.LVSkillID = 0
|
| | | self.FightPowerEx = 0 |
| | | return |
| | | |
| | | def GetShentongID(self): return self.ShentongID # ç¥éID
|
| | | def GetShentongClassLV(self): return self.ShentongClassLV # ç¥éé¶çº§
|
| | | def GetShentongLV(self): return self.ShentongLV # ç¥éç级
|
| | | def GetLVLightNeedItem(self): return self.LVLightNeedItem # ç¹äº®è¯¥çº§æéç©å [[ç©åID,个æ°], ...]
|
| | | def GetLVAttrTypeList(self): return self.LVAttrTypeList # è¯¥çº§å±æ§ç±»åå表
|
| | | def GetLVAttrValueList(self): return self.LVAttrValueList # è¯¥çº§å±æ§å¼å表
|
| | | def GetLVSkillID(self): return self.LVSkillID # 该级èä¸éç¨æè½ID
|
| | | def GetFightPowerEx(self): return self.FightPowerEx # éå æå |
| | | |
| | | # ç©å®¶ç级表 |
| | | class IPY_PlayerLV(): |
| | |
| | | self.ipyGubaoStarLen = len(self.ipyGubaoStarCache)
|
| | | self.ipyGubaoLVCache = self.__LoadFileData("GubaoLV", IPY_GubaoLV)
|
| | | self.ipyGubaoLVLen = len(self.ipyGubaoLVCache)
|
| | | self.ipyShentongCache = self.__LoadFileData("Shentong", IPY_Shentong)
|
| | | self.ipyShentongLen = len(self.ipyShentongCache)
|
| | | self.ipyShentongLVCache = self.__LoadFileData("ShentongLV", IPY_ShentongLV)
|
| | | self.ipyShentongLVLen = len(self.ipyShentongLVCache)
|
| | | self.ipyPlayerLVCache = self.__LoadFileData("PlayerLV", IPY_PlayerLV)
|
| | | self.ipyPlayerLVLen = len(self.ipyPlayerLVCache)
|
| | | self.ipySpecMapPlayerAttrFormatCache = self.__LoadFileData("SpecMapPlayerAttrFormat", IPY_SpecMapPlayerAttrFormat)
|
| | |
| | | def GetGubaoStarByIndex(self, index): return self.ipyGubaoStarCache[index]
|
| | | def GetGubaoLVCount(self): return self.ipyGubaoLVLen
|
| | | def GetGubaoLVByIndex(self, index): return self.ipyGubaoLVCache[index]
|
| | | def GetShentongCount(self): return self.ipyShentongLen
|
| | | def GetShentongByIndex(self, index): return self.ipyShentongCache[index]
|
| | | def GetShentongLVCount(self): return self.ipyShentongLVLen
|
| | | def GetShentongLVByIndex(self, index): return self.ipyShentongLVCache[index]
|
| | | def GetPlayerLVCount(self): return self.ipyPlayerLVLen
|
| | | def GetPlayerLVByIndex(self, index): return self.ipyPlayerLVCache[index]
|
| | | def GetSpecMapPlayerAttrFormatCount(self): return self.ipySpecMapPlayerAttrFormatLen
|
| | |
| | | import PlayerFaQi
|
| | | import SkillShell
|
| | | import PlayerGubao
|
| | | import PlayerShentong
|
| | | import PlayerLianTi
|
| | | import PlayerYinji
|
| | | import PlayerLove
|
| | |
| | | GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
|
| | |
|
| | | PlayerGubao.OnPlayerLogin(curPlayer)
|
| | | PlayerShentong.OnPlayerLogin(curPlayer)
|
| | | # ä¸çº¿æ¥è¯¢ä¸æ¬¡å
å¼è®¢å
|
| | | curPlayer.SendDBQueryRecharge()
|
| | |
|
| | |
| | | import PlayerFaQi
|
| | | import PlayerLove
|
| | | import PlayerGubao
|
| | | import PlayerShentong
|
| | | import PlayerCharm
|
| | | import ChPlayer
|
| | | import GMShell
|
| | |
| | | PlayerCharm.CalcCharmAttr(curPlayer)
|
| | | PlayerLianTi.CalcLianTiAttr(curPlayer)
|
| | | PlayerGubao.CalcGubaoAttr(curPlayer)
|
| | | PlayerShentong.CalcShentongAttr(curPlayer)
|
| | | self.RefreshAllState(isForce=True)
|
| | | GameWorld.DebugLog("End ReCalcAllState!!!")
|
| | | return
|
New file |
| | |
| | | #!/usr/bin/python |
| | | # -*- coding: GBK -*- |
| | | #------------------------------------------------------------------------------- |
| | | # |
| | | ##@package Player.PlayerShentong |
| | | # |
| | | # @todo:ç¥é |
| | | # @author hxp |
| | | # @date 2023-01-08 |
| | | # @version 1.0 |
| | | # |
| | | # è¯¦ç»æè¿°: ç¥é |
| | | # |
| | | #------------------------------------------------------------------------------- |
| | | #"""Version = 2023-01-08 18:00""" |
| | | #------------------------------------------------------------------------------- |
| | | |
| | | import GameWorld |
| | | import ShareDefine |
| | | import PlayerControl |
| | | import IpyGameDataPY |
| | | import ChPyNetSendPack |
| | | import IPY_GameWorld |
| | | import NetPackCommon |
| | | import PlayerGubao |
| | | import ItemCommon |
| | | import ChConfig |
| | | |
| | | def GetShentongLVInfo(curPlayer, shentongID): |
| | | lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShentongLVInfo % shentongID) |
| | | classLV = lvInfo / 100 |
| | | lv = lvInfo % 100 |
| | | return classLV, lv |
| | | def SetShentongLVInfo(curPlayer, shentongID, classLV, lv): |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShentongLVInfo % shentongID, classLV * 100 + lv) |
| | | return |
| | | |
| | | def OnPlayerLogin(curPlayer): |
| | | Sync_ShentongLVInfo(curPlayer) |
| | | Sync_ShentongSkillInfo(curPlayer, True) |
| | | return |
| | | |
| | | #// B2 19 ç¥éå级 #tagCMShentongLVUp |
| | | # |
| | | #struct tagCMShentongLVUp |
| | | #{ |
| | | # tagHead Head; |
| | | # BYTE ShentongID; |
| | | #}; |
| | | def OnShentongLVUp(index, curPackData, tick): |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) |
| | | playerID = curPlayer.GetPlayerID() |
| | | shentongID = curPackData.ShentongID |
| | | ipyData = IpyGameDataPY.GetIpyGameData("Shentong", shentongID) |
| | | if not ipyData: |
| | | return |
| | | needGubaoID = ipyData.GetNeedGubaoID() |
| | | if needGubaoID and not PlayerGubao.GetGubaoLVInfo(curPlayer, needGubaoID)[1]: |
| | | GameWorld.DebugLog("å¤å®æªæ¿æ´»ï¼æ æ³å级ç¥é! shentongID=%s,needGubaoID=%s" % (shentongID, needGubaoID), playerID) |
| | | return |
| | | |
| | | classLV, lv = GetShentongLVInfo(curPlayer, shentongID) |
| | | nextClassLV = classLV |
| | | nextLV = lv + 1 |
| | | lvIpyData = IpyGameDataPY.GetIpyGameDataNotLog("ShentongLV", shentongID, nextClassLV, nextLV) |
| | | if not lvIpyData: |
| | | nextClassLV = classLV + 1 |
| | | nextLV = 1 |
| | | lvIpyData = IpyGameDataPY.GetIpyGameDataNotLog("ShentongLV", shentongID, nextClassLV, nextLV) |
| | | if not lvIpyData: |
| | | GameWorld.ErrLog("没æä¸ä¸çº§ç¥éæ°æ®ï¼æ æ³å级! shentongID=%s,classLV=%s,lv=%s" % (shentongID, classLV, lv), playerID) |
| | | return |
| | | |
| | | needItemList = lvIpyData.GetLVLightNeedItem() |
| | | if not needItemList: |
| | | return |
| | | |
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) |
| | | lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack) |
| | | if lackItemDict: |
| | | GameWorld.DebugLog("ç¥éå级æéç©åä¸è¶³ï¼ shentongID=%s,classLV(%s-%s),nextClassLV=(%s-%s),needItemList=%s,lackItemDict=%s" |
| | | % (shentongID, classLV, lv, nextClassLV, nextLV, needItemList, lackItemDict), playerID) |
| | | return |
| | | #æ£æ¶è |
| | | ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Shentong") |
| | | |
| | | SetShentongLVInfo(curPlayer, shentongID, nextClassLV, nextLV) |
| | | Sync_ShentongLVInfo(curPlayer, [shentongID]) |
| | | |
| | | LVSkillID = lvIpyData.GetLVSkillID() |
| | | GameWorld.Log("ç¥éå级æåï¼ shentongID=%s,classLV(%s-%s),nextClassLV=(%s-%s),LVSkillID=%s" |
| | | % (shentongID, classLV, lv, nextClassLV, nextLV, LVSkillID), playerID) |
| | | if LVSkillID: |
| | | lvSkillData = GameWorld.GetGameData().GetSkillBySkillID(LVSkillID) |
| | | lvSkillTypeID = lvSkillData.GetSkillTypeID() if lvSkillData else 0 |
| | | lvSkillLV = lvSkillData.GetSkillLV() if lvSkillData else 0 |
| | | |
| | | ShentongSkillCount = IpyGameDataPY.GetFuncCfg("Shentong", 1) |
| | | skillIDList = [] |
| | | for num in range(ShentongSkillCount): |
| | | skillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShentongSkillID % num) |
| | | if not skillID: |
| | | skillIDList.append(0) |
| | | continue |
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID) |
| | | if not skillData: |
| | | continue |
| | | skillTypeID = skillData.GetSkillTypeID() |
| | | skillLV = skillData.GetSkillLV() |
| | | if lvSkillTypeID == skillTypeID: |
| | | if lvSkillLV > skillLV: # å级 |
| | | skillIDList.append(LVSkillID) |
| | | else: |
| | | skillIDList.append(0) # ä¸è¬ä¸å¯è½ï¼åºç°è¯¥æ
åµçè¯ç½®0éæ°æ·»å |
| | | else: |
| | | skillIDList.append(skillID) |
| | | |
| | | # æç©ºä½é»è®¤æ·»å å°è¯¥ç©ºä½ |
| | | if LVSkillID not in skillIDList and 0 in skillIDList: |
| | | skillIDList[skillIDList.index(0)] = LVSkillID |
| | | |
| | | if LVSkillID in skillIDList: |
| | | GameWorld.DebugLog("èªå¨åºæ/æ¿æ¢ç¥éæè½: skillIDList=%s" % skillIDList, playerID) |
| | | SetShentongSkill(curPlayer, skillIDList) |
| | | |
| | | RefreshShentongAttr(curPlayer) |
| | | return |
| | | |
| | | #// B2 20 ç¥éæè½è®¾ç½® #tagCMShentongSkillSet |
| | | # |
| | | #struct tagCMShentongSkillSet |
| | | #{ |
| | | # tagHead Head; |
| | | # BYTE Count; |
| | | # DWORD SkillIDList[Count]; |
| | | #}; |
| | | def OnShentongSkillSet(index, curPackData, tick): |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) |
| | | skillIDList = curPackData.SkillIDList |
| | | SetShentongSkill(curPlayer, skillIDList) |
| | | return |
| | | |
| | | def SetShentongSkill(curPlayer, setSkillIDList): |
| | | if not setSkillIDList: |
| | | return |
| | | ShentongSkillCountMax = IpyGameDataPY.GetFuncCfg("Shentong", 1) |
| | | if len(setSkillIDList) > ShentongSkillCountMax: |
| | | return |
| | | |
| | | if len(setSkillIDList) < ShentongSkillCountMax: |
| | | setSkillIDList += [0] * (ShentongSkillCountMax - len(setSkillIDList)) |
| | | |
| | | forbidSkillIDList = [] |
| | | for skillID in setSkillIDList: |
| | | if not skillID: |
| | | continue |
| | | if not GameWorld.GetGameData().GetSkillBySkillID(skillID): |
| | | GameWorld.ErrLog("æ¾ä¸å°è¯¥ç¥éæè½æ°æ®! skillID=%s" % skillID) |
| | | return |
| | | forbidSkillIDList.append(skillID) |
| | | |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in xrange(ipyDataMgr.GetShentongLVCount()): |
| | | ipyData = ipyDataMgr.GetShentongLVByIndex(index) |
| | | LVSkillID = ipyData.GetLVSkillID() |
| | | if not LVSkillID: |
| | | continue |
| | | if LVSkillID not in forbidSkillIDList: |
| | | continue |
| | | shentongID = ipyData.GetShentongID() |
| | | shentongClassLV = ipyData.GetShentongClassLV() |
| | | shentongLV = ipyData.GetShentongLV() |
| | | classLV, lv = GetShentongLVInfo(curPlayer, shentongID) |
| | | if classLV < shentongClassLV or (classLV == shentongClassLV and lv < shentongLV): |
| | | GameWorld.ErrLog("ç¥éç级ä¸è¶³ï¼æ æ³ä½¿ç¨è¯¥æè½! LVSkillID=%s,shentongID=%s,needClassLV=(%s-%s),curClassLV=(%s-%s)" |
| | | % (LVSkillID, shentongID, shentongClassLV, shentongLV, classLV, lv), curPlayer.GetPlayerID()) |
| | | return |
| | | forbidSkillIDList.remove(LVSkillID) |
| | | |
| | | if forbidSkillIDList: |
| | | GameWorld.ErrLog("å卿 æ³ä½¿ç¨çç¥éæè½ï¼æ æ³è®¾ç½®! setSkillIDList=%s,forbidSkillIDList=%s" |
| | | % (setSkillIDList, forbidSkillIDList), curPlayer.GetPlayerID()) |
| | | return |
| | | |
| | | # å 为å¯è½è°æ´é¡ºåºï¼å¿
é¡»å
ç»ä¸å é¤åç»ä¸æ·»å ï¼ä¸ç¶å¯è½å¯¼è´æè½é¡ºåºè°æ´åå
被添å åå被å é¤ |
| | | skillManager = curPlayer.GetSkillManager() |
| | | playerCtl = PlayerControl.PlayerControl(curPlayer) |
| | | for num in range(ShentongSkillCountMax): |
| | | skillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShentongSkillID % num) |
| | | if skillID and skillManager.FindSkillBySkillID(skillID): |
| | | skillManager.DeleteSkillBySkillID(skillID, True) |
| | | playerCtl.RefreshSkillFightPowerByDel(skillID) |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShentongSkillID % num, 0) |
| | | |
| | | for num in range(ShentongSkillCountMax): |
| | | setSkillID = setSkillIDList[num] |
| | | if setSkillID: |
| | | skillManager.LearnSkillByID(setSkillID, True) |
| | | playerCtl.RefreshSkillFightPowerEx(setSkillID, 0) |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShentongSkillID % num, setSkillID) |
| | | |
| | | Sync_ShentongSkillInfo(curPlayer) |
| | | return |
| | | |
| | | def RefreshShentongAttr(curPlayer): |
| | | CalcShentongAttr(curPlayer) |
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() |
| | | return |
| | | |
| | | def CalcShentongAttr(curPlayer): |
| | | |
| | | fightPowerEx = 0 |
| | | allAttrList = [{} for _ in range(4)] |
| | | |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in xrange(ipyDataMgr.GetShentongCount()): |
| | | ipyData = ipyDataMgr.GetShentongByIndex(index) |
| | | shentongID = ipyData.GetShentongID() |
| | | classLV, lv = GetShentongLVInfo(curPlayer, shentongID) |
| | | if not classLV and not lv: |
| | | continue |
| | | lvIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("ShentongLV", {"ShentongID":shentongID}, True) |
| | | if not lvIpyDataList: |
| | | continue |
| | | for lvIpyData in lvIpyDataList: |
| | | shentongClassLV = lvIpyData.GetShentongClassLV() |
| | | shentongLV = lvIpyData.GetShentongLV() |
| | | if classLV < shentongClassLV or (classLV == shentongClassLV and lv < shentongLV): |
| | | break |
| | | |
| | | LVAttrTypeList = lvIpyData.GetLVAttrTypeList() |
| | | LVAttrValueList = lvIpyData.GetLVAttrValueList() |
| | | for i, attrID in enumerate(LVAttrTypeList): |
| | | attrValue = LVAttrValueList[i] |
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) |
| | | |
| | | if lvIpyData.GetFightPowerEx(): |
| | | fightPowerEx += lvIpyData.GetFightPowerEx() |
| | | |
| | | # éå æå |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Shentong, fightPowerEx) |
| | | # ä¿å计ç®å¼ |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList) |
| | | return |
| | | |
| | | def Sync_ShentongLVInfo(curPlayer, shentongIDList=None): |
| | | if shentongIDList == None: |
| | | syncIDList = [] |
| | | ipyDataMgr = IpyGameDataPY.IPY_Data() |
| | | for index in range(ipyDataMgr.GetShentongCount()): |
| | | ipyData = ipyDataMgr.GetShentongByIndex(index) |
| | | syncIDList.append(ipyData.GetShentongID()) |
| | | else: |
| | | syncIDList = shentongIDList |
| | | |
| | | shentongInfoList = [] |
| | | for shentongID in syncIDList: |
| | | classLV, lv = GetShentongLVInfo(curPlayer, shentongID) |
| | | if not classLV and not lv and shentongIDList == None: |
| | | # 没ææå®æ¶åªåæ¥æ¿æ´»ç |
| | | continue |
| | | shentong = ChPyNetSendPack.tagMCShentongLV() |
| | | shentong.ShentongID = shentongID |
| | | shentong.ClassLV = classLV |
| | | shentong.LV = lv |
| | | shentongInfoList.append(shentong) |
| | | |
| | | if not shentongInfoList: |
| | | return |
| | | |
| | | clientPack = ChPyNetSendPack.tagMCShentongLVInfo() |
| | | clientPack.ShentongLVList = shentongInfoList |
| | | clientPack.Count = len(clientPack.ShentongLVList) |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack) |
| | | return |
| | | |
| | | def Sync_ShentongSkillInfo(curPlayer, isLogin=False): |
| | | skillIDList = [] |
| | | ShentongSkillCountMax = IpyGameDataPY.GetFuncCfg("Shentong", 1) |
| | | for num in range(ShentongSkillCountMax): |
| | | skillIDList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShentongSkillID % num)) |
| | | |
| | | if skillIDList.count(0) == ShentongSkillCountMax and isLogin: |
| | | return |
| | | |
| | | clientPack = ChPyNetSendPack.tagMCShentongSkillInfo() |
| | | clientPack.SkillIDList = skillIDList |
| | | clientPack.Count = len(clientPack.SkillIDList) |
| | | NetPackCommon.SendFakePack(curPlayer, clientPack) |
| | | return |
| | | |