hxp
2021-05-10 27c520cac266513887f348cf9feb4be7b3efda45
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -1085,7 +1085,7 @@
            self.__CrossServerPutInItem(packIndex, tagItem, event)
            tagItem.Clear()
            return True
        packIndex = ChConfig.GetItemPackType(curItemData.GetType(), packIndex)
        packIndex = ChConfig.GetItemPackType(curItemData, packIndex)
        
        tagItemCount = GetItemCount(tagItem)
        isAuctionItem = GetIsAuctionItem(tagItem)
@@ -1261,20 +1261,6 @@
        GameWorld.DebugLog("传奇属性异常,重新刷新一次属性: packType=%s,itemID=%s,srcScore=%s,updScore=%s" 
                         % (packType, curItem.GetItemTypeID(), srcScore, updScore), curPlayer.GetPlayerID())
        return
    def CheckRolePackEquipAttr(self):
        ''' 玩家上线修复装备属性bug
        '''
#        curPlayer = self.__Player
#        checkVersion = 20190103
#        key = "LoginCheckEquipAttr"
#        curVersion = curPlayer.NomalDictGetProperty(key)
#        if curVersion == checkVersion:
#            return
#        playerID = curPlayer.GetPlayerID()
#        GameWorld.Log("玩家上线处理装备属性! curVersion=%s,checkVersion=%s" % (curVersion, checkVersion), playerID)
#        PlayerControl.NomalDictSetProperty(curPlayer, key, checkVersion)
        return
    ## 是否能放入物品 
    #  @param packIndex 背包索引
@@ -1322,7 +1308,7 @@
            return False, 0
        
        # 特殊处理不同的物品放入不同的背包,如神兽背包
        packIndex = ChConfig.GetItemPackType(curItemData.GetType(), packIndex)
        packIndex = ChConfig.GetItemPackType(curItemData, packIndex)
        
        maxCanPutItem = 0
        curPlayer = self.__Player
@@ -1459,7 +1445,7 @@
            curItem = movePack.GetAt(itemIndex)
            if not curItem or curItem.IsEmpty():
                continue
            toPackIndex = ChConfig.GetItemPackType(curItem.GetType(), desPackIndex)
            toPackIndex = ChConfig.GetItemPackType(curItem, desPackIndex)
            if toPackIndex in fullPackList:
                continue
            if not __DoDropItemToOtherPack(curPlayer, itemControl, fromPackIndex, toPackIndex, itemIndex, curItem):
@@ -1474,7 +1460,7 @@
        curItem = movePack.GetAt(index)
        if not curItem or curItem.IsEmpty():
            return
        toPackIndex = ChConfig.GetItemPackType(curItem.GetType(), desPackIndex)
        toPackIndex = ChConfig.GetItemPackType(curItem, desPackIndex)
        __DoDropItemToOtherPack(curPlayer, itemControl, fromPackIndex, toPackIndex, index, curItem)
    return
@@ -1487,7 +1473,7 @@
    curItemCount = curItem.GetCount()
    #curItemIsBind = curItem.GetIsBind()
    isAuctionItem = GetIsAuctionItem(curItem)
    #toPackIndex = ChConfig.GetItemPackType(curItem.GetType(), toPackIndex)
    #toPackIndex = ChConfig.GetItemPackType(curItem, toPackIndex)
    
    # 常规物品转移到虚拟符印背包
    if toPackIndex == ShareDefine.rptRune:
@@ -1967,6 +1953,70 @@
#    return 0
#===============================================================================
#==============================================================================
def OnPlayerLogin(curPlayer):
    __CheckTransferItemPack(curPlayer)
    return
