ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -73,25 +73,16 @@
# @param hurtList 是g_skillHurtList
def AddHurt(tagObj, hurtList, hurtType, hurtValue):
    tagObjType = tagObj.GetGameObjType()
    #if tagObjType == IPY_GameWorld.gotPlayer:
    if not hasattr(tagObj, "GetHPEx"):
        # 目标是玩家则超过xx亿部分为0,玩家暂无开放接口
        hurtList.AddHurt(tagObjType, tagObj.GetID(), hurtType, hurtValue, tagObj.GetHP(), 0)
    else:
        hurtList.AddHurt(tagObjType, tagObj.GetID(), hurtType, hurtValue, tagObj.GetHP(), tagObj.GetHPEx())
    hurtList.AddHurt(tagObjType, tagObj.GetID(), hurtType, hurtValue % ShareDefine.Def_PerPointValue,
                     hurtValue / ShareDefine.Def_PerPointValue, tagObj.GetHP(), tagObj.GetHPEx())
    return
# 伤血列表累积记录,超DWORD特殊缩减处理
def AddHurtValue(defender, attackID, attackHurtType, value):
    defendHurtList = defender.GetPlayerHurtList()
    if not hasattr(defender, "GetMaxHPEx"):
        defendHurtList.AddHurtValue(attackID, attackHurtType, value)
        return
    #总血量有超过DWORD的情况
    value = NPCCommon.FixValueByValueEx(defender.GetMaxHPEx(), value)
    defendHurtList.AddHurtValue(attackID, attackHurtType, value)
    defendHurtList.AddHurtValue(attackID, attackHurtType, value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)
    return
def AddTeamPlayerHurtValue(defender, teamID, playerID, value):
    # 添加队伍成员对NPC伤血累计
    if not teamID:
@@ -249,7 +240,7 @@
        return
    
    #已经死亡了,不变色
    if curPlayer.GetHP() <= 0:
    if GameObj.GetHP(curPlayer) <= 0:
        return
    
    curPlayerNameColor = curPlayer.GetPlayerNameColor()
@@ -750,9 +741,6 @@
#  @remarks 玩家角色及宠物、召唤兽之间产生的伤害都算PVP伤害; 
#           另反伤及持续掉血buff也算, 但反伤及buff仅计算玩家之间
def OnPVPDamage(curPlayer, damageValue, tagPlayer, damageMsg):
    #GameWorld.DebugLog("%s curPlayerID(%sLVEX:%s)=%s,tagPlayerID(%sLVEX:%s)=%s,damageValue=%s"
    #    % (damageMsg, curPlayer.GetAccID(), curPlayer.GetLVEx(), curPlayer.GetPlayerID(),
    #       tagPlayer.GetAccID(), tagPlayer.GetLVEx(), tagPlayer.GetPlayerID(), damageValue))
    FBLogic.OnPVPDamage(curPlayer, damageValue, tagPlayer)
    return
@@ -1832,7 +1820,8 @@
        #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s" 
        #                   % (fightPowerMin, fightPowerMax, everyFightPower))
        
    effFightPower = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPower)
    effFightPower = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPower) \
                    + curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPowerEx) * ChConfig.Def_PerPointValue
    effPlayerCount = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCount)
    refreshPlayerCountTick = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCountTick)
    if not refreshPlayerCountTick or tick - refreshPlayerCountTick >= 3000:
@@ -1851,7 +1840,7 @@
            effPlayerCount += 1
            if fightPowerMin:          
                seePlayer = GameWorld.GetObj(seeObj.GetID(), seeObjType)
                fightPowerTotal += (0 if not seePlayer else seePlayer.GetFightPower())
                fightPowerTotal += (0 if not seePlayer else PlayerControl.GetFightPower(seePlayer))
        
        effPlayerCount = max(effPlayerCount, 1)
        
@@ -1862,7 +1851,8 @@
        if maxPlayerCount and effPlayerCount > maxPlayerCount:
            effPlayerCount = maxPlayerCount
            
        curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPFightPower, effFightPower)
        curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPFightPower, effFightPower % ChConfig.Def_PerPointValue)
        curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPFightPowerEx, effFightPower / ChConfig.Def_PerPointValue)
        curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCount, effPlayerCount)
        #GameWorld.DebugLog("刷新影响人数: effPlayerCount=%s,effFightPower=%s" % (effPlayerCount, effFightPower))
        
@@ -1936,7 +1926,8 @@
    reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
    
    # 被攻击被动技能特殊减免 受到单次伤害超过生命上限10%时候,减免50%伤害,CD10秒
    defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue)
    defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue % ShareDefine.Def_PerPointValue)
    defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValueEx, hurtValue / ShareDefine.Def_PerPointValue)
    reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
    hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
    
@@ -1981,11 +1972,11 @@
# 血盾支持多个同时存在, 反弹也会被吸收
def CalcBloodShield(atkObj, defObj, hurtValue):
    # 伤害值用于血盾抵消
    defObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, hurtValue)
    GameObj.SetBloodShiledHurt(defObj, hurtValue)
    
    PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_BloodShield)
    
    return defObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurt)
    return GameObj.GetBloodShiledHurt(defObj)
# 计算攻击伤害
@@ -2069,7 +2060,7 @@
                suppressReMaxHP = 0 if not suppressLVIpyData else suppressLVIpyData.GetReMaxHP()
        suppressNPCFightPower = NPCCommon.GetSuppressFightPower(atkObj)
        if suppressNPCFightPower:
            suppressFightPower = max(0, suppressNPCFightPower - defObj.GetFightPower())
            suppressFightPower = max(0, suppressNPCFightPower - PlayerControl.GetFightPower(defObj))
            
    mustHit = False
    helpBattleFormatKey = ""
@@ -2217,7 +2208,7 @@
        aFinalHurt += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
        
        aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
        aFightPower = atkObj.GetFightPower()
        aFightPower = PlayerControl.GetFightPower(atkObj)
        
        
        
@@ -2245,7 +2236,7 @@
        dDamagePerPVPReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReducePVP)
        dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
        dBeHurtPer = PlayerControl.GetBeHurtPer(defObj)      # 加深受到伤害百分比
        dFightPower = defObj.GetFightPower()
        dFightPower = PlayerControl.GetFightPower(defObj)
        dFinalHurtReducePer = PlayerControl.GetFinalHurtReducePer(defObj)
        dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
        
@@ -2333,7 +2324,7 @@
    hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
    if isDeadlyHit:
        hurtValue *= deadlyHitMultiValue
    hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord)
    #hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord)
    
    if hurtType == ChConfig.Def_HurtType_Normal and atkSkillPerYinji > 0:
        return hurtValue, ChConfig.Def_HurtType_Yinji
@@ -2401,7 +2392,7 @@
        
    if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
        # 记录最后一次伤害值
        atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtValue, resultHurtType.RealHurtHP)
        GameObj.SetLastHurtValue(atkObj, resultHurtType.RealHurtHP)
        if defObj.GetGameObjType() == IPY_GameWorld.gotNPC:
            atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtNPCObjID, defObj.GetID())
        else:
@@ -2514,7 +2505,7 @@
        else:
            GameObj.SetHP(atkObj, remainHP)
            #广播血量
            #atkObj.Notify_HPEx()
            #atkObj.Notify_HP()
    
    elif atkObjType == IPY_GameWorld.gotPlayer:
        GameObj.SetHP(atkObj, remainHP, False)
@@ -2969,13 +2960,13 @@
    attackPrestige = PlayerControl.GetPrestige(curPlayer)    # 攻击者威望
    attackNotoriety = curPlayer.GetInfamyValue()    # 攻击者恶名值
    attackPkValue = curPlayer.GetPKValue()  # 攻击者pk值
    attackFightPower = curPlayer.GetFightPower() # 攻击者战斗力
    attackFightPower = PlayerControl.GetFightPower(curPlayer) # 攻击者战斗力
    
    defendLV = defender.GetLV()    # 防守者等级
    defendPrestige = PlayerControl.GetPrestige(defender)    # 防守者威望
    defendNotoriety = defender.GetInfamyValue()    # 防守者恶名值
    defendPkValue = defender.GetPKValue()  # 防守者pk值
    defendFightPower = defender.GetFightPower() # 防守者战斗力
    defendFightPower = PlayerControl.GetFightPower(defender) # 防守者战斗力
    
#    #今日杀人获得威望值
#    prestigeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_KillPlayerAddPrestige)
@@ -3053,6 +3044,6 @@
    srcID, srcType = 0, 0
    if srcObj:
        srcID, srcType = srcObj.GetID(), srcObj.GetGameObjType()
    HPEx = 0 if not hasattr(curObj, "GetHPEx") else curObj.GetHPEx()
    curObj.ChangeHPView(skillID, min(changeHP, ChConfig.Def_UpperLimit_DWord), changType, srcID, srcType, curObj.GetHP(), HPEx)
    curObj.ChangeHPView(skillID, changeHP % ShareDefine.Def_PerPointValue, changeHP / ShareDefine.Def_PerPointValue,
                        changType, srcID, srcType, curObj.GetHP(), curObj.GetHPEx())
    return