| | |
| | | if CanCombo(curBatObj, tagObj):
|
| | | # 连击根据技能目标配置逻辑重新选择目标
|
| | | GameWorld.DebugLog("● %s 【连击】" % TurnAttack.GetObjName(curBatObj))
|
| | | DoHeroSpecialty(turnFight, curBatObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
|
| | | OnUseSkill(turnFight, curBatObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
|
| | |
|
| | | return
|
| | |
| | | return
|
| | |
|
| | | tagID = tagObj.GetID()
|
| | | if tagObj.GetAtkDistType() != ChConfig.AtkDistType_Short:
|
| | | GameWorld.DebugLog("非近战不可反击! tagID=%s" % tagID)
|
| | | canAtkbackDictTypeList = IpyGameDataPY.GetFuncEvalCfg("ParryCfg", 2)
|
| | | if tagObj.GetAtkDistType() not in canAtkbackDictTypeList:
|
| | | GameWorld.DebugLog("该远近类型武将不可反击! tagID=%s,AtkDistType=%s not in %s" % (tagID, tagObj.GetAtkDistType(), canAtkbackDictTypeList))
|
| | | return
|
| | |
|
| | | canAtkBack = False
|
| | |
| | | useSkill = skillManager.GetSkillByIndex(index)
|
| | | if not useSkill:
|
| | | continue
|
| | | if useSkill.GetFuncType() == ChConfig.Def_SkillFuncType_AtkbackSkill:
|
| | | if useSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaSkill: # 使用普攻反击
|
| | | GameWorld.DebugLog("可以反击! tagID=%s" % tagID)
|
| | | return useSkill
|
| | | return
|
| | |
| | | TurnAttack.SetObjKilled(turnFight, curObj)
|
| | |
|
| | | # 统计伤血,可能单个技能对同一目标造成多次伤害
|
| | | isSuperHit, isStun, isSuckHP = False, False, False
|
| | | missObjIDList = []
|
| | | for hurtObj in useSkill.GetHurtObjList():
|
| | | hurtObjID = hurtObj.GetObjID()
|
| | |
| | | __doSkillHurtAnger(tagObj, hurtObj.GetLostHP(), useSkill)
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_Miss):
|
| | | missObjIDList.append(hurtObjID)
|
| | | |
| | | DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Miss, relatedSkillID)
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_Parry):
|
| | | DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Parry, relatedSkillID)
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_SuperHit):
|
| | | isSuperHit = True
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_Stun):
|
| | | isStun = True
|
| | | if hurtObj.GetSuckHP() > 0:
|
| | | isSuckHP = True
|
| | | # 群攻只触发一次特长
|
| | | if isSuperHit:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
|
| | | if isStun:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
|
| | | if isSuckHP:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
|
| | | |
| | | # 结算副本相关的攻击结果,仅主动发起玩家阵容武将触发
|
| | | curPlayer = turnFight.curPlayer
|
| | | if curPlayer and curObj and curObj.GetOwnerID() == curPlayer.GetPlayerID():
|
| | |
| | | ## 技能释放者怒气相关
|
| | | if SkillCommon.isAngerSkill(useSkill):
|
| | | curBatObj.SetXP(0)
|
| | | elif SkillCommon.isTurnNormalSkill(useSkill):
|
| | | elif SkillCommon.isTurnNormalSkill(useSkill) and useSkill.GetBatType() == ChConfig.TurnBattleType_Normal:
|
| | | addXP = IpyGameDataPY.GetFuncCfg("AngerXP", 3)
|
| | | AddTurnFightXP(curBatObj, addXP, "skillID:%s" % useSkill.GetSkillID())
|
| | | return
|
| | |
| | | updXP = curXP + addXP
|
| | | gameObj.SetXP(updXP)
|
| | | GameWorld.DebugLog(" 更新XP: curID=%s,curXP=%s,addXP=%s,updXP=%s,reason=%s" % (gameObj.GetID(), curXP, addXP, updXP, reason))
|
| | | return
|
| | |
|
| | | def DoHeroSpecialty(turnFight, gameObj, specialty, relatedSkillID=0):
|
| | | ## 执行武将特长
|
| | | if gameObj.GetSpecialty() != specialty:
|
| | | return
|
| | | specialtyAddXPDict = IpyGameDataPY.GetFuncEvalCfg("AngerXP", 5, {})
|
| | | if str(specialty) not in specialtyAddXPDict:
|
| | | return
|
| | | addXP = specialtyAddXPDict[str(specialty)]
|
| | | curXP = gameObj.GetXP()
|
| | | updXP = curXP + addXP
|
| | | gameObj.SetXP(updXP, False)
|
| | | GameWorld.DebugLog(" 特长加XP: curID=%s,curXP=%s,addXP=%s,updXP=%s,特性=%s" % (gameObj.GetID(), curXP, addXP, updXP, specialty))
|
| | | Sync_PropertyRefreshView(turnFight, gameObj, ChConfig.AttrID_XP, updXP, addXP, diffType=1, relatedSkillID=relatedSkillID)
|
| | | return
|
| | |
|
| | | def __DoCurSkillEff(turnFight, curObj, useSkill, missObjIDList):
|
| | |
| | | skillID = curSkill.GetSkillID()
|
| | | isTurnNormalSkill = SkillCommon.isTurnNormalSkill(curSkill)
|
| | | isAngerSkill = SkillCommon.isAngerSkill(curSkill)
|
| | | isAtkbackSkill = SkillCommon.isAtkbackSkill(curSkill)
|
| | | isDot = ("damageoftime" in kwargs)
|
| | | angerOverflow = 0 # 怒气溢出值
|
| | |
|
| | |
| | |
|
| | | #calcType = curSkill.GetCalcType() 目前暂时按攻击算伤害,之后可以扩展其他
|
| | |
|
| | | isSuperHit, isParry = False, False
|
| | | isSuperHit, isParry, isStun = False, False, False
|
| | | aSuperDamPer, dSuperDamPerDef = 0, 0
|
| | | if not isDot:
|
| | | isSuperHit = CanSuperHit(atkObj, defObj) # 是否暴击
|
| | | isParry = (isTurnNormalSkill and CanParry(atkObj, defObj)) # 是否格挡,仅针对普攻
|
| | | CanStun(turnFight, atkObj, defObj, curSkill) # 是否击晕
|
| | | isStun = CanStun(turnFight, atkObj, defObj, curSkill) # 是否击晕
|
| | |
|
| | | if isSuperHit:
|
| | | hurtTypes |= pow(2, ChConfig.HurtType_SuperHit)
|
| | |
| | |
|
| | | if ignoreDef:
|
| | | hurtTypes |= pow(2, ChConfig.HurtType_IgnoreDef)
|
| | | |
| | | if isStun:
|
| | | hurtTypes |= pow(2, ChConfig.HurtType_Stun)
|
| | |
|
| | | #参与运算的数值
|
| | | #rand = random.random() #种子数 0~1
|
| | |
| | | elif isAngerSkill:
|
| | | hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 2))
|
| | | GameWorld.DebugLog(" 怒气技能伤害=%s" % (hurtValue))
|
| | | elif isAtkbackSkill:
|
| | | hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 3))
|
| | | GameWorld.DebugLog(" 反击伤害=%s" % (hurtValue))
|
| | | else:
|
| | | hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 4))
|
| | | GameWorld.DebugLog(" 其他伤害=%s" % (hurtValue))
|