| | |
| | | |
| | | # 回合战斗复活类型 |
| | | ( |
| | | RebornType_PetSkill, |
| | | RebornType_ElfSkill, |
| | | ) = range(1, 1 + 2) |
| | | RebornType_PetSkill, # 灵兽复活,包含灵宠自身技能 或 由灵宠触发的技能 |
| | | RebornType_ElfSkill, # 精怪复活 |
| | | RebornType_ShentongSkill, # 神通复活 - 由主角自己触发,灵宠触发的神通技能归为灵宠复活 |
| | | ) = range(1, 1 + 3) |
| | | |
| | | def GetObjName(gameObj): |
| | | objName = gameObj.GetName() |
| | |
| | | # 战斗前初始化,可能会改变攻速,所以先初始化 |
| | | for factionObjList in atkFactionList: |
| | | for gameObj in factionObjList: |
| | | TurnFightObjStartInit(playerID, gameObj, tick) |
| | | if not gameObj: |
| | | continue |
| | | faction = GameObj.GetFaction(gameObj) |
| | | tagGameObj = objB if faction == 1 else objA |
| | | TurnFightObjStartInit(playerID, gameObj, tagGameObj, tick) |
| | | |
| | | #一个回合攻击顺序,为了后续逻辑统一,都是先确定好顺序 |
| | | sortType = 2 # 攻击顺序排序方式 |
| | |
| | | continue |
| | | if skill.GetRemainTime(): |
| | | continue |
| | | isPetTrigger, triggerPet = GetTriggerRebornPet(gameObj, skill) # 可能由灵宠触发的 |
| | | if isPetTrigger: |
| | | if triggerPet: |
| | | return RebornType_PetSkill, triggerPet, skill |
| | | continue |
| | | if not CheckRoleStateCanUseRebornSkill(gameObj, skill): |
| | | continue |
| | | if skill.GetFuncType() == ChConfig.Def_SkillFuncType_ElfSkill: |
| | | return RebornType_ElfSkill, skill |
| | | if skill.GetFuncType() == ChConfig.Def_SkillFuncType_ShentongSkill: |
| | | return RebornType_ShentongSkill, skill |
| | | |
| | | # 检查是否有灵宠复活技能 |
| | | for index in range(gameObj.GetSummonCount()): |
| | |
| | | #GameWorld.DebugLog(" 没有可以复活的方式!") |
| | | return |
| | | |
| | | def GetTriggerRebornPet(gameObj, skill): |
| | | ## 获取灵宠触发的复活信息 |
| | | # @return: 是否由灵宠触发, 触发的灵宠实例 |
| | | isPetTrigger, triggerPet = False, None |
| | | if SkillShell.GetSkillAffectTag(skill) != ChConfig.Def_UseSkillTag_SummonMaster: |
| | | return isPetTrigger, triggerPet |
| | | |
| | | isPetTrigger = True |
| | | for index in range(gameObj.GetSummonCount()): |
| | | curSummonNPC = gameObj.GetSummonNPCAt(index) |
| | | if not curSummonNPC: |
| | | continue |
| | | if PetControl.IsPetNPC(curSummonNPC): |
| | | triggerPet = curSummonNPC |
| | | break |
| | | return isPetTrigger, triggerPet |
| | | |
| | | def CheckRoleStateCanUseRebornSkill(gameObj, skill): |
| | | ## 检查主角当前状态是否可以使用复活技能 |
| | | |
| | | # 暂时默认可以,寻道冰冻状态不可以 |
| | | return True |
| | | |
| | | def DoReborn(gameObj, hpPer=ChConfig.Def_MaxRateValue): |
| | | ## 执行复活 |
| | | rebornTypeInfo = GetRebornTypeInfo(gameObj) |
| | |
| | | hpPer = skill.GetEffect(0).GetEffectValue(0) |
| | | rebornValue1 = petNPC.GetID() |
| | | rebornValue2 = skill.GetSkillID() |
| | | elif rebornType == RebornType_ElfSkill: |
| | | elif rebornType in [RebornType_ElfSkill, RebornType_ShentongSkill]: |
| | | skill = rebornTypeInfo[1] |
| | | skill.SetRemainTime(skill.GetCoolDownTime()) |
| | | hpPer = skill.GetEffect(0).GetEffectValue(0) |
| | |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightTimeline, turnNum * 100 + actionNum) |
| | | return |
| | | |
| | | def TurnFightObjStartInit(playerID, gameObj, tick): |
| | | def TurnFightObjStartInit(playerID, gameObj, tagObj, tick): |
| | | ## 回合制战斗实例初始化 |
| | | if not gameObj: |
| | | return |
| | |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnAtkAddXPCount, 0) |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnXPFullTimeline, 0) |
| | | |
| | | PassiveBuffEffMng.OnPassiveSkillTrigger(gameObj, tagObj, None, ChConfig.TriggerType_TurnFightStart, tick) |
| | | |
| | | __logGameObjAttr(gameObj) |
| | | return |
| | | |
| | |
| | | def AddTurnObjHurtValue(curObj, tagObj, hurtType, hurtValue, lostHP, curSkill=None): |
| | | if not curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline): |
| | | return |
| | | curID = curObj.GetID() |
| | | tagID = tagObj.GetID() |
| | | skillID = curSkill.GetSkillID() if curSkill else 0 |
| | | totalHurtEx = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurtEx) * ChConfig.Def_PerPointValue |
| | | totalHurt = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurt) + totalHurtEx + hurtValue |
| | | curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurt, totalHurt % ChConfig.Def_PerPointValue) |
| | | curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, totalHurt / ChConfig.Def_PerPointValue) |
| | | GameWorld.DebugLog(" 伤血: curTD=%s,tagID=%s,skillID=%s,hurtType=%s,hurtValue=%s,totalHurt=%s,tagHP=%s" |
| | | % (curObj.GetID(), tagObj.GetID(), skillID, hurtType, hurtValue, totalHurt, GameObj.GetHP(tagObj))) |
| | | totalHurt = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurt) + totalHurtEx |
| | | if curID != tagID: |
| | | totalHurt += hurtValue |
| | | curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurt, totalHurt % ChConfig.Def_PerPointValue) |
| | | curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, totalHurt / ChConfig.Def_PerPointValue) |
| | | GameWorld.DebugLog(" 伤血: curTD=%s,tagID=%s,skillID=%s,hurtType=%s,hurtValue=%s,totalHurt=%s,lostHP=%s,tagHP=%s" |
| | | % (curID, tagID, skillID, hurtType, hurtValue, totalHurt, lostHP, GameObj.GetHP(tagObj))) |
| | | else: |
| | | # 如换血类技能,自残的伤害不算输出 |
| | | GameWorld.DebugLog(" 自残: curTD=%s,tagID=%s,skillID=%s,hurtType=%s,hurtValue=%s,totalHurt=%s,lostHP=%s,curHP=%s" |
| | | % (curID, tagID, skillID, hurtType, hurtValue, totalHurt, lostHP, GameObj.GetHP(curObj))) |
| | | |
| | | if lostHP: |
| | | if lostHP and curID != tagID: |
| | | AddTurnFightXP(tagObj, __GetAddXP_Defender(tagObj, lostHP), "skillID:%s" % skillID) |
| | | AddTurnFightXP(curObj, __GetAddXP_Attack(curObj, curSkill), "skillID:%s" % skillID) |
| | | return |