From a4609786df8768c1c138dc261d1b924860c9f07b Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 21 一月 2019 17:52:17 +0800 Subject: [PATCH] 5931 【后端】【1.5.100】诛仙装备开发(诛仙物品背包34、诛仙装备背包35、诛仙装备传奇属性生成规则支持) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 76 +++++++++++++++++++++++++++++++++++++ 1 files changed, 75 insertions(+), 1 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py index 2b18d39..47c70b3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py @@ -1097,7 +1097,7 @@ def __CrossServerPutInItem(self, packIndex, tagItem, event=["", False, {}]): ## 跨服获得物品 - if packIndex not in [IPY_GameWorld.rptItem, ShareDefine.rptDogzItem]: + if packIndex not in [IPY_GameWorld.rptItem, ShareDefine.rptDogzItem, ShareDefine.rptZhuXianItem]: #GameWorld.DebugLog("跨服获得物品不同步, packIndex=%s" % (packIndex)) return curPlayer = self.__Player @@ -2416,6 +2416,10 @@ if itemType == ChConfig.Def_ItemType_retWing: return __GetAddWingLegendAttr(curItem) + isZhuXianEquip = ItemCommon.GetIsZhuXianEquip(curItem) + if isZhuXianEquip: + return __GetRandLegendAttr(curItem) + itemColor = curItem.GetItemColor() itemClassLV = ItemCommon.GetItemClassLV(curItem) itemQuality = curItem.GetItemQuality() @@ -2514,6 +2518,76 @@ # % (randAttrIDList, curLegAttrIDList, curLegAttrValueList)) return [curLegAttrIDList, curLegAttrValueList] +def __GetRandLegendAttr(curItem): + # 纯随机类型及数值的规则 + + itemType = curItem.GetType() + equipTypeRandGroupDict = IpyGameDataPY.GetFuncEvalCfg("LegendAttrRandRule", 2, {}) # 随机传奇属性类型组配置: {(装备类型1, 装备类型2, ...):[传奇属性类型组1, ...], ...} + if itemType in equipTypeRandGroupDict: + randGroupList = equipTypeRandGroupDict[itemType] + else: + randGroupList = [] + for typeTuple, groupList in equipTypeRandGroupDict.items(): + if not isinstance(typeTuple, tuple): + continue + if itemType in typeTuple: + randGroupList = groupList + break + + if not randGroupList: + GameWorld.ErrLog("该物品类型没有传奇属性!itemType=%s" % itemType) + return + + randLegendAttrIDLsit = [] + legendAttrGroupDict = IpyGameDataPY.GetFuncEvalCfg("LegendAttrRandRule", 1, {}) # 传奇类型组 {1:[传奇属性类型ID组], ...} + for groupType in randGroupList: + if groupType not in legendAttrGroupDict: + GameWorld.ErrLog("没有配置传奇属性组对应传奇属性类型列表! groupType=%s" % groupType) + continue + randLegendAttrIDLsit += legendAttrGroupDict[groupType] + + if not randLegendAttrIDLsit: + return + + itemClassLV = ItemCommon.GetItemClassLV(curItem) + itemQuality = curItem.GetItemQuality() + randCountKey = (itemClassLV, itemQuality) + randCountDict = IpyGameDataPY.GetFuncEvalCfg("LegendAttrRandRule", 3) # 随机条数: {(阶,星):[随机条数A, 随机条数B]], ...} + if randCountKey not in randCountDict: + GameWorld.ErrLog("没有配置装备阶星对应随机传奇属性条数: itemClassLV=%s, itemQuality=%s" % (itemClassLV, itemQuality)) + return + randCountList = randCountDict[randCountKey] + if not randCountList or len(randCountList) != 2: + return + legAttrCnt = random.randint(randCountList[0], randCountList[1]) + legAttrCnt = min(len(randLegendAttrIDLsit), legAttrCnt) + curLegAttrIDList = random.sample(randLegendAttrIDLsit, legAttrCnt) + curLegAttrValueList = [] + + randValueListDict = IpyGameDataPY.GetFuncEvalCfg("LegendAttrRandRule", 4) # 随机数值: {传奇属性类型:[随机数值1, 数值2, ...], ...} + maxValueMinCountDict = IpyGameDataPY.GetFuncEvalCfg("LegendAttrRandRule", 5) # 保底最大数值条数: {(阶,星):条数, ...], ...} 没配置的默认0 + maxValueMinCount = maxValueMinCountDict.get((itemClassLV, itemQuality), 0) + if legAttrCnt < maxValueMinCount: + GameWorld.ErrLog("传奇属性条数少于保底最大数值条数: itemClassLV=%s, itemQuality=%s, legAttrCnt=%s, maxValueMinCount=%s" + % (itemClassLV, itemQuality, legAttrCnt, maxValueMinCount)) + return + + for i, attrID in enumerate(curLegAttrIDList): + if attrID not in randValueListDict: + GameWorld.ErrLog("传奇属性没有配置随机数值范围或配置错误: attrID=%s" % (attrID)) + return + randValueList = randValueListDict[attrID] + if i < maxValueMinCount: + randValue = max(randValueList) + else: + randValue = random.choice(randValueList) + curLegAttrValueList.append(randValue) + +# GameWorld.DebugLog("itemType=%s,itemClassLV=%s,itemQuality=%s,randLegendAttrIDLsit=%s" % (itemType, itemClassLV, itemQuality, randLegendAttrIDLsit)) +# GameWorld.DebugLog("legAttrCnt=%s,maxValueMinCount=%s" % (legAttrCnt, maxValueMinCount)) +# GameWorld.DebugLog("curLegAttrIDList=%s,curLegAttrValueList=%s" % (curLegAttrIDList, curLegAttrValueList)) + return [curLegAttrIDList, curLegAttrValueList] + def __GetAddWingLegendAttr(curItem): # {阶数:条数, ...} wingLegAttrCntDict = IpyGameDataPY.GetFuncEvalCfg("WingLegendAttrCount") -- Gitblit v1.8.0