From 243dd6333418b5b9260a9809a857286fe4423f20 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 05 七月 2019 11:46:19 +0800
Subject: [PATCH] 7843 【后端】【主干】掉落、宝箱装备部位集合优化
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py | 5 ++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 49 +++++++++++++++++++++++++++++++++++++++----------
2 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
index aa034f3..cefa863 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
+++ b/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
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 0ad6b8a..9117541 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/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):
''' 获取掉落优选部位
几个默认规则
--
Gitblit v1.8.0