5931 【后端】【1.5.100】诛仙装备开发(诛仙物品背包34、诛仙装备背包35、诛仙装备传奇属性生成规则支持)
| | |
| | | rptPet, # 宠物背包(用物品存储宠物的数据) 31
|
| | | rptDogzItem, # 神兽物品背包 32
|
| | | rptDogzEquip, # 神兽装备背包 33
|
| | | rptZhuXianItem, # 诛仙物品背包 34
|
| | | rptZhuXianEquip, # 诛仙装备背包 35
|
| | | rptMax, # 最大背包类型数量,放在最后一个
|
| | | ) = range(28, 28 + 7) #C++定义的枚举到27
|
| | | ) = range(28, 28 + 9) #C++定义的枚举到27
|
| | |
|
| | | #虚拟背包类型, 从255递减
|
| | | Def_VPack_TypeList = (
|
| | |
| | | dogzetScute, # 神兽鳞甲
|
| | | ) = range(101, 101 + 5)
|
| | |
|
| | | # 诛仙装备位定义
|
| | | ZhuXianEquipPlace = (
|
| | | zxetCloak, # 诛仙披风 121
|
| | | zxetMask, # 诛仙面具 122
|
| | | zxetGlove, # 诛仙手套 123
|
| | | zxetGlove2, # 诛仙手套 124
|
| | | zxetRuyi, # 诛仙如意 125
|
| | | zxetPendant, # 诛仙吊坠 126
|
| | | zxetRing, # 诛仙戒指 127
|
| | | zxetRing2, # 诛仙戒指 128
|
| | | zxetWeapon1, # 诛仙剑1 129
|
| | | zxetWeapon2, # 诛仙剑2 130
|
| | | zxetWeapon3, # 诛仙剑3 131
|
| | | zxetWeapon4, # 诛仙剑4 132
|
| | | ) = range(121, 121 + 12)
|
| | |
|
| | |
|
| | | # 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
|
| | | EnterFBAskResult = (
|
| | |
| | | Def_ItemType_DogzEquipScute = 123 # 神兽鳞甲
|
| | | Def_ItemType_AddCrossRealmPKCnt = 127 #增加跨服PK次数
|
| | |
|
| | | Def_ItemType_ZXCloak = 128 # 诛仙披风
|
| | | Def_ItemType_ZXMask = 129 # 诛仙面具
|
| | | Def_ItemType_ZXGlove = 130 # 诛仙手套
|
| | | Def_ItemType_ZXRuyi = 131 # 诛仙如意
|
| | | Def_ItemType_ZXPendant = 132 # 诛仙吊坠
|
| | | Def_ItemType_ZXRing = 133 # 诛仙戒指
|
| | | Def_ItemType_ZXWeapon1 = 134 # 诛仙剑1
|
| | | Def_ItemType_ZXWeapon2 = 135 # 诛仙剑2
|
| | | Def_ItemType_ZXWeapon3 = 136 # 诛仙剑3
|
| | | Def_ItemType_ZXWeapon4 = 137 # 诛仙剑4
|
| | |
|
| | | #以下定义物品类型下次删除
|
| | | Def_Item_Type_Horse = 1000036 #坐骑
|
| | |
|
| | |
| | | ShareDefine.rptGatherSoul:'GatherSoulPackCount',
|
| | | }
|
| | |
|
| | | #虚拟背包可以放入的物品字典
|
| | | #背包可以放入的物品字典
|
| | | Def_PackItemTypeList_Dict = {
|
| | | ShareDefine.rptRune:[Def_ItemType_Rune, Def_ItemType_RuneExp],
|
| | | ShareDefine.rptDogzItem:[Def_ItemType_DogzEquipExp, Def_ItemType_DogzEquipHorn, Def_ItemType_DogzEquipEye,
|
| | | Def_ItemType_DogzEquipTooth, Def_ItemType_DogzEquipClaw, Def_ItemType_DogzEquipScute],
|
| | | ShareDefine.rptZhuXianItem:range(Def_ItemType_ZXCloak, Def_ItemType_ZXWeapon4 + 1),
|
| | | ShareDefine.rptGatherSoul:[Def_ItemType_GatherSoulExp, Def_ItemType_GatherSoul, Def_ItemType_GatherSoulCore],
|
| | | }
|
| | |
|
| | |
| | |
|
| | | Def_EquipItemType_TJGAutoEat = xrange(Def_ItemType_retWeapon, Def_ItemType_retShoes + 1)
|
| | | #装备类型
|
| | | Def_EquipItemType = xrange(Def_ItemType_retWeapon, Def_ItemType_DogzEquipScute + 1)
|
| | | Def_EquipItemType = range(Def_ItemType_retWeapon, Def_ItemType_DogzEquipScute + 1) + range(Def_ItemType_ZXCloak, Def_ItemType_ZXWeapon4 + 1)
|
| | |
|
| | | #武器类型
|
| | | Def_WeaponItemType = [Def_ItemType_retWeapon, Def_ItemType_retWeapon2]
|
| | |
|
| | | #神兽装备类型
|
| | | Def_DogzEquiipType = xrange(Def_ItemType_DogzEquipHorn, Def_ItemType_DogzEquipScute + 1)
|
| | |
|
| | | #诛仙装备类型
|
| | | Def_ZhuXianEquiipType = xrange(Def_ItemType_ZXCloak, Def_ItemType_ZXWeapon4 + 1)
|
| | |
|
| | | # 技能造成实质性伤害的类型
|
| | | Def_RealAttack_Type = [Def_HurtType_Normal, # 普通伤害 1
|
| | |
| | | Def_PackCnt_DogzItem = 100
|
| | | #初始化神兽装备格子数
|
| | | Def_PackCnt_DogzEquip = 100
|
| | | #初始化诛仙背包格子数
|
| | | Def_PackCnt_ZhuXianItem = 100
|
| | | #初始化诛仙装备格子数
|
| | | Def_PackCnt_ZhuXianEquip = 12
|
| | | #初始化装备栏2
|
| | | Def_PackCnt_Equip2 = 0
|
| | | #初始化回收站
|
| | |
| | | ShareDefine.rptPet,
|
| | | ShareDefine.rptDogzItem,
|
| | | ShareDefine.rptDogzEquip,
|
| | | ShareDefine.rptZhuXianItem,
|
| | | ShareDefine.rptZhuXianEquip,
|
| | | ]
|
| | |
|
| | | #装备可强化背包列表
|
| | |
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer, playerList):
|
| | | if not playerList:
|
| | | GameWorld.DebugAnswer(curPlayer, "背包类型:1-装备;2-背包;5-仓库;30-寻宝;")
|
| | | GameWorld.DebugAnswer(curPlayer, "背包类型:1-装备;2-背包;5-仓库;30-寻宝;32-神兽;33-神兽装备;;34-诛仙;35-诛仙装备;")
|
| | | return
|
| | |
|
| | | if len(playerList) == 1:
|
| | |
| | | suiteLVList.append(suiteLV)
|
| | | return suiteLVList
|
| | |
|
| | | ## 获取玩家装备预览信息
|
| | | def GetPlayerEquipView(curPlayer):
|
| | | if not curPlayer:
|
| | | return []
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | playerEquipList = []
|
| | | |
| | | playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | #玩家当前可装备的装备类型
|
| | | for equipIndex in xrange(0, playerEquip.GetCount()):
|
| | | |
| | | if equipIndex not in ShareDefine.RoleEquipType:
|
| | | continue
|
| | | |
| | | curEquip = playerEquip.GetAt(equipIndex)
|
| | | if curEquip.IsEmpty():
|
| | | continue
|
| | | |
| | | playerEquipList.append([curEquip.GetItemTypeID(), equipIndex, 0, 0])
|
| | | #curEquip.GetItemStarLV(), 0])
|
| | | |
| | | #GameWorld.DebugLog("玩家装备信息:%s" % str(playerEquipList), playerID)
|
| | | return playerEquipList
|
| | |
|
| | |
|
| | | #// A5 03 全身属性激活 #tagCMActiveAllEquipAttr
|
| | | #
|
| | |
| | |
|
| | | 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
|
| | |
| | | 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()
|
| | |
| | | # % (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")
|
| | |
| | | if GetIsDogzEquip(curItem):
|
| | | # 神兽装备用不同公式
|
| | | value = eval(FormulaControl.GetCompileFormula("EquipGSFormula3", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 3)))
|
| | | elif GetIsZhuXianEquip(curItem):
|
| | | value = eval(FormulaControl.GetCompileFormula("EquipGSFormula4", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 4)))
|
| | | else:
|
| | | value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
|
| | | return value
|
| | |
| | | ## 返回是否神兽装备
|
| | | return curItem.GetType() in ChConfig.Def_DogzEquiipType
|
| | |
|
| | | def GetIsZhuXianEquip(curItem):
|
| | | ## 返回是否诛仙装备
|
| | | return curItem.GetType() in ChConfig.Def_ZhuXianEquiipType
|
| | |
|
| | | ## 返回是否武器
|
| | | # @param curItem 当前物品
|
| | | # @return None
|
| | |
| | | curPack.SetCount(ChConfig.Def_PackCnt_DogzEquip)
|
| | | curPack.Sync_PackCanUseCount()
|
| | |
|
| | | #初始化诛仙物品背包
|
| | | curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem)
|
| | | curPack.SetCount(ChConfig.Def_PackCnt_ZhuXianItem)
|
| | | curPack.Sync_PackCanUseCount()
|
| | | #初始化诛仙装备背包
|
| | | curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
|
| | | curPack.SetCount(ChConfig.Def_PackCnt_ZhuXianEquip)
|
| | | curPack.Sync_PackCanUseCount()
|
| | | |
| | | #初始化临时交换背包
|
| | | curPack = itemManager.GetPack(ShareDefine.rptTempSwap)
|
| | | curPack.SetCount(ChConfig.Def_PackCnt_TempSwap)
|
| | |
| | | itemsDict = {}
|
| | | # 影响战力的物品,新功能注意添加,下次需要加上诛仙塔
|
| | |
|
| | | packList = [IPY_GameWorld.rptEquip, ShareDefine.rptPet, ShareDefine.rptDogzEquip]
|
| | | packList = [IPY_GameWorld.rptEquip, ShareDefine.rptPet, ShareDefine.rptDogzEquip, ShareDefine.rptZhuXianEquip]
|
| | | for packIndex in packList:
|
| | | curPack = curPlayer.GetItemManager().GetPack(packIndex)
|
| | | for i in range(curPack.GetCount()):
|
| | |
| | | rptPet, # 宠物背包(用物品存储宠物的数据) 31
|
| | | rptDogzItem, # 神兽物品背包 32
|
| | | rptDogzEquip, # 神兽装备背包 33
|
| | | rptZhuXianItem, # 诛仙物品背包 34
|
| | | rptZhuXianEquip, # 诛仙装备背包 35
|
| | | rptMax, # 最大背包类型数量,放在最后一个
|
| | | ) = range(28, 28 + 7) #C++定义的枚举到27
|
| | | ) = range(28, 28 + 9) #C++定义的枚举到27
|
| | |
|
| | | #虚拟背包类型, 从255递减
|
| | | Def_VPack_TypeList = (
|
| | |
| | | dogzetScute, # 神兽鳞甲
|
| | | ) = range(101, 101 + 5)
|
| | |
|
| | | # 诛仙装备位定义
|
| | | ZhuXianEquipPlace = (
|
| | | zxetCloak, # 诛仙披风 121
|
| | | zxetMask, # 诛仙面具 122
|
| | | zxetGlove, # 诛仙手套 123
|
| | | zxetGlove2, # 诛仙手套 124
|
| | | zxetRuyi, # 诛仙如意 125
|
| | | zxetPendant, # 诛仙吊坠 126
|
| | | zxetRing, # 诛仙戒指 127
|
| | | zxetRing2, # 诛仙戒指 128
|
| | | zxetWeapon1, # 诛仙剑1 129
|
| | | zxetWeapon2, # 诛仙剑2 130
|
| | | zxetWeapon3, # 诛仙剑3 131
|
| | | zxetWeapon4, # 诛仙剑4 132
|
| | | ) = range(121, 121 + 12)
|
| | |
|
| | |
|
| | | # 请求进入副本通用检查结果,优先提示的放前面(即索引越大,提示优先级越低)
|
| | | EnterFBAskResult = (
|