#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#  
 | 
##@package Ä£°å30  
 | 
#  
 | 
# @todo: Çå³ýijÀàdebuffÆäÖÐÒ»¸ö, Def_SkillType_Count  
 | 
#  
 | 
# @author: Alee  
 | 
# @date 2018-5-10 ÏÂÎç08:07:10  
 | 
# @version 1.0  
 | 
#  
 | 
# @note:   
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
import SkillCommon  
 | 
import ChConfig  
 | 
import BuffSkill  
 | 
import SkillShell  
 | 
import BaseAttack  
 | 
import GameObj  
 | 
import PlayerControl  
 | 
import IPY_GameWorld  
 | 
import NPCCommon  
 | 
import GameWorld  
 | 
#------------------------------------------------------------------------------   
 | 
  
 | 
  
 | 
  
 | 
#def UseBuff(attacker, defender, curSkill, tick, tagRoundPosX, tagRoundPosY):  
 | 
def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):  
 | 
    if not defender:  
 | 
        return  
 | 
    if not GameWorld.CanHappen(curSkill.GetHappenRate(), ChConfig.Def_MaxRateValue):  
 | 
        #Çå³ýʧ°ÜÒ²´¥·¢CD  
 | 
        return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)  
 | 
      
 | 
    delSuccess = False  
 | 
    # ÓÅÏÈÇåÀíÖ¸¶¨¼¼ÄÜ  
 | 
    mark = curSkill.GetEffect(0).GetEffectValue(1)  
 | 
    theSkillID = mark if mark > 10 else 0  
 | 
    cleanCnt = mark if 0< mark <= 10 else 1  
 | 
    if theSkillID:  
 | 
        if not curSkill.GetEffect(0).GetEffectValue(2):  
 | 
            findBuff, buffManager, buffType, buffSkill = SkillCommon.FindBuffByID(defender, theSkillID)  
 | 
        else:  
 | 
            findBuff, buffManager, buffType, buffSkill = SkillCommon.FindBuffByOwnerEx(defender, theSkillID, attacker.GetID(), attacker.GetGameObjType())  
 | 
        if findBuff:  
 | 
            ownerID, ownerType = findBuff.GetOwnerID(), findBuff.GetOwnerType()  
 | 
              
 | 
            #ɾ³ýBuff  
 | 
            BuffSkill.DoBuffDisApperEx(defender, findBuff, tick)  
 | 
            skillID = buffSkill.GetSkillID()  
 | 
            buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())  
 | 
            SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)  
 | 
            delSuccess = True  
 | 
    else:  
 | 
        # Ä³À༼ÄÜÖеÄÒ»¸ö  
 | 
        for _ in range(cleanCnt):  
 | 
            delResult = ClearBySkillType(curSkill, defender, tick)  
 | 
            if delResult:  
 | 
                delSuccess = True  
 | 
  
 | 
    if not delSuccess:  
 | 
        # Ã»ÓпÉÇå³ýBUFFÒ²½øÈëCD  
 | 
        return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)  
 | 
      
 | 
    #Ë¢ÐÂÊôÐÔ  
 | 
    curObjType = defender.GetGameObjType()  
 | 
    #Íæ¼Ò  
 | 
    if curObjType == IPY_GameWorld.gotPlayer:  
 | 
        #Ë¢ÐÂÍæ¼ÒÊôÐÔ  
 | 
        playerControl = PlayerControl.PlayerControl(defender)  
 | 
          
 | 
        playerControl.RefreshPlayerActionState()  
 | 
        playerControl.RefreshPlayerAttrByBuff()  
 | 
    #NPC  
 | 
    elif curObjType == IPY_GameWorld.gotNPC:  
 | 
        npcControl = NPCCommon.NPCControl(defender)  
 | 
          
 | 
        npcControl.RefreshNPCActionState()  
 | 
        npcControl.RefreshNPCAttrState()  
 | 
          
 | 
    return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)  
 | 
  
 | 
def ClearBySkillType(curSkill, defender, tick):  
 | 
    skillType = curSkill.GetEffect(0).GetEffectValue(0)  
 | 
    if skillType == 0:  
 | 
        # ÎÞÅäÖôú±íÇå³ý¸ºÃæbuffÈÎÒâ1¸ö  
 | 
        skillTypeList = [  
 | 
                           ChConfig.Def_SkillType_LstDepBuff   ,  #³ÖÐø¼õÒæBUFF  4  
 | 
                           ChConfig.Def_SkillType_DepBuff      ,  #¼õÒæBUFF 6  
 | 
                           ChConfig.Def_SkillType_Action       ,  #Ó°ÏìÐÐΪBUFF 14  
 | 
                         ]  
 | 
    else:  
 | 
        skillTypeList = [skillType]  
 | 
      
 | 
    delSuccess = False  
 | 
      
 | 
    for skillType in skillTypeList:  
 | 
          
 | 
        buffType = ChConfig.Def_SkillBuffList.get(skillType)  
 | 
        buffTuple = SkillCommon.GetBuffManagerByBuffType(defender, buffType)  
 | 
        if buffTuple == ():  
 | 
            continue  
 | 
          
 | 
        buffManager = buffTuple[0]  
 | 
        if buffManager.GetBuffCount() == 0:  
 | 
            continue  
 | 
          
 | 
        curBuff = buffManager.GetBuff(0)  
 | 
        ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()  
 | 
          
 | 
        #ɾ³ýBuff  
 | 
        BuffSkill.DoBuffDisApperEx(defender, curBuff, tick)  
 | 
        buffSkill = curBuff.GetSkill()  
 | 
        if not buffSkill:  
 | 
            continue  
 | 
        skillID = buffSkill.GetSkillID()  
 | 
        buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())  
 | 
        SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)  
 | 
        delSuccess = True  
 | 
        break  
 | 
    return delSuccess  
 | 
     
 |