From 532ee8a00dac025085c781f6d62f7d12072ea6b0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 04 三月 2020 20:18:43 +0800 Subject: [PATCH] 8397 【开发】个人boss新增评级 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 28 +++++++++++++++++++++++----- 1 files changed, 23 insertions(+), 5 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 3d4f0dd..1efe1c7 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py @@ -915,6 +915,8 @@ GameWorld.ErrLog("获取NPC掉落配置错误!表不存在该NPCID=%s" % npcID, playerID) return + curGrade = curGrade if curGrade else GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.Def_FB_Grade) + dropIDList = [] # 掉落的ID列表 auctionIDList = [] dropMoneyCnt, moneyValue = 0, 0 @@ -969,7 +971,7 @@ indepRateDoCnt = ipyDrop.GetIndepRateDoCnt() if indepRateDoCnt: indepRateDoCnt = __GetNPCDropDoCountChange(indepRateDoCnt, doCountRate + equipDropDoCountPlus, doCountAdd) - dropEquipInfoList += __GetNPCIndepRateEquipDrop(ipyDrop, indepRateDoCnt, equipDropRatePlus, curGrade) + dropEquipInfoList += __GetNPCIndepRateEquipDrop(mapID, ipyDrop, indepRateDoCnt, equipDropRatePlus, curGrade) #GameWorld.DebugLog("阶,颜色 key,dropEquipInfoList=%s" % (dropEquipInfoList)) # 3. 第x次击杀, 归属者公共附加掉落,所有归属者都增加击杀次数; @@ -1022,7 +1024,6 @@ fbGradeColorSuitRateDict = IpyGameDataPY.GetFuncEvalCfg("FBGradeEquipDropRate", 2) # 评级影响颜色套装概率 {npcID:{颜色:[D级影响概率, ..., S级影响概率], ...}, ...} if npcID in fbGradeColorSuitRateDict: gradeColorSuitRateDict = fbGradeColorSuitRateDict[npcID] - curGrade = curGrade if curGrade else GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.Def_FB_Grade) colorDropCntDict = {} # 装备颜色已经掉落数 {颜色:数量, ...} colorMaxDropCntDict = ipyDrop.GetEquipColorMaxDropCount() # {颜色:上限数量,...} @@ -1107,7 +1108,6 @@ fbGradePriItemIDDropDict = IpyGameDataPY.GetFuncEvalCfg("FBGradeEquipDropRate", 3) if npcID in fbGradePriItemIDDropDict: gradePriItemIDDropDict = fbGradePriItemIDDropDict[npcID] - curGrade = curGrade if curGrade else GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.Def_FB_Grade) priDropInfoList = gradePriItemIDDropDict.get(curGrade, []) priDropIDList = [] for priItemID, priItemCount in priDropInfoList: @@ -1117,6 +1117,15 @@ for priDropID in priDropIDList: dropIDList.append(priDropID) #GameWorld.DebugLog("私有物品掉落: priDropID=%s" % priDropID) + + # 6. 地图评级额外掉落 + fbGradeDropItemExDict = IpyGameDataPY.GetFuncEvalCfg("FBGradeEquipDropRate2", 2) # 地图评级额外物品掉落 {"mapID":{"评级":[[物品ID,个数], ...], ...}} + if curGrade and str(mapID) in fbGradeDropItemExDict: + gradeItemExDict = fbGradeDropItemExDict[str(mapID)] + gradeItemExList = gradeItemExDict.get(str(curGrade), []) + #GameWorld.DebugLog("评级额外掉落物品: curGrade=%s,gradeItemExList=%s" % (curGrade, gradeItemExList)) + for gItemExID, gItemExCount in gradeItemExList: + dropIDList += [gItemExID] * gItemExCount # 检查掉落互斥ID组 dropIDList = __RemoveMutexDropID(dropIDList, IpyGameDataPY.GetFuncCfg("MutexDrop", 1)) @@ -1505,7 +1514,7 @@ #GameWorld.DebugLog("饼图装备掉落结果: doCnt=%s, %s" % (doCnt, dropEquipInfoList)) return dropEquipInfoList -def __GetNPCIndepRateEquipDrop(ipyDrop, doCnt, equipDropPlus, curGrade=0): +def __GetNPCIndepRateEquipDrop(mapID, ipyDrop, doCnt, equipDropPlus, curGrade=0): ## 获取NPC独立掉率装备掉落信息 npcID = ipyDrop.GetNPCID() indepRateDict = ipyDrop.GetIndepRateDrop() # 独立概率掉落信息 {(阶,颜色):概率,...} @@ -1514,7 +1523,12 @@ fbGradeColorRateDict = IpyGameDataPY.GetFuncEvalCfg("FBGradeEquipDropRate", 1) #{npcID:{颜色:[D级影响概率, ..., S级影响概率], ...}, ...} if npcID in fbGradeColorRateDict: gradeColorRateDict = fbGradeColorRateDict[npcID] - curGrade = curGrade if curGrade else GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.Def_FB_Grade) + + orangeEquipPer = 0 + fbGradeOrangeEquipPerDict = IpyGameDataPY.GetFuncEvalCfg("FBGradeEquipDropRate2", 1) # 地图评级影响橙装概率百分率 {"mapID":[D级影响概率, ..., S级影响概率], ..} + if str(mapID) in fbGradeOrangeEquipPerDict and curGrade: + orangeEquipPerList = fbGradeOrangeEquipPerDict[str(mapID)] + orangeEquipPer = 0 if (curGrade <= 0 or curGrade > len(orangeEquipPerList)) else orangeEquipPerList[curGrade - 1] #colorDropCntDict = {} # 装备颜色已经掉落数 {颜色:数量, ...} dropEquipInfoList = [] @@ -1528,6 +1542,10 @@ dropRate = int(dropRate * colorRate / 10000.0) #GameWorld.DebugLog(" 评级影响颜色概率: curGrade=%s,colorRate=%s,dropRate=%s" % (curGrade, colorRate, dropRate)) + if color == ChConfig.Def_Quality_Orange and orangeEquipPer: + dropRate = int(dropRate * orangeEquipPer / 100.0) + #GameWorld.DebugLog("评级橙装掉率加成: orangeEquipPer=%s,dropRate=%s" % (orangeEquipPer, dropRate)) + dropRate = dropRate if not equipDropPlus else (dropRate + int(dropRate * equipDropPlus / 10000.0)) mustDropCount = dropRate / Def_NPCMaxDropRate dropRate = dropRate % Def_NPCMaxDropRate # 基础概率 -- Gitblit v1.8.0