| #!/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  | 
| #---------------------------------------------------------------------  | 
|   | 
| #---------------------------------------------------------------------  | 
|   | 
| ## ÊÇ·ñ¿ÉÒÔ¹¥»÷   | 
| #  @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)  | 
|       | 
|     #ÅжÏÖ÷È˵Ĺ¥»÷ģʽ,ÅжÏÊÇ·ñ¿ÉÒÔ¹¥»÷Õâ¸öÍæ¼Ò  | 
|     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 = curTagPlayer.GetHP()  | 
|       | 
|     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 = curTagPlayer.GetHP()  | 
|     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  |