| | |
| | | # 灼烧/玄火目标优先
|
| | | elif tagAffect == ChConfig.SkillTagAffect_Burn:
|
| | | atkBackTagFrist = False
|
| | | relativeObj = __GetRelativeObjDefault(batObjMgr, curBatObj, posNum, batLineup)
|
| | | sortObjList = [] # 优先灼烧目标,再对位
|
| | | for aimObj in aimObjList:
|
| | | sortValue = 0
|
| | | buffMgr = aimObj.GetBuffManager()
|
| | | if buffMgr.FindBuffListByState(ChConfig.BatObjState_Burn) or buffMgr.FindBuffListByState(ChConfig.BatObjState_BurnPlus):
|
| | | sortValue = 2
|
| | | elif relativeObj and relativeObj.GetID() == aimObj.GetID():
|
| | | sortValue = 1
|
| | | sortObjList.append([sortValue, aimObj])
|
| | | sortObjList.sort(reverse=True)
|
| | | aimObjList = [s[1] for s in sortObjList]
|
| | | aimObjList = __getBuffStateFirst(batObjMgr, curBatObj, posNum, batLineup, aimObjList, [ChConfig.BatObjState_Burn, ChConfig.BatObjState_BurnPlus])
|
| | | |
| | | # 承伤盾目标优先
|
| | | elif tagAffect == ChConfig.SkillTagAffect_DamShield:
|
| | | atkBackTagFrist = False
|
| | | aimObjList = __getBuffStateFirst(batObjMgr, curBatObj, posNum, batLineup, aimObjList, [ChConfig.BatObjState_DamShield])
|
| | |
|
| | | # 仅焚血(毒奶)目标
|
| | | elif tagAffect == ChConfig.SkillTagAffect_PoisonCure:
|
| | |
| | | aimObjList = aimObjList[:tagCount]
|
| | |
|
| | | return aimObjList
|
| | |
|
| | | def __getBuffStateFirst(batObjMgr, curBatObj, posNum, batLineup, aimObjList, checkStateList):
|
| | | ## 获取处于xxbuff状态优先,然后再对位目标
|
| | | relativeObj = __GetRelativeObjDefault(batObjMgr, curBatObj, posNum, batLineup)
|
| | | sortObjList = [] # 优先灼烧目标,再对位
|
| | | for aimObj in aimObjList:
|
| | | sortValue = 0
|
| | | if aimObj.CheckInState(checkStateList):
|
| | | sortValue = 2
|
| | | elif relativeObj and relativeObj.GetID() == aimObj.GetID():
|
| | | sortValue = 1
|
| | | sortObjList.append([sortValue, aimObj])
|
| | | sortObjList.sort(reverse=True)
|
| | | return [s[1] for s in sortObjList]
|
| | |
|
| | | def CheckChangeTagEff(turnFight, curBatObj, useSkill):
|
| | | ## 技能自身设定强制修改目标,目前暂定优先级最高,无视软控
|
| | |
| | | atkType = useSkill.GetAtkType()
|
| | | GameWorld.DebugLog("__doUseSkill: curID=%s,skillID=%s,atkType=%s" % (curBatObj.GetID(), useSkill.GetSkillID(), atkType))
|
| | |
|
| | | __doStealBuff(turnFight, curBatObj, useSkill)
|
| | | __doHarmSelf(turnFight, curBatObj, useSkill)
|
| | |
|
| | | # 通用攻击
|
| | |
| | | elif atkType == 9:
|
| | | SkillModule_9(turnFight, curBatObj, useSkill)
|
| | |
|
| | | return
|
| | |
|
| | | def __doStealBuff(turnFight, curBatObj, useSkill):
|
| | | ## 施法前偷取buff
|
| | | stealEff = useSkill.GetEffectByID(ChConfig.SkillEff_UseSkillStealBuff)
|
| | | if not stealEff:
|
| | | return
|
| | | buffState = stealEff.GetEffectValue(0) # buff״̬
|
| | | stealCnt = stealEff.GetEffectValue(1) # 偷取个数 0-全部;>0-个数
|
| | | isAll = True if stealCnt == 0 else False
|
| | | |
| | | for tagObj in useSkill.GetTagObjList():
|
| | | if not isAll and stealCnt <= 0:
|
| | | break
|
| | | tagBuffList = tagObj.GetBuffManager().FindBuffListByState(buffState)
|
| | | if not tagBuffList:
|
| | | continue
|
| | | |
| | | if not isAll and len(tagBuffList) > stealCnt:
|
| | | random.shuffle(tagBuffList) # 随机
|
| | | |
| | | for tagBuff in tagBuffList:
|
| | | skillID = tagBuff.GetSkillID()
|
| | | buffOwner = curBatObj
|
| | | GameWorld.DebugLog("使用技能前偷取buff: tagID=%s,tagBuffID=%s,buffSkillID=%s" % (tagObj.GetID(), tagBuff.GetBuffID(), skillID))
|
| | | addBuff = TurnBuff.DoAddBuffBySkillID(turnFight, curBatObj, skillID, buffOwner, useSkill, isSync=False)
|
| | | if not addBuff:
|
| | | continue
|
| | | stealCnt -= 1
|
| | | TurnBuff.CopyBuff(turnFight, curBatObj, addBuff, tagBuff, useSkill, True, refreshTimeLayer=False)
|
| | | TurnBuff.DoBuffDel(turnFight, tagObj, tagBuff, relatedSkill=useSkill)
|
| | | |
| | | return
|
| | |
|
| | | def __doHarmSelf(turnFight, curBatObj, useSkill):
|
| | |
| | |
|
| | | Sync_UseSkill(turnFight, atkObj, useSkill)
|
| | |
|
| | | DoBeAttackResult(turnFight, atkObj, useSkill)
|
| | | DoBeAttackResult(turnFight, atkObj, useSkill, curBuff)
|
| | |
|
| | | # 通知结束标签
|
| | | Sync_TurnFightTag(turnFight, useTag, 1)
|
| | |
| | | __doCostZhanchui(turnFight, curBatObj, useSkill)
|
| | | __doSkillUserAnger(turnFight, curBatObj, useSkill)
|
| | |
|
| | | DoBeAttackResult(turnFight, curBatObj, useSkill, True)
|
| | | DoBeAttackResult(turnFight, curBatObj, useSkill)
|
| | | return
|
| | |
|
| | | def DoCombo(turnFight, atkObj, useSkill):
|
| | |
| | | return useSkill
|
| | | return
|
| | |
|
| | | def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
|
| | | def DoBeAttackResult(turnFight, curObj, useSkill, curBuff=None):
|
| | | '''被攻击结果
|
| | | @param curObj: 施法方或buff归属方
|
| | | @param isUseSkill: 是否是直接使用技能的攻击结果,否则视为持续性的
|
| | | '''
|
| | |
|
| | | #curID = curObj.GetID()
|
| | | isUseSkill = False if curBuff else True # buff的视为持续性的,否则为直接使用技能的攻击结果
|
| | | isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
|
| | | isAngerSkill = SkillCommon.isAngerSkill(useSkill)
|
| | |
|
| | |
| | |
|
| | | Sync_UseSkill(turnFight, atkObj, useSkill)
|
| | |
|
| | | DoBeAttackResult(turnFight, atkObj, useSkill)
|
| | | DoBeAttackResult(turnFight, atkObj, useSkill, curBuff)
|
| | |
|
| | | # 通知结束标签
|
| | | Sync_TurnFightTag(turnFight, useTag, 1)
|