#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package Player_Attack_Player  
 | 
# Íæ¼Ò¹¥»÷Íæ¼Ò  
 | 
#  
 | 
# @author eggxp  
 | 
# @date 2010-4-20  
 | 
# @version 1.7  
 | 
#  
 | 
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ  
 | 
# @change: "2013-03-25 10:00" wdb È¥×°±¸Ê¹Óò»¿ÛÄ;à  
 | 
# @change: "2013-09-27 19:30" Alee »Ö¸´Ä;à  
 | 
# @change: "2013-11-05 21:00" Alee PKÌáʾ  
 | 
# @change: "2014-09-25 11:30" hxp Ôö¼Ó×îÖÕÉ˺¦Ë¥¼õ¿ØÖÆ  
 | 
# @change: "2015-03-07 07:30" hxp ×îÖÕÉ˺¦Ó°Ïì¿ØÖÆ, ÉËѪÀàÐͼì²é´¥·¢±»¶¯¼¼ÄÜ; ´ã¶¾  
 | 
# @change: "2015-04-11 15:30" hxp Ôö¼Ó×îÖÕÉ˺¦Âß¼  
 | 
# @change: "2016-02-26 17:00" hxp Ôö¼ÓPVPÉ˺¦Í³¼Æ  
 | 
#------------------------------------------------------------------------------   
 | 
"""Version = 2016-02-26 17:00"""  
 | 
#---------------------------------------------------------------------  
 | 
import PlayerControl  
 | 
import GameWorld  
 | 
import AttackCommon  
 | 
import ChConfig  
 | 
import BaseAttack  
 | 
import ChEquip  
 | 
import IPY_GameWorld  
 | 
import SkillShell  
 | 
import SkillCommon  
 | 
import PassiveBuffEffMng  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
  
 | 
## ÊÇ·ñ¿ÉÒÔ¹¥»÷   
 | 
#  @param curNormalNPC ¹¥»÷·½:Íæ¼Ò  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return True or False  
 | 
#  @remarks ÊÇ·ñ¿ÉÒÔ¹¥»÷   
 | 
def GetCanAttack(curPlayer, curTagPlayer, skill, tick):  
 | 
    #ͨÓÃÅÐ¶Ï  
 | 
    if not AttackCommon.CheckPlayerCanAttackTag(curPlayer, curTagPlayer):  
 | 
        return False  
 | 
  
 | 
    #ÅжϾàÀë  
 | 
    if not AttackCommon.CheckPlayerAttackDist(curPlayer, curTagPlayer, skill):  
 | 
        return False  
 | 
  
 | 
    return True  
 | 
  
 | 
## »ñµÃ¹ØÏµ  
 | 
#  @param curNormalNPC ¹¥»÷·½:Íæ¼Ò  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼ÒC  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return È磺ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None  
 | 
#  @remarks »ñµÃ¹ØÏµ  
 | 
def GetTagRelation(curPlayer, curTagPlayer, skill, tick):  
 | 
    #×î¸ßÓÅÏȼ¶, Ñ¡¶¨µÄÄ¿±êÊÇ×Ô¼º, ·µ»ØÅóÓÑ  
 | 
    if GameWorld.IsSameObj(curPlayer, curTagPlayer) :  
 | 
        return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_None  
 | 
      
 | 
    #¹¥»÷ģʽ, Èç¹û²»¿É¹¥»÷, ·µ»ØÅóÓÑ  
 | 
    if not AttackCommon.CheckPlayerAttackMode_Player(curPlayer, curTagPlayer):  
 | 
        return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_AttackMode  
 | 
      
 | 
    #------------------------ÒÔÏÂÂß¼,¶¼ÊÇÍæ¼Ò¿ÉÒÔ¹¥»÷Ä¿±êµÄÇé¿öÏ  
 | 
      
 | 
    return AttackCommon.GetPlayersRelation(curPlayer, curTagPlayer)  
 | 
  
 | 
  
 | 
## ¹¥»÷  
 | 
#  @param curNormalNPC ¹¥»÷·½:Íæ¼Ò  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param skillValue ¼¼ÄÜÔöÇ¿  
 | 
