From 0cb288fc2cad76d7cd8150a3e0b15bbe0eff2c1e Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 05 三月 2019 10:57:47 +0800
Subject: [PATCH] 6307 【后端】【2.0】多套装备开发单(强化)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py                     |   87 +++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                              |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py          |   48 +++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                      |   52 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                  |   26 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                    |   38 +++
 PySysDB/PySysDBPY.h                                                                                     |   14 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py |   92 ++++++---
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py                                           |   52 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py   |   52 +++--
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                       |   26 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                         |   11 
 12 files changed, 380 insertions(+), 124 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index f75fb8b..a09ade4 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -106,8 +106,7 @@
 struct tagItemPlusMax
 {
 	BYTE		_Type;		//按装备位对应类型查找
-	BYTE		_ItemRank;	// 装备阶数
-	BYTE		_ItemColor;	//装备颜色 如橙装
+	BYTE		_Star;	// 装备星数
 	WORD		LevelMax;	//强化等级上限
 };
 
@@ -1776,4 +1775,15 @@
 	dict		CostItemDict;	//特殊材料
 	dict		StarAttrInfo;	//星级属性
 	dict		BaseAttrInfo;	//基础属性增加
+};
+
+//装备强化进化表
+
+struct tagEquipPlusEvolve
+{
+	BYTE		_EquipPlace;	//装备位
+	BYTE		_EvolveLV;	//进化等级
+	WORD		NeedPlusLV;	//需要强化等级
+	dict		CostItem;	//消耗材料
+	dict		Attr;	//属性
 };
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 8696fe3..e98ec90 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -6244,6 +6244,58 @@
 
 
 #------------------------------------------------------
+# A3 16 装备强化进化 #tagCMEquipPlusEvolve
+
+class  tagCMEquipPlusEvolve(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ItemIndex", c_ushort),    #装备在背包中索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x16
+        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 = 0x16
+        self.ItemIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMEquipPlusEvolve)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 16 装备强化进化 //tagCMEquipPlusEvolve:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ItemIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ItemIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMEquipPlusEvolve=tagCMEquipPlusEvolve()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPlusEvolve.Cmd,m_NAtagCMEquipPlusEvolve.SubCmd))] = m_NAtagCMEquipPlusEvolve
+
+
+#------------------------------------------------------
 #A3 05 宝石摘取 #tagCMEquipStonePick
 
 class  tagCMEquipStonePick(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index f1d2171..e174e31 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -15487,15 +15487,16 @@
 
 
 #------------------------------------------------------
-# A3 B3 装备部位星级信息 #tagMCEquipPartStarLVInfo
+# A3 B3 装备部位强化信息 #tagMCEquipPartPlusInfo
 
-class  tagMCEquipPartStarLV(Structure):
+class  tagMCEquipPartPlusLV(Structure):
     _pack_ = 1
     _fields_ = [
                   ("PackType", c_ubyte),    
                   ("EquipIndex", c_ubyte),    
                   ("EquipPartStarLV", c_ushort),    
                   ("Proficiency", c_int),    
+                  ("EvolveLV", c_ubyte),    
                   ]
 
     def __init__(self):
@@ -15512,34 +15513,37 @@
         self.EquipIndex = 0
         self.EquipPartStarLV = 0
         self.Proficiency = 0
+        self.EvolveLV = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCEquipPartStarLV)
+        return sizeof(tagMCEquipPartPlusLV)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A3 B3 装备部位星级信息 //tagMCEquipPartStarLVInfo:
+        DumpString = '''// A3 B3 装备部位强化信息 //tagMCEquipPartPlusInfo:
                                 PackType:%d,
                                 EquipIndex:%d,
                                 EquipPartStarLV:%d,
-                                Proficiency:%d
+                                Proficiency:%d,
+                                EvolveLV:%d
                                 '''\
                                 %(
                                 self.PackType,
                                 self.EquipIndex,
                                 self.EquipPartStarLV,
-                                self.Proficiency
+                                self.Proficiency,
+                                self.EvolveLV
                                 )
         return DumpString
 
 
-class  tagMCEquipPartStarLVInfo(Structure):
+class  tagMCEquipPartPlusInfo(Structure):
     Head = tagHead()
     Count = 0    #(BYTE Count)// 信息个数
-    InfoList = list()    #(vector<tagMCEquipPartStarLV> InfoList)// 信息列表
+    InfoList = list()    #(vector<tagMCEquipPartPlusLV> InfoList)// 信息列表
     data = None
 
     def __init__(self):
