hch
2018-08-28 0a93c7c66ea0047c8080d7e21ced94736fe25034
fix:2965 子 境界压制规则修改 / 【后端】境界压制规则修改
1个文件已修改
45 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -1564,14 +1564,14 @@
    
    summonAtkPer = 1    # 召唤继承提高基础攻击力,取表
    if atkObj.GetGameObjType() == IPY_GameWorld.gotNPC and atkObj.GetGameNPCObjType() == IPY_GameWorld.gnotSummon:
        summonAtkPer = atkObj.GetDictByKey(ChConfig.Def_GameObjKey_InheritOwner)
        if summonAtkPer > 0:
        summonAtkPerValue = atkObj.GetDictByKey(ChConfig.Def_GameObjKey_InheritOwner)
        if summonAtkPerValue > 0:
            # 暴风雪类召唤兽转化为主人计算伤害
            atkObj = NPCCommon.GetSummonOwnerDetel(atkObj)
            if not atkObj:
                return 0, ChConfig.Def_HurtType_Miss
            
            summonAtkPer = summonAtkPer*1.0/ChConfig.Def_MaxRateValue
            summonAtkPer = summonAtkPerValue*1.0/ChConfig.Def_MaxRateValue
            #GameWorld.DebugLog("召唤兽取主人---------%s-%s-%s-%s"%(atkObj.GetID(), atkSkillPer, atkSkillValue, summonAtkPer))
        
    atkObjType = atkObj.GetGameObjType()
@@ -1776,16 +1776,28 @@
        #GameWorld.DebugLog("境界压制:aRealmLV=%s,dRealmLV=%s,aRealmGroup=%s,dRealmGroup=%s,SuppressValueRealmRate=%s" 
        #                   % (aRealmLV, dRealmLV, aRealmGroup, dRealmGroup, SuppressValueRealmRate))    
        
    else:
        #PVE 境界压制
    elif atkObjType == IPY_GameWorld.gotNPC and defObjType == IPY_GameWorld.gotPlayer:
        # EVP 境界压制
        aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType) 
        if aRealmLV + dRealmLV != 0:
            #有压制
            suppressRealm = aRealmLV - dRealmLV
            suppressRealm = aRealmLV - dRealmLV # 存在负数
            suppressRealmHurtPer = GetRealmHurtPer(aRealmLV, dRealmLV, 2) # 境界压制加成百分比,存在负数
            suppressFormulaKeyRealm = "EVPSuppressValueRealm"
            if suppressFormulaKeyRealm in hurtDist:
                SuppressValueRealmRate = int(eval(FormulaControl.GetCompileFormula(suppressFormulaKeyRealm, hurtDist[suppressFormulaKeyRealm])))
    elif atkObjType == IPY_GameWorld.gotPlayer and defObjType == IPY_GameWorld.gotNPC:
        # PVE 境界压制
        aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType)
        if aRealmLV + dRealmLV != 0:
            #有压制
            suppressRealm = aRealmLV - dRealmLV # 存在负数
            suppressRealmHurtPer = GetRealmHurtPer(aRealmLV, dRealmLV, 3) # 境界压制加成百分比,存在负数
            suppressFormulaKeyRealm = "PVESuppressValueRealm"
            if suppressFormulaKeyRealm in hurtDist:
                SuppressValueRealmRate = int(eval(FormulaControl.GetCompileFormula(suppressFormulaKeyRealm, hurtDist[suppressFormulaKeyRealm])))
    atkStateMark = GetObjAtkStateMark(atkObj)
    defStateMark = GetObjAtkStateMark(defObj)
@@ -1818,7 +1830,26 @@
    
    return hurtValue, hurtType
# 获取EVP和PVE伤害百分比差,PVE无境界压制, 境界等级对应列表的index,越界取最高
def GetRealmHurtPer(aRealmLV, dRealmLV, gridIndex):
    suppressRealmHurtPer = 0
    suppressRealmDict = IpyGameDataPY.GetFuncEvalCfg("RealmGroup", gridIndex)
    plus_minus = 1  # 负数为反压制
    if aRealmLV >= dRealmLV:
        suppressList = range(dRealmLV+1, aRealmLV+1)
    else:
        suppressList = range(aRealmLV+1, dRealmLV+1)
        plus_minus = -1
    for realmLV in suppressList:
        suppressRealmHurtPer += suppressRealmDict.get(realmLV, 0)
    return suppressRealmHurtPer*plus_minus
# 获取双方境界值
def GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType):
    if atkObjType == IPY_GameWorld.gotNPC:
        aRealmLV = NPCCommon.GetRealmLV(atkObj)