#  @param skillPercent ¼¼ÄÜÔöÇ¿°Ù·Ö±È  
 | 
#  @param skillHurtList ¼¼ÄÜÉËѪÁбí(C++½Ó¿Ú)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return hurtType £º HurtType É˺¦½á¹¹ÌåÀà   
 | 
#  @remarks ¹¥»÷  
 | 
def DoAttack(curPlayer, curTagPlayer, skill, skillValue, skillPercent, skillHurtList, tick):  
 | 
      
 | 
    curTagPlayerHPBeforeAtk = curTagPlayer.GetHP()  
 | 
      
 | 
    #Íæ¼Ò¹¥»÷Íæ¼Ò  
 | 
    hurtType = AttackCommon.GetHurtHP(curPlayer, curTagPlayer, skill, skillValue, skillPercent, tick)  
 | 
    hurtHP = hurtType.HurtHP  
 | 
      
 | 
    #¸øË«·½µÄÍæ¼ÒÕÙ»½ÊÞÌí¼Ó³ðºÞ  
 | 
    #¹¥»÷ÕßÌí¼Ó  
 | 
    AttackCommon.SummonAddAngryByOwner(curTagPlayer, curPlayer, hurtHP)  
 | 
    #·ÀÓùÕßÌí¼Ó  
 | 
    AttackCommon.SummonAddAngryByOwner(curPlayer, curTagPlayer, hurtHP)  
 | 
      
 | 
    #Ìí¼ÓÉËѪÁÐ±í  
 | 
    #AttackCommon.NPCAddObjInHurtList(curPlayer, curTagPlayer, curTagPlayerHPBeforeAtk, hurtHP)  
 | 
    AttackCommon.OnPVPDamage(curPlayer, hurtHP, curTagPlayer, "Player v Player")  
 | 
      
 | 
    #Ìí¼Ó¼¼ÄÜÉ˺¦Í¨ÖªÁбí,(ÓÃÓÚ¹¥»÷½áÊø,ͳһ֪ͨ¿Í»§¶Ë)  
 | 
    AttackCommon.AddHurt(curTagPlayer, skillHurtList, hurtType.HurtType, hurtHP)  
 | 
      
 | 
    return hurtType  
 | 
  
 | 
  
 | 
## ´¦Àí¹¥»÷ºóµÄ½á¹û  
 | 
#  @param curNormalNPC ¹¥»÷·½:Íæ¼Ò  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return True  
 | 
#  @remarks ´¦Àí¹¥»÷ºóµÄ½á¹û  
 | 
def AttackResult(curPlayer, curTagPlayer, skill, tick):  
 | 
    #·ÀÊØ·½Íæ¼ÒѪÁ¿  
 | 
    curTagPlayerHP = curTagPlayer.GetHP()  
 | 
      
 | 
    #±»¹¥»÷Ìáʾ£¬±ÜÃâÆµ·±Ìáʾ  
 | 
    if not curTagPlayer.GetBattleState() or not curPlayer.GetBattleState():  
 | 
        PlayerControl.NotifyCode(curTagPlayer, "PK_admin_0")  
 | 
      
 | 
    #Íæ¼Ò»î×Å  
 | 
    if curTagPlayerHP > 0:  
 | 
        #±»¹¥»÷µÄÍæ¼ÒÒ²½øÈëÕ½¶·×´Ì¬  
 | 
        AttackCommon.SetPlayerBattleState(curTagPlayer, tick)  
 | 
#        AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())  
 | 
        AttackCommon.OnPlayerHitPlayer(curPlayer, curTagPlayer, tick)  
 | 
           
 | 
    else:  
 | 
        AttackCommon.OnPlayerKillPlayer(curPlayer, curTagPlayer, tick)  
 | 
          
 | 
        #Íæ¼ÒÒѾËÀÍö  
 | 
        tagPlayerControl = PlayerControl.PlayerControl(curTagPlayer)  
 | 
        tagPlayerControl.SetDead()  
 | 
          
 | 
        if skill != None:  
 | 
            SkillCommon.CheckAddPoisonAtkBuff(skill.GetSkillTypeID(), curPlayer, curTagPlayer, tick)  
 | 
          
 | 
    return True  
 |