| #!/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  |