From 3a68c0b5fc1175ac646936be010c44ca279cb27c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 04 一月 2019 14:20:25 +0800 Subject: [PATCH] 4822 【后端】【1.4.100】装备部位集合配置规则优化 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 31 +++++++++++++++++++------------ 1 files changed, 19 insertions(+), 12 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py index 4b8f41f..3799da6 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py +++ b/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:概率, ...} -- Gitblit v1.8.0