def __CheckTransferItemPack(curPlayer):
    ## 检查转移物品
    # {调整版本编号:{(原背包类型, 目标背包类型):[物品ID, ...], ...}, ...}
    transferItemPackRecordDict = IpyGameDataPY.GetFuncEvalCfg("TransferItemPack", 1, {})
    if not transferItemPackRecordDict:
        return
    verList = transferItemPackRecordDict.keys()
    verList.sort()
    lastVersion = verList[-1]
    key = "TransferItemPackVer"
    curVersion = curPlayer.NomalDictGetProperty(key)
    if curVersion >= lastVersion:
        #GameWorld.DebugLog("已处理过转移物品!curVersion=%s >= lastVersion=%s" % (curVersion, lastVersion))
        return
    mailItemList = []
    itemControl = PlayerItemControler(curPlayer)
    playerID = curPlayer.GetPlayerID()
    for newVerNum in verList:
        if newVerNum <= curVersion:
            continue
        transferItemPackRule = transferItemPackRecordDict[newVerNum]
        GameWorld.Log("玩家上线处理物品转移背包! curVersion=%s,newVerNum=%s" % (curVersion, newVerNum), playerID)
        for transferPackInfo, itemIDList in transferItemPackRule.items():
            fromPackType, toPackType = transferPackInfo
            fromPack = curPlayer.GetItemManager().GetPack(fromPackType)
            #toPack = curPlayer.GetItemManager().GetPack(toPackType)
            for itemIndex in xrange(fromPack.GetCount()):
                item = fromPack.GetAt(itemIndex)
                if not ItemCommon.CheckItemCanUse(item):
                    continue
                itemID = item.GetItemTypeID()
                if itemID not in itemIDList:
                    continue
                itemCount = item.GetCount()
                if __DoDropItemToOtherPack(curPlayer, itemControl, fromPackType, toPackType, itemIndex, item):
                    # 拖成功的不再处理
                    GameWorld.Log("    直接转移: fromPackType=%s,toPackType=%s,itemIndex=%s,itemID=%s,itemCount=%s"
                                  % (fromPackType, toPackType, itemIndex, itemID, itemCount), playerID)
                    continue
                GameWorld.Log("    邮件转移: fromPackType=%s,toPackType=%s,itemIndex=%s,itemID=%s,itemCount=%s"
                              % (fromPackType, toPackType, itemIndex, itemID, itemCount), playerID)
                # 不成功的,转发到邮件,最后清除物品
                mailItemList.append(ItemCommon.GetMailItemDict(item))
                item.Clear()
        PlayerControl.NomalDictSetProperty(curPlayer, key, newVerNum)
        curVersion = newVerNum
    if mailItemList:
        PlayerControl.SendMailByKey("TransferItemPack", [playerID], mailItemList)
    return
## 清除背包中的任务物品
#  @param curPlayer 当前玩家
#  @param packIndex 背包类型
@@ -2015,7 +2065,7 @@
            isAuctionItem = 0
    
    defaultPack = IPY_GameWorld.rptItem if not packIndexList else packIndexList[0]
    packIndex = ChConfig.GetItemPackType(curItemData.GetType(), defaultPack)
    packIndex = ChConfig.GetItemPackType(curItemData, defaultPack)
    if packIndex != defaultPack or not packIndexList:
        packIndexList = [packIndex]
    
@@ -2654,7 +2704,7 @@
        curItem = GameWorld.GetGameData().GetItemByTypeID(itemID)
        if not curItem:
            return False
        packType = ChConfig.GetItemPackType(curItem.GetType())
        packType = ChConfig.GetItemPackType(curItem)
        needSpace = GetItemNeedPackCount(packType, curItem, itemCnt, isAuctionItem)
        needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace
        
@@ -2676,7 +2726,7 @@
        if not curItem:
            GameWorld.ErrLog('GivePlayerItemOrMail 物品ID不存在 itemID=%s'%itemID, curPlayer.GetID())
            return
        packType = ChConfig.GetItemPackType(curItem.GetType())
        packType = ChConfig.GetItemPackType(curItem)
        needSpace = GetItemNeedPackCount(packType, curItem, itemCnt, isAuctionItem)
        needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace
    isSendMail = False