10019 【砍树】回合战斗(NPC攻、防、生命字段调整到NPC表扩展;增加按目标生命百分比判断高于或低于时被动增加最终伤害百分比数值;增加首次生命低于x触发被动)
| | |
| | | DWORD _NPCID; //NPCID
|
| | | BYTE FightPowerLackAtkLimit; //战力不足限制攻击
|
| | | DWORD SuppressFightPower; //推荐/压制战力
|
| | | DWORD MinAtk; //最小攻击力
|
| | | DWORD MaxAtk; //最大攻击力
|
| | | DWORD Def; //防御值
|
| | | DWORD MaxHP; //最大生命值,可超过20E
|
| | | DWORD AtkSpeed; //攻击速度
|
| | | DWORD MissRate; //闪避概率
|
| | | DWORD MissDefRate; //抗闪避概率
|
| | |
| | | dDef = defObj.GetDef() # 防守方防御力
|
| | | dHP = GameObj.GetHP(defObj) # 防守方当前血量
|
| | | dMaxHP = GameObj.GetMaxHP(defObj) # 防守方最大血量
|
| | | dIceDef = defObj.GetIceDef() # 冰防, 元素真防, 玩家及NPC通用
|
| | | dIceDef = defObj.GetIceDef() # 冰防, 元素真防, 玩家及NPC通用 |
| | |
|
| | | # 攻击方
|
| | | aFinalHurtPer = GameObj.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值
|
| | | aFinalHurtPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalPer)
|
| | | if atkObjType == IPY_GameWorld.gotPlayer:
|
| | | aIgnoreDefRate = atkObj.GetIgnoreDefRate() # 无视防御比率
|
| | | aSkillAtkRate = atkObj.GetSkillAtkRate() # 技能攻击力加成
|
| | |
| | | aNPCHurtAddPer = PlayerControl.GetNPCHurtAddPer(atkObj) # PVE伤害加成
|
| | | aDamagePerPVP = PlayerControl.GetDamagePerPVP(atkObj) # 外层PVP伤害加成
|
| | | aDamagePerPVP += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddPVPDamagePer)
|
| | | aFinalHurtPer = GameObj.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值
|
| | | aFinalHurtPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalPer)
|
| | |
|
| | | aFinalHurt = PlayerControl.GetFinalHurt(atkObj) # 最终固定伤害
|
| | | # 被动增加最终伤害
|
| | |
| | |
|
| | | aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
|
| | | aFightPower = PlayerControl.GetFightPower(atkObj)
|
| | | |
| | | |
| | | |
| | | else:
|
| | | aIgnoreDefRate = 0 # 无视防御比率
|
| | | aFinalHurtPer = GameObj.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值
|
| | | aSkillAtkRate = NPCCommon.GetSkillAtkRate(atkObj) # 技能攻击力加成
|
| | | if atkObjType == IPY_GameWorld.gotNPC and atkObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
|
| | | aSkillAtkRate += atkObj.GetSkillAtkRate()
|
| | |
| | | aOnlyFinalHurt = 0 # 额外固定伤害
|
| | | aFightPower = NPCCommon.GetSuppressFightPower(atkObj)
|
| | |
|
| | | |
| | | #防守方的类型
|
| | | dFinalHurtReducePer = GameObj.GetFinalHurtReducePer(defObj)
|
| | | dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
|
| | | if defObjType == IPY_GameWorld.gotPlayer:
|
| | | dIgnoreDefRateReduce = PlayerControl.GetIgnoreDefRateReduce(defObj) # 无视防御比率抗性
|
| | | dSkillAtkRateReduce = PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
|
| | |
| | | dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
|
| | | dBeHurtPer = PlayerControl.GetBeHurtPer(defObj) # 加深受到伤害百分比
|
| | | dFightPower = PlayerControl.GetFightPower(defObj)
|
| | | dFinalHurtReducePer = GameObj.GetFinalHurtReducePer(defObj)
|
| | | dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
|
| | | |
| | | else:
|
| | | dIgnoreDefRateReduce = 0 # 无视防御比率抗性
|
| | | dSkillAtkRateReduce = 0 # 技能攻击力减少
|
| | |
| | | dFinalHurtReduce = 0 # 最终固定伤害减少
|
| | | dBeHurtPer = 0
|
| | | dFightPower = NPCCommon.GetSuppressFightPower(defObj)
|
| | | dFinalHurtReducePer = GameObj.GetFinalHurtReducePer(defObj)
|
| | |
|
| | | #攻击字典 { 攻击类型 : '公式' }
|
| | | mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
|
| | |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, 0) |
| | | SetTimeline(gameObj, 1, 0) |
| | | GameObj.SetFaction(gameObj, faction) |
| | | GameObj.SetHPFull(gameObj) |
| | | GameObj.SetHPFull(gameObj, True) |
| | | gameObj.RefreshView() |
| | | |
| | | objType = gameObj.GetGameObjType() |
| | |
| | | Def_Obj_Dict_FightPetPlaceNum = 'FightPetPlaceNum' # 出战灵宠上阵位置,1~n
|
| | | Def_Obj_Dict_FightPetQuality = 'FightPetQuality' # 出战灵宠品质
|
| | | Def_Obj_Dict_TurnEnemyID = 'TurnEnemyID' # 回合制战斗对手实例ID
|
| | | Def_Obj_Dict_TurnLowestHP = 'TurnLowestHP' # 本回合战斗中历史最低血量,求余亿部分
|
| | | Def_Obj_Dict_TurnLowestHPEx = 'TurnLowestHPEx' # 本回合战斗中历史最低血量,整除亿部分
|
| | |
|
| | | #---NPC字典-------
|
| | | #每道龙卷风最终坐标
|
| | |
| | | #GameWorld.DebugLog("不能设置按时间掉血的怪物血量! id=%s,npciD=%s,value=%s,isByTime=%s" % (gameObj.GetID(), gameObj.GetNPCID(), value, isByTime))
|
| | | return
|
| | | gameObj.SetHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue, isNotify)
|
| | | |
| | | # 更新历史最低血量
|
| | | if value < GetLowestHP(gameObj):
|
| | | SetLowestHP(gameObj, value)
|
| | | return
|
| | |
|
| | | def SetHPFull(gameObj):
|
| | | def SetHPFull(gameObj, resetLowestHP=False):
|
| | | SetHP(gameObj, GetMaxHP(gameObj))
|
| | | if resetLowestHP:
|
| | | SetLowestHP(gameObj, GetHP(gameObj))
|
| | | return
|
| | |
|
| | | def SetBaseMaxHP(gameObj, value):
|
| | | gameObj.SetBaseMaxHP(value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)
|
| | | return
|
| | | |
| | |
|
| | | def SetLowestHP(gameObj, value):
|
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnLowestHP, value % ShareDefine.Def_PerPointValue)
|
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnLowestHPEx, value / ShareDefine.Def_PerPointValue)
|
| | | return
|
| | | def GetLowestHP(gameObj):
|
| | | return gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnLowestHP) + gameObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnLowestHPEx) * ShareDefine.Def_PerPointValue
|
| | |
|
| | | def GetAngryValue(curAngry):
|
| | | return curAngry.GetAngryValue() + curAngry.GetAngryValueEx() * ShareDefine.Def_PerPointValue
|
| | | def SetAngryValue(curAngry, value):
|
| | |
| | | ("DWORD", "NPCID", 1),
|
| | | ("BYTE", "FightPowerLackAtkLimit", 0),
|
| | | ("DWORD", "SuppressFightPower", 0),
|
| | | ("DWORD", "MinAtk", 0),
|
| | | ("DWORD", "MaxAtk", 0),
|
| | | ("DWORD", "Def", 0),
|
| | | ("DWORD", "MaxHP", 0),
|
| | | ("DWORD", "AtkSpeed", 0),
|
| | | ("DWORD", "MissRate", 0),
|
| | | ("DWORD", "MissDefRate", 0),
|
| | |
| | | self.NPCID = 0
|
| | | self.FightPowerLackAtkLimit = 0
|
| | | self.SuppressFightPower = 0
|
| | | self.MinAtk = 0
|
| | | self.MaxAtk = 0
|
| | | self.Def = 0
|
| | | self.MaxHP = 0
|
| | | self.AtkSpeed = 0
|
| | | self.MissRate = 0
|
| | | self.MissDefRate = 0
|
| | |
| | | def GetNPCID(self): return self.NPCID # NPCID
|
| | | def GetFightPowerLackAtkLimit(self): return self.FightPowerLackAtkLimit # 战力不足限制攻击
|
| | | def GetSuppressFightPower(self): return self.SuppressFightPower # 推荐/压制战力
|
| | | def GetMinAtk(self): return self.MinAtk # 最小攻击力
|
| | | def GetMaxAtk(self): return self.MaxAtk # 最大攻击力
|
| | | def GetDef(self): return self.Def # 防御值
|
| | | def GetMaxHP(self): return self.MaxHP # 最大生命值,可超过20E
|
| | | def GetAtkSpeed(self): return self.AtkSpeed # 攻击速度
|
| | | def GetMissRate(self): return self.MissRate # 闪避概率
|
| | | def GetMissDefRate(self): return self.MissDefRate # 抗闪避概率
|
| | |
| | | #扩展属性
|
| | | npcDataEx = GetNPCDataEx(curNPC.GetNPCID())
|
| | | if npcDataEx:
|
| | | curNPC.SetMinAtk(npcDataEx.GetMinAtk())
|
| | | curNPC.SetMaxAtk(npcDataEx.GetMaxAtk())
|
| | | curNPC.SetDef(npcDataEx.GetDef())
|
| | | GameObj.SetMaxHP(curNPC, npcDataEx.GetMaxHP())
|
| | | GameObj.SetAtkSpeed(curNPC, npcDataEx.GetAtkSpeed())
|
| | | GameObj.SetMissRate(curNPC, npcDataEx.GetMissRate())
|
| | | GameObj.SetMissDefRate(curNPC, npcDataEx.GetMissDefRate())
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveBuff.PassiveSkill_4113
|
| | | #
|
| | | # @todo:攻击增加最终伤害百分比,附加目标血量验证
|
| | | # @author hxp
|
| | | # @date 2024-01-20
|
| | | # @version 1.0
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2024-01-20 17:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import GameObj
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill):
|
| | | if not defender:
|
| | | return False
|
| | | |
| | | hpPer = effect.GetEffectValue(1)
|
| | | calcType = effect.GetEffectValue(2)
|
| | | if not hpPer:
|
| | | return True
|
| | | |
| | | tagHPPer = GameObj.GetHP(defender) * ChConfig.Def_MaxRateValue / GameObj.GetMaxHP(defender)
|
| | | if calcType == 1:
|
| | | # 大于,默认包含临界值等于
|
| | | return tagHPPer >= hpPer
|
| | | return tagHPPer <= hpPer
|
| | |
|
| | | def GetValue(attacker, defender, effect):
|
| | | return effect.GetEffectValue(0)
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveBuff.PassiveSkill_5004
|
| | | #
|
| | | # @todo:被攻击后触发被动技能, 附加条件 血量首次低于XX百分比
|
| | | # @author hxp
|
| | | # @date 2024-01-20
|
| | | # @version 1.0
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2024-01-20 17:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import GameObj
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill):
|
| | | hpPer = effect.GetEffectValue(0)
|
| | | lowestHP = GameObj.GetLowestHP(attacker)
|
| | | lowestHPPer = lowestHP * ChConfig.Def_MaxRateValue / GameObj.GetMaxHP(attacker)
|
| | | return lowestHPPer < hpPer
|
| | |
| | | 4110:ChConfig.TriggerType_ChangeSkillEff, # 改变技能特效
|
| | | 4111:ChConfig.TriggerType_AttackOver, # 攻击(对敌技能)后被动技能被触发 4
|
| | | 4112:ChConfig.TriggerType_Faint, # 击晕触发 92
|
| | | 4113:ChConfig.TriggerType_AttackAddFinalPer, # 增加最终伤害百分比 59
|
| | | 5000:ChConfig.TriggerType_TurnNum, # 回合触发 91
|
| | | 5001:ChConfig.TriggerType_Combo, # 连击触发 93
|
| | | 5002:ChConfig.TriggerType_AtkBackBef, # 反击前触发 94
|
| | | 5003:ChConfig.TriggerType_AtkBackAft, # 反击后触发 95
|
| | | 5004:ChConfig.TriggerType_BeAttackOver, # 被攻击后触发 20
|
| | | }
|
| | | return tdict.get(effectID, -1)
|
| | | #===========================================================================
|