7220 【后端】【2.0】灵器开发1.0版(增加灵器属性表,灵器战力由评分计算,评分由基础属性+灵器属性组成,原翅膀模块改为灵器模块)
10个文件已修改
221 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -10,7 +10,7 @@
    list        Skills;        //被动技能
};
//灵根表 #tagDienstgrad
//灵根表 #tagRolePoint
struct    tagRolePoint
{
@@ -21,6 +21,16 @@
    list        PointQualityIntervalList;        //点数品质进阶属性点区间列表
};
//灵器属性表 #tagLingQiAttr
struct    tagLingQiAttr
{
    BYTE        _ItemID;    //属性ID
    list        LingQiAttrID;        //灵器属性ID
    list        LingQiAttrValue;        //灵器属性数值
    DWORD        LingQiAttrScore;    //灵器属性评分
};
//境界表 #tagRealm
struct    tagRealm
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1344,7 +1344,7 @@
Def_MFPType_Plus, # 强化 2
Def_MFPType_Stone, # 宝石 3
Def_MFPType_LingGen, # 灵根 4
Def_MFPType_Wing, # 翅膀 5
Def_MFPType_LingQi, # 灵器 5
Def_MFPType_Wash, # 洗练 6
Def_MFPType_Pet, # 灵宠 7
Def_MFPType_Horse, # 坐骑 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4344,7 +4344,7 @@
Def_CalcAttrFunc_Plus, # 装备位强化 5
Def_CalcAttrFunc_Stone, # 装备宝石 6
Def_CalcAttrFunc_Wash, # 洗练 7
Def_CalcAttrFunc_Wing, # 翅膀 8
Def_CalcAttrFunc_Wing, # 翅膀 - 废弃 8
Def_CalcAttrFunc_Pet, # 灵宠 9
Def_CalcAttrFunc_Horse, # 坐骑 10
Def_CalcAttrFunc_Prestige, # 境界 11
@@ -4374,12 +4374,13 @@
Def_CalcAttrFunc_MagicWeapon4, # 王者法宝 35
Def_CalcAttrFunc_Coat, # ʱװ 36
Def_CalcAttrFunc_LingQi, # 灵器 37
) = range(38)
Def_CalcAttrFunc_LingQiAttr, # 灵器属性 38
) = range(39)
# 技能功能点列表  - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
# 不计算战力的功能点列表 - 由其他方式计算的战力的功能点,如装备用评分计算
CalcAttrFuncNoFightPowerList = [Def_CalcAttrFunc_Equip, Def_CalcAttrFunc_DogzEquip]
CalcAttrFuncNoFightPowerList = [Def_CalcAttrFunc_Equip, Def_CalcAttrFunc_DogzEquip, Def_CalcAttrFunc_LingQiAttr]
#战斗力分组类型对应功能点属性分类索引列表,并不是一一对应的,有些战斗力类型可由多个功能点组成
#***注意***: 以下功能点需包含上面定义的所有功能点,不然会导致有些属性无法加上
@@ -4389,7 +4390,7 @@
                            ShareDefine.Def_MFPType_Star:[Def_CalcAttrFunc_Star],
                            ShareDefine.Def_MFPType_Plus:[Def_CalcAttrFunc_Plus],
                            ShareDefine.Def_MFPType_Stone:[Def_CalcAttrFunc_Stone],
                            ShareDefine.Def_MFPType_Wing:[Def_CalcAttrFunc_Wing, Def_CalcAttrFunc_LingQi],
                            ShareDefine.Def_MFPType_LingQi:[Def_CalcAttrFunc_LingQi, Def_CalcAttrFunc_LingQiAttr],
                            ShareDefine.Def_MFPType_Wash:[Def_CalcAttrFunc_Wash],
                            ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign, Def_CalcAttrFunc_PetSkill],
                            ShareDefine.Def_MFPType_PetSoul:[Def_CalcAttrFunc_PetSoul],
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PrintFightPower.py
@@ -35,7 +35,7 @@
                   ShareDefine.Def_MFPType_Plus:"强化",
                   ShareDefine.Def_MFPType_Stone:"宝石",
                   ShareDefine.Def_MFPType_Wash:"洗练",
                   ShareDefine.Def_MFPType_Wing:"翅膀",
                   ShareDefine.Def_MFPType_LingQi:"灵器",
                   ShareDefine.Def_MFPType_Pet:"灵宠",
                   ShareDefine.Def_MFPType_Horse:"坐骑",
                   ShareDefine.Def_MFPType_Prestige:"境界",
@@ -64,8 +64,8 @@
                     ChConfig.Def_CalcAttrFunc_Plus:"强化",
                     ChConfig.Def_CalcAttrFunc_Stone:"宝石",
                     ChConfig.Def_CalcAttrFunc_Wash:"洗练",
                     ChConfig.Def_CalcAttrFunc_Wing:"翅膀",
                     ChConfig.Def_CalcAttrFunc_LingQi:"灵器",
                     ChConfig.Def_CalcAttrFunc_LingQiAttr:"灵器属性",
                     ChConfig.Def_CalcAttrFunc_Pet:"灵宠",
                     ChConfig.Def_CalcAttrFunc_Horse:"坐骑",
                     ChConfig.Def_CalcAttrFunc_Prestige:"境界",
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -49,6 +49,13 @@
                        ("list", "PointQualityIntervalList", 0),
                        ),
                "LingQiAttr":(
                        ("BYTE", "ItemID", 1),
                        ("list", "LingQiAttrID", 0),
                        ("list", "LingQiAttrValue", 0),
                        ("DWORD", "LingQiAttrScore", 0),
                        ),
                "Realm":(
                        ("WORD", "Lv", 1),
                        ("DWORD", "NeedLV", 0),
@@ -1504,6 +1511,21 @@
    def GetFightPowerPerPoint(self): return self.FightPowerPerPoint # 每点附加战斗力
    def GetPointQualityAttrDict(self): return self.PointQualityAttrDict # 点数品质进阶增加属性,  {职业:{属性ID:[阶段属性,..],..},..}
    def GetPointQualityIntervalList(self): return self.PointQualityIntervalList # 点数品质进阶属性点区间列表
# 灵器属性表
class IPY_LingQiAttr():
    def __init__(self):
        self.ItemID = 0
        self.LingQiAttrID = []
        self.LingQiAttrValue = []
        self.LingQiAttrScore = 0
        return
    def GetItemID(self): return self.ItemID # 属性ID
    def GetLingQiAttrID(self): return self.LingQiAttrID # 灵器属性ID
    def GetLingQiAttrValue(self): return self.LingQiAttrValue # 灵器属性数值
    def GetLingQiAttrScore(self): return self.LingQiAttrScore # 灵器属性评分
# 境界表
class IPY_Realm():
@@ -4516,6 +4538,8 @@
        self.ipyDienstgradLen = len(self.ipyDienstgradCache)
        self.ipyRolePointCache = self.__LoadFileData("RolePoint", IPY_RolePoint)
        self.ipyRolePointLen = len(self.ipyRolePointCache)
        self.ipyLingQiAttrCache = self.__LoadFileData("LingQiAttr", IPY_LingQiAttr)
        self.ipyLingQiAttrLen = len(self.ipyLingQiAttrCache)
        self.ipyRealmCache = self.__LoadFileData("Realm", IPY_Realm)
        self.ipyRealmLen = len(self.ipyRealmCache)
        self.ipyGodWeaponCache = self.__LoadFileData("GodWeapon", IPY_GodWeapon)
@@ -4980,6 +5004,8 @@
    def GetDienstgradByIndex(self, index): return self.ipyDienstgradCache[index]
    def GetRolePointCount(self): return self.ipyRolePointLen
    def GetRolePointByIndex(self, index): return self.ipyRolePointCache[index]
    def GetLingQiAttrCount(self): return self.ipyLingQiAttrLen
    def GetLingQiAttrByIndex(self, index): return self.ipyLingQiAttrCache[index]
    def GetRealmCount(self): return self.ipyRealmLen
    def GetRealmByIndex(self, index): return self.ipyRealmCache[index]
    def GetGodWeaponCount(self): return self.ipyGodWeaponLen
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -579,13 +579,13 @@
    
    classLV = 0 # 灵器阶默认为0
    allAttrList = [{} for _ in range(4)]
    lingQiAttrList = [{} for _ in range(4)]
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    equipScoreTotal = 0
    lv = curPlayer.GetLV()
    OutOfPrintAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {})
    
    for equipPlace in ChConfig.EquipPlace_LingQi:
        if equipPlace == ShareDefine.retWing:
            PlayerWing.CalcWingAttr(curPlayer)
            continue
        
        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
        if not ipyData:
@@ -600,16 +600,44 @@
            # 过期
            continue
        
        equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
        itemID = curEquip.GetItemTypeID()
        #基础属性效果
        for effIndex in xrange(curEquip.GetEffectCount()):
            curEff = curEquip.GetEffectByIndex(effIndex)
            effID = curEff.GetEffectID()
            if effID == 0:
                break
            PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), allAttrList)
            PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), lingQiAttrList)
            
    #GameWorld.DebugLog("灵器属性: %s" % allAttrList)
        #灵器属性
        lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)
        if lingQiIpyData:
            lingQiAttrIDList = lingQiIpyData.GetLingQiAttrID()
            lingQiAttrValueList = lingQiIpyData.GetLingQiAttrValue()
            for lqIndex, lqAttrID in enumerate(lingQiAttrIDList):
                if str(lqAttrID) in OutOfPrintAttrFormatDict:
                    attrFormat = OutOfPrintAttrFormatDict[str(lqAttrID)]
                    maxOOPValue = lingQiAttrValueList[lqIndex]
                    lqAttrValue = eval(FormulaControl.GetCompileFormula("OutOfPrintAttrFormat_%s" % lqAttrID, attrFormat))
                else:
                    lqAttrValue = lingQiAttrValueList[lqIndex]
                PlayerControl.CalcAttrDict_Type(lqAttrID, lqAttrValue, lingQiAttrList)
        #灵器各部位其他属性
        if equipPlace == ShareDefine.retWing:
            PlayerWing.CalcWingAttrEx(curPlayer, curEquip, allAttrList)
    lqFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_LingQi, lqFightPowerEx)
    #GameWorld.DebugLog("灵器属性1: %s" % allAttrList)
    #GameWorld.DebugLog("灵器属性2: %s" % lingQiAttrList)
    #GameWorld.DebugLog("灵器评分战力: equipScoreTotal=%s, %s" % (equipScoreTotal, lqFightPowerEx))
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQi, allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQiAttr, lingQiAttrList)
    return
def __CalcEquips_Effect(curPlayer, classLV):
@@ -752,9 +780,6 @@
                PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrListEquip)
                #GameWorld.DebugLog("    传奇属性: ID=%s +%s" % (legendAttrID, legendAttrValue))
                __CalcFuncAddEquipAttrPer(equipPlace, legendAttrID, legendAttrValue, equip_addEquipBaseAttrPerList)
        #绝世属性 - 暂不考虑
        #CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
        
        #物品强化属性
        __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, allAttrListPlus, plus_addEquipBaseAttrPerList)
@@ -791,8 +816,6 @@
    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, insideAttrDictStone, "Stone")
    #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, insideAttrDictWash, "Wash")
    
    #保存计算值
    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
    #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
    
@@ -941,68 +964,6 @@
        PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListEquip)
        #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value
        
    return
# 装备绝版属性,随等级变化需在升级再处理
def CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip):
    ## 计算绝版属性
    # 绝版属性ID列表
    OutOfPrintAttrIDList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetOutOfPrintAttrID, i) \
                        for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetOutOfPrintAttrID))]
    # 绝版属性值列表
    OutOfPrintAttrValueList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetOutOfPrintAttrValue, i) \
                           for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetOutOfPrintAttrValue))]
    if not OutOfPrintAttrIDList or len(OutOfPrintAttrIDList) != len(OutOfPrintAttrValueList):
        return
    lv = curPlayer.GetLV()
    OutOfPrintAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {})
    for i, attrID in enumerate(OutOfPrintAttrIDList):
        if str(attrID) not in OutOfPrintAttrFormatDict:
            continue
        attrFormat = OutOfPrintAttrFormatDict[str(attrID)]
        maxOOPValue = OutOfPrintAttrValueList[i]
        value = eval(FormulaControl.GetCompileFormula("OutOfPrintAttrFormat_%s" % attrID, attrFormat))
        GameWorld.DebugLog("加绝版属性: %s +%s" % (attrID, value))
        PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListOutOfPrintEquip)
    return
