5959 子 【开发】【1.5.100】增加诛仙神技 / 【后端】【1.5.100】诛仙神技
| | |
| | | CDBPlayerRefresh_SoulSplinters, # 聚魂碎片 197
|
| | | CDBPlayerRefresh_SoulCore, # 核心环 198
|
| | | CDBPlayerRefresh_Honor, # 荣誉 199
|
| | | ) = range(146, 200)
|
| | | CDBPlayerRefresh_ZhuxianRate, # 诛仙一击概率 200
|
| | | CDBPlayerRefresh_ZhuxianHurtPer, # 诛仙一击伤害百分比 201
|
| | | ) = range(146, 202)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | ChConfig.Def_HurtType_LuckyHit:[False, 0, 0],
|
| | | ChConfig.Def_HurtType_SuperHit:[False, 0, 0],
|
| | | ChConfig.Def_HurtType_Parry:[False, 0, 0],
|
| | | ChConfig.Def_HurtType_Zhuxian:[False, 0, 0],
|
| | | }
|
| | |
|
| | | calcTypeList = []
|
| | | if atkObjType == IPY_GameWorld.gotPlayer:
|
| | | calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit]
|
| | | calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit, ChConfig.Def_HurtType_Zhuxian]
|
| | | if defObjType == IPY_GameWorld.gotPlayer:
|
| | | calcTypeList += [ChConfig.Def_HurtType_Parry]
|
| | | # 暂时只计算玩家
|
| | |
| | | ChConfig.Def_HurtType_LuckyHit:lambda aObj, dObj, hState:__HurtTypeHappen_LuckyHit(aObj, dObj, hState),
|
| | | ChConfig.Def_HurtType_SuperHit:lambda aObj, dObj, hState:__HurtTypeHappen_SuperHit(aObj, dObj, hState),
|
| | | ChConfig.Def_HurtType_Parry:lambda aObj, dObj, hState:__HurtTypeHappen_Parry(aObj, dObj, hState),
|
| | | ChConfig.Def_HurtType_Zhuxian:lambda aObj, dObj, hState:__HurtTypeHappen_Zhuxian(aObj, dObj, hState),
|
| | | }
|
| | |
|
| | | hadCheckList = [] # 已经处理过的伤害类型列表
|
| | |
| | | if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
|
| | | return True, 0, chanceDefPer
|
| | | return
|
| | |
|
| | | def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState):
|
| | | """诛仙一击"""
|
| | | rate = PlayerControl.GetZhuXianRate(atkObj)
|
| | | if not rate:
|
| | | return
|
| | | |
| | | if GameWorld.CanHappen(rate):
|
| | | return True, PlayerControl.GetZhuXianHurtPer(atkObj), 0
|
| | | return
|
| | |
|
| | |
|
| | |
|
| | | # 改变技能伤害(效果ID1010), 野外小怪1009替换1010伤害(2018-03-07增加精英怪)
|
| | |
| | | reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
|
| | | hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
|
| | |
|
| | | |
| | | # 终极斩杀新效果,必须和斩杀严格区分,会涉及到CD概率,已经触发其他技能等问题
|
| | | if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_ZhongjiZhansha):
|
| | | # նɱ
|
| | | hurtType = ChConfig.Def_HurtType_ZhognjiZhansha
|
| | | hurtValue = GameObj.GetHP(defObj)
|
| | | #伤害结构体
|
| | | resultHurtType.HurtHP = hurtValue
|
| | | resultHurtType.HurtType = hurtType
|
| | | resultHurtType.RealHurtHP = hurtValue
|
| | | |
| | | remainHP = 0 # 剩余血量
|
| | |
|
| | | # 斩杀,濒死等情况的处理
|
| | | if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackKill):
|
| | | elif PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackKill):
|
| | | # նɱ
|
| | | hurtType = ChConfig.Def_HurtType_Zhansha
|
| | | hurtValue = GameObj.GetHP(defObj)
|
| | |
| | | isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击
|
| | | isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] # 暴击
|
| | | dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
|
| | |
|
| | | isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
|
| | | |
| | | if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_OneDamage):
|
| | | return 1, hurtType
|
| | |
|
| | |
| | | if GameObj.GetHP(defender) <= 0:
|
| | | if hurtList[1] == IPY_GameWorld.gotPlayer:
|
| | | if hurtList[2] == ChConfig.Def_HurtType_Zhansha:
|
| | | defender.SetDict("zhansha", 1)
|
| | | defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 1)
|
| | | elif hurtList[2] == ChConfig.Def_HurtType_ZhognjiZhansha:
|
| | | defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 2)
|
| | | # 濒死状态触发技能, 不能在GetHurtHP内部触发技能,否则会导致原技能的伤血列表异常
|
| | | PassiveBuffEffMng.OnPassiveSkillTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick)
|
| | | PassiveBuffEffMng.OnPassiveBuffTrigger(defender, attacker, None, ChConfig.TriggerType_WillDead, tick)
|
| | | if hurtList[2] == ChConfig.Def_HurtType_Zhansha:
|
| | | defender.SetDict("zhansha", 0)
|
| | | if hurtList[2] in [ChConfig.Def_HurtType_Zhansha, ChConfig.Def_HurtType_ZhognjiZhansha]:
|
| | | defender.SetDict(ChConfig.Def_PlayerKey_Zhansha, 0)
|
| | | continue
|
| | |
|
| | | if usePassiveSkillResult:
|
| | |
| | | Def_BuffValue_Count = 3 # buff记录的value个数
|
| | |
|
| | | #游戏对象属性--------------------------------------------
|
| | | Def_Calc_AllAttrType_MAX = 131
|
| | | Def_Calc_AllAttrType_MAX = 133
|
| | | #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
|
| | | TYPE_Calc_AttrList = (
|
| | | #基础属性
|
| | |
| | | TYPE_Calc_WingHPPer, # 翅膀生命百分比
|
| | | TYPE_Calc_SuiteBasePer, # 套装基础属性百分比
|
| | | TYPE_Calc_PlusBaseAtkPer, # 强化基础攻击百分比
|
| | | TYPE_Calc_ProDef, # 当前防护值
|
| | | TYPE_Calc_ProDef, # 当前防护值 130
|
| | | TYPE_Calc_ZhuxianRate, # 诛仙一击的概率
|
| | | TYPE_Calc_ZhuxianHurtPer, # 诛仙一击的伤害比
|
| | | ) = range(1, Def_Calc_AllAttrType_MAX)
|
| | |
|
| | |
|
| | |
| | | Def_HurtType_Immune, # 免疫 10
|
| | | Def_HurtType_RealmSupress, # 境界压制 11
|
| | | Def_HurtType_Zhansha, # նɱ 12
|
| | | ) = range(1, 13)
|
| | | Def_HurtType_Zhuxian, # 诛仙一击 13
|
| | | Def_HurtType_ZhognjiZhansha, # 终极斩杀 14
|
| | | ) = range(1, 15)
|
| | | #Def_HurtType_SuckBlood, # 吸血
|
| | |
|
| | | (
|
| | |
| | |
|
| | | #---SetDict 玩家字典KEY,不存于数据库---
|
| | | # key的长度不能超过29个字节
|
| | | Def_PlayerKey_Zhansha = "zhansha" # 斩杀标志
|
| | | Def_PlayerKey_ZhuxianRate = "ZXRate" # 诛仙一击的概率
|
| | | Def_PlayerKey_ZhuxianHurtPer = "ZXHurtPer" # 诛仙一击的伤害%
|
| | | Def_PlayerKey_LockHPSkillID = "LockHPSkillID" # 锁血功能的技能
|
| | | Def_PlayerKey_GodWeaponBeforeProDef = "GWBPD" # 神兵护盾被攻击前的值
|
| | | Def_PlayerKey_curHurtValue = "curHurtValue" # 计算中的临时伤害值,技能特殊用
|
| | |
| | | TriggerType_LockHP, # 锁血触发技能 63
|
| | | TriggerType_BeLuckyHit, # 被会心一击触发技能 64
|
| | | TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
|
| | | ) = range(1, 66)
|
| | | TriggerType_ZhongjiZhansha, # 终极斩杀 66
|
| | | ) = range(1, 67)
|
| | |
|
| | |
|
| | | # NPC功能类型定义
|
| | |
| | | def GetFuncDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CopyFuncAttr % (ChConfig.TYPE_Calc_AttrDEF - 1))
|
| | | def SetFuncDef(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_CopyFuncAttr % (ChConfig.TYPE_Calc_AttrDEF - 1), value)
|
| | |
|
| | | #---诛仙一击概率---
|
| | | def GetZhuXianRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuxianRate)
|
| | | def SetZhuXianRate(curPlayer, value): |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuxianRate, value)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ZhuxianRate, value, False) |
| | |
|
| | | #---诛仙一击伤害百分比---
|
| | | def GetZhuXianHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ZhuxianHurtPer)
|
| | | def SetZhuXianHurtPer(curPlayer, value): |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_ZhuxianHurtPer, value)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ZhuxianHurtPer, value, False)
|
| | |
|
| | |
|
| | | ## 增加天梯竞技场积分
|
| | | # @param curPlayer 玩家实例
|
| | |
| | | CDBPlayerRefresh_SoulSplinters, # 聚魂碎片 197
|
| | | CDBPlayerRefresh_SoulCore, # 核心环 198
|
| | | CDBPlayerRefresh_Honor, # 荣誉 199
|
| | | ) = range(146, 200)
|
| | | CDBPlayerRefresh_ZhuxianRate, # 诛仙一击概率 200
|
| | | CDBPlayerRefresh_ZhuxianHurtPer, # 诛仙一击伤害百分比 201
|
| | | ) = range(146, 202)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | [lambda curObj:PlayerControl.GetSuiteBasePer(curObj), lambda curObj, value:PlayerControl.SetSuiteBasePer(curObj, value), 0, 0, 0], # 套装基础属性百分比
|
| | | [lambda curObj:PlayerControl.GetPlusBaseAtkPer(curObj), lambda curObj, value:PlayerControl.SetPlusBaseAtkPer(curObj, value), 0, 0, 0], # 强化基础攻击百分比
|
| | | [lambda curObj:PlayerControl.GetProDef(curObj), lambda curObj, value:PlayerControl.SetProDef(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_ExAttr4, 1, 0], # 当前防护值
|
| | | [lambda curObj:PlayerControl.GetZhuXianRate(curObj), lambda curObj, value:PlayerControl.SetZhuXianRate(curObj, value), ShareDefine.CDBPlayerRefresh_ZhuxianRate, 1, 0], # 诛仙一击概率
|
| | | [lambda curObj:PlayerControl.GetZhuXianHurtPer(curObj), lambda curObj, value:PlayerControl.SetZhuXianHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_ZhuxianHurtPer, 1, 0], # 诛仙一击伤害比
|
| | |
|
| | |
|
| | | ]
|
| | |
|
| | | ## 通过索引获得属性值
|
| | |
| | | # 当前已经被处理为死亡,那么就不触发
|
| | | return False
|
| | |
|
| | | if attacker.GetDictByKey("zhansha") and passiveEffect.GetEffectValue(0):
|
| | | # 斩杀不触发的标志
|
| | | return False
|
| | | zhanshaState = attacker.GetDictByKey(ChConfig.Def_PlayerKey_Zhansha)
|
| | | |
| | | if zhanshaState:
|
| | | # 按位判断,1为斩杀情况下,此技能不可被触发,2为终极斩杀不触发,3为任何斩杀都不触发
|
| | | if (passiveEffect.GetEffectValue(2) & pow(2, zhanshaState-1)) != 0:
|
| | | return False
|
| | |
|
| | | attacker.SetHP(1)
|
| | |
|
| | |
| | | # 当前已经被处理为死亡,那么就不触发
|
| | | return False
|
| | |
|
| | | if attacker.GetDictByKey("zhansha") and effect.GetEffectValue(2):
|
| | | # 斩杀不触发的标志
|
| | | return False
|
| | | zhanshaState = attacker.GetDictByKey(ChConfig.Def_PlayerKey_Zhansha)
|
| | | |
| | | if zhanshaState:
|
| | | # 按位判断,1为斩杀情况下,此技能不可被触发,2为终极斩杀不触发,3为任何斩杀都不触发
|
| | | if (effect.GetEffectValue(2) & pow(2, zhanshaState-1)) != 0:
|
| | | return False
|
| | | |
| | |
|
| | | result = GameWorld.CanHappen(effect.GetEffectValue(0))
|
| | | if result:
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #
|
| | | # @todo: 对生命低于XX的玩家 有XX概率 《终极斩杀》
|
| | | #
|
| | | # @author: Alee
|
| | | # @date 2018-1-9 下午09:39:37
|
| | | # @version 1.0
|
| | | #
|
| | | # @note: |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import GameWorld
|
| | | import GameObj
|
| | | import IPY_GameWorld
|
| | | import PassiveBuffEffMng
|
| | | # 血量低于XX
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill):
|
| | | if not defender:
|
| | | return False
|
| | | if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return False
|
| | | if GameObj.GetHP(defender)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(defender) >= effect.GetEffectValue(0):
|
| | | return False
|
| | | |
| | | value = effect.GetEffectValue(1)
|
| | |
|
| | | #value += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_AttackKillHappen)
|
| | |
|
| | | return GameWorld.CanHappen(value)
|
| | | |
| | |
|
| | | def GetValue(attacker, defender, effect):
|
| | | return 1
|
| | |
|