|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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() | 
|---|
|  |  |  | 
|---|
|  |  |  | #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) | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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) | 
|---|