#!/usr/bin/python  
 | 
#-*- coding: GBK -*-  
 | 
#----------------------------------------------------------------------------------------------------  
 | 
#  
 | 
#----------------------------------------------------------------------------------------------------  
 | 
#  
 | 
##@package PlayerMissionCollect  
 | 
# Íæ¼ÒÈÎÎñ²É¼¯NPC  
 | 
#  
 | 
# @author Alee  
 | 
# @date 2010-4-28  
 | 
# @version 1.5  
 | 
#  
 | 
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ  
 | 
# @change: "2010-05-12 18:30" zhengyang Ìí¼Ó×¢ÊÍ  
 | 
# @change: "2010-07-08 10:40" Alee Æï³Ë״̬ÎÞ·¨²É¼¯  
 | 
# @change: "2010-09-16 09:55" Alee ÂíÉÏ¿ÉÒԲɼ¯  
 | 
# @change: "2010-11-22 12:15" Alee ²É¼¯ÏÞÖÆ  
 | 
# @change: "2014-04-14 12:00" hxp Ôö¼Ó×Ô¶¨Òå²É¼¯NPC  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2014-04-14 12:00"""  
 | 
#---------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
import GameWorld  
 | 
import IPY_GameWorld  
 | 
import ChConfig  
 | 
import EventShell  
 | 
import ChNPC  
 | 
import PlayerControl  
 | 
import OperControlManager  
 | 
import NPCCommon  
 | 
import AttackCommon  
 | 
import GameObj  
 | 
#---------------------------------------------------------------------  
 | 
'''Version = 2010-09-16 09:55'''  
 | 
#---------------------------------------------------------------------  
 | 
#È«¾Ö  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
  
 | 
## Í¨¹ýÀàÐÍ»ñÈ¡Íæ¼Ò²É¼¯¶ÔÏóNPC  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param npcType npcÀàÐÍ   
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GetActionNPCbyType(curPlayer, npcType):  
 | 
    #»ñµÃNPC  
 | 
    tagObj = curPlayer.GetActionObj()  
 | 
    if tagObj == None:  
 | 
        #ûÓÐÄ¿±ê  
 | 
        GameWorld.Log("GetActionNPCbyType -> Ã»ÓÐÄ¿±ê" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC:  
 | 
        #̸»°¶ÔÏó²»¶Ô  
 | 
        GameWorld.Log("GetActionNPCbyType -> Ì¸»°¶ÔÏó²»¶Ô" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex())  
 | 
    if curNPC == None:  
 | 
        #ûÓÐÕâ¸öNPC  
 | 
        GameWorld.Log("GetActionNPCbyType ->ûÓÐÕâ¸öNPC" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    if curNPC.GetType() != npcType:  
 | 
        #ÀàÐͲ»¶Ô  
 | 
        return  
 | 
      
 | 
    if curNPC.GetCurAction() == IPY_GameWorld.laNPCDie or GameObj.GetHP(curNPC) <= 0:  
 | 
        #ËÀÍö  
 | 
        return  
 | 
      
 | 
    return curNPC  
 | 
      
 | 
## Í¨ÖªXML  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curNPC µ±Ç°npc  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def QueryMissionCollect(curPlayer, curNPC, tick):  
 | 
    #²É¼¯ÐÐΪ״̬, ¿Í»§¶ËÏÞÖÆ  
 | 
    if not OperControlManager.IsObjCanDoAction(curPlayer,   
 | 
                                               ChConfig.Def_Obj_ActState_ClientAct,   
 | 
                                               IPY_GameWorld.oalCollect):  
 | 
        return    
 | 
      
 | 
    #ÂíÆ¥ÖÐÔÊÐí²É¼¯  
 | 
    if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck :  
 | 
        #GeRen_hwj35_0 ÎÞ·¨²É¼¯  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_hwj35_0")  
 | 
        return  
 | 
      
 | 
    #ÏÈÉèÖöÔÏó£¬ÈÎÎñ¿É²É¼¯µÃµ½¶ÔÏóNPC  
 | 
    curPlayer.SetActionObj(curNPC)  
 | 
      
 | 
    # ×Ô¶¨ÒåµÄ²É¼¯NPC  
 | 
    if NPCCommon.OnCollectNPCBegin(curPlayer, curNPC, tick):  
 | 
        return  
 | 
      
 | 
    EventShell.EventRespons_MisCollectTime(curPlayer, curNPC)  
 | 
      
 | 
## »ñµÃ²É¼¯Ê±¼ä£¬¿ªÊ¼²É¼¯ DoType_Collect_Time µ÷Óà  
 | 
#  @param curPlayer µ±Ç°Ê±¼ä  
 | 
#  @param curMission µ±Ç°ÈÎÎñ  
 | 
#  @param curConditionNode xml½Úµã£¨condition)  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def BeginMissionCollect(curPlayer, curMission, curConditionNode):  
 | 
    curNPC = GetActionNPCbyType(curPlayer, IPY_GameWorld.ntMissionCollect)  
 | 
      
 | 
    if not curNPC:  
 | 
        return  
 | 
      
 | 
    #¸ù¾Ý·µ»ØµÄ²É¼¯Ê±¼ä£¬ÅжϿɷñ²É¼¯  
 | 
    misColTime = int(curConditionNode.GetAttribute("coltime"))  
 | 
      
 | 
    if not misColTime:  
 | 
        return  
 | 
      
 | 
    #֪ͨ¿ªÊ¼  
 | 
    PlayerControl.Sync_PrepareBegin( curPlayer, misColTime, IPY_GameWorld.pstMissionCollecting, prepareID = curNPC.GetID() )  
 | 
      
 | 
    #Ìí¼ÓÕâ¸öNPCµÄÉËѪÁÐ±í£¬ÓÃÓÚ¶à¸öÈËÒ»Æð²É¼¯£¬Ò»È˳ɹ¦ºó£¬ÆäËûÈË´ò¶Ï  
 | 
    AttackCommon.AddHurtValue(curNPC, curPlayer.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, 1)  
 | 
    return  
 | 
  
 | 
## ²É¼¯½áÊø´¦Àí  
 | 
#  @param curPlayer  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def EndMissionCollect(curPlayer, tick):  
 | 
    #ÈÎÎñ²É¼¯ÀàNPC  
 | 
    curNPC = GetActionNPCbyType(curPlayer, IPY_GameWorld.ntMissionCollect)  
 | 
    if not curNPC:  
 | 
        return  
 | 
      
 | 
    npcID = curNPC.GetNPCID()  
 | 
      
 | 
    #²É¼¯½áÊø ÕæÎª³É¹¦  
 | 
    if not ChNPC.OnCollectEnd(curPlayer, curNPC):  
 | 
        return  
 | 
      
 | 
    # ×Ô¶¨ÒåµÄ²É¼¯NPC  
 | 
    NPCCommon.DoCollectNPCOK(curPlayer, npcID, tick)  
 | 
      
 | 
    EventShell.EventRespons_MisCollectSuccess(curPlayer, curNPC)  
 | 
    return  
 | 
  
 | 
     
 |