hxp
2019-07-05 243dd6333418b5b9260a9809a857286fe4423f20
7843 【后端】【主干】掉落、宝箱装备部位集合优化
2个文件已修改
54 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
@@ -334,7 +334,6 @@
                
    GameWorld.DebugLog("装备库产出: dropEquipInfoList=%s" % dropEquipInfoList)
    
    placeKeyListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 1)
    colorSuitRateDict = awardIpyData.GetEquipColorSuitInfo() # 装备颜色对应套装概率 {颜色:套装概率, ...}
    colorSuitPlaceKeyInfoDict = awardIpyData.GetEquipPartKeyRateInfo() # 装备部位集合信息 {(颜色,是否套装):部位集合key, ...}
    for classLV, color in dropEquipInfoList:
@@ -348,10 +347,10 @@
            continue
        placeKey = colorSuitPlaceKeyInfoDict[colorSuitKey]
        jobList = itemJobList
        if placeKey not in placeKeyListDict:
        placeList = NPCCommon.GetEquipPlaceByPlaceKey(placeKey)
        if not placeList:
            GameWorld.ErrLog("部位集合key不存在!chestsItemID=%s,placeKey=%s" % (chestsItemID, placeKey))
            continue
        placeList = placeKeyListDict[placeKey]
        randEquipIDList = NPCCommon.__GetEquipIDList(chestsItemID, classLV, color, isSuit, placeList, itemJobList, findType="ChestsItem")
        if not randEquipIDList:
            continue
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -793,7 +793,6 @@
            dropEquipInfoList.append([classLV, color, dropCount])
        GameWorld.DebugLog("    装备掉落结果: killCount=%s,[阶,颜色,件数]=%s" % (killCount, dropEquipInfoList), playerID)
        
    placeKeyListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 1)
    colorSuitRateDict = ipyDrop.GetEquipColorSuitInfo() # 装备颜色对应套装概率 {颜色:套装概率, ...}
    colorSuitPlaceKeyInfoDict = ipyDrop.GetEquipPartKeyRateInfo() # 装备部位集合信息 {(颜色,是否套装):部位集合key, ...}
    dropEquipIDDict = {}
@@ -813,10 +812,10 @@
                GameWorld.ErrLog("未配置颜色是否套装对应部位集合key! npcID=%s,color=%s,isSuit=%s" % (npcID, color, isSuit))
                continue
            placeKey = colorSuitPlaceKeyInfoDict[colorSuitKey]
            if placeKey not in placeKeyListDict:
            placeList = GetEquipPlaceByPlaceKey(placeKey)
            if not placeList:
                GameWorld.ErrLog("部位集合key不存在!npcID=%s,placeKey=%s" % (npcID, placeKey))
                continue
            placeList = placeKeyListDict[placeKey]
            randEquipIDList = __GetEquipIDList(npcID, classLV, color, isSuit, placeList, itemJobList)
            if not randEquipIDList:
                continue
@@ -1023,7 +1022,6 @@
        gradeColorSuitRateDict = fbGradeColorSuitRateDict[npcID]
        curGrade = curGrade if curGrade else GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.Def_FB_Grade)
        
    placeKeyListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 1)
    colorDropCntDict = {} # 装备颜色已经掉落数 {颜色:数量, ...}
    colorMaxDropCntDict = ipyDrop.GetEquipColorMaxDropCount() # {颜色:上限数量,...}
    colorSuitRateDict = ipyDrop.GetEquipColorSuitInfo() # 装备颜色对应套装概率 {颜色:套装概率, ...}
@@ -1060,19 +1058,22 @@
                continue
            placeKey = colorSuitPlaceKeyInfoDict[colorSuitKey]
            # 掉落优选部位处理
            if color == optColor and isSuit == optIsSuit and placeKey in placeKeyListDict and optPlace == None:
                optPlace = __GetOptimizationEquipPlace(dropPlayer, classLV, optColor, optIsSuit, placeKeyListDict[placeKey])
            if color == optColor and isSuit == optIsSuit and optPlace == None:
                allEquipPlaceList = GetAllEquipPlaceByPlaceKey(placeKey)
                #GameWorld.DebugLog("    所有可优选部位: %s" % allEquipPlaceList)
                if allEquipPlaceList:
                    optPlace = __GetOptimizationEquipPlace(dropPlayer, classLV, optColor, optIsSuit, allEquipPlaceList)
            jobList = itemJobList
        if placeKey not in placeKeyListDict:
            GameWorld.ErrLog("部位集合key不存在!npcID=%s,placeKey=%s" % (npcID, placeKey))
            continue
        if optPlace > 0:
            GameWorld.DebugLog("    最终优选部位: %s" % optPlace)
            placeList = [optPlace]
            jobList = [dropPlayer.GetJob()]
            optPlace = 0 # 只有一次性的,置为0
        else:
            placeList = placeKeyListDict[placeKey]
            placeList = GetEquipPlaceByPlaceKey(placeKey)
            if not placeList:
                GameWorld.ErrLog("部位集合key不存在!npcID=%s,placeKey=%s" % (npcID, placeKey))
                continue
        randEquipIDList = __GetEquipIDList(npcID, classLV, color, isSuit, placeList, jobList)
        if not randEquipIDList:
            continue
@@ -1142,6 +1143,34 @@
        GameWorld.ErrLog("Boss没有掉落物品,NPCID=%s" % (npcID), dropPlayer.GetPlayerID())
    return dropIDList, auctionIDList, dropMoneyCnt, moneyValue
def GetAllEquipPlaceByPlaceKey(placeKey):
    placeKeyRateListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 2) # {集合数字key1:[[概率1,部位1],...],...}
    if placeKey in placeKeyRateListDict:
        return [rateInfo[1] for rateInfo in placeKeyRateListDict[placeKey]]
    placeKeyListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 1) # {集合数字key1:[部位1,部位2,...],...}
    if placeKey in placeKeyListDict:
        return placeKeyListDict[placeKey]
    return []
def GetEquipPlaceByPlaceKey(placeKey):
    ## 获取装备位集合对应的部位信息,集合ID重复时,优先饼图
    placeList = []
    placeKeyRateListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 2) # {集合数字key1:[[概率1,部位1],...],...}
    if placeKey in placeKeyRateListDict:
        placeRateList = placeKeyRateListDict[placeKey]
        place = GameWorld.GetResultByRandomList(placeRateList)
        if place:
            placeList = [place]
            #GameWorld.DebugLog("    掉落部位概率集合: placeKey=%s,placeRateList=%s,place=%s,placeList=%s" % (placeKey, placeRateList, place, placeList))
    if not placeList:
        placeKeyListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 1) # {集合数字key1:[部位1,部位2,...],...}
        if placeKey in placeKeyListDict:
            placeList = placeKeyListDict[placeKey]
            #GameWorld.DebugLog("    掉落部位均衡集合: placeKey=%s,placeList=%s" % (placeKey, placeList))
    return placeList
def __GetOptimizationEquipPlace(dropPlayer, classLV, optColor, optIsSuit, optPlaceList):
    ''' 获取掉落优选部位
        几个默认规则