hxp
2018-11-06 369e52f7a7b980c882ca322615b1995796fe9223
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3395,8 +3395,7 @@
    
    __AttrName = "%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
    __AttrNameNoline = "Noline_%s" # 参数为ChConfig.Def_Calc_AllAttrType_MAX对应所有属性列表索引
    __NolineAttrList = [ChConfig.TYPE_Calc_AttrSpeed, ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax,
                        ChConfig.TYPE_Calc_AttrMaxHP] # 需要记录的非线性战斗属性
    __NolineAttrList = [ChConfig.TYPE_Calc_AttrSpeed] # 需要记录的非线性战斗属性
    
    ## 初始化
    #  @param self 类实例
@@ -3504,21 +3503,10 @@
        #其他需作为公式参数的系数
        AtkSpeedParameter = fpParam.GetCftAtkSpeed()
        LuckyHitParameter = fpParam.GetCftLuckyHit()
        fpEx = 0
        #装备模块特殊处理
        if self.mfpType == ShareDefine.Def_MFPType_Equip:
            AtkPer = getattr(self, self.__AttrNameNoline % ChConfig.TYPE_Calc_AttrATKMax) * fpParam.GetCftAtkPer() # 攻击百分比系数
            MaxHPPer = getattr(self, self.__AttrNameNoline % ChConfig.TYPE_Calc_AttrMaxHP) * fpParam.GetCftMaxHPPer() # 生命百分比系数
            fpEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 3))
            GameWorld.DebugLog("装备模块攻击生命百分比传奇属性战力: fpEx=%s" % fpEx)
        else:
            AtkPer = 0
            MaxHPPer = 0
            
        #获取策划配置的表格
        FightpowerFormula = IpyGameDataPY.GetFuncCfg("FightpowerFormula")
        totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula)) + fpEx
        totalFightPower = eval(FormulaControl.GetCompileFormula("FightpowerFormula", FightpowerFormula))
        
        #GameWorld.DebugLog("MfpType=%s,FightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
        if totalFightPower > ShareDefine.Def_UpperLimit_DWord:
@@ -6655,12 +6643,24 @@
def GetCalcAttrListValue(curPlayer, funcIndex):
    ## 获取功能点预先计算的所加属性值
    attrList = [{} for _ in range(4)]
    for attrIndex, attrDict in enumerate(attrList):
        for i in xrange(Def_MaxAddAttrTypeCnt):
            attrType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrType % (funcIndex, attrIndex, i))
            if attrType == 0:
                break
            attrDict[attrType] = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrValue % (funcIndex, attrIndex, i))
    if isinstance(funcIndex, int):
        funcIndexList = [funcIndex]
    elif isinstance(funcIndex, list):
        funcIndexList = funcIndex
    else:
        return attrList
    for funcIndex in funcIndexList:
        for attrIndex, attrDict in enumerate(attrList):
            for i in xrange(Def_MaxAddAttrTypeCnt):
                attrType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrType % (funcIndex, attrIndex, i))
                if attrType == 0:
                    break
                attrValue = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CalcAddAttrValue % (funcIndex, attrIndex, i))
                if attrType in attrDict:
                    attrDict[attrType] = attrValue + attrDict[attrType]
                else:
                    attrDict[attrType] = attrValue
    return attrList
## 刷属性时累加功能事先计算好的属性值