#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package CalcNoLineEffect  
 | 
# ¼ÆËã·ÇÏßÐÔBuff  
 | 
#  
 | 
# @author eggxp  
 | 
# @date 2010-4-22  
 | 
# @version 1.5  
 | 
#  
 | 
# @change: "2013-05-17 15:35" Alee ¸ü¸Ä¼ÆË㷽ʽ  
 | 
# @change: "2013-09-06 20:00" hxp ÐÞ¸ÄÕ½¶·Á¦¼ÆËãÂß¼  
 | 
# @change: "2013-10-15 11:40" hxp ÐÞ¸Ä×Öµä»ñȡֵÅÐ¶Ï  
 | 
# @change: "2013-11-13 21:00" Alee Òƶ¯ËٶȶÀÁ¢´¦Àí  
 | 
# @change: "2015-07-29 17:30" hxp É˺¦¼õÃâ¸ÄΪÏßÐÔ  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2015-07-29 17:30"""  
 | 
#---------------------------------------------------------------------  
 | 
import ChConfig  
 | 
import EffGetSet  
 | 
import GameWorld  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
## ¸øÍæ¼ÒÌí¼Ó·ÇÏßÐÔBuffЧ¹û   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param effectDict Ð§¹ûÁÐ±í  
 | 
#  @return None  
 | 
def ChangePlayerAttrInNoLineEffectList(curPlayer, effectDict, mfpObjAttrDict=None, isBuffAttr=False):  
 | 
    for key, value in effectDict.items():  
 | 
        if value == 0:  
 | 
            continue  
 | 
          
 | 
        # ¹¦Äܽ»²æÏßÐÔÌáÉýµÄ²»ÔÚÕâÀï´¦Àí£¬ÕâÀïÖ»´¦ÀíÍæ¼Òµ±Ç°ÊôÐԵķÇÏßÐÔÌáÉý  
 | 
        if key in ChConfig.FuncNoLinearAttrDict:  
 | 
            continue  
 | 
          
 | 
        curValue = EffGetSet.GetValueByEffIndex(curPlayer, key)  
 | 
        if curValue == None :  
 | 
            GameWorld.Log("µ÷ÓÃplayer·ÇÏßÐÔÊôÐÔÌõ¼þʧ°Ü,index = %s" % (key) , curPlayer.GetPlayerID())  
 | 
            continue  
 | 
  
 | 
        # buff¶ÔÒÆ¶¯ËٶȵÄÓ°Ïì²»ÔÚÕâÀï¼ÆËã, µ¥¶ÀÌá³öÀ´¶ÀÁ¢¼ÆËã  
 | 
        if isBuffAttr and key == ChConfig.TYPE_Calc_AttrSpeed:  
 | 
            continue  
 | 
          
 | 
#        if key == ChConfig.TYPE_Calc_AttrSpeed:  
 | 
#            # Òƶ¯ËÙ¶ÈÔÝû×öÕ½¶·Á¦Í³¼Æ£¬Èç¹ûÐèÒª£¬¿É²ÎÕÕÉ˺¦ÎüÊÕÖ±½Ó¼ÓÉÏÊýÖµ£¬²»×öÌØÊâ´¦Àí  
 | 
#            # ËÙ¶ÈÌØÊâ´¦Àí, ¶ÀÁ¢´¦Àí ²»Ë¢ÊôÐÔ  
 | 
#            #EffGetSet.SetValueByEffIndex(curPlayer, key, curValue * ChConfig.Def_MaxRateValue / max(100, ChConfig.Def_MaxRateValue + value))  
 | 
#            continue          
 | 
##        elif key == ChConfig.TYPE_Calc_AttrDamReduce:  
 | 
##            if mfpObjAttrDict:  
 | 
##                for mfpObj, attrDict in mfpObjAttrDict.items():  
 | 
##                    #if not attrDict.has_key(key): # Èç¹û¸ÃÄ£¿éûÓÐÔö¼Ó¸ÃÊôÐÔ£¬ÔòÌø¹ý  
 | 
##                    if key not in attrDict: # Èç¹û¸ÃÄ£¿éûÓÐÔö¼Ó¸ÃÊôÐÔ£¬ÔòÌø¹ý  
 | 
##                        continue  
 | 
##                    curMValue = attrDict[key]  
 | 
##                    # ¸ø¶ÔӦģ¿éÀÛ¼ÓÉÏ·ÇÏßÐÔÔö¼ÓµÄÕ½¶·ÊôÐÔÖµ£¬¼ÆËãÕ½¶·Á¦Ê±¿ÉÖ±½ÓÓþßÌåÊýÖµ£¬²»×öË¥¼õ´¦Àí  
 | 
##                    mfpObj.AddCalcMFPAttr(key, curMValue)  
 | 
##                      
 | 
##            tmpValue = curValue + value - curValue * value / ChConfig.Def_MaxRateValue  
 | 
##            # Ë¥¼õËã·¨  
 | 
##            EffGetSet.SetValueByEffIndex(curPlayer, key, tmpValue)  
 | 
#        else:  
 | 
        if mfpObjAttrDict:  
 | 
            for mfpObj, attrDict in mfpObjAttrDict.items():  
 | 
                #if not attrDict.has_key(key): # Èç¹û¸ÃÄ£¿éûÓÐÔö¼Ó¸ÃÊôÐÔ£¬ÔòÌø¹ý  
 | 
                if key not in attrDict: # Èç¹û¸ÃÄ£¿éûÓÐÔö¼Ó¸ÃÊôÐÔ£¬ÔòÌø¹ý  
 | 
                    continue  
 | 
                curMValue = attrDict[key]  
 | 
                curMAddValue = curValue * curMValue / ChConfig.Def_MaxRateValue # Ïà¶ÔÔö¼ÓÖµ  
 | 
                mfpObj.AddCalcMFPAttr(key, curMAddValue) # ¸ø¶ÔӦģ¿éÀÛ¼ÓÉÏ·ÇÏßÐÔÔö¼ÓµÄÕ½¶·ÊôÐÔÖµ  
 | 
                  
 | 
        EffGetSet.SetValueByEffIndex(curPlayer, key, curValue * (ChConfig.Def_MaxRateValue + value) / ChConfig.Def_MaxRateValue)  
 | 
      
 | 
    return  
 | 
  
 | 
  
 | 
## ¸øNPCÌí¼Ó·ÇÏßÐÔBuffЧ¹û  
 | 
#  @param curNPC µ±Ç°NPC  
 | 
#  @param effectDict Ð§¹ûÁÐ±í  
 | 
#  @return None  
 | 
def ChangeNPCAttrInNoLineEffectList(curNPC, effectDict):  
 | 
    for key, value in effectDict.items():  
 | 
        if value == 0:  
 | 
            continue  
 | 
          
 | 
        curValue = EffGetSet.GetValueByEffIndex(curNPC, key)  
 | 
        if curValue == None :  
 | 
            GameWorld.Log("µ÷ÓÃNPC·ÇÏßÐÔÊôÐÔÌõ¼þʧ°Ü,index = %s" % (key))  
 | 
            continue  
 | 
          
 | 
        EffGetSet.SetValueByEffIndex(curNPC, key, curValue * (ChConfig.Def_MaxRateValue + value) / ChConfig.Def_MaxRateValue)  
 | 
      
 | 
    return  
 | 
          
 |