@@ -15553,7 +15557,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
-            temInfoList = tagMCEquipPartStarLV()
+            temInfoList = tagMCEquipPartPlusLV()
             _pos = temInfoList.ReadData(_lpData, _pos)
             self.InfoList.append(temInfoList)
         return _pos
@@ -15598,8 +15602,8 @@
         return DumpString
 
 
-m_NAtagMCEquipPartStarLVInfo=tagMCEquipPartStarLVInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarLVInfo.Head.Cmd,m_NAtagMCEquipPartStarLVInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarLVInfo
+m_NAtagMCEquipPartPlusInfo=tagMCEquipPartPlusInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartPlusInfo.Head.Cmd,m_NAtagMCEquipPartPlusInfo.Head.SubCmd))] = m_NAtagMCEquipPartPlusInfo
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index ee41056..141ea7a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -56,12 +56,16 @@
 Writer = wdb
 Releaser = wdb
 RegType = 0
-RegisterPackCount = 1
+RegisterPackCount = 2
 
 PacketCMD_1=0xA3
 PacketSubCMD_1=0x01
 PacketCallFunc_1=OnEquipMayaPlus
 
+PacketCMD_2=0xA3
+PacketSubCMD_2=0x16
+PacketCallFunc_2=OnEquipPlusEvolve
+
 ;npc交互
 [FunctionNPCCommon]
 ScriptName = Event\EventSrc\FunctionNPCCommon.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c01cc03..4505a99 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3605,12 +3605,13 @@
 Def_PDict_RunTaskAwardState = "RunTaskAwardState_%s" # 是否已领取跑环本轮结束奖励 参数任务类型
 Def_PDict_RunTaskAwardRecord = "RunTaskAwardRecord_%s" # 跑环本轮结束奖励记录 参数任务类型
 Def_PDict_RunTaskNextMissionID = "RunTaskNextMissionID_%s" # 跑环本轮结束下个任务ID 参数任务类型
-# 宝石
 
+#强化
 Def_PDict_EquipPartPlusLV = "EPPlusLV_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
 Def_PDict_EquipActiveStarLV = "EquipActiveStarLV" #装备已激活总强化等级
-Def_PDict_EquipPartProficiency = "EPProf_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
-Def_PDict_EquipActiveStars = "EquipActiveStars" #装备已激活总强化星级
+Def_PDict_EquipPartProficiency = "EPProf_%s_%s" # 装备部位对应公共强化熟练度,参数为(packType, index)
+Def_PDict_EquipPartPlusEvolveLV = "EPPlusEvolveLV_%s_%s" # 装备部位对应公共强化进化等级,参数为(packType, index)
+# 宝石
 Def_PDict_EquipPartStoneID = "StoneID_%s_%s" # 装备位_孔位存储宝石ID*10+是(1)否(0)绑定
 
 # 装备洗练, 暂不区分背包类型,如果有不同背包,策划设定不同的装备位
@@ -4927,7 +4928,8 @@
 ItemDel_CoatDecompose, # 时装分解
 ItemDel_ZhuXianDecompose, # 诛仙装备分解
 ItemDel_EquipStarUp, # 装备升星
-) = range(2000, 2000 + 39)
+ItemDel_EquipPlusEvolve, # 装备强化进化
+) = range(2000, 2000 + 40)
 
 # 物品扣除类型对应信息 {类型:eventName, ...}
 ItemDelTypeDict = {
@@ -4970,6 +4972,7 @@
                    ItemDel_CoatDecompose:"CoatDecompose",
                    ItemDel_ZhuXianDecompose:"ZhuXianDecompose",
                    ItemDel_EquipStarUp:"EquipStarUp",
+                   ItemDel_EquipPlusEvolve:"EquipPlusEvolve",
                    }
 
 ##==================================================================================================
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 8696fe3..e98ec90 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -6244,6 +6244,58 @@
 
 
 #------------------------------------------------------
