From 0f297a5b66b91751d8342624db871efeca7ed94e Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期六, 02 三月 2019 10:20:48 +0800
Subject: [PATCH] 6307 【后端】【2.0】多套装备开发单(穿脱、升星)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py |   85 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py                      |  410 ++++++++-----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                       |   84 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                   |  108 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py                 |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py            |   31 -
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py                                            |   84 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py    |   20 
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                        |  108 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py        |   22 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py          |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                     |   67 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                   |    3 
 PySysDB/PySysDBPY.h                                                                                      |   25 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py                  |    4 
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                            |   48 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStar.py      |   57 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py              |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py        |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py                |   31 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                       |   51 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py  |   24 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py                |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py                |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py                  |  103 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py  |  163 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                               |   14 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py           |   26 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py              |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py             |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                          |   74 +-
 31 files changed, 1,241 insertions(+), 439 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 96dbfbe..fb54306 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1758,4 +1758,29 @@
 {
 	list		LVRange;	//等级范围
 	DWORD		GoodsID;	//商城表ID
+};
+
+//装备位背包索引映射表
+
+struct tagEquipPlaceIndexMap
+{
+	DWORD		GridIndex;	//背包格子索引
+	DWORD		_ClassLV;	//阶级(物品表LV字段)
+	DWORD		_EquipPlace;	//装备位(物品表EquipPlace字段)
+};
+
+//装备升星表
+
+struct tagEquipStarUp
+{
+	BYTE		_ClassLV;	//阶级
+	BYTE		_EquipPlace;	//装备位
+	BYTE		_Star;	//星数
+	list		CostEquipPlace;	//可用装备部位
+	list		CostEquipColor;	//可用装备品质
+	BYTE		CostEquipCnt;	//装备数量
+	BYTE		SuitTotalRate;	//全套装加成概率(非套50%)
+	dict		CostItemDict;	//特殊材料
+	dict		StarAttrInfo;	//星级属性
+	dict		BaseAttrInfo;	//基础属性增加
 };
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 7cb615e..8696fe3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -9469,6 +9469,90 @@
 
 
 #------------------------------------------------------
+# A5 C5 装备部位升星 #tagCMEquipPartStarUp
+
+class  tagCMEquipPartStarUp(Structure):
+    Head = tagHead()
+    EquipPackIndex = 0    #(WORD EquipPackIndex)// 部位格子索引
+    CostEquipCnt = 0    #(BYTE CostEquipCnt)// 装备个数
+    CostEquipIndex = list()    #(vector<WORD> CostEquipIndex)// 装备索引
+    CostEquipID = list()    #(vector<DWORD> CostEquipID)// 装备物品ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC5
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.EquipPackIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.CostEquipCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CostEquipCnt):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.CostEquipIndex.append(value)
+        for i in range(self.CostEquipCnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.CostEquipID.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC5
+        self.EquipPackIndex = 0
+        self.CostEquipCnt = 0
+        self.CostEquipIndex = list()
+        self.CostEquipID = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 1
+        length += 2 * self.CostEquipCnt
+        length += 4 * self.CostEquipCnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.EquipPackIndex)
+        data = CommFunc.WriteBYTE(data, self.CostEquipCnt)
+        for i in range(self.CostEquipCnt):
+            data = CommFunc.WriteWORD(data, self.CostEquipIndex[i])
+        for i in range(self.CostEquipCnt):
+            data = CommFunc.WriteDWORD(data, self.CostEquipID[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EquipPackIndex:%d,
+                                CostEquipCnt:%d,
+                                CostEquipIndex:%s,
+                                CostEquipID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.EquipPackIndex,
+                                self.CostEquipCnt,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMEquipPartStarUp=tagCMEquipPartStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartStarUp.Head.Cmd,m_NAtagCMEquipPartStarUp.Head.SubCmd))] = m_NAtagCMEquipPartStarUp
+
+
+#------------------------------------------------------
 # A5 48 兑换大师等级经验 #tagCMExchangeMasterEXP
 
 class  tagCMExchangeMasterEXP(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 0110c0b..f1d2171 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -13782,6 +13782,114 @@
 
 
 #------------------------------------------------------
+# A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
+
+class  tagMCEquipPartStar(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("EquipPackIndex", c_ushort),    
+                  ("Star", 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.EquipPackIndex = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCEquipPartStar)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 B1 装备部位星数信息 //tagMCEquipPartStarInfo:
+                                EquipPackIndex:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.EquipPackIndex,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagMCEquipPartStarInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 信息个数
+    InfoList = list()    #(vector<tagMCEquipPartStar> InfoList)// 信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xB1
+        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):
+            temInfoList = tagMCEquipPartStar()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xB1
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.InfoList[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.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCEquipPartStarInfo=tagMCEquipPartStarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarInfo.Head.Cmd,m_NAtagMCEquipPartStarInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarInfo
+
+
+#------------------------------------------------------
 # A3 09 通知玩家部位套装等级 #tagMCEquipPartSuiteLVInfo
 
 class  tagMCEquipPartSuiteLV(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 5e81214..770c3d6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -306,7 +306,7 @@
     Def_mitProduceResult,     # 生产采集结果回应
     Def_mitPetEquipMerge,     # 宠物装备合成回应
     Def_mitEquipInherit,      # 装备继承
-    Def_mitEquipPlus,         # 装备加强
+    Def_mitEquipStarUp,       # 装备升星
     Def_mitEquipMayaPlus,     # 装备玛雅加强
     Def_mitEquipAddAttr,      # 装备追加
     Def_mitEquipSlotting,     # 装备打孔
@@ -1732,32 +1732,34 @@
 # 手游不使用C++定义 enum            RoleEquipType
 # 装备位定义
 RoleEquipType = (
-    retWeapon,      #1 主手
-    retWeapon2,     #2 副手
-    retHat,         #3 帽子
-    retClothes,     #4 衣服
-    retBelt,        #5 腰带
-    retTrousers,    #6 裤子
-    retShoes,       #7 鞋子
-    retNeck,        #8 项链
-    retFairyCan,       #9 仙器
-    retFairyCan2,       #10 仙器
-    retWing,        #11 翅膀
-    retGuard,    #12 守护
-    retBaldric1,     #13 佩饰
-    retBaldric2,     #14 佩饰
-    retBaldric3,     #15 佩饰
-    retBaldric4,     #16 佩饰
-    retBaldric5,     #17 佩饰
-    retBaldric6,     #18 佩饰
-    retHorse,        #19 坐骑
-    retWeaponSkin,   #20 时装武器
-    retClothesSkin,  #21 时装衣服
-    retWeapon2Skin,  #22 时装副手
+    retWeapon,          #1 主手
+    retWeapon2,         #2 副手
+    retHat,             #3 帽子
+    retClothes,         #4 衣服
+    retBelt,            #5 腰带
+    retTrousers,        #6 裤子
+    retShoes,           #7 鞋子
+    retGlove,           #8 手套
+    retNeck,            #9 项链
+    retFairyCan,        #10 仙器1
+    retFairyCan2,       #11 仙器2
+    retJade,            #12 玉佩
+    retWing,            #13 翅膀
+    retGuard1,          #14 守护1
+    retGuard2,          #15 守护2
+    retPeerlessWeapon,  #16 绝世武器
+    retPeerlessWeapon2, #17 绝世副手
+    retXXX18,           #18 暂无
+    retHorse,           #19 坐骑
+    retWeaponSkin,      #20 时装武器
+    retClothesSkin,     #21 时装衣服
+    retWeapon2Skin,     #22 时装副手
     retMax,
 ) = range(1, 24)
 
 
+
+
 # 神兽装备位定义
 DogzEquipPlace = (
     dogzetHorn,     # 神兽兽角
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index ebed292..36c4ee6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1450,4 +1450,16 @@
 
 PacketCMD_1=0xAA
 PacketSubCMD_1=0x08
-PacketCallFunc_1=OnStartLuckyTreasure
\ No newline at end of file
+PacketCallFunc_1=OnStartLuckyTreasure
+
+;公共部位星数
+[Operate_EquipStar]
+ScriptName = Event\EventSrc\Operate_EquipStar.py
+Writer = xdh
+Releaser = xdh
+RegType = 0
+RegisterPackCount = 1
+
+PacketCMD_1=0xA5
+PacketSubCMD_1=0xC5
+PacketCallFunc_1=OnEquipPartStarUp
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 3fcf716..f768f64 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -340,17 +340,16 @@
 Def_ItemType_retBelt = 105        #5 腰带
 Def_ItemType_retTrousers = 106    #6 裤子
 Def_ItemType_retShoes = 107       #7 鞋子
-Def_ItemType_retNeck = 108        #8 项链
-Def_ItemType_retFairyCan = 109       #9 仙器
-Def_ItemType_retFairyCan2 = 110       #10 仙器
-Def_ItemType_retWing = 111        #11 翅膀
-Def_ItemType_retGuard = 112    #12 守护
-Def_ItemType_retBaldric1 = 113     #13 佩饰
-Def_ItemType_retBaldric2 = 114     #14 佩饰
-Def_ItemType_retBaldric3 = 115     #15 佩饰
-Def_ItemType_retBaldric4 = 116     #16 佩饰
-Def_ItemType_retBaldric5 = 117     #17 佩饰
-Def_ItemType_retBaldric6 = 118     #18 佩饰
+Def_ItemType_retGlove = 108       #8 手套
+Def_ItemType_retNeck = 109        #9 项链
+Def_ItemType_retFairyCan = 110       #10 仙器1
+Def_ItemType_retFairyCan2 = 111       #11 仙器2
+Def_ItemType_retJade = 112       #12 玉佩
+Def_ItemType_retWing = 113        #13 翅膀
+Def_ItemType_retGuard1 = 114   #14 守护1
+Def_ItemType_retGuard2 = 115    #15 守护2
+Def_ItemType_retPeerlessWeapon = 116    #16 绝世武器
+Def_ItemType_retPeerlessWeapon2 = 117    #17 绝世副手
 
 Def_ItemType_DogzEquipHorn = 119    # 神兽兽角
 Def_ItemType_DogzEquipEye = 120     # 神兽魔眼
@@ -405,16 +404,11 @@
                       ShareDefine.retTrousers:[Def_ItemType_retTrousers],
                       ShareDefine.retShoes:[Def_ItemType_retShoes],
                       ShareDefine.retNeck:[Def_ItemType_retNeck],
-                      ShareDefine.retFairyCan:[Def_ItemType_retFairyCan, Def_ItemType_retFairyCan2],
-                      ShareDefine.retFairyCan2:[Def_ItemType_retFairyCan, Def_ItemType_retFairyCan2],
+                      ShareDefine.retFairyCan:[Def_ItemType_retFairyCan],
+                      ShareDefine.retFairyCan2:[Def_ItemType_retFairyCan2],
                       ShareDefine.retWing:[Def_ItemType_retWing],
-                      ShareDefine.retGuard:[Def_ItemType_retGuard],
-                      ShareDefine.retBaldric1:[Def_ItemType_retBaldric1],
-                      ShareDefine.retBaldric2:[Def_ItemType_retBaldric2],
-                      ShareDefine.retBaldric3:[Def_ItemType_retBaldric3],
-                      ShareDefine.retBaldric4:[Def_ItemType_retBaldric4],
-                      ShareDefine.retBaldric5:[Def_ItemType_retBaldric5],
-                      ShareDefine.retBaldric6:[Def_ItemType_retBaldric6],
+                      ShareDefine.retGuard1:[Def_ItemType_retGuard1],
+                      ShareDefine.retGuard2:[Def_ItemType_retGuard2],
                       }
 #---------------------------------------------------------------------
 #写死的物品效果ID都放这边------请按数值顺序存放
@@ -2408,9 +2402,11 @@
                                             ShareDefine.retBelt,        #5 腰带
                                             ShareDefine.retTrousers,    #6 裤子
                                             ShareDefine.retShoes,       #7 鞋子
-                                            ShareDefine.retNeck,        #8 项链
-                                            ShareDefine.retFairyCan,       #9 仙器
-                                            ShareDefine.retFairyCan2,       #10 仙器
+                                            ShareDefine.retGlove,       #8 手套
+                                            ShareDefine.retNeck,        #9 项链
+                                            ShareDefine.retFairyCan,    #10 仙器1
+                                            ShareDefine.retFairyCan2,   #11 仙器2
+                                            ShareDefine.retJade,        #12 玉佩
                                                       ],
 
                               }
@@ -2435,8 +2431,7 @@
                            ]
 
 # 需要广播外观的装备部位
-Def_SyncEquipStateByIndex = [
-                                
+Def_SyncEquipStateByIndex = [                            
     ShareDefine.retWeapon,      #1 主手
     ShareDefine.retWeapon2,     #2 副手
     ShareDefine.retHat,         #3 帽子
@@ -2444,14 +2439,23 @@
     ShareDefine.retBelt,        #5 腰带
     ShareDefine.retTrousers,    #6 裤子
     ShareDefine.retShoes,       #7 鞋子
-    ShareDefine.retNeck,        #8 项链
-    ShareDefine.retFairyCan,       #9 仙器
-    ShareDefine.retFairyCan2,       #10 仙器
+    ShareDefine.retGlove,           #8 手套
     ShareDefine.retWing,        #11 翅膀
-    ShareDefine.retGuard,    #12 守护
+    ShareDefine.retGuard1,    #14 守护1
+    ShareDefine.retGuard2,    #15 守护2
     ShareDefine.retHorse,        #19 坐骑
                              ]
-
+#套装装备部位列表
+Def_SuitEquipPlaceList = [
+    ShareDefine.retWeapon,      #1 主手
+    ShareDefine.retWeapon2,     #2 副手
+    ShareDefine.retHat,         #3 帽子
+    ShareDefine.retClothes,     #4 衣服
+    ShareDefine.retBelt,        #5 腰带
+    ShareDefine.retTrousers,    #6 裤子
+    ShareDefine.retShoes,       #7 鞋子
+    ShareDefine.retGlove,       #8 手套
+    ]
 #---------------------------------------------------------------------
 #特殊物品光环,永久存在
 Def_SuperBuffList = [
@@ -3612,7 +3616,7 @@
 Def_PDict_RunTaskNextMissionID = "RunTaskNextMissionID_%s" # 跑环本轮结束下个任务ID 参数任务类型
 # 宝石
 
-Def_PDict_EquipPartStarLV = "EPStarLV_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
+Def_PDict_EquipPartPlusLV = "EPPlusLV_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
 Def_PDict_EquipActiveStarLV = "EquipActiveStarLV" #装备已激活总强化等级
 Def_PDict_EquipPartProficiency = "EPProf_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
 Def_PDict_EquipActiveStars = "EquipActiveStars" #装备已激活总强化星级
@@ -4007,6 +4011,10 @@
 #神兽
 Def_PDict_DogzFightState = "DogzFightState_%s" # 神兽助战状态,参数为key编号,按神兽ID二进制位存储
 Def_PDict_DogzBuyHelpbattleCount = "DogzBuyHelpbattleCount" # 额外购买的神兽助战位
+
+#装备部位星数
+Def_PDict_EquipPartStar = "EQPartStar_%s" #装备部位星数 参数 装备背包格子索引
+
 
 #-------------------------------------------------------------------------------
 #可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]}
@@ -4919,7 +4927,8 @@
 ItemDel_GatherSoul, # 聚魂分解
 ItemDel_CoatDecompose, # 时装分解
 ItemDel_ZhuXianDecompose, # 诛仙装备分解
-) = range(2000, 2000 + 38)
+ItemDel_EquipStarUp, # 装备升星
+) = range(2000, 2000 + 39)
 
 # 物品扣除类型对应信息 {类型:eventName, ...}
 ItemDelTypeDict = {
@@ -4961,6 +4970,7 @@
                    ItemDel_GatherSoul:"GatherSoul",
                    ItemDel_CoatDecompose:"CoatDecompose",
                    ItemDel_ZhuXianDecompose:"ZhuXianDecompose",
+                   ItemDel_EquipStarUp:"EquipStarUp",
                    }
 
 ##==================================================================================================
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 7cb615e..8696fe3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -9469,6 +9469,90 @@
 
 
 #------------------------------------------------------
+# A5 C5 装备部位升星 #tagCMEquipPartStarUp
+
+class  tagCMEquipPartStarUp(Structure):
+    Head = tagHead()
+    EquipPackIndex = 0    #(WORD EquipPackIndex)// 部位格子索引
+    CostEquipCnt = 0    #(BYTE CostEquipCnt)// 装备个数
+    CostEquipIndex = list()    #(vector<WORD> CostEquipIndex)// 装备索引
+    CostEquipID = list()    #(vector<DWORD> CostEquipID)// 装备物品ID
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC5
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.EquipPackIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.CostEquipCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CostEquipCnt):
+            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
+            self.CostEquipIndex.append(value)
+        for i in range(self.CostEquipCnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.CostEquipID.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA5
+        self.Head.SubCmd = 0xC5
+        self.EquipPackIndex = 0
+        self.CostEquipCnt = 0
+        self.CostEquipIndex = list()
+        self.CostEquipID = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 2
+        length += 1
+        length += 2 * self.CostEquipCnt
+        length += 4 * self.CostEquipCnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteWORD(data, self.EquipPackIndex)
+        data = CommFunc.WriteBYTE(data, self.CostEquipCnt)
+        for i in range(self.CostEquipCnt):
+            data = CommFunc.WriteWORD(data, self.CostEquipIndex[i])
+        for i in range(self.CostEquipCnt):
+            data = CommFunc.WriteDWORD(data, self.CostEquipID[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                EquipPackIndex:%d,
+                                CostEquipCnt:%d,
+                                CostEquipIndex:%s,
+                                CostEquipID:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.EquipPackIndex,
+                                self.CostEquipCnt,
+                                "...",
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagCMEquipPartStarUp=tagCMEquipPartStarUp()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartStarUp.Head.Cmd,m_NAtagCMEquipPartStarUp.Head.SubCmd))] = m_NAtagCMEquipPartStarUp
+
+
+#------------------------------------------------------
 # A5 48 兑换大师等级经验 #tagCMExchangeMasterEXP
 
 class  tagCMExchangeMasterEXP(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 0110c0b..f1d2171 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -13782,6 +13782,114 @@
 
 
 #------------------------------------------------------
+# A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
+
+class  tagMCEquipPartStar(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("EquipPackIndex", c_ushort),    
+                  ("Star", 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.EquipPackIndex = 0
+        self.Star = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCEquipPartStar)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A3 B1 装备部位星数信息 //tagMCEquipPartStarInfo:
+                                EquipPackIndex:%d,
+                                Star:%d
+                                '''\
+                                %(
+                                self.EquipPackIndex,
+                                self.Star
+                                )
+        return DumpString
+
+
+class  tagMCEquipPartStarInfo(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)// 信息个数
+    InfoList = list()    #(vector<tagMCEquipPartStar> InfoList)// 信息列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xB1
+        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):
+            temInfoList = tagMCEquipPartStar()
+            _pos = temInfoList.ReadData(_lpData, _pos)
+            self.InfoList.append(temInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0xB1
+        self.Count = 0
+        self.InfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.InfoList[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.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                InfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCEquipPartStarInfo=tagMCEquipPartStarInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarInfo.Head.Cmd,m_NAtagMCEquipPartStarInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarInfo
+
+
+#------------------------------------------------------
 # A3 09 通知玩家部位套装等级 #tagMCEquipPartSuiteLVInfo
 
 class  tagMCEquipPartSuiteLV(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
index 23e2b08..f66d612 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventShell.py
@@ -1898,9 +1898,9 @@
     RunQuestEvent(curPlayer, "trialexange", costItemID, Def_RunQuestType_Normal)
     return
 
-def EventRespons_EquipByPlace(curPlayer, equipplace):
+def EventRespons_EquipByPlace(curPlayer, itemClassLV, equipplace):
     #穿戴某部位装备(非时效)
-    RunQuestEvent(curPlayer, "equipbyplace", equipplace, Def_RunQuestType_Normal)
+    RunQuestEvent(curPlayer, "equipbyplace", '%s_%s'%(itemClassLV, equipplace), Def_RunQuestType_Normal)
     return
 
 def EventRespons_CompoundEquip(curPlayer, itemColor, itemQuality):
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 f9a9290..11a1732 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
@@ -6,12 +6,12 @@
 #
 ##@package Event.EventSrc.Operate_EquipPlus
 #
-# @todo:部位星级公共模式强化
+# @todo:部位强化公共模式强化
 # @author hxp
 # @date 2015-12-15
 # @version 1.2
 #
-# 详细描述: 部位星级公共模式强化
+# 详细描述: 部位强化公共模式强化
 #
 # @change: "2016-06-30 21:30" hxp 强化达人开服活动
 # @change: "2016-10-08 18:00" hxp 自动购买物品价格统一取商城物品价格
@@ -74,8 +74,8 @@
         GameWorld.DebugLog("OnEquipMayaPlus() equip is empty")
         return
     
-    maxStarLV = ItemCommon.GetItemMaxStarLV(curEquip)
-    curPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
+    maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
+    curPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
     if curPartStarLV >= maxStarLV:
         GameWorld.Log("OnEquipMayaPlus:curPartStarLV(%s) >= maxStarLV(%s)" % (curPartStarLV, maxStarLV), playerID)
         return
@@ -83,7 +83,7 @@
     # 强化处理
     result = DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index)
     
-    updPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
+    updPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
     #GameWorld.Log("    result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartStarLV, updPartStarLV), playerID)
     if result == ChConfig.Def_ComposeState_None:
         return
@@ -97,7 +97,7 @@
     #===========================================================================
     
 
-    # 星级变更时处理
+    # 强化变更时处理
     if curPartStarLV != updPartStarLV:
         DoLogic_OnEquipPartStarLVChange(curPlayer, packType)
         # 增加强化成就
@@ -117,7 +117,7 @@
     if findType == -1:
         return result
     
-    curPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
+    curPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
     ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartStarLV)
     if not ipyData:
         return
@@ -136,7 +136,7 @@
         curExp = curExp - totalExp
         
     ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)
-    ChEquip.NotifyEquipPartStarLV(curPlayer, packType, index)
+    ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, index)
     # 支付金币
     PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)
 
@@ -150,12 +150,12 @@
 #  @param packType: 背包类型
 #  @param curEquip: 当前装备
 #  @param succeedRate: 成功率
-#  @param failStarLV: 失败时的星级数
+#  @param failStarLV: 失败时的强化数
 #  @return 
 def __EquipMayaPlusChange(curPlayer, packType, curEquip, index):
-    curPlusLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
+    curPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
     updPlusLV = curPlusLV + 1
-    ChEquip.SetEquipPartStarLV(curPlayer, packType, index, curEquip, updPlusLV)
+    ChEquip.SetEquipPartPlusLV(curPlayer, packType, index, curEquip, updPlusLV)
     
     broadCastLVList = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelBroadCast", 1)
     #GameWorld.DebugLog("PlusLVChange index=%s,updPlusLV=%s,broadCastLVList=%s" % (index, updPlusLV, broadCastLVList))
@@ -192,7 +192,7 @@
 #    minPlusLV = GetMaxEquipPartStarLV()
 #    equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
 #    for i in equipPartIndexList:
-#        partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, i)
+#        partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, i)
 #        if partStarLV < minPlusLV:
 #            minPlusLV = partStarLV
 #    return minPlusLV
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py
new file mode 100644
index 0000000..03e9d0e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py
@@ -0,0 +1,163 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------------------
+#
+##@package Event.EventSrc.Operate_EquipStar
+#
+# @todo:公共部位星数
+# @author xdh
+# @date 2019-3-1
+# @version 1.0
+#
+# 详细描述: 公共部位星数
+#
+#
+#---------------------------------------------------------------------
+#"""Version = 2019-3-1 18:00"""
+#---------------------------------------------------------------------
+import ItemCommon
+import ShareDefine
+import PlayerControl
+import IPY_GameWorld
+import DataRecordPack
+import IpyGameDataPY
+import GameWorld
+import ChConfig
+import ChEquip
+#-------------------------------------------------------------------------------------------
+
+
+#===============================================================================
+#// A5 C5 装备部位升星 #tagCMEquipPartStarUp
+#struct    tagCMEquipPartStarUp
+#{
+#    tagHead        Head;
+#    WORD    EquipPackIndex;    // 部位格子索引
+#    BYTE    CostEquipCnt;    // 装备个数
+#    WORD    CostEquipIndex[CostEquipCnt];    // 装备索引
+#    DWORD    CostEquipID[CostEquipCnt];    // 装备物品ID
+#};
+#===============================================================================
+## 部位升星
+#  @param playerIndex: 玩家
+#  @param clientData: 封包
+#  @param tick: 当前时间
+#  @return None
+def OnEquipPartStarUp(playerIndex, clientData, tick):    
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
+    playerID = curPlayer.GetPlayerID()
+    
+    equipPackIndex = clientData.EquipPackIndex
+    packType = IPY_GameWorld.rptEquip
+    
+    if packType not in ChConfig.Pack_EquipPart_CanPlusStar:
+        return
+    ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackIndex})
+    if not ipyData:
+        return
+    classLV = ipyData.GetClassLV()
+    equipPlace = ipyData.GetEquipPlace()
+    placeList = ChConfig.Pack_EquipPart_CanPlusStar[packType]
+    if equipPlace not in placeList:
+        GameWorld.Log("    equipPlace %s not in ChConfig.Pack_EquipPart_CanPlusStar" % equipPlace, playerID)
+        return
+    
+    # 当前装备等级是否到达最高等级
+    curPack = curPlayer.GetItemManager().GetPack(packType)
+    curEquip = curPack.GetAt(equipPackIndex)
+    if not curEquip or curEquip.IsEmpty():
+        GameWorld.DebugLog("OnEquipPartStarUp() equip is empty")
+        return
+    
+    maxStar = ItemCommon.GetItemMaxStar(curEquip)
+    curPartStar = ChEquip.GetEquipPartStar(curPlayer, equipPackIndex)
+    if curPartStar >= maxStar:
+        GameWorld.Log("OnEquipPartStarUp:curPartStar(%s) >= maxStar(%s)" % (curPartStar, maxStar), playerID)
+        return
+
+    # 升星处理
+    result = DoLogic_EquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, clientData)
+    
+    updPartStar = ChEquip.GetEquipPartStar(curPlayer, equipPackIndex)
+    GameWorld.DebugLog("   装备升星 equipPackIndex=%s result=%s,curPartStar=%s,updPartStar=%s" % (equipPackIndex, result, curPartStar, updPartStar), playerID)
+    if result == ChConfig.Def_ComposeState_Sucess:
+        # 星级变更时处理
+        #刷新属性
+        ChEquip.RefreshPlayerEquipAttribute(curPlayer, classLV)
+        playControl = PlayerControl.PlayerControl(curPlayer)
+        playControl.RefreshPlayerAttrState()
+  
+        if updPartStar in IpyGameDataPY.GetFuncEvalCfg('EquipPartStarNotify'):
+            PlayerControl.WorldNotify(0, "StarLevelUp", [curPlayer.GetPlayerName(), curEquip.GetItemTypeID(), updPartStar])
+        #EventShell.EventRespons_EquipPlus(curPlayer)
+    return
+     
+
+## 开始装备升星
+#  @param index 为装备位
+#  @return 
+def DoLogic_EquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, clientData):
+    result = ChConfig.Def_ComposeState_None
+    nextStar = curPartStar + 1
+    ipyData = IpyGameDataPY.GetIpyGameData("EquipStarUp", classLV, equipPlace, nextStar)
+    if not ipyData:
+        return result
+    
+    costEquipCnt = ipyData.GetCostEquipCnt()
+    if clientData.CostEquipCnt < costEquipCnt:
+        GameWorld.DebugLog(' 开始装备升星,装备材料不足 %s' % costEquipCnt)
+        return result
+    costEquipPlaceList = ipyData.GetCostEquipPlace()
+    costEquipColorList = ipyData.GetCostEquipColor()
+    suitTotalRate = ipyData.GetSuitTotalRate()
+    singleSuitRate = float(suitTotalRate) / costEquipCnt
+    curRate = 0  #成功概率
+    delEquipIndexList = []
+    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+    for i, index in enumerate(clientData.CostEquipIndex):
+        costEquip = itemPack.GetAt(index)
+        if not costEquip or costEquip.IsEmpty():
+            return result
+        equipID = costEquip.GetItemTypeID()
+        if equipID != clientData.CostEquipID[i]:
+            GameWorld.ErrLog('   装备升星 客户端发的物品索引与实际物品ID不对应  index=%s,eatItemID=%s,wantEatItemID=%s' % (index, equipID, clientData.CostEquipID[i]))
+            return result
+        if costEquip.GetItemColor() not in costEquipColorList:
+            return result
+        if costEquip.GetEquipPlace() not in costEquipPlaceList:
+            return result
+        delEquipIndexList.append(index)
+        isSuite = costEquip.GetSuiteID()
+        addRate = singleSuitRate if isSuite else singleSuitRate / 2
+        curRate += addRate
+    if curRate <= 0:
+        GameWorld.Log('装备升星异常 概率为0!!equipPackIndex=%s'%equipPackIndex)
+        return result
+    #判断普通物品材料
+    costItemDict = ipyData.GetCostItemDict()
+    if costItemDict:
+        delItemDict = {}
+        for itemID, itemCnt in costItemDict.items():
+            hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemID, itemPack, itemCnt)
+            if not hasEnough:
+                return result
+            delItemDict[tuple(indexList)] = itemCnt
+        for itemIndexList, delCnt in delItemDict.items():
+            ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, delCnt, True, ChConfig.ItemDel_EquipStarUp)
+    #扣装备
+    ItemCommon.ReduceItem(curPlayer, itemPack, delEquipIndexList, len(delEquipIndexList), True, ChConfig.ItemDel_EquipStarUp)
+    isOK = GameWorld.CanHappen(curRate, 100)
+    if isOK:
+        ChEquip.SetEquipPartStar(curPlayer, equipPackIndex, nextStar)
+        ChEquip.NotifyEquipPartStar(curPlayer, equipPackIndex)
+        result = ChConfig.Def_ComposeState_Sucess
+    else:
+        result = ChConfig.Def_ComposeState_Fail
+    curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipStarUp, result)
+    drDict = {"PlayerID":curPlayer.GetPlayerID(), "AccID":curPlayer.GetAccID(), "classLV":classLV, "equipPlace":equipPlace, "IsSuccess":isOK,
+              "curRate":curRate, "nextStar":nextStar}
+    DataRecordPack.SendEventPack("EquipStarUp", drDict, curPlayer)
+    return result
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py
index b9bd568..45952d1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py
@@ -32,7 +32,7 @@
 import ShareDefine
 import EquipZhuXian
 
-
+g_stoneCanPlaceList = [] #可镶嵌的位置
 
 def OnLogin(curPlayer):
     ###登录发包同步客户端宝石信息
@@ -41,23 +41,30 @@
 
 def GetAllStoneEquipIndexList():
     ###得到所有可镶嵌宝石装备位列表
-    
+    global g_stoneCanPlaceList
+    if g_stoneCanPlaceList:
+        return g_stoneCanPlaceList
     #获得宝石类型数量
     GemTypeCount = IpyGameDataPY.GetFuncCfg("GemTypeCount")
     #获得所有可镶嵌宝石装备位
-    stoneCanPlaceList = []      
+    g_stoneCanPlaceList = []      
     for stoneTypeIndex in xrange(1, GemTypeCount + 1):
         #循环宝石类型对应的装备位
         placeList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1)
         for place in placeList:
-            if place not in stoneCanPlaceList:
-                stoneCanPlaceList.append(place)
-    return stoneCanPlaceList
+            ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'EquipPlace':place}, True)
+            if not ipyDataList:
+                continue
+            for ipyData in ipyDataList:
+                gridIndex = ipyData.GetGridIndex()
+                if gridIndex not in g_stoneCanPlaceList:
+                    g_stoneCanPlaceList.append(gridIndex)
+    return g_stoneCanPlaceList
 
 def GetAllEquipPlaceHoleIndex():
     ### 得到装备位所有孔位
-    gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
-    maxEquipHoleCnt = len(gemOpenClassLVList) # 最大装备阶级开放孔数
+    gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
+    maxEquipHoleCnt = len(gemOpenNeedStarList) # 最大装备阶级开放孔数
      
     gemOpenVipList = IpyGameDataPY.GetFuncEvalCfg("GemOpenVip", 1)
     maxHoleVipCnt = len(gemOpenVipList)# 最大Vip开放孔数
@@ -94,14 +101,14 @@
 
 def GetPackTypeByEquipPlace(equipPlace):
     ##目前支持镶嵌普通装备、诛仙装备
-    if equipPlace in ShareDefine.ZhuXianEquipPlace:
-        equipPackType = ShareDefine.rptZhuXianEquip
-        stonePackType = ShareDefine.rptZhuXianItem
-        placeIndex = EquipZhuXian.GetZhuXianEquipIndexByPlace(equipPlace)
-    else:
-        equipPackType = IPY_GameWorld.rptEquip
-        stonePackType = IPY_GameWorld.rptItem
-        placeIndex = equipPlace
+#    if equipPlace in ShareDefine.ZhuXianEquipPlace:
+#        equipPackType = ShareDefine.rptZhuXianEquip
+#        stonePackType = ShareDefine.rptZhuXianItem
+#        placeIndex = EquipZhuXian.GetZhuXianEquipIndexByPlace(equipPlace)
+#    else:
+    equipPackType = IPY_GameWorld.rptEquip
+    stonePackType = IPY_GameWorld.rptItem
+    placeIndex = equipPlace
     return equipPackType, stonePackType, placeIndex
 
 #//A3 04 宝石镶嵌或替换 #tagCMEquipEnchase
@@ -157,8 +164,8 @@
                       % (stoneItemID, stoneEffType, stoneCanPlaceList, equipPlace), playerID)
         return
     
-    equipClassLV = ItemCommon.GetItemClassLV(curEquip)
-    if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
+    equipStar = ChEquip.GetEquipPartStar(curEquip)
+    if not __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType):
         return
     
     # 扣除宝石
@@ -382,7 +389,7 @@
     DoStoneSuccess(curPlayer)
     return
 
-def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
+def __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType):
     ##验证孔合法性
     
     holeIndexList = GetAllEquipPlaceHoleIndex()
@@ -391,19 +398,17 @@
         return False
     
     openCommHoleCnt = 0 # 已经开放装备常规孔数
-    if equipPackType == ShareDefine.rptZhuXianEquip:
-        gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 2)
-    else:
-        gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
-    for holeCnt, openClassLV in enumerate(gemOpenClassLVList, 1):
-        if equipClassLV >= openClassLV:
+    
+    gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
+    for holeCnt, openStar in enumerate(gemOpenNeedStarList, 1):
+        if equipStar >= openStar:
             openCommHoleCnt = holeCnt
             
     # VIP孔
     if holeIndex >= ChConfig.Def_Stone_VipHole:
         
         if openCommHoleCnt <= 0:
-            GameWorld.Log("装备未开启任何普通宝石孔,无法开启VIP孔位! equipClassLV=%s,openCommHoleCnt=%s" % (equipClassLV, openCommHoleCnt))
+            GameWorld.Log("装备未开启任何普通宝石孔,无法开启VIP孔位! equipStar=%s,openCommHoleCnt=%s" % (equipStar, openCommHoleCnt))
             return False
         gemOpenVipList = IpyGameDataPY.GetFuncEvalCfg("GemOpenVip", 1)
         
@@ -425,8 +430,8 @@
         
     # 常规孔
     elif holeIndex >= openCommHoleCnt:
-        GameWorld.Log("该装备宝石孔为开放!equipClassLV=%s,holeIndex=%s,openCommHoleCnt=%s" 
-                      % (equipClassLV, holeIndex, openCommHoleCnt), curPlayer.GetPlayerID())
+        GameWorld.Log("该装备宝石孔为开放!equipStar=%s,holeIndex=%s,openCommHoleCnt=%s" 
+                      % (equipStar, holeIndex, openCommHoleCnt), curPlayer.GetPlayerID())
         return False
     
     return True
@@ -471,22 +476,22 @@
     return
 
 
-def DoMoveEquipStone(curPlayer, equipPlace): 
+def DoMoveEquipStone(curPlayer, equipPackIndex): 
     ###替换装备时宝石转移
-    equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
+    equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPackIndex)
     equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
     curEquip = equipPack.GetAt(placeIndex)
     if not ItemCommon.CheckItemCanUse(curEquip):
         return
     
-    #获得装备阶级孔信息
-    gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
-    maxEquipHoleCnt = len(gemOpenClassLVList) # 最大装备阶级开放孔数
+    #获得装备星级孔信息
+    gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
+    maxEquipHoleCnt = len(gemOpenNeedStarList) # 最大装备星级开放孔数
     
     openEquipHoleCnt = 0 # 已经开放孔数
-    equipClassLV = ItemCommon.GetItemClassLV(curEquip)
-    for holeCnt, openClassLV in enumerate(gemOpenClassLVList, 1):
-        if equipClassLV >= openClassLV:
+    partStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackIndex, curEquip)
+    for holeCnt, openStar in enumerate(gemOpenNeedStarList, 1):
+        if partStar >= openStar:
             openEquipHoleCnt = holeCnt
             
     #需要拆卸宝石的孔列表
@@ -496,10 +501,10 @@
     for holeIndex in xrange(maxEquipHoleCnt):      
         if holeIndex < openEquipHoleCnt:
             continue
-        curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
+        curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0]
         if curGemID == 0:
             continue       
-        pickoffHoleList.append([equipPlace, holeIndex])
+        pickoffHoleList.append([equipPackIndex, holeIndex])
         
     #没有开启普通装备孔,需摘除VIP孔
     if not openEquipHoleCnt:
@@ -508,10 +513,10 @@
         maxVipHoleCnt = len(gemOpenVipList)# 最大VIP开放孔数
         #判断VIP等级孔信息
         for holeIndex in xrange(ChConfig.Def_Stone_VipHole, ChConfig.Def_Stone_VipHole + maxVipHoleCnt): 
-            curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
+            curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0]
             if curGemID == 0:                             
                 continue
-            pickoffHoleList.append([equipPlace, holeIndex])
+            pickoffHoleList.append([equipPackIndex, holeIndex])
             
     # 脱装备的外层刷属性, 这里不刷
     __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, "EquipChange", False)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
index 9db6d33..1cc2a94 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/QuestRunner.py
@@ -2534,7 +2534,7 @@
     totalPlusLV = 0
     for packType, equipPartIndexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
         for i in equipPartIndexList:
-            partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, i)
+            partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, i)
             totalPlusLV += partStarLV
     
     
@@ -2545,7 +2545,7 @@
 #    equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, [])
 #    for i in equipPartIndexList:
 #        #统计全身强化等级
-#        partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, i)
+#        partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, i)
 #        if partStarLV >= star:
 #            partCnt +=1 
     #GameWorld.Log('star=%s,conditionValue=%s,partCnt=%s,%s'%(star,conditionValue,partCnt,QuestRunnerValue.GetEval(conditionType, partCnt, conditionValue)))
@@ -2900,15 +2900,15 @@
         if equipIndex == 0:
             GameWorld.ErrLog("任务赠送装备位置错误 equipIndex=-1")
             return
-        
-        if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipIndex):
+        equipPackIndex = ItemCommon.GetEquipPackIndex(curSingleItem)
+        if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipPackIndex):
             #物品已存在直接给背包
             if not itemControl.PutInItem(IPY_GameWorld.rptItem, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
                 GameWorld.Log('###任务 = %s给予物品异常, %s, %s' % (missionID, itemID, itemCount), curPlayer.GetPlayerID())
                 curSingleItem.Clear()
                 return
         else:
-            ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem, equipIndex, 0)
+            ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem,equipPackIndex, 0)
     
     #ObtainRes01    <n>获得</n><Info Type="Item" Name="Name" ID="{%S1%}"/><n>×</n><n>{%S2%}!</n>
     elif not itemControl.PutInItem(packIndex, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
@@ -6116,11 +6116,11 @@
 # @return 返回值无意义
 # @remarks <Set_Equiptotalstar key="" />
 def DoType_Set_Equiptotalstar(curPlayer, curMission, curActionNode):
-    key = curActionNode.GetAttribute("key")
-    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
-    if questID != 0:
-        curMission = curPlayer.FindMission(questID)
-    curMission.SetProperty(key, ChEquip.GetTotalEquipStars(curPlayer))
+#    key = curActionNode.GetAttribute("key")
+#    questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
+#    if questID != 0:
+#        curMission = curPlayer.FindMission(questID)
+#    curMission.SetProperty(key, ChEquip.GetTotalEquipStars(curPlayer))
     return
 #---------------------------------------------------------------------
 ##DoType_调度器
@@ -7267,7 +7267,7 @@
 # @return None <Equiptotalstar value="cnt"/>
 def ConditionType_Equiptotalstar(curPlayer, curMission, curActionNode):
     totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
-    return ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
+    return #ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
 
 ##激活法宝,确认与成就逻辑后使用
 # @param None
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStarLV.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
similarity index 87%
rename from ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStarLV.py
rename to ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
index 246ef8f..bde1d0f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStarLV.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartPlusLV.py
@@ -4,14 +4,14 @@
 #
 #-------------------------------------------------------------------------------
 #
-##@package GM.Commands.SetEquipPartStarLV
+##@package GM.Commands.SetEquipPartPlusLV
 #
-# @todo:设置装备部位公共星级
+# @todo:设置装备部位公共强化等级
 # @author hxp
 # @date 2015-12-15
 # @version 1.0
 #
-# 详细描述: 设置装备部位公共星级
+# 详细描述: 设置装备部位公共强化等级
 #
 #---------------------------------------------------------------------
 """Version = 2015-12-15 17:00"""
@@ -41,11 +41,11 @@
             for i in indexList:
                 curPack = curPlayer.GetItemManager().GetPack(pType)
                 curEquip = curPack.GetAt(i)
-                ChEquip.SetEquipPartStarLV(curPlayer, pType, i, curEquip, setStarLV)
+                ChEquip.SetEquipPartPlusLV(curPlayer, pType, i, curEquip, setStarLV)
                 ChEquip.SetEquipPartProficiency(curPlayer, pType, i, 0)
             Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, pType)
-        ChEquip.NotifyEquipPartStarLV(curPlayer)
-        GameWorld.DebugAnswer(curPlayer, "设置所有部位星级为: %s" % setStarLV)
+        ChEquip.NotifyEquipPartPlusLV(curPlayer)
+        GameWorld.DebugAnswer(curPlayer, "设置所有部位强化等级为: %s" % setStarLV)
         return
     
     if len(cmdList) != 3:
@@ -64,9 +64,9 @@
     curPack = curPlayer.GetItemManager().GetPack(packType)
     curEquip = curPack.GetAt(index)
 
-    maxStarLV = ItemCommon.GetItemMaxStarLV(curEquip)
+    maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
     starLV = min(starLV, maxStarLV)
-    ChEquip.SetEquipPartStarLV(curPlayer, packType, index, curEquip, starLV)
+    ChEquip.SetEquipPartPlusLV(curPlayer, packType, index, curEquip, starLV)
     ChEquip.SetEquipPartProficiency(curPlayer, packType, index, 0)
     Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, packType)
     return
@@ -100,7 +100,7 @@
 #===============================================================================
     
     #===========================================================================
-    # GameWorld.DebugAnswer(curPlayer, "SetEquipPartStarLV 参数[packType, index, starLV]")
+    # GameWorld.DebugAnswer(curPlayer, "SetEquipPartPlusLV 参数[packType, index, starLV]")
     # for pType, indexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
     #    GameWorld.DebugAnswer(curPlayer, "    packType=%s(%s)时" % (pType, packTypeStrDict.get(pType, "")))
     #    indexStr = "index="
@@ -108,7 +108,7 @@
     #        indexStr += "%s(%s)," % (i, indexStrDict.get("%s_%s" % (pType, i), ""))
     #    GameWorld.DebugAnswer(curPlayer, "        %s" % indexStr)
     #    
-    # GameWorld.DebugAnswer(curPlayer, "    SetEquipPartStarLV 星级 可重置所有部位为对应的星级")
+    # GameWorld.DebugAnswer(curPlayer, "    SetEquipPartPlusLV 强化等级 可重置所有部位为对应的强化等级")
     # GameWorld.DebugAnswer(curPlayer, "------------------------------")
     #===========================================================================
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStar.py
new file mode 100644
index 0000000..b44de0e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStar.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.SetEquipPartStar
+#
+# @todo:设置装备部位公共星数
+# @author xdh
+# @date 2019-3-2
+# @version 1.0
+#
+# 详细描述: 设置装备部位公共星数
+#
+#---------------------------------------------------------------------
+import IpyGameDataPY
+"""Version = 2019-3-2 17:00"""
+#---------------------------------------------------------------------
+import PlayerControl
+import ChEquip
+import GameWorld
+
+#---------------------------------------------------------------------
+#逻辑实现
+## GM命令执行入口
+#  @param curPlayer 当前玩家
+#  @param cmdList 参数列表 [classlv, equipPlace, starLV]
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, cmdList):
+    if not cmdList:
+        __GMHelpAnswer(curPlayer)
+        return
+    
+    if len(cmdList) != 3:
+        return
+    classlv, equipPlace, starLV = cmdList
+    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
+    if not ipyData:
+        __GMHelpAnswer(curPlayer)
+        return
+    equipPackIndex = ipyData.GetGridIndex()
+    ChEquip.SetEquipPartStar(curPlayer, equipPackIndex, starLV)
+    ChEquip.NotifyEquipPartStar(curPlayer, equipPackIndex)
+    ChEquip.RefreshPlayerEquipAttribute(curPlayer, classlv)
+    playControl = PlayerControl.PlayerControl(curPlayer)
+    playControl.RefreshPlayerAttrState()
+    return
+
+
+def __GMHelpAnswer(curPlayer, errorMsg="参数列表 [classlv, equipPlace, starLV]"):
+    if errorMsg:
+        GameWorld.DebugAnswer(curPlayer, "%s" % errorMsg)
+    
+    
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index fb00bb8..dcbe4b3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1372,6 +1372,25 @@
                         ("list", "LVRange", 0),
                         ("DWORD", "GoodsID", 0),
                         ),
+
+                "EquipPlaceIndexMap":(
+                        ("DWORD", "GridIndex", 0),
+                        ("DWORD", "ClassLV", 1),
+                        ("DWORD", "EquipPlace", 1),
+                        ),
+
+                "EquipStarUp":(
+                        ("BYTE", "ClassLV", 1),
+                        ("BYTE", "EquipPlace", 1),
+                        ("BYTE", "Star", 1),
+                        ("list", "CostEquipPlace", 0),
+                        ("list", "CostEquipColor", 0),
+                        ("BYTE", "CostEquipCnt", 0),
+                        ("BYTE", "SuitTotalRate", 0),
+                        ("dict", "CostItemDict", 0),
+                        ("dict", "StarAttrInfo", 0),
+                        ("dict", "BaseAttrInfo", 0),
+                        ),
                 }
 
 
@@ -4190,6 +4209,46 @@
         
     def GetLVRange(self): return self.LVRange # 等级范围
     def GetGoodsID(self): return self.GoodsID # 商城表ID
+
+# 装备位背包索引映射表
+class IPY_EquipPlaceIndexMap():
+    
+    def __init__(self):
+        self.GridIndex = 0
+        self.ClassLV = 0
+        self.EquipPlace = 0
+        return
+        
+    def GetGridIndex(self): return self.GridIndex # 背包格子索引
+    def GetClassLV(self): return self.ClassLV # 阶级(物品表LV字段)
+    def GetEquipPlace(self): return self.EquipPlace # 装备位(物品表EquipPlace字段)
+
+# 装备升星表
+class IPY_EquipStarUp():
+    
+    def __init__(self):
+        self.ClassLV = 0
+        self.EquipPlace = 0
+        self.Star = 0
+        self.CostEquipPlace = []
+        self.CostEquipColor = []
+        self.CostEquipCnt = 0
+        self.SuitTotalRate = 0
+        self.CostItemDict = {}
+        self.StarAttrInfo = {}
+        self.BaseAttrInfo = {}
+        return
+        
+    def GetClassLV(self): return self.ClassLV # 阶级
+    def GetEquipPlace(self): return self.EquipPlace # 装备位
+    def GetStar(self): return self.Star # 星数
+    def GetCostEquipPlace(self): return self.CostEquipPlace # 可用装备部位
+    def GetCostEquipColor(self): return self.CostEquipColor # 可用装备品质
+    def GetCostEquipCnt(self): return self.CostEquipCnt # 装备数量
+    def GetSuitTotalRate(self): return self.SuitTotalRate # 全套装加成概率(非套50%)
+    def GetCostItemDict(self): return self.CostItemDict # 特殊材料
+    def GetStarAttrInfo(self): return self.StarAttrInfo # 星级属性
+    def GetBaseAttrInfo(self): return self.BaseAttrInfo # 基础属性增加
 
 
 def Log(msg, playerID=0, par=0):
@@ -4483,6 +4542,10 @@
         self.ipyLuckyTreasureTemplateLen = len(self.ipyLuckyTreasureTemplateCache)
         self.ipyMysteryShopCache = self.__LoadFileData("MysteryShop", IPY_MysteryShop)
         self.ipyMysteryShopLen = len(self.ipyMysteryShopCache)
+        self.ipyEquipPlaceIndexMapCache = self.__LoadFileData("EquipPlaceIndexMap", IPY_EquipPlaceIndexMap)
+        self.ipyEquipPlaceIndexMapLen = len(self.ipyEquipPlaceIndexMapCache)
+        self.ipyEquipStarUpCache = self.__LoadFileData("EquipStarUp", IPY_EquipStarUp)
+        self.ipyEquipStarUpLen = len(self.ipyEquipStarUpCache)
         Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
         Log("IPY_DataMgr InitOK!")
         return
@@ -4917,6 +4980,10 @@
     def GetLuckyTreasureTemplateByIndex(self, index): return self.ipyLuckyTreasureTemplateCache[index]
     def GetMysteryShopCount(self): return self.ipyMysteryShopLen
     def GetMysteryShopByIndex(self, index): return self.ipyMysteryShopCache[index]
+    def GetEquipPlaceIndexMapCount(self): return self.ipyEquipPlaceIndexMapLen
+    def GetEquipPlaceIndexMapByIndex(self, index): return self.ipyEquipPlaceIndexMapCache[index]
+    def GetEquipStarUpCount(self): return self.ipyEquipStarUpLen
+    def GetEquipStarUpByIndex(self, index): return self.ipyEquipStarUpCache[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 d0b6f3d..3fdec12 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -41,6 +41,7 @@
 import FormulaControl
 #---------------------------------------------------------------------
 
+
 ##检查玩家是否可以换装
 # @param curPlayer 玩家实例
 # @return 返回值, 是否通过检查
@@ -54,14 +55,17 @@
     
     return True
 
+
 ## 执行玩家换装逻辑
 #  @param curPlayer 当前玩家
 #  @param curItem 物品实例
-#  @param packEquipIndex 装备部位
+#  @param equipPackIndex 装备背包索引
 #  @param tick 当前时间
 #  @return 布尔值
 #  @remarks 执行玩家换装逻辑
-def DoPlayerEquipItem(curPlayer, curItem, packEquipIndex, tick): 
+def DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick): 
+    if equipPackIndex < 0:
+        return False
     playerItemControl = ItemControler.PlayerItemControler(curPlayer)
     
     #---验证是否可以换这件装备---
@@ -76,11 +80,15 @@
     changeItemEquipPlace = curItem.GetEquipPlace()
     if changeItemEquipPlace not in ShareDefine.RoleEquipType:
         return False
-        
+    
+    if ItemCommon.GetEquipPackIndex(curItem) != equipPackIndex:
+        #检查装备位置和填表是否一致
+        return False
+    
     #--设置穿上物品星级--
     #===========================================================================
     # if changeItemEquipPlace in ChConfig.Type_Equip_CanTake:
-    #    equipPartStar = GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)
+    #    equipPartStar = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)
     #    if equipPartStar != curItem.GetItemStarLV():
     #        curItem.SetItemStarLV(equipPartStar)
     #===========================================================================
@@ -89,33 +97,34 @@
     #---开始换装逻辑---
     
     #记录换装物品信息
+    itemClassLV = ItemCommon.GetItemClassLV(curItem)
     changeItemID = curItem.GetItemTypeID()
-    changeItemStarLV = 0#curItem.GetItemStarLV()
-    changeItemStoneCnt = 0#curItem.GetUseStoneCount()
-    changeItemHoleCnt = 0#curItem.GetCanPlaceStoneCount()
+    changeItemStarLV = 0  #curItem.GetItemStarLV()
+    changeItemStoneCnt = 0  #curItem.GetUseStoneCount()
+    changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()
     changeItemUseData = curItem.GetUserData()
     itemQuality = curItem.GetItemQuality()
     endureReduceType = curItem.GetEndureReduceType()
     #changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse)
     
     #执行换装动作
-    equipPlace = playerItemControl.EquipItem(curItem, packEquipIndex)
+    equipPlace = playerItemControl.EquipItem(curItem, equipPackIndex)
     
     if equipPlace == -1:
         return False
     
     equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    curEquip = equipPack.GetAt(equipPlace)
-    SetEquipItemSuiteLVInfo(curPlayer, packEquipIndex, curEquip)
+    curEquip = equipPack.GetAt(equipPackIndex)
+    #SetEquipItemSuiteLVInfo(curPlayer, packEquipIndex, curEquip)
     if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:
         curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))
     #---换装成功---
-    if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
+    if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer):
         #通知客户端交换物品
-        curPlayer.ChangeEquip(changeItemID, equipPlace, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
+        curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
         
     if not endureReduceType:
-        EventShell.EventRespons_EquipByPlace(curPlayer, equipPlace)
+        EventShell.EventRespons_EquipByPlace(curPlayer, itemClassLV, equipPlace)
     #记录橙装、红装
     #===========================================================================
     # if itemQuality in [ChConfig.Def_Quality_Orange, ChConfig.Def_Quality_Red]:
@@ -133,12 +142,13 @@
     if changeItemEquipPlace == ShareDefine.retWing:
         PlayerWing.CalcWingAttr(curPlayer)
     else:
-        RefreshPlayerEquipAttribute(curPlayer)
+        RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
     
     #刷新所有属性
     playControl = PlayerControl.PlayerControl(curPlayer)
     playControl.RefreshPlayerAttrState()
     return True
+
 
 def SetEquipItemSuiteLVInfo(curPlayer, equipIndex, curItem):
     # 设置部位套装信息
@@ -168,24 +178,21 @@
         for suiteLV in suiteLVList:
             curItem.AddUserAttr(ShareDefine.Def_IudetPartSuiteLV, suiteLV)
     return
+
     
 ## 刷新装备对人物属性的改变
 #  @param self 类实例
 #  @return 返回值无意义
 #  @remarks 刷新装备对人物属性的改变
-def RefreshPlayerEquipAttribute(curPlayer, isRefreshEquipBuff=True):
-    GameWorld.DebugLog("Start RefreshPlayerEquipAttribute!!!")
+def RefreshPlayerEquipAttribute(curPlayer, classlv=0):
+    GameWorld.DebugLog("Start RefreshPlayerEquipAttribute classlv=%s!!!" % classlv)
+    classlvList = range(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1) if classlv == 0 else [classlv]
+    for rclasslv in classlvList:
+        __CalcEquips_Effect(curPlayer, rclasslv)
 
-    __CalcEquips_Effect(curPlayer)
-    
-    #CalcAllEquipAllPlusLVAttr(curPlayer)
-    
-    CalcAllEquipStarsAttr(curPlayer)
-    
     #if isRefreshEquipBuff:
     #    __RefreshPlayerAllEquipBuff(curPlayer)
     return
-
 
 ## 刷新所有装备对人物属性的改变
 #  @param self 类实例
@@ -258,6 +265,7 @@
 #    return
 #===============================================================================
 
+
 #===============================================================================
 # #//07 03 人物装备物品#tagCEquipItem
 # //角色装备类型
@@ -274,6 +282,7 @@
     GameWorld.GetPsycoFunc(__Func_PlayerEquipItem)(index, tick)
     return
 
+
 ## 人物装备物品
 #  @param index 背包索引
 #  @param tick 当前时间
@@ -285,7 +294,7 @@
     #物品在物品背包的索引
     packItemIndex = sendPack.GetItemIndex()
     #角色装备部位
-    packEquipIndex = sendPack.GetRoleEquipType()
+    equipPackIndex = sendPack.GetRoleEquipType()
     
     #检查玩家状态是否可以换装
     if not CheckPlayerCanEquipItem(curPlayer):
@@ -303,14 +312,14 @@
     #---获取封包需要装备的物品---
     rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
     curItem = rolePack.GetAt(packItemIndex)
-    
     #---执行玩家换装逻辑---
-    if DoPlayerEquipItem(curPlayer, curItem, packEquipIndex, tick):
+    if DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):
         return
     
     #换装失败通知客户端信息
     curPlayer.Notify_ItemPutFail(IPY_GameWorld.rptItem, packItemIndex, IPY_GameWorld.rptEquip, 0)
     return
+
 
 #---------------------------------------------------------------------
 ## 一键换装(封包)
@@ -331,6 +340,7 @@
     GameWorld.GetPsycoFunc(__Func_PlayerUnEquip)(index, tick)
     return
 
+
 #---------------------------------------------------------------------    
 ## 玩家卸下装备(封包参数)
 #  @param index 玩家索引
@@ -344,7 +354,7 @@
     if not CheckPlayerCanEquipItem(curPlayer):
         return
     
-    equipIndex = sendPack.GetEquipIndex()
+    equipPackIndex = sendPack.GetEquipIndex()
 
     #如果卸下的是马匹,需要判定如果马匹装备背包有物品,不让放下
     #===========================================================================
@@ -357,7 +367,7 @@
     #===========================================================================
     
     playerItemControl = ItemControler.PlayerItemControler(curPlayer)
-    result = playerItemControl.UnEquipItem(equipIndex, sendPack.GetPackIndex())
+    result = playerItemControl.UnEquipItem(equipPackIndex, sendPack.GetPackIndex())
     
     if not result:
         #卸下装备失败
@@ -368,11 +378,11 @@
     
     ##特殊装备 , 不需要冲刷属性
     if equipPlace in ChConfig.EquipItemNoRefreshState:
-        curPlayer.Sync_UnEquipItem(equipID, equipPlace)
+        curPlayer.Sync_UnEquipItem(equipID, equipPackIndex)
         return
     
     #先刷装备BUFF 再计算属性
-    if equipIndex == ShareDefine.retWing:
+    if equipPlace == ShareDefine.retWing:
         PlayerWing.CalcWingAttr(curPlayer)
     else:
         RefreshPlayerEquipAttribute(curPlayer)
@@ -382,7 +392,7 @@
     playControl.RefreshPlayerAttrState()
     
     if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
-        curPlayer.Sync_UnEquipItem(equipID, equipPlace)
+        curPlayer.Sync_UnEquipItem(equipID, equipPackIndex)
     return
 
 
@@ -403,7 +413,6 @@
                                         IPY_GameWorld.oalUseItem
                                         ):
         return
-    
     
     #检查使用物品的玩家属性
     if not ChItem.CheckUseItemSelf_Player(curPlayer):
@@ -433,38 +442,38 @@
 
 
 ## 计算装备对基本属性的改变 
+#  @param classlv
 #  @return None
-def __CalcEquips_Effect(curPlayer):
-    baseEquipAttrDict = {}
-    baseEquipAttr_Weapon = [{} for _ in range(4)] # 武器基础, 物品表装备基础效果属性
-    baseEquipAttr_Armor = [{} for _ in range(4)] # 防具基础, 物品表装备基础效果属性
-    baseEquipAttr_Relics = [{} for _ in range(4)] # 圣器基础, 物品表装备基础效果属性
+def __CalcEquips_Effect(curPlayer, classlv):
+#    baseEquipAttrDict = {}
+#    baseEquipAttr_Weapon = [{} for _ in range(4)]  # 武器基础, 物品表装备基础效果属性
+#    baseEquipAttr_Armor = [{} for _ in range(4)]  # 防具基础, 物品表装备基础效果属性
+#    baseEquipAttr_Relics = [{} for _ in range(4)]  # 圣器基础, 物品表装备基础效果属性
     
-    allAttrListEquip = [{} for _ in range(4)] # 装备其他
-    allAttrListPlusBase = [{} for _ in range(4)] # 基础强化属性
-    allAttrListStone = [{} for _ in range(4)] # 宝石属性
-    allAttrListSuit = [{} for _ in range(4)] # 套装属性
-    allAttrListWash = [{} for _ in range(4)] # 洗练属性
-    allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
+    
+    allAttrListStar = [{} for _ in range(4)]  # 星数属性
+    #allAttrListEquip = [{} for _ in range(4)]  # 装备其他
+    #allAttrListPlusBase = [{} for _ in range(4)]  # 基础强化属性
+    allAttrListStone = [{} for _ in range(4)]  # 宝石属性
+    #allAttrListSuit = [{} for _ in range(4)]  # 套装属性
+    #allAttrListWash = [{} for _ in range(4)]  # 洗练属性
+    #allAttrListOutOfPrintEquip = [{} for _ in range(4)]  # 绝版装备属性 需在等级变化独立计算
     
     packType = IPY_GameWorld.rptEquip
     playerEquip = curPlayer.GetItemManager().GetPack(packType)
     equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
-    maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2) #最大套装类型
-    equipPlaceList = [] # 有穿戴装备的装备位列表
-    suitCntDict = {} #套装数量字典
-    legendAttrDict = {} #所有传奇属性
-    equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
+    #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)  #最大套装类型
+    #equipPlaceList = []  # 有穿戴装备的装备位列表
+    #suitCntDict = {}  #套装数量字典
+    #legendAttrDict = {}  #所有传奇属性
+    equipScoreTotal = 0  #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
     
     #玩家当前可装备的装备类型
-    for equipIndex in xrange(playerEquip.GetCount()):
-        if equipIndex not in ShareDefine.RoleEquipType :
+    for equipPlace in equipPartStarIndexList:
+        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
+        if not ipyData:
             continue
-        
-        # 翅膀属性在翅膀功能单独刷新
-        if equipIndex in ChConfig.EquipItemNoRefreshState or equipIndex == ShareDefine.retWing:
-            continue
-        
+        equipIndex = ipyData.GetGridIndex()
         curEquip = playerEquip.GetAt(equipIndex)
         if curEquip.IsEmpty():
             continue
@@ -473,78 +482,76 @@
             # 过期
             continue
         
-        equipPlaceList.append(equipIndex)
+        #equipPlaceList.append(equipIndex)
         equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
         
         #基础属性效果
-        for i in range(0, curEquip.GetEffectCount()):
+        for i in xrange(curEquip.GetEffectCount()):
             curEffect = curEquip.GetEffectByIndex(i)
             if not curEffect:
                 break
-            
             effectID = curEffect.GetEffectID()
             if effectID == 0:
                 #最后一个
                 break
-            
             effectValue = curEffect.GetEffectValue(0)
             if not effectValue:
                 continue
+#            if equipIndex in ChConfig.BaseEquipPlace_Weapon:
+#                PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Weapon)
+#            elif equipIndex in ChConfig.BaseEquipPlace_Armor:
+#                PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Armor)
+#            elif equipIndex in ChConfig.BaseEquipPlace_Relics:
+#                PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Relics)
+#            #其他非基础部位的
+#            else:
+#                PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
+#            baseEquipAttrDict[effectID] = baseEquipAttrDict.get(effectID, 0) + effectValue
             
-            #添加物品效果的属性值
-#            if equipIndex == ShareDefine.retWing:
-#                PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListWing)
-            if equipIndex in ChConfig.BaseEquipPlace_Weapon:
-                PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Weapon)
-            elif equipIndex in ChConfig.BaseEquipPlace_Armor:
-                PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Armor)
-            elif equipIndex in ChConfig.BaseEquipPlace_Relics:
-                PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Relics)
-            #其他非基础部位的
-            else:
-                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
+#        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) #生效的星数
+        CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar)
         #计算装备宝石加成
         CalcEquipStone_Effect(curPlayer, equipIndex, allAttrListStone)
         
         #物品强化属性,佩饰强化不同要区分
-        if equipIndex in equipPartStarIndexList:
-            equipPartStarLV = GetEquipPartStarLVByRank(curPlayer, packType, equipIndex, curEquip)
-            CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartStarLV)
+#        if equipIndex in equipPartStarIndexList:
+#            equipPartStarLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
+#            CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartStarLV)
         
         #传奇属性
-        CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict)            
+        #CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict)
         #绝世属性
-        CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
+        #CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
         #洗练属性
-        Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, allAttrListWash)
+        #Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, allAttrListWash)
     
     #洗练套装属性
-    Operate_EquipWash.CalcAttr_EquipWashSpec(curPlayer, equipPlaceList, allAttrListWash)
+    #Operate_EquipWash.CalcAttr_EquipWashSpec(curPlayer, equipPlaceList, allAttrListWash)
     #套装属性
-    CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
+    #CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
     #GameWorld.DebugLog("所有传奇属性: %s" % legendAttrDict)
     #保存计算值
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseWeapon, baseEquipAttr_Weapon)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseArmor, baseEquipAttr_Armor)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseRelics, baseEquipAttr_Relics)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allAttrListEquip)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PlusBase, allAttrListPlusBase)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStone)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Suit, allAttrListSuit)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allAttrListWash)
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
+    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStone)
+    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStar)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseWeapon, baseEquipAttr_Weapon)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseArmor, baseEquipAttr_Armor)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseRelics, baseEquipAttr_Relics)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allAttrListEquip)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PlusBase, allAttrListPlusBase)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Suit, allAttrListSuit)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allAttrListWash)
+#    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
     
     #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
     equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
@@ -574,6 +581,7 @@
         #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value
         
     return
+
 
 # 装备绝版属性,随等级变化需在升级再处理
 def CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip):
@@ -605,7 +613,7 @@
 ## 计算装备对基本属性的改变 
 #  @return None
 def CalcEquips_OutOfPrint(curPlayer):
-    allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
+    allAttrListOutOfPrintEquip = [{} for _ in range(4)]  # 绝版装备属性 需在等级变化独立计算
     
     packType = IPY_GameWorld.rptEquip
     playerEquip = curPlayer.GetItemManager().GetPack(packType)
@@ -630,10 +638,10 @@
         #绝世属性
         CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
 
-
     #保存计算值
     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
     return
+
 
 ## 计算装备强化后的属性
 #  @param curPlayer 当前玩家
@@ -649,7 +657,7 @@
     ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", plusType, equipPartStarLV)
     if not ipyData:
         return
-    attrTypeList, attrValueList =  ipyData.GetAttrType(), ipyData.GetAttrValue()
+    attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
     for i, attrID in enumerate(attrTypeList):
         PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
     return
@@ -664,7 +672,7 @@
     notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify)
     isAll, addAttrList = ReadChConfig.GetEvalChConfig('EquipQualityAddAttr')
     for confInfo in addAttrList:
-        confQuality = confInfo[1] # 配置品质标识 1-卓越,2-套装
+        confQuality = confInfo[1]  # 配置品质标识 1-卓越,2-套装
         cnt = 0 
         if confQuality == 1:
             cnt = qualityEquipCnt
@@ -672,7 +680,7 @@
             cnt = suiteEquipCnt
         
         confCnt = confInfo[0]
-        if cnt >= confCnt: # 如果件数满足
+        if cnt >= confCnt:  # 如果件数满足
             EquipAddBuff(curPlayer, confInfo[2])
             
             if confQuality == 2 and confCnt > notifySuiteCnt and notifyType == \
@@ -687,11 +695,12 @@
             
     lastSuiteCntRecord = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyRecordSuiteCnt) 
     if notifySuiteCnt > 0 and notifySuiteCnt > lastSuiteCntRecord:
-        PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_917284", [curPlayer.GetPlayerName(), 
+        PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_917284", [curPlayer.GetPlayerName(),
                                                                  notifySuiteCnt])
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyRecordSuiteCnt, suiteCntRecord)
     #GameWorld.DebugLog("套装件数  上次记录=%s,更新记录=%s" % (lastSuiteCntRecord, suiteCntRecord))
     return
+
 
 ## 添加装备全身强化等级对应属性
 #  @param curPlayer 当前玩家
@@ -717,44 +726,27 @@
     
     return attrDict
 
-## 添加装备全身星数对应属性
-def CalcAllEquipStarsAttr(curPlayer):
-    allAttrList = [{} for i in range(4)]
-    totalStars = GetTotalEquipStars(curPlayer)
-    activeStars = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipActiveStars)
-    totalStars = min(totalStars, activeStars)
-    if totalStars:
-        ipyData = IpyGameDataPY.InterpolationSearch("RoleEquipStars", "StarsNeed", totalStars)
-        if ipyData:
-            attrTypeList = ipyData.GetAttrType()
-            attrValueList = ipyData.GetAttrValue()
-            
-            for i, attrID in enumerate(attrTypeList):
-                PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
-    #GameWorld.DebugLog("装备全身星数属性: totalStars=%s,allAttrList=%s" % (totalStars, allAttrList), curPlayer.GetPlayerID())
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipAllStars, allAttrList)
-    return
 
 ## 装备套装属性计算
 #  @param curPlayer 当前玩家
 #  @return None
 def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListEquip):
-    Def_EquipSuitMaxCount = 3 #套装最大阶段
+    Def_EquipSuitMaxCount = 3  #套装最大阶段
     myjob = curPlayer.GetJob()
     name = curPlayer.GetName()
     
     for suiteKey, cnt in suitCntDict.items():
-        groupType,suiteType,suiteLV = suiteKey.split('_')
+        groupType, suiteType, suiteLV = suiteKey.split('_')
         suiteLV = int(suiteLV)
-        job = 0 if groupType == ChConfig.EquipGroupType_Relics else myjob #仙器组合默认职业0
+        job = 0 if groupType == ChConfig.EquipGroupType_Relics else myjob  #仙器组合默认职业0
         ipyData = IpyGameDataPY.GetIpyGameData('EquipSuitAttr', int(groupType), int(suiteType), int(suiteLV), job)
         if not ipyData:
             continue
         
-        for i in range(1, Def_EquipSuitMaxCount+1):
-            countKeyName = 'GetCount%d'%i
-            attrTypeKeyName = 'GetAttrType%d'%i
-            attrValueKeyName = 'GetAttrValue%d'%i
+        for i in range(1, Def_EquipSuitMaxCount + 1):
+            countKeyName = 'GetCount%d' % i
+            attrTypeKeyName = 'GetAttrType%d' % i
+            attrValueKeyName = 'GetAttrValue%d' % i
             needCnt = getattr(ipyData, countKeyName)()
             if cnt >= needCnt:
                 attrTypeList = getattr(ipyData, attrTypeKeyName)()
@@ -764,11 +756,11 @@
                     PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListEquip)
                     
         #套装激活提示(只提示1次)
-        paramList= [name, cnt, suiteLV, groupType, suiteType]
+        paramList = [name, cnt, suiteLV, groupType, suiteType]
         notifyRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteNotify % (groupType, suiteType, cnt))
         if not notifyRecord & pow(2, suiteLV):
             if groupType == ChConfig.EquipGroupType_Armor:
-                if cnt >=5:
+                if cnt >= 5:
                     PlayerControl.WorldNotify(0, 'EquipSuit5', paramList)
                     notifyRecord |= pow(2, suiteLV)
             else:
@@ -778,12 +770,14 @@
     
     return
 
+
 ##全身橙色装备数量触发相关(包含橙色品质以上的装备数量)
 def OnOrangeQualityCntChange(curPlayer, orangeQualityCnt):
     notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify)
     if notifyType == ChConfig.Def_AttrActivatyNotify_Equip:
         EventShell.EventRespons_OrangeQualityCnt(curPlayer, orangeQualityCnt)
     return
+
 
 ## 1算装备触发的技能 (全身) 
 #  @param curPlayer 当前玩家
@@ -794,6 +788,7 @@
     SkillShell.RefreshSkillBuffByEquip(curPlayer, curEquip)
     return
 
+
 ## 计算装备镶嵌宝石附加效果->基本属性 (宝石) 
 #  @param curPlayer 当前玩家
 #  @param curEquip 当前装备
@@ -802,7 +797,7 @@
 def CalcEquipStone_Effect(curPlayer, equipIndex, allAttrList):
     gameData = GameWorld.GetGameData()
 
-    effIndexList = [1, 2, 3, 4] # 第一个效果值是类型等级效果值,非属性效果值
+    effIndexList = [1, 2, 3, 4]  # 第一个效果值是类型等级效果值,非属性效果值
     gemLVList = []
     for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex():
         
@@ -823,6 +818,19 @@
         gemLVList.append(gemLV)
     return gemLVList
 
+def CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar):
+    ## 计算装备星数属性
+    ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classlv, equipPlace, equipPartStar)
+    if not ipyData:
+        return
+    starAttrDict = ipyData.GetStarAttrInfo()
+    for attrID, attrValue in starAttrDict.items():
+        PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
+    baseAttrDict = ipyData.GetBaseAttrInfo()
+    for attrID, attrValue in baseAttrDict.items():
+        PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
+    return
+
 #---------------------------------------------------------------------
 ## 装备添加Buff 
 #  @param curPlayer 当前玩家
@@ -837,19 +845,20 @@
     if value > 0:
         curBuff.SetValue(value)
     return
+
+
 #---------------------------------------------------------------------
 #===============================================================================
 # #//03 2F 请求装备显隐#tagRequestEquipShowHide
 # //装备显示开关
-# int GetEquipShowSwitch();
+# int GetEquipShowSwitch(); 第几套*10+是否有套装
 #===============================================================================
-##请求装备显隐.
+##请求装备显隐. (设置显示哪套装备外观)
 # @param index 玩家索引
 # @param tick 时间戳
 # @return 返回值无意义
 # @remarks 客户端封包响应 //03 2F 请求装备显隐#tagRequestEquipShowHide
 def RequestEquipShowHide(index, tick):
-    
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     
     #---检查刷新间隔--
@@ -861,14 +870,43 @@
         return
     
     sendPack = IPY_GameWorld.IPY_CRequestEquipShowHide()
-    #此功能无需验证
-    curPlayer.SetEquipShowSwitch(sendPack.GetEquipShowSwitch())
+    updEquipShowSwitch = sendPack.GetEquipShowSwitch()
+    oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
+    if updEquipShowSwitch == oldEquipShowSwitch:
+        return
+    
+    #通知外观装备
+    updFaceEquipIndex = 0
+    equipIndexList = []
+    for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:
+        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', 1, 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):
+            continue
+        changeItemID = curEquip.GetItemTypeID()
+        changeItemStarLV = 0  #curItem.GetItemStarLV()
+        changeItemStoneCnt = 0  #curItem.GetUseStoneCount()
+        changeItemHoleCnt = 0  #curItem.GetCanPlaceStoneCount()
+        changeItemUseData = curEquip.GetUserData()
+        curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
+    
+    curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
     curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide, tick)
     return
+
 
 ## 获取公共部位强化熟练度
 def GetEquipPartProficiency(curPlayer, packType, index):
     return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index))
+
 
 ## 设置公共部位强化熟练度
 def SetEquipPartProficiency(curPlayer, packType, index, value):
@@ -876,22 +914,22 @@
 
 
 ## 获取公共部位强化星级, 因装备的最高可强化星级影响,用于算当前装备属性使用, 不影响全身星级
-def GetEquipPartStarLVByRank(curPlayer, packType, index, curEquip):
-    maxStarLV = ItemCommon.GetItemMaxStarLV(curEquip)
-    return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStarLV % (packType, index)), maxStarLV)
+def GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip):
+    maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
+    return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)), maxStarLV)
 
 
 ## 获取公共部位强化星级
-def GetEquipPartStarLV(curPlayer, packType, index):
-    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStarLV % (packType, index))
+def GetEquipPartPlusLV(curPlayer, packType, index):
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index))
 
 
 ## 设置公共部位强化星级
-def SetEquipPartStarLV(curPlayer, packType, index, curEquip, starLV):
-    if GetEquipPartStarLV(curPlayer, packType, index) == starLV:
+def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, starLV):
+    if GetEquipPartPlusLV(curPlayer, packType, index) == starLV:
         return
     
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStarLV % (packType, index), starLV)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusLV % (packType, index), starLV)
     #===========================================================================
     # if curEquip and not curEquip.IsEmpty():
     #    curEquip.SetItemStarLV(starLV)
@@ -899,8 +937,9 @@
 
     return
 
-## 通知公共部位强化星级
-def NotifyEquipPartStarLV(curPlayer, packType=None, index=None):
+
+## 通知公共部位强化等级
+def NotifyEquipPartPlusLV(curPlayer, packType=None, index=None):
     ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarLVInfo()
     ePartStarLVPack.Clear()
     ePartStarLVPack.InfoList = []
@@ -919,7 +958,7 @@
             ePartStarLV.Clear()
             ePartStarLV.PackType = pType
             ePartStarLV.EquipIndex = i
-            ePartStarLV.EquipPartStarLV = GetEquipPartStarLV(curPlayer, pType, i)
+            ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, pType, i)
             ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, pType, i)
             ePartStarLVPack.InfoList.append(ePartStarLV)
             
@@ -939,20 +978,10 @@
             if not curEquip  or curEquip.IsEmpty():
                 continue
             
-        partStarLV = GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, i)
+        partStarLV = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, i)
         totalPlusLV += partStarLV
     return totalPlusLV
 
-## 全身装备星数
-def GetTotalEquipStars(curPlayer):
-    totalEquipStars = 0
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    for i in ChConfig.BaseEquipPlaceList:
-        curEquip = equipPack.GetAt(i)
-        if not curEquip or curEquip.IsEmpty():
-            continue
-        totalEquipStars += curEquip.GetItemQuality()
-    return totalEquipStars
 
 # 获取装备的强化类型
 def GetEquipPlusType(curEquip):
@@ -964,6 +993,7 @@
     
     return plusTypeDict.get(equipPlace, -1)
 
+
 def SetEquipPartSuiteLV(curPlayer, index, suiteType, suiteLV):
     #设置公共部位套装等级
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType), suiteLV)
@@ -971,9 +1001,11 @@
     SetEquipItemSuiteLVInfo(curPlayer, index, equipPack.GetAt(index))
     return
 
+
 def GetEquipPartSuiteLV(curPlayer, index, suiteType):
     #获取公共部位套装等级
     return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType))
+
 
 def GetEquipPartSuiteGroupType(curPlayer, equipIndex):
     #获取公共部位套装组合类型
@@ -984,6 +1016,7 @@
             findGroupType = int(groupType)
             break
     return findGroupType
+
 
 #  获取满套装化的最低阶数,如5件套,4件5级,1件3级,则返回3
 def GetEquipSuitsLVByType(curPlayer, suitType, groupType):
@@ -1027,11 +1060,12 @@
     NetPackCommon.SendFakePack(curPlayer, ePartSuitePack)
     return
 
+
 def GetSuiteInfoByPlace(curPlayer, equipPlace, curEquip=None):
-    suiteInfo = {} #{套装类型:等级}
+    suiteInfo = {}  #{套装类型:等级}
     groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
     maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
-    for suiteType in range(1, maxSuiteType+1):
+    for suiteType in range(1, maxSuiteType + 1):
         suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
         if suiteLV:
             if curEquip:
@@ -1040,13 +1074,14 @@
             suiteInfo[suiteType] = suiteLV
     return suiteInfo
 
+
 def GetEquipPartSuiteLVList(curPlayer, equipPlace, curEquip=None):
     ## 部位套装等级列表
     groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
               
     suiteLVList = []
     maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
-    for suiteType in xrange(1, maxSuiteType+1):
+    for suiteType in xrange(1, maxSuiteType + 1):
         suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
         if curEquip and suiteLV:
             maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
@@ -1054,6 +1089,52 @@
         
         suiteLVList.append(suiteLV)
     return suiteLVList
+
+
+def SetEquipPartStar(curPlayer, equipPackindex, star):
+    #设置公共部位星数
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStar % equipPackindex, star)
+    return
+
+
+def GetEquipPartStar(curPlayer, equipPackindex):
+    #获取公共部位星数
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % equipPackindex)
+
+
+## 获取公共部位生效的星数, 因装备的最高可到星数影响,用于算当前装备属性使用, 不影响全身星级
+def GetEquipPartStarByRank(curPlayer, equipPackindex, curEquip):
+    maxStarLV = ItemCommon.GetItemMaxStar(curEquip)
+    return min(GetEquipPartStar(curPlayer, equipPackindex), maxStarLV)
+
+
+## 通知公共部位星数
+def NotifyEquipPartStar(curPlayer, index=None):
+    ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo()
+    ePartStarLVPack.Clear()
+    ePartStarLVPack.InfoList = []
+    syncIndexList = []
+    if index == None:
+        equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
+        for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, []):
+            for classlv in xrange(equipMaxClasslv):
+                ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
+                if not ipyData:
+                    continue 
+                syncIndexList.append(ipyData.GetGridIndex())
+    else:
+        syncIndexList = [index]
+    
+    for index in syncIndexList:
+        ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()
+        ePartStarLV.Clear()
+        ePartStarLV.EquipPackIndex = index
+        ePartStarLV.Star = GetEquipPartStar(curPlayer, index)
+        ePartStarLVPack.InfoList.append(ePartStarLV)
+            
+    ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
+    NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
+    return
 
 
 #// A5 03 全身属性激活 #tagCMActiveAllEquipAttr
@@ -1077,7 +1158,7 @@
         return
     curCnt = curPlayer.NomalDictGetProperty(key)
     if activeCnt <= curCnt:
-        GameWorld.Log('    全身属性激活 该数量已激活过! activeType=%s,activeCnt=%s,curCnt=%s'%(activeType, activeCnt, curCnt))
+        GameWorld.Log('    全身属性激活 该数量已激活过! activeType=%s,activeCnt=%s,curCnt=%s' % (activeType, activeCnt, curCnt))
         return
     
     PlayerControl.NomalDictSetProperty(curPlayer, key, activeCnt)
@@ -1093,12 +1174,13 @@
     playControl.RefreshPlayerAttrState()
     return
 
+
 def SyncAllEquipAttrActiveInfo(curPlayer, activeType=-1):
     ## 通知全身属性激活数量
     packData = ChPyNetSendPack.tagMCAllEquipAttrActiveInfo()
     packData.ActiveInfo = []
     for aType in [0, 1]:
-        if activeType !=-1 and activeType != aType:
+        if activeType != -1 and activeType != aType:
             continue
         if aType == 0:
             key = ChConfig.Def_PDict_EquipActiveStarLV
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
index 2f6a274..2967a4b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
@@ -190,6 +190,7 @@
 
 
 def CalcZhuXianAttr(curPlayer):
+    return
     ## 刷新诛仙属性
     playerID = curPlayer.GetPlayerID()
     PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 43935f9..c1b58b6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -820,14 +820,14 @@
     
     ## 交换装备
     #  @param curItem 当前物品
-    #  @param equipPlace 装备位置
+    #  @param equipPackIndex 装备背包格子
     #  @return True or False
     #  @remarks 函数详细说明.   
-    def SwitchEquip(self, curItem, equipPlace):
+    def SwitchEquip(self, curItem, equipPackIndex):
         curPlayer = self.__Player
         equipPack = self.__PlayerEquip
         
-        curEquip = equipPack.GetAt(equipPlace)
+        curEquip = equipPack.GetAt(equipPackIndex)
         
         #GameWorld.Log("装备位置%d"%equipPlace)
         if curEquip.IsEmpty():
@@ -866,21 +866,17 @@
 
     ## 装备当前物品
     #  @param curItem 当前物品
-    #  @param packEquipIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
+    #  @param equipPackIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
     #  @return 替换的位置 -1表示替换失败
-    def EquipItem(self, curItem, packEquipIndex):
+    def EquipItem(self, curItem, equipPackIndex):
         if not self.PlayerCanEquipItem(curItem, True):
             return -1
         
         equipPlace = curItem.GetEquipPlace()
-        if packEquipIndex != equipPlace:
-            #仙器有两个位置,其他装备检查装备位置和填表是否一致
-            if equipPlace not in ChConfig.Def_FairyCanList and packEquipIndex not in ChConfig.Def_FairyCanList:
-                return -1
-
+        
         curPlayer = self.__Player
         equipPack = self.__PlayerEquip
-        equipItem = equipPack.GetAt(packEquipIndex)
+        equipItem = equipPack.GetAt(equipPackIndex)
         desItemID, desUserData = [0, ''] if equipItem.IsEmpty() else [equipItem.GetItemTypeID(), equipItem.GetUserData()]
         srcItemID, srcUserData = curItem.GetItemTypeID(), curItem.GetUserData()
         # 装备绑定处理 在 DoLogic_ItemBindType函数有处理,此处注释掉
@@ -889,20 +885,20 @@
         
         #--其他装备物品---
         #itemColor = curItem.GetItemColor()
-        result = self.SwitchEquip(curItem, packEquipIndex)
+        result = self.SwitchEquip(curItem, equipPackIndex)
         if result:
             #穿戴某阶某品质的装备成就
             PlayerSuccess.DoEquipSuccessLogic(curPlayer)
             #换装宝石处理
-            Operate_EquipStone.DoMoveEquipStone(curPlayer, packEquipIndex)
+            Operate_EquipStone.DoMoveEquipStone(curPlayer, equipPackIndex)
             #套装降级处理
-            Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, packEquipIndex)
+            #Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, packEquipIndex)
             EventShell.EventRespons_EquipStar(curPlayer)
             dataDict = {'dotype':'EquipItem', 'desItemID':desItemID, 'desUserData':desUserData,'srcItemID':srcItemID,'srcUserData':srcUserData}
             DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
             
         self.RefreshStartEquipCount()
-        return packEquipIndex if result else -1
+        return equipPlace if result else -1
     
 
     ## 替换可以叠加物品逻辑 
@@ -961,6 +957,7 @@
         
         equipID = curEquip.GetItemTypeID()
         userData = curEquip.GetUserData()
+        equipPlace = curEquip.GetEquipPlace()
         #该物品锁定不执行==============================================
         if curEquip.GetIsLocked():
             PlayerControl.NotifyCode(curPlayer, "RescannotEquip")
@@ -996,7 +993,7 @@
             return
         self.RefreshStartEquipCount()
         #套装降级处理
-        Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, equipIndex)
+        #Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, equipIndex)
         EventShell.EventRespons_EquipStar(curPlayer)
         dataDict = {'dotype':'UnEquipItem', 'equipID':equipID, 'userData':userData}
         DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
@@ -1011,7 +1008,7 @@
 #        
 #        destItemPlace.PutIn(curEquip)
 #===============================================================================
-        return equipID, equipIndex
+        return equipID, equipPlace
     
     #是否能放入物品(第几个物品栏, 物品序号, 放入的物品, 放入物品ID,  物品是否绑定)
 #===============================================================================
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 31ad3a8..fc54d99 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
@@ -823,7 +823,7 @@
     notifyList[5] =  place
     suiteInfo = PlayerViewCacheTube.__GetEquipPartSuiteInfo(curPlayer)
     notifyList[6] = "" if not suiteInfo else json.dumps(suiteInfo, ensure_ascii=False)
-    notifyList[7] = ChEquip.GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, place)
+    notifyList[7] = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, place)
     
     # 单部位洗练信息
     washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place) + 1
@@ -1919,14 +1919,14 @@
     ItemControler.Sync_VPackItem_Clear(curPlayer, packIndex, placeList)
     return
 
-## 获取物品最高强化星级
+## 获取物品最高强化等级
 #  @param itemType: 物品类型
 #  @return 最大星级,0为不可强化
-def GetItemMaxStarLV(curItem):
+def GetItemMaxPlusLV(curItem):
     equipPlace = curItem.GetEquipPlace()
     plusMaxTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)
     if not plusMaxTypeDict:
-        GameWorld.ErrLog("GetItemMaxStarLV没有强化类型映射表")
+        GameWorld.ErrLog("GetItemMaxPlusLV没有强化类型映射表")
         return 0
     
     if equipPlace not in plusMaxTypeDict:
@@ -1946,6 +1946,17 @@
     
     return ipyData.GetLevelMax()
 
+## 获取物品最高星数
+#  @param itemType: 物品类型
+#  @return 最大星级,0为不可强化
+def GetItemMaxStar(curItem):
+    itemColor = curItem.GetItemColor()
+    maxStarDict = IpyGameDataPY.GetFuncEvalCfg('EquipPartStar', 1)
+    if str(itemColor) not in maxStarDict:
+        return 0
+    classLV = GetItemClassLV(curItem)
+    return maxStarDict[str(itemColor)].get(str(classLV), 0)
+
 ## 获取物品阶级
 def GetItemClassLV(curItem):
     return curItem.GetLV()
@@ -1962,6 +1973,13 @@
 def SetEquipGearScore(curItem, value):
     return curItem.SetGearScore(value)
 
+def GetEquipPackIndex(curItem):
+    ## 根据物品获取对应的可装备背包位置
+    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', GetItemClassLV(curItem), curItem.GetEquipPlace())
+    if not ipyData:
+        return -1
+    return ipyData.GetGridIndex()
+
 ## 每日可使用次数
 def GetCanUseCountDaily(curItem): return curItem.GetMaxAddSkillCnt()
 ## 每周可使用次数, 预留,暂不实现
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 d7b8b48..9313db0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -539,7 +539,8 @@
     SyncPKModel(curPlayer)
         
     #通用强化星级信息
-    ChEquip.NotifyEquipPartStarLV(curPlayer)
+    ChEquip.NotifyEquipPartPlusLV(curPlayer)
+    ChEquip.NotifyEquipPartStar(curPlayer)
     Operate_EquipWash.OnEquipWashLogin(curPlayer)
     #通知套装信息
     ChEquip.NotifyEquipPartSuiteLV(curPlayer)
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 91184a0..0d2f74e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -5756,7 +5756,6 @@
 # 通知GsmeServer; 
 # SendGameServerRefreshState(int inputType, int inputValue)
 
-# SetExAttr15 ~ 18 对应神兵类型等级,场景特效用
 
 # 禁言 通知gameServer
 def SetGMForbidenTalk(curPlayer, value):
@@ -5828,6 +5827,12 @@
         GameWorld.DebugLog("更新玩家所属服务器组ID: serverGroupID=%s" % serverGroupID)
     return
 
+##影响外观的3部位索引记录 123456789  123:武器格子索引 456:副手  789:衣服
+def GetFaceEquipIndexList(curPlayer): 
+    attr15 = curPlayer.GetExAttr15()
+    return [attr15%1000, attr15/1000%1000, attr15/1000000]
+def SetFaceEquipIndex(curPlayer, value): return curPlayer.SetExAttr15(value, True, True)
+
 ##获得玩家威望值
 def GetPrestige(curPlayer): return 0
 def SetPrestige(curPlayer, value): return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py
index 25a6bb7..05c26ff 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py
@@ -53,41 +53,12 @@
         return
     Sync_GodWeaponLVInfo(curPlayer)
     
-    #老号相关神兵场景特效等级同步支持
-    if curPlayer.GetExAttr15() == 0:
-        playerID = curPlayer.GetPlayerID()
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount()-1).GetType()
-        for setWeaponType in xrange(1, maxType + 1):
-            setLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % setWeaponType)
-            if not setLV:
-                continue
-            SetGodWeaponLV(curPlayer, setWeaponType, setLV)
-            
-            giveSkillList = []
-            for attrLV in xrange(1, setLV + 1):
-                godWeaponData = IpyGameDataPY.GetIpyGameData('GodWeapon', setWeaponType, attrLV)
-                if godWeaponData:
-                    giveSkillID = GodWeaponLVUP(curPlayer, godWeaponData, attrLV)
-                    if giveSkillID:
-                        giveSkillList.append(giveSkillID)
-            GameWorld.Log("老号设置神兵场景等级: setWeaponType=%s,setLV=%s, giveSkillList=%s" % (setWeaponType, setLV, giveSkillList), playerID)
-            
     return
 
 def SetGodWeaponLV(curPlayer, weaponType, lv):
     ## 设置神兵等级,同步设置场景神兵等级
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodWeaponLV % weaponType, lv)
-    sceneEffectsDict = {Def_GodWeaponType_HP:[lambda curObj, value:curObj.SetExAttr15(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_1],
-                        Def_GodWeaponType_Atk:[lambda curObj, value:curObj.SetExAttr16(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_2],
-                        Def_GodWeaponType_SuperHit:[lambda curObj, value:curObj.SetExAttr17(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_3],
-                        Def_GodWeaponType_Def:[lambda curObj, value:curObj.SetExAttr18(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_4],
-                        }
-    if weaponType in sceneEffectsDict:
-        setFunc, notifyType = sceneEffectsDict[weaponType]
-        setFunc(curPlayer, lv)
-        curPlayer.SendPropertyRefresh(notifyType, lv, False)
-        
+            
     totalLV = GetGodWeaponTotalLV(curPlayer)
     # 开服活动数据
     OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_GodWeaponLV, totalLV)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
index 2ac8929..1010489 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
@@ -520,7 +520,7 @@
                 return
             
     tryItem = ItemControler.GetOutPutItemObj(tryItemID, 1, 1)
-    if ChEquip.DoPlayerEquipItem(curPlayer, tryItem, equipPlace, tick):
+    if ChEquip.DoPlayerEquipItem(curPlayer, tryItem, ItemCommon.GetEquipPackIndex(tryItem), tick):
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 2)
     else:
         curItem.clear()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 38dc780..cccdde8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -329,7 +329,7 @@
         
     #---执行玩家换装逻辑---
     tick = GameWorld.GetGameWorld().GetTick()
-    if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ShareDefine.retHorse, tick):
+    if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
         if isRideHorse:
             PlayerRideHorseUp(curPlayer, False)
             
@@ -377,7 +377,7 @@
         PlayerRideHorseDown(curPlayer, False)
     
     #---执行玩家换装逻辑---
-    if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ShareDefine.retHorse, tick):
+    if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
         if isRideHorse:
             PlayerRideHorseUp(curPlayer, False)
         return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
index 0c326b8..bcb1cf6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
@@ -468,9 +468,9 @@
                     break
             if cnt:
                 break
-    elif curType == 3:
-        #全身装备X星
-        cnt = ChEquip.GetTotalEquipStars(curPlayer)
+#    elif curType == 3:
+#        #全身装备X星
+#        cnt = ChEquip.GetTotalEquipStars(curPlayer)
         
     elif curType == 4:
         #X阶普通、强化套装
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index a531409..8debe53 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -1132,7 +1132,7 @@
         return True
     equipID = result[0]
     equipPlace = result[1]
-    if equipPlace == ShareDefine.retGuard:
+    if equipPlace in [ShareDefine.retGuard1, ShareDefine.retGuard2]:
         PlayerControl.NotifyCode(curPlayer, 'Guardian_Timeout', [equipID, spaceIndex])
     elif equipPlace == ShareDefine.retWing:
         PlayerControl.NotifyCode(curPlayer, 'WingTiyan_Timeout')
@@ -1146,8 +1146,8 @@
             PlayerGoldGift.FirstGoldTryItemOutTime(curPlayer)
             
     # 广播卸装
-    if equipIndex in ChConfig.Def_SyncEquipStateByIndex:
-        curPlayer.Sync_UnEquipItem(equipID, equipPlace)
+    if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
+        curPlayer.Sync_UnEquipItem(equipID, equipIndex)
     return True
 #---------------------------------------------------------------------
 ##全局定时器调用, 刷新玩家状态
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
index ed6e2f4..12d9664 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
@@ -321,7 +321,7 @@
             ResetSuccessByType(curPlayer, succType)
             for pType, indexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
                 for i in indexList:
-                    equipPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, pType, i)
+                    equipPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, pType, i)
                     for pluslv in xrange(1, equipPartStarLV+1):
                         DoAddSuccessProgress(curPlayer, succType, 1, [pluslv])
                     
@@ -563,7 +563,7 @@
         
         itemQuality = curEquip.GetItemQuality()
         classLV = ItemCommon.GetItemClassLV(curEquip)
-        if equipIndex not in [ShareDefine.retWing,ShareDefine.retGuard,ShareDefine.retHorse]:
+        if equipIndex not in [ShareDefine.retWing,ShareDefine.retGuard1,ShareDefine.retGuard2,ShareDefine.retHorse]:
             DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipColorItem, 1, [classLV, itemColor])
         if equipIndex in ChConfig.BaseEquipPlace_Weapon:
             DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipWeapon, 1, [itemColor, itemQuality, classLV])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py
index 32d3417..6b14a22 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py
@@ -104,57 +104,58 @@
 
 # 切换守护
 def ChangeGuard(curPlayer, tick):
-    # 检查过背包中无守护则不再执行
-    if curPlayer.GetDictByKey("AutoCGuardID") == 1:
-        return
-    
-    curGuardID = 0  # 装备的守护ID
-    itemIDList = IpyGameDataPY.GetFuncEvalCfg('AutoUseGuardian', 1)
-    guardItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip).GetAt(ShareDefine.retGuard)
-    # 1。 守护存在,判断是否最优先守护
-    if ItemCommon.CheckItemCanUse(guardItem) and ItemCommon.CheckItemCanUseByExpireTime(guardItem):
-        curGuardID = guardItem.GetItemTypeID()
-        if curGuardID == itemIDList[0]:
-            # 最高优先级
-            return
-        if curPlayer.GetDictByKey("AutoCGuardID") == 2:
-            # 当前背包最高
-            return
-        
-
-    findItemList = []
-    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    
-    # 找到背包中优先级最高的守护物品
-    for i in range(0, curPack.GetCount()):
-        item = curPack.GetAt(i)
-        
-        if not ItemCommon.CheckItemCanUse(item):
-            continue
-        
-        if item.GetItemTypeID() not in itemIDList:
-            continue
-    
-        if not ItemCommon.CheckItemCanUseByExpireTime(item):
-            # 背包有不过期的物品
-            continue
-        
-        findItemList.append(item)
-    
-    if not findItemList:
-        curPlayer.SetDict("AutoCGuardID", 1)    # 设置无可替换的标志
-        return
-        
-    findItemList.sort(cmp=SortGuard)
-    if curGuardID in itemIDList and itemIDList.index(curGuardID) <= itemIDList.index(findItemList[0].GetItemTypeID()):
-        # 当前装备最高,减少遍历
-        curPlayer.SetDict("AutoCGuardID", 2)
-        return
-    
-
-    #---执行玩家换装逻辑---
-    ChEquip.DoPlayerEquipItem(curPlayer, findItemList[0], ShareDefine.retGuard, tick)
-    curPlayer.SetDict("AutoCGuardID", 0)
+    return #新版本不需要切换
+#    # 检查过背包中无守护则不再执行
+#    if curPlayer.GetDictByKey("AutoCGuardID") == 1:
+#        return
+#    
+#    curGuardID = 0  # 装备的守护ID
+#    itemIDList = IpyGameDataPY.GetFuncEvalCfg('AutoUseGuardian', 1)
+#    guardItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip).GetAt(ShareDefine.retGuard1)
+#    # 1。 守护存在,判断是否最优先守护
+#    if ItemCommon.CheckItemCanUse(guardItem) and ItemCommon.CheckItemCanUseByExpireTime(guardItem):
+#        curGuardID = guardItem.GetItemTypeID()
+#        if curGuardID == itemIDList[0]:
+#            # 最高优先级
+#            return
+#        if curPlayer.GetDictByKey("AutoCGuardID") == 2:
+#            # 当前背包最高
+#            return
+#        
+#
+#    findItemList = []
+#    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+#    
+#    # 找到背包中优先级最高的守护物品
+#    for i in range(0, curPack.GetCount()):
+#        item = curPack.GetAt(i)
+#        
+#        if not ItemCommon.CheckItemCanUse(item):
+#            continue
+#        
+#        if item.GetItemTypeID() not in itemIDList:
+#            continue
+#    
+#        if not ItemCommon.CheckItemCanUseByExpireTime(item):
+#            # 背包有不过期的物品
+#            continue
+#        
+#        findItemList.append(item)
+#    
+#    if not findItemList:
+#        curPlayer.SetDict("AutoCGuardID", 1)    # 设置无可替换的标志
+#        return
+#        
+#    findItemList.sort(cmp=SortGuard)
+#    if curGuardID in itemIDList and itemIDList.index(curGuardID) <= itemIDList.index(findItemList[0].GetItemTypeID()):
+#        # 当前装备最高,减少遍历
+#        curPlayer.SetDict("AutoCGuardID", 2)
+#        return
+#    
+#
+#    #---执行玩家换装逻辑---
+#    ChEquip.DoPlayerEquipItem(curPlayer, findItemList[0], ItemCommon.GetEquipPackIndex(findItemList[0]), tick)
+#    curPlayer.SetDict("AutoCGuardID", 0)
     return
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index bb88c0b..f0761e5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -142,7 +142,7 @@
     #翅膀信息在翅膀装备位对应装备信息
     
     #部位强化数据
-    curPlayerPlusDict["EquipPartStarLV"] = __GetEquipPartStarLVInfo(curPlayer)
+    curPlayerPlusDict["EquipPartStarLV"] = __GetEquipPartPlusLVInfo(curPlayer)
     
     #部位宝石数据
     curPlayerPlusDict["EquipPartStone"] = __GetEquipPartStoneInfo(curPlayer)
@@ -182,13 +182,13 @@
             dataDict.pop(key)
     return dataDict
 
-## 公共部位强化星级信息{部位索引:星级, ...}
-def __GetEquipPartStarLVInfo(curPlayer):
+## 公共部位强化星级信息{部位索引:强化等级, ...}
+def __GetEquipPartPlusLVInfo(curPlayer):
     pType = IPY_GameWorld.rptEquip # 暂时只取装备背包,之后有扩展再修改
     indexList = ChConfig.Pack_EquipPart_CanPlusStar[pType]
     starLVInfoDict = {}
     for i in indexList:
-        starLV = ChEquip.GetEquipPartStarLV(curPlayer, pType, i)
+        starLV = ChEquip.GetEquipPartPlusLV(curPlayer, pType, i)
         if starLV:
             starLVInfoDict[i] = starLV
     return starLVInfoDict
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 5e81214..c84ca76 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -306,7 +306,7 @@
     Def_mitProduceResult,     # 生产采集结果回应
     Def_mitPetEquipMerge,     # 宠物装备合成回应
     Def_mitEquipInherit,      # 装备继承
-    Def_mitEquipPlus,         # 装备加强
+    Def_mitEquipStarUp,       # 装备升星
     Def_mitEquipMayaPlus,     # 装备玛雅加强
     Def_mitEquipAddAttr,      # 装备追加
     Def_mitEquipSlotting,     # 装备打孔
@@ -658,8 +658,7 @@
 # 3 紫色
 # 4 橙色
 # 5 红色
-# 6 粉色
-#===============================================================================
+# 6 粉色#===============================================================================
 Def_Item_Color_White = 1     #白
 Def_Item_Color_Blue = 2      #蓝
 Def_Item_Color_Purple = 3    #紫
@@ -1732,32 +1731,34 @@
 # 手游不使用C++定义 enum            RoleEquipType
 # 装备位定义
 RoleEquipType = (
-    retWeapon,      #1 主手
-    retWeapon2,     #2 副手
-    retHat,         #3 帽子
-    retClothes,     #4 衣服
-    retBelt,        #5 腰带
-    retTrousers,    #6 裤子
-    retShoes,       #7 鞋子
-    retNeck,        #8 项链
-    retFairyCan,       #9 仙器
-    retFairyCan2,       #10 仙器
-    retWing,        #11 翅膀
-    retGuard,    #12 守护
-    retBaldric1,     #13 佩饰
-    retBaldric2,     #14 佩饰
-    retBaldric3,     #15 佩饰
-    retBaldric4,     #16 佩饰
-    retBaldric5,     #17 佩饰
-    retBaldric6,     #18 佩饰
-    retHorse,        #19 坐骑
-    retWeaponSkin,   #20 时装武器
-    retClothesSkin,  #21 时装衣服
-    retWeapon2Skin,  #22 时装副手
+    retWeapon,          #1 主手
+    retWeapon2,         #2 副手
+    retHat,             #3 帽子
+    retClothes,         #4 衣服
+    retBelt,            #5 腰带
+    retTrousers,        #6 裤子
+    retShoes,           #7 鞋子
+    retGlove,           #8 手套
+    retNeck,            #9 项链
+    retFairyCan,        #10 仙器1
+    retFairyCan2,       #11 仙器2
+    retJade,            #12 玉佩
+    retWing,            #13 翅膀
+    retGuard1,          #14 守护1
+    retGuard2,          #15 守护2
+    retPeerlessWeapon,  #16 绝世武器
+    retPeerlessWeapon2, #17 绝世副手
+    retXXX18,           #18 暂无
+    retHorse,           #19 坐骑
+    retWeaponSkin,      #20 时装武器
+    retClothesSkin,     #21 时装衣服
+    retWeapon2Skin,     #22 时装副手
     retMax,
 ) = range(1, 24)
 
 
+
+
 # 神兽装备位定义
 DogzEquipPlace = (
     dogzetHorn,     # 神兽兽角

--
Gitblit v1.8.0