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