+# A3 16 装备强化进化 #tagCMEquipPlusEvolve
+
+class  tagCMEquipPlusEvolve(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("ItemIndex", c_ushort),    #装备在背包中索引
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA3
+        self.SubCmd = 0x16
+        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 = 0x16
+        self.ItemIndex = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMEquipPlusEvolve)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 16 装备强化进化 //tagCMEquipPlusEvolve:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                ItemIndex:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.ItemIndex
+                                )
+        return DumpString
+
+
+m_NAtagCMEquipPlusEvolve=tagCMEquipPlusEvolve()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPlusEvolve.Cmd,m_NAtagCMEquipPlusEvolve.SubCmd))] = m_NAtagCMEquipPlusEvolve
+
+
+#------------------------------------------------------
 #A3 05 宝石摘取 #tagCMEquipStonePick
 
 class  tagCMEquipStonePick(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index f1d2171..e174e31 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -15487,15 +15487,16 @@
 
 
 #------------------------------------------------------
-# A3 B3 装备部位星级信息 #tagMCEquipPartStarLVInfo
+# A3 B3 装备部位强化信息 #tagMCEquipPartPlusInfo
 
-class  tagMCEquipPartStarLV(Structure):
+class  tagMCEquipPartPlusLV(Structure):
     _pack_ = 1
     _fields_ = [
                   ("PackType", c_ubyte),    
                   ("EquipIndex", c_ubyte),    
                   ("EquipPartStarLV", c_ushort),    
                   ("Proficiency", c_int),    
+                  ("EvolveLV", c_ubyte),    
                   ]
 
     def __init__(self):
@@ -15512,34 +15513,37 @@
         self.EquipIndex = 0
         self.EquipPartStarLV = 0
         self.Proficiency = 0
+        self.EvolveLV = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCEquipPartStarLV)
+        return sizeof(tagMCEquipPartPlusLV)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// A3 B3 装备部位星级信息 //tagMCEquipPartStarLVInfo:
+        DumpString = '''// A3 B3 装备部位强化信息 //tagMCEquipPartPlusInfo:
                                 PackType:%d,
                                 EquipIndex:%d,
                                 EquipPartStarLV:%d,
-                                Proficiency:%d
+                                Proficiency:%d,
+                                EvolveLV:%d
                                 '''\
                                 %(
                                 self.PackType,
                                 self.EquipIndex,
                                 self.EquipPartStarLV,
-                                self.Proficiency
+                                self.Proficiency,
+                                self.EvolveLV
                                 )
         return DumpString
 
 
-class  tagMCEquipPartStarLVInfo(Structure):
+class  tagMCEquipPartPlusInfo(Structure):
     Head = tagHead()
     Count = 0    #(BYTE Count)// 信息个数
-    InfoList = list()    #(vector<tagMCEquipPartStarLV> InfoList)// 信息列表
+    InfoList = list()    #(vector<tagMCEquipPartPlusLV> InfoList)// 信息列表
     data = None
 
     def __init__(self):
@@ -15553,7 +15557,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         for i in range(self.Count):
-            temInfoList = tagMCEquipPartStarLV()
+            temInfoList = tagMCEquipPartPlusLV()
             _pos = temInfoList.ReadData(_lpData, _pos)
             self.InfoList.append(temInfoList)
         return _pos
@@ -15598,8 +15602,8 @@
         return DumpString
 
 
-m_NAtagMCEquipPartStarLVInfo=tagMCEquipPartStarLVInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarLVInfo.Head.Cmd,m_NAtagMCEquipPartStarLVInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarLVInfo
+m_NAtagMCEquipPartPlusInfo=tagMCEquipPartPlusInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartPlusInfo.Head.Cmd,m_NAtagMCEquipPartPlusInfo.Head.SubCmd))] = m_NAtagMCEquipPartPlusInfo
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
index 11a1732..d2dfe21 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
@@ -60,9 +60,12 @@
     if packType not in ChConfig.Pack_EquipPart_CanPlusStar:
         GameWorld.DebugLog("packType not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
         return
-    
+    ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index})
+    if not ipyData:
+        return
+    equipPlace = ipyData.GetEquipPlace()
     indexList = ChConfig.Pack_EquipPart_CanPlusStar[packType]
-    if index not in indexList:
+    if equipPlace not in indexList:
         GameWorld.Log("    index not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
         return
     
@@ -74,17 +77,17 @@
         GameWorld.DebugLog("OnEquipMayaPlus() equip is empty")
         return
     
-    maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
-    curPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
-    if curPartStarLV >= maxStarLV:
-        GameWorld.Log("OnEquipMayaPlus:curPartStarLV(%s) >= maxStarLV(%s)" % (curPartStarLV, maxStarLV), playerID)
+    maxPlusLV = ItemCommon.GetItemMaxPlusLV(curPlayer, index, curEquip)
+    curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
+    if curPartPlusLV >= maxPlusLV:
+        GameWorld.Log("OnEquipMayaPlus:curPartPlusLV(%s) >= maxPlusLV(%s)" % (curPartPlusLV, maxPlusLV), playerID)
         return
 
     # 强化处理
     result = DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index)
     
