From 0c227b568dceb8124cf1e8611df0fb27c6efa6ac Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 25 三月 2019 21:35:46 +0800
Subject: [PATCH] 6385 【后端】【2.0】五行灵根开发(优化洗点)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py |  119 ++++++++++++++++++++++++-----------------------------------
 1 files changed, 49 insertions(+), 70 deletions(-)

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 2d17a15..359e937 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -34,8 +34,10 @@
 import IpyGameDataPY
 import DataRecordPack
 import EventShell
+import ChEquip
 
 import math
+import time
 #---------------------------------------------------------------------
 
 ## 获得背包的一个空格子
@@ -111,7 +113,7 @@
     for i in range(0, curPack.GetCount()):
         item = curPack.GetAt(i)
         
-        if not ItemCommon.CheckItemCanUse(item):
+        if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item):
             continue
         
         if item.GetItemTypeID() == id:
@@ -131,7 +133,7 @@
     for i in range(0, curPack.GetCount()):
         item = curPack.GetAt(i)
         
-        if not ItemCommon.CheckItemCanUse(item):
+        if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item):
             continue
         
         if item.GetItemTypeID() == id:
@@ -150,7 +152,7 @@
     for i in range(0, curPack.GetCount()):
         item = curPack.GetAt(i)
         
-        if not ItemCommon.CheckItemCanUse(item):
+        if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item):
             continue
         
         effect = item.GetEffectByIndex(0)
@@ -271,7 +273,7 @@
     for i in range(0, curPack.GetCount()):
         
         item = curPack.GetAt(i)
-        if not ItemCommon.CheckItemCanUse(item):
+        if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item):
             continue
         
         if item.GetItemTypeID() != id:
@@ -320,7 +322,7 @@
 #  @remarks 函数详细说明.
 def CanPackItemByItemType(srcItemID, srcItemIsBind, destItemID, destItemIsBind):
     ## 拍品项目,只有非拍品可堆叠,即绑定物品
-    if srcItemID == destItemID and srcItemIsBind == destItemIsBind and srcItemIsBind:
+    if srcItemID == destItemID and srcItemIsBind == destItemIsBind and not srcItemIsBind:
         return True
     return False
 
@@ -477,40 +479,6 @@
         return True
     return False
 
-#物品属性判断------------------------------------------------------------------
-## 使用物品检查是否满足属性
-#  @param curPlayer 当前玩家
-#  @param curItem 当前物品
-#  @return False or True
-def CheckItemAttrLimit(curPlayer, curItem):
-    # 取消限制的物品
-    if curItem.GetUserAttr(ShareDefine.Def_IudetCancelUseLimit) == 1:
-        return True
-    #智力为基础限制
-    if curItem.GetLimitPNE() > curPlayer.GetPNE():
-        return False
-    
-    #由于可变属性强化表加载问题, 暂时不处理强化表的属性点限制,以物品表为主,如有需要再开启此判断 20151210 by hxp
-    # 从强化表中获得数据,装备强化限制力量 敏捷
-#    if curItem.GetType() in ReadChConfig.GetEvalChConfig("EquipPlus_EquipType"):
-#        plusInfo = ...
-#        
-#        if plusInfo is None:
-#            GameWorld.ErrLog("tagItemPlus.txt can't find equip:%s" % curItem.GetItemTypeID())
-#            return False
-#             
-#        limitSTR, limitPHY = plusInfo.GetLimitSTR(), plusInfo.GetLimitPHY()
-#    
-#    # 物品表中获得信息
-#    else:
-    limitSTR, limitPHY = curItem.GetLimitSTR(), curItem.GetLimitPHY()
-    
-    if limitSTR > curPlayer.GetSTR() or limitPHY > curPlayer.GetPHY():
-        return False
-    
-    return True
-
-
 #物品使用等级判断----------------------------------------------------------------
 ## 物品使用等级判断
 #  @param curPlayer 玩家
@@ -660,7 +628,7 @@
         SetItemCount(srcItem, srcItem.GetCount() - realPutCount)
         SetItemCount(destItem, destItem.GetCount() + realPutCount)
         
-        SetItemIsBind(destItem, True)
+        #SetItemIsBind(destItem, True)
         return True
     #2. 目标位置有东西, 并且可以堆叠
     if (CanPackItem(srcItem, destItem) and maxPackCount > destItem.GetCount()):
@@ -774,7 +742,7 @@
 #            return False
         
         #职业检查
-        if not ItemCommon.JobUseable(curPlayer, curItem):
+        if not ItemCommon.CheckJob(curPlayer, curItem):
             if needNotify:
                 PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379")
 
@@ -792,13 +760,7 @@
         #等级检查
         if not CheckItemUseLV(curPlayer, curItem, needNotify):
             return False
-
-        #使用物品检查是否满足属性
-        if not CheckItemAttrLimit(curPlayer, curItem):
-            if needNotify:
-                PlayerControl.NotifyCode(curPlayer, "itemuse_andyshao_671654")
-            return False
-    
+        
         #=======================================================================
         # #马匹检查
         # if curItem.GetType() == ChConfig.Def_Item_Type_Horse and not CheckCanEquipHorse(curPlayer):
@@ -870,9 +832,6 @@
         equipItem = equipPack.GetAt(equipPackIndex)
         desItemID, desUserData = [0, ''] if equipItem.IsEmpty() else [equipItem.GetItemTypeID(), equipItem.GetUserData()]
         srcItemID, srcUserData = curItem.GetItemTypeID(), curItem.GetUserData()
-        # 装备绑定处理 在 DoLogic_ItemBindType函数有处理,此处注释掉
-#        if not curItem.GetIsBind():
-#            SetItemIsBind(curItem, True)
         
         #--其他装备物品---
         #itemColor = curItem.GetItemColor()
@@ -947,6 +906,8 @@
         equipID = curEquip.GetItemTypeID()
         userData = curEquip.GetUserData()
         equipPlace = curEquip.GetEquipPlace()
+        suiteID = curEquip.GetSuiteID()
+        itemClassLV = ItemCommon.GetItemClassLV(curEquip)
         #该物品锁定不执行==============================================
         if curEquip.GetIsLocked():
             PlayerControl.NotifyCode(curPlayer, "RescannotEquip")
@@ -981,6 +942,14 @@
         if not DragItem(curPlayer, IPY_GameWorld.rptEquip, equipIndex, IPY_GameWorld.rptItem, packIndex, curEquipCount):
             return
         self.RefreshStartEquipCount()
+        
+        # 广播卸装
+        if equipIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex:
+            curPlayer.Sync_UnEquipItem(equipID, equipIndex)
+        if suiteID and itemClassLV == ChEquip.GetEquipFacadeClassLV(curPlayer):
+            #脱当前外观阶的套装
+            ChEquip.ChangeEquipfacadeByClassLV(curPlayer, itemClassLV)
+        
         EventShell.EventRespons_EquipStar(curPlayer)
         dataDict = {'dotype':'UnEquipItem', 'equipID':equipID, 'userData':userData}
         DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
@@ -995,7 +964,7 @@
 #        
 #        destItemPlace.PutIn(curEquip)
 #===============================================================================
-        return equipID, equipPlace
+        return equipID, equipPlace, itemClassLV
     
     #是否能放入物品(第几个物品栏, 物品序号, 放入的物品, 放入物品ID,  物品是否绑定)
 #===============================================================================
@@ -1115,8 +1084,7 @@
         packIndex = ChConfig.GetItemPackType(curItemData.GetType(), packIndex)
         
         tagItemCount = GetItemCount(tagItem)
-        isBind = tagItem.GetIsBind()
-        isAuctionItem = not isBind
+        isAuctionItem = GetIsAuctionItem(tagItem)
         if not self.CanPutInItem(packIndex, tagItem.GetItemTypeID(), tagItemCount, isAuctionItem, defaultPile):
             GameWorld.DebugLog("背包满,不能放入物品 count = %d"%GetItemCount(tagItem))
             tagItem.Clear()
@@ -1364,7 +1332,6 @@
             GameWorld.Log("找不到ItemID = %d" % curItemID)
             return False, 0 
         
-        isBind = True
         if curItemID in ChConfig.Def_TransformItemIDList:
             # 货币直接转换的物品如果是放入背包的则直接转化,无需暂用格子
             if packIndex == IPY_GameWorld.rptItem:
@@ -1373,7 +1340,6 @@
         elif isAuctionItem:
             maxPackCount = curItemCount
             defaultPile = False # 新放入的拍品只能放空位置,所以不判断堆叠
-            isBind = False
         else:
             maxPackCount = curItemData.GetPackCount()
             
@@ -1413,7 +1379,7 @@
                     if item.GetIsLocked():
                         continue
     
-                    if (CanPackItemByItemType(item.GetItemTypeID(), item.GetIsBind(), curItemID, isBind) and
+                    if (CanPackItemByItemType(item.GetItemTypeID(), item.GetIsBind(), curItemID, isAuctionItem) and
                         maxPackCount > GetItemCount(item)):
                         #该物品锁定不执行==============================================
                         #可堆叠
@@ -1546,7 +1512,7 @@
     #curItemGUID = curItem.GetGUID()
     curItemCount = curItem.GetCount()
     #curItemIsBind = curItem.GetIsBind()
-    isAuctionItem = 0 if curItem.GetIsBind() else 1
+    isAuctionItem = GetIsAuctionItem(curItem)
     #toPackIndex = ChConfig.GetItemPackType(curItem.GetType(), toPackIndex)
     
     # 常规物品转移到虚拟符印背包
@@ -2194,7 +2160,7 @@
     #tmpEquipData.starLV = int(itemData.get('StarLV', '0'))
     #tmpEquipData.holeCnt = int(itemData.get('HoleCount', '0'))
     #tmpEquipData.stoneData = eval(itemData.get('StoneData', '[]'))
-    tmpEquipData.isBind = 1 if not isAuctionItem else 0
+    tmpEquipData.isBind = isAuctionItem
     #tmpEquipData.isSuite = int(itemData.get('IsSuit', '0'))
     #tmpEquipData.suiteLV = int(itemData.get('SuiteLV', '0'))
     #if tmpEquipData.suiteLV:
@@ -2259,16 +2225,29 @@
     GameWorld.ErrLog('DoLogic_PutItemInPack Error 物品无法放入背包')
     return False
 
-## 设置物品是否绑定
-#  @param curGiveItem 物品实例
-#  @param isBind 是否绑定
-#  @return None
-#  @remarks 
-def SetItemIsBind(curGiveItem, isBind):
-    #isBind = False
-    curGiveItem.SetIsBind(isBind)
+## 是否拍品
+def GetIsAuctionItem(curItem): return curItem.GetIsBind()
+def SetIsAuctionItem(curItem, isAuctionItem, curPlayer=None):
+    curItem.SetIsBind(isAuctionItem)
+    
+    if isAuctionItem:
+        curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
+        return
+    
+    if not curPlayer:
+        return
+    
+    if ItemCommon.GetIsEquip(curItem):
+        # 生成传奇属性
+        legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer)
+        if not legendAttrInfo:
+            return
+        attrIDList, attrValueList = legendAttrInfo
+        updateDict = {ShareDefine.Def_IudetLegendAttrID:attrIDList, ShareDefine.Def_IudetLegendAttrValue:attrValueList}
+        delKeyList = [ShareDefine.Def_IudetAuctionItemCreateTime]
+        ItemCommon.UpdateItemUserData(curItem, updateDict, delKeyList, isUpdateGS=True)
+        
     return
-
 
 ## 设置物品数量
 #  @param item 物品实例
@@ -2390,7 +2369,7 @@
     '''获取生成到装备上的传奇属性
     @return: None 或者 [[传奇属性效果ID列表], [属性值列表]]
     '''
-    if not curItem.GetIsBind():
+    if GetIsAuctionItem(curItem):
         #GameWorld.DebugLog("拍品无法生成传奇属性!")
         return
     itemID = curItem.GetItemTypeID()
@@ -2562,7 +2541,7 @@
         mailItemList = []
         for tempItem in tempItemList:
             mailItemList.append(ItemCommon.GetMailItemDict(tempItem))
-        mailItemList +=extraItemList
+        mailItemList += extraItemList
         mailTypeKey = ShareDefine.DefaultLackSpaceMailType if not mailTypeKey else mailTypeKey
         PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
     else:

--
Gitblit v1.8.0