#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package SummonNPC_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-03-08 17:20" hxp ÐÞ¸´ÕÙ»½ÊÞ»÷ɱºì/»ÆÃûÍæ¼Òʱ£¬ÕÙ»½ÊÞÖ÷È˺ìÃûÎÊÌâ  
 | 
# @change: "2016-02-26 17:00" hxp Ôö¼ÓPVPÉ˺¦Í³¼Æ  
 | 
# @change: "2016-11-24 19:30" hxp Ö§³ÖÌØÊ⸱±¾¹¥»÷½á¹ûÅжÏËÀÍö¹æÔò  
 | 
# @change: "2016-11-26 19:00" hxp ÏÝÚåAIÔö¼Ó¿É¹¥»÷Ö÷ÈËÂß¼  
 | 
#------------------------------------------------------------------------------   
 | 
#"""Version = 2016-11-26 19:00"""  
 | 
#------------------------------------------------------------------------------   
 | 
import FBLogic  
 | 
import NPCCommon  
 | 
import PlayerControl  
 | 
import IPY_GameWorld  
 | 
import AttackCommon  
 | 
import ChConfig  
 | 
import GameWorld  
 | 
import BaseAttack  
 | 
import ChEquip  
 | 
import SkillShell  
 | 
import ChNPC  
 | 
import GameObj  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
## ÊÇ·ñ¿ÉÒÔ¹¥»÷   
 | 
#  @param curNormalNPC ¹¥»÷·½:ÕÙ»½ÊÞ  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return True or False  
 | 
#  @remarks ÊÇ·ñ¿ÉÒÔ¹¥»÷  
 | 
def GetCanAttack(curSummonNPC, curTagPlayer, skill, tick):  
 | 
    return AttackCommon.CheckNPCCanAttackTag(curSummonNPC, curTagPlayer, skill)  
 | 
  
 | 
## »ñµÃ¹ØÏµ  
 | 
#  @param curNormalNPC ¹¥»÷·½:ÕÙ»½ÊÞ  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return È磺ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None  
 | 
#  @remarks »ñµÃ¹ØÏµ  
 | 
def GetTagRelation(curSummonNPC, curTagPlayer, skill, tick):  
 | 
    #ÕÙ»½ÊÞµÄÖ÷ÈË(Íæ¼Ò)  
 | 
    summonOwner = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curSummonNPC)  
 | 
    if summonOwner == None :  
 | 
        #NPCµÄÕÙ»½ÊÞ²»¿¼ÂÇ  
 | 
        return ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None  
 | 
      
 | 
    #ÈËÎïµÄÕÙ»½ÊÞ,²»Äܹ¥»÷×Ô¼ºµÄÖ÷ÈË  
 | 
    if GameWorld.IsSameObj(summonOwner, curTagPlayer) :  
 | 
        #return ChNPC.OnGetOwnerRelation(curSummonNPC, curTagPlayer)  
 | 
        return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_None  
 | 
      
 | 
    #ÅжÏÖ÷È˵Ĺ¥»÷ģʽ,ÅжÏÊÇ·ñ¿ÉÒÔ¹¥»÷Õâ¸öÍæ¼Ò  
 | 
    if not AttackCommon.CheckPlayerAttackMode_Player(summonOwner, curTagPlayer):  
 | 
        return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_AttackMode  
 | 
      
 | 
    #------------------------ÒÔÏÂÂß¼,¶¼ÊÇÍæ¼Ò¿ÉÒÔ¹¥»÷Ä¿±êµÄÇé¿öÏ  
 | 
      
 | 
    return AttackCommon.GetPlayersRelation(summonOwner, curTagPlayer)  
 | 
  
 | 
  
 | 
## ¹¥»÷  
 | 
#  @param curNormalNPC ¹¥»÷·½:ÕÙ»½ÊÞ  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param skillValue ¼¼ÄÜÔöÇ¿  
 | 
#  @param skillPercent ¼¼ÄÜÔöÇ¿°Ù·Ö±È  
 | 
#  @param skillHurtList ¼¼ÄÜÉËѪÁбí(C++½Ó¿Ú)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return hurtType £º HurtType É˺¦½á¹¹ÌåÀà   
 | 