-    updPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
-    #GameWorld.Log("    result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartStarLV, updPartStarLV), playerID)
+    updPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
+    #GameWorld.Log("    result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartPlusLV, updPartStarLV), playerID)
     if result == ChConfig.Def_ComposeState_None:
         return
     
@@ -98,8 +101,8 @@
     
 
     # 强化变更时处理
-    if curPartStarLV != updPartStarLV:
-        DoLogic_OnEquipPartStarLVChange(curPlayer, packType)
+    if curPartPlusLV != updPartPlusLV:
+        DoLogic_OnEquipPartStarLVChange(curPlayer, packType, ItemCommon.GetItemClassLV(curEquip))
         # 增加强化成就
         PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlus, 1)
         EventShell.EventRespons_EquipPlus(curPlayer)
@@ -117,8 +120,8 @@
     if findType == -1:
         return result
     
-    curPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
-    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartStarLV)
+    curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
+    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartPlusLV)
     if not ipyData:
         return
     costSilver = ipyData.GetCostCount()
@@ -132,7 +135,7 @@
 
     if curExp >= totalExp:
         #升级
-        curPartStarLV = __EquipMayaPlusChange(curPlayer, packType, curEquip, index)
+        curPartPlusLV = __EquipMayaPlusChange(curPlayer, packType, curEquip, index)
         curExp = curExp - totalExp
         
     ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)
@@ -140,7 +143,7 @@
     # 支付金币
     PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)
 
-    DataRecordPack.DR_UpStarLVSuccess(curPlayer, curExp, curPartStarLV)
+    DataRecordPack.DR_UpStarLVSuccess(curPlayer, curExp, curPartPlusLV)
     return ChConfig.Def_ComposeState_Sucess
 
 
@@ -165,9 +168,7 @@
         
     # 成就
     #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlusLV, 1, [updPlusLV])
-    
-    
-                    
+               
     #任务触发
     #EventShell.EventRespons_OnEquipPartStarUp(curPlayer, setLV)
     # 开服活动数据
@@ -175,24 +176,55 @@
     return updPlusLV
 
 
-def DoLogic_OnEquipPartStarLVChange(curPlayer, packType):
+def DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV):
     #先刷装备BUFF 再计算属性
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Plus)
-    ChEquip.RefreshPlayerEquipAttribute(curPlayer)
+    ChEquip.RefreshPlayerEquipAttribute(curPlayer, classLV)
     
     #刷新所有属性
     playControl = PlayerControl.PlayerControl(curPlayer)
     playControl.RefreshPlayerAttrState()
     return
 
-
-## 全身12部位强化等级最低的一件强化等级
-#def GetMinPlusLV(curPlayer):
-#    packType = IPY_GameWorld.rptEquip
-#    minPlusLV = GetMaxEquipPartStarLV()
-#    equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
-#    for i in equipPartIndexList:
-#        partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, i)
-#        if partStarLV < minPlusLV:
-#            minPlusLV = partStarLV
-#    return minPlusLV
+#// A3 16 装备强化进化 #tagCMEquipPlusEvolve
+#struct    tagCMEquipPlusEvolve
+#{
+#    tagHead        Head;
+#    WORD        ItemIndex;        //装备在背包中索引
+#};
+def OnEquipPlusEvolve(playerIndex, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
+    
+    equipPackindex = clientData.ItemIndex
+    
+    packType = IPY_GameWorld.rptEquip
+    curPack = curPlayer.GetItemManager().GetPack(packType)
+    curEquip = curPack.GetAt(equipPackindex)
+    if not ItemCommon.CheckItemCanUse(curEquip):
+        return
+    curEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, equipPackindex)
+    maxEvolveLV = ItemCommon.GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curEquip)
+    if curEvolveLV >= maxEvolveLV:
+        GameWorld.DebugLog('装备强化进化, 已达最大进化等级equipPackindex=%s, maxEvolveLV=%s'%(equipPackindex, maxEvolveLV))
+        return
+    nextEvolveLV = curEvolveLV + 1
+    equipPlace = curEquip.GetEquipPlace()
+    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, nextEvolveLV)
+    if not ipyData:
+        return
+    costItemDict = ipyData.GetCostItem()
+    delItemDict = {}
+    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+    for itemID, itemCnt in costItemDict.items():
+        hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemID, itemPack, itemCnt)
+        if not hasEnough:
+            GameWorld.DebugLog('装备强化进化 材料不足itemID= %s,itemCnt=%s'%(itemID, itemCnt))
+            return
+        delItemDict[tuple(indexList)] = itemCnt
+    for itemIndexList, delCnt in delItemDict.items():
+        ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, delCnt, True, ChConfig.ItemDel_EquipPlusEvolve)
+    
+    ChEquip.SetEquipPartPlusEvolveLV(curPlayer, packType, equipPackindex, nextEvolveLV)
+    DoLogic_OnEquipPartStarLVChange(curPlayer, packType, ItemCommon.GetItemClassLV(curEquip))
+    ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, equipPackindex)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
index bde1d0f..f8f110c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
@@ -22,7 +22,7 @@
 import ChEquip
 import GameWorld
 import ItemCommon
