129 【战斗】战斗系统-服务端(诸葛亮觉醒技能,剩最后一个概率未处理;优化效果5013;增加技能目标范围类型 11-继承主技能目标同横排,12-继承主技能目标同纵排;)
| | |
| | | SkillTagAim_MainSkillFriend, # 继承主技能友军 8
|
| | | SkillTagAim_Male, # 男性 9
|
| | | SkillTagAim_Female, # 女性 10
|
| | | ) = range(11)
|
| | | SkillTagAim_MainSkillRow, # 继承主技能目标同横排 11
|
| | | SkillTagAim_MainSkillCol, # 继承主技能目标同纵排 12
|
| | | ) = range(13)
|
| | |
|
| | | # 技能目标 - 细分
|
| | | (
|
| | |
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import TurnSkill
|
| | | import IpyGameDataPY
|
| | | import BattleObj
|
| | | import TurnBuff
|
| | | import GameWorld
|
| | |
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
|
| | | ownerID = effBuff.GetOwnerID()
|
| | |
| | | return
|
| | | effSkill = effBuff.GetSkillData().GetIpyData()
|
| | | skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
|
| | | if not skillID:
|
| | | passiveSkill = effSkill
|
| | | else:
|
| | | passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
|
| | | if not passiveSkill:
|
| | | return
|
| | | delBuff = curEffect.GetEffectValue(1) # 是否删除buff
|
| | | checkTriggerCnt = curEffect.GetEffectValue(2) # 附加验证触发次数达到x次后释放,0不验证
|
| | | if checkTriggerCnt:
|
| | | triggerCnt = effBuff.GetValue3() + 1
|
| | | effBuff.SetValue3(triggerCnt)
|
| | | if triggerCnt < checkTriggerCnt:
|
| | | GameWorld.DebugLogEx("5013触发次数不足不释放! triggerCnt=%s < %s", triggerCnt, checkTriggerCnt)
|
| | | return
|
| | | |
| | | addBatDamPer = curEffect.GetEffectValue(3) # 每次触发额外增加技能增伤
|
| | | if addBatDamPer:
|
| | | addBatDamPer *= max(1, effBuff.GetValue3())
|
| | | GameWorld.DebugLogEx("5013触发次数额外增伤! addBatDamPer=%s", addBatDamPer)
|
| | | |
| | | if delBuff:
|
| | | TurnBuff.DoBuffDel(turnFight, batObj, effBuff, connSkill)
|
| | | |
| | | effectID = curEffect.GetEffectID()
|
| | | effSkillID = effSkill.GetSkillID()
|
| | | return TurnSkill.OnUsePassiveSkill(turnFight, buffOwner, batObj, passiveSkill, connSkill, effSkillID, effectID, connBuff)
|
| | | if not skillID:
|
| | | skillID = effSkillID
|
| | | return TurnSkill.OnUsePassiveSkill(turnFight, buffOwner, batObj, skillID, connSkill, effSkillID, effectID, connBuff, addBatDamPer=addBatDamPer)
|
| | |
| | | if SkillCommon.IsBuff(useSkill):
|
| | | __doAddBuff(turnFight, curBatObj, useSkill, **kwargs)
|
| | | else:
|
| | | __doUseSkill(turnFight, curBatObj, useSkill)
|
| | | __doUseSkill(turnFight, curBatObj, useSkill, **kwargs)
|
| | |
|
| | | DoAttackResult(turnFight, curBatObj, useSkill, **kwargs)
|
| | |
|
| | |
| | |
|
| | | return aimObjList
|
| | |
|
| | | def __getSameRowObjList(tagObj):
|
| | | ## 获取目标对应的同排对象列表,只算活着的
|
| | | |
| | | posNum = tagObj.GetPosNum()
|
| | | inRowNum = ChConfig.GetInRowNum(posNum)
|
| | | inColNum = ChConfig.GetInColNum(posNum)
|
| | | # 优先目标所在纵,为主目标
|
| | | colNumList = range(1, 1 + ChConfig.TurnFightCols)
|
| | | if inColNum in colNumList:
|
| | | colNumList.remove(inColNum)
|
| | | colNumList.insert(0, inColNum)
|
| | | |
| | | row = inRowNum # 目标玩家所在横排
|
| | | |
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | batLineup = tagObj.GetBatLineup()
|
| | | aimObjList = []
|
| | | for col in colNumList:
|
| | | pNum = (row - 1) * ChConfig.TurnFightCols + col
|
| | | if pNum not in batLineup.posObjIDDict:
|
| | | continue
|
| | | tagObjID = batLineup.posObjIDDict[pNum]
|
| | | tagBatObj = batObjMgr.getBatObj(tagObjID)
|
| | | if not tagBatObj.IsAlive():
|
| | | continue
|
| | | aimObjList.append(tagBatObj)
|
| | | |
| | | return aimObjList
|
| | |
|
| | | def __getSameColObjList(tagObj):
|
| | | ## 获取目标对应的同列对象列表,只算活着的
|
| | | |
| | | posNum = tagObj.GetPosNum()
|
| | | inRowNum = ChConfig.GetInRowNum(posNum)
|
| | | inColNum = ChConfig.GetInColNum(posNum)
|
| | | |
| | | rowNumList = range(1, 1 + ChConfig.TurnFightRows)
|
| | | if inRowNum in rowNumList:
|
| | | rowNumList.remove(inRowNum)
|
| | | rowNumList.insert(0, inRowNum)
|
| | | |
| | | col = inColNum # 目标玩家所在纵排
|
| | | |
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | batLineup = tagObj.GetBatLineup()
|
| | | aimObjList = []
|
| | | for row in range(1, 1 + ChConfig.TurnFightRows):
|
| | | pNum = (row - 1) * ChConfig.TurnFightCols + col
|
| | | if pNum not in batLineup.posObjIDDict:
|
| | | continue
|
| | | tagObjID = batLineup.posObjIDDict[pNum]
|
| | | tagBatObj = batObjMgr.getBatObj(tagObjID)
|
| | | if not tagBatObj.IsAlive():
|
| | | continue
|
| | | aimObjList.append(tagBatObj)
|
| | | |
| | | return aimObjList
|
| | |
|
| | | def GetRelativeObj(turnFight, curBatObj):
|
| | | '''获取对位目标,仅用于非技能目标的对位逻辑,如连击、弱疗等相对属性的判断,技能目标统一使用 GetSkillTags
|
| | | '''
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def __doUseSkill(turnFight, curBatObj, useSkill):
|
| | | def __doUseSkill(turnFight, curBatObj, useSkill, **kwargs):
|
| | |
|
| | | atkType = useSkill.GetAtkType()
|
| | | GameWorld.DebugLogEx("__doUseSkill: curID=%s,skillID=%s,atkType=%s", curBatObj.GetID(), useSkill.GetSkillID(), atkType)
|
| | |
| | |
|
| | | # 通用攻击
|
| | | if atkType == 1:
|
| | | SkillModule_1(turnFight, curBatObj, useSkill)
|
| | | SkillModule_1(turnFight, curBatObj, useSkill, **kwargs)
|
| | | # 治疗
|
| | | if atkType == 2:
|
| | | SkillModule_2(turnFight, curBatObj, useSkill)
|
| | |
| | | Sync_PropertyRefreshView(turnFight, curBatObj, ChConfig.AttrID_HP, updHP, diffValue, diffType, skillID, relatedSkillID, hurtTypes)
|
| | | return
|
| | |
|
| | | def SkillModule_1(turnFight, curBatObj, useSkill):
|
| | | def SkillModule_1(turnFight, curBatObj, useSkill, **kwargs):
|
| | | ## 通用攻击,单攻、群攻
|
| | |
|
| | | addPer = 0
|
| | |
| | | addPer = addPerMax
|
| | | GameWorld.DebugLogEx("司马懿特殊潜能技能额外增加比例: frozenCnt=%s,addPer=%s" % (frozenCnt, addPer))
|
| | |
|
| | | addBatDamPer = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddBatDamPerByLayer, useSkill)
|
| | | addBatDamPer = 0
|
| | | if "addBatDamPer" in kwargs:
|
| | | addBatDamPer += kwargs.pop("addBatDamPer", 0)
|
| | | addBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddBatDamPerByLayer, useSkill)
|
| | |
|
| | | # 计算伤害
|
| | | calcHurtResults = []
|
| | |
| | | GameWorld.DebugLogEx("被动触发技能,针对来源友军! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s,byFriendID=%s",
|
| | | effSkillID, effectID, passiveSkillID, bySkillID, byFriendObj.GetID())
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
|
| | | # 继承主技能目标同横排 11
|
| | | elif tagAim == ChConfig.SkillTagAim_MainSkillRow:
|
| | | if not tagObj:
|
| | | return
|
| | | GameWorld.DebugLogEx("被动触发技能,针对目标同排对象! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
|
| | | passiveTagObjList = __getSameRowObjList(tagObj)
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
|
| | | # 继承主技能目标同纵排 12
|
| | | elif tagAim == ChConfig.SkillTagAim_MainSkillCol:
|
| | | if not tagObj:
|
| | | return
|
| | | GameWorld.DebugLogEx("被动触发技能,针对目标同纵对象! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
|
| | | passiveTagObjList = __getSameColObjList(tagObj)
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
|
| | | else:
|
| | | GameWorld.DebugLogEx("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
|