129 【战斗】战斗系统-服务端(张角所有技能;增加触发方式 56 57;优化效果6014支持直接配置首次增加概率;)
| | |
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
| | | addRate = curEffect.GetEffectValue(0)
|
| | | onlyFirstUse = curEffect.GetEffectValue(1) # 是否仅首次释放技能有效
|
| | | firstTimeRate = curEffect.GetEffectValue(1) # 首次释放增加概率万分率
|
| | | skillID = connSkill.GetSkillID() if connSkill else skillkwargs.get("connSkillID", 0)
|
| | | if onlyFirstUse:
|
| | | if firstTimeRate:
|
| | | if not skillID:
|
| | | #GameWorld.DebugLog("没有增加概率的技能ID! %s" % skillkwargs)
|
| | | return
|
| | | useCnt = attacker.GetSkillUseCnt(skillID)
|
| | | if useCnt > 0:
|
| | | GameWorld.DebugLog("技能非首次使用不增加额外概率! skillID=%s,useCnt=%s" % (skillID, useCnt))
|
| | | return
|
| | | |
| | | if useCnt <= 0:
|
| | | addRate = firstTimeRate
|
| | | GameWorld.DebugLogEx("技能首次使用增加额外概率! skillID=%s,useCnt=%s,addRate=%s", skillID, useCnt, addRate)
|
| | | |
| | | failAddRateEx = curEffect.GetEffectValue(2) # 失败次数额外增加概率
|
| | | if failAddRateEx:
|
| | | failCnt = attacker.GetSkillHappenFailCnt(skillID)
|
| | |
| | | addRate = ChConfig.Def_MaxRateValue # 强制增加满概率
|
| | | GameWorld.DebugLog("技能概率失败次数必定成功: mustHappenFailCnt=%s,failCnt=%s,addRate=%s" % (mustHappenFailCnt, failCnt, addRate))
|
| | | elif failCnt > 0:
|
| | | addRate = failAddRateEx * failCnt
|
| | | addRate += failAddRateEx * failCnt
|
| | | GameWorld.DebugLog("技能概率失败次数增加概率: failAddRateEx=%s,failCnt=%s,addRate=%s" % (failAddRateEx, failCnt, addRate))
|
| | |
|
| | | if effBuff:
|
| | |
| | |
|
| | | # 统计伤血,可能单个技能对同一目标造成多次伤害
|
| | | totalHurtValue = 0
|
| | | isSuckHP = False
|
| | | suckObjIDList = [] # 吸血的对象ID列表
|
| | | missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
|
| | | stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
|
| | | beHurtObjIDList = [] # 受伤的对象ID列表
|
| | |
| | | if tagObj not in caorenProtectList:
|
| | | caorenProtectList.append(tagObj)
|
| | |
|
| | | if hurtObj.GetSuckHP() > 0:
|
| | | isSuckHP = True
|
| | | |
| | | if hurtObj.GetSuckHP() > 0 and not hurtObj.HaveHurtType(ChConfig.HurtAtkType_PoisonCureSuck):
|
| | | if hurtObjID not in suckObjIDList:
|
| | | suckObjIDList.append(hurtObjID)
|
| | | |
| | | # 判断自己死亡,因为反弹、平摊伤害的原因,有可能自己干死自己
|
| | | if curObj.IsAlive() and curObj.GetHP() <= 0:
|
| | | if curObj.CanNoDead():
|
| | |
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
|
| | | if stunObjIDList:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
|
| | | if isSuckHP:
|
| | | if suckObjIDList:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
|
| | |
|
| | | # 结算副本相关的攻击结果,仅主动发起玩家阵容武将触发
|
| | |
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
|
| | |
|
| | | # 吸血
|
| | | if tagID in suckObjIDList:
|
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuckHP, curObj, connSkill=useSkill)
|
| | | |
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
|