#!/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
|
import GameObj
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
|
|
## ÊÇ·ñ¿ÉÒÔ¹¥»÷
|
# @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 = GameObj.GetHP(curTagPlayer)
|
|
#Íæ¼Ò¹¥»÷Íæ¼Ò
|
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 = GameObj.GetHP(curTagPlayer)
|
|
#±»¹¥»÷Ìáʾ£¬±ÜÃâÆµ·±Ìáʾ
|
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
|