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