#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package Pet_Attack_Player  
 | 
# @todo: ³èÎï¹¥»÷Íæ¼Ò  
 | 
#  
 | 
# @author chenxuewei  
 | 
# @date 2010-06-26  
 | 
# @version 2.0  
 | 
#  
 | 
# @change: "2010-09-06 17:30" panwei GetBattleTypeº¯ÊýÐÞ¸Ä, ÐÂÔö²ÎÊý:¹¥»÷·½  
 | 
# @change: "2010-09-27 17:55" panwei È¡ÏûGM²»¿É¹¥»÷ÏÞÖÆ  
 | 
# @change: "2011-02-12 17:30" Alee ×¢Ê͹¥»÷ÀàÐÍÏà¹Ø  
 | 
# @change: "2011-10-26 14:20" chengaobao Ôö¼ÓÂß¼£º³ËÆï״̬±»¹¥»÷£¬×Ô¶¯ÏÂÂí  
 | 
# @change: "2011-10-27 17:20" chengaobao ½«³ËÆï״̬±»¹¥»÷£¬×Ô¶¯ÏÂÂíÂß¼ÒÆµ½BaseAttackÖÐ  
 | 
# @change: "2012-02-10 20:20" Alee Ìí¼Ó¼¼Äܱط¢Éú״̬  
 | 
# @change: "2012-10-19 14:30" jiang Ìí¼Ó¾ßÌåµÄÉ˺¦,ÓÃÓÚ¸±±¾¼ÆËã  
 | 
# @change: "2013-11-05 21:00" Alee PKÌáʾ  
 | 
# @change: "2015-06-03 14:00" hxp ´¦Àí»÷ɱÂß¼ºóÔÙSetDead£¬·ÀÖ¹Çå³ýÁÙʱ»ÆÃûºóPK³Í·£¹ØÏµÅжϴíÎó  
 | 
# @change: "2016-02-26 17:00" hxp Ôö¼ÓPVPÉ˺¦Í³¼Æ  
 | 
#------------------------------------------------------------------------------   
 | 
#"""Version = 2016-02-26 17:00"""  
 | 
#---------------------------------------------------------------------  
 | 
import NPCCommon  
 | 
import PlayerControl  
 | 
import AttackCommon  
 | 
import SkillCommon  
 | 
import ChConfig  
 | 
import GameWorld  
 | 
import ChEquip  
 | 
import PetControl  
 | 
import SkillShell  
 | 
import GameObj  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
## ÊÇ·ñ¿ÉÒÔ¹¥»÷   
 | 
#  @param curPet ¹¥»÷·½:³èÎï  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return True or False  
 | 
#  @remarks ÊÇ·ñ¿ÉÒÔ¹¥»÷  
 | 
def GetCanAttack(curPet, curTagPlayer, skill, tick):  
 | 
    return AttackCommon.CheckNPCCanAttackTag(curPet, curTagPlayer, skill)  
 | 
  
 | 
## »ñµÃ¹ØÏµ  
 | 
#  @param curPet ¹¥»÷·½:³èÎï  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return È磺ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None  
 | 
#  @remarks »ñµÃ¹ØÏµ  
 | 
def GetTagRelation(curPet, curTagPlayer, skill, tick):  
 | 
      
 | 
    curPetOwner = PetControl.GetPetOwner(curPet)  # ³èÎïÖ÷ÈË  
 | 
    if curPetOwner == None:  
 | 
        return ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None  
 | 
      
 | 
    #³èÎï²»Äܹ¥»÷×Ô¼ºµÄÖ÷ÈË  
 | 
    if GameWorld.IsSameObj(curPetOwner, curTagPlayer):  
 | 
        return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_None  
 | 
      
 | 
    #ÅжÏÖ÷È˵Ĺ¥»÷ģʽ,ÅжÏÊÇ·ñ¿ÉÒÔ¹¥»÷Õâ¸öÍæ¼Ò  
 | 
    if not AttackCommon.CheckPlayerAttackMode_Player(curPetOwner, curTagPlayer):  
 | 
        return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_AttackMode  
 | 
      
 | 
    #------------------------ÒÔÏÂÂß¼,¶¼ÊÇÍæ¼Ò¿ÉÒÔ¹¥»÷Ä¿±êµÄÇé¿öÏ  
 | 
      
 | 
    return AttackCommon.GetPlayersRelation(curPetOwner, curTagPlayer)  
 | 
  
 | 
  
 | 
## ¹¥»÷  
 | 
#  @param curPet ¹¥»÷·½:³èÎï  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param skillValue ¼¼ÄÜÔöÇ¿  
 | 
#  @param skillPercent ¼¼ÄÜÔöÇ¿°Ù·Ö±È  
 | 
#  @param skillHurtList ¼¼ÄÜÉËѪÁбí(C++½Ó¿Ú)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return hurtType £º HurtType É˺¦½á¹¹ÌåÀà   
 | 
#  @remarks ¹¥»÷  
 | 
def DoAttack(curPet, curTagPlayer, skill, skillValue, skillPercent, skillHurtList, tick):  
 | 
    curTagPlayerHPBeforeAtk = GameObj.GetHP(curTagPlayer)  
 | 
    hurtType = AttackCommon.GetHurtHP(curPet, curTagPlayer, skill, skillValue, skillPercent, tick)  
 | 
    #ÉËѪ  
 | 
    hurtHP = hurtType.HurtHP  
 | 
      
 | 
    curAttackPlayer = PetControl.GetPetOwner(curPet)  # ³èÎïÖ÷ÈË  
 | 
      
 | 
    #2¸öÍæ¼ÒµÄÕÙ»½ÊÞ»¥ÏàPK,ÐèÒªÅжϷÀÊØ·½Íæ¼ÒµÄÊÇ·ñ¿ÉÒÔ¹¥»÷½ø¹¥·½  
 | 
    if curAttackPlayer != None:  
 | 
        #if AttackCommon.CheckPlayerAttackMode_Player(curTagPlayer, curAttackPlayer):  
 | 
        #    AttackCommon.SummonAddAngryByOwner(curPet, curTagPlayer, hurtHP)  
 | 
              
 | 
        #AttackCommon.NPCAddObjInHurtList(curAttackPlayer, curTagPlayer, curTagPlayerHPBeforeAtk, hurtHP)  
 | 
          
 | 
        AttackCommon.OnPVPDamage(curAttackPlayer, hurtHP, curTagPlayer, "Pet v Player")  
 | 
          
 | 
    #Ö±½Ó¹¥»÷  
 | 
    #else:  
 | 
    #    AttackCommon.SummonAddAngryByOwner(curPet, curTagPlayer, hurtHP)  
 | 
      
 | 
    #Ìí¼ÓÉËѪÁÐ±í  
 | 
      
 | 
    #Ìí¼Ó¼¼ÄÜÉ˺¦Í¨ÖªÁбí,(ÓÃÓÚ¹¥»÷½áÊø,ͳһ֪ͨ¿Í»§¶Ë)  
 | 
    AttackCommon.AddHurt(curTagPlayer, skillHurtList, hurtType.HurtType, hurtHP)      
 | 
    return hurtType  
 | 
  
 | 
  
 | 
## ´¦Àí¹¥»÷ºóµÄ½á¹û  
 | 
#  @param curPet ¹¥»÷·½:³èÎï  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return True  
 | 
#  @remarks ´¦Àí¹¥»÷ºóµÄ½á¹û  
 | 
def AttackResult(curPet, curTagPlayer, skill, tick):  
 | 
  
 | 
    #·ÀÊØ·½ÑªÁ¿  
 | 
    curTagPlayerHP = GameObj.GetHP(curTagPlayer)  
 | 
    #·ÀÊØ·½±»¶¯Buff´¥·¢  
 | 
#    AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())  
 | 
      
 | 
    #ÊÇ·ñͬ¹ú¼®  
 | 
    #»ñµÃ¹¥»÷·½ÓµÓÐÕß  
 | 
    curPlayer = PetControl.GetPetOwner(curPet)  # ³èÎïÖ÷ÈË  
 | 
      
 | 
    #±»¹¥»÷Ìáʾ£¬±ÜÃâÆµ·±Ìáʾ  
 | 
    #===========================================================================  
 | 
    # if not curTagPlayer.GetBattleState():  
 | 
    #    PlayerControl.NotifyCode(curTagPlayer, "PK_admin_0")  
 | 
    #   
 | 
    # if curPlayer != None and not curPlayer.GetBattleState():  
 | 
    #    PlayerControl.NotifyCode(curTagPlayer, "PK_admin_0")  
 | 
    #===========================================================================  
 | 
      
 | 
    #Íæ¼ÒÊÇ·ñËÀÍö  
 | 
    if curTagPlayerHP > 0:  
 | 
        #±»¹¥»÷ÕßÒ²½øÈëÕ½¶·×´Ì¬  
 | 
        AttackCommon.SetPlayerBattleState(curTagPlayer, tick)  
 | 
          
 | 
        #ÊÇ·ñÔÚÌØÊâµÄ¸±±¾ÖÐ  
 | 
        if curPlayer != None:  
 | 
            AttackCommon.OnPlayerHitPlayer(curPlayer, curTagPlayer, tick)  
 | 
          
 | 
        return  
 | 
      
 | 
    if curPlayer != None:  
 | 
        #Ö´ÐÐÍæ¼Ò»÷É±Íæ¼ÒÂß¼  
 | 
        AttackCommon.OnPlayerKillPlayer(curPlayer, curTagPlayer, tick)  
 | 
          
 | 
        #Ë¢ÐÂNPCµÄ³ðºÞÁбí,ɾ³ýËÀÍö¶ÔÏó  
 | 
        #npcControl = NPCCommon.NPCControl(curPet)  
 | 
        #npcControl.RefreshAngryList(tick)  
 | 
          
 | 
    #Íæ¼ÒÒѾËÀÍö  
 | 
    tagPlayerControl = PlayerControl.PlayerControl(curTagPlayer)  
 | 
    tagPlayerControl.SetDead()  
 | 
      
 | 
    return True  
 |