Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode
| | |
| | | thumpPer = 0
|
| | | thumpPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
|
| | | thumpPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddThumpHitPer)
|
| | | aSuperHit = aSuperHit*(thumpPer + 10000)/10000
|
| | | aSuperHit = aSuperHit*(thumpPer + ChConfig.Def_MaxRateValue)/ChConfig.Def_MaxRateValue
|
| | |
|
| | | dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
|
| | | isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
|
| | |
| | | # atkSkillPer 包含普攻,所以不是用技能增强处理
|
| | | atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
|
| | | atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddSkillPer)
|
| | | if hurtType == ChConfig.Def_HurtType_SuperHit:
|
| | | atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitAddSkillPer)
|
| | |
|
| | | |
| | | if isSuperHit:
|
| | | addASuperHit = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitValue)
|
| | | aSuperHit = aSuperHit*(ChConfig.Def_MaxRateValue + addASuperHit)*1.0/ChConfig.Def_MaxRateValue
|
| | | if isSuperHit and hurtType == ChConfig.Def_HurtType_SuperHit:
|
| | | aSuperHit += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitValue)
|
| | |
|
| | | # 暴击增加技能伤害
|
| | | atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSkillPer)
|
| | |
| | | if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | #PVP 攻击回血
|
| | | atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
|
| | | # 百分比吸血
|
| | | atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
|
| | | atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
|
| | | # 百分比吸血
|
| | | atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
|
| | | atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
|
| | | |
| | | if hurtType == ChConfig.Def_HurtType_SuperHit:
|
| | | atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSuckBloodPer)
|
| | |
|
| | | if hurtType == ChConfig.Def_HurtType_SuperHit:
|
| | | atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSuckBloodPer)
|
| | | |
| | | atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
|
| | | atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
|
| | |
|
| | | suckHP += atkBackHP
|
| | |
|
| | |
| | | if curPlayerSkill:
|
| | | SkillCommon.SetSkillRemainTime(curPlayerSkill, PlayerControl.GetReduceSkillCDPer(curPlayer), tick, curPlayer)
|
| | |
|
| | | if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
|
| | | if curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_GiftSkill, ChConfig.Def_SkillFuncType_FbSPSkill]:
|
| | | UseSkillOver(curPlayer, target, curSkill, tick)
|
| | | else:
|
| | | OnHurtTypeTriggerPassiveSkill(curPlayer, target, curSkill, tick)
|
| | |
| | | (
|
| | | Def_Buff_Replace_Better, # 相同typeid取最高,如果新的是低级的则不处理
|
| | | Def_Buff_Replace_New, # 相同typeid替换最新,即使是低级的
|
| | | Def_Buff_Coexist, # 不同的释放者可共存
|
| | | Def_Buff_Recharge, # 若同类型buff存在不管等级高低,只给原buff充能只改变值或时间
|
| | | ) = range(4)
|
| | | ) = range(3)
|
| | |
|
| | | # CanRepeatTime字段百位数,同一个释放者只能存在同一个技能buff,不同释放者根据情况而定
|
| | | (
|
| | | Def_Buff_Coexist, # 不同的释放者可共存,默认可同时存在
|
| | | Def_Buff_NoCoexist, # 不同的释放者亦不可共存,假设战士给别人加攻击buff,A战士加1级攻击BUFF,B战士加2级攻击BUFF,那么只能存在一个高级的2级攻击BUFF
|
| | | ) = range(2)
|
| | |
|
| | | Def_BuffValue_Count = 3 # buff记录的value个数
|
| | |
|
| | |
| | |
|
| | | #---SetDict 玩家字典KEY,不存于数据库---
|
| | | # key的长度不能超过29个字节
|
| | | Def_PlayerKey_BurnOwnerID = "burnOwnerID" # 灼烧BUFF特殊处理,部分buff跟随灼烧消失
|
| | | Def_PlayerKey_SkillInDelBuff = "SkillInDelBuff" # buff中释放技能添加buff要特殊记录给后续处理,直接删除/添加会导致错乱
|
| | | Def_PlayerKey_TheFBSkillsCD = "TheFBSkillsCD" # 减少指定技能组CD XX%
|
| | | Def_PlayerKey_BurnValue = "BurnValue" # 灼烧固定伤害
|
| | | Def_PlayerKey_BurnTimePer = "BurnTimePer" # 延长灼烧时间百分比
|
| | |
| | | TriggerType_BounceHPPerByAttacker, # 反弹伤害百分比值, 由攻击方决定 77
|
| | | TriggerType_NoControl, # 使关联技能不受控制 78
|
| | | TriggerType_SuperHitSuckBloodPer, # 暴击百分比吸血, 79
|
| | | TriggerType_SuperHitAddSkillPer, # 暴击增加技能伤害 80
|
| | | TriggerType_BurnPer, # 灼烧伤害百分比 81
|
| | | TriggerType_BurnPer, # 灼烧伤害百分比 80
|
| | | TriggerType_BurnDisappear, # 灼烧消失触发 81
|
| | | ) = range(1, 82)
|
| | |
|
| | |
|
| | |
| | | bossID = GetCurFBLineBOSSID(lineID=funcLineID)
|
| | | GameWorld.Log("DoEnterFB zoneID=%s,funcLineID=%s,bossID=%s" % (zoneID, funcLineID, bossID), playerID)
|
| | | PyGameData.g_fbPickUpItemDict.pop(playerID, 0)
|
| | | if not GameWorld.IsCrossServer():
|
| | | PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, ChConfig.Def_FBMapID_DemonKing, funcLineID, PlayerFairyDomain.FDEventState_Visiting)
|
| | | return
|
| | |
|
| | | ## 副本总逻辑计时器
|
| | |
| | | def GetBuffReplaceType(curSkill):
|
| | | return curSkill.GetCanRepeatTime()/10
|
| | |
|
| | | # buff根据释放者不同判断是否共存buff,百位数 Def_Buff_NoCoexist |
| | | def GetBuffCoexistType(curSkill):
|
| | | return curSkill.GetCanRepeatTime()/10%10
|
| | |
|
| | | def GetBuffMaxLayer(curSkill):
|
| | | layerMaxCnt = 0
|
| | | hasEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_LayerCnt)
|
| | |
| | | curSkillLV = curSkill.GetSkillLV()
|
| | | #替换模式
|
| | | buffReplaceType = GetBuffReplaceType(curSkill)
|
| | | #共存模式 |
| | | buffCoexistType = GetBuffCoexistType(curSkill)
|
| | | #时间处理类型
|
| | | buffRepeatTimeType = GetBuffRepeatTimeType(curSkill)
|
| | | #用于BUFF满的时候处理刷新逻辑
|
| | |
| | | if buffSkill.GetSkillTypeID() != curSkillTypeID:
|
| | | continue
|
| | |
|
| | | if buffReplaceType == ChConfig.Def_Buff_Coexist and buffOwner:
|
| | | if buffCoexistType == ChConfig.Def_Buff_Coexist and buffOwner:
|
| | | #可同时存在的buff,判断释放者是否不一样
|
| | | if buffSkill.GetOwnerID() != buffOwner.GetID() or buffSkill.GetOwnerType() != buffOwner.GetGameObjType():
|
| | | if curBuff.GetOwnerID() != buffOwner.GetID() or curBuff.GetOwnerType() != buffOwner.GetGameObjType():
|
| | | continue
|
| | |
|
| | | #--------------技能类型ID相同
|
| | |
| | |
|
| | | index = 0
|
| | | isPlayerTJG = (curObj.GetGameObjType() == IPY_GameWorld.gotPlayer and PlayerTJG.GetIsTJG(curObj))
|
| | | |
| | | skillIDListInDelBuff = [] # buff消失中需要处理添加buff,外层处理避免错乱
|
| | | |
| | | while index < buffState.GetBuffCount():
|
| | | curBuff = buffState.GetBuff( index )
|
| | | if not curBuff:
|
| | |
| | | buffState.DeleteBuffByIndex( index )
|
| | | SkillShell.ClearBuffEffectBySkillID(curObj, curSkill.GetSkillID(), ownerID, ownerType)
|
| | |
|
| | | addSkillID = curObj.GetDictByKey(ChConfig.Def_PlayerKey_SkillInDelBuff) |
| | | if addSkillID and addSkillID not in skillIDListInDelBuff:
|
| | | skillIDListInDelBuff.append(addSkillID)
|
| | | |
| | | OnSkillAfterBuffDisappear(curObj, skillIDListInDelBuff, tick)
|
| | | |
| | | #执行DoBuffDisApper中,标记的玩家处理要求
|
| | | __DoBuffDisApperByKey( curObj , tick )
|
| | |
|
| | | return isRefresh, delResult
|
| | |
|
| | |
|
| | | # DoBuffDisApper不能做Buff添加和删除逻辑!!!!!不然指针会错乱, 故在外层处理
|
| | | def OnSkillAfterBuffDisappear(curObj, skillIDListInDelBuff, tick):
|
| | | posX, posY = curObj.GetPosX(), curObj.GetPosY()
|
| | | for skillID in skillIDListInDelBuff:
|
| | | skillData = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not skillData:
|
| | | continue
|
| | | |
| | | SkillShell.Trigger_UseSkill(curObj, curObj, skillData, tick, posX, posY)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ## 执行buff消失触发逻辑
|
| | | # @param curObj 当前OBj
|
| | |
| | | #
|
| | | # @todo: 灼烧(流派专用,额外公式), 持续过程中可能会被改变伤害或者持续时长,无法用次数控制,无层级概念
|
| | | # 若同类型buff存在不管等级高低,只给原buff充能只改变值或时间
|
| | | # 不同释放者可共存多个灼烧
|
| | | # @author: Alee
|
| | | # @date 2019-4-28 下午04:12:17
|
| | | # @version 1.0
|
| | |
| | | import AttackCommon
|
| | | import PlayerControl
|
| | | import PassiveBuffEffMng
|
| | | import GameObj
|
| | | #---------------------------------------------------------------------
|
| | | #全局变量
|
| | | #---------------------------------------------------------------------
|
| | |
| | |
|
| | | return [hurtValue]
|
| | |
|
| | | def OnBuffDisappear(defender, curSkill, curBuff, curEffect, tick):
|
| | | #已经死亡不触发
|
| | | if GameObj.GetHP(defender) <= 0:
|
| | | return
|
| | | |
| | | # 在防御者身上同时取消同一个释放者的相关buff
|
| | | defender.SetDict(ChConfig.Def_PlayerKey_BurnOwnerID, curBuff.GetOwnerID())
|
| | | |
| | | PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defender, None, None, ChConfig.TriggerType_BurnDisappear)
|
| | | |
| | | defender.SetDict(ChConfig.Def_PlayerKey_BurnOwnerID, 0)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | BaseAttack.SwordStormAttack(tagObj, srcPosX, srcPosY, curSkill, skillPer,
|
| | | skillEnhance, skillMatrix, tick)
|
| | | |
| | | PassiveBuffEffMng.OnPassiveBuffTrigger(tagObj, None, curSkill, ChConfig.TriggerType_Buff_AttackSubLayer, tick)
|
| | | if GameObj.GetHP(tagObj) > 0:
|
| | | if tagObj.GetDictByKey(ChConfig.Def_PlayerKey_1314HurtCount):
|
| | | # 需要时间配合,不然会导致伤害还没计算完毕 buff提前消失了
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: 持续减益根据值加成,百分比(非线性)
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-4-29 下午02:32:15
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | #导入
|
| | | import PlayerControl
|
| | | import NPCCommon
|
| | | import IPY_GameWorld
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | #---------------------------------------------------------------------
|
| | | #全局变量
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
|
| | | |
| | | attrType = curEffect.GetEffectValue(0)
|
| | | value = curEffect.GetEffectValue(1)*curBuff.GetValue()
|
| | | calcDict[attrType] = calcDict.get(attrType, 0) - value
|
| | | |
| | | return |
| | |
|
| | |
|
| | | ## 返回buff类型,线性与否
|
| | | # @param |
| | | # @return None
|
| | | # @remarks 函数详细说明. |
| | | def GetCalcType():
|
| | | return ChConfig.TYPE_NoLinear
|
| | |
|
| | | def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
|
| | | # 触发加成 属性刷新
|
| | | value = curBuff.GetValue()
|
| | | if value >= curEffect.GetEffectValue(2):
|
| | | return
|
| | | |
| | | curBuff.SetValue(value+1)
|
| | | #刷新属性
|
| | | curObjType = defender.GetGameObjType()
|
| | | #玩家
|
| | | if curObjType == IPY_GameWorld.gotPlayer:
|
| | | #刷新玩家属性
|
| | | playerControl = PlayerControl.PlayerControl(defender)
|
| | | #playerControl.CalcPassiveBuffAttr()
|
| | | playerControl.RefreshPlayerAttrByBuff()
|
| | | #NPC
|
| | | elif curObjType == IPY_GameWorld.gotNPC:
|
| | | npcControl = NPCCommon.NPCControl(defender)
|
| | | npcControl.RefreshNPCAttrState()
|
| | | return
|
| | |
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: 持续减益根据值加成,减法(线性)
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-4-29 下午02:32:15
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | #导入
|
| | | import PlayerControl
|
| | | import NPCCommon
|
| | | import IPY_GameWorld
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | #---------------------------------------------------------------------
|
| | | #全局变量
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
|
| | | |
| | | attrType = curEffect.GetEffectValue(0)
|
| | | value = curEffect.GetEffectValue(1)*curBuff.GetValue()
|
| | | calcDict[attrType] = calcDict.get(attrType, 0) - value
|
| | | |
| | | return |
| | |
|
| | |
|
| | | ## 返回buff类型,线性与否
|
| | | # @param |
| | | # @return None
|
| | | # @remarks 函数详细说明. |
| | | def GetCalcType():
|
| | | return ChConfig.TYPE_Linear
|
| | |
|
| | | def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
|
| | | # 触发加成 属性刷新
|
| | | value = curBuff.GetValue()
|
| | | if value >= curEffect.GetEffectValue(2):
|
| | | return
|
| | | |
| | | curBuff.SetValue(value+1)
|
| | | #刷新属性
|
| | | curObjType = defender.GetGameObjType()
|
| | | #玩家
|
| | | if curObjType == IPY_GameWorld.gotPlayer:
|
| | | #刷新玩家属性
|
| | | playerControl = PlayerControl.PlayerControl(defender)
|
| | | #playerControl.CalcPassiveBuffAttr()
|
| | | playerControl.RefreshPlayerAttrByBuff()
|
| | | #NPC
|
| | | elif curObjType == IPY_GameWorld.gotNPC:
|
| | | npcControl = NPCCommon.NPCControl(defender)
|
| | | npcControl.RefreshNPCAttrState()
|
| | | return
|
| | |
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: buff自然消失后触发指定技能(放第一个效果ID)
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-4-29 下午03:59:40
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import GameObj
|
| | | import SkillShell
|
| | |
|
| | |
|
| | |
|
| | | def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
|
| | | return [GameWorld.GetGameWorld().GetTick()]
|
| | |
|
| | | def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
|
| | | if tick - curBuff.GetValue() < curSkill.GetLastTime():
|
| | | # 非自然消失
|
| | | return
|
| | | |
| | | if curEffect.GetEffectValue(1):
|
| | | if not GameObj.GetPyPlayerState(curObj, curEffect.GetEffectValue(1)):
|
| | | return
|
| | | |
| | | curObj.SetDict(ChConfig.Def_PlayerKey_SkillInDelBuff, curEffect.GetEffectValue(0)) |
| | | return |
| | |
| | | if not curPlayerSkill:
|
| | | return
|
| | | curPlayerSkill.SetRemainTime(0)
|
| | | curSkill.Sync_Skill()
|
| | | curPlayerSkill.Sync_Skill()
|
| | | #处理技能触发和攻击成功逻辑
|
| | | return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | # @todo: buff攻击减层 1011 添加默认攻击减层
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2018-1-30 下午05:11:45
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import GameWorld
|
| | | import SkillCommon
|
| | | import BuffSkill
|
| | | import SkillShell
|
| | | import IPY_GameWorld
|
| | |
|
| | | def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
|
| | | # 关联技能
|
| | | if not passiveEffect.GetEffectValue(2):
|
| | | return False
|
| | | |
| | | curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not curSkill:
|
| | | return False
|
| | | |
| | | buffType = SkillCommon.GetBuffType(curSkill)
|
| | | buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType)
|
| | | #通过类型获取目标的buff管理器为空,则跳出
|
| | | if buffTuple == ():
|
| | | return False
|
| | | |
| | | buffManager = buffTuple[0]
|
| | | buff = buffManager.FindBuff(curSkill.GetSkillTypeID())
|
| | | if not buff:
|
| | | return False
|
| | |
|
| | | if buff.GetLayer() <= 0:
|
| | | return False
|
| | | |
| | | BuffSkill.SetBuffLayer(attacker, buff, buff.GetLayer()-1, skillTypeID=curSkill.GetSkillTypeID())
|
| | | |
| | | return False
|
| | |
|
| | |
|
| | |
| | | def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
|
| | | if not defender:
|
| | | return False
|
| | | if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return False
|
| | |
|
| | | if passiveEffect.GetEffectValue(1):
|
| | | # 第一目标
|
| | |
| | | triggerSkill = GameWorld.GetGameData().GetSkillBySkillID(triggerSkillID)
|
| | | if triggerSkill:
|
| | | SkillShell.UsePassiveTriggerSkill(attacker, triggerSkill, defender, GameWorld.GetGameWorld().GetTick(), isEnhanceSkill = True)
|
| | | return True
|
| | | return False
|
| | |
|
| | |
|
| | |
| | | def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
|
| | | useSkill = skillkwargs.get("useSkill", None)
|
| | | if not useSkill:
|
| | | return
|
| | | return False
|
| | |
|
| | |
|
| | | if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
|
| | | return
|
| | | return False
|
| | |
|
| | | if passiveEffect.GetEffectValue(1):
|
| | | # 只针对第一目标
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: buff中灼烧buff消失触发本buff消失
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-4-29 下午03:09:42
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | import GameWorld
|
| | | import SkillCommon
|
| | | import ChConfig
|
| | |
|
| | | def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
|
| | | curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | | if not curSkill:
|
| | | return False
|
| | | |
| | | buffType = SkillCommon.GetBuffType(curSkill)
|
| | | buffTuple = SkillCommon.GetBuffManagerByBuffType(attacker, buffType)
|
| | | #通过类型获取目标的buff管理器为空,则跳出
|
| | | if buffTuple == ():
|
| | | return False
|
| | | |
| | | buffManager = buffTuple[0]
|
| | | buff = buffManager.FindBuff(curSkill.GetSkillTypeID())
|
| | | if not buff:
|
| | | return False
|
| | | if buff.GetOwnerID() != attacker.GetDictByKey(ChConfig.Def_PlayerKey_BurnOwnerID):
|
| | | return False
|
| | | buff.SetRemainTime(1) # 此处必须设置为1 无限时长的buff亦可消失
|
| | | return True
|
| | |
|
| | |
|
| | | def GetValue(attacker, defender, passiveEffect):
|
| | | return 1
|
| | |
|
| | |
|
| | |
|
| | |
| | | SkillShell.UsePassiveTriggerSkill(attacker, useSkill, defender, GameWorld.GetGameWorld().GetTick(), True)
|
| | |
|
| | | return False
|
| | | |
| | | if not GameObj.GetPyPlayerState(attacker, effect.GetEffectValue(1)):
|
| | | #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
|
| | | return False
|
| | | |
| | | |
| | | if effect.GetEffectValue(2):
|
| | | if not GameObj.GetPyPlayerState(attacker, effect.GetEffectValue(2)):
|
| | | #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
|
| | | return False
|
| | | |
| | | return GameWorld.CanHappen(effect.GetEffectValue(0))
|
| | |
| | | import GameObj
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill):
|
| | | if not GameObj.GetPyPlayerState(defender, effect.GetEffectValue(1)):
|
| | | #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
|
| | | return False
|
| | | if effect.GetEffectValue(1):
|
| | | if not GameObj.GetPyPlayerState(defender, effect.GetEffectValue(1)):
|
| | | #GameWorld.DebugLog("状态触发----%s"%effect.GetEffectValue(1))
|
| | | return False
|
| | | return True
|
| | |
|
| | |
|
| | |
| | | 4004:ChConfig.TriggerType_AttackOver, # 攻击(对敌技能)后被动技能被触发 4
|
| | | 4005:ChConfig.TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
|
| | | 4006:ChConfig.TriggerType_SuperHit, # 暴击时 触发技能6,
|
| | | 4007:ChConfig.TriggerType_SuperHitValue, # 暴击时 增加暴击值7,
|
| | | 4007:ChConfig.TriggerType_SuperHitValue, # 暴击时 增加暴击值百分比7,
|
| | | 4008:ChConfig.TriggerType_AttackAddSkillPer, # 所有攻击伤害(SkillPer)增加,含普攻,计算时 5
|
| | | 4009:ChConfig.TriggerType_HurtObjAddBuff, # 击中玩家(群攻多次触发)8,
|
| | | 4010:ChConfig.TriggerType_ReduceCD, # 减少CD9, #CD
|
| | |
| | | 4093:ChConfig.TriggerType_NoControl, # 使关联技能不受控制 78
|
| | | 4094:ChConfig.TriggerType_Buff_AddSuperHitRate, # BUFF类:增加暴击率
|
| | | 4095:ChConfig.TriggerType_SuperHitSuckBloodPer, # BUFF类: 暴击百分比吸血, 79
|
| | | 4096:ChConfig.TriggerType_SuperHitAddSkillPer, # 暴击增加技能伤害
|
| | | 4097:ChConfig.TriggerType_BurnPer, # 灼烧伤害百分比 81
|
| | | 4097:ChConfig.TriggerType_BurnPer, # 灼烧伤害百分比 80
|
| | | }
|
| | | return tdict.get(effectID, -1)
|
| | | #===========================================================================
|
| | |
| | | # 获得【BUFF】被动触发的方式 与GetTriggerTypeByEffectID互补
|
| | | def GetBuffTriggerTypeByEffectID(effectID):
|
| | | tdict = {
|
| | | 1011:ChConfig.TriggerType_Buff_AttackSubLayer, # BUFF类:攻击减buff层,0消失
|
| | | 4500:ChConfig.TriggerType_AttackOver, # BUFF类:攻击触发新技能
|
| | | 4501:ChConfig.TriggerType_AttackAddSkillPer, # BUFF类:提高主动技能的技能伤害
|
| | | 4502:ChConfig.TriggerType_BeAttackOver, # BUFF类:被攻击触发技能
|
| | |
| | | 4530:ChConfig.TriggerType_Buff_AttackSubLayer, # BUFF类:攻击减buff层,0消失
|
| | | 4531:ChConfig.TriggerType_BounceHPPerByAttacker, # 反弹伤害百分比值, 由攻击方决定 77
|
| | | 4532:ChConfig.TriggerType_SuperHit, # buff中对第一目标暴击触发技能
|
| | | 4533:ChConfig.TriggerType_BurnDisappear, # 灼烧消失触发 81
|
| | |
|
| | | 803:ChConfig.TriggerType_BloodShield, # 血盾
|
| | | 806:ChConfig.TriggerType_BloodShield, # 血盾
|
| | |
| | | callFunc = GameWorld.GetExecFunc(GameBuffs, "Buff_%s.%s"%(moduleSuffix, "OnCalcBuffEx"))
|
| | | if callFunc:
|
| | | callFunc(objDetel, curEffect, allAttrList[index], curBuff)
|
| | | |
| | | # 持续性属性变化的buff,目前只有持续减益
|
| | | callFunc = GameWorld.GetExecFunc(GameBuffs, "BuffProcess_%s.%s"%(moduleSuffix, "OnCalcBuffEx"))
|
| | | if callFunc:
|
| | | callFunc(objDetel, curEffect, allAttrList[index], curBuff)
|
| | | return
|
| | |
|
| | | ## 获得buff效果的计算模块文件后缀
|
| | |
| | | def CalcBuffers_Effect(curPlayer, allAttrList, calcEffectIDList=[]):
|
| | |
|
| | | for buffType in range(IPY_GameWorld.bfBuff, IPY_GameWorld.btBufMax):
|
| | | #这些类型不影响玩家计算属性
|
| | | if buffType in [IPY_GameWorld.bfProcessBuff, #IPY_GameWorld.bfProcessDeBuff, |
| | | IPY_GameWorld.bfMapBuff,
|
| | | IPY_GameWorld.bfEquipBuff]:
|
| | | continue
|
| | | |
| | | buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType)
|
| | | #通过类型获取目标的buff管理器为空,则跳出
|
| | | if buffTuple == ():
|
| | | continue
|
| | | |
| | | #这些类型不影响玩家计算属性
|
| | | if buffType in [IPY_GameWorld.bfProcessBuff,
|
| | | IPY_GameWorld.bfProcessDeBuff, IPY_GameWorld.bfMapBuff,
|
| | | IPY_GameWorld.bfEquipBuff]:
|
| | | continue
|
| | |
|
| | | buffManager = buffTuple[0]
|