ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -41,6 +41,7 @@
import PyGameData
import PlayerVip
import ChEquip
import PlayerHero
import math
import time
@@ -1346,6 +1347,10 @@
                if isNeedRecord:
                    itemNoteDict = ItemCommon.GetItemNoteDict(item, curItemCount, packItemCount, GetItemCount(item))
                    ItemCommon.DR_GetItem(curPlayer, packIndex, eventName, itemNoteDict, addDict)
                if item.GetType() == ChConfig.Def_ItemType_Hero:
                    PlayerHero.OnGiveHeroItem(curPlayer, item)
                break
                                                
        #放入东西
@@ -1663,7 +1668,14 @@
            return
    
    # 整理方式不同区分
    if packIndex == IPY_GameWorld.rptWarehouse:
    if packIndex == ShareDefine.rptHero:
        if tick - curPlayer.GetResetItemTick() <= ChConfig.Def_ItemPackResetInterval:
            #GameWorld.DebugLog("重整背包时间间隔太短")
            return
        curPlayer.SetResetItemTick(tick)
        ResetHeroPack(curPlayer, curPack, beingIndex, endIndex)
    elif packIndex == IPY_GameWorld.rptWarehouse:
        #验证间隔
        if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_WareHouseSort) < \
                ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_WareHouseSort]:
@@ -1968,7 +1980,60 @@
 
    return
def ResetHeroPack(curPlayer, curPack, beingIndex, endIndex):
    itemList = []
    for i in range(beingIndex, endIndex + 1):
        curRoleItem = curPack.GetAt(i)
        if curRoleItem.IsEmpty():
            continue
        curItem = curRoleItem.GetItem()
        itemList.append(curItem)
    itemList.sort(__CmpHeroPack)
    curPack.WipePack(beingIndex, endIndex)
    putPlace = beingIndex
    for item in itemList:
        curPack.GetAt(putPlace).AssignItem(item, False)
        putPlace += 1
    return
def __CmpHeroPack(item1, item2):
    '''排序规则:上阵武将排前,未上阵武将排后,再各自按照以下规则排序
    武将等级>突破等级>武将星级>武将品质>武将ID
    '''
    posNum1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroPosNum)
    posNum2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroPosNum)
    if (posNum1 and posNum2) or (not posNum1 and not posNum2):
        lv1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroLV)
        lv2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroLV)
        if lv1 == lv2:
            bLV1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
            bLV2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
            if bLV1 == bLV2:
                star1 = item1.GetUserAttr(ShareDefine.Def_IudetHeroStar)
                star2 = item2.GetUserAttr(ShareDefine.Def_IudetHeroStar)
                if star1 == star2:
                    heroID1 = item1.GetItemTypeID()
                    heroID2 = item2.GetItemTypeID()
                    ipyData1 = IpyGameDataPY.GetIpyGameData("Hero", heroID1)
                    ipyData2 = IpyGameDataPY.GetIpyGameData("Hero", heroID2)
                    quality1 = ipyData1.GetQuality() if ipyData1 else 0
                    quality2 = ipyData2.GetQuality() if ipyData2 else 0
                    if quality1 == quality2:
                        return cmp(heroID1, heroID2)
                    return -cmp(quality1, quality2)
                return -cmp(star1, star2)
            return -cmp(bLV1, bLV2)
        return -cmp(lv1, lv2)
    elif posNum1:
        return -1
    elif posNum2:
        return 1
    else:
        return cmp(item1.GetItemTypeID(), item2.GetItemTypeID())
#===============================================================================
#Python 版重整物品
# def ResetItem(curPlayer, curPackIndex, tick):
@@ -2575,6 +2640,10 @@
        GameWorld.ErrLog("产出物品异常,无法创建物品 = %s" % (itemID))
        return
    
    # 英雄
    if curItem.GetType() == ChConfig.Def_ItemType_Hero:
        return curItem
    # 非装备,无需设置属性
    if not ItemCommon.CheckItemIsEquip(curItem):
        return curItem