#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Skill.GameBuffs.BuffProcess_830  
 | 
#  
 | 
# @todo:Ѫ°ü³ÖÐø¶¨Ê±»ØÑª´¥·¢µÄbuffÂ߼ʵÏÖ  
 | 
# @author hxp  
 | 
# @date 2014-07-03  
 | 
# @version 1.5  
 | 
#  
 | 
# @change: "2015-03-04 20:00" hxp ±»¶¯¼¼ÄÜÔö¼Ó²¹ÑªÐ§¹û  
 | 
# @change: "2016-11-03 20:30" xdh ËÀÍö²»»ØÑª  
 | 
# @change: "2016-11-16 20:00" hxp Ôö¼Ó½ûÁÆ×´Ì¬ÏÂÏÞÖÆ  
 | 
# @change: "2016-11-24 16:30" hxp Ôö¼Ó²»¿É»ØÑªµÄµØÍ¼É趨  
 | 
# @change: "2017-02-25 17:00" xdh ÉúÃüÖµµÍÓÚÒ»¶¨±ÈÀýʱ²Å»áʹÓÃÉúÃü¾«»ª  
 | 
#  
 | 
# ÏêϸÃèÊö: Ñª°ü³ÖÐø¶¨Ê±»ØÑª´¥·¢µÄbuffÂ߼ʵÏÖ  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2017-02-25 17:00"""  
 | 
#---------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
import PlayerControl  
 | 
import PassiveBuffEffMng  
 | 
import IPY_GameWorld  
 | 
import SkillCommon  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import GameObj  
 | 
import BuffSkill  
 | 
#---------------------------------------------------------------------  
 | 
#È«¾Ö±äÁ¿  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#Â߼ʵÏÖ  
 | 
## ³ÖÐøÐÔBuff´¦Àí   
 | 
#  @param defender ³ÐÊÜÕß  
 | 
#  @param curBuff µ±Ç°Buff  
 | 
#  @param curEffect BuffЧ¹û  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks ³ÖÐøÐÔBuff´¦Àí, ºÈÒ©Ë®µÄ»Ö¸´Â߼ʱ¼äTICKÀýÍâ   
 | 
