|  |  | 
 |  |  | def GetTriggerTypeByEffectID(effectID):
 | 
 |  |  |     # 临时配置
 | 
 |  |  |     tdict = {
 | 
 |  |  |              2102:ChConfig.TriggerType_BeAttackOver,   # 被攻击后触发 20
 | 
 |  |  |              2104:ChConfig.TriggerType_LockHP, # 锁血触发技能 63
 | 
 |  |  |              2105:ChConfig.TriggerType_BeLuckyHit, # 被会心一击触发技能 64
 | 
 |  |  |               | 
 |  |  |              4000:ChConfig.TriggerType_BuffState,   # 进入4012的某个状态触发技能 2
 | 
 |  |  |              4001:ChConfig.TriggerType_TagBuffState,   # 目标进入4012的某个状态触发技能 2
 | 
 |  |  |              4002:ChConfig.TriggerType_AddDamagePer,   # 提高增加伤害属性值,计算时 3
 | 
 |  |  | 
 |  |  |              4058:ChConfig.TriggerType_AddBuffOver, # 添加buff之后触发技能 56
 | 
 |  |  |              4059:ChConfig.TriggerType_StormAttackOneByOne, # 类剑刃风暴攻击1对1触发技能  57
 | 
 |  |  |              4060:ChConfig.TriggerType_StormAttackOver, # 类剑刃风暴攻击后触发技能  57
 | 
 |  |  |              4061:ChConfig.TriggerType_AttackOverPassive,  # 攻击(对敌技能)后被动技能被触发在其他被动效果处理后调用,触发顺序原因
 | 
 |  |  |              4062:ChConfig.TriggerType_AttackAddFinalPer, # 增加最终伤害百分比 59
 | 
 |  |  |              4063:ChConfig.TriggerType_SummonDie,   #自身召唤兽死亡触发技能 60
 | 
 |  |  |              4064:ChConfig.TriggerType_GiftReduceCD, # 天赋减少CD9, #CD
 | 
 |  |  |              4065:ChConfig.TriggerType_DamageReducePVP,   # PVP减少伤害
 | 
 |  |  |              4066:ChConfig.TriggerType_AddDamagePer,   # 提高增加伤害属性值,计算时 3
 | 
 |  |  |              4067:ChConfig.TriggerType_ProDefValue, # 神兵护盾值下降时 62
 | 
 |  |  |              4068:ChConfig.TriggerType_LockHP, # 锁血触发技能 63
 | 
 |  |  |              }
 | 
 |  |  |     return tdict.get(effectID, -1) 
 | 
 |  |  |     #===========================================================================
 | 
 |  |  | 
 |  |  |              4518:ChConfig.TriggerType_ForbidenCure, # BUFF类: 禁止治疗 53
 | 
 |  |  |              4519:ChConfig.TriggerType_WillDead,   # BUFF类: 进入濒死状态 25
 | 
 |  |  |              4520:ChConfig.TriggerType_AddLayer, # BUFF类: 目标BUFF层级增加时 52
 | 
 |  |  |              4521:ChConfig.TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
 | 
 |  |  |               | 
 |  |  |              803:ChConfig.TriggerType_BloodShield,  # 血盾
 | 
 |  |  |              806:ChConfig.TriggerType_BloodShield,  # 血盾
 | 
 |  |  |              807:ChConfig.TriggerType_BloodShield,  # 血盾
 | 
 |  |  |              808:ChConfig.TriggerType_BloodShield,  # 血盾
 | 
 |  |  |              }
 | 
 |  |  |     return tdict.get(effectID, -1)
 | 
 |  |  | 
 |  |  |     return GameWorld.GetObj(curHurt.GetObjID(), curHurt.GetObjType())
 | 
 |  |  |         
 | 
 |  |  | 
 | 
 |  |  | # 多种被动技能优先触发释放一个,如被动 血量40%触发无敌技能,血量一定是停留在40%
 | 
 |  |  | # 先锁血,后触发技能 同 DelayUsePassiveTriggerSkill 使用
 | 
 |  |  | def OnPassiveSkillLockHP(attacker, defender, connSkill, triggerType, tick, isEnhanceSkill=False):
 | 
 |  |  |     attacker = FindRealAttacker(attacker)
 | 
 |  |  |     if not attacker:
 | 
 |  |  |         return 0, 0
 | 
 |  |  | 
 | 
 |  |  |     stopPassiveSkill = False   # 被动技能不能再触发被动技能,但可以触发天赋技能
 | 
 |  |  |     if connSkill:
 | 
 |  |  |         if not connSkill.GetFuncType():
 | 
 |  |  |             # 非功能类技能,避免死循环
 | 
 |  |  |             return 0, 0
 | 
 |  |  |         if SkillCommon.isPassiveSkill(connSkill):
 | 
 |  |  |             stopPassiveSkill = True
 | 
 |  |  |          | 
 |  |  |     if SkillCommon.GetUsingPassiveSkill(attacker) and triggerType != ChConfig.TriggerType_BuffState:
 | 
 |  |  |         # 防范被动技能触发的 非被动技能
 | 
 |  |  |         stopPassiveSkill = True
 | 
 |  |  |      | 
 |  |  |     passiveEff = GetPassiveEffManager().GetPassiveEff(attacker)
 | 
 |  |  |     if not passiveEff:
 | 
 |  |  |         return 0, 0
 | 
 |  |  |          | 
 |  |  |     connSkillID = connSkill.GetSkillTypeID() if connSkill else 0
 | 
 |  |  |     skills = passiveEff.GetPassiveSkillsByTriggerType(triggerType, connSkillID)
 | 
 |  |  |     if not skills:
 | 
 |  |  |         return 0, 0
 | 
 |  |  |          | 
 |  |  |     defender = GetPassiveDefender(attacker, defender)
 | 
 |  |  | 
 | 
 |  |  |     # 当前战斗关系 pvp pve
 | 
 |  |  |     battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender)
 | 
 |  |  |     #GameWorld.DebugLog("OnPriorityPassiveSkillTrigger-----------%s-%s"%(skills, battleRelationType))
 | 
 |  |  |      | 
 |  |  |     lockHPPerMax = 0  ## 取有效的最高血量
 | 
 |  |  |     lockHPSkillID = 0
 | 
 |  |  |     for skillTypeID, effectID in skills:
 | 
 |  |  |         if connSkillID == skillTypeID:
 | 
 |  |  |             continue
 | 
 |  |  |         curSkill = attacker.GetSkillManager().FindSkillBySkillTypeID(skillTypeID)
 | 
 |  |  |         if not curSkill:
 | 
 |  |  |             continue
 | 
 |  |  | 
 | 
 |  |  |         if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
 | 
 |  |  |             # 只有天赋才可以再次被触发
 | 
 |  |  |             continue  | 
 |  |  |          | 
 |  |  |         effect = SkillCommon.GetSkillEffectByEffectID(curSkill, effectID)
 | 
 |  |  |         if not effect:
 | 
 |  |  |             continue
 | 
 |  |  | 
 | 
 |  |  |         if SkillCommon.RefreshSkillRemainTime(curSkill, tick):
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         skillBattleType = SkillCommon.GetSkillBattleType(curSkill)
 | 
 |  |  |         if not AttackCommon.CheckBattleRelationType(skillBattleType, battleRelationType):
 | 
 |  |  |             # PK模式的判定
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         pyName = "PassiveSkill_%s" % effectID
 | 
 |  |  |         callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen"))
 | 
 |  |  |         if not callFunc:
 | 
 |  |  |             continue
 | 
 |  |  |         if not callFunc(attacker, defender, effect, curSkill):
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         # 最终取最高值来决定当前生命值,卡血设定
 | 
 |  |  |         if effect.GetEffectValue(0) > lockHPPerMax:
 | 
 |  |  |             lockHPPerMax = effect.GetEffectValue(0)
 | 
 |  |  |             lockHPSkillID = skillTypeID
 | 
 |  |  |          | 
 |  |  |     return lockHPSkillID, lockHPPerMax
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | # 锁血功能的技能 含人物和宠物
 | 
 |  |  | def OnObjsPassiveSkillLockHP(attacker, defender, connSkill, triggerType, tick,):
 | 
 |  |  |     if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
 | 
 |  |  |         return 0
 | 
 |  |  |      | 
 |  |  |     lockHPSkillID, lockHPPerMax = OnPassiveSkillLockHP(attacker, defender, connSkill, triggerType, tick)
 | 
 |  |  |     rolePet = attacker.GetPetMgr().GetFightPet()
 | 
 |  |  |     if rolePet:
 | 
 |  |  |         lockHPSkillIDPet, lockHPPerMaxPet = OnPassiveSkillLockHP(rolePet, defender, connSkill, triggerType, tick)
 | 
 |  |  |      | 
 |  |  |         if lockHPPerMax + lockHPPerMaxPet == 0:
 | 
 |  |  |             # 无触发
 | 
 |  |  |             return 0
 | 
 |  |  |          | 
 |  |  |         # 触发宠物技能标志
 | 
 |  |  |         if lockHPPerMaxPet > lockHPPerMax:
 | 
 |  |  |             rolePet.SetDict(ChConfig.Def_PlayerKey_LockHPSkillID, lockHPSkillIDPet)
 | 
 |  |  |             return lockHPPerMaxPet
 | 
 |  |  |      | 
 |  |  |     if lockHPPerMax == 0:
 | 
 |  |  |         return 0
 | 
 |  |  |      | 
 |  |  |     # 触发人物技能标志
 | 
 |  |  |     attacker.SetDict(ChConfig.Def_PlayerKey_LockHPSkillID, lockHPSkillID)
 | 
 |  |  |     return lockHPPerMax
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | # 从伤血延后到技能结束触发被动技能
 | 
 |  |  | def DelayUsePassiveTriggerSkill(attacker, curSkill, defender, tick):
 | 
 |  |  |     if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     # 检查是宠物还是人物技能
 | 
 |  |  |     skillTypeID = attacker.GetDictByKey(ChConfig.Def_PlayerKey_LockHPSkillID)
 | 
 |  |  |     if not skillTypeID:
 | 
 |  |  |         rolePet = attacker.GetPetMgr().GetFightPet()
 | 
 |  |  |         if not rolePet:
 | 
 |  |  |             return
 | 
 |  |  |         skillTypeID = rolePet.GetDictByKey(ChConfig.Def_PlayerKey_LockHPSkillID)
 | 
 |  |  |         if not skillTypeID:
 | 
 |  |  |             return
 | 
 |  |  |         attacker = rolePet
 | 
 |  |  |         GameWorld.DebugLog("DelayUsePassiveTriggerSkill-----pet")
 | 
 |  |  |      | 
 |  |  |     # 一定要清标志
 | 
 |  |  |     attacker.SetDict(ChConfig.Def_PlayerKey_LockHPSkillID, 0)
 | 
 |  |  |      | 
 |  |  |     curSkill = attacker.GetSkillManager().FindSkillBySkillTypeID(skillTypeID)
 | 
 |  |  |     if not curSkill:
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     GameWorld.DebugLog("DelayUsePassiveTriggerSkill-----skillTypeID-%s"%skillTypeID)
 | 
 |  |  |     # 设置标志避免被动技能触发被动技能, 被动当中可能会触发多种类型技能,故不用isPassiveSkill做屏蔽
 | 
 |  |  |     SkillCommon.SetUsingPassiveSkill(attacker, 1)
 | 
 |  |  |     if not SkillShell.UsePassiveTriggerSkill(attacker, curSkill, defender, tick):
 | 
 |  |  |         # 不管技能是否是否成功都必须进入CD
 | 
 |  |  |         SkillCommon.SetSkillRemainTime(curSkill, PlayerControl.GetReduceSkillCDPer(attacker), tick, attacker)
 | 
 |  |  |          | 
 |  |  |     SkillCommon.SetUsingPassiveSkill(attacker, 0)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | # 灵宠部分技能需要通过主人触发,灵宠自己触发的逻辑依然走 OnPassiveSkillTrigger
 | 
 |  |  | def OnPetPassiveSkillTrigger(attacker, defender, connSkill, triggerType, tick):
 | 
 |  |  |     if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     rolePet = attacker.GetPetMgr().GetFightPet()
 | 
 |  |  |     #无出战宠物
 | 
 |  |  |     if rolePet == None:
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     OnPassiveSkillTrigger(rolePet, defender, connSkill, triggerType, tick)
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | # 被动技能触发释放
 | 
 |  |  | def OnPassiveSkillTrigger(attacker, defender, connSkill, triggerType, tick, isEnhanceSkill=False, skillIDSet=None):
 | 
 |  |  |     attacker = FindRealAttacker(attacker)
 |