From 30a717db9c6986126a1ca66c2c4565738cfd2099 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 07 三月 2019 19:23:04 +0800
Subject: [PATCH] 6332 【后端】【2.0】主要是拍品相关规则调整及背包优化(GivePlayerItem 删除无用参数)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py |  122 +++++++++++++++++++++++++++-------------
 1 files changed, 82 insertions(+), 40 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 5c084b2..41b244d 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
@@ -334,12 +334,14 @@
     GameWorld.DebugLog("物品过期时间" + timeStr)
     return GameWorld.ChangeTimeStrToNum(timeStr)
 
-
-## 创建物品
-#  @param itemID 物品ID
-#  @return curSingleItem
-#  @remarks 函数详细说明.
-def CreateSingleItem(itemID, itemCount=1, isBind=0, expireTime=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
@@ -372,6 +374,7 @@
             return
         curSingleItem.SetRemainHour(outTimeServerDay)
         
+    isBind = not isAuctionItem
     if isBind:
         curSingleItem.SetIsBind(1)
         
@@ -458,20 +461,20 @@
     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())
-    SkillAddPer1 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
-    SkillAddPer2 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
-    SkillAddPer3 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
-    SkillAddPer4 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
-    SkillAddPer5 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
-    SkillAddPer6 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
-    SkillAddPer7 = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
-    SkillReducePer1 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
-    SkillReducePer2 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
-    SkillReducePer3 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
-    SkillReducePer4 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
-    SkillReducePer5 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
-    SkillReducePer6 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
-    SkillReducePer7 = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
+    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)
@@ -821,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
@@ -1398,7 +1400,7 @@
     return hasEnough, itemIndexList, findItemIsBind, needCnt
 
 
-def GetPackItemBindStateIndexInfo(curPlayer, itemID, needCount=0):
+def GetPackItemBindStateIndexInfo(curPlayer, itemID, needCount=0, packType=IPY_GameWorld.rptItem):
     ''' 获取背包消耗道具绑定及未绑定索引情况
     @param needCount: 所需个数, 默认绑定优先,当找到已经足够的个数后不再遍历,减少无用遍历
     @return: 可消耗物品列表[[绑定物品索引], [不绑定物品索引]], 绑定个数, 未绑定个数
@@ -1406,7 +1408,7 @@
     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:
@@ -1919,32 +1921,65 @@
     ItemControler.Sync_VPackItem_Clear(curPlayer, packIndex, placeList)
     return
 
-## 获取物品最高强化星级
+## 获取物品最高强化等级
 #  @param itemType: 物品类型
 #  @return 最大星级,0为不可强化
-def GetItemMaxStarLV(curItem):
+def GetItemMaxPlusLV(curPlayer, equipPackindex, 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:
         return 0
     findType = plusMaxTypeDict[equipPlace]
-    #仙器特殊取固定值
-    if equipPlace in [ShareDefine.retFairyCan, ShareDefine.retFairyCan2]:
-        rank = 0
-        itemColor = 0
-    else:
-        rank = GetItemClassLV(curItem)
-        itemColor = curItem.GetItemColor()
-    ipyData = IpyGameDataPY.GetIpyGameData("ItemPlusMax", findType, rank, itemColor)
-    if not ipyData:
-        GameWorld.ErrLog("找不到装备强化等级上限表数据配置! rank = %s, %s" % (rank , curItem.GetItemQuality()))
-        return
+    equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackindex, curItem)
+    ipyData = IpyGameDataPY.GetIpyGameDataNotLog("ItemPlusMax", findType, equipStar)
+    if ipyData:
+        return ipyData.GetLevelMax()
     
-    return ipyData.GetLevelMax()
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('ItemPlusMax', {'Type':findType}, True, False)
+    if not ipyDataList:
+        return 0
+    maxStar = ipyDataList[-1].GetStar()
+    if equipStar > maxStar:
+        return ipyDataList[-1].GetLevelMax()
+    findMax = 0
+    for ipyData in ipyDataList:
+        if equipStar >= ipyData.GetStar():
+            findMax = ipyData.GetLevelMax()
+    return findMax
+    
+
+## 获取物品最高强化进化等级
+#  @param itemType: 物品类型
+#  @return 最大星级,0为不可强化
+def GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curItem):
+    packType = IPY_GameWorld.rptEquip
+    curPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, equipPackindex, curItem)
+    equipPlace = curItem.GetEquipPlace()
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlusEvolve', {'EquipPlace':equipPlace}, True)
+    if not ipyDataList:
+        return 0
+    maxEvolvelv = 0
+    for ipyData in ipyDataList:
+        if curPlusLV >= ipyData.GetNeedPlusLV():
+            maxEvolvelv = ipyData.GetEvolveLV()
+        else:
+            break
+    return maxEvolvelv
+
+## 获取物品最高星数
+#  @param itemType: 物品类型
+#  @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):
@@ -1962,6 +1997,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()
 ## 每周可使用次数, 预留,暂不实现

--
Gitblit v1.8.0