From 9e65b1227144d715b48bdac99290a292108bec53 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 一月 2023 17:09:19 +0800
Subject: [PATCH] 9765 【BT8】【后端】神通
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 119 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 179 +++++++++
PySysDB/生成IpyGameDataPY/config.ini | 4
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 119 ++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 179 +++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 16
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 58 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 2
PySysDB/PySysDBPY.h | 22 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py | 291 ++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Shentong.py | 86 ++++
13 files changed, 1,077 insertions(+), 2 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index d78b15c..bb6085d 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -461,6 +461,28 @@
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
diff --git "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini" "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini"
index bfc85cd..b28f90d 100644
--- "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini"
+++ "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini"
@@ -1,5 +1,5 @@
[config]
-; 椤圭洰鏍硅矾寰�
-CodeProjectPath = E:\SnxxServerCode\ServerPython
+; 项目根路径
+CodeProjectPath = E:\Git\SnxxServerCode\ServerPython
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 4a1280f..a5935be 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -18158,6 +18158,125 @@
#------------------------------------------------------
+# 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):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index c0c0ffb..8a3f6ea 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -23138,6 +23138,185 @@
#------------------------------------------------------
+# 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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 6a46b12..35f59c9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1777,6 +1777,22 @@
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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 4a1280f..a5935be 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -18158,6 +18158,125 @@
#------------------------------------------------------
+# 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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index c0c0ffb..8a3f6ea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -23138,6 +23138,185 @@
#------------------------------------------------------
+# 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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
index aa124dc..c79346d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintSkill.py
@@ -61,6 +61,8 @@
16 : "灵宠主人技能",
17 : "称号技能",
18 : "装备被动技能",
+ 19 : "炼体技能",
+ 20 : "神通技能",
}
for funcType, skillInfo in skillDict.items():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Shentong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Shentong.py
new file mode 100644
index 0000000..31078f6
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Shentong.py
@@ -0,0 +1,86 @@
+#!/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
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index fdc2ceb..81a1658 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -380,6 +380,22 @@
("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),
@@ -2791,6 +2807,40 @@
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():
@@ -6417,6 +6467,10 @@
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)
@@ -7001,6 +7055,10 @@
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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 711c996..338add5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -145,6 +145,7 @@
import PlayerFaQi
import SkillShell
import PlayerGubao
+import PlayerShentong
import PlayerLianTi
import PlayerYinji
import PlayerLove
@@ -912,6 +913,7 @@
GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
PlayerGubao.OnPlayerLogin(curPlayer)
+ PlayerShentong.OnPlayerLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index ce8cef7..2456e9f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -99,6 +99,7 @@
import PlayerFaQi
import PlayerLove
import PlayerGubao
+import PlayerShentong
import PlayerCharm
import ChPlayer
import GMShell
@@ -4531,6 +4532,7 @@
PlayerCharm.CalcCharmAttr(curPlayer)
PlayerLianTi.CalcLianTiAttr(curPlayer)
PlayerGubao.CalcGubaoAttr(curPlayer)
+ PlayerShentong.CalcShentongAttr(curPlayer)
self.RefreshAllState(isForce=True)
GameWorld.DebugLog("End ReCalcAllState!!!")
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
new file mode 100644
index 0000000..b16e2ff
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
@@ -0,0 +1,291 @@
+#!/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
+
--
Gitblit v1.8.0