-
+import IpyGameDataPY
 #---------------------------------------------------------------------
 #逻辑实现
 ## GM命令执行入口
@@ -34,41 +34,49 @@
     if not cmdList:
         __GMHelpAnswer(curPlayer)
         return
-    
-    if len(cmdList) == 1:
-        setStarLV = cmdList[0]
-        for pType, indexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
-            for i in indexList:
-                curPack = curPlayer.GetItemManager().GetPack(pType)
-                curEquip = curPack.GetAt(i)
-                ChEquip.SetEquipPartPlusLV(curPlayer, pType, i, curEquip, setStarLV)
-                ChEquip.SetEquipPartProficiency(curPlayer, pType, i, 0)
-            Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, pType)
+    packType = IPY_GameWorld.rptEquip
+    curPack = curPlayer.GetItemManager().GetPack(packType)
+    if len(cmdList) == 2:
+        setStarLV = cmdList[1]
+        classLV = cmdList[0]
+        for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(packType, []):
+            ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+            if not ipyData:
+                continue
+            gridIndex = ipyData.GetGridIndex()
+            curEquip = curPack.GetAt(gridIndex)
+            ChEquip.SetEquipPartPlusLV(curPlayer, packType, gridIndex, curEquip, setStarLV)
+            ChEquip.SetEquipPartProficiency(curPlayer, packType, gridIndex, 0)
+            ChEquip.SetEquipPartPlusEvolveLV(curPlayer, packType, gridIndex, 0)
+            Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV)
         ChEquip.NotifyEquipPartPlusLV(curPlayer)
-        GameWorld.DebugAnswer(curPlayer, "设置所有部位强化等级为: %s" % setStarLV)
+        GameWorld.DebugAnswer(curPlayer, "设置%s阶所有部位强化等级为: %s" % (classLV, setStarLV))
         return
     
     if len(cmdList) != 3:
         __GMHelpAnswer(curPlayer, "参数错误!")
         return
     
-    packType, index, starLV = cmdList
+    classLV, equipPlace, starLV = cmdList
     if packType not in ChConfig.Pack_EquipPart_CanPlusStar:
         __GMHelpAnswer(curPlayer, "packType不存在!")
         return
     
-    if index not in ChConfig.Pack_EquipPart_CanPlusStar[packType]:
+    if equipPlace not in ChConfig.Pack_EquipPart_CanPlusStar[packType]:
         __GMHelpAnswer(curPlayer, "index索引不存在!")
         return
-    
-    curPack = curPlayer.GetItemManager().GetPack(packType)
-    curEquip = curPack.GetAt(index)
-
-    maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
+    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+    if not ipyData:
+        return
+    gridIndex = ipyData.GetGridIndex()
+    curEquip = curPack.GetAt(gridIndex)
+    if not ItemCommon.CheckItemCanUse(curEquip):
+        return
+    maxStarLV = ItemCommon.GetItemMaxPlusLV(curPlayer, gridIndex, curEquip)
     starLV = min(starLV, maxStarLV)
-    ChEquip.SetEquipPartPlusLV(curPlayer, packType, index, curEquip, starLV)
-    ChEquip.SetEquipPartProficiency(curPlayer, packType, index, 0)
-    Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, packType)
+    ChEquip.SetEquipPartPlusLV(curPlayer, packType, gridIndex, curEquip, starLV)
+    ChEquip.SetEquipPartProficiency(curPlayer, packType, gridIndex, 0)
+    Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV)
     return
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index c794290..439adc5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -113,8 +113,7 @@
 
                 "ItemPlusMax":(
                         ("BYTE", "Type", 1),
-                        ("BYTE", "ItemRank", 1),
-                        ("BYTE", "ItemColor", 1),
+                        ("BYTE", "Star", 1),
                         ("WORD", "LevelMax", 0),
                         ),
 
