| | |
| | | if not buffStateCount:
|
| | | return
|
| | |
|
| | | turnNum = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightNum) # 回合编号,大于0同时也代表回合制中
|
| | | |
| | | #buff持续效果
|
| | | for i in range(0, buffStateCount):
|
| | | #buff持续效果,回合下可能删除buff,倒序遍历
|
| | | for i in range(0, buffStateCount)[::-1]:
|
| | | curBuff = buffState.GetBuff(i)
|
| | | ProcessSinglePersistBuff(curObj, buffState, curBuff, tick)
|
| | |
|
| | | if not curBuff:
|
| | | #在以下处理过程中, 对方有可能死亡, 如果死亡, 会清空buff, 导致这里取得None
|
| | | #所以一定要continue |
| | | continue
|
| | | |
| | | curBuffSkill = curBuff.GetSkill()
|
| | | |
| | | if not __BuffCanProcess(curObj, curBuffSkill):
|
| | | continue
|
| | |
|
| | | processBuffTick = GetProcessBuffTick(curBuffSkill, curObj)
|
| | | |
| | | #---验证触发间隔TICK---
|
| | | if turnNum > 0:
|
| | | GameWorld.DebugLog(" buffProcess: objID=%s,skillID=%s,turnNum=%s" % (curObj.GetID(), curBuffSkill.GetSkillID(), turnNum))
|
| | | else:
|
| | | if tick - curBuff.GetProcessInterval() <= processBuffTick:
|
| | | continue
|
| | | curBuff.SetProcessInterval(tick)
|
| | | |
| | | |
| | | #得到当前buff
|
| | | for effIndex in range(0, curBuffSkill.GetEffectCount()):
|
| | | #得到当前效果
|
| | | curEffect = curBuffSkill.GetEffect(effIndex)
|
| | | curEffectID = curEffect.GetEffectID()
|
| | | |
| | | if not curEffectID:
|
| | | continue
|
| | | |
| | | processStr = "BuffProcess_%d.%s"%(curEffectID, "ProcessBuff")
|
| | | |
| | | callBuffProcessFunc = GameWorld.GetExecFunc(GameBuffs, processStr)
|
| | | |
| | | if not callBuffProcessFunc:
|
| | | continue
|
| | | |
| | | callBuffProcessFunc(curObj, curBuff, curEffect, processBuffTick, tick)
|
| | | |
| | | #执行ProcessBuff中设定的玩家字典
|
| | | __DoProcessBuff_PlayerKey(curObj, tick)
|
| | | return
|
| | |
|
| | | def ProcessSinglePersistBuff(curObj, buffState, curBuff, tick, turnForce=False):
|
| | | '''处理单个持续性buff,可能会删除buff,调用时如果是循环遍历,需注意遍历顺序,防止buff删除后索引错乱
|
| | | @param turnForce: 回合下强制立刻执行
|
| | | '''
|
| | | if not curBuff:
|
| | | return
|
| | | curBuffSkill = curBuff.GetSkill()
|
| | | |
| | | if not __BuffCanProcess(curObj, curBuffSkill):
|
| | | return
|
| | | |
| | | processBuffTick = GetProcessBuffTick(curBuffSkill, curObj)
|
| | | |
| | | isDel = False
|
| | | remainTime = None
|
| | | timeLine = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline)
|
| | | #---验证触发间隔TICK---
|
| | | if timeLine > 0:
|
| | | turnNum, actionNum = timeLine / 100, timeLine % 100
|
| | | if not turnForce and actionNum != 0:
|
| | | # 持续型buff暂仅支持回合开始时处理
|
| | | return
|
| | | remainTime = curBuff.GetRemainTime() - ChConfig.Def_PerTurnTick # 每处理一次固定算一回合
|
| | | if remainTime <= 0:
|
| | | isDel = True
|
| | | GameWorld.DebugLog(" 回合buffProcess: objID=%s,skillID=%s,remainTime=%s,turnNum=%s" % (curObj.GetID(), curBuffSkill.GetSkillID(), remainTime, turnNum))
|
| | | else:
|
| | | if tick - curBuff.GetProcessInterval() <= processBuffTick:
|
| | | return
|
| | | curBuff.SetProcessInterval(tick)
|
| | | |
| | | #得到当前buff
|
| | | for effIndex in range(0, curBuffSkill.GetEffectCount()):
|
| | | #得到当前效果
|
| | | curEffect = curBuffSkill.GetEffect(effIndex)
|
| | | curEffectID = curEffect.GetEffectID()
|
| | | |
| | | if not curEffectID:
|
| | | continue
|
| | | |
| | | processStr = "BuffProcess_%d.%s"%(curEffectID, "ProcessBuff")
|
| | | |
| | | callBuffProcessFunc = GameWorld.GetExecFunc(GameBuffs, processStr)
|
| | | |
| | | if not callBuffProcessFunc:
|
| | | continue
|
| | | |
| | | callBuffProcessFunc(curObj, curBuff, curEffect, processBuffTick, tick)
|
| | | |
| | | # 剩余时间需效果处理后再设置
|
| | | if remainTime != None:
|
| | | curBuff.SetRemainTime(remainTime)
|
| | | |
| | | if not isDel:
|
| | | return
|
| | | |
| | | GameWorld.DebugLog(" buffProcess后删除buff: objID=%s,skillID=%s,turnNum=%s" % (curObj.GetID(), curBuffSkill.GetSkillID(), turnNum))
|
| | | skillID = curBuffSkill.GetSkillID()
|
| | | skillTypeID = curBuffSkill.GetSkillTypeID()
|
| | | ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
|
| | | BuffSkill.DoBuffDisApper(curObj, curBuff, tick)
|
| | | buffState.DeleteBuffByTypeID(skillTypeID)
|
| | | SkillShell.ClearBuffEffectBySkillID(curObj, skillID, ownerID, ownerType)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ##执行ProcessBuff中设定的玩家字典
|
| | |
| | | def CheeckTrigSkillandTag(attacker, exSkill, defender, tick):
|
| | | #再次验证附加技能是否对目标可用
|
| | | if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | skillTag = GetSkillAffectTag(exSkill)
|
| | | #该技能是对自己使用的 防守者应该改为攻击者
|
| | | if GetSkillAffectTag(exSkill) in [ChConfig.Def_UseSkillTag_Self,
|
| | | if skillTag in [ChConfig.Def_UseSkillTag_Self,
|
| | | ChConfig.Def_UseSkillTag_SelfAndFriend]:
|
| | | return True, attacker
|
| | | |
| | | # 召唤兽对主人释放技能
|
| | | if skillTag == ChConfig.Def_UseSkillTag_SummonMaster:
|
| | | if not NPCCommon.IsSummonNPC(attacker):
|
| | | return False, None
|
| | | curSummonOwner = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, attacker) |
| | | if curSummonOwner == None:
|
| | | curSummonOwner = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotNPC, attacker)
|
| | | if curSummonOwner == None:
|
| | | return False, None
|
| | | return True, curSummonOwner
|
| | | |
| | | return True, defender
|
| | |
|
| | | #该技能是对自己使用的 防守者应该改为攻击者
|