1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/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