From 82ca2dd1656364f93523af726ac81b7823cbc3d2 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 06 十月 2019 21:20:08 +0800
Subject: [PATCH] 8298 【恺英】【开发】基础套装极/仙/神进阶(神、仙、极传奇属性支持)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py              |   34 ++---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py        |  144 +++++++++++++++++++++---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py   |   13 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py               |    6 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py             |   70 +++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py |   22 +--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py               |   21 +++
 PySysDB/PySysDBPY.h                                                                              |   26 ++++
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                    |    6 +
 9 files changed, 282 insertions(+), 60 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 6a28fd8..d4e9873 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1776,6 +1776,32 @@
 	DWORD		_EquipPlace;	//装备位(物品表EquipPlace字段)
 };
 
+//装备神装表
+
+struct tagEquipShenAttr
+{
+	DWORD		_EquipItemID;	//装备ID
+	list		ShenAttrIDList;	//神品传奇属性ID列表
+	list		ShenAttrValueList;	//神品传奇属性值列表
+	list		XianAttrIDList;	//仙品传奇属性ID列表
+	list		XianAttrValueList;	//仙品传奇属性值列表
+	list		JiAttrIDList;	//极品传奇属性ID列表
+	list		JiAttrValueList;	//极品传奇属性值列表
+	list		LegendAttrIDList;	//普通传奇属性ID列表
+	list		LegendAttrValueList;	//普通传奇属性值列表
+};
+
+//装备神装进阶表
+
+struct tagEquipShenEvolve
+{
+	DWORD		_EquipItemID;	//装备ID
+	DWORD		EvolveEquipID;		//可进阶目标装备ID
+	list		EvolveNeedItemIDInfo;	//进阶所需附加材料及个数
+	BYTE		EvolveNeedSuitCount;	//进阶所需本阶套装件数
+	BYTE		EvolveNeedEquipID;	//进阶所需固定装备ID
+};
+
 //装备升星表
 
 struct tagEquipStarUp
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 8e13cd9..0bc1f5c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1280,6 +1280,12 @@
 Def_IudetItemDecompound = 33  # 拆解返还物品列表 [装备ID,材料1ID,个数,是否绑定,材料2ID,个数,是否绑定,...]
 Def_IudetLiantaiItemID = 35  # 合成该莲台的所有莲台ID [itemID, itemID, ...]
 Def_IudetAddSkillID = 37  # 可添加的技能ID列表  [skillID, skillID, ...]
+Def_IudetLegendAttrIDShen = 51  # 物品传奇属性ID列表 - 神
+Def_IudetLegendAttrValueShen = 61  # 物品传奇属性值列表 - 神
+Def_IudetLegendAttrIDXian = 53  # 物品传奇属性ID列表 - 仙
+Def_IudetLegendAttrValueXian = 63  # 物品传奇属性值列表 - 仙
+Def_IudetLegendAttrIDJi = 55  # 物品传奇属性ID列表 - 极
+Def_IudetLegendAttrValueJi = 65  # 物品传奇属性值列表 - 极
 
 Def_IudetItemColor = 16  # 物品颜色,如果该值没有就取物品
 Def_IudetItemCount = 18  # 物品个数,支持20亿,目前仅特殊转化物品会用到
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py
index d7bf97d..8d7d709 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddLegendAttr.py
@@ -19,7 +19,6 @@
 import ItemCommon
 import ItemControler
 import IPY_GameWorld
-import ShareDefine
 
 #---------------------------------------------------------------------
 #逻辑实现
@@ -46,19 +45,16 @@
     if not legendAttrInfo:
         GameWorld.DebugAnswer(curPlayer, "获取该装备传奇属性失败或没有传奇属性!")
         return
-    attrIDList, attrValueList = legendAttrInfo
+    ItemControler.SetEquipLegendAttr(curItem, legendAttrInfo)
     
-    # 传奇属性
-    if attrIDList and attrValueList and len(attrIDList) == len(attrValueList):
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
-        attrDict = {}
-        for i, attrID in enumerate(attrIDList):
-            value = attrValueList[i]
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, attrID)
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, value)
-            attrDict[attrID] = value
-        GameWorld.DebugAnswer(curPlayer, "传奇属性:%s" % (attrDict))
+    if legendAttrInfo[2]:
+        GameWorld.DebugAnswer(curPlayer, "神传奇属性:%s %s" % (legendAttrInfo[2], legendAttrInfo[3]))
+    if legendAttrInfo[4]:
+        GameWorld.DebugAnswer(curPlayer, "仙传奇属性:%s %s" % (legendAttrInfo[4], legendAttrInfo[5]))
+    if legendAttrInfo[6]:
+        GameWorld.DebugAnswer(curPlayer, "极传奇属性:%s %s" % (legendAttrInfo[6], legendAttrInfo[7]))
+    if legendAttrInfo[0]:
+        GameWorld.DebugAnswer(curPlayer, "传奇属性:%s %s" % (legendAttrInfo[0], legendAttrInfo[1]))
         
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 4017062..e2eec17 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1378,6 +1378,26 @@
                         ("DWORD", "EquipPlace", 1),
                         ),
 
+                "EquipShenAttr":(
+                        ("DWORD", "EquipItemID", 1),
+                        ("list", "ShenAttrIDList", 0),
+                        ("list", "ShenAttrValueList", 0),
+                        ("list", "XianAttrIDList", 0),
+                        ("list", "XianAttrValueList", 0),
+                        ("list", "JiAttrIDList", 0),
+                        ("list", "JiAttrValueList", 0),
+                        ("list", "LegendAttrIDList", 0),
+                        ("list", "LegendAttrValueList", 0),
+                        ),
+
+                "EquipShenEvolve":(
+                        ("DWORD", "EquipItemID", 1),
+                        ("DWORD", "EvolveEquipID", 0),
+                        ("list", "EvolveNeedItemIDInfo", 0),
+                        ("BYTE", "EvolveNeedSuitCount", 0),
+                        ("BYTE", "EvolveNeedEquipID", 0),
+                        ),
+
                 "EquipStarUp":(
                         ("BYTE", "ClassLV", 1),
                         ("BYTE", "EquipPlace", 1),
@@ -4328,6 +4348,48 @@
     def GetClassLV(self): return self.ClassLV # 阶级(物品表LV字段)
     def GetEquipPlace(self): return self.EquipPlace # 装备位(物品表EquipPlace字段)
 
+# 装备神装表
+class IPY_EquipShenAttr():
+    
+    def __init__(self):
+        self.EquipItemID = 0
+        self.ShenAttrIDList = []
+        self.ShenAttrValueList = []
+        self.XianAttrIDList = []
+        self.XianAttrValueList = []
+        self.JiAttrIDList = []
+        self.JiAttrValueList = []
+        self.LegendAttrIDList = []
+        self.LegendAttrValueList = []
+        return
+        
+    def GetEquipItemID(self): return self.EquipItemID # 装备ID
+    def GetShenAttrIDList(self): return self.ShenAttrIDList # 神品传奇属性ID列表
+    def GetShenAttrValueList(self): return self.ShenAttrValueList # 神品传奇属性值列表
+    def GetXianAttrIDList(self): return self.XianAttrIDList # 仙品传奇属性ID列表
+    def GetXianAttrValueList(self): return self.XianAttrValueList # 仙品传奇属性值列表
+    def GetJiAttrIDList(self): return self.JiAttrIDList # 极品传奇属性ID列表
+    def GetJiAttrValueList(self): return self.JiAttrValueList # 极品传奇属性值列表
+    def GetLegendAttrIDList(self): return self.LegendAttrIDList # 普通传奇属性ID列表
+    def GetLegendAttrValueList(self): return self.LegendAttrValueList # 普通传奇属性值列表
+
+# 装备神装进阶表
+class IPY_EquipShenEvolve():
+    
+    def __init__(self):
+        self.EquipItemID = 0
+        self.EvolveEquipID = 0
+        self.EvolveNeedItemIDInfo = []
+        self.EvolveNeedSuitCount = 0
+        self.EvolveNeedEquipID = 0
+        return
+        
+    def GetEquipItemID(self): return self.EquipItemID # 装备ID
+    def GetEvolveEquipID(self): return self.EvolveEquipID # 可进阶目标装备ID
+    def GetEvolveNeedItemIDInfo(self): return self.EvolveNeedItemIDInfo # 进阶所需附加材料及个数
+    def GetEvolveNeedSuitCount(self): return self.EvolveNeedSuitCount # 进阶所需本阶套装件数
+    def GetEvolveNeedEquipID(self): return self.EvolveNeedEquipID # 进阶所需固定装备ID
+
 # 装备升星表
 class IPY_EquipStarUp():
     
@@ -4878,6 +4940,10 @@
         self.ipyMysteryShopLen = len(self.ipyMysteryShopCache)
         self.ipyEquipPlaceIndexMapCache = self.__LoadFileData("EquipPlaceIndexMap", IPY_EquipPlaceIndexMap)
         self.ipyEquipPlaceIndexMapLen = len(self.ipyEquipPlaceIndexMapCache)
+        self.ipyEquipShenAttrCache = self.__LoadFileData("EquipShenAttr", IPY_EquipShenAttr)
+        self.ipyEquipShenAttrLen = len(self.ipyEquipShenAttrCache)
+        self.ipyEquipShenEvolveCache = self.__LoadFileData("EquipShenEvolve", IPY_EquipShenEvolve)
+        self.ipyEquipShenEvolveLen = len(self.ipyEquipShenEvolveCache)
         self.ipyEquipStarUpCache = self.__LoadFileData("EquipStarUp", IPY_EquipStarUp)
         self.ipyEquipStarUpLen = len(self.ipyEquipStarUpCache)
         self.ipyEquipPlusEvolveCache = self.__LoadFileData("EquipPlusEvolve", IPY_EquipPlusEvolve)
@@ -5346,6 +5412,10 @@
     def GetMysteryShopByIndex(self, index): return self.ipyMysteryShopCache[index]
     def GetEquipPlaceIndexMapCount(self): return self.ipyEquipPlaceIndexMapLen
     def GetEquipPlaceIndexMapByIndex(self, index): return self.ipyEquipPlaceIndexMapCache[index]
+    def GetEquipShenAttrCount(self): return self.ipyEquipShenAttrLen
+    def GetEquipShenAttrByIndex(self, index): return self.ipyEquipShenAttrCache[index]
+    def GetEquipShenEvolveCount(self): return self.ipyEquipShenEvolveLen
+    def GetEquipShenEvolveByIndex(self, index): return self.ipyEquipShenEvolveCache[index]
     def GetEquipStarUpCount(self): return self.ipyEquipStarUpLen
     def GetEquipStarUpByIndex(self, index): return self.ipyEquipStarUpCache[index]
     def GetEquipPlusEvolveCount(self): return self.ipyEquipPlusEvolveLen
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 6909941..2d29c31 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -799,15 +799,12 @@
             suitCntDict[suiteID].append(equipPartStar)
             
         #传奇属性
-        legendAttrCount = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
-        legendAttrValueCount = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
-        if legendAttrCount and legendAttrCount == legendAttrValueCount:
-            for legendIndex in xrange(legendAttrCount):
-                legendAttrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, legendIndex)
-                legendAttrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, legendIndex)
-                PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
-                #GameWorld.DebugLog("    传奇属性: ID=%s +%s" % (legendAttrID, legendAttrValue))
-                __CalcFuncAddEquipAttrPer(equipPlace, legendAttrID, legendAttrValue, equip_addEquipBaseAttrPerList)
+        legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)
+        for i, legendAttrID in enumerate(legAttrIDList):
+            legendAttrValue = legAttrValueList[i]
+            PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
+            #GameWorld.DebugLog("    传奇属性: ID=%s +%s" % (legendAttrID, legendAttrValue))
+            __CalcFuncAddEquipAttrPer(equipPlace, legendAttrID, legendAttrValue, equip_addEquipBaseAttrPerList)
         
         #物品强化属性
         __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, allAttrListPlus, plus_addEquipBaseAttrPerList)
@@ -975,21 +972,16 @@
 def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}):
     ## 计算传奇属性
     
-    # 传奇属性ID列表
-    legendAttrIDList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i) \
-                        for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID))]
-    # 传奇属性值列表
-    legendAttrValueList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i) \
-                           for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue))]
-    if not legendAttrIDList or len(legendAttrIDList) != len(legendAttrValueList):
+    legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curEquip)
+    if not legAttrIDList:
         #GameWorld.DebugLog("没有传奇属性!")
         return
-    #GameWorld.DebugLog("传奇属性: place=%s,IDList=%s, v=%s" % (curEquip.GetEquipPlace(), legendAttrIDList, legendAttrValueList))
+    #GameWorld.DebugLog("传奇属性: place=%s,IDList=%s, v=%s" % (curEquip.GetEquipPlace(), legAttrIDList, legAttrValueList))
     
-    for i, attrID in enumerate(legendAttrIDList):
-        value = legendAttrValueList[i]
-        #GameWorld.DebugLog("加传奇属性: %s +%s" % (attrID, value))
-        PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListEquip)
+    for i, legendAttrID in enumerate(legAttrIDList):
+        legendAttrValue = legAttrValueList[i]
+        #GameWorld.DebugLog("加传奇属性: %s +%s" % (legendAttrID, legendAttrValue))
+        PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
         #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value
         
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index af85f57..6550cc9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -1932,6 +1932,27 @@
         for i in xrange(len(equipData.legendAttrIDList)):
             curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, equipData.legendAttrIDList[i])
             curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, equipData.legendAttrValueList[i])
+    # 传奇属性 - 神
+    if equipData.legendAttrIDListShen and equipData.legendAttrValueListShen:
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen)
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen)
+        for i in xrange(len(equipData.legendAttrIDListShen)):
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, equipData.legendAttrIDListShen[i])
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, equipData.legendAttrValueListShen[i])
+    # 传奇属性 - 仙
+    if equipData.legendAttrIDListXian and equipData.legendAttrValueListXian:
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian)
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian)
+        for i in xrange(len(equipData.legendAttrIDListXian)):
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, equipData.legendAttrIDListXian[i])
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, equipData.legendAttrValueListXian[i])
+    # 传奇属性 - 极
+    if equipData.legendAttrIDListJi and equipData.legendAttrValueListJi:
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi)
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi)
+        for i in xrange(len(equipData.legendAttrIDListJi)):
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, equipData.legendAttrIDListJi[i])
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, equipData.legendAttrValueListJi[i])
             
     ItemCommon.MakeEquipGS(curItem) 
     return
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 e7142e7..ad587df 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -1233,16 +1233,11 @@
         
         curPlayer = self.__Player
         srcScore = ItemCommon.GetEquipGearScore(curItem)
-        legendAttrIDList, legendAttrValueList = legendAttrInfo
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
-        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
-        for i in xrange(len(legendAttrIDList)):
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, legendAttrIDList[i])
-            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, legendAttrValueList[i])
+        SetEquipLegendAttr(curItem, legendAttrInfo)
         ItemCommon.MakeEquipGS(curItem)
         updScore = ItemCommon.GetEquipGearScore(curItem)
-        GameWorld.DebugLog("传奇属性异常,重新刷新一次属性: packType=%s,itemID=%s,legendAttrIDList=%s,legendAttrValueList=%s,srcScore=%s,updScore=%s" 
-                         % (packType, curItem.GetItemTypeID(), legendAttrIDList, legendAttrValueList, srcScore, updScore), curPlayer.GetPlayerID())
+        GameWorld.DebugLog("传奇属性异常,重新刷新一次属性: packType=%s,itemID=%s,srcScore=%s,updScore=%s" 
+                         % (packType, curItem.GetItemTypeID(), srcScore, updScore), curPlayer.GetPlayerID())
         return
     
     def CheckRolePackEquipAttr(self):
@@ -2192,19 +2187,29 @@
         legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
         legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
         if legendAttrIDCnt and legendAttrIDCnt == legendAttrValueCnt:
-            attrIDList, attrValueList = [], []
-            for legendIndex in xrange(legendAttrIDCnt):
-                attrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, legendIndex))
-                attrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, legendIndex))
-            #GameWorld.DebugLog("已经有传奇属性的拍品: %s, %s" % (attrIDList, attrValueList))
+            legendAttrInfo = GetEquipLegendAttrGroup(curItem)
+            #GameWorld.DebugLog("已经有传奇属性的拍品: %s" % str(legendAttrInfo))
         else:
             # 生成传奇属性
             legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer)
+            #GameWorld.DebugLog("重新生成传奇属性的拍品: %s" % str(legendAttrInfo))
             if not legendAttrInfo:
                 return
-            attrIDList, attrValueList = legendAttrInfo
-            #GameWorld.DebugLog("重新生成传奇属性的拍品: %s, %s" % (attrIDList, attrValueList))
-        updateDict = {ShareDefine.Def_IudetLegendAttrID:attrIDList, ShareDefine.Def_IudetLegendAttrValue:attrValueList}
+            
+        updateDict = {}
+        if legendAttrInfo[0]:
+            updateDict[ShareDefine.Def_IudetLegendAttrID] = legendAttrInfo[0]
+            updateDict[ShareDefine.Def_IudetLegendAttrValue] = legendAttrInfo[1]
+        if legendAttrInfo[2]:
+            updateDict[ShareDefine.Def_IudetLegendAttrIDShen] = legendAttrInfo[2]
+            updateDict[ShareDefine.Def_IudetLegendAttrValueShen] = legendAttrInfo[3]
+        if legendAttrInfo[4]:
+            updateDict[ShareDefine.Def_IudetLegendAttrIDXian] = legendAttrInfo[4]
+            updateDict[ShareDefine.Def_IudetLegendAttrValueXian] = legendAttrInfo[5]
+        if legendAttrInfo[6]:
+            updateDict[ShareDefine.Def_IudetLegendAttrIDJi] = legendAttrInfo[6]
+            updateDict[ShareDefine.Def_IudetLegendAttrValueJi] = legendAttrInfo[7]
+            
         delKeyList = [ShareDefine.Def_IudetAuctionItemCreateTime]
         ItemCommon.UpdateItemUserData(curItem, updateDict, delKeyList, isUpdateGS=True)
         
@@ -2321,6 +2326,12 @@
     if legendAttrInfo:
         tmpEquipData.legendAttrIDList = legendAttrInfo[0]
         tmpEquipData.legendAttrValueList = legendAttrInfo[1]
+        tmpEquipData.legendAttrIDListShen = legendAttrInfo[2]
+        tmpEquipData.legendAttrValueListShen = legendAttrInfo[3]
+        tmpEquipData.legendAttrIDListXian = legendAttrInfo[4]
+        tmpEquipData.legendAttrValueListXian = legendAttrInfo[5]
+        tmpEquipData.legendAttrIDListJi = legendAttrInfo[6]
+        tmpEquipData.legendAttrValueListJi = legendAttrInfo[7]
         
     # 其他装备属性
     ChItem.EquipAddAdditionEx(curItem, tmpEquipData)
@@ -2328,7 +2339,7 @@
 
 def GetAddEquipLegendAttr(curItem, curPlayer, isAllAttr=False):
     '''获取生成到装备上的传奇属性
-    @return: None 或者 [[传奇属性效果ID列表], [属性值列表]]
+    @return: None 或者  [传奇属性效果ID列表], [属性值列表], [神ID], [神值], [仙ID], [仙值], [极ID], [极值]
     '''
 #    if GetIsAuctionItem(curItem):
 #        #GameWorld.DebugLog("拍品无法生成传奇属性!")
@@ -2338,6 +2349,14 @@
     itemColor = curItem.GetItemColor()
     itemQuality = curItem.GetItemQuality()
     isSuit = 1 if curItem.GetSuiteID() else 0
+    
+    ipyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipShenAttr", itemID)
+    if ipyData:
+        return ipyData.GetLegendAttrIDList(), ipyData.GetLegendAttrValueList(), \
+                ipyData.GetShenAttrIDList(), ipyData.GetShenAttrValueList(), \
+                ipyData.GetXianAttrIDList(), ipyData.GetXianAttrValueList(), \
+                ipyData.GetJiAttrIDList(), ipyData.GetJiAttrValueList()
+                
     # 1. 定条数
     attrCountIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipLegendAttrCount", itemType, itemColor, isSuit, itemQuality)
     if not attrCountIpyData:
@@ -2424,8 +2443,91 @@
         curLegAttrValueList.append(attrValue)
         #GameWorld.DebugLog("    随机属性: attrID=%s,attrValue=%s,playerLV=%s,curLibNum=%s,valueList=%s" 
         #                   % (attrID, attrValue, playerLV, curLibNum, valueList), playerID)
-    return [curLegAttrIDList, curLegAttrValueList]
+    return curLegAttrIDList, curLegAttrValueList, [], [], [], [], [], []
 
+def GetEquipLegendAttrAll(curItem):
+    ## 获取装备传奇属性 - 所有分组合并返回
+    legendAttrInfo = GetEquipLegendAttrGroup(curItem)
+    legAttrIDList = legendAttrInfo[0] + legendAttrInfo[2] + legendAttrInfo[4] + legendAttrInfo[6]
+    legAttrValueList = legendAttrInfo[1] + legendAttrInfo[3] + legendAttrInfo[5] + legendAttrInfo[7]
+    return legAttrIDList, legAttrValueList
+
+def GetEquipLegendAttrGroup(curItem):
+    ## 获取装备传奇属性 - 按类型分组返回
+    
+    legAttrIDList, legAttrValueList = [], []
+    legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
+    legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
+    if legendAttrIDCnt == legendAttrValueCnt:
+        for i in xrange(legendAttrIDCnt):
+            legAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i))
+            legAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i))
+            
+    shenAttrIDList, shenAttrValueList = [], []
+    shenAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDShen)
+    shenAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueShen)
+    if shenAttrIDCnt == shenAttrValueCnt:
+        for i in xrange(shenAttrIDCnt):
+            shenAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDShen, i))
+            shenAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueShen, i))
+            
+    xianAttrIDList, xianAttrValueList = [], []
+    xianAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDXian)
+    xianAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueXian)
+    if xianAttrIDCnt == xianAttrValueCnt:
+        for i in xrange(xianAttrIDCnt):
+            xianAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDXian, i))
+            xianAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueXian, i))
+            
+    jiAttrIDList, jiAttrValueList = [], []
+    jiAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrIDJi)
+    jiAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValueJi)
+    if jiAttrIDCnt == jiAttrValueCnt:
+        for i in xrange(jiAttrIDCnt):
+            jiAttrIDList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrIDJi, i))
+            jiAttrValueList.append(curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValueJi, i))
+            
+    return legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList
+
+def SetEquipLegendAttr(curItem, legendAttrInfo):
+    ## 设置装备传奇属性
+    
+    legAttrIDList, legAttrValueList, shenAttrIDList, shenAttrValueList, \
+        xianAttrIDList, xianAttrValueList, jiAttrIDList, jiAttrValueList = legendAttrInfo
+                       
+    # 普通传奇属性
+    if legAttrIDList and legAttrValueList and len(legAttrIDList) == len(legAttrValueList):
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
+        for i in xrange(len(legAttrIDList)):
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, legAttrValueList[i])
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, legAttrValueList[i])
+    
+    # 神 传奇属性
+    if shenAttrIDList and shenAttrValueList and len(shenAttrIDList) == len(shenAttrValueList):
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen)
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen)
+        for i in xrange(len(shenAttrIDList)):
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, shenAttrValueList[i])
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, shenAttrValueList[i])
+    
+    # 仙 传奇属性
+    if xianAttrIDList and xianAttrValueList and len(xianAttrIDList) == len(xianAttrValueList):
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian)
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian)
+        for i in xrange(len(xianAttrIDList)):
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, xianAttrValueList[i])
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, xianAttrValueList[i])
+            
+    # 极 传奇属性
+    if jiAttrIDList and jiAttrValueList and len(jiAttrIDList) == len(jiAttrValueList):
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi)
+        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi)
+        for i in xrange(len(jiAttrIDList)):
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, jiAttrValueList[i])
+            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, jiAttrValueList[i])
+            
+    return
 
 ##创建物品所需的动态数据
 #
@@ -2446,6 +2548,12 @@
         self.source = ShareDefine.Item_Source_Unkown    #物品来源
         self.legendAttrIDList = [] # 传奇属性ID
         self.legendAttrValueList = [] # 传奇属性值
+        self.legendAttrIDListShen = [] # 传奇属性ID - 神
+        self.legendAttrValueListShen = [] # 传奇属性值 - 神
+        self.legendAttrIDListXian = [] # 传奇属性ID - 仙
+        self.legendAttrValueListXian = [] # 传奇属性值 - 仙
+        self.legendAttrIDListJi = [] # 传奇属性ID - 极
+        self.legendAttrValueListJi = [] # 传奇属性值 - 极
         return
     
 def ClearPack(curPlayer, packType):
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 e1f7239..a859d14 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
@@ -419,14 +419,11 @@
     isSuit = 1 if curItem.GetSuiteID() > 0 else 0
     gsParamIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipGSParam", classLV, color, isSuit, itemQuality)
     # 传奇属性
-    legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
-    legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
-    if legendAttrIDCnt and legendAttrIDCnt == legendAttrValueCnt:
-        for i in xrange(legendAttrIDCnt):
-            attrID = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i)
-            attrValue = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
-            attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
-            
+    legAttrIDList, legAttrValueList = ItemControler.GetEquipLegendAttrAll(curItem)
+    for i, legendAttrID in enumerate(legAttrIDList):
+        legendAttrValue = legAttrValueList[i]
+        attrDict[legendAttrID] = attrDict.get(legendAttrID, 0) + legendAttrValue
+        
     lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)
     if lingQiIpyData:
         gsValueEx += lingQiIpyData.GetLingQiAttrScore()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 8e13cd9..0bc1f5c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1280,6 +1280,12 @@
 Def_IudetItemDecompound = 33  # 拆解返还物品列表 [装备ID,材料1ID,个数,是否绑定,材料2ID,个数,是否绑定,...]
 Def_IudetLiantaiItemID = 35  # 合成该莲台的所有莲台ID [itemID, itemID, ...]
 Def_IudetAddSkillID = 37  # 可添加的技能ID列表  [skillID, skillID, ...]
+Def_IudetLegendAttrIDShen = 51  # 物品传奇属性ID列表 - 神
+Def_IudetLegendAttrValueShen = 61  # 物品传奇属性值列表 - 神
+Def_IudetLegendAttrIDXian = 53  # 物品传奇属性ID列表 - 仙
+Def_IudetLegendAttrValueXian = 63  # 物品传奇属性值列表 - 仙
+Def_IudetLegendAttrIDJi = 55  # 物品传奇属性ID列表 - 极
+Def_IudetLegendAttrValueJi = 65  # 物品传奇属性值列表 - 极
 
 Def_IudetItemColor = 16  # 物品颜色,如果该值没有就取物品
 Def_IudetItemCount = 18  # 物品个数,支持20亿,目前仅特殊转化物品会用到

--
Gitblit v1.8.0