hxp
4 天以前 67a84dc38db8f7d0f85b03e2b06ba728d95c1e82
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -33,26 +33,19 @@
import SkillCommon
import FBLogic
import ReadChConfig
import PetControl
import GameMap
import PassiveBuffEffMng
import GameFuncComm
import ShareDefine
import SkillShell
import FormulaControl
import IpyGameDataPY
import PyGameData
import GameObj
import BuffSkill
import PlayerState
import ChPyNetSendPack
import NPCHurtManager
import NetPackCommon
import FamilyRobBoss
import FBCommon
import ChNPC
import BossHurtMng
import NPCHurtMgr
import ChNetSendPack
import TurnAttack
@@ -437,28 +430,6 @@
    #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.GetNPCDataPy(npcID)
    if npcDataEx:
        return npcDataEx.GetAtkDistType()
    return ChConfig.AtkDistType_Short
#--------------------------------------------------------------------------
## 设置玩家进入战斗状态
#  @param defender 当前玩家(被攻击了)
@@ -637,19 +608,11 @@
        
    curObjType = curObj.GetGameObjType()
    if curObjType == IPY_GameWorld.gotPlayer:
        #BossHurtMng.BossAddPlayerInHurtList(curObj, curTagObj, hurtHP)
        FamilyRobBoss.OnPlayerHurtFamilyOwnerBoss(curObj, curTagObj, hurtHP)
        if curTagObj.GetGameObjType() == IPY_GameWorld.gotNPC:
            FBLogic.DoFB_Player_HurtNPC(curObj, curTagObj, hurtHP)
        if GameObj.GetHP(curTagObj) == 0:
            curTagObj.SetDict(ChConfig.Def_PlayerKey_LastHurt, curObj.GetPlayerID())
            
        if NPCHurtManager.AddHurtValue(curObj, curTagObj, hurtHP, isBounce):
            return
        if NPCHurtMgr.AddHurtValue(curObj, curTagObj, hurtHP, isBounce):
            return
        curTeam = curObj.GetTeam()
        if curTeam == None:
            #无队伍,添加个人伤害
@@ -715,10 +678,6 @@
        #if not CheckAttackNPCByCnt(attacker, defender):
        #    return False
        
        #击杀次数判断
        if not NPCHurtManager.IsAssistPlayer(attacker.GetPlayerID(), defender) and not CheckKillNPCByCnt(attacker, defender):
            return False
        #仙盟归属NPC判断
        if not CheckCanAttackFamilyOwnerNPC(attacker, defender):
            return False
@@ -729,22 +688,18 @@
        #if not CheckAttackNPCByCnt(defender, attacker, False):
        #    return False
        
        #击杀次数判断
        if not CheckKillNPCByCnt(defender, attacker, False) and not NPCHurtManager.IsAssistPlayer(defender.GetPlayerID(), attacker):
            return False
        #仙盟归属NPC判断
        if not CheckCanAttackFamilyOwnerNPC(defender, attacker, False):
            return False
        
    # NPC打NPC
    elif atkObjType == IPY_GameWorld.gotNPC and defObjType == IPY_GameWorld.gotNPC:
        if PetControl.IsPet(attacker) or attacker.GetGameNPCObjType()== IPY_GameWorld.gnotSummon:
            #击杀次数判断
            if not CheckKillNPCByCnt(attacker, defender, False):
                ownerPlayer = GetAttackPlayer(attacker)[0]
                if ownerPlayer and not NPCHurtManager.IsAssistPlayer(ownerPlayer.GetPlayerID(), defender):
                    return False
        if attacker.GetGameNPCObjType()== IPY_GameWorld.gnotSummon:
            ##击杀次数判断
            #if not CheckKillNPCByCnt(attacker, defender, False):
            #    ownerPlayer = GetAttackPlayer(attacker)[0]
            #    if ownerPlayer and not NPCHurtManager.IsAssistPlayer(ownerPlayer.GetPlayerID(), defender):
            #        return False
                
            #仙盟归属NPC判断
            if not CheckCanAttackFamilyOwnerNPC(attacker, defender, False):
@@ -857,20 +812,7 @@
        if not GameFuncComm.GetFuncCanUse(atkPlayer, funcID):
            PlayerControl.NotifyCode(atkPlayer, funcSysMark)
            return
    canKillCnt = BossHurtMng.GetCanKillBossCnt(atkPlayer, index)[0]
    if canKillCnt <= 0:
        #if BossHurtMng.GetPlayerBossHurt(atkPlayer, defender):
        #    GameWorld.DebugLog("攻击过该boss可继续攻击")
        #    return True
        #次数不足
        # 实际攻击者类型None则需要提示玩家
        if npcObjType is None:
            if isNotify:
                sysMark = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit', 3, {}).get(index, '')
                PlayerControl.NotifyCode(atkPlayer, sysMark)
        return False
    #npcDataEx = NPCCommon.GetNPCDataPy(npcID)
    #if npcDataEx and npcDataEx.GetFightPowerLackAtkLimit():
    #    if npcDataEx.GetSuppressFightPower() > PlayerControl.GetFightPower(atkPlayer):
