hxp
2019-12-10 ed70a10c9930216ebc72713e37e21cb1d33349e2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py
@@ -30,11 +30,59 @@
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个
@@ -63,42 +111,14 @@
        ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
        
        #删除Buff
        BuffSkill.DoBuffDisApper(defender, curBuff, tick)
        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
    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)
        if buffType == IPY_GameWorld.bfActionBuff:
            playerControl.RefreshPlayerActionState()
            if BuffSkill.CheckBuffRefresh(buffSkill, False):
                playerControl.RefreshPlayerAttrByBuff()
        else:
            playerControl.RefreshPlayerAttrByBuff()
    #NPC
    elif curObjType == IPY_GameWorld.gotNPC:
        npcControl = NPCCommon.NPCControl(defender)
        if buffType == IPY_GameWorld.bfActionBuff:
            npcControl.RefreshNPCActionState()
            if BuffSkill.CheckBuffRefresh(buffSkill, False):
                npcControl.RefreshNPCAttrState()
        else:
            npcControl.RefreshNPCAttrState()
    return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
    return delSuccess