#  @remarks ¹¥»÷  
 | 
def DoAttack(curSummonNPC, curTagPlayer, skill, skillValue, skillPercent, skillHurtList, tick):  
 | 
      
 | 
    curTagPlayerHPBeforeAtk = GameObj.GetHP(curTagPlayer)  
 | 
      
 | 
    hurtType = AttackCommon.GetHurtHP(curSummonNPC, curTagPlayer, skill,   
 | 
                                      skillValue, skillPercent, tick)  
 | 
    #ÉËѪ  
 | 
    hurtHP = hurtType.HurtHP  
 | 
      
 | 
    curAttackPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curSummonNPC)  
 | 
    #2¸öÍæ¼ÒµÄÕÙ»½ÊÞ»¥ÏàPK,ÐèÒªÅжϷÀÊØ·½Íæ¼ÒµÄÊÇ·ñ¿ÉÒÔ¹¥»÷½ø¹¥·½  
 | 
    if curAttackPlayer != None:  
 | 
        if AttackCommon.CheckPlayerAttackMode_Player(curTagPlayer, curAttackPlayer):  
 | 
            AttackCommon.SummonAddAngryByOwner(curSummonNPC, curTagPlayer, hurtHP)  
 | 
          
 | 
        #AttackCommon.NPCAddObjInHurtList(curAttackPlayer, curTagPlayer, curTagPlayerHPBeforeAtk, hurtHP)  
 | 
          
 | 
        AttackCommon.OnPVPDamage(curAttackPlayer, hurtHP, curTagPlayer, "Summon v Player")  
 | 
          
 | 
    #Ö±½Ó¹¥»÷  
 | 
    else:  
 | 
        AttackCommon.SummonAddAngryByOwner(curSummonNPC, curTagPlayer, hurtHP)  
 | 
          
 | 
    #Ìí¼Ó¼¼ÄÜÉ˺¦Í¨ÖªÁбí,(ÓÃÓÚ¹¥»÷½áÊø,ͳһ֪ͨ¿Í»§¶Ë)  
 | 
    AttackCommon.AddHurt(curTagPlayer, skillHurtList, hurtType.HurtType, hurtHP)  
 | 
    return hurtType  
 | 
  
 | 
  
 | 
## ´¦Àí¹¥»÷ºóµÄ½á¹û  
 | 
#  @param curNormalNPC ¹¥»÷·½:ÕÙ»½ÊÞ  
 | 
#  @param curTagPlayer ·ÀÊØ·½:Íæ¼Ò  
 | 
#  @param skill ¼¼ÄÜ(ÎÞ->None)  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return True  
 | 
#  @remarks ´¦Àí¹¥»÷ºóµÄ½á¹û  
 | 
def AttackResult(curSummonNPC, curTagPlayer, skill, tick):  
 | 
    #·ÀÊØ·½ÑªÁ¿  
 | 
    curTagPlayerHP = GameObj.GetHP(curTagPlayer)  
 | 
    curTagPlayerFBHP = FBLogic.OnGetFBCurHP(curTagPlayer)  
 | 
      
 | 
    #·ÀÊØ·½±»¶¯Buff´¥·¢  
 | 
#    AttackCommon.DefenderSpringBuff(curTagPlayer, tick, BaseAttack.GetIsSuperHit())  
 | 
      
 | 
    #ÊÇ·ñͬ¹ú¼®  
 | 
    #»ñµÃ¹¥»÷·½ÓµÓÐÕß  
 | 
    curPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curSummonNPC)  
 | 
      
 | 
    #±»¹¥»÷Ìáʾ£¬±ÜÃâÆµ·±Ìáʾ  
 | 
    #===========================================================================  
 | 
    # 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 and curTagPlayerFBHP > 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(curSummonNPC)  
 | 
        npcControl.RefreshAngryList(tick)  
 | 
      
 | 
    #Íæ¼ÒÒѾËÀÍö  
 | 
    tagPlayerControl = PlayerControl.PlayerControl(curTagPlayer)  
 | 
    tagPlayerControl.SetDead()  
 | 
    return True  
 |