def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):  
 | 
      
 | 
    #---¼ì²éBuff¿ÉÐÐÐÔ---  
 | 
    curObjType = defender.GetGameObjType()  
 | 
      
 | 
    #Íæ¼Ò  
 | 
    if curObjType != IPY_GameWorld.gotPlayer:  
 | 
        GameWorld.ErrLog("BuffProcess_830, ÀàÐÍ´íÎó, curObjType = %s" % curObjType)  
 | 
        return  
 | 
  
 | 
    if defender.GetMapID() in ChConfig.CanNotRecoverMapIDList:  
 | 
        #GameWorld.DebugLog("¸ÃµØÍ¼ÎÞ·¨Ê¹ÓÃѪ°ü»Ö¸´!")  
 | 
        return  
 | 
      
 | 
    if GameObj.GetPyPlayerState(defender, ChConfig.Def_PlayerState_LimitAddHP):  
 | 
        #GameWorld.DebugLog("µ±Ç°½ûÁÆ×´Ì¬Ï£¬ÎÞ·¨»ØÑª!")  
 | 
        return  
 | 
      
 | 
    curValue = curBuff.GetValue() # µ±Ç°ÈÝÁ¿  
 | 
      
 | 
    maxRecoverHPPer = curEffect.GetEffectValue(0) # ×î´ó»ØÑª°Ù·Ö±È  
 | 
    maxRecoverHP = curEffect.GetEffectValue(1) # ×î´ó»ØÑª¹Ì¶¨Öµ  
 | 
      
 | 
    curHP = GameObj.GetHP(defender)  
 | 
    maxHP = GameObj.GetMaxHP(defender)  
 | 
      
 | 
    if curHP <= 0 or defender.GetPlayerAction() == IPY_GameWorld.paDie:  
 | 
        #ËÀÍö²»»ØÑª  
 | 
        return  
 | 
    #ÉúÃüÖµµÍÓÚ¸ÃÉèÖÃʱ²Å»áʹÓÃÉúÃü¾«»ª  
 | 
    HPPackagePercent = defender.NomalDictGetProperty(ChConfig.Def_PDict_AutoFightSetting%("HPPackagePercent", 0), 0)  
 | 
    maxCanRecoverHP = max(0, int(maxHP * HPPackagePercent / 100))  
 | 
    if curHP >= maxCanRecoverHP:  
 | 
        return  
 | 
      
 | 
    needRecoverHP = maxCanRecoverHP - curHP # »ØÂúËùÐèÁ¿  
 | 
      
 | 
    #GameWorld.DebugLog("Ѫ°ü×Ô¶¯»ØÑª£¬µ±Ç°Ñª°üÁ¿=%s" % curValue)  
 | 
    #GameWorld.DebugLog("    »ØÂúËùÐèÁ¿=%s" % (needRecoverHP))  
 | 
      
 | 
    # °Ù·Ö±È×î´ó¿É»ØÁ¿  
 | 
    maxRecoverHPByPer = max(0, int(maxHP * maxRecoverHPPer / float(ChConfig.Def_MaxRateValue)))  
 | 
    #GameWorld.DebugLog("    °Ù·Ö±È%s,×î´ó¿É»ØÁ¿=%s,×î´ó¹Ì¶¨Á¿=%s" % (maxRecoverHPPer, maxRecoverHPByPer, maxRecoverHP))  
 | 
      
 | 
    # Êµ¼Ê»ØÑªÁ¿  
 | 
    recoverHP = min(needRecoverHP, (maxRecoverHP + maxRecoverHPByPer))  
 | 
    recoverHP = min(recoverHP, curValue)  
 | 
      
 | 
    #---Ö´Ðлظ´Âß¼---  
 | 
    curSkill = curBuff.GetSkill()  
 | 
    skillTypeID = curSkill.GetSkillTypeID()  
 | 
    SkillCommon.SkillAddHP(defender, skillTypeID, recoverHP)  
 | 
    updValue = max(0, curValue - recoverHP)  
 | 
    #GameWorld.DebugLog("    Êµ¼Ê»ØÑªÁ¿=%s, Ñª°üÊ£Óà=%s" % (recoverHP, updValue))  
 | 
    __UpdateBuffValue(defender, curBuff, curSkill, updValue, tick)  
 | 
          
 | 
    return  
 | 
  
 | 
  
 | 
## ¸üÐÂbuffÈÝÁ¿Öµ   
 | 
#  @param curPlayer Íæ¼Ò  
 | 
#  @param curBuff µ±Ç°Buff  
 | 
#  @param skillTypeID  
 | 
#  @param updValue ¸üÐÂÖµ  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
def __UpdateBuffValue(curPlayer, curBuff, curSkill, updValue, tick):  
 | 
  
 | 
      
 | 
    buffType = SkillCommon.GetBuffType(curSkill)  
 | 
    buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType)  
 | 
    #ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö  
 | 
    if buffTuple == ():  
 | 
        return  
 | 
      
 | 
    buffStateManager = buffTuple[0]  
 | 
      
 | 
    # ÈÝÁ¿Îª¿Õ£¬É¾³ýbuff  
 | 
    if updValue <= 0:  
 | 
        BuffSkill.DelBuffBySkillID(curPlayer, curSkill.GetSkillID(), tick)  
 | 
        GameWorld.DebugLog("    Ñª°üÓÃÍ꣬ɾ³ýѪ°übuff...%s" % curSkill.GetSkillID())  
 | 
        return  
 | 
  
 | 
    skillTypeID = curSkill.GetSkillTypeID()  
 | 
    buffCount = buffStateManager.GetBuffCount()  
 | 
    for index in range(0, buffCount):  
 | 
        curBuff = buffStateManager.GetBuff(index)  
 | 
        buffSkill = curBuff.GetSkill()  
 | 
          
 | 
        if buffSkill.GetSkillTypeID() != skillTypeID:  
 | 
            continue  
 | 
          
 | 
        #GameWorld.DebugLog("    ¸üÐÂѪ°üÁ¿=%s" % updValue)  
 | 
        curBuff.SetValue(updValue)  
 | 
        # Í¨ÖªbuffˢР 
 | 
        buffStateManager.Sync_RefreshBuff(index, curBuff.GetRemainTime())  
 | 
        break  
 | 
      
 | 
    return  
 | 
  
 |