2683 子 天赋技能和新增双职业各两个技能 / 【后端】天赋技能
| | |
| | |
|
| | | WriteHurtLog(attacker, defObj, curSkill, hurtValue, hurtType, "公式层")
|
| | |
|
| | | # 优先处理神兵护盾
|
| | | hurtValue = CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick)
|
| | |
|
| | | # 伤害吸收盾回血型
|
| | | buffManager = defObj.GetBuffState()
|
| | | curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShieldXMZJ)
|
| | | if skillID:
|
| | | absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
|
| | | if absortValue:
|
| | | hurtValue -= absortValue
|
| | | findBuff = SkillCommon.FindBuffByID(defObj, skillID)[0]
|
| | | if findBuff:
|
| | | # 用于回血
|
| | | findBuff.SetValue(int(findBuff.GetValue() + absortValue))
|
| | |
|
| | | if defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue):
|
| | | # 麒麟护盾吸收伤害,将抵消的伤害存储
|
| | | absortValue = int(defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue)/float(ShareDefine.Def_MaxRateValue)*hurtValue) |
| | | hurtValue -= absortValue
|
| | | |
| | | # 吸收至指定血量比例值
|
| | | absorbHurt = defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShield)
|
| | | if absorbHurt <= defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax):
|
| | | maxValue = min(absorbHurt + absortValue, defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax))
|
| | | defObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, maxValue) # 记录护盾吸收的伤害用于爆炸
|
| | | hurtValue = CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick)
|
| | |
|
| | | # buff减少伤害百分比
|
| | | reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
|
| | |
| | | #===========================================================================
|
| | |
|
| | | return resultHurtType
|
| | |
|
| | | # 计算伤害后,因各种buff和状态的影响处理
|
| | | def CalcHurtHPWithBuff(atkObj, defObj, hurtValue, curSkill, tick):
|
| | | # 优先处理神兵护盾
|
| | | hurtValue = CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick)
|
| | |
|
| | | # 伤害吸收盾回血型
|
| | | buffManager = defObj.GetBuffState()
|
| | | curEffect, plusValue, skillID = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_AbsorbShieldXMZJ)
|
| | | if skillID:
|
| | | absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
|
| | | if absortValue:
|
| | | hurtValue -= absortValue
|
| | | findBuff = SkillCommon.FindBuffByID(defObj, skillID)[0]
|
| | | if findBuff:
|
| | | # 用于回血
|
| | | findBuff.SetValue(int(findBuff.GetValue() + absortValue))
|
| | |
|
| | | if defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue):
|
| | | # 麒麟护盾吸收伤害,将抵消的伤害存储
|
| | | absortValue = int(defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldValue)/float(ShareDefine.Def_MaxRateValue)*hurtValue) |
| | | hurtValue -= absortValue
|
| | | |
| | | # 吸收至指定血量比例值
|
| | | absorbHurt = defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShield)
|
| | | if absorbHurt <= defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax):
|
| | | maxValue = min(absorbHurt + absortValue, defObj.GetDictByKey(ChConfig.Def_PlayerKey_AbsorbShieldMax))
|
| | | defObj.SetDict(ChConfig.Def_PlayerKey_AbsorbShield, maxValue) # 记录护盾吸收的伤害用于爆炸
|
| | |
|
| | | # 天罡护法,将期间受到的伤害总值用于回血,不改变伤害
|
| | | curEffect, plusValue, skillID2 = BuffSkill.FindBuffEffectPlusByEffectID(buffManager, ChConfig.Def_Skill_Effect_StoreBlood)
|
| | | if skillID2:
|
| | | absortValue = hurtValue*curEffect.GetEffectValue(0)/ShareDefine.Def_MaxRateValue
|
| | | if absortValue:
|
| | | findBuff = SkillCommon.FindBuffByID(defObj, skillID2)[0]
|
| | | if findBuff:
|
| | | # 用于回血
|
| | | findBuff.SetValue(int(findBuff.GetValue() + absortValue))
|
| | | return hurtValue
|
| | |
|
| | |
|
| | |
|
| | | # GM 命令 HurtLog 查看战斗伤害日志
|
| | |
| | |
|
| | | # 暴击增加技能伤害
|
| | | atkSkillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSkillPer)
|
| | | atkSkillPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSkillPer)
|
| | | |
| | | # buff中暴击减层,无触发技能
|
| | | PassiveBuffEffMng.OnPassiveBuffTrigger(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSubLayer, tick)
|
| | |
|
| | |
|
| | | if isLuckyHit:
|
| | | # 会心一击时增加会心伤害百分比
|
| | |
| | | atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtValue, resultHurtType.RealHurtHP)
|
| | | if defObj.GetGameObjType() == IPY_GameWorld.gotNPC:
|
| | | atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtNPCObjID, defObj.GetID())
|
| | | |
| | | else:
|
| | | defObj.SetDict(ChConfig.Def_PlayerKey_LastAttackerObjID, atkObj.GetID())
|
| | | return
|
| | |
|
| | |
|
| | |
| | | atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
|
| | |
|
| | | atkBackHP += int(hurtValue * atkBackHPPer*1.0 / ChConfig.Def_MaxRateValue)
|
| | |
|
| | | |
| | | suckHP += atkBackHP
|
| | |
|
| | | if suckHP <= 0:
|
| | |
| | | curPlayerSkill = curPlayer.GetSkillManager().FindSkillBySkillTypeID(skillTypeID)
|
| | |
|
| | | if curPlayerSkill:
|
| | |
|
| | | #设置玩家所学技能冷却CD
|
| | | SkillCommon.SetSkillRemainTime(curPlayerSkill, PlayerControl.GetReduceSkillCDPer(curPlayer), tick, curPlayer)
|
| | | |
| | | if not IsSkipSkillCD:
|
| | | #设置玩家所学技能冷却CD
|
| | | SkillCommon.SetSkillRemainTime(curPlayerSkill, PlayerControl.GetReduceSkillCDPer(curPlayer), tick, curPlayer)
|
| | | #调用任务触发器
|
| | | #EventShell.EventRespons_UseSkillOK(curPlayer, skillTypeID)
|
| | | #执行连环被动技能处理
|
| | |
| | | # 普攻和对敌技能
|
| | | UseSkillOver(curPlayer, target, curSkill, tick)
|
| | | return True
|
| | |
|
| | | # 无冷却状态
|
| | | def IsSkipSkillCD(curPlayer, target, curSkill, tick):
|
| | | # 暴击情况下
|
| | | isSuperHit = False
|
| | | for i in xrange(g_skillHurtList.GetHurtCount()):
|
| | | hurtObj = g_skillHurtList.GetHurtAt(i)
|
| | | if not hurtObj:
|
| | | continue
|
| | | |
| | | if hurtObj.GetAttackType() == ChConfig.Def_HurtType_SuperHit:
|
| | | isSuperHit = True
|
| | | break
|
| | | |
| | | if isSuperHit:
|
| | | if PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(curPlayer, None, curSkill, ChConfig.TriggerType_SuperHitSkipCD):
|
| | | return True
|
| | | if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(curPlayer, None, curSkill, ChConfig.TriggerType_SuperHitSkipCD):
|
| | | return True
|
| | | return False
|
| | | |
| | |
|
| | | # 根据伤血类型触发技能,群攻只触发一次,放在伤血列表被清之前
|
| | | def OnHurtTypeTriggerSkill(attacker, target, curSkill, tick):
|
| | |
| | | Def_Skill_Effect_AbsorbShield = 801 # A值记录吸收伤害值,B值记录吸收值上限为xx%血量上限值 C值为释放的爆炸技能ID 如麒麟盾
|
| | | Def_Skill_Effect_AbsorbShieldXMZJ = 802 # 须弥真界 神兵技能吸收伤害 百分比
|
| | | Def_Skill_Effect_BoomSeedHurt = 804 # BUFF种子单层伤害
|
| | | Def_Skill_Effect_StoreBlood = 809 # 将期间受到的伤害总值,用于最后回血,不影响伤害
|
| | | Def_Skill_Effect_AttackReplace = 1009 #攻击计算,野外小怪伤害替换1010 (2018-03-07增加精英怪)
|
| | | Def_Skill_Effect_Attack = 1010 #攻击计算
|
| | | Def_Skill_Effect_LayerCnt = 1011 # BUFF层级数量 A值层数,B值层数处理方式0递增1递减
|
| | |
| | |
|
| | |
|
| | | #---------需要记录在buff管理器中的效果ID,主要用于查找用---------------------------
|
| | | Def_BuffManager_EffectsID = [Def_Skill_Effect_ProBloodPer, Def_Skill_Effect_AbsorbShieldXMZJ]
|
| | | Def_BuffManager_EffectsID = [Def_Skill_Effect_ProBloodPer, Def_Skill_Effect_AbsorbShieldXMZJ, Def_Skill_Effect_StoreBlood]
|
| | | #-------------------------------------------------------------------------
|
| | |
|
| | | #基础属性效果ID
|
| | |
| | | Def_PlayerState_LoseBlood2, # 职业2持续掉血状态 14
|
| | | Def_PlayerState_LoseBlood3, # 职业3持续掉血状态 15
|
| | | Def_PlayerState_MissSneerAtk, # 对嘲讽攻击免疫表现为miss 16
|
| | | ) = range(17)
|
| | | Def_PlayerState_BeInAir, # 浮空(做法同眩晕类) 17
|
| | | ) = range(18)
|
| | |
|
| | | #---SetDict 含NPC字典KEY,不存于数据库---
|
| | | Def_GameObjKey_InheritOwner = "InheritOwner" # 类暴风雪计算时用主人属性
|
| | |
|
| | | #---SetDict 玩家字典KEY,不存于数据库---
|
| | | # key的长度不能超过29个字节
|
| | | Def_PlayerKey_AddBuffLayer = "addBuffLayer" # buff当前层数
|
| | | Def_PlayerKey_BuffHurtCnt = "BuffHurtCnt" # 持续buff掉血次数
|
| | | Def_PlayerKey_Zhansha = "zhansha" # 斩杀标志
|
| | | Def_PlayerKey_ZhuxianRate = "ZXRate" # 诛仙一击的概率
|
| | | Def_PlayerKey_ZhuxianHurtPer = "ZXHurtPer" # 诛仙一击的伤害%
|
| | |
| | | Def_PlayerKey_IgnoreDefRateReduce = "IgnoreDefRateReduce" # 抗无视防御概率
|
| | | Def_PlayerKey_LastHurtValue = "LastHurtValue" # 最后一次伤害值
|
| | | Def_PlayerKey_LastHurtNPCObjID = "LastHurtNPCObjID" # 最后攻击的NPCObjID
|
| | | Def_PlayerKey_LastAttackerObjID = "LastAttackerObjID" # 被攻击者记录的最近攻击玩家ID
|
| | | Def_PlayerKey_ReduceSkillCDPer = "ReduceSkillCDPer" # 减技能CD万分率
|
| | | Def_PlayerKey_CommMapExpRate = "CommMapExpRate" # 常规地图经验倍率加成
|
| | | Def_PlayerKey_FinalHurtPer = "FinalHurtPer" # 最终伤害百分比
|
| | |
| | | TriggerType_BeLuckyHit, # 被会心一击触发技能 64
|
| | | TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
|
| | | TriggerType_ZhongjiZhansha, # 终极斩杀 66
|
| | | ) = range(1, 67)
|
| | | TriggerType_SuperHitSubLayer, # 暴击减层 67
|
| | | TriggerType_SuperHitSkipCD, # 暴击无冷却 68
|
| | | TriggerType_BuffHurtCnt, # 当持续buff伤害第X次时触发技能 69
|
| | | ) = range(1, 70)
|
| | |
|
| | |
|
| | | # NPC功能类型定义
|
| | |
| | | # @param pyState ״̬
|
| | | # @param isTrue 是否设置该状态
|
| | | # @return None
|
| | | def SetPyPlayerState(gameObj, pyState, isTrue):
|
| | | def SetPyPlayerState(gameObj, pyState, isAdd):
|
| | | if pyState not in ChConfig.Def_PlayerStateList:
|
| | | return
|
| | |
|
| | | curState = gameObj.GetDictByKey(ChConfig.Def_PlayerKey_CurState)
|
| | | if isTrue:
|
| | | if isAdd:
|
| | | # 增加
|
| | | updState = curState | pow(2, pyState)
|
| | | else:
|
| | | # 删除
|
| | | if curState & pow(2, pyState) == 0:
|
| | | return
|
| | | else:
|
| | |
| | |
|
| | |
|
| | | #GameWorld.DebugLog("SetPyPlayerState (%s - %s), curState=%s,updState=%s"
|
| | | # % (pyState, isTrue, curState, updState))
|
| | | # % (pyState, isAdd, curState, updState))
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_CurState, updState)
|
| | | return
|
| | |
|
| | |
| | | curBuff.SetLayer(curLayerCnt + 1)
|
| | | #BUFF层级变化触发被动
|
| | | if buffOwner:
|
| | | curObj.SetDict("addBuffLayer", curBuff.GetLayer())
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, curBuff.GetLayer())
|
| | | PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
|
| | | PassiveBuffEffMng.OnPassiveBuffTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AddLayer, tick)
|
| | | curObj.SetDict("addBuffLayer", 0)
|
| | | curObj.SetDict(ChConfig.Def_PlayerKey_AddBuffLayer, 0)
|
| | | else:
|
| | | curBuff.SetLayer(layerMaxCnt)
|
| | | changeLayer = True
|
| | |
| | | import GameWorld
|
| | | import ChConfig
|
| | | import GameObj
|
| | | import IPY_GameWorld
|
| | | import PassiveBuffEffMng
|
| | | #---------------------------------------------------------------------
|
| | | #全局变量
|
| | | #---------------------------------------------------------------------
|
| | |
| | | curBuffSkillID = curBuff.GetSkill().GetSkillTypeID()
|
| | |
|
| | | SkillCommon.SkillLostHP(defender, curBuffSkillID, buffOwner, singleDecHP, tick, hurtType=ChConfig.Def_HurtType_Bleed)
|
| | | if curEffect.GetEffectValue(2) and buffOwner:
|
| | | SkillCommon.SkillAddHP(buffOwner, curBuffSkillID, singleDecHP)
|
| | |
|
| | | OnPassiveSkillByHurtCount(defender, curBuff, curEffect, buffOwner)
|
| | | return
|
| | |
|
| | |
|
| | | def OnPassiveSkillByHurtCount(defender, curBuff, curEffect, buffOwner):
|
| | | if not buffOwner:
|
| | | return
|
| | | if buffOwner.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return
|
| | | # 执行次数。 当汲灵对目标造成3次伤害时,可降低目标20%的防御
|
| | | curBuff.SetValue1(curBuff.GetValue1() + 1)
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | |
| | | defender.SetDict(ChConfig.Def_PlayerKey_BuffHurtCnt, curBuff.GetValue1())
|
| | | PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, defender, curBuff.GetSkill(), ChConfig.TriggerType_BuffHurtCnt, tick)
|
| | | defender.SetDict(ChConfig.Def_PlayerKey_BuffHurtCnt, 0)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | | ## 持续性Buff消失
|
| | | # @param defender 承受者
|
| | |
| | | buffOwner = SkillCommon.GetBuffOwner(curBuff)
|
| | |
|
| | | SkillCommon.SkillLostHP(defender, curSkill.GetSkillTypeID(), buffOwner, buffValue, tick, hurtType=ChConfig.Def_HurtType_Bleed)
|
| | | |
| | | # 执行次数
|
| | | OnPassiveSkillByHurtCount(defender, curBuff, curEffect, buffOwner)
|
| | | return
|
| | |
|
| | |
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: 吸收对方属性,有目标技能(41),最多3种属性, 增益buff
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-3-15 下午04:48:41
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import BuffSkill
|
| | | import IPY_GameWorld
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | ## buff线性增加属性
|
| | | # @param defender Buff承受者
|
| | | # @param curEffect 技能效果
|
| | | # @param calcDict 技能效果累加总表
|
| | | # @return None
|
| | | def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
|
| | | attrType = curEffect.GetEffectValue(0)
|
| | | |
| | | vauleFunc = [curBuff.GetValue, curBuff.GetValue1, curBuff.GetValue2]
|
| | | calcDict[attrType] = calcDict.get(attrType, 0) + vauleFunc[min(2, curEffect.GetEffectValue(2))]()
|
| | | return
|
| | |
|
| | |
|
| | | ## 返回buff类型,线性与否
|
| | | # @param |
| | | # @return None
|
| | | # @remarks 函数详细说明. |
| | | def GetCalcType():
|
| | | return ChConfig.TYPE_Linear
|
| | |
|
| | |
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: 将期间受到的伤害总值,用于最后回血,不影响伤害
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-3-14 下午08:34:57
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import SkillCommon
|
| | |
|
| | | def OnBuffDisappear(curObj, curSkill, curBuff, curEffect, tick):
|
| | | if curObj.GetHP() <= 0:
|
| | | return
|
| | | |
| | | value = curBuff.GetValue()
|
| | | if value <= 0:
|
| | | return
|
| | | |
| | | SkillCommon.SkillAddHP(curObj, 0, value)
|
| | | return
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: 吸收对方属性,有目标技能(41), 增益buff
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-3-15 下午04:05:05
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import BaseAttack
|
| | | import BuffSkill
|
| | | import IPY_GameWorld
|
| | | import SkillCommon
|
| | | import EffGetSet
|
| | |
|
| | |
|
| | | def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
|
| | | if not defender:
|
| | | return
|
| | | if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return
|
| | | |
| | | addBuffValueList = []
|
| | | # 效果ID | 属性项,万分率
|
| | | # 最多吸收目标3种属性 存入buffvalue
|
| | | for i in range(3):
|
| | | attrIndex = curSkill.GetEffect(i).GetEffectValue(0)
|
| | | if not attrIndex:
|
| | | break
|
| | | curValue = EffGetSet.GetValueByEffIndex(defender, attrIndex)
|
| | | curValue = int(curValue * curSkill.GetEffect(i).GetEffectValue(1) / ChConfig.Def_MaxRateValue)
|
| | | |
| | | addBuffValueList.append(curValue)
|
| | | |
| | | buffType = SkillCommon.GetBuffType(curSkill)
|
| | | BuffSkill.DoAddBuff(attacker, buffType, curSkill, tick, addBuffValueList, attacker)
|
| | | |
| | | #处理技能触发和攻击成功逻辑
|
| | | return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
|
| | |
| | | return True
|
| | |
|
| | |
|
| | | def GetValue(attacker, defender, passiveEffect):
|
| | | return 0
|
| | |
| | | return True
|
| | |
|
| | |
|
| | | def GetValue(attacker, defender, passiveEffect):
|
| | | return 0
|
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | # @todo: 进入濒死状态 血量为1, 不触发技能
|
| | | # @todo: 进入濒死状态 血量为1
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2017-12-9 下午09:41:44
|
| | |
| | | return False
|
| | |
|
| | | attacker.SetHP(1)
|
| | |
|
| | | return False
|
| | | |
| | | # False 可用于多次触发不死的作用
|
| | | return True if passiveEffect.GetEffectValue(1) else False
|
| | |
|
| | |
|
| | | def GetSkillData(passiveEffect):
|
| | | return
|
| | | skillID = passiveEffect.GetEffectValue(1)
|
| | |
|
| | | return GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
| | |
|
| | | def AfterUsePassiveSkill(attacker, defender, passiveEffect, tick):
|
| | | return
|
| | |
| | | if passiveEffect.GetEffectValue(2) and passiveEffect.GetEffectValue(2) != skillTypeID:
|
| | | # 验证关联技能
|
| | | return False
|
| | | return defender.GetDictByKey("addBuffLayer") == passiveEffect.GetEffectValue(0)
|
| | | return defender.GetDictByKey(ChConfig.Def_PlayerKey_AddBuffLayer) == passiveEffect.GetEffectValue(0)
|
| | |
|
| | |
|
| | | def GetSkillData(passiveEffect):
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | # @todo: buff暴击攻击减自身buff层
|
| | | #
|
| | | # @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):
|
| | | # 先判断概率
|
| | | rate = passiveEffect.GetEffectValue(0)
|
| | | if rate and not GameWorld.CanHappen(rate):
|
| | | return False
|
| | | |
| | | FBSkillValid = passiveEffect.GetEffectValue(1)
|
| | | if FBSkillValid == 0:
|
| | | # 0 为 只有主动法宝技能暴击可触发
|
| | | useSkill = skillkwargs.get("useSkill", None)
|
| | | if not useSkill:
|
| | | return False
|
| | | if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSkill:
|
| | | 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 True
|
| | |
|
| | |
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | # @todo: buff中技能暴击无冷却
|
| | | #
|
| | | # @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):
|
| | | # 先判断概率
|
| | | rate = passiveEffect.GetEffectValue(0)
|
| | | if rate and not GameWorld.CanHappen(rate):
|
| | | return False
|
| | | |
| | | FBSkillValid = passiveEffect.GetEffectValue(1)
|
| | | if FBSkillValid == 0:
|
| | | # 0 为 只有主动法宝技能暴击可触发
|
| | | useSkill = skillkwargs.get("useSkill", None)
|
| | | if not useSkill:
|
| | | return False
|
| | | if useSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSkill:
|
| | | return False
|
| | | |
| | | |
| | | return True
|
| | |
|
| | |
|
| | | def GetValue(attacker, defender, passiveEffect):
|
| | | return 1
|
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | # 对目标的buff层级达到第几层触发技能
|
| | | # 对目标的buff层级达到第几层触发技能, 附加效果指定目标为最近一次攻击的玩家
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2018-1-9 下午09:39:37
|
| | |
| | | # @note:
|
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import SkillShell
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import IPY_GameWorld
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill):
|
| | | if defender.GetDictByKey(ChConfig.Def_PlayerKey_AddBuffLayer) != effect.GetEffectValue(0):
|
| | | return False
|
| | |
|
| | | return defender.GetDictByKey("addBuffLayer") == effect.GetEffectValue(0)
|
| | | if effect.GetEffectValue(1):
|
| | | # 走到此逻辑 中buff和释放buff是同一个人
|
| | | #附加效果指定目标为最近一次攻击的玩家
|
| | | playerID = attacker.GetDictByKey(ChConfig.Def_PlayerKey_LastAttackerObjID)
|
| | | if not playerID:
|
| | | return False
|
| | | curObj = GameWorld.GetObj(playerID, IPY_GameWorld.gotPlayer)
|
| | | |
| | | #人物需要判断是否为空
|
| | | if not curObj:
|
| | | return False
|
| | | if curObj.IsEmpty():
|
| | | return False
|
| | |
|
| | |
|
| | | #强行释放技能
|
| | | SkillShell.UsePassiveTriggerSkill(attacker, curSkill, curObj, GameWorld.GetGameWorld().GetTick(), True)
|
| | | return False
|
| | | return True |
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | # @todo: 攻击将造成伤害的XX%转化为自身生命
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2018-1-9 下午09:39:37
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | import GameObj
|
| | | import ChConfig
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill): |
| | | return True
|
| | | |
| | |
|
| | | def GetValue(attacker, defender, effect):
|
| | | return effect.GetEffectValue(0)
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: 暴击有概率触发无技能冷却
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2019-3-14 下午06:01:20
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | import GameWorld
|
| | | import ChConfig
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill): |
| | | # 先判断概率
|
| | | rate = effect.GetEffectValue(0)
|
| | | if rate and not GameWorld.CanHappen(rate):
|
| | | return False
|
| | | |
| | | return True
|
| | |
|
| | | def GetValue(attacker, defender, effect):
|
| | | return 1
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | ##@package
|
| | | #
|
| | | # @todo: 当持续buff伤害第X次时触发技能
|
| | | # 当汲灵对目标造成3次伤害时,可降低目标20%的防御
|
| | | # @author: Alee
|
| | | # @date 2019-3-15 下午03:26:32
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
|
| | | import ChConfig
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill): |
| | | if defender.GetDictByKey(ChConfig.Def_PlayerKey_BuffHurtCnt) != effect.GetEffectValue(0):
|
| | | return False
|
| | | |
| | | return True |
| | |
| | | 4068:ChConfig.TriggerType_LockHP, # 锁血触发技能 63
|
| | | 4069:ChConfig.TriggerType_ZhongjiZhansha, # 终极斩杀 64
|
| | | 4070:ChConfig.TriggerType_DebuffOff, # 抵消一次debuff 23
|
| | | 4071:ChConfig.TriggerType_Buff_SuckBloodPer, # 攻击 百分比吸血
|
| | | 4072:ChConfig.TriggerType_SuperHitSkipCD, # 暴击无冷却 68
|
| | | 4073:ChConfig.TriggerType_BuffHurtCnt, # 当持续buff伤害第X次时触发技能 69
|
| | | }
|
| | | return tdict.get(effectID, -1)
|
| | | #===========================================================================
|
| | |
| | | 4506:ChConfig.TriggerType_BeAttackOver, # BUFF类:被攻击触发技能 只刷新属性 不触发技能
|
| | | 4507:ChConfig.TriggerType_Buff_AddSuperHitRate, # BUFF类:增加暴击率
|
| | | 4508:ChConfig.TriggerType_Buff_AttackSubLayer, # BUFF类:攻击减buff层,0消失
|
| | | 4514:ChConfig.TriggerType_Buff_BeAttackSubLayer, # BUFF类:被攻击减buff层,0消失
|
| | | 4509:ChConfig.TriggerType_Buff_SuckBloodPer, # BUFF类: 百分比吸血, 此处非属性类
|
| | | 4510:ChConfig.TriggerType_Buff_MustBeHit, # BUFF类: 无视闪避必中
|
| | | 4511:ChConfig.TriggerType_AttackAddFinalValue, #攻击增加输出伤害11
|
| | | 4512:ChConfig.TriggerType_ReduceHurtHPPer, # 百分比减少攻击计算后伤害
|
| | | 4513:ChConfig.TriggerType_AttackAddFinalValue, #攻击增加输出伤害11
|
| | | 4514:ChConfig.TriggerType_Buff_BeAttackSubLayer, # BUFF类:被攻击减buff层,0消失
|
| | | 4515:ChConfig.TriggerType_AddIceAtkPer, # BUFF类:攻击附加真实伤害百分比
|
| | | 4516:ChConfig.TriggerType_ChangeHurtToHP, # BUFF类:buff中把受到伤害的xx%转化为生命值
|
| | | 4517:ChConfig.TriggerType_DebuffOff, # BUFF类: 抵消debuff
|
| | |
| | | 4520:ChConfig.TriggerType_AddLayer, # BUFF类: 目标BUFF层级增加时 52
|
| | | 4521:ChConfig.TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
|
| | | 4522:ChConfig.TriggerType_DebuffOff, # BUFF类: 抵消debuff
|
| | | 4523:ChConfig.TriggerType_SuperHitSkillPer, # 暴击时,增加技能伤害 10
|
| | | 4524:ChConfig.TriggerType_SuperHitSubLayer, # 暴击减层 67
|
| | | 4525:ChConfig.TriggerType_SuperHitSkipCD, # 暴击无冷却 68
|
| | |
|
| | | 803:ChConfig.TriggerType_BloodShield, # 血盾
|
| | | 806:ChConfig.TriggerType_BloodShield, # 血盾
|