#!/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: # ijÀ༼ÄÜÖеÄÒ»¸ö 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