5931 【后端】【1.5.100】诛仙装备开发(诛仙物品背包34、诛仙装备背包35、诛仙装备传奇属性生成规则支持)
9个文件已修改
185 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearPack.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -935,8 +935,10 @@
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 = (
@@ -1745,6 +1747,22 @@
    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 = (
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -359,6 +359,17 @@
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          #坐骑
@@ -368,11 +379,12 @@
                     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],
                      }
@@ -788,13 +800,16 @@
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
@@ -854,6 +869,10 @@
Def_PackCnt_DogzItem = 100
#初始化神兽装备格子数
Def_PackCnt_DogzEquip = 100
#初始化诛仙背包格子数
Def_PackCnt_ZhuXianItem = 100
#初始化诛仙装备格子数
Def_PackCnt_ZhuXianEquip = 12
#初始化装备栏2
Def_PackCnt_Equip2 = 0
#初始化回收站
@@ -1097,6 +1116,8 @@
                                    ShareDefine.rptPet,
                                    ShareDefine.rptDogzItem,
                                    ShareDefine.rptDogzEquip,
                                    ShareDefine.rptZhuXianItem,
                                    ShareDefine.rptZhuXianEquip,
                                    ]
#装备可强化背包列表
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearPack.py
@@ -26,7 +26,7 @@
#  @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:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -1053,31 +1053,6 @@
        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
#
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")
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -478,6 +478,8 @@
    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
@@ -1742,6 +1744,10 @@
    ## 返回是否神兽装备
    return curItem.GetType() in ChConfig.Def_DogzEquiipType
def GetIsZhuXianEquip(curItem):
    ## 返回是否诛仙装备
    return curItem.GetType() in ChConfig.Def_ZhuXianEquiipType
## 返回是否武器
#  @param curItem 当前物品
#  @return None
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -1252,6 +1252,15 @@
    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)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
@@ -262,7 +262,7 @@
    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()):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -935,8 +935,10 @@
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 = (
@@ -1745,6 +1747,22 @@
    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 = (