@@ -1384,6 +1383,14 @@
                         ("dict", "StarAttrInfo", 0),
                         ("dict", "BaseAttrInfo", 0),
                         ),
+
+                "EquipPlusEvolve":(
+                        ("BYTE", "EquipPlace", 1),
+                        ("BYTE", "EvolveLV", 1),
+                        ("WORD", "NeedPlusLV", 0),
+                        ("dict", "CostItem", 0),
+                        ("dict", "Attr", 0),
+                        ),
                 }
 
 
@@ -1557,14 +1564,12 @@
     
     def __init__(self):
         self.Type = 0
-        self.ItemRank = 0
-        self.ItemColor = 0
+        self.Star = 0
         self.LevelMax = 0
         return
         
     def GetType(self): return self.Type # 按装备位对应类型查找
-    def GetItemRank(self): return self.ItemRank #  装备阶数
-    def GetItemColor(self): return self.ItemColor # 装备颜色 如橙装
+    def GetStar(self): return self.Star #  装备星数
     def GetLevelMax(self): return self.LevelMax # 强化等级上限
 
 # 装备全身强化属性
@@ -4228,6 +4233,23 @@
     def GetCostItemDict(self): return self.CostItemDict # 特殊材料
     def GetStarAttrInfo(self): return self.StarAttrInfo # 星级属性
     def GetBaseAttrInfo(self): return self.BaseAttrInfo # 基础属性增加
+
+# 装备强化进化表
+class IPY_EquipPlusEvolve():
+    
+    def __init__(self):
+        self.EquipPlace = 0
+        self.EvolveLV = 0
+        self.NeedPlusLV = 0
+        self.CostItem = {}
+        self.Attr = {}
+        return
+        
+    def GetEquipPlace(self): return self.EquipPlace # 装备位
+    def GetEvolveLV(self): return self.EvolveLV # 进化等级
+    def GetNeedPlusLV(self): return self.NeedPlusLV # 需要强化等级
+    def GetCostItem(self): return self.CostItem # 消耗材料
+    def GetAttr(self): return self.Attr # 属性
 
 
 def Log(msg, playerID=0, par=0):
@@ -4525,6 +4547,8 @@
         self.ipyEquipPlaceIndexMapLen = len(self.ipyEquipPlaceIndexMapCache)
         self.ipyEquipStarUpCache = self.__LoadFileData("EquipStarUp", IPY_EquipStarUp)
         self.ipyEquipStarUpLen = len(self.ipyEquipStarUpCache)
+        self.ipyEquipPlusEvolveCache = self.__LoadFileData("EquipPlusEvolve", IPY_EquipPlusEvolve)
+        self.ipyEquipPlusEvolveLen = len(self.ipyEquipPlusEvolveCache)
         Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
         Log("IPY_DataMgr InitOK!")
         return
@@ -4963,6 +4987,8 @@
     def GetEquipPlaceIndexMapByIndex(self, index): return self.ipyEquipPlaceIndexMapCache[index]
     def GetEquipStarUpCount(self): return self.ipyEquipStarUpLen
     def GetEquipStarUpByIndex(self, index): return self.ipyEquipStarUpCache[index]
+    def GetEquipPlusEvolveCount(self): return self.ipyEquipPlusEvolveLen
+    def GetEquipPlusEvolveByIndex(self, index): return self.ipyEquipPlusEvolveCache[index]
 
 IPYData = IPY_DataMgr()
 def IPY_Data(): return IPYData
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index 4025566..0e99c6b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -455,7 +455,7 @@
     
     allAttrListStar = [{} for _ in range(4)]  # 星数属性
     #allAttrListEquip = [{} for _ in range(4)]  # 装备其他
-    #allAttrListPlusBase = [{} for _ in range(4)]  # 基础强化属性
+    allAttrListPlusBase = [{} for _ in range(4)]  # 基础强化属性
     allAttrListStone = [{} for _ in range(4)]  # 宝石属性
     allAttrListSuit = [{} for _ in range(4)]  # 套装属性
     allAttrListWash = [{} for _ in range(4)]  # 洗练属性
@@ -510,15 +510,6 @@
 #                PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
 #            baseEquipAttrDict[effectID] = baseEquipAttrDict.get(effectID, 0) + effectValue
             
