5959 子 【开发】【1.5.100】增加诛仙神技 / 【后端】【1.5.100】诛仙神技
9个文件已修改
1个文件已添加
136 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4069.py 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -787,7 +787,9 @@
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 # 战盟贡献度(活跃度转换得来)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -1301,11 +1301,12 @@
                          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]
    # 暂时只计算玩家
@@ -1318,6 +1319,7 @@
                  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 = [] # 已经处理过的伤害类型列表
@@ -1403,6 +1405,17 @@
    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增加精英怪)
@@ -1617,9 +1630,21 @@
    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)
@@ -1816,7 +1841,8 @@
    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
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -1490,12 +1490,14 @@
        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:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -68,7 +68,7 @@
Def_BuffValue_Count = 3     # buff记录的value个数
#游戏对象属性--------------------------------------------
Def_Calc_AllAttrType_MAX = 131
Def_Calc_AllAttrType_MAX = 133
#基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
TYPE_Calc_AttrList = (
#基础属性
@@ -214,7 +214,9 @@
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)
@@ -772,7 +774,9 @@
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,      # 吸血 
(
@@ -3028,6 +3032,9 @@
#---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"     # 计算中的临时伤害值,技能特殊用
@@ -4469,7 +4476,8 @@
TriggerType_LockHP, # 锁血触发技能 63
TriggerType_BeLuckyHit, # 被会心一击触发技能 64
TriggerType_BeLuckyHitSubPer, # 减少受到的会心伤害 65
) = range(1, 66)
TriggerType_ZhongjiZhansha, # 终极斩杀 66
) = range(1, 67)
# NPC功能类型定义
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -6627,6 +6627,18 @@
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 玩家实例
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -787,7 +787,9 @@
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 # 战盟贡献度(活跃度转换得来)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -167,6 +167,10 @@
   [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],      # 诛仙一击伤害比
]
## 通过索引获得属性值
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveBuff_4519.py
@@ -22,9 +22,12 @@
        # 当前已经被处理为死亡,那么就不触发
        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)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4028.py
@@ -22,9 +22,13 @@
        # 当前已经被处理为死亡,那么就不触发
        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:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4069.py
New file
@@ -0,0 +1,37 @@
#!/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