#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package QuestCommon
|
# @todo: ÈÎÎñ¹«Óú¯Êý
|
#
|
# @author: eggxp
|
# @date 2010-4-26
|
# @version 3.1
|
#
|
# @note: ÈÎÎñ¹«¹²º¯ÊýдÕâÀï
|
#---------------------------------------------------------------------
|
# @change: "2015-08-24 14:30" zqx Ôö¼ÓÍê³ÉÖ÷ÏßÈÎÎñ³É¾Í
|
# @change: "2015-08-24 17:30" zqx ·Àimport±¨´í
|
# @change: "2015-08-27 23:30" zqx ÐÞ¸ÄÀϺÅÈÎÎñ³É¾Í´¦ÀíÂß¼,²»ÊdzɾÍÖеÄÈÎÎñ²»×߳ɾÍÂß¼
|
# @change: "2016-07-18 19:00" hxp ÉèÖÃÈÎÎñ״̬ͳһº¯Êý£»Ôö¼Ó½ÓÈÎÎñ¡¢Íê³ÉÈÎÎñʼþ¼Ç¼µã
|
# @change: "2016-09-19 21:30" hxp Ôö¼ÓÅжÏÊÇ·ñÍê³É¶ÔÓ¦Ö÷ÏßÈÎÎñº¯Êý
|
#---------------------------------------------------------------------
|
#"""Version = 2016-09-19 21:30"""
|
#---------------------------------------------------------------------
|
import re
|
import IPY_GameWorld
|
import GameWorld
|
import ChConfig
|
import random
|
import copy
|
import ReadChConfig
|
import DataRecordPack
|
import ShareDefine
|
import EventReport
|
import QuestManager
|
import GameFuncComm
|
import ChPyNetSendPack
|
import NetPackCommon
|
import EventShell
|
#---------------------------------------------------------------------
|
#ËùÓÐÈÎÎñµÄË÷Òý
|
FindQuestFunc = None
|
# ÓÃÓÚÅж¨ÈÎÎñÊÇ·ñ±»É¾³ý
|
g_IsMissionDeleted = 1
|
|
#---10-05-27 Alee ½«Ëæ»úÈÎÎñʼþ·ÖÀàÐÍ´¦Àí£¨±ÈÈç֮ǰΪÿÈÕɱ¹ÖµÈ£¬¸ÄΪͳһÈÎÎñ¿ÉÓ㬲¢·Ö¿ª´¦Àí¸÷ʼþ£©
|
#Def_Day_Event_ID = "day_event_id"
|
#Def_Day_Event_Count = "day_event_count"
|
#Def_Day_Event_Cur = "day_event_cur_count"
|
Def_Day_Event_Cur_Complete_Count = "count"
|
Def_Day_Event_Max_Complete_Count = "max_count"
|
Def_Day_Event_Any_Kill = "day_event_any_kill" #ÈÎÒâɱ¹Ö¶¼¿ÉÒÔ´¥·¢ÈÎÎñ, ͨ³£ÓÃÓÚ¸±±¾
|
Def_Around_Count_In_Mission_1 = "around_count" #ÉͽðÅÜ»·»·Êý£¨´æÈÎÎñ1£©
|
Def_Around_Star_In_Mission_1 = "around_star" #ÉͽðÅÜ»·»·ÐÇ£¨´æÈÎÎñ1£©
|
Def_Run_Count_In_Mission_1 = "around_allcount" #ÉͽðÅÜ»·×Ü»·Êý£¨´æÈÎÎñ1£©
|
Def_Around_Count_Family_In_Mission_1 = "around_count_family" #¼Ò×åÅÜ»·»·Êý£¨´æÈÎÎñ1£©
|
Def_Around_Star_Family_In_Mission_1 = "around_star_family" #¼Ò×åÅÜ»·»·ÐÇ£¨´æÈÎÎñ1£©
|
Def_Run_Count_Family_In_Mission_1 = "around_allcount_family" #¼Ò×åÅÜ»·×Ü»·Êý£¨´æÈÎÎñ1£©
|
|
Def_Collect_Npc_ID = "collect_npc_id" #Ëæ»ú²É¼¯NPC¸ù¾ÝID
|
Def_Collect_Npc_ID_Count = "collect_npc_id_count" #Ëæ»ú²É¼¯NPC¸ù¾ÝIDµÄ¸öÊý
|
Def_Collect_Npc_ID_Cur = "collect_npc_id_cur_count" #Ëæ»ú²É¼¯NPC¸ù¾ÝIDµÄµ±Ç°¸öÊý
|
|
Def_Kill_Npc_ID = "kill_npc_id" #Ëæ»úɱËÀNPC¸ù¾ÝID
|
Def_Kill_Npc_ID_Count = "kill_npc_id_count" #Ëæ»úɱËÀNPC¸ù¾ÝIDµÄ¸öÊý
|
Def_Kill_Npc_ID_Cur = "kill_npc_id_cur_count" #Ëæ»úɱËÀNPC¸ù¾ÝIDµÄµ±Ç°¸öÊý
|
|
Def_Kill_Npc_LV = "kill_npc_lv" #Ëæ»úɱËÀNPC¸ù¾ÝµÈ¼¶
|
Def_Kill_Npc_LV_Count = "kill_npc_lv_count" #Ëæ»úɱËÀNPC¸ù¾ÝµÈ¼¶µÄ¸öÊý
|
Def_Kill_Npc_LV_Cur = "kill_npc_lv_cur_count" #Ëæ»úɱËÀNPC¸ù¾ÝµÈ¼¶µÄµ±Ç°¸öÊý
|
|
Def_Item_ID = "item_id" #Ëæ»ú»ñµÃÎïÆ·¸ù¾ÝID
|
Def_Item_Count = "item_count" #Ëæ»ú»ñµÃÎïÆ·¸öÊý
|
Def_Item_Cur = "item_cur_count" #µ±Ç°»ñµÃÎïÆ·¸öÊý
|
|
Def_Visit_Npc_ID = "visit_npc_id" #Ëæ»ú·ÃÎÊNPC
|
|
Def_NewGuyNoSight = "xinshou" # ÐÂÊÖÆÚÒþÉíÎÞÊÓÒ°
|
|
Def_Mission_Grade = "grade" # ÈÎÎñÆÀ¼¶
|
|
#------------ÔDayEventDataÈ¥³ý£¬Ì滻ö¾Ù¹ÜÀí-----------------
|
(
|
Day_KillNPC_By_ID_List, #Type = Day_KillNPC_By_ID
|
Day_KillNPC_By_LV_List, #Type = Day_KillNPC_By_LV
|
Day_GetItem_By_ID, #Type = Day_GetItem_By_ID
|
Day_VisitNPCList, #Type = Day_VisitNPC
|
Day_MissionList, #Type = Day_Mission
|
Day_CollectNPCList, #Type = Day_CollectNPC_By_ID
|
) = range(6)
|
#---------------------------------------------------------------------
|
|
#0£º¾çÇéÈÎÎñ, Ö÷ÏßÈÎÎñID±ØÐë°´ÈÎÎñ˳ÐòµÝÔö
|
#1£ºÖ§ÏßÈÎÎñ
|
#2£ºÈÕ³£ÈÎÎñ
|
#5£¬6£¬7£ºÊÀ½çÈÎÎñ
|
#22£ºÈÈÃŻ
|
#20£º²»ÏÔʾÃèÊöºÍÏòµ¼
|
#21£ºÎª²»ÏÔʾÏòµ¼
|
#24£ºÕ½ÃËÐüÉÍ
|
#3: ´«È븱±¾
|
#4:ΪÐèµ½¸±±¾ÀïÍê³ÉµÄÈÎÎñ
|
#ÈÎÎñµÈ¼¶Ìî0ʱÔò²»¸ù¾ÝµÈ¼¶É¸Ñ¡¹æÔòÏÔʾ
|
#12: Òþ²ØÖ÷Ïß¾çÇ飬һ°ãÓÃÓÚ¸¨ÖúÖ÷ÏßÈÎÎñÓõÄ
|
|
Def_Mission_Type_Main = 0 # Ö÷Ïß¾çÇé
|
Def_Mission_Type_MainHid = 998 # Òþ²ØÖ÷Ïß¾çÇé ÔÝʱ²»Óã¬Åä´óµã
|
Def_GM_Active_Mission_Type = 999 #ÔÝʱ²»Óã¬Åä´óµã
|
Def_Mission_Type_RunDaily = 7
|
Def_Mission_Type_RunFamily = 12
|
|
Def_MainTask_Type_List = [Def_Mission_Type_Main, Def_Mission_Type_MainHid]
|
Def_RunTask_Type_List = [Def_Mission_Type_RunDaily, Def_Mission_Type_RunFamily]
|
|
#---------------------------------------------------------------------
|
## »ñÈ¡¹«ÓÃÈÎÎñ
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
# @remarks (Õâ¸öÈÎÎñ¼Ç¼ÁËÒ»Ð©Íæ¼ÒÊý¾Ý)
|
def GetCommonMission(curPlayer):
|
#ÅжÏÓÐûÓÐÈÎÎñ1
|
curMission = curPlayer.FindMission(ChConfig.Def_MissionID_FirstLogin)
|
|
return curMission
|
#---------------------------------------------------------------------
|
##ÉèÖú¯Êý, ²éÕÒÈÎÎñ
|
# @param questIndex ÈÎÎñË÷Òý
|
# @return ·µ»ØÖµÎÞÒâÒå
|
# @remarks ÉèÖú¯Êý, ²éÕÒÈÎÎñ
|
def SetFindQuestFunc(questIndex):
|
global FindQuestFunc
|
FindQuestFunc = questIndex
|
|
#---------------------------------------------------------------------
|
##¹ýÂË×Ö·û´®
|
# @param str Ô×Ö·û
|
# @param mark ¹ýÂËÌõ¼þ
|
# @return ·µ»ØÖµ, ¹ýÂ˺óµÄ×Ö·û´®
|
# @remarks ¹ýÂË×Ö·û´®
|
def DealWithInPut(str, mark = '?'):
|
return re.findall("\(\\%s(\w+)\\%s\)"%(mark, mark), str)
|
# var=[]
|
# r=re.compile(r"[\(][%s][^\(]*[%s][\)]"%(mark, mark))
|
# strList=r.findall(str)
|
# rs=re.compile(r"[^\(%s][^\(]*[^%s\)]"%(mark, mark))
|
# for i in range(len(strList)):
|
# curItem=rs.findall(strList[i])
|
# var.extend(curItem)
|
# return var
|
|
#---------------------------------------------------------------------
|
##¹ýÂË×Ö·û´®
|
# @param str Ô×Ö·û
|
# @param rstr Ìæ»»µÄ×Ö·û´®
|
# @param mark ¹ýÂËÌõ¼þ
|
# @return ·µ»ØÖµ, ¹ýÂ˺óµÄ×Ö·û´®
|
# @remarks ¹ýÂË×Ö·û´®
|
def DealWithReverse(str, rstr, mark = '?'):
|
r=re.compile(r"[\(][%s][^\(]*[%s][\)]"%(mark, mark))
|
strList=r.findall(str)
|
replaceStr=str
|
for j in range(len(strList)):
|
if len(rstr)!=len(strList):
|
raise "Out Of Index Exception"
|
replaceStr=replaceStr.replace(strList[j],rstr[j])
|
return replaceStr
|
|
#---------------------------------------------------------------------
|
##ÉèÖ÷þÎñÆ÷ÈÎÎñ״̬stateºÍ֪ͨ¿Í»§¶ËµÄÈÎÎñ״̬MissionStat
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param curMission ÈÎÎñʵÀý
|
# @param state ÉèÖõÄ״̬
|
# @return ·µ»ØÖµÎÞÒâÒå
|
# @remarks ÉèÖ÷þÎñÆ÷ÈÎÎñ״̬stateºÍ֪ͨ¿Í»§¶ËµÄÈÎÎñ״̬MissionStat
|
def SetPlayerMissionState(curPlayer, curMission, state, isFinish=1, failReason=""):
|
#curState = curMission.GetState()
|
#if curState == -1:
|
#²»ÄÜÔÚÕâÀïÉèÖÃDescriptionIndex, ÒòΪÔÚ·â¾ôµÄʱºò, ÏÈÉèÖÃ-1, ÔÙ¸ø½±Àø
|
|
#2009.1.21
|
#ÔÀ´ÊÇÖ»ÓÐ-1״̬, ²ÅÉèÖÃMissionStateºÍDescriptionIndex
|
#ÏÖÔÚ¸ÄΪËùÓж¼ÕâÑù ------> ÓÉÓÚÈÎÎñ2000004,ÈÎÎñ״̬²»Îª-1µÄʱºòÒªÇå³ýÈÎÎñ¶ø¸Ä
|
#¿É½Ó
|
if state == ChConfig.Def_Mission_State_NoAccept:
|
curMission.SetMissionState(IPY_GameWorld.msNoMission)
|
curMission.SetDescriptionIndex(0)
|
#¿É½»
|
elif state == ChConfig.Def_Mission_State_CanComplete:
|
curMission.SetMissionState(IPY_GameWorld.msCanComplete)
|
#²»ÊÇÍê³É
|
elif state != ChConfig.Def_Mission_State_Over:
|
curMission.SetMissionState(IPY_GameWorld.msProcessing)
|
|
curMission.SetState(state)
|
|
missionID = curMission.GetMissionID()
|
curQuestData = QuestManager.FindQuest(missionID)
|
|
# ïÚ³µ »·ÈÎÎñÌØÊâ´¦Àí, »·ÈÎÎñÖÐÖ»×öÈÎÎñËæ»ú£¬½øÐÐ״̬¸Ä±ä
|
# if curQuestData != None and state == 1 and (curQuestData.Type in Def_RunTask_Type_List or missionID == ChConfig.Def_ConvoyTruckMissionID):
|
# EventReport.WriteEvent_mission_log(curPlayer, curQuestData, 0)
|
#
|
|
if state == ChConfig.Def_Mission_State_Over:
|
# ³É¾Í
|
import PlayerSuccess
|
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MainTaskNode, 1, [missionID])
|
|
# ¾çÇéÈÎÎñÍê³É´¦Àí
|
OnStoryMissionFinish(curPlayer, missionID)
|
|
EventReport.WriteEvent_mission_log(curPlayer, curQuestData, 1, isFinish, failReason)
|
|
# # ïÚ³µÍê³ÉÌØÊâ´¦Àí
|
# elif missionID == ChConfig.Def_ConvoyTruckMissionID and state == ChConfig.Def_Mission_State_NoAccept:
|
# GameFuncComm.DoFuncOpenLogic(curPlayer, [missionID])
|
# EventReport.WriteEvent_mission_log(curPlayer, curQuestData, 1, isFinish, failReason)
|
|
return
|
|
def OnStoryMissionFinish(curPlayer, missionID):
|
''' ¾çÇéÈÎÎñÍê³É״̬´¦Àí
|
1¿ªÍ·´ú±í¾çÇéÈÎÎñ
|
1 µØÍ¼±àºÅxx ¾çÇé±àºÅxx ÈÎÎñ±àºÅxx ÊÇ·ñ±¾¾çÇé×îºóÒ»¸öÈÎÎñ
|
1 xx xx xx 0
|
...
|
1 xx xx xx 1
|
'''
|
missionIDStr = str(missionID)
|
if len(missionIDStr) != 8 or not missionIDStr.startswith("1"):
|
#GameWorld.DebugLog("·Ç¾çÇéÈÎÎñID£¬²»´¦Àí£¡missionID=%s" % missionID)
|
return
|
|
storyNum = int(missionIDStr[3:5])
|
isFinish = missionID % 10
|
if isFinish not in [0, 1]:
|
GameWorld.ErrLog("Íê³ÉµÄ¾çÇéÈÎÎñID´íÎ󣡱ØÐëÊÇ0»ò1½áβ£¡missionID=%s" % (missionID), curPlayer.GetPlayerID())
|
return
|
|
if not isFinish:
|
#GameWorld.DebugLog("¸Ã¾çÇéÈÎÎñδȫ²¿Íê³É£¬²»´¦Àí£¡missionID=%s,storyNum=%s" % (missionID, storyNum))
|
return
|
|
dictValue, updDictValue = GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_StoryMissionState, storyNum, 1)
|
Sync_StoryMissionState(curPlayer, [storyNum])
|
GameWorld.Log("¾çÇéËùÓÐÈÎÎñÍê³É: missionID=%s,¾çÇé±àºÅ=%s,dictValue=%s,updDictValue=%s"
|
% (missionID, storyNum, dictValue, updDictValue), curPlayer.GetPlayerID())
|
return
|
|
def Sync_StoryMissionState(curPlayer, storyNumList=[]):
|
isSyncAllState = True
|
if not storyNumList:
|
storyNumList = xrange(ChConfig.Max_StoryMissionNum + 1)
|
isSyncAllState = False
|
|
stateInfo = ChPyNetSendPack.tagMCStoryMissionStateInfo()
|
stateInfo.StoryMissionStateList = []
|
for storyNum in storyNumList:
|
isAllFinish = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_StoryMissionState, storyNum)
|
if not isSyncAllState and not isAllFinish:
|
continue
|
storyState = ChPyNetSendPack.tagMCStoryMissionState()
|
storyState.StoryNum = storyNum
|
storyState.IsAllFinish = isAllFinish
|
stateInfo.StoryMissionStateList.append(storyState)
|
stateInfo.Count = len(stateInfo.StoryMissionStateList)
|
if stateInfo.Count:
|
NetPackCommon.SendFakePack(curPlayer, stateInfo)
|
return
|
#---------------------------------------------------------------------
|
##»ñµÃÈÎÎñ½±Àø½Úµã
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param curMission ÈÎÎñʵÀý
|
# @return ·µ»ØÖµ, ½±Àø½ÚµãÐÅÏ¢
|
# @remarks »ñµÃÈÎÎñ½±Àø½Úµã
|
def GetRewardNode(curPlayer, curMission):
|
if FindQuestFunc(curMission.GetMissionID()) == None:
|
return None
|
|
descriptIndex = curMission.GetDescriptionIndex()
|
|
questList = FindQuestFunc(curMission.GetMissionID()).QuestDescriptionList
|
if descriptIndex >= len(questList) or descriptIndex < 0:
|
return None
|
|
xmlNode = questList[descriptIndex].Rewards
|
if xmlNode == None or xmlNode.IsEmpty():
|
return None
|
|
for i in range(xmlNode.GetChildCount()):
|
curRewardNode = xmlNode.GetChild(i)
|
#ÅжÏÕâ¸ö½±ÀøÊDz»ÊǸøÕâ¸öÈ˵Ä
|
rewardType = curRewardNode.GetAttribute("type")
|
rewardType2 = curRewardNode.GetAttribute("type2")
|
if rewardType == "":
|
return curRewardNode
|
|
rewardValue = int(curRewardNode.GetAttribute("value"))
|
|
rewardType = rewardType.title()
|
if rewardType2 != "":
|
rewardType2 = rewardType2.title()
|
rewardValue2 = int(curRewardNode.GetAttribute("value2"))
|
#ÐÔ±ðºÍÖ°Òµ
|
if rewardType == "Job" and rewardValue == curPlayer.GetJob() and rewardType2 == "Sex" and rewardValue2 == curPlayer.GetSex():
|
return curRewardNode
|
else:
|
#ÐÔ±ð
|
if rewardType == "Sex" and rewardValue == curPlayer.GetSex():
|
return curRewardNode
|
#Ö°Òµ
|
elif rewardType == "Job" and rewardValue == curPlayer.GetJob():
|
return curRewardNode
|
else:
|
GameWorld.Log("ÈÎÎñID = %d, ½±ÀøÀàÐÍ : %s δ´¦Àí : (%d,%d)"%(curMission.GetMissionID(), rewardType, curPlayer.GetSex(), curPlayer.GetJob()) , curPlayer.GetPlayerID())
|
|
#---------------------------------------------------------------------
|
##»ñÈ¡ÈÎÎñID
|
# @param mission ÈÎÎñʵÀý
|
# @return ÈÎÎñID
|
# @remarks »ñÈ¡ÈÎÎñID
|
def GetMissionID(curMission):
|
if curMission == None:
|
return 0
|
|
return curMission.GetMissionID()
|
|
|
##Ìí¼ÓÐÂÈÎÎñ
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param curMissionID ÈÎÎñID
|
# @return ·µ»ØÖµ,ÐÂÔöµÄÈÎÎñʵÀý
|
# @remarks Ìí¼ÓÐÂÈÎÎñ
|
def AddNewMission(curPlayer, curMissionID):
|
GameWorld.Log("AddNewMission----%s"%curMissionID, curPlayer.GetID())
|
curMission = curPlayer.AddMission(curMissionID)
|
|
#µÈ¼¶´¥·¢OSS¼Ç¼
|
if GameWorld.IsMissonDR(curPlayer):
|
DataRecordPack.DR_AddNewMission(curPlayer, curMissionID)
|
|
# ¼Ç¼ÈÎÎñ¿ªÊ¼Ê¼þ
|
curQuestData = QuestManager.FindQuest(curMissionID)
|
if curQuestData != None:
|
EventReport.WriteEvent_mission_log(curPlayer, curQuestData, 0)
|
|
EventShell.RunQuestEvent(curPlayer, "on_create", curMissionID, EventShell.Def_RunQuestType_Normal)
|
return curMission
|
|
#---------------------------------------------------------------------
|
##ɾ³ýÈÎÎñ
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param curMissionID ÈÎÎñID
|
# @return ·µ»ØÖµ,ÎÞÒâÒå
|
# @remarks ɾ³ýÈÎÎñ
|
def DeleteMission(curPlayer, curMissionID):
|
if not curPlayer.FindMission(curMissionID):
|
GameWorld.ErrLog("Óûɾ³ýÒ»¸ö²»´æÔÚµÄÈÎÎñ %s"%(curMissionID))
|
return
|
|
global g_IsMissionDeleted
|
g_IsMissionDeleted = 1
|
|
curPlayer.DelMission(curMissionID)
|
|
#µÈ¼¶´¥·¢OSS¼Ç¼
|
if GameWorld.IsMissonDR(curPlayer):
|
DataRecordPack.DR_DeleteMission(curPlayer, curMissionID)
|
return
|
|
def GetHadFinishMainMission(curPlayer, missionID):
|
''' ¼ì²éÊÇ·ñÒѾÍê³É¸ÃÖ÷ÏßÈÎÎñ '''
|
|
curMission = curPlayer.FindMission(missionID)
|
if curMission != None:
|
#GameWorld.DebugLog("µ±Ç°ÈÎÎñδÍê³É...missionID=%s" % missionID)
|
return curMission.GetState() == ChConfig.Def_Mission_State_Over
|
|
curMissionData = FindQuestFunc(missionID)
|
if not curMissionData:
|
return False
|
|
# ·ÇÖ÷Ïß²»ÅжÏ
|
if curMissionData.Type not in Def_MainTask_Type_List:
|
#GameWorld.DebugLog("·ÇÖ÷Ïß²»ÅжÏ...missionID=%s" % missionID)
|
return False
|
|
# ²»´æÔÚ¸ÃÈÎÎñ£¬ÔòÅжÏͬÀàÐ͵ÄÈÎÎñID
|
for i in range(curPlayer.GetMissionCount()):
|
mission = curPlayer.GetMissionByIndex(i)
|
taskID = mission.GetMissionID()
|
missionData = FindQuestFunc(taskID)
|
if not missionData:
|
continue
|
|
taskType = missionData.Type
|
if taskType not in Def_MainTask_Type_List:
|
continue
|
|
# ÓÉÓÚÖ÷ÏßÈÎÎñIDÊǰ´ÈÎÎñ˳ÐòµÝÔöµÄ£¬¹ÊÖ»Òª´æÔÚ´óÓÚ¸ÃÈÎÎñIDµÄÖ÷ÏßÈÎÎñÔò´ú±í¸ÃÖ÷ÏßÈÎÎñÒÑÍê³É
|
if taskID > missionID:
|
#GameWorld.DebugLog("´æÔÚÖ÷ÏßÈÎÎñ %s > missionID=%s" % (taskID, missionID))
|
return True
|
|
#GameWorld.DebugLog("¸ÃÖ÷ÏßÈÎÎñδÍê³É...missionID=%s" % missionID)
|
return False
|
|
##ÈÎÎñÊÇ·ñ±»É¾³ý
|
# @param None
|
# @return ²¼¶û
|
def IsDeleteMission():
|
return g_IsMissionDeleted
|
|
##ÉèÖÃÈÎÎñɾ³ý״̬
|
# @param state BOOL±êʶɾ³ý
|
# @return None
|
def SetMissionBeDeleted(state):
|
global g_IsMissionDeleted
|
g_IsMissionDeleted = state
|
|
|
## ¼ì²éÖ÷ÏßÈÎÎñ½áµãÍê³ÉÇé¿ö
|
# @param curPlayer
|
# @param succInfoDict ³É¾ÍÐÅÏ¢
|
# @return ×îºóÍê³ÉµÄÈÎÎñID
|
def GetCurMainTaskState(curPlayer, succInfoDict):
|
mainTaskIDList = ReadChConfig.GetEvalChConfig("MainTaskIDList")
|
# »ñÈ¡µ±Ç°Ö÷ÏßÈÎÎñID
|
curMainMissionID = -1
|
for i in range(0, curPlayer.GetMissionCount()):
|
curMission = curPlayer.GetMissionByIndex(i)
|
missionID = curMission.GetMissionID()
|
if missionID in mainTaskIDList:
|
curMainMissionID = missionID
|
|
indexList = succInfoDict.keys()
|
indexList.sort(reverse=True)
|
# »ñÈ¡²»µ½Ö÷ÏßÈÎÎñʱ
|
if curMainMissionID < 0:
|
defaultFinishLV = ReadChConfig.GetEvalChConfig("DefaultFinishLV")
|
if curPlayer.GetLV() >= defaultFinishLV:
|
return succInfoDict[indexList[0]].condition
|
else:
|
return -1
|
|
# »ñÈ¡×îºóÍê³ÉµÄ³É¾ÍÈÎÎñË÷Òý
|
curMainIndex = mainTaskIDList.index(curMainMissionID)
|
for index in indexList:
|
succData = succInfoDict.get(index)
|
missionID = succData.condition
|
if missionID not in mainTaskIDList:
|
GameWorld.DebugLog('¼ì²éÖ÷ÏßÈÎÎñ½áµãÍê³ÉÇé¿ö MainTaskIDList±í©ÅäÁË missionID=%d'%missionID)
|
continue
|
|
mainIndex = mainTaskIDList.index(missionID)
|
if mainIndex == curMainIndex:
|
curMission = curPlayer.FindMission(missionID)
|
if curMission != None:
|
missionState = curMission.GetState()
|
if missionState != ChConfig.Def_Mission_State_Over:
|
condition = succInfoDict[index -1].condition if index > 0 else -1
|
return condition
|
return succInfoDict[index].condition
|
if mainIndex < curMainIndex:
|
return succInfoDict[index].condition
|
return -1
|
|