## 计算装备对基本属性的改变
#  @return None
def CalcEquips_OutOfPrint(curPlayer):
    # 境界装备改版,先屏蔽,之后再处理
    return
    allAttrListOutOfPrintEquip = [{} for _ in range(4)]  # 绝版装备属性 需在等级变化独立计算
    packType = IPY_GameWorld.rptEquip
    playerEquip = curPlayer.GetItemManager().GetPack(packType)
    #玩家当前可装备的装备类型
    for equipIndex in xrange(playerEquip.GetCount()):
        if equipIndex not in ShareDefine.RoleEquipType :
            continue
        # 翅膀属性在翅膀功能单独刷新
        if equipIndex == ShareDefine.retWing:
            continue
        curEquip = playerEquip.GetAt(equipIndex)
        if curEquip.IsEmpty():
            continue
        if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
            # 过期
            continue
        #绝世属性
        CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
    #保存计算值
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
    return
def __CalcAttr_ItemPlus(curPlayer, curEquip, packType, equipIndex, allAttrList, plus_addEquipBaseAttrPerList):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -392,18 +392,19 @@
            break
        attrDict[effectID] = attrDict.get(effectID, 0) + curEffect.GetEffectValue(0)
        
    skillGS = 0
    gsValueEx = 0
    skillGSDict = IpyGameDataPY.GetFuncCfg("EquipGSFormula", 4)
    for i in xrange(curItem.GetAddSkillCount()):
        addSkillID = curItem.GetAddSkill(i)
        if not addSkillID:
            break
        skillGS += skillGSDict.get(str(addSkillID), 0)
        gsValueEx += skillGSDict.get(str(addSkillID), 0)
        
    itemID = curItem.GetItemTypeID()
    classLV = GetItemClassLV(curItem)
    color = curItem.GetItemColor()
    isSuit = 1 if curItem.GetSuiteID() > 0 else 0
    gsParamIpyData = IpyGameDataPY.GetIpyGameData("EquipGSParam", classLV, color, isSuit)
    gsParamIpyData = IpyGameDataPY.GetIpyGameDataNotLog("EquipGSParam", classLV, color, isSuit)
    # 传奇属性
    legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
    legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
@@ -413,6 +414,10 @@
            attrValue = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
            attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
            
    lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID)
    if lingQiIpyData:
        gsValueEx += lingQiIpyData.GetLingQiAttrScore()
    Atk = attrDict.get(ShareDefine.Def_Effect_Atk, 0)
    MinAtk = attrDict.get(ShareDefine.Def_Effect_MinAtk, 0) + Atk
    MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0) + Atk
@@ -489,7 +494,7 @@
        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula3", IpyGameDataPY.GetFuncCfg("EquipGSFormula", 3)))
    else:
        value = eval(FormulaControl.GetCompileFormula("EquipGSFormula", IpyGameDataPY.GetFuncCfg("EquipGSFormula")))
    value += skillGS
    value += gsValueEx
    return value
def GetZhuXianEquipTotalGS(curPlayer):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -4057,7 +4057,7 @@
                PlayerGreatMaster.Sync_GreatMasterFreeSkillPoint(curPlayer)
            # 升级需要执行的游戏功能处理
            GameFuncComm.DoFuncOpenLogic(curPlayer)
            #ChEquip.CalcEquips_OutOfPrint(curPlayer)    # 缓存绝版属性
            ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer) # 灵器属性会随等级成长
            if aftLV%10 == 0:
                # 控制下刷新次数
                PlayerPet.CalcPetItemAddPlayerAttr(curPlayer)   # 宠物有随等级变化的技能
@@ -4247,7 +4247,6 @@
        ChEquip.RefreshPlayerEquipAttribute(curPlayer)
        ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
        #SkillShell.RefreshPlayerBuffOnAttrAddEffect(curPlayer)
        #PlayerWing.CalcWingAttr(curPlayer) # 翅膀暂时算在灵器里面
        PlayerHorse.CalcHorseAttrEx(curPlayer)
        PlayerPrestigeSys.CalcOfficialRankAttr(curPlayer)
        PlayerGodWeapon.CalcGodWeaponAttr(curPlayer)