@@ -905,9 +847,6 @@
    hasAttackCnt = atkPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WorldBoss_HurtCnt, 0)
    
    if hasAttackCnt >= limitCnt:
        #if BossHurtMng.GetPlayerBossHurt(atkPlayer, defender):
        #    GameWorld.DebugLog("攻击过该boss可继续攻击")
        #    return True
        #次数不足
        # 实际攻击者类型None则需要提示玩家
        if npcObjType is None:
@@ -940,12 +879,6 @@
                # 召唤兽主人为玩家
                if summonOwner and summonOwner.GetGameObjType() == IPY_GameWorld.gotPlayer:
                    return summonOwner, npcObjType
    # 判断宠物主人
    elif npcObjType == IPY_GameWorld.gnotPet:
        ownerPlayer = PetControl.GetPetOwner(atkObj)
        if ownerPlayer != None:
            return ownerPlayer, npcObjType
        
    return None, None
@@ -1543,25 +1476,6 @@
# 攻击时防守方神兵护盾的处理
def CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick):
    return hurtValue
#    if defObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
#        return hurtValue
#
#    if not CheckIsPlayerOnwer(atkObj):
#        return hurtValue
#
#    curProDef = PlayerControl.GetProDef(defObj)
#    if not curProDef:
#        return hurtValue
#
#    absortValue = min(PlayerControl.GetProDefAbsorb(defObj)*hurtValue/ChConfig.Def_MaxRateValue, curProDef)
#
#    PlayerControl.SetProDef(defObj, curProDef - absortValue)
#
#    # 被动技能触发
#    defObj.SetDict(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef, curProDef)
#    PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
#    return hurtValue - absortValue
# 设置玩家一次主动型攻击中的第一个防御者
def SetFirstDefender(attacker, defObj, curSkill):
@@ -1680,8 +1594,7 @@
            
    elif defObjType == IPY_GameWorld.gotNPC:
        if defObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
            #设置宠物剩余血量
            PetControl.SetPetHP(defObj, remainHP)
            pass
            
        elif defObj.GetType() == ChConfig.ntHelpBattleRobot:
            remainHP = min(dHP, max(GameObj.GetMaxHP(defObj)/2, remainHP)) # 助战机器人剩余血量不能少于一半
@@ -2235,8 +2148,6 @@
            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)
@@ -2270,7 +2181,7 @@
# @param None
# @return 攻击形式字符串
def GetAtkState(atkObj, defObj):
    isPet = PetControl.IsPet(atkObj)
    isPet = False
    if IsPVENPCObj(atkObj) or IsPVENPCObj(defObj):
        return 'PVE_%s' if not isPet else 'PetVE_%s'
    
@@ -2331,9 +2242,9 @@
    #    GameWorld.DebugLog("不能攻击,不反弹")
    #    return
    #杀怪次数判断
    if not CheckKillNPCByCnt(defObj, atkObj, False) and not NPCHurtManager.IsAssistPlayer(defObj.GetPlayerID(), atkObj):
        #GameWorld.DebugLog("不能攻击,不反弹")
        return
    #if not CheckKillNPCByCnt(defObj, atkObj, False) and not NPCHurtManager.IsAssistPlayer(defObj.GetPlayerID(), atkObj):
    #    #GameWorld.DebugLog("不能攻击,不反弹")
    #    return
    
    #没有反弹退出
    defObj_DamageBackRate = defObj.GetDamageBackRate()
@@ -2358,7 +2269,7 @@
    if atkObjType == IPY_GameWorld.gotNPC:
        #宠物回血
        if atkObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
            PetControl.SetPetHP(atkObj, remainHP)
            pass
        #普通NPC回血
        else:
            GameObj.SetHP(atkObj, remainHP)
@@ -2612,10 +2523,6 @@
    elif curPlayerAttackMode == IPY_GameWorld.amAll:
        pass
    
    # 协助关系不可攻击
    if NPCHurtManager.IsAssistRelation(curPlayer, tagPlayer):
        return ChConfig.Type_Relation_Friend, ChConfig.Def_PASysMessage_NotAttackTeam
    # 以下为所属区域的一些特殊处理
    #普通区
    if curPlayerAreaType == IPY_GameWorld.gatNormal: