#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package PlayerBattle
|
# @todo: Íæ¼ÒÆÕͨ¹¥»÷,Õ½¶·Âß¼´¦Àí
|
#
|
# @author: panwei
|
# @date 2010-4-28
|
# @version 1.4
|
#
|
# @note:
|
#---------------------------------------------------------------------
|
# @change: "2013-03-11 18:00" wdb È¥³ý¶ÔÖÅ
|
# @change: "2013-06-05 18:00" Alee ÐÂÔöÑ¡ÖÐÍæ¼ÒÂß¼
|
# @change: "2013-06-06 21:30" Alee Õ½¶·×´Ì¬²»¿É½øÈëÈÎÎñ¶Ô»°£¬µ¼Ö¶ÔÏó±ä¸üµÈÎÊÌâ
|
# @change: "2016-09-23 16:30" hxp ²É¼¯ÖÐÑ¡ÖжÔÏó¸üÐÂʱ½áÊø²É¼¯
|
#---------------------------------------------------------------------
|
#"""Version = 2016-09-23 16:30"""
|
#---------------------------------------------------------------------
|
import IPY_GameWorld
|
import GameWorld
|
import NPCCommon
|
import PlayerControl
|
import PlayerState
|
import ChConfig
|
#import PlayerGameEvent
|
import BaseAttack
|
import OperControlManager
|
import GameObj
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //////////////////////////////////////////////////////////////
|
# //06 01 ÈËÎïÆÕͨ¹¥»÷#tagCPlayerBaseAttack
|
# tagCPlayerBaseAttack * GettagCPlayerBaseAttack();
|
#
|
# class IPY_CPlayerBaseAttack
|
# {
|
# public:
|
#
|
# int GetObjType();
|
#
|
# int GetObjID();
|
#
|
# int GetPosX();
|
#
|
# int GetPosY();
|
# };
|
#===============================================================================
|
## Íæ¼ÒÆÕͨ¹¥»÷ 06 01
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def PlayerNormalAttack(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerNormalAttack)(index, tick)
|
return
|
|
## Íæ¼ÒÆÕͨ¹¥»÷ 06 01
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Func_PlayerNormalAttack(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if not curPlayer.GetMapLoadOK():
|
#Íæ¼ÒµØÍ¼¶Áȡδ³É¹¦, Ìß³öÕâÈË
|
#Í̵ôÕâ¸ö°ü, ²»´¦Àí
|
#curPlayer.Kick(IPY_GameWorld.disPlayerMovedWhenNotPrepare)
|
return
|
|
if curPlayer.GetGMForbidenFight():
|
#Play_Attack_Null ¶Ô²»Æð£¬ÄúÒѱ»GM½ûÖ¹Õ½¶·£¬¹¥»÷ʧ°Ü
|
PlayerControl.NotifyCode(curPlayer , "Play_Attack_Null")
|
return
|
|
if GameObj.GetHP(curPlayer) <= 0:
|
#Íæ¼ÒÒѾËÀÍö
|
#GameWorld.Log("Íæ¼ÒÆÕͨ¹¥»÷ʧ°Ü£¬Íæ¼ÒÒѾËÀÍö")
|
return
|
#===============================================================================
|
# #Íæ¼Òµ±Ç°×´Ì¬
|
# curPlayerAction = curPlayer.GetPlayerAction()
|
#
|
# if curPlayerAction == IPY_GameWorld.paMove:
|
# curPlayer.StopMove()
|
#===============================================================================
|
|
#״̬ÅжÏ, Ö»ÓÐÔÚ¿ÕÏÐ״̬,¹¥»÷ ²Å¿ÉÒÔ¹¥»÷
|
if curPlayer.GetPlayerAction() not in ChConfig.Def_PlayerCanAttackState:
|
PlayerControl.NotifyCode(curPlayer, "CannotAtk03")
|
return
|
|
#ÆÕ¹¥ÐÐΪ״̬, ¿Í»§¶ËÏÞÖÆ
|
if not OperControlManager.IsObjCanDoAction(curPlayer,
|
ChConfig.Def_Obj_ActState_ClientSkill,
|
ChConfig.Def_Action_Attack_Bit):
|
return
|
|
#Óн»Í¨¹¤¾ßÒ²ÎÞ·¨¹¥»÷
|
vehicle = curPlayer.GetPlayerVehicle()
|
|
#===========================================================================
|
# if vehicle == IPY_GameWorld.pvHorse :
|
# PlayerControl.NotifyCode(curPlayer, "CannotAtk05")
|
# return
|
#===========================================================================
|
|
if vehicle == IPY_GameWorld.pvTruck:
|
PlayerControl.NotifyCode(curPlayer, "CannotAtk06")
|
return
|
|
sendPack = IPY_GameWorld.IPY_CPlayerBaseAttack()
|
sendPackObjID = sendPack.GetObjID()
|
sendPackObjType = sendPack.GetObjType()
|
sendPackPosX = sendPack.GetPosX()
|
sendPackPosY = sendPack.GetPosY()
|
|
curTag = GameWorld.GetObj(sendPackObjID, sendPackObjType)
|
|
if curTag == None or GameObj.GetHP(curTag) <= 0:
|
#Attack_Lost_AimDeath <n color="0,255,0">¶Ô²»Æð£¬Ä¿±êÒÑËÀÍö£¬¹¥»÷ÎÞЧ!</n>
|
#PlayerControl.NotifyCode(curPlayer, "Attack_Lost_AimDeath")
|
#GameWorld.Log("¹¥»÷NPC,¹¥»÷ÀàÐͲ»ÕýÈ·")
|
return
|
|
if PlayerControl.PlayerRefreshPos(curPlayer, curPlayer, sendPackPosX, sendPackPosY, False) != True:
|
#Íæ¼Òµ±Ç°Î»ÖÃË¢ÐÂʧ°Ü
|
GameWorld.ErrLog("Íæ¼ÒÆÕͨ¹¥»÷, µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü", curPlayer.GetPlayerID())
|
return
|
|
#¼¤»îÍæ¼Ò,½â³ý´ôÖÍ
|
PlayerControl.SetIsNeedProcess(curPlayer, True)
|
|
#playerLastAction = curPlayer.GetPlayerAction()
|
|
#Íæ¼Ò¹¥»÷NPC, ÉèÖÃÍæ¼ÒΪ¹¥»÷״̬, ÔÚÍæ¼ÒµÄºǫ́´¦Àí½Å±¾ÖпªÊ¼±íÑÝÍæ¼Ò¹¥»÷NPCµÄ¶¯»
|
curPlayer.ClearUseSkillRec()
|
curPlayer.SetActionObj(curTag)
|
curPlayer.SetUseSkillTagID(curTag.GetID())
|
curPlayer.SetUseSkillTagType(curTag.GetGameObjType())
|
#@warning: ÉèÖù¥»÷ÆðµãΪ¿Í»§¶Ë·¢Ë͵Ä×ø±ê(´Ë´¦½«»á±»Íâ¹ÒÀûÓÃ)
|
curPlayer.SetAttackTargetPos(sendPackPosX, sendPackPosY)
|
|
#ÒѾÔÚ¹¥»÷ÖÐ
|
if curPlayer.GetPlayerAction() == IPY_GameWorld.paAttack:
|
return
|
|
#ÉèÖù¥»÷±ê־λ
|
PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paAttack)
|
#Ö´ÐÐÕ½¶·Âß¼
|
PlayerState.ProcessFight(curPlayer, tick)
|
#===============================================================================
|
# if playerLastAction != IPY_GameWorld.paAttack:
|
# #Íæ¼ÒÓɷǹ¥»÷״̬½øÈë¹¥»÷״̬, ´¥·¢Ò»´ÎÍæ¼Ò״̬ˢÐÂ
|
# PlayerState.ProcessPlayerState(curPlayer, tick)
|
# return
|
#===============================================================================
|
return
|
#===============================================================================
|
# //////////////////////////////////////////////////////////////
|
# //06 05 ×Ô¶¯´ò¹Ö#tagCStartAutoFight
|
# tagCStartAutoFight * GettagCStartAutoFight();
|
#
|
# class IPY_CStartAutoFight
|
# {
|
# public:
|
# //0: ½áÊø×Ô¶¯´ò¹Ö 1: ¿ªÊ¼×Ô¶¯´ò¹Ö
|
# int GetType();
|
# };
|
#===============================================================================
|
## ×Ô¶¯´ò¹Ö 06 05
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def PlayerStartAutoFight(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CStartAutoFight()
|
type = sendPack.GetType()
|
|
if type not in [ 0, 1 ]:
|
GameWorld.ErrLog("¿ªÊ¼×Ô¶¯´ò¹Ö²ÎÊý²»ÕýÈ·%d"%(type), curPlayer.GetPlayerID())
|
return
|
|
curPlayer.SetAutoFight(type)
|
return
|
#===============================================================================
|
# //////////////////////////////////////////////////////////////
|
# //06 0BÈËÎï½øÈë¶ÔÖÅ״̬#tagCPlayerEnterBattle
|
# tagCPlayerEnterBattle * GettagCPlayerEnterBattle();
|
#
|
# class IPY_CPlayerEnterBattle
|
# {
|
# public:
|
#
|
# int GetObjType();
|
#
|
# int GetObjID();
|
# //0½øÈë;ÆäËûÍ˳ö
|
# int GetEnterOrExit();
|
# };
|
#===============================================================================
|
## ÈËÎï½øÈë¶ÔÖÅ״̬ 06 0B
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def PlayerConfronting(index, tick):
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# sendPack = IPY_GameWorld.IPY_CPlayerEnterBattle()
|
# sendPack_ObjID = sendPack.GetObjID()
|
# sendPack_GetObjType = sendPack.GetObjType()
|
# sendPack_EnterOrExit = sendPack.GetEnterOrExit()
|
#
|
# #½øÈëÕ½¶·¶ÔÖÅ
|
# if not sendPack_EnterOrExit:
|
# __DoLogic_EnterPlayerConfronting(curPlayer, sendPack_ObjID, sendPack_GetObjType, tick)
|
# return
|
#
|
# #Í˳öÕ½¶·¶ÔÖÅ
|
# __DoLogic_ExitPlayerConfronting(curPlayer)
|
return
|
|
## ½øÈëÕ½¶·¶ÔÖÅ
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param sendPack_ObjID ¶ÔÏóID
|
# @param sendPack_GetObjType ¶ÔÏóÀàÐÍ
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __DoLogic_EnterPlayerConfronting(curPlayer, sendPack_ObjID, sendPack_GetObjType, tick):
|
# #Óн»Í¨¹¤¾ß²»ÈýøÈëÕ½¶·¶ÔÖÅ
|
# if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull:
|
# return
|
#
|
# curPlayerAction = curPlayer.GetPlayerAction()
|
#
|
# if curPlayerAction not in ChConfig.Def_PlayerCanEnterConfronting:
|
# return
|
#
|
# if curPlayer.GetGMForbidenFight():
|
# #Play_Attack_Null ¶Ô²»Æð£¬ÄúÒѱ»GM½ûÖ¹Õ½¶·£¬¹¥»÷ʧ°Ü
|
# PlayerControl.NotifyCode(curPlayer, "Play_Attack_Null")
|
# return
|
#
|
# actObj = curPlayer.GetActionObj()
|
#
|
# #ÒѾÔÚ¶ÔÖÅ״̬, ÇÒÄ¿±êÏàͬ²»´¦Àí
|
# if curPlayer.GetIsConfronting() and actObj != None and actObj.GetID() == sendPack_ObjID and actObj.GetGameObjType() == sendPack_GetObjType:
|
# return
|
#
|
# findActObj = GameWorld.GetObj(sendPack_ObjID, sendPack_GetObjType)
|
#
|
# if not findActObj:
|
# return
|
#
|
# relation = BaseAttack.GetTagRelation(curPlayer, findActObj, None, tick)
|
# #ÅжÏÊÇ·ñµÐ¶Ô¹ØÏµ
|
# if relation[0] != ChConfig.Type_Relation_Enemy :
|
# return
|
#
|
# #ÌøÎèµöÓã´ò¶Ï
|
# if curPlayerAction == IPY_GameWorld.paGameEvent:
|
# PlayerGameEvent.StopGameEvent(curPlayer, tick)
|
#
|
# #½ø¶ÈÌõ´ò¶Ï
|
# elif curPlayerAction == IPY_GameWorld.paPreparing:
|
# PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
|
#
|
# #½øÈë¶ÔÖÅ״̬
|
# curPlayer.SetActionObj(findActObj)
|
# curPlayer.SetIsConfronting(True)
|
# #֪ͨ¿Í»§¶Ë //0½øÈë;ÆäËûÍ˳ö
|
# curPlayer.View_PlayerBattle(sendPack_ObjID, sendPack_GetObjType, 0)
|
#
|
# #Ìí¼Ó²âÊÔÐÅÏ¢
|
# GameWorld.GodLog(curPlayer, 'Client·¢°ü½øÈëÕ½¶·¶ÔÖųɹ¦')
|
return
|
|
## Í˳öÕ½¶·¶ÔÖÅ
|
# @param curPlayer
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __DoLogic_ExitPlayerConfronting(curPlayer):
|
if not PlayerControl.IsPlayerInFight(curPlayer):
|
return
|
|
#ÉèÖÿÕÄ¿±ê
|
curPlayer.SetActionObj(None)
|
|
#Í˳ö¶ÔÖÅ״̬
|
PlayerControl.ExitPlayerConfronting(curPlayer)
|
return
|
|
# Ä¿±êËÀÍöºÍÏûʧʱ·¢°üÈ¡Ïû¶ÔÏó£¬ÈËÎïËÀÍöÈ¡ÏûÑ¡ÖÐ
|
##Ôö¼ÓËø¶¨Ä£Ê½amContest£¬Ëø¶¨Çé¿öÏÂÖ»Äܹ¥»÷Ä¿±ê
|
# @param None
|
# @return None
|
def SelectObj(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
|
return
|
|
if clientData.isSelect == 0:
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_SelectObjID, 0)
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_SelectObjType, 0)
|
return
|
|
curTag = GameWorld.GetObj(clientData.ID, clientData.Type)
|
if curTag == None or curTag.IsEmpty():
|
return
|
|
if curPlayer.GetAttackMode() == IPY_GameWorld.amContest and curTag.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
if curPlayer.GetTeamID() and curPlayer.GetTeamID() == curTag.GetTeamID():
|
#GameWorld.DebugLog("Ëø¶¨Ä£Ê½²»Ëø¶¨¶ÓÓÑ")
|
return
|
|
#ÕâÀï²»ÑéÖ¤ÊÇ·ñËÀÍö
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_SelectObjID, clientData.ID)
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_SelectObjType, clientData.Type)
|
|
return
|
|