129 【战斗】战斗系统-服务端(关羽全部技能; 优化技能冷却时间字段对触发被动效果的技能也有效;)
| | |
| | | self._ipyData = ipyData
|
| | | self._skillID = self._ipyData.GetSkillID()
|
| | | self._skillTypeID = self._ipyData.GetSkillTypeID()
|
| | | self._cdTime = self._ipyData.GetCoolDownTime()
|
| | | self._effList = [] # [Effect, ...]
|
| | | self._effDict = {} # {(effID, triggerWay):Effect, ...} ,确保唯一,同个技能可能配置相同的效果ID
|
| | | for num in range(1, 1 + 3):
|
| | |
| | | return self._effDict[(effID, triggerWay)]
|
| | | def GetConnSkill(self): return self._ipyData.GetConnSkill()
|
| | | def GetCoolDownInit(self): return self._ipyData.GetCoolDownInit()
|
| | | def GetCoolDownTime(self): return self._ipyData.GetCoolDownTime()
|
| | | def GetCoolDownTime(self): return self._cdTime
|
| | | def GetBuffStateLimit(self): return self._ipyData.GetBuffStateLimit()
|
| | | def GetCurBuffState(self): return self._ipyData.GetCurBuffState()
|
| | | def GetLastTime(self): return self._ipyData.GetLastTime() # 持续时间
|
| | |
| | | self._skillData = SklllData(ipyData)
|
| | | self._skillID = self._skillData.GetSkillID()
|
| | | self._skillTypeID = self._skillData.GetSkillTypeID()
|
| | | self._cdTime = self._skillData.GetCoolDownTime()
|
| | | self._remainTime = 0
|
| | | self._batType = 0 # 战斗类型,普通、连击、反击、追击等
|
| | | self._tagObjList = [] # 本次技能主要目标列表 [BatObj, ...]
|
| | |
| | | def GetEffectByID(self, effID, triggerWay=0): return self._skillData.GetEffectByID(effID, triggerWay)
|
| | | def GetConnSkill(self): return self._skillData.GetConnSkill()
|
| | | def GetCoolDownInit(self): return self._skillData.GetCoolDownInit()
|
| | | def GetCoolDownTime(self): return self._skillData.GetCoolDownTime()
|
| | | def GetCoolDownTime(self): return self._cdTime
|
| | | def GetBuffStateLimit(self): return self._skillData.GetBuffStateLimit()
|
| | | def GetCurBuffState(self): return self._skillData.GetCurBuffState()
|
| | | def GetLastTime(self): return self._skillData.GetLastTime() # 持续时间
|
| | |
| | | passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
|
| | | if not passiveSkill:
|
| | | return
|
| | | return TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Pursue, bySkill=connSkill, byBuff=connBuff)
|
| | | return TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Pursue, bySkill=connSkill, byBuff=connBuff, **kwargs)
|
| | |
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
|
| | | effSkill = effBuff.GetSkillData().GetIpyData()
|
| | |
| | | if not effSkill:
|
| | | return
|
| | |
|
| | | if effSkill.GetCoolDownTime():
|
| | | if hasattr(effSkill, "GetRemainTime") and effSkill.GetRemainTime() > 0:
|
| | | GameWorld.DebugLogEx("被动效果技能CD中! effSkillID=%s,RemainTime=%s", skillID, effSkill.GetRemainTime())
|
| | | return
|
| | | kwargs["byEffSkill"] = effSkill # 目前用于触发被动技能时,该效果技能提前先设置CD,防止嵌套触发时CD后置才设置,如关羽的怒技追击
|
| | | |
| | | kwargs["byTriggerWay"] = triggerWay
|
| | | for effID in effIDList:
|
| | | curEffect = effSkill.GetEffectByID(effID, triggerWay)
|
| | |
| | | callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoSkillEffectLogic"))
|
| | | if not callFunc:
|
| | | return
|
| | | callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
|
| | | isOK = callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
|
| | | if not isOK:
|
| | | return
|
| | | |
| | | cdTime = effSkill.GetCoolDownTime()
|
| | | if cdTime:
|
| | | # 非触发技能的在后面设置CD即可
|
| | | if hasattr(effSkill, "GetRemainTime"):
|
| | | effSkill.SetRemainTime(cdTime)
|
| | | |
| | | return
|
| | |
|
| | | def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None, connBuff=None, **kwargs):
|
| | |
| | | else:
|
| | | __doUseSkill(turnFight, curBatObj, useSkill)
|
| | |
|
| | | DoAttackResult(turnFight, curBatObj, useSkill)
|
| | | DoAttackResult(turnFight, curBatObj, useSkill, **kwargs)
|
| | |
|
| | | if useTag:
|
| | | Sync_TurnFightTag(turnFight, useTag, 1)
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def DoAttackResult(turnFight, curBatObj, useSkill):
|
| | | def DoAttackResult(turnFight, curBatObj, useSkill, **kwargs):
|
| | | '''执行攻击结果
|
| | | @param curBatObj: 施法方或buff归属方
|
| | | '''
|
| | |
| | | if useSkill.GetCoolDownTime():
|
| | | useSkill.SetRemainTime(useSkill.GetCoolDownTime())
|
| | |
|
| | | if "byEffSkill" in kwargs:
|
| | | byEffSkill = kwargs["byEffSkill"]
|
| | | cdTime = byEffSkill.GetCoolDownTime()
|
| | | if cdTime:
|
| | | if hasattr(byEffSkill, "GetRemainTime"):
|
| | | byEffSkill.SetRemainTime(cdTime)
|
| | | GameWorld.DebugLogEx("提前设置效果技能触发后CD,防止嵌套循环触发! effSkillID=%s,cdTime=%s", byEffSkill.GetSkillID(), cdTime)
|
| | | |
| | | __doCostZhanchui(turnFight, curBatObj, useSkill) # 先扣除再同步技能
|
| | |
|
| | | # 需先技能使用 - 前端按顺序优先表现技能释放内容,前端需要动作或有伤血则通知
|