From f27986d2eb32e3d2598d15b91c88479797ce5c72 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 13 三月 2019 17:48:37 +0800
Subject: [PATCH] 6328 【后端】优化代码eval -  二进制流 不能直接输出

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py |  268 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 196 insertions(+), 72 deletions(-)

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 a6b1bad..cb736bb 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
@@ -29,7 +29,6 @@
 import DataRecordPack
 import EventReport
 import ChItem
-import PlayerMergeEvent
 import IpyGameDataPY
 import Operate_EquipStone
 import PlayerViewCacheTube
@@ -335,12 +334,14 @@
     GameWorld.DebugLog("物品过期时间" + timeStr)
     return GameWorld.ChangeTimeStrToNum(timeStr)
 
-
-## 创建物品
-#  @param itemID 物品ID
-#  @return curSingleItem
-#  @remarks 函数详细说明.
-def CreateSingleItem(itemID, itemCount=1, isBind=0):
+def CreateSingleItem(itemID, itemCount=1, isAuctionItem=False, expireTime=0):
+    ''' 创建物品
+    @param isAuctionItem: 是否拍品,默认非拍品
+    @param expireTime: 有效时间,时间单位由时效类型决定
+    '''
+    if itemCount < 1:
+        GameWorld.ErrLog("创建物品个数不能少于1! itemID=%s,itemCount=%s" % (itemID, itemCount))
+        return
     curSingleItem = GameWorld.GetItemFactory().CreateItem(itemID)
     if not curSingleItem:
         return
@@ -373,11 +374,15 @@
             return
         curSingleItem.SetRemainHour(outTimeServerDay)
         
-    if isBind:
+    if isAuctionItem:
+        curSingleItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
         curSingleItem.SetIsBind(1)
         
     ItemControler.SetItemCount(curSingleItem, itemCount)
     
+    if expireTime > 0:
+        curSingleItem.SetUserAttr(ShareDefine.Def_IudetExpireTime, expireTime)
+        
     #这里返回的是SingleItem , 如果创建了,未使用,会找出C++内存泄露!!!
     return curSingleItem
 
@@ -392,7 +397,9 @@
     return
 
 def CalcEquipGS(curItem):
-    ##计算装备评分
+    '''计算装备评分
+        评分组成:装备基础 + 传奇属性 + 绝版属性
+    '''
     if not CheckNoteEquipGS(curItem):
         #GameWorld.DebugLog("不设置装备评分")
         return 0
@@ -408,25 +415,27 @@
             break
         attrDict[effectID] = attrDict.get(effectID, 0) + curEffect.GetEffectValue(0)
         
-    gsParamIpyData = None
+    classLV = GetItemClassLV(curItem)
+    color = curItem.GetItemColor()
+    itemQuality = curItem.GetItemQuality()
+    gsParamIpyData = IpyGameDataPY.GetIpyGameData("EquipGSParam", classLV, color, itemQuality)
     # 传奇属性
     legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
     legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
     if legendAttrIDCnt and legendAttrIDCnt == legendAttrValueCnt:
-        classLV = GetItemClassLV(curItem)
-        color = curItem.GetItemColor()
-        itemQuality = curItem.GetItemQuality()
-        gsParamIpyData = IpyGameDataPY.GetIpyGameData("EquipGSParam", classLV, color, itemQuality)
         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
             
-    MinAtk = attrDict.get(ShareDefine.Def_Effect_MinAtk, 0)
-    MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0)
+    Atk = attrDict.get(ShareDefine.Def_Effect_Atk, 0)
+    MinAtk = attrDict.get(ShareDefine.Def_Effect_MinAtk, 0) + Atk
+    MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0) + Atk
     MaxHP = attrDict.get(ShareDefine.Def_Effect_MaxHP, 0)
     Def = attrDict.get(ShareDefine.Def_Effect_Def, 0)
     ArmorDefPer = attrDict.get(ShareDefine.Def_Effect_ArmorDefAddPer, 0)
+    IceAtk = attrDict.get(ShareDefine.Def_Effect_IceAtk, 0)
+    IceDef = attrDict.get(ShareDefine.Def_Effect_IceDef, 0)
     
     AtkPer = attrDict.get(ShareDefine.Def_Effect_AddAtkByPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetAtkPerC())
     DamagePer = attrDict.get(ShareDefine.Def_Effect_DamagePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamagePerC())