@@ -4464,7 +4463,6 @@
                           ChConfig.TYPE_Calc_StoneBasePer:funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Stone],
                           ChConfig.TYPE_Calc_RealmBasePer:funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Prestige],
                           ChConfig.TYPE_Calc_HorseAtkPer:funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Horse],
                           ChConfig.TYPE_Calc_WingHPPer:funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Wing],
                           }
        #    3.2 统计各功能之间非线性属性交叉影响累加
        funcCrossAttrPerInfoDict = {} # 百分比交叉影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
@@ -4500,7 +4498,7 @@
        #    3.3 统计所有功能固定属性影响累加
        allFixAttrDict = {} # 固定属性层级总属性基值
        for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
            # 技能模块不算计入功能固定属性、不计战力
            # 技能模块不计入功能固定属性、不计战力
            if funcIndex in ChConfig.CalcAttrFuncSkillList:
                continue
            AddAttrDictValue(allFixAttrDict, funcAttrList[ChConfig.CalcAttr_Battle])
@@ -4532,7 +4530,7 @@
            mfpAttrExDict = {}
            for funcIndex in attrFuncIndexList:
                if funcIndex in ChConfig.CalcAttrFuncSkillList:
                    # 技能模块不算计入功能固定属性、不计战力
                    # 技能模块不计入功能固定属性、不计战力
                    continue
                funcAttrList = funcAttrInfoList[funcIndex]
                funcInsidePerAttrDict = funcInsidePerAttrList[funcIndex] # 功能点内部百分比加成属性
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
@@ -84,7 +84,7 @@
        GameWorld.DebugLog("没有精炼值")
        return
    WingProgressUP(curWing, totalPoint, materialItemDict, curPlayer)
    CalcWingAttr(curPlayer)
    ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_WingRefine, 1)
    return
@@ -278,36 +278,7 @@
#  @param curPlayer 玩家
#  @param allAttrList 属性列表
#  @return None
def CalcWingAttr(curPlayer):
    classLV = 0
    equipPlace = ShareDefine.retWing
    allAttrList = [{} for _ in range(4)]
    curWing = None
    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
    if ipyData:
        curWing = equipPack.GetAt(ipyData.GetGridIndex())
    if not ItemCommon.CheckItemCanUse(curWing):
        #GameWorld.DebugLog("没有穿戴翅膀!")
        PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wing, allAttrList)
        return
    if not ItemCommon.CheckItemCanUseByExpireTime(curWing):
        # 过期
        PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wing, allAttrList)
        return False
    # 物品表固定效果属性
    for effIndex in xrange(curWing.GetEffectCount()):
        curEff = curWing.GetEffectByIndex(effIndex)
        effID = curEff.GetEffectID()
        if effID == 0:
            continue
        PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), allAttrList)
    #GameWorld.DebugLog("翅膀固定属性: %s" % allAttrList)
def CalcWingAttrEx(curPlayer, curWing, allAttrList):
    
    # 精炼属性
    wingAttrIpyData = GetWingRefineAttrData(curWing.GetItemTypeID())
@@ -321,11 +292,6 @@
        for effID, value in fujiaValueDict.items():
            PlayerControl.CalcAttrDict_Type(effID, int(value * rate), allAttrList)
    #GameWorld.DebugLog("    精炼属性: %s" % allAttrList)
    # 传奇属性
    ChEquip.CalcAttr_LegendAttr(curPlayer, curWing, allAttrList)
    #GameWorld.DebugLog("    传奇属性: %s" % allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wing, allAttrList)
    return
 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1344,7 +1344,7 @@
Def_MFPType_Plus, # 强化 2
Def_MFPType_Stone, # 宝石 3
Def_MFPType_LingGen, # 灵根 4
Def_MFPType_Wing, # 翅膀 5
Def_MFPType_LingQi, # 灵器 5
Def_MFPType_Wash, # 洗练 6
Def_MFPType_Pet, # 灵宠 7
Def_MFPType_Horse, # 坐骑 8