| | |
| | | GameWorld.DebugLog("技能使用处于buff状态限制中! skillID=%s,buffStateGroups=%s,limitState=%s" % (skillID, buffStateGroups, limitState))
|
| | | return
|
| | |
|
| | | if CheckSkillUseCntLimit(curBatObj, useSkill):
|
| | | return
|
| | | |
| | | #没有指定目标,则按技能自身的目标逻辑
|
| | | if not tagObjList:
|
| | | tagObjList = GetSkillTags(turnFight, curBatObj, useSkill)
|
| | |
| | | if usePoolSkill:
|
| | | poolMgr.release(useSkill)
|
| | | return True
|
| | |
|
| | | def CheckSkillUseCntLimit(batObj, useSkill):
|
| | | ## 检查技能使用次数是否受限
|
| | | # @return: 是否受限
|
| | | if not hasattr(useSkill, "GetEffectByID"):
|
| | | return
|
| | | effect = useSkill.GetEffectByID(ChConfig.SkillEff_SkillUseCntLimit)
|
| | | if not effect:
|
| | | return
|
| | | useCntLimit = effect.GetEffectValue(0) # 每场战斗最大次数,0不限
|
| | | turnUseCntLimit = effect.GetEffectValue(1) # 每大回合最大次数,0不限
|
| | | |
| | | skillID = useSkill.GetSkillID()
|
| | | if useCntLimit:
|
| | | useCnt = batObj.GetSkillUseCnt(skillID)
|
| | | if useCnt >= useCntLimit:
|
| | | GameWorld.DebugLog("技能每场战斗使用次数受限! skillID=%s,useCnt=%s >= %s" % (skillID, useCnt, useCntLimit))
|
| | | return True
|
| | | |
| | | if turnUseCntLimit:
|
| | | turnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
|
| | | if turnUseCnt >= turnUseCntLimit:
|
| | | GameWorld.DebugLog("技能每大回合使用次数受限! skillID=%s,turnUseCnt=%s >= %s" % (skillID, turnUseCnt, turnUseCntLimit))
|
| | | return True
|
| | | |
| | | return
|
| | |
|
| | | def IsNeedSyncSkill(useSkill):
|
| | | ## 使用需要同步B427使用技能
|
| | |
| | | # 统计伤血,可能单个技能对同一目标造成多次伤害
|
| | | totalHurtValue = 0
|
| | | isSuperHit, isStun, isSuckHP = False, False, False
|
| | | missObjIDList, immuneObjIDList = [], []
|
| | | missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
|
| | | beHurtObjIDList = [] # 受伤的对象ID列表
|
| | | for hurtObj in useSkill.GetHurtObjList():
|
| | | hurtObjID = hurtObj.GetObjID()
|
| | | tagObj = batObjMgr.getBatObj(hurtObjID)
|
| | |
| | |
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_Normal):
|
| | | totalHurtValue += hurtObj.GetHurtHP()
|
| | | |
| | | if hurtObj.GetLostHP() > 0: # 有掉血的
|
| | | if hurtObjID not in beHurtObjIDList:
|
| | | beHurtObjIDList.append(hurtObjID)
|
| | | |
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_Miss):
|
| | | if hurtObjID not in missObjIDList:
|
| | | missObjIDList.append(hurtObjID)
|
| | |
| | | if tagID in effIgnoreObjIDList:
|
| | | continue
|
| | |
|
| | | # 掉血时
|
| | | if tagID in beHurtObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
|
| | | |
| | | # 直接攻击
|
| | | if isAttackDirect:
|
| | | if not triggerOne:
|