hxp
2019-01-04 3a68c0b5fc1175ac646936be010c44ca279cb27c
4822 【后端】【1.4.100】装备部位集合配置规则优化
1个文件已修改
31 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -1169,6 +1169,8 @@
    # 1. 职业物品ID集合
    job = curPlayer.GetJob()
    JobItemDropSets = IpyGameDataPY.GetFuncCfg("JobItemDropSets", 1) # {物品ID集合key:[职业顺序物品ID列表], ...}
    itemDropSets = IpyGameDataPY.GetFuncCfg("JobItemDropSets", 2) # {物品ID集合key:[随机物品ID列表], ...}
    itemDropRateSets = IpyGameDataPY.GetFuncCfg("JobItemDropSets", 3) # {物品ID集合key:[随机物品ID饼图列表], ...}
    ItemKeyMaxDropCountDict = ipyDrop.GetItemKeyMaxDropCount() # {物品ID集合key:随机次数,...}
    
    #     1.1 只掉本职业的
@@ -1199,20 +1201,14 @@
    #     1.2 随机掉落一个
    ItemKeyDropRateDict = ipyDrop.GetItemKeyDropRate() # {物品ID集合key:概率, ...}, 随机掉一个,优先级低
    if ItemKeyDropRateDict:
        for jobItemKey, dropRate in ItemKeyDropRateDict.items():
            if jobItemKey not in JobItemDropSets:
                continue
            jobItemList = JobItemDropSets[jobItemKey]
            if len(jobItemList) < job:
                GameWorld.ErrLog("职业物品集合key没有配置对应职业ID: npcID=%s,jobItemKey=%s,job=%s" % (npcID, jobItemKey, job))
                continue
        for itemKey, dropRate in ItemKeyDropRateDict.items():
            # 在只掉本职业里的不处理
            if jobItemKey in ItemKeyDropRateJobDict:
            if itemKey in ItemKeyDropRateJobDict:
                continue
            mustDropCount = dropRate / Def_NPCMaxDropRate
            dropRate = dropRate % Def_NPCMaxDropRate # 基础概率
            canDropCount = mustDropCount
            doCnt = ItemKeyMaxDropCountDict.get(jobItemKey, 1) # 默认1个
            doCnt = ItemKeyMaxDropCountDict.get(itemKey, 1) # 默认1个
            doCnt = __GetNPCDropDoCountChange(doCnt, doCountRate, doCountAdd)
            for _ in xrange(doCnt):
                if not GameWorld.CanHappen(dropRate, maxRate=Def_NPCMaxDropRate):
@@ -1220,9 +1216,20 @@
                canDropCount += 1
                
            for _ in xrange(canDropCount):
                randJobItemID = random.choice(jobItemList)
                dropItemIDList.append(randJobItemID)
                #GameWorld.DebugLog("掉落随机职业指定物品ID: jobItemKey=%s,randJobItemID=%s" % (jobItemKey, randJobItemID))
                if itemKey in itemDropRateSets:
                    randItemRateList = itemDropRateSets[itemKey]
                    randItemID = GameWorld.GetResultByRandomList(randItemRateList)
                    #GameWorld.DebugLog("掉落饼图物品ID: itemKey=%s,randItemRateList=%s,randItemID=%s" % (itemKey, randItemRateList, randItemID))
                elif itemKey in itemDropSets:
                    randItemList = itemDropSets[itemKey]
                    randItemID = random.choice(randItemList)
                    #GameWorld.DebugLog("掉落随机物品ID: itemKey=%s,randItemList=%s,randItemID=%s" % (itemKey, randItemList, randItemID))
                else:
                    continue
                if not randItemID:
                    continue
                dropItemIDList.append(randItemID)
                #GameWorld.DebugLog("掉落随机指定物品ID: itemKey=%s,randItemID=%s" % (itemKey, randItemID))
                
    # 2. 指定掉落ID处理, 受全局设定影响
    itemIDDropRateDict = ipyDrop.GetItemIDDropRate() # {物品ID:概率, ...}