129 【战斗】战斗系统-服务端(词条技能1014 ~ 1019:增加技能初始CD支持,优化技能CD;优化技能属性、buff属性计算;修复纯buff怒技没有同步技能的bug;)
| | |
| | | list EffectValues3; //效果值列表3
|
| | | BYTE TriggerWay3; //触发方式
|
| | | BYTE TriggerSrc3; //有效来源
|
| | | WORD CoolDownInit; //初始冷却时间
|
| | | WORD CoolDownTime; //技能冷却时间
|
| | | list BuffStateLimit; //Buff状态限制组
|
| | | BYTE CurBuffState; //Buff״ֵ̬
|
| | |
| | | def GetEffectCount(self): return len(self._effList)
|
| | | def GetEffectByID(self, effID, triggerWay=0): return self._effDict.get((effID, triggerWay), None)
|
| | | def GetConnSkill(self): return self._ipyData.GetConnSkill()
|
| | | def GetCoolDownInit(self): return self._ipyData.GetCoolDownInit()
|
| | | def GetCoolDownTime(self): return self._ipyData.GetCoolDownTime()
|
| | | def GetBuffStateLimit(self): return self._ipyData.GetBuffStateLimit()
|
| | | def GetCurBuffState(self): return self._ipyData.GetCurBuffState()
|
| | |
| | | def GetEffectCount(self): return self._skillData.GetEffectCount()
|
| | | 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 GetBuffStateLimit(self): return self._skillData.GetBuffStateLimit()
|
| | | def GetCurBuffState(self): return self._skillData.GetCurBuffState()
|
| | |
| | |
|
| | | batLineup.posObjIDDict[posNum] = objID
|
| | | GameWorld.DebugLog("AddBatObj %s,skill=%s" % (GetObjName(batObj), skillManager.GetSkillIDList()))
|
| | | ResetObjSkill(batObj)
|
| | | |
| | | if npcID:
|
| | | #副本指定NPC属性
|
| | | fbNPCInitAttrDict = FBLogic.GetFBNPCInitAttr(curPlayer, turnFight, batObj)
|
| | |
| | | buffMgr.ClearBuff()
|
| | |
|
| | | # 重置技能
|
| | | batObj.ResetSkillUseCnt()
|
| | | ResetObjSkillCD(batObj)
|
| | | ResetObjSkill(batObj)
|
| | |
|
| | | # 重刷属性、被动
|
| | | TurnBuff.RefreshBuffAttr(batObj)
|
| | |
| | |
|
| | | turnFight.ResetOneActionUseSkillCnt()
|
| | | batObj.SetTiming(ChConfig.TurnTiming_Before) # 重置时机到回合前
|
| | | RefreshObjSkillByTurn(batObj) # 优先刷技能CD
|
| | | if turnNum > 1: # 第1回合不用刷新技能
|
| | | RefreshObjSkillByTurn(batObj)
|
| | |
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BigTurnStart)
|
| | |
|
| | |
| | | RefreshObjBuffTime(turnFight, batObj)
|
| | | return
|
| | |
|
| | | def ResetObjSkillCD(batObj):
|
| | | ## 重置所有技能CD
|
| | | def ResetObjSkill(batObj):
|
| | | ## 重置所有技能,一般是每场战斗开始的重置
|
| | | curID = batObj.GetID()
|
| | | batObj.ResetSkillUseCnt() # 使用次数
|
| | | skillManager = batObj.GetSkillManager()
|
| | | for index in range(0, skillManager.GetSkillCount()):
|
| | | curSkill = skillManager.GetSkillByIndex(index)
|
| | | if not curSkill:
|
| | | continue
|
| | | remainTime = curSkill.GetRemainTime()
|
| | | if remainTime <= 0:
|
| | | continue
|
| | | skillID = curSkill.GetSkillID()
|
| | | initCD = curSkill.GetCoolDownInit()
|
| | | if initCD:
|
| | | curSkill.SetRemainTime(initCD)
|
| | | GameWorld.DebugLog("技能初始CD: curID=%s,skillID=%s,initCD=%s" % (curID, skillID, initCD))
|
| | | elif curSkill.GetRemainTime():
|
| | | curSkill.SetRemainTime(0)
|
| | | return
|
| | |
|
| | | def RefreshObjSkillByTurn(batObj):
|
| | | '''按回合刷新技能:默认以大回合统一减1回合,使用技能后设置剩余CD统一默认加1回合,即配置1回合,设置的CD是2
|
| | | '''按回合刷新技能:默认以大回合统一减1回合
|
| | | '''
|
| | | curID = batObj.GetID()
|
| | | skillManager = batObj.GetSkillManager()
|
| | |
| | | continue
|
| | | skillID = curSkill.GetSkillID()
|
| | | preTurnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
|
| | | batObj.ResetSkillTurnUseCnt() # 重置回合使用次数
|
| | | remainTime = curSkill.GetRemainTime()
|
| | | if remainTime <= 0:
|
| | | continue
|
| | |
| | | curSkill.SetRemainTime(remainTime)
|
| | | GameWorld.DebugLog(" 更新技能CD: curID=%s,skillID=%s,remainTime=%s" % (curID, skillID, remainTime))
|
| | |
|
| | | batObj.ResetSkillTurnUseCnt() # 重置回合使用次数,放刷新CD后重置
|
| | | return
|
| | |
|
| | | def RefreshObjBuffTime(turnFight, batObj):
|
| | |
| | | ("list", "EffectValues3", 0),
|
| | | ("BYTE", "TriggerWay3", 0),
|
| | | ("BYTE", "TriggerSrc3", 0),
|
| | | ("WORD", "CoolDownInit", 0),
|
| | | ("WORD", "CoolDownTime", 0),
|
| | | ("list", "BuffStateLimit", 0),
|
| | | ("BYTE", "CurBuffState", 0),
|
| | |
| | | def GetEffectValues3(self): return self.attrTuple[27] # 效果值列表3 list
|
| | | def GetTriggerWay3(self): return self.attrTuple[28] # 触发方式 BYTE
|
| | | def GetTriggerSrc3(self): return self.attrTuple[29] # 有效来源 BYTE
|
| | | def GetCoolDownTime(self): return self.attrTuple[30] # 技能冷却时间 WORD
|
| | | def GetBuffStateLimit(self): return self.attrTuple[31] # Buff状态限制组 list
|
| | | def GetCurBuffState(self): return self.attrTuple[32] # Buff״ֵ̬ BYTE
|
| | | def GetLastTime(self): return self.attrTuple[33] # 持续时间 WORD
|
| | | def GetLayerCnt(self): return self.attrTuple[34] # Buff层数 BYTE
|
| | | def GetLayerMax(self): return self.attrTuple[35] # 最大层数 BYTE
|
| | | def GetBuffRepeat(self): return self.attrTuple[36] # Buff叠加规则 DWORD
|
| | | def GetDispersedLimit(self): return self.attrTuple[37] # 驱散限制 BYTE
|
| | | def GetFightPower(self): return self.attrTuple[38] # 技能战斗力 DWORD |
| | | def GetCoolDownInit(self): return self.attrTuple[30] # 初始冷却时间 WORD
|
| | | def GetCoolDownTime(self): return self.attrTuple[31] # 技能冷却时间 WORD
|
| | | def GetBuffStateLimit(self): return self.attrTuple[32] # Buff状态限制组 list
|
| | | def GetCurBuffState(self): return self.attrTuple[33] # Buff״ֵ̬ BYTE
|
| | | def GetLastTime(self): return self.attrTuple[34] # 持续时间 WORD
|
| | | def GetLayerCnt(self): return self.attrTuple[35] # Buff层数 BYTE
|
| | | def GetLayerMax(self): return self.attrTuple[36] # 最大层数 BYTE
|
| | | def GetBuffRepeat(self): return self.attrTuple[37] # Buff叠加规则 DWORD
|
| | | def GetDispersedLimit(self): return self.attrTuple[38] # 驱散限制 BYTE
|
| | | def GetFightPower(self): return self.attrTuple[39] # 技能战斗力 DWORD |
| | | |
| | | # 武将表 |
| | | class IPY_Hero(): |
| | |
| | | effID = effect.GetEffectID()
|
| | | if effID not in ChConfig.AttrIDList:
|
| | | continue
|
| | | if effect.GetTriggerWay():
|
| | | if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
|
| | | # 技能时仅技能有效
|
| | | continue
|
| | | attrID = effID
|
| | | attrValue = effect.GetEffectValue(0)
|
| | |
| | | effID = effect.GetEffectID()
|
| | | if effID not in ChConfig.AttrIDList:
|
| | | continue
|
| | | if effect.GetTriggerSrc() and effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]:
|
| | | # buff时,不配默认有效,或仅buff有效
|
| | | continue
|
| | | attrID = effID
|
| | | attrValue = (effect.GetEffectValue(0) + buff.GetEffectValueEx(attrID)) * layer
|
| | | calcType = effect.GetEffectValue(1)
|
| | |
| | |
|
| | | objID = curBatObj.GetID()
|
| | |
|
| | | if hasattr(useSkill, "GetRemainTime") and useSkill.GetRemainTime() > 0:
|
| | | GameWorld.DebugLog("技能CD中! skillID=%s,RemainTime=%s" % (skillID, useSkill.GetRemainTime()))
|
| | | return
|
| | | |
| | | buffStateGroups = useSkill.GetBuffStateLimit()
|
| | | if buffStateGroups:
|
| | | limitState = curBatObj.IsInBuffStateGroup(buffStateGroups)
|
| | |
| | |
|
| | | def IsNeedSyncSkill(useSkill):
|
| | | ## 使用需要同步B427使用技能
|
| | | return useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]
|
| | | if useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]:
|
| | | return True
|
| | | if useSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_TurnNormaSkill, ChConfig.Def_SkillFuncType_AngerSkill]:
|
| | | return True
|
| | | return False
|
| | |
|
| | | def GetSkillTags(turnFight, curBatObj, useSkill):
|
| | | ## 获取技能目标
|
| | |
| | | #GameWorld.DebugLog("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
|
| | | return
|
| | |
|
| | | if hasattr(passiveSkill, "GetRemainTime") and passiveSkill.GetRemainTime() > 0:
|
| | | #GameWorld.DebugLog("被动触发技能CD中! skillID=%s,RemainTime=%s" % (passiveSkillID, passiveSkill.GetRemainTime()))
|
| | | return
|
| | | |
| | | isOK = False
|
| | | # 继承主技能目标
|
| | | if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
|