129 【战斗】战斗系统-服务端(增加每大回合每武将最大反击次数限制;)
3个文件已修改
27 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -832,6 +832,7 @@
        self._batAttrDict = {} # 实际战斗属性,包含buff层级的实际属性 {attrID:+-value, ...} value可能是负值
        self._skillTempAttrDict = {} # 某次技能释放中临时的属性增减 {attrID:+-value, ...} value可能是负值
        self._kvDict = {} # 自定义kv字典
        self._bigTurnAtkbackCnt = 0 # 大回合累计反击次数
        self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
        self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
        self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
@@ -1063,8 +1064,6 @@
    
    def GetSkillUseCnt(self, skillID): return self._skillUseCntDict.get(skillID, 0) # 单场战斗累计使用次数
    def GetSkillTurnUseCnt(self, skillID): return self._skillTurnUseCntDict.get(skillID, 0) # 单回合累计使用次数
    def ResetSkillTurnUseCnt(self):
        self._skillTurnUseCntDict = {}
    def ResetSkillUseCnt(self):
        self._skillUseCntDict = {}
        self._skillTurnUseCntDict = {}
@@ -1072,6 +1071,14 @@
        self._skillUseCntDict[skillID] = self._skillUseCntDict.get(skillID, 0) + 1
        self._skillTurnUseCntDict[skillID] = self._skillTurnUseCntDict.get(skillID, 0) + 1
        
    def GetBigTurnAtkbackCnt(self): return self._bigTurnAtkbackCnt
    def AddBigTurnAtkbackCnt(self):  self._bigTurnAtkbackCnt += 1
    def ResetBigTurn(self):
        ## 每大回合重置
        self._bigTurnAtkbackCnt = 0
        self._skillTurnUseCntDict = {}
    def GetLastHurtValue(self): return self._lastHurtValue
    def SetLastHurtValue(self, lastHurtValue): self._lastHurtValue = lastHurtValue
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -1574,7 +1574,7 @@
            if turnNum > 1: # 第1回合不用刷新技能
                RefreshObjSkillByBigTurn(batObj)
                RefreshObjByBigTurn(turnFight, batObj)
            batObj.ResetBigTurn() # 每大回合重置
            TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BigTurnStart)
            
    return
@@ -1669,8 +1669,6 @@
        remainTime -= 1
        curSkill.SetRemainTime(remainTime)
        GameWorld.DebugLog("    更新技能CD: curID=%s,skillID=%s,remainTime=%s" % (curID, skillID, remainTime))
    batObj.ResetSkillTurnUseCnt() # 重置回合使用次数,放刷新CD后重置
    return
def RefreshObjByBigTurn(turnFight, batObj):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -998,6 +998,8 @@
        if curBatObj.GetHP() < 0:
            curBatObj.SetHP(0)
            
    if useSkill.GetBatType() == ChConfig.TurnBattleType_AtkBack:
        curBatObj.AddBigTurnAtkbackCnt()
    skillID = useSkill.GetSkillID()
    curBatObj.AddSkillUseCnt(skillID)
    if useSkill.GetCoolDownTime():
@@ -1099,8 +1101,6 @@
        #GameWorld.DebugLog("同阵营不触发反击!") # 魅惑可能导致打自己人
        return
    
    # 大回合单武将反击次数限制
    canAtkbackDictTypeList = IpyGameDataPY.GetFuncEvalCfg("ParryCfg", 2)
    if atkObj.GetAtkDistType() not in canAtkbackDictTypeList:
        heroID = atkObj.GetHeroID()
@@ -1119,6 +1119,14 @@
        GameWorld.DebugLog("没有格挡不可反击! tagID=%s" % tagID)
        return
    
    # 大回合单武将反击次数限制
    bigTurnAtkbackCntMax = IpyGameDataPY.GetFuncCfg("ParryCfg", 4)
    if bigTurnAtkbackCntMax:
        atkbackCnt = tagObj.GetBigTurnAtkbackCnt()
        if atkbackCnt >= bigTurnAtkbackCntMax:
            GameWorld.DebugLog("本大回合累计反击次数达上限! atkbackCnt=%s >= %s" % (atkbackCnt, bigTurnAtkbackCntMax))
            return
    skillManager = tagObj.GetSkillManager()
    for index in range(0, skillManager.GetSkillCount()):
        useSkill = skillManager.GetSkillByIndex(index)