From dc0b92c1e2fe9f3d24c183b325dad54d088735c1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 10 七月 2025 17:01:24 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_ServerCode --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 619 +++++++++++++++++-------------------------------------- 1 files changed, 194 insertions(+), 425 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py index 30e0d4d..d4639ce 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py @@ -30,24 +30,16 @@ import IPY_GameWorld import PlayerControl import NPCCommon -#import ItemControler import SkillCommon import EffGetSet import FBLogic -import EventShell import ReadChConfig import PetControl import GameMap -import PlayerTruck -#import PlayerPrestigeSys -import PlayerFamily -#import BossHurtMng import PassiveBuffEffMng -import PlayerSuccess import GameFuncComm import ShareDefine import SkillShell -import PlayerVip import FormulaControl import IpyGameDataPY import PyGameData @@ -63,6 +55,8 @@ import ChNPC import BossHurtMng import NPCHurtMgr +import ChNetSendPack +import TurnAttack import datetime import math @@ -216,49 +210,6 @@ curTagPlayer.GameServer_AddEnemy(curPlayer.GetID(), curPlayer.GetName()) return - -## 当玩家杀死镖车的时候触发 -# @param curPlayer 杀人者 -# @param defender 被杀者 -# @param tick 当前时间 -# @return None -# @remarks 函数详细说明. -def OnPlayerKillTruck(curPlayer, curTruck, tick): - - if curPlayer == None or curTruck == None: - return - - #区域 - curPlayerAreaType = GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY()) - truckAreaType = GameMap.GetAreaTypeByMapPos(curTruck.GetPosX(), curTruck.GetPosY()) - - #自由区域,合法,返回True - if curPlayerAreaType == IPY_GameWorld.gatFreePK or truckAreaType == IPY_GameWorld.gatFreePK: - return - - #家族区域,PK不是同一家族的玩家或其宠物,合法,返回True - if curPlayerAreaType == IPY_GameWorld.gatFamilyPK or truckAreaType == IPY_GameWorld.gatFamilyPK: - return - - #已经死亡了,不变色 - if GameObj.GetHP(curPlayer) <= 0: - return - - curPlayerNameColor = curPlayer.GetPlayerNameColor() - #自己如果不是白名就不变色 - if curPlayerNameColor != IPY_GameWorld.pncNormal: - return - - curTruckNameColor = PlayerTruck.GetTruckNameColor(curTruck) - if curTruckNameColor != IPY_GameWorld.pncNormal: - #目标玩家不是白名就不变色 - return - - #灰名(9) - #SkillCommon.AddBuffBySkillType(curPlayer , ChConfig.Def_SkillID_Gray , tick) - return - - ## 当玩家杀死玩家的时候触发 # @param curPlayer 杀人者 # @param defender 被杀者 @@ -268,12 +219,6 @@ def OnPlayerKillPlayer(curPlayer, defender, tick): PlayerState.SetPKStateTick(curPlayer, tick) - - #触发击杀玩家事件 - EventShell.EventResponse_OnKillEnemy(curPlayer, defender) - - #触发被杀事件 - EventShell.EventResponse_OnEnemyKill(defender, curPlayer) #通知 PlayerControl.NotifyCode(defender, "PK_lhs_318691", [curPlayer.GetName()]) @@ -486,20 +431,44 @@ # @return 攻击类型 如 IPY_GameWorld.ghtPhy # @remarks 获取攻击类型 def GetBattleType(attack, attackUseSkill): - # GetHurtType用法改成 pvp pve标识 - return IPY_GameWorld.ghtPhy -# #---技能攻击, 读表获取攻击类型--- -# if attackUseSkill != None: -# return attackUseSkill.GetHurtType() -# -# #---普通攻击--- -# -# #玩家算普通攻击 -# if attack.GetGameObjType() == IPY_GameWorld.gotPlayer: -# return IPY_GameWorld.ghtPhy -# -# #NPC读表取 -# return attack.GetHurtType() + # GetHurtType 个位数用法改成 pvp pve标识,十位数-物攻法攻 IPY_GameWorld.ghtPhy = 1 + #---技能攻击, 读表获取攻击类型--- + if attackUseSkill != None: + ght = attackUseSkill.GetHurtType() / 10 + if ght == IPY_GameWorld.ghtMag: # 做配置兼容用,优先验证法伤,否则默认物伤 + return IPY_GameWorld.ghtMag + return IPY_GameWorld.ghtPhy + + #---普通攻击--- + + #玩家算普通攻击 + if attack.GetGameObjType() == IPY_GameWorld.gotPlayer: + return IPY_GameWorld.ghtPhy + + #NPC读表取 + return attack.GetHurtType() + +def GetAtkDistType(curObj): + ## 获取是近战还是远程,默认近战 + if curObj.GetGameObjType() != IPY_GameWorld.gotNPC: + return ChConfig.AtkDistType_Short + + playerID = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_LineupPlayerID) + if not playerID: + return ChConfig.AtkDistType_Short + + heroID = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_HeroID) + if heroID: + heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) + if heroIpyData: + return heroIpyData.GetAtkDistType() + + npcID = curObj.GetNPCID() + npcDataEx = NPCCommon.GetNPCDataEx(npcID) + if npcDataEx: + return npcDataEx.GetAtkDistType() + + return ChConfig.AtkDistType_Short ## 输入基础数值,返回增强后的值 - 技能加强 # @param value 基础值 @@ -731,10 +700,7 @@ return curTeam = curObj.GetTeam() - - #2012-04-23 jiang 攻击镖车只算个人伤害 - if curTagObj.GetGameObjType() == IPY_GameWorld.gotNPC and \ - curTagObj.GetGameNPCObjType() == IPY_GameWorld.gnotTruck or curTeam == None: + if curTeam == None: #无队伍,添加个人伤害 AddHurtValue(curTagObj, curObj.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, hurtHP) return True @@ -1205,18 +1171,20 @@ # @return True or False # @remarks 函数详细说明. def CheckNPCAttackDist(curNPC, curTag, skill): - #获取距离 - dist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), - curTag.GetPosX(), curTag.GetPosY()) - #普通攻击 - if skill == None: - if dist > curNPC.GetAtkDist(): - return - #技能攻击 - elif dist > skill.GetAtkDist(): - return - + #卡牌暂不限制 return True +# #获取距离 +# dist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), +# curTag.GetPosX(), curTag.GetPosY()) +# #普通攻击 +# if skill == None: +# if dist > curNPC.GetAtkDist(): +# return +# #技能攻击 +# elif dist > skill.GetAtkDist(): +# return +# +# return True ## 检查被攻击后,特殊Buff消失 # @param curTagPlayer 被攻击方 @@ -1345,34 +1313,35 @@ hurtType = ChConfig.Def_HurtType_Normal # 伤害类型结果信息, 默认值{伤害类型:[是否触发, 伤害计算值, 触发时防守方的伤害减免值], ...} hurtTypeResultDict = { - ChConfig.Def_HurtType_LuckyHit:[False, 0, 0], + #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], - ChConfig.Def_HurtType_DeadlyHit:[False, 0, 0], + #ChConfig.Def_HurtType_Zhuxian:[False, 0, 0], + #ChConfig.Def_HurtType_DeadlyHit:[False, 0, 0], ChConfig.Def_HurtType_ThumpHit:[False, 0, 0], } - calcTypeList = [] - if atkObjType == IPY_GameWorld.gotPlayer: - calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit, - ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit, - ChConfig.Def_HurtType_ThumpHit] - if defObjType == IPY_GameWorld.gotPlayer: - calcTypeList += [ChConfig.Def_HurtType_Parry] - # 暂时只计算玩家 + #calcTypeList = [] + #if atkObjType == IPY_GameWorld.gotPlayer: + # calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit, + # ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit, + # ChConfig.Def_HurtType_ThumpHit] + #if defObjType == IPY_GameWorld.gotPlayer: + # calcTypeList += [ChConfig.Def_HurtType_Parry] + calcTypeList = [ChConfig.Def_HurtType_SuperHit, ChConfig.Def_HurtType_Parry] if not calcTypeList: return hurtType, hurtTypeResultDict - # 优先级列表, 互斥列表 - priorityList, mutexList = ReadChConfig.GetEvalChConfig("CalcHurtTypeInfo") + # 优先级列表 + priorityList = [ChConfig.Def_HurtType_Parry, ChConfig.Def_HurtType_SuperHit] + mutexList = [] # 互斥列表 happenFunc = { - ChConfig.Def_HurtType_LuckyHit:__HurtTypeHappen_LuckyHit, + #ChConfig.Def_HurtType_LuckyHit:__HurtTypeHappen_LuckyHit, ChConfig.Def_HurtType_SuperHit:__HurtTypeHappen_SuperHit, ChConfig.Def_HurtType_Parry:__HurtTypeHappen_Parry, #ChConfig.Def_HurtType_Zhuxian:__HurtTypeHappen_Zhuxian, - ChConfig.Def_HurtType_DeadlyHit:__HurtTypeHappen_Deadly, - ChConfig.Def_HurtType_ThumpHit:__HurtTypeHappen_ThumpHit, + #ChConfig.Def_HurtType_DeadlyHit:__HurtTypeHappen_Deadly, + #ChConfig.Def_HurtType_ThumpHit:__HurtTypeHappen_ThumpHit, } hadCheckList = [] # 已经处理过的伤害类型列表 @@ -1435,10 +1404,10 @@ ''' if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_SuperHit): - return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj) + return True, atkObj.GetSuperHit(), GameObj.GetSuperHitReduce(defObj) aSuperHitRate = atkObj.GetSuperHitRate() - dSuperHitRateReduce = PlayerControl.GetSuperHitRateReduce(defObj) + dSuperHitRateReduce = GameObj.GetSuperHitRateReduce(defObj) superHitRate = eval(ReadChConfig.GetChConfig("CalcSuperHitRate")) superHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_AddSuperHitRate) @@ -1447,7 +1416,7 @@ if superHitRate <= 0: return if GameWorld.CanHappen(superHitRate): - return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj) + return True, atkObj.GetSuperHit(), GameObj.GetSuperHitReduce(defObj) return def __HurtTypeHappen_Parry(atkObj, defObj, happenState, curSkill): @@ -1482,7 +1451,7 @@ def __HurtTypeHappen_ThumpHit(atkObj, defObj, happenState, curSkill): if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_ThumpHit): - return True, int(atkObj.GetSuperHit()*1.5), PlayerControl.GetSuperHitReduce(defObj) + return True, int(atkObj.GetSuperHit()*1.5), GameObj.GetSuperHitReduce(defObj) thumpHitRate = 0 thumpHitRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, @@ -1492,7 +1461,7 @@ if thumpHitRate <= 0: return if GameWorld.CanHappen(thumpHitRate): - return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj) + return True, atkObj.GetSuperHit()*2, GameObj.GetSuperHitReduce(defObj) return @@ -1677,7 +1646,7 @@ return if curSkill and curSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill, - ChConfig.Def_SkillFuncType_NormalAttack]: + ChConfig.Def_SkillFuncType_TurnNormaAttack]: return if attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender): @@ -1791,10 +1760,6 @@ #设置宠物剩余血量 PetControl.SetPetHP(defObj, remainHP) - elif defObj.GetGameNPCObjType() == IPY_GameWorld.gnotTruck: - remainHP = max(PlayerTruck.GetTruckDestroyMinHP(defObj), remainHP) - GameObj.SetHP(defObj, remainHP) - elif defObj.GetType() == ChConfig.ntHelpBattleRobot: remainHP = min(dHP, max(GameObj.GetMaxHP(defObj)/2, remainHP)) # 助战机器人剩余血量不能少于一半 GameObj.SetHP(defObj, remainHP) @@ -2029,9 +1994,6 @@ # 计算攻击伤害 # maxHurt参数用于模拟计算最大伤害,防范客户端攻击伤害过高 def CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, happenState=None, **atkwargs): - # 翻滚闪避特殊处理 - if tick - defObj.GetDictByKey(ChConfig.Def_PlayerKey_SomersaultTime) < 500: - return 0, ChConfig.Def_HurtType_Miss multiValue = 1 # 伤害倍值 summonAtkPer = 1 # 召唤继承提高基础攻击力,取表 @@ -2049,106 +2011,61 @@ atkObjType = atkObj.GetGameObjType() defObjType = defObj.GetGameObjType() - - aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType) # 获取境界 - if defObjType == IPY_GameWorld.gotNPC and ChConfig.IsGameBoss(defObj) and dRealmLV > aRealmLV: - aRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", aRealmLV) - dRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", dRealmLV) - aRealmLVLarge = aRealmIpyData.GetLvLarge() if aRealmIpyData else 0 - dRealmLVLarge = dRealmIpyData.GetLvLarge() if dRealmIpyData else 0 - if dRealmLVLarge > aRealmLVLarge: - if atkObjType == IPY_GameWorld.gotPlayer: - GameWorld.DebugLog("BossRealmHint%s-%s"%(dRealmLV, aRealmLV)) - PlayerControl.NotifyCode(atkObj, 'BossRealmHint', [dRealmLVLarge]) - - # 攻击高境界的BOSS 伤害固定为1 - return 1, ChConfig.Def_HurtType_Normal - + atkType = GetBattleType(atkObj, curSkill) happenState = happenState if happenState else SkillShell.GetHappenState(curSkill) happenState += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_HappenState) - - aLV = atkObj.GetLV() # 攻击方等级 - dLV = defObj.GetLV() # 防守方等级 - - aHit = atkObj.GetHit() - if curSkill and atkObjType == IPY_GameWorld.gotPlayer and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack: - aHit = aHit*IpyGameDataPY.GetFuncCfg("FightHappenRate", 2) - - aHitSuccessRate = PlayerControl.GetHitSucessRate(atkObj) if atkObjType == IPY_GameWorld.gotPlayer else ChConfig.Def_MaxRateValue - aHitSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_HitSuccess) - dMiss = defObj.GetMiss() + + atkID = atkObj.GetID() + defID = defObj.GetID() + #aLV = atkObj.GetLV() # 攻击方等级 + #dLV = defObj.GetLV() # 防守方等级 + + aHit = GameObj.GetMissDefRate(atkObj)#atkObj.GetHit() # 抗闪避率 - 命中 + #aHitSuccessRate = PlayerControl.GetHitSucessRate(atkObj) if atkObjType == IPY_GameWorld.gotPlayer else ChConfig.Def_MaxRateValue + #aHitSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_HitSuccess) + dMiss = GameObj.GetMissRate(defObj)#defObj.GetMiss() dMiss += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_MissPer) - dMissSuccessRate = PlayerControl.GetMissSucessRate(defObj) if defObjType == IPY_GameWorld.gotPlayer else 0 - dMissSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_MissSuccessPer) + #dMissSuccessRate = PlayerControl.GetMissSucessRate(defObj) if defObjType == IPY_GameWorld.gotPlayer else 0 + #dMissSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_MissSuccessPer) skillID = curSkill.GetSkillID() if curSkill else 0 - atkIsBoss = 0 # 攻击方是否boss - suppressValueLV = 0 # 等级最终压制值, 由压制规则及相关参数计算得出,可作为伤害公式计算参数使用 - suppressValueFP = 0 # 战力最终压制值, 由压制规则及相关参数计算得出,可作为伤害公式计算参数使用 - suppressLV, suppressFightPower = 0, 0 # 压制等级差、战力差 - suppressReMaxHP = 0 # NPC压制等级生命值, 等级表中NPC等级对应的数据, 压制等级差大于0时才有值 - suppressNPCFightPower = 0 # 压制NPC战力 - fbFightPower, fbBaseHurt = 0, 0 # 副本战力, 副本保底伤害 - #当攻击方为NPC,防守方为玩家时,计算压制等级 及 压制战力 - if atkObjType == IPY_GameWorld.gotNPC and defObjType == IPY_GameWorld.gotPlayer: - - if curSkill and curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_RealmSuppress: - # 境界压制技能不对高等级境界玩家产生攻击 - aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType) - if aRealmLV <= dRealmLV: - return 0, ChConfig.Def_HurtType_Immune # 免疫 - - atkIsBoss = 1 if ChConfig.IsGameBoss(atkObj) else 0 - if NPCCommon.GetIsLVSuppress(atkObj): - suppressLV = max(0, aLV - dLV) - if suppressLV: - suppressLVIpyData = PlayerControl.GetPlayerLVIpyData(aLV) - suppressReMaxHP = 0 if not suppressLVIpyData else suppressLVIpyData.GetReMaxHP() - suppressNPCFightPower = NPCCommon.GetSuppressFightPower(atkObj) - if suppressNPCFightPower: - suppressFightPower = max(0, suppressNPCFightPower - PlayerControl.GetFightPower(defObj)) - - mustHit = False - helpBattleFormatKey = "" - if atkObjType == IPY_GameWorld.gotNPC and atkObj.GetType() == ChConfig.ntHelpBattleRobot: - mustHit = True - suppressNPCFightPower = NPCCommon.GetSuppressFightPower(atkObj) - fbFightPower = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBFightPower) - fbBaseHurt = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBBaseHurt) - helpBattleFormatKey = "HelpRobot_Atk" - if defObjType == IPY_GameWorld.gotNPC and defObj.GetType() == ChConfig.ntHelpBattleRobot: - mustHit = True - suppressNPCFightPower = NPCCommon.GetSuppressFightPower(defObj) - fbFightPower = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBFightPower) - fbBaseHurt = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBBaseHurt) - helpBattleFormatKey = "HelpRobot_Def" - - #命中公式 攻击方类型不同,公式不同 - hitFormula = ReadChConfig.GetChConfig('CalcCanHit') + angerOverflow = 0 # 怒气溢出值 + turnFightPosInfo = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightPosInfo) + mustHit = False + if SkillCommon.isXPSkill(curSkill): + mustHit = True + GameWorld.DebugLog(" XP必命中") + angerOverflow = max(GameObj.GetXP(atkObj) - IpyGameDataPY.GetFuncCfg("AngerXP", 2), 0) + + if not mustHit: + if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_HitOn): + mustHit = True + GameWorld.DebugLog(" 技能必命中: skillID=%s" % skillID) + + pow = math.pow + #命中公式 攻击方类型不同,公式不同 if not mustHit and not PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_MustBeHit): # 技能对指定BOSS无效果的返回MISS - if defObjType == IPY_GameWorld.gotNPC and defObj.GetIsBoss() not in ChConfig.Def_SkillAttack_NPCIsBoss \ - and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss and SkillShell.IsNPCSkillResist(defObj): - return 0, ChConfig.Def_HurtType_Miss + #if defObjType == IPY_GameWorld.gotNPC and defObj.GetIsBoss() not in ChConfig.Def_SkillAttack_NPCIsBoss \ + #and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss and SkillShell.IsNPCSkillResist(defObj): + # return 0, ChConfig.Def_HurtType_Miss #攻击方处于嘲讽,防守方处于免疫嘲讽者攻击则miss - if GameObj.GetPyPlayerState(atkObj, ChConfig.Def_PlayerState_Sneer) and \ - GameObj.GetPyPlayerState(defObj, ChConfig.Def_PlayerState_MissSneerAtk): + #if GameObj.GetPyPlayerState(atkObj, ChConfig.Def_PlayerState_Sneer) and \ + #GameObj.GetPyPlayerState(defObj, ChConfig.Def_PlayerState_MissSneerAtk): + # return 0, ChConfig.Def_HurtType_Miss + + missNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnMissNum) + missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1)) + if GameWorld.CanHappen(missRate): return 0, ChConfig.Def_HurtType_Miss - #添加是否必命中 - if not IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_HitOn) \ - and eval(hitFormula) < 0: - return 0, ChConfig.Def_HurtType_Miss - - hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill) #GameWorld.DebugLog("GetHurtHP hurtType=%s, hurtTypeResultDict=%s" % (hurtType, hurtTypeResultDict)) - isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击 # 重击和暴击互斥,并且使用同一个参数 isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_ThumpHit] @@ -2168,17 +2085,11 @@ aSuperHit = aSuperHit*(thumpPer + ChConfig.Def_MaxRateValue)/ChConfig.Def_MaxRateValue dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果 - isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击 - isDeadlyHit, deadlyHitMultiValue, _ = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit] # 致命一击 - + #isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击 + #isDeadlyHit, deadlyHitMultiValue, _ = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit] # 致命一击 + if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_OneDamage): return 1, hurtType - - wReFightPower = 0 - worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) - if worldLV: - wLVIpyData = PlayerControl.GetPlayerLVIpyData(worldLV) - wReFightPower = 0 if not wLVIpyData else wLVIpyData.GetReFightPower() # 当前世界等级参考战力 # 改变技能伤害 atkSkillPer, atkSkillValue = ChangeSkillHurt(atkObj, defObj, curSkill, atkSkillPer, atkSkillValue) @@ -2186,7 +2097,7 @@ # --- 新增普通攻击的数值和技能攻击的数值,根据类型各自计算 if atkObjType == IPY_GameWorld.gotPlayer: - if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_NormalAttack: + if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaAttack: atkSkillPer += PlayerControl.GetNormalHurtPer(atkObj) atkSkillValue += PlayerControl.GetNormalHurt(atkObj) elif curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_FbPassiveSkill]: @@ -2213,31 +2124,28 @@ PassiveBuffEffMng.OnPassiveBuffTrigger(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSubLayer, tick) elif hurtType == ChConfig.Def_HurtType_ThumpHit: atkSkillValue += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_ThumpSkillValue) - - if isLuckyHit: - # 会心一击时增加会心伤害固定值 - aLuckyHit += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_LuckyHit) - aLuckyHit -= PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_BeLuckyHitSubPer) - aLuckyHit = max(aLuckyHit, 0) - + #参与运算的数值 rand = random.random() #种子数 0~1 #------- 攻击方 - aMinAtk = atkObj.GetMinAtk() * summonAtkPer # 攻击方最小攻击 - aMaxAtk = atkObj.GetMaxAtk() * summonAtkPer # 攻击方最大攻击 + #aMinAtk = atkObj.GetMinAtk() * summonAtkPer # 攻击方最小攻击 + aAtk = atkObj.GetMaxAtk() * summonAtkPer # 攻击方最大攻击 aIceAtk = atkObj.GetIceAtk() # 冰攻, 元素真伤, 玩家及NPC通用 aIceAtk += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddIceAtk) #------- 防守方 - dMinAtk = defObj.GetMinAtk() # 防守方最小攻击 - dMaxAtk = defObj.GetMaxAtk() # 防守方最大攻击 + #dMinAtk = defObj.GetMinAtk() # 防守方最小攻击 + #dAtk = defObj.GetMaxAtk() # 防守方最大攻击 dDef = defObj.GetDef() # 防守方防御力 - dHP = GameObj.GetHP(defObj) # 防守方当前血量 - dMaxHP = GameObj.GetMaxHP(defObj) # 防守方最大血量 + #dHP = GameObj.GetHP(defObj) # 防守方当前血量 + #dMaxHP = GameObj.GetMaxHP(defObj) # 防守方最大血量 dIceDef = defObj.GetIceDef() # 冰防, 元素真防, 玩家及NPC通用 # 攻击方 + aNormalAtkPer = 0 + aFinalHurtPer = GameObj.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值 + aFinalHurtPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalPer) if atkObjType == IPY_GameWorld.gotPlayer: aIgnoreDefRate = atkObj.GetIgnoreDefRate() # 无视防御比率 aSkillAtkRate = atkObj.GetSkillAtkRate() # 技能攻击力加成 @@ -2247,8 +2155,6 @@ aNPCHurtAddPer = PlayerControl.GetNPCHurtAddPer(atkObj) # PVE伤害加成 aDamagePerPVP = PlayerControl.GetDamagePerPVP(atkObj) # 外层PVP伤害加成 aDamagePerPVP += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddPVPDamagePer) - aFinalHurtPer = PlayerControl.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值 - aFinalHurtPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalPer) aFinalHurt = PlayerControl.GetFinalHurt(atkObj) # 最终固定伤害 # 被动增加最终伤害 @@ -2257,12 +2163,8 @@ aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害 aFightPower = PlayerControl.GetFightPower(atkObj) - - - else: aIgnoreDefRate = 0 # 无视防御比率 - aFinalHurtPer = GameObj.GetPetDamPer(atkObj) # 最外层伤害加成, 可能为负值 aSkillAtkRate = NPCCommon.GetSkillAtkRate(atkObj) # 技能攻击力加成 if atkObjType == IPY_GameWorld.gotNPC and atkObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet: aSkillAtkRate += atkObj.GetSkillAtkRate() @@ -2272,9 +2174,13 @@ aDamagePVP = 0 # PVP固定伤害 aDamagePVE = 0 # PVE固定伤害 aFinalHurt = NPCCommon.GetFinalHurt(atkObj) # 最终固定伤害 + aOnlyFinalHurt = 0 # 额外固定伤害 aFightPower = NPCCommon.GetSuppressFightPower(atkObj) #防守方的类型 + dNormalAtkDefPer = 0 + 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) # 技能攻击力减少 @@ -2285,8 +2191,6 @@ dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少 dBeHurtPer = PlayerControl.GetBeHurtPer(defObj) # 加深受到伤害百分比 dFightPower = PlayerControl.GetFightPower(defObj) - dFinalHurtReducePer = PlayerControl.GetFinalHurtReducePer(defObj) - dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer) else: dIgnoreDefRateReduce = 0 # 无视防御比率抗性 @@ -2296,108 +2200,55 @@ dFinalHurtReduce = 0 # 最终固定伤害减少 dBeHurtPer = 0 dFightPower = NPCCommon.GetSuppressFightPower(defObj) - dFinalHurtReducePer = 0 # 最终伤害减少百分比 默认0 - #攻击字典 { 攻击类型 : '公式' } - mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) - hurtDist = ReadChConfig.GetEvalChConfig('CalcAttackValue') - - if suppressLV: - suppressFormulaKeyLV = "SuppressValueLV_%s" % (atkIsBoss) - if suppressFormulaKeyLV in hurtDist: - suppressLVFormula = hurtDist[suppressFormulaKeyLV] - suppressValueLV = eval(FormulaControl.GetCompileFormula(suppressFormulaKeyLV, suppressLVFormula)) - - if suppressFightPower: - suppressFormulaKeyFP = "SuppressValueFP_%s" % (atkIsBoss) - if suppressFormulaKeyFP in hurtDist: - suppressFPFormula = hurtDist[suppressFormulaKeyFP] - suppressValueFP = eval(FormulaControl.GetCompileFormula(suppressFormulaKeyFP, suppressFPFormula)) + aPMHurtPer = 0 # 物法增伤 + dPMHurtReduce = 0 # 物法减伤 + if atkType == IPY_GameWorld.ghtMag: # 法伤 + pass + else: # 物伤 + pass - # 境界压制规则 - # 1. 其中一方无境界等级则无效, 如普通NPC - # 2. 宠物和召唤兽(如水元素)有效, 取主人 - # 3. 玩家地境界低于BOSS则伤害固定为1 (在函数入口处已处理) - # 4. 其他情况统一境界压制 境界差*2% - if aRealmLV == 0 or dRealmLV == 0: - SuppressValueRealmRate = 10000 - else: - suppressRealmRateMapKey = "SuppressValueRealm_%s" % mapID - if suppressRealmRateMapKey not in hurtDist: - suppressRealmRateMapKey = "SuppressValueRealm" - SuppressValueRealmRate = int(eval(FormulaControl.GetCompileFormula(suppressRealmRateMapKey, hurtDist[suppressRealmRateMapKey]))) - - # 骑宠争夺最终伤害衰减 - if defObjType == IPY_GameWorld.gotNPC and FamilyRobBoss.IsHorsePetRobBoss(defObj.GetNPCID()): - ownerPlayer, npcObjType = GetAttackPlayer(atkObj) - - if ownerPlayer: - findBuff = SkillCommon.FindBuffByID(ownerPlayer, ChConfig.Def_SkillID_HorsePetRobBossKillCntBuff)[0] - if findBuff: - reduceFinalHurtPer = findBuff.GetSkill().GetEffect(0).GetEffectValue(0) - aFinalHurtPer -= reduceFinalHurtPer + # 所有万分率参数统一除10000.0 + atkSkillPer /= 10000.0 + aNormalAtkPer /= 10000.0 + dNormalAtkDefPer /= 10000.0 + aFinalHurtPer /= 10000.0 + dFinalHurtReducePer /= 10000.0 - # 仙盟boss最终伤害加成 - if atkObjType == IPY_GameWorld.gotPlayer and mapID == ChConfig.Def_FBMapID_FamilyBossMap: - aFinalHurtPer += PlayerControl.GetFamilyBossHurtPer(atkObj) - - if atkObjType == IPY_GameWorld.gotPlayer and defObjType == IPY_GameWorld.gotNPC and ChConfig.IsGameBoss(defObj): - killBossCntLimitDict = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit') - limitIndex = GameWorld.GetDictValueByKey(killBossCntLimitDict, defObj.GetNPCID()) - if limitIndex != None: - aFinalHurtPer += PlayerControl.GetBossFinalHurtPer(atkObj) - - atkStateMark = GetObjAtkStateMark(atkObj) - defStateMark = GetObjAtkStateMark(defObj) - hurtFormulaKey = "%sV%s_%s" % (atkStateMark, defStateMark, atkType) + #PVP PVE 之后再扩展 + #atkStateMark = GetObjAtkStateMark(atkObj) + #defStateMark = GetObjAtkStateMark(defObj) - suppressLVGroup = 0 # NPC压制等级组编号 - mapHurtKey = "%s_%s" % (hurtFormulaKey, mapID) - if mapHurtKey in hurtDist: - hurtFormulaKey = mapHurtKey - elif atkStateMark == "E" and defStateMark == "P": - suppressLVGroup = NPCCommon.GetIsLVSuppress(atkObj) - elif atkStateMark == "P" and defStateMark == "E": - suppressLVGroup = NPCCommon.GetIsLVSuppress(defObj) - - if suppressLVGroup: - suppressLVHurtKey = "%s_%s" % (hurtFormulaKey, suppressLVGroup) - if suppressLVHurtKey in hurtDist: - hurtFormulaKey = suppressLVHurtKey + GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s" + % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, GameObj.GetHP(defObj))) - # 助战机器人特殊伤血key - if helpBattleFormatKey: - hurtFormulaKey = helpBattleFormatKey - - if hurtFormulaKey not in hurtDist: - GameWorld.ErrLog("CalcAttackValue.txt 伤害公式未配置, key=%s" % (hurtFormulaKey)) - return 0, ChConfig.Def_HurtType_Miss - - if atkwargs.get('hurtFormulaKey', None): - # 指定公式 + if "hurtFormulaKey" in atkwargs: aBurnValue = atkwargs.get('burnValue', 0) aBurnPer = atkwargs.get('burnPer', 0) hurtFormulaKey = atkwargs.get('hurtFormulaKey', None) - - hurtFormula = hurtDist[hurtFormulaKey] - - hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula))) - if isDeadlyHit: - hurtValue *= deadlyHitMultiValue - - if atkObjType == IPY_GameWorld.gotPlayer and defObjType == IPY_GameWorld.gotNPC and mapID == ChConfig.Def_FBMapID_CrossBattlefield: - multiValue = FBLogic.GetFBPlayerHurtNPCMultiValue(atkObj, defObj) + #if hurtFormulaKey == "Burn": + # pass + #else: + hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("DOTFormula", 1)) + elif not curSkill: + hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 3)) + GameWorld.DebugLog(" 普攻伤害=%s" % (hurtValue)) + elif SkillCommon.isTurnNormalAtkSkill(curSkill): + hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 1)) + GameWorld.DebugLog(" 普攻技能伤害=%s" % (hurtValue)) + elif SkillCommon.isXPSkill(curSkill): + hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 2)) + GameWorld.DebugLog(" 怒气技能伤害=%s" % (hurtValue)) + else: + hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 4)) + GameWorld.DebugLog(" 其他伤害=%s" % (hurtValue)) if multiValue != 1: hurtValue = int(hurtValue * multiValue) - - #hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord) + hurtValue = int(hurtValue) if hurtType == ChConfig.Def_HurtType_Normal and atkSkillPerYinji > 0: return hurtValue, ChConfig.Def_HurtType_Yinji - elif hurtType == ChConfig.Def_HurtType_Normal and SuppressValueRealmRate > 10000: - # 存在压制 - return hurtValue, ChConfig.Def_HurtType_RealmSupress return hurtValue, hurtType @@ -2464,6 +2315,12 @@ atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtNPCObjID, defObj.GetID()) else: defObj.SetDict(ChConfig.Def_PlayerKey_LastAttackerObjID, atkObj.GetID()) + + TurnAttack.AddTurnObjHurtValue(atkObj, defObj, resultHurtType.HurtType, resultHurtType.RealHurtHP, resultHurtType.LostHP, curSkill) + + #if resultHurtType.RealHurtHP: + # PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_BeHurt, tick) + return @@ -2474,6 +2331,8 @@ return "P" if objType == IPY_GameWorld.gotNPC: + if obj.GetDictByKey(ChConfig.Def_Obj_Dict_LineupPlayerID): + return "P" if obj.GetType() == ChConfig.ntRobot: return "Robot" if obj.GetType() == ChConfig.ntHelpBattleRobot: @@ -2697,10 +2556,6 @@ return (taget.GetPlayerAction() == IPY_GameWorld.paDie) elif tagetType == IPY_GameWorld.gotNPC: - if taget.GetGameNPCObjType() == IPY_GameWorld.gnotTruck: - #镖车判定是否可以攻击( 损坏的镖车是无敌的 GetCanAttack = 0 ) - return (not taget.GetCanAttack()) - return (taget.GetCurAction() == IPY_GameWorld.laNPCDie) GameWorld.Log('###GetIsDead = %s ' % (tagetType)) @@ -2902,67 +2757,6 @@ #敌人关系,可PK,可加减益buff return ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None -#def GetPeaceBuff(curPlayer): -# return SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_Peace)[0] - -## 获取玩家和镖车的关系 -# @param curPlayer: 攻击方实例 -# @param curTagTruck: 镖车实例 -# @return: 可否攻击 -def GetPlayerAndTruckRelation(curPlayer, curTagTruck): - - if curPlayer == None or curTagTruck == None: - return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None - - #攻击方玩家区域 - curPlayerAreaType = GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY()) - - #镖车所在区域 - truckAreaType = GameMap.GetAreaTypeByMapPos(curTagTruck.GetPosX(), curTagTruck.GetPosY()) - - #攻击方或镖车在安全区 - if curPlayerAreaType == IPY_GameWorld.gatSafe or truckAreaType == IPY_GameWorld.gatSafe: - return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_IsSafeArea - - #攻守双方不在同一区域,不可PK,不可加增益buff - if curPlayerAreaType != truckAreaType: - return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_CurAreaNotPK - - curTagPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curTagTruck) - if curTagPlayer: - if curPlayer.GetID() == curTagPlayer.GetID(): - #不能攻击自己的镖车 - return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None - - if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Truck): - #Truck_hgg_31379:功能未开启,不能攻击镖车 - PlayerControl.NotifyCode(curPlayer, "Truck_hgg_31379", [GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_Truck)]) - return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None - - curTruckOTeamID = PlayerTruck.GetTruckTeamID(curTagTruck) - curTruckFamilyID = PlayerTruck.GetTruckFamilyID(curTagTruck) - curTruckNameColor = PlayerTruck.GetTruckNameColor(curTagTruck) - - #普通区域 - if curPlayerAreaType == IPY_GameWorld.gatNormal: - #和平模式 - if curPlayer.GetAttackMode() == IPY_GameWorld.amPeace : - #如镖车主人不是红名也不是黄名,则给系统提示:不可攻击 - if curTruckNameColor not in [IPY_GameWorld.pncGray, IPY_GameWorld.pncRed]: - return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_CurAreaNotPK - - curPlayerTeamID = curPlayer.GetTeamID() # 攻击方队伍ID - curPlayerFamilyID = curPlayer.GetFamilyID() # 攻击方家族ID - if curPlayerTeamID and curTruckOTeamID and curTruckOTeamID == curPlayerTeamID: - #攻击方和镖车主人同队伍 - return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_NotAttackTeam - - if curTruckFamilyID and curPlayerFamilyID and curTruckFamilyID == curPlayerFamilyID: - #攻击方和镖车主人同家族 - return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_NotAttackFamily - - return ChConfig.Type_Relation_Enemy, ChConfig.Def_PASysMessage_None - def IsPKProtectTime(): ## 是否是PK保护时间段 pkProtecTimeList = IpyGameDataPY.GetFuncEvalCfg("PKConfig", 1) @@ -3023,6 +2817,9 @@ if GameObj.GetHP(curObjDetel) > 0: return + if TurnAttack.SetTurnObjKilled(curObjDetel, atkObj): + return + #---玩家处理--- if curObjDetel.GetGameObjType() == IPY_GameWorld.gotPlayer: playerControl = PlayerControl.PlayerControl(curObjDetel) @@ -3066,53 +2863,10 @@ defendPkValue = defender.GetPKValue() # 防守者pk值 defendFightPower = PlayerControl.GetFightPower(defender) # 防守者战斗力 -# #今日杀人获得威望值 -# prestigeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_KillPlayerAddPrestige) -# -# addPrestige = int(eval(ReadChConfig.GetChConfig("KillPlayerPrestige"))) -# if addPrestige > 0: -# maxPrestigeByDay = ReadChConfig.GetEvalChConfig("KillPlayerMaxPrestigeByDay") -# if prestigeByDay < maxPrestigeByDay: -# #没超过每日杀人获得威望最大值, 给予威望 -# addPrestige = min(addPrestige, maxPrestigeByDay - prestigeByDay) -# PlayerPrestigeSys.AddPrestigeOffcialLV(curPlayer, addPrestige, ChConfig.Def_AddPrestige_Kill) -# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_KillPlayerAddPrestige, prestigeByDay + addPrestige) -# else: -# #GeRen_wll_0:今日获得威望已达上限 -# PlayerControl.NotifyCode(curPlayer, "PK_liubo_372238") -# -# elif addPrestige < 0: -# GameWorld.ErrLog("KillPlayerPrestige计算结果:%s" % addPrestige) - #恶名值 curPlayer.SetInfamyValue(min(attackNotoriety + ChConfig.Def_KillValue_Notoriety, ChConfig.Def_UpperLimit_DWord)) - #活跃度 -# activeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_KillPlayerAddActive) -# addActiveValue = int(eval(ReadChConfig.GetChConfig("KillPlayerFamilyAvtive"))) -# if addActiveValue > 0 and curPlayer.GetFamilyID() != 0: -# maxAvtiveByDay = ReadChConfig.GetEvalChConfig("KillPlayerMaxAvtiveByDay") -# if activeByDay < maxAvtiveByDay: -# addActiveValue = min(addActiveValue, maxAvtiveByDay - activeByDay) -# PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addActiveValue, True, \ -# PlayerFamily.Def_AddFAVReason_KillPlayer) -# PlayerControl.NotifyCode(curPlayer, "GeRen_admin_425673", [addActiveValue]) -# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_KillPlayerAddActive, activeByDay + addActiveValue) -# else: -# PlayerControl.NotifyCode(curPlayer, "PK_liubo_161795") -# -# elif addActiveValue < 0: -# GameWorld.ErrLog("KillPlayerFamilyAvtive计算结果:%s" % addActiveValue) - - #---防守者 - #威望值 -# lostPrestige = int(eval(ReadChConfig.GetChConfig("BeKilledPlayerPrestige"))) -# if lostPrestige > 0: -# PlayerPrestigeSys.SubPrestigeOffcialLV(defender, lostPrestige, ChConfig.Def_SubPrestige_BeKilled) -# elif lostPrestige < 0: -# GameWorld.ErrLog("BeKilledPlayerPrestige计算结果:%s" % lostPrestige) - #恶名值 defender.SetInfamyValue(max(defendNotoriety - ChConfig.Def_BeKilledValue_Notoriety, 0)) return @@ -3142,6 +2896,21 @@ srcID, srcType = 0, 0 if srcObj: srcID, srcType = srcObj.GetID(), srcObj.GetGameObjType() + turnFight = TurnAttack.GetTurnFightMgr().getNPCTurnFight(curObj.GetID()) + if turnFight: + clientPack = ChNetSendPack.tagObjPropertyRefreshView() + clientPack.ObjID = curObj.GetID() + clientPack.ObjType = curObj.GetGameObjType() + clientPack.SkillID = skillID + clientPack.DiffValue = changeHP % ShareDefine.Def_PerPointValue + clientPack.DiffValueEx = changeHP / ShareDefine.Def_PerPointValue + clientPack.AttackType = changType + clientPack.SrcObjID = srcID + clientPack.SrcObjType = srcType + clientPack.HP = curObj.GetHP() + clientPack.HPEx = curObj.GetHPEx() + turnFight.addBatPack(clientPack) + return curObj.ChangeHPView(skillID, changeHP % ShareDefine.Def_PerPointValue, changeHP / ShareDefine.Def_PerPointValue, changType, srcID, srcType, curObj.GetHP(), curObj.GetHPEx()) return \ No newline at end of file -- Gitblit v1.8.0