10019 【砍树】回合战斗(增加buff被动效果ID 4543、4544、4545、4546;)
1. 增加buff被动效果ID4543: 被暴击附加额外伤害百分比;
2. 增加buff被动效果ID4544: 触发时减少buff层数;
3. 增加buff被动效果ID4545: 灵宠技能释放成功触发技能;
4. 增加buff被动效果ID4546: 灵宠释放技能后触发删除本buff;
5. 技能被动效果ID 5000,支持每X回合配置;
6. buff替换方式增加方式3 - 只取最高,相同或低级的则不处理,减少长时buff无用的重复添加逻辑;
增加山寨技能
神识 灭心魔种 每次攻击给目标施加易伤状态,产生暴击后,附加额外的50%伤害,并移除该状态。
驭兽 寒息 每过3回合,在灵兽下一次释放技能后有20%概率对敌人施加一次冰冻技能,持续到下回合。冰冻期间敌人无法行动且精怪无法触发。
躯体 兽灵体 每次被攻击增加3%灵兽强化,最高叠加10层,持续到下次灵兽行动。
| | |
| | | if GameWorld.CanHappen(missRate):
|
| | | return 0, ChConfig.Def_HurtType_Miss
|
| | |
|
| | | hurtValueExPer = 0 # 最终的伤害值附加额外伤害百分比
|
| | | hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill)
|
| | | #GameWorld.DebugLog("GetHurtHP hurtType=%s, hurtTypeResultDict=%s" % (hurtType, hurtTypeResultDict))
|
| | | isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击
|
| | |
| | | superHitPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitPer)
|
| | | superHitPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitPer)
|
| | | aSuperHit = aSuperHit*(superHitPer + ChConfig.Def_MaxRateValue)/ChConfig.Def_MaxRateValue
|
| | | |
| | | if isSuperHit:
|
| | | hurtValueExPer += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_BeSuperHitHurtExPer)
|
| | | else:
|
| | | # 重击加成
|
| | | thumpPer = 0
|
| | |
| | | % (atkObj.GetID(), defObj.GetID(), skillID, hurtValue, multiValue))
|
| | | hurtValue = int(hurtValue * multiValue)
|
| | |
|
| | | # 附加额外的伤害百分比 - 在最终的伤害计算完后再额外附加的伤害百分比
|
| | | if hurtValueExPer > 0:
|
| | | GameWorld.DebugLog(" 额外附加伤害: atkID=%s,defID=%s,skillID=%s,hurtValue=%s,hurtValueExPer=%s" |
| | | % (atkObj.GetID(), defObj.GetID(), skillID, hurtValue, hurtValueExPer))
|
| | | hurtValue += int(hurtValue * hurtValueExPer / float(ChConfig.Def_MaxRateValue))
|
| | | |
| | | #hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord)
|
| | |
|
| | | if hurtType == ChConfig.Def_HurtType_Normal and atkSkillPerYinji > 0:
|
| | |
| | | petOwner = PetControl.GetPetNPCOwner(attacker)
|
| | | petOwner.SetDict("useSkillPetID", attacker.GetID())
|
| | | PassiveBuffEffMng.OnPassiveSkillTrigger(petOwner, defender, curSkill, ChConfig.TriggerType_SkillSuccessPet, tick)
|
| | | PassiveBuffEffMng.OnPassiveBuffTrigger(petOwner, defender, curSkill, ChConfig.TriggerType_SkillSuccessPet, tick)
|
| | | PassiveBuffEffMng.OnPassiveBuffHappen(petOwner, defender, curSkill, ChConfig.TriggerType_SkillSuccessPet, tick)
|
| | | if isAtkSkill:
|
| | | PassiveBuffEffMng.OnPassiveSkillTrigger(petOwner, defender, curSkill, ChConfig.TriggerType_AttackOverPet, tick)
|
| | |
|
| | |
| | | Def_Buff_Replace_Better, # 相同typeid取最高,如果新的是低级的则不处理
|
| | | Def_Buff_Replace_New, # 相同typeid替换最新,即使是低级的
|
| | | Def_Buff_Recharge, # 若同类型buff存在不管等级高低,只给原buff充能只改变值或时间
|
| | | ) = range(3)
|
| | | Def_Buff_Replace_BetterOnly, # 相同typeid取最高,只取最高,相同或低级的则不处理
|
| | | ) = range(4)
|
| | |
|
| | | # CanRepeatTime字段百位数,同一个释放者只能存在同一个技能buff,不同释放者根据情况而定
|
| | | (
|
| | |
| | | Def_Skill_Effect_MPPackage = 831
|
| | | #技能buff状态效果 A值为buff所属状态, 标记详见 Def_PlayerStateList
|
| | | Def_Skill_Effect_BuffState = 4012
|
| | |
|
| | | #buff触发时减层数
|
| | | Def_Skill_Effect_BuffTriggerDelLayer = 4544
|
| | | # 给宠物加属性的效果值, 不给人物属性
|
| | | Def_SkillEffs_Pet = [508]
|
| | |
|
| | |
| | | TriggerType_TurnFightStart, # 回合开场触发 100
|
| | | TriggerType_BeMissSkill, # 目标闪避后触发技能 101
|
| | | TriggerType_BeHurtMax, # 锁定受到伤害最大值 102
|
| | | ) = range(1, 103)
|
| | | TriggerType_BeSuperHitHurtExPer, # 被暴击附加额外伤害百分比 103
|
| | | ) = range(1, 104)
|
| | |
|
| | |
|
| | | #不可以佩戴翅膀的地图
|
| | |
| | | return
|
| | | def GetSuperHitReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitReduce)
|
| | | def SetSuperHitReduce(gameObj, value):
|
| | | ## 暴击伤害减免
|
| | | ## 暴击固定伤害减免 - 暴击时附加固定伤害减免,与 atkObj.GetSuperHit() 相对
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitReduce, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitReduce, value)
|
| | | return
|
| | |
|
| | | def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtPer)
|
| | | def SetSuperHitHurtPer(gameObj, value):
|
| | | ## 强化暴伤 - 暴击时的总伤害加成,与 SuperHitHurtDefPer 相对,注意与暴击固定伤害区分
|
| | | gameObj.SetDict(ChConfig.AttrName_SuperHitHurtPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, value)
|
| | | return
|
| | | def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtDefPer)
|
| | | def SetSuperHitHurtDefPer(gameObj, value):
|
| | | ## 弱化暴伤 - 暴击时的总伤害减免
|
| | | gameObj.SetDict(ChConfig.AttrName_SuperHitHurtDefPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, value)
|
| | | return
|
| | |
|
| | | def GetFaintRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate)
|
| | |
| | | gameObj.SetDict(ChConfig.AttrName_PetWeakenPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetWeakenPer, value)
|
| | | return
|
| | |
|
| | | def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtPer)
|
| | | def SetSuperHitHurtPer(gameObj, value):
|
| | | ## 强化暴伤
|
| | | gameObj.SetDict(ChConfig.AttrName_SuperHitHurtPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, value)
|
| | | return
|
| | | def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtDefPer)
|
| | | def SetSuperHitHurtDefPer(gameObj, value):
|
| | | ## 弱化暴伤
|
| | | gameObj.SetDict(ChConfig.AttrName_SuperHitHurtDefPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, value)
|
| | | return
|
| | |
|
| | | def GetDamageBackRate(gameObj):
|
| | |
| | | if buffSkillLV > curSkillLV:
|
| | | # 只取最好的, 不可加直接退出
|
| | | return False
|
| | | elif buffReplaceType == ChConfig.Def_Buff_Replace_BetterOnly:
|
| | | if buffSkillLV >= curSkillLV:
|
| | | # 只取最好的, 等级相同也不处理,适用于长时buff,防止相同等级时重复添加buff,减少处理逻辑及封包同步
|
| | | #GameWorld.DebugLog("已存在buff,不处理! skillID=%s" % buffSkillID)
|
| | | return
|
| | |
|
| | | resultTime = -1 #不改变时间的情况
|
| | | if buffRepeatTimeType == ChConfig.Def_BuffTime_Reset:
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveBuff.PassiveBuff_4543
|
| | | #
|
| | | # @todo: BUFF类: 被暴击附加额外伤害百分比
|
| | | # @author hxp
|
| | | # @date 2024-04-11
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: BUFF类: 被暴击附加额外伤害百分比
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2024-04-11 16:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameObj
|
| | |
|
| | | def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
|
| | | |
| | | # 状态判断
|
| | | #if passiveEffect.GetEffectValue(1):
|
| | | # if not GameObj.GetPyPlayerState(attacker, passiveEffect.GetEffectValue(1)):
|
| | | # return False
|
| | | |
| | | return True
|
| | |
|
| | | def GetValue(attacker, defender, passiveEffect):
|
| | | return passiveEffect.GetEffectValue(0)
|
| | |
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveBuff.PassiveBuff_4545
|
| | | #
|
| | | # @todo:buff中灵宠释放技能后触发技能,所有技能
|
| | | # @author hxp
|
| | | # @date 2024-04-11
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: buff中灵宠释放技能后触发技能,所有技能
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2024-04-11 16:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | |
|
| | | def CheckCanHappen(attacker, defender, passiveEffect, skillID, **skillkwargs):
|
| | | return GameWorld.CanHappen(passiveEffect.GetEffectValue(0))
|
| | |
|
| | | def GetSkillData(passiveEffect):
|
| | | skillID = passiveEffect.GetEffectValue(1)
|
| | | return GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveBuff.PassiveBuff_4546
|
| | | #
|
| | | # @todo:buff中灵宠释放技能后触发删除本buff
|
| | | # @author hxp
|
| | | # @date 2024-04-11
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: buff中灵宠释放技能后触发删除本buff
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2024-04-11 16:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import BuffSkill
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, tagSkill, **skillkwargs):
|
| | | return True
|
| | | |
| | | def DoLogic(attacker, defender, effect, tagSkill, skillID):
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | isOK = BuffSkill.DelBuffBySkillID(attacker, skillID, tick)
|
| | | #GameWorld.DebugLog("buff中灵宠释放技能后触发删除本buff! atkID=%s,delSkillID=%s,isOK=%s" % (attacker.GetID(), skillID, isOK))
|
| | | return
|
| | |
|
| | |
| | |
|
| | | # 进入XX buff状态触发技能
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill):
|
| | | #A-回合编号(0-每回合,>=1-第x回合);B-判断方式(0-等于,1-大于等于,2-小于等于);C-
|
| | | #A-回合编号(0-每回合,>=1-x回合);B-判断方式(0-等于,1-大于等于,2-小于等于,3-每x回合);C-
|
| | | timeLine = attacker.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline)
|
| | | if not timeLine:
|
| | | return False
|
| | |
| | | checkType = effect.GetEffectValue(1)
|
| | | if checkTurnNum:
|
| | | turnNum = timeLine / 100
|
| | | if checkType == 0:
|
| | | if checkType == 0: # 第x回合
|
| | | if turnNum != checkTurnNum:
|
| | | return False
|
| | | elif checkType == 1:
|
| | | elif checkType == 1: # 大于等于x回合
|
| | | if turnNum < checkTurnNum:
|
| | | return False
|
| | | elif checkType == 2:
|
| | | elif checkType == 2: # 小于等于x回合
|
| | | if turnNum > checkTurnNum:
|
| | | return False
|
| | | elif checkType == 3: # 每x回合
|
| | | if turnNum % checkTurnNum != 0:
|
| | | return False
|
| | | else:
|
| | | return False
|
| | |
|
| | |
| | | 4540:ChConfig.TriggerType_SuperHitPer, # 暴击伤害百分比
|
| | | 4541:ChConfig.TriggerType_AttackAddSkillPer, # BUFF类:提高主动技能的技能伤害
|
| | | 4542:ChConfig.TriggerType_BeHurtMax, # BUFF类:锁定受到伤害最大值 102
|
| | | 4543:ChConfig.TriggerType_BeSuperHitHurtExPer, # BUFF类: 被暴击附加额外伤害百分比 103
|
| | | 4545:ChConfig.TriggerType_SkillSuccessPet, # BUFF类: 灵宠技能释放成功都可触发
|
| | | 4546:ChConfig.TriggerType_SkillSuccessPet, # BUFF类: 灵宠释放技能后触发删除本buff
|
| | |
|
| | | 803:ChConfig.TriggerType_BloodShield, # 血盾
|
| | | 806:ChConfig.TriggerType_BloodShield, # 血盾
|
| | |
| | |
|
| | | if not IsValidPassiveSkill(curSkill):
|
| | | continue
|
| | | |
| | | triggerCount = 0
|
| | | for effectInfo in effectList:
|
| | | passiveEffect = effectInfo[0]
|
| | | # 被动触发的技能
|
| | |
| | | SkillCommon.SetUsingPassiveSkill(attacker, 1)
|
| | | if SkillShell.UsePassiveTriggerSkill(attacker, skillData, defender, tick):
|
| | | AfterUsePassiveSkill(pyName, attacker, defender, passiveEffect, tick)
|
| | | triggerCount += 1
|
| | | SkillCommon.SetUsingPassiveSkill(attacker, 0)
|
| | |
|
| | | if triggerCount:
|
| | | hasEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_BuffTriggerDelLayer)
|
| | | if hasEffect:
|
| | | BuffSkill.ReduceBuffLayer(attacker, None, curSkill.GetSkillTypeID(), triggerCount)
|
| | |
|
| | | def AfterUsePassiveSkill(pyName, attacker, defender, passiveEffect, tick):
|
| | | # 附加触发后逻辑
|
| | |
| | | if not IsValidPassiveSkill(curSkill):
|
| | | continue
|
| | |
|
| | | triggerCount = 0 # 成功触发次数
|
| | | for effectInfo in effectList:
|
| | | if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
|
| | | # 只有天赋才可以再次被触发
|
| | |
| | | else:
|
| | | curValue += value
|
| | |
|
| | | triggerCount += 1
|
| | | |
| | | if triggerCount:
|
| | | hasEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_BuffTriggerDelLayer)
|
| | | if hasEffect:
|
| | | BuffSkill.ReduceBuffLayer(attacker, None, curSkill.GetSkillTypeID(), triggerCount)
|
| | | |
| | | return curValue
|
| | |
|
| | |
|
| | |
| | | addBuffValueList = GetAddBuffValue(attacker, curSkill, defender)
|
| | | result = BuffSkill.DoAddBuff(defender, skillBuffType, curSkill, tick, addBuffValueList, attacker, addForce=addForce)
|
| | |
|
| | | if result == None:
|
| | | return
|
| | | |
| | | # result为0 是抵消的不需要对buff处理
|
| | | if result is not 0:
|
| | | #添加BUFF后:处理技能效果,触发附加技能,加BUFF后产生的效果,惩罚和仇恨
|