-#        groupType = GetEquipPartSuiteGroupType(curPlayer, equipIndex)
-#        for suiteType in range(1, maxSuiteType + 1):
-#            suitelv = GetEquipPartSuiteLV(curPlayer, equipIndex, suiteType)
-#            if suitelv:
-#                maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
-#                suiteLV = min(suitelv, maxSuiteLV)
-#                if suiteLV:
-#                    suiteKey = '%s_%s_%s' % (groupType, suiteType, suitelv)
-#                    suitCntDict[suiteKey] = suitCntDict.get(suiteKey, 0) + 1
         
         #星数属性
         equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) #生效的星数
@@ -532,10 +523,10 @@
                 suitCntDict[suiteID] = []
             suitCntDict[suiteID].append(equipPartStar)
         
-        #物品强化属性,佩饰强化不同要区分
-#        if equipIndex in equipPartStarIndexList:
-#            equipPartStarLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
-#            CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartStarLV)
+        #物品强化属性
+        equipPartPlusLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
+        equipPartPlusEvolveLV = GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, equipIndex, curEquip)
+        CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartPlusLV, equipPartPlusEvolveLV)
         
         #传奇属性
         #CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict)
@@ -654,7 +645,7 @@
 #  @param curPlayer 当前玩家
 #  @param curPlayer allAttrList 属性缓存
 #  @return None
-def CalcAttr_ItemPlus(curPlayer, curEquip, allAttrList, equipPartStarLV=None):
+def CalcAttr_ItemPlus(curPlayer, curEquip, allAttrList, equipPartStarLV, equipPartPlusEvolveLV):
     if not equipPartStarLV:
         return
     plusType = GetEquipPlusType(curEquip)
@@ -667,6 +658,14 @@
     attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
     for i, attrID in enumerate(attrTypeList):
         PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
+    
+    #进化属性
+    equipPlace = curEquip.GetEquipPlace()
+    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, equipPartPlusEvolveLV)
+    if not ipyData:
+        return
+    for attrID, attrValue in ipyData.GetAttr().items():
+        PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
     return
 
 
@@ -889,19 +888,40 @@
     oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
     if updEquipShowSwitch == oldEquipShowSwitch:
         return
+    classLV, isSuite = updEquipShowSwitch/10, updEquipShowSwitch%10
+    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+    #验证套装
+    realSuit=True
+    for place in ChConfig.Def_SuitEquipPlaceList:
+        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, place)
+        if not ipyData:
+            realSuit = False
+            break
+        gridIndex = ipyData.GetGridIndex()
+        curEquip = equipPack.GetAt(gridIndex)
+        if not ItemCommon.CheckItemCanUse(curEquip):
+            realSuit = False
+            break
+        if not curEquip.GetSuiteID():
+            realSuit = False
+            break
+    if realSuit != isSuite:
+        GameWorld.DebugLog('SetEquipShowSwitch 前端发的isSuite 和实际不一致!')
+        return
     
     #通知外观装备
     updFaceEquipIndex = 0
     equipIndexList = []
+    
     for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:
-        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', 1, equipPlace)
+        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
         if not ipyData:
             continue
         gridIndex = ipyData.GetGridIndex()
         updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex
         equipIndexList.append(gridIndex)
     PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex)
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+    
     for equipPackIndex in equipIndexList:
         curEquip = equipPack.GetAt(equipPackIndex)
         if not ItemCommon.CheckItemCanUse(curEquip):
@@ -930,7 +950,7 @@
 
 ## 获取公共部位强化星级, 因装备的最高可强化星级影响,用于算当前装备属性使用, 不影响全身星级
 def GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip):
-    maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
+    maxStarLV = ItemCommon.GetItemMaxPlusLV(curPlayer, index, curEquip)
     return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)), maxStarLV)
 
 
@@ -953,9 +973,27 @@
     return
 
 
+## 获取公共部位强化进化等级, 用于算当前装备属性使用, 不影响全身星级
+def GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, index, curEquip):
+    maxEvolveLV = ItemCommon.GetItemMaxPlusEvolveLV(curPlayer, index, curEquip)
+    return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index)), maxEvolveLV)
+
+
+## 获取公共部位强化进化等级
+def GetEquipPartPlusEvolveLV(curPlayer, packType, index):
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index))
+
+
+## 设置公共部位强化进化等级
+def SetEquipPartPlusEvolveLV(curPlayer, packType, index, evolveLV):
+    if GetEquipPartPlusEvolveLV(curPlayer, packType, index) == evolveLV:
+        return
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index), evolveLV)
+    return
+
 ## 通知公共部位强化等级
 def NotifyEquipPartPlusLV(curPlayer, packType=None, index=None):
-    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarLVInfo()
+    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo()
     ePartStarLVPack.Clear()
     ePartStarLVPack.InfoList = []
     
@@ -969,12 +1007,13 @@
                 if index != None and index != i:
                     continue
             
-            ePartStarLV = ChPyNetSendPack.tagMCEquipPartStarLV()
+            ePartStarLV = ChPyNetSendPack.tagMCEquipPartPlusLV()
             ePartStarLV.Clear()
             ePartStarLV.PackType = pType
             ePartStarLV.EquipIndex = i
             ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, pType, i)
             ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, pType, i)
+            ePartStarLV.EvolveLV = GetEquipPartPlusEvolveLV(curPlayer, pType, i)
             ePartStarLVPack.InfoList.append(ePartStarLV)
             
     ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
@@ -1167,8 +1206,8 @@
     activeCnt = clientData.Cnt
     if activeType == 0:
         key = ChConfig.Def_PDict_EquipActiveStarLV
-    elif activeType == 1:
-        key = ChConfig.Def_PDict_EquipActiveStars
+#    elif activeType == 1:
+#        key = ChConfig.Def_PDict_EquipActiveStars
     else:
         return
     curCnt = curPlayer.NomalDictGetProperty(key)
@@ -1199,8 +1238,8 @@
             continue
         if aType == 0:
             key = ChConfig.Def_PDict_EquipActiveStarLV
-        elif aType == 1:
-            key = ChConfig.Def_PDict_EquipActiveStars
+#        elif aType == 1:
+#            key = ChConfig.Def_PDict_EquipActiveStars
         else:
             return
         curCnt = curPlayer.NomalDictGetProperty(key)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index 76cc7d8..a2fcac8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -1925,7 +1925,7 @@
 ## 获取物品最高强化等级
 #  @param itemType: 物品类型
 #  @return 最大星级,0为不可强化
-def GetItemMaxPlusLV(curItem):
+def GetItemMaxPlusLV(curPlayer, equipPackindex, curItem):
     equipPlace = curItem.GetEquipPlace()
     plusMaxTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)
     if not plusMaxTypeDict:
@@ -1935,19 +1935,41 @@
     if equipPlace not in plusMaxTypeDict:
         return 0
     findType = plusMaxTypeDict[equipPlace]
-    #仙器特殊取固定值
-    if equipPlace in [ShareDefine.retFairyCan, ShareDefine.retFairyCan2]:
-        rank = 0
-        itemColor = 0
-    else:
-        rank = GetItemClassLV(curItem)
-        itemColor = curItem.GetItemColor()
-    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlusMax", findType, rank, itemColor)
-    if not ipyData:
-        GameWorld.ErrLog("找不到装备强化等级上限表数据配置! rank = %s, %s" % (rank , curItem.GetItemQuality()))
-        return
+    equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackindex, curItem)
+    ipyData = IpyGameDataPY.GetIpyGameDataNotLog("ItemPlusMax", findType, equipStar)
+    if ipyData:
+        return ipyData.GetLevelMax()
     
-    return ipyData.GetLevelMax()
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('ItemPlusMax', {'Type':findType}, True, False)
+    if not ipyDataList:
+        return 0
+    maxStar = ipyDataList[-1].GetStar()
+    if equipStar > maxStar:
+        return ipyDataList[-1].GetLevelMax()
+    findMax = 0
+    for ipyData in ipyDataList:
+        if equipStar >= ipyData.GetStar():
+            findMax = ipyData.GetLevelMax()
+    return findMax
+    
+
+## 获取物品最高强化进化等级
+#  @param itemType: 物品类型
+#  @return 最大星级,0为不可强化
+def GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curItem):
+    packType = IPY_GameWorld.rptEquip
+    curPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, equipPackindex, curItem)
+    equipPlace = curItem.GetEquipPlace()
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlusEvolve', {'EquipPlace':equipPlace}, True)
+    if not ipyDataList:
+        return 0
+    maxEvolvelv = 0
+    for ipyData in ipyDataList:
+        if curPlusLV >= ipyData.GetNeedPlusLV():
+            maxEvolvelv = ipyData.GetEvolveLV()
+        else:
+            break
+    return maxEvolvelv
 
 ## 获取物品最高星数
 #  @param itemType: 物品类型

--
Gitblit v1.8.0