@@ -449,6 +458,23 @@
     SuperHitReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitReduceC())
     SkillAtkRate = attrDict.get(ShareDefine.Def_Effect_SkillAtkRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateC())
     SpeedPer = attrDict.get(ShareDefine.Def_Effect_SpeedPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSpeedPerC())
+    SkillAtkRateReduce = attrDict.get(ShareDefine.Def_Effect_SkillAtkRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateReduceC())
+    Hit = attrDict.get(ShareDefine.Def_Effect_Hit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitC())
+    Miss = attrDict.get(ShareDefine.Def_Effect_Miss, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissC())
+    SkillAddPerA = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
+    SkillAddPerB = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
+    SkillAddPerC = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
+    SkillAddPerD = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
+    SkillAddPerE = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
+    SkillAddPerF = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
+    SkillAddPerG = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
+    SkillReducePerA = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
+    SkillReducePerB = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
+    SkillReducePerC = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
+    SkillReducePerD = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
+    SkillReducePerE = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
+    SkillReducePerF = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
+    SkillReducePerG = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
     
     # 攻速不默认乘,仅作为参数提供策划使用
     AtkSpeed = attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
@@ -466,8 +492,25 @@
     OnlyFinalHurt = attrDict.get(ShareDefine.Def_Effect_OnlyFinalHurt, 0)
     PVPAtkBackHP = attrDict.get(ShareDefine.Def_Effect_PVPAtkBackHP, 0)  
     
-    value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
+    if GetIsDogzEquip(curItem):
+        # 神兽装备用不同公式
+        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula3", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 3)))
+    elif GetIsZhuXianEquip(curItem):
+        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula4", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 4)))
+    else:
+        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
     return value
+
+def GetZhuXianEquipTotalGS(curPlayer):
+    ##诛仙装备总评分
+    equipScoreTotal = 0
+    zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
+    for equipIndex in xrange(zhuXianEquipPack.GetCount()):
+        curEquip = zhuXianEquipPack.GetAt(equipIndex)            
+        if curEquip.IsEmpty():
+            continue
+        equipScoreTotal += GetEquipGearScore(curEquip)
+    return equipScoreTotal
 
 #---------------------------------------------------------------------
 ## 通过效果ID,检查是否为指定物品 
@@ -781,9 +824,8 @@
     userData = curItem.GetUserData()
     notifyList[4] = userData if (userData and userData != "{}") else ""
     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[6] = "" 
+    notifyList[7] = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, place)
     
     # 单部位洗练信息
     washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place) + 1
@@ -870,24 +912,56 @@
 # 特殊判定根据时效时间判定物品是否可以使用
 # 过期物品不能使用或装备但是可以出售续费
 def CheckItemCanUseByExpireTime(curItem):
-    curItemCreateTime = curItem.GetCreateTime()
-    curItemExpireTime = curItem.GetExpireTime()
-    curItemPastTime = GameWorld.GetPastSeconds(curItemCreateTime)
+#    curItemCreateTime = curItem.GetCreateTime()
+#    curItemExpireTime = curItem.GetExpireTime()
+#    curItemPastTime = GameWorld.GetPastSeconds(curItemCreateTime)
+#    
+#    reduceType = curItem.GetEndureReduceType()
+#    if reduceType == ChConfig.Def_EquipReduceType_RTimeItem and \
+#    curItemPastTime >= curItemExpireTime:
+#        # 过期了
+#        return False
+#    
+#    if reduceType == ChConfig.Def_EquipReduceType_Time:
+#        # 开始装备时间
+#        startTime = curItem.GetUserAttr(ShareDefine.Def_IudetCreateTime)
+#        if startTime == 0:
+#            return True
+#        if time.time() - startTime > curItemExpireTime:
+#            return False
     
+    isExpireItem, expireTime = GetItemRemainingTime(curItem)
+    if isExpireItem:
+        if expireTime <= 0:
+            return False
+    return True
+
+def GetItemRemainingTime(curItem):
+    ''' 获取物品剩余时间,秒
+    @return: 是否时效物品, 剩余时间 
+    '''
+    
+    isExpireItem = False
     reduceType = curItem.GetEndureReduceType()
-    if reduceType == ChConfig.Def_EquipReduceType_RTimeItem and \
-    curItemPastTime >= curItemExpireTime:
-        # 过期了
-        return False
+    remainingTime = 0
     
-    if reduceType == ChConfig.Def_EquipReduceType_Time:
+    if reduceType in [ChConfig.Def_EquipReduceType_Time, ChConfig.Def_EquipReduceType_RTimeItem]:
+        isExpireItem = True
+        # 装备后开始计时
+        curItemExpireTime = curItem.GetUserAttr(ShareDefine.Def_IudetExpireTime)
+        if not curItemExpireTime:
+            curItemExpireTime = curItem.GetExpireTime()
+            
         # 开始装备时间
         startTime = curItem.GetUserAttr(ShareDefine.Def_IudetCreateTime)
         if startTime == 0:
-            return True
-        if time.time() - startTime > curItemExpireTime:
-            return False
-    return True
+            remainingTime = curItemExpireTime
+        else:
+            curItemPastTime = max(0, int(time.time()) - startTime)
+            remainingTime = max(0, curItemExpireTime - curItemPastTime)
+        return isExpireItem, remainingTime
+    
+    return isExpireItem, remainingTime
 
 ##检查该物品是否合法,类型验证
 # @param curItem 物品实例
@@ -1326,14 +1400,15 @@
     return hasEnough, itemIndexList, findItemIsBind, needCnt
 
 
-def GetPackItemBindStateIndexInfo(curPlayer, itemID):
+def GetPackItemBindStateIndexInfo(curPlayer, itemID, needCount=0, packType=IPY_GameWorld.rptItem):
     ''' 获取背包消耗道具绑定及未绑定索引情况
+    @param needCount: 所需个数, 默认绑定优先,当找到已经足够的个数后不再遍历,减少无用遍历
     @return: 可消耗物品列表[[绑定物品索引], [不绑定物品索引]], 绑定个数, 未绑定个数
     '''
     consumeItemIndexList = [[], []] # 可消耗物品列表[[绑定物品索引], [不绑定物品索引]]
     bindCnt, unBindCnt = 0, 0
     
-    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+    curPack = curPlayer.GetItemManager().GetPack(packType)
     for i in range(0, curPack.GetCount()):
         curItem = curPack.GetAt(i)
         if not curItem:
@@ -1348,6 +1423,8 @@
         if curItem.GetIsBind():
             consumeItemIndexList[0].append(i)
             bindCnt += itemCount
+            if needCount > 0 and bindCnt >= needCount:
+                break
         else:
             consumeItemIndexList[1].append(i)
             unBindCnt += itemCount
@@ -1409,11 +1486,6 @@
     #系统提示 LostRes 失去物品
     #if needSysmsg:
     #    PlayerControl.NotifyCode(curPlayer, 'LostRes', [itemTypeID, totalUseCnt])
-        
-    #添加跨服服务器中使用物品事件
-    if itemTypeID in ReadChConfig.GetEvalChConfig("MergeServerCanUseItemID"):
-        eventInfo = [itemTypeID, totalUseCnt, makeItemBind, eventName, saveDataDict]
-        PlayerMergeEvent.AddMSPlayerEvent(curPlayer.GetPlayerID(), PlayerMergeEvent.Def_MSPEvent_DelItem, eventInfo)
     return makeItemBind
 
 def GetCostItemIndexList(costItemInfo, itemPack, bindFirst=True):
@@ -1502,7 +1574,18 @@
 
 def GetShopItemPrice(itemID, priceType):
     ''' 获取商城物品对应价格 '''
-    ipyData = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ItemID":itemID, "MoneyType":priceType}, isLogNone=False)
+    # 系统固定商店类型: 仙玉(2-常用道具,3-成长变强),绑玉(4-绑玉商城)
+    priceTypeShopTypeDict = {IPY_GameWorld.TYPE_Price_Gold_Money:[2, 3],
+                             IPY_GameWorld.TYPE_Price_Gold_Paper:[4],
+                             }
+    ipyData = None
+    if priceType in priceTypeShopTypeDict:
+        for shopType in priceTypeShopTypeDict[priceType]:
+            ipyData = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ShopType":shopType, "ItemID":itemID, "MoneyType":priceType}, isLogNone=False)
+            if ipyData:
+                break
+    else:
+        ipyData = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ItemID":itemID, "MoneyType":priceType}, isLogNone=False)
     if not ipyData:
         return 0
     return ipyData.GetMoneyNum()
@@ -1633,11 +1716,11 @@
 #  @remarks 函数详细说明.
 def SwitchItem(curPlayer, curItem, switchItem, putInPackIndex):
     ##物品绑定字段判定 -> 装备绑定
-    if putInPackIndex == IPY_GameWorld.rptEquip:
+    if putInPackIndex in [IPY_GameWorld.rptEquip, ShareDefine.rptZhuXianEquip]:
         DoLogic_ItemBindType(curPlayer, switchItem, ChConfig.Def_BindType_DoEquipBind)
         
     # 装备技能书、坐骑装备绑定
-    if putInPackIndex in [IPY_GameWorld.rptHorseEquip]:
+    if putInPackIndex in [IPY_GameWorld.rptHorseEquip, ShareDefine.rptZhuXianEquip]:
         DoLogic_ItemBindType(curPlayer, curItem, ChConfig.Def_BindType_DoEquipBind)
     
     #交换装备
@@ -1658,11 +1741,11 @@
         return
     
     ##物品绑定字段判定 -> 装备绑定
-    if putInPackIndex == IPY_GameWorld.rptEquip:
+    if putInPackIndex in [IPY_GameWorld.rptEquip, ShareDefine.rptZhuXianEquip]:
         DoLogic_ItemBindType(curPlayer, switchItem, ChConfig.Def_BindType_DoEquipBind)
     
     # 装备技能书、坐骑装备绑定
-    if putInPackIndex in [IPY_GameWorld.rptHorseEquip]:
+    if putInPackIndex in [IPY_GameWorld.rptHorseEquip, ShareDefine.rptZhuXianEquip]:
         DoLogic_ItemBindType(curPlayer, emptyItem, ChConfig.Def_BindType_DoEquipBind)
 
     if switchItem.GetGameWorldItemType() == IPY_GameWorld.gwitRoleItem:
@@ -1684,6 +1767,10 @@
 def GetIsDogzEquip(curItem):
     ## 返回是否神兽装备
     return curItem.GetType() in ChConfig.Def_DogzEquiipType
+
+def GetIsZhuXianEquip(curItem):
+    ## 返回是否诛仙装备
+    return curItem.GetType() in ChConfig.Def_ZhuXianEquiipType
 
 ## 返回是否武器
 #  @param curItem 当前物品
@@ -1798,11 +1885,6 @@
     ItemControler.SetItemCount(curItem, curItemCnt - delCnt,
                                curPlayer.GetPlayerID(), curPlayer.GetAccID(),
                                curPlayer.GetPlayerName())
-    
-    #添加跨服服务器中使用物品事件
-    if curItemTypeID in ReadChConfig.GetEvalChConfig("MergeServerCanUseItemID"):
-        eventInfo = [curItemTypeID, delCnt, curItemBind, recordName, saveDataDict]
-        PlayerMergeEvent.AddMSPlayerEvent(curPlayer.GetPlayerID(), PlayerMergeEvent.Def_MSPEvent_DelItem, eventInfo)
     return
 
 def DelVPackItem(curPlayer, packIndex, placeList, eventName=""):
@@ -1824,6 +1906,13 @@
             itemName = str(itemID) if not curItemData else  curItemData.GetName()
             itemName = "%s LV%s" % (itemName, plusLV + 1)
             isNeedRecord = curItemData and ItemControler.IsRuneItemNeedRecord(curItemData, plusLV)
+        if packIndex == ShareDefine.rptGatherSoul:
+            itemID = ItemControler.GetGatherSoulItemID(itemKeyData)
+            plusLV = ItemControler.GetGatherSoulItemPlusLV(itemKeyData)
+            curItemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
+            itemName = str(itemID) if not curItemData else  curItemData.GetName()
+            itemName = "%s LV%s" % (itemName, plusLV + 1)
+            isNeedRecord = curItemData and ItemControler.IsGatherSoulItemNeedRecord(curItemData, plusLV)
             
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_VPackItem % (packIndex, place), 0)
         if isNeedRecord:
@@ -1832,32 +1921,59 @@
     ItemControler.Sync_VPackItem_Clear(curPlayer, packIndex, placeList)
     return
 
-## 获取物品最高强化星级
+## 获取物品最高强化等级
 #  @param itemType: 物品类型
 #  @return 最大星级,0为不可强化
-def GetItemMaxStarLV(curItem):
+def GetItemMaxPlusLV(curPlayer, equipPackindex, curItem):
+    findType = ChEquip.GetEquipPlusType(curItem)
+    if not findType:
+        return 0
+    equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackindex, curItem)
+    ipyData = IpyGameDataPY.GetIpyGameDataNotLog("ItemPlusMax", findType, equipStar)
+    if ipyData:
+        return ipyData.GetLevelMax()
+    
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('ItemPlusMax', {'Type':findType}, True, False)
+    if not ipyDataList:
+        return 0
+    maxStar = ipyDataList[-1].GetStar()
+    if equipStar > maxStar:
+        return ipyDataList[-1].GetLevelMax()
+    findMax = 0
+    for ipyData in ipyDataList:
+        if equipStar >= ipyData.GetStar():
+            findMax = ipyData.GetLevelMax()
+    return findMax
+    
+
+## 获取物品最高强化进化等级
+#  @param itemType: 物品类型
+#  @return 最大星级,0为不可强化
+def GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curItem):
+    packType = IPY_GameWorld.rptEquip
+    curPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, equipPackindex, curItem)
     equipPlace = curItem.GetEquipPlace()
-    plusMaxTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)
-    if not plusMaxTypeDict:
-        GameWorld.ErrLog("GetItemMaxStarLV没有强化类型映射表")
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlusEvolve', {'EquipPlace':equipPlace}, True)
+    if not ipyDataList:
         return 0
-    
-    if equipPlace not in plusMaxTypeDict:
+    maxEvolvelv = 0
+    for ipyData in ipyDataList:
+        if curPlusLV >= ipyData.GetNeedPlusLV():
+            maxEvolvelv = ipyData.GetEvolveLV()
+        else:
+            break
+    return maxEvolvelv
+
+## 获取物品最高星数
+#  @param itemType: 物品类型
+#  @return 最大星级,0为不可强化
+def GetItemMaxStar(curItem):
+    itemColor = curItem.GetItemColor()
+    maxStarDict = IpyGameDataPY.GetFuncEvalCfg('EquipPartStar', 1)
+    if str(itemColor) not in maxStarDict:
         return 0
-    findType = plusMaxTypeDict[equipPlace]
-    #仙器特殊取固定值
-    if equipPlace in [ShareDefine.retFairyCan, ShareDefine.retFairyCan2]:
-        rank = 0
-        itemColor = 0
-    else:
-        rank = GetItemClassLV(curItem)
-        itemColor = curItem.GetItemColor()
-    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlusMax", findType, rank, itemColor)
-    if not ipyData:
-        GameWorld.ErrLog("找不到装备强化等级上限表数据配置! rank = %s, %s" % (rank , curItem.GetItemQuality()))
-        return
-    
-    return ipyData.GetLevelMax()
+    classLV = GetItemClassLV(curItem)
+    return maxStarDict[str(itemColor)].get(str(classLV), 0)
 
 ## 获取物品阶级
 def GetItemClassLV(curItem):
@@ -1875,6 +1991,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()
 ## 每周可使用次数, 预留,暂不实现
@@ -1891,7 +2014,8 @@
     addItemDict = {}
     addItemDict['ItemID'] = curItem.GetItemTypeID()
     addItemDict['Count'] = curItem.GetCount()
-    addItemDict['IsBind'] = int(curItem.GetIsBind())
+    addItemDict['IsAuctionItem'] = curItem.GetIsBind()
+    #addItemDict['IsBind'] = int(curItem.GetIsBind())
     #addItemDict['EquipGS'] = GetEquipGearScore(curItem)
     #addItemDict['ItemStarLV'] = curItem.GetItemStarLV()
     #addItemDict['CurDurg'] = GameWorld.GetIntUpper(curItem.GetCurDurg(), ChConfig.Def_EndureRepairParameter)
@@ -1915,7 +2039,7 @@
     #addItemDict['EquipMaxAtkValue'] = curItem.GetEquipMaxAtkValue()
     #addItemDict['FitLV'] = curItem.GetFitLV()
     #addItemDict['Proficiency'] = curItem.GetProficiency()
-    addItemDict['IsSuite'] = int(curItem.GetIsSuite())
+    #addItemDict['IsSuite'] = int(curItem.GetIsSuite())
     #addItemDict['BaseHP'] = curItem.GetBaseHP()
     #addItemDict['BaseMagicDef'] = curItem.GetBaseMagicDef()
     #addItemDict['MaxAddSkillCnt'] = curItem.GetMaxAddSkillCnt()

--
Gitblit v1.8.0