#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package QuestRunner # @todo: ÈÎÎñÖ´ÐÐÂß¼­ # # @author: eggxp # @date 2010-04-27 # @version 8.4 # # @note: ÈÎÎñÖ´ÐÐÂß¼­´¦Àí,½Ó¿Úº¯Êý #--------------------------------------------------------------------- #--------------------------------------------------------------------- #"""Version = 2017-04-25 17:00""" #--------------------------------------------------------------------- #ConditionType_ #ÊÂǰÅж¨ #DoType_ #ʺóÅж¨ #--------------------------------------------------------------------- import ChConfig import EventShell import BuffSkill import FBLogic import GameMap import GameWorld import GameWorldProcess import IPY_GameWorld import ItemControler import PlayerControl import PlayerTruck import QuestRunnerValue import SkillCommon import ItemCommon import ReadChConfig import QuestCommon import SkillShell import GameLogInfo import PlayerReincarnation import PlayerMissionCollect import PlayerFamily import ShareDefine #import PlayerPrestigeSys import NetPackCommon import ChPyNetSendPack import DataRecordPack import ChItem import ChEquip import PlayerActivity import PlayerSuccess import EventReport #import PlayerCostVIP import GameFuncComm import IpyGameDataPY import ShopItemManage import PlayerPet import PlayerArrestTask import PlayerMagicWeapon import PlayerBossReborn import PlayerFairyCeremony import PlayerNewFairyCeremony import PlayerWeekParty import PlayerActLogin import PlayerHorse import FBCommon import PyGameData import math import time import datetime import random import re #--------------------------------------------------------------------- #--------------------------------------------------------------------- TYPE_Event_Select = 1 TYPE_Event_Do = 2 #×¢Òâ! ÕâÀïµÄ×ÖµäÃû²»Äܳ¬¹ý29¸ö×Ö½Ú #ÿÈÕÈÎÎñµÄ½±Àø(ÔÚ¸ø½ÓÊÜÐÂÈÎÎñµÄʱºòÉèÖÃ) Def_Day_Event_Reward_Exp = "day_event_exp" #ÿÈÕÈÎÎñµÄ½±Àø Def_Day_Event_Reward_Money = "day_event_money" #ÿÈÕÈÎÎñµÄ¸øÇ® Def_Day_Event_Reward_Truck_Money = "day_event_truck_money" #ÿÈÕÈÎÎñæô³µ Def_Day_Event_Reward_Item_Id = "day_event_item_id" #ÿÈÕÈÎÎñµÄ½±ÀøÎïÆ·ID Def_Day_Event_Reward_Item_Count = "day_event_item_count" #ÿÈÕÈÎÎñµÄ½±ÀøÎïÆ·ÊýÁ¿ Def_Day_Event_Reward_Player_Family_Hornor = "day_event_pfamily_hornor" Def_Day_Event_Reward_Player_Family_ActiveValue = "day_event_pfamily_actvalue" Def_Day_Event_Reward_Family_Money = "day_event_family_money" Def_Day_Event_Reward_Family_Hornor = "day_event_hornor" Def_Day_Event_Reward_Pet_Exp = "day_event_pet_exp" #ÿÈÕ³èÎï¾­Ñé½±Àø Def_Day_Event_Reward_Prestige = "day_event_prestige" #ÿÈÕÍþÍû½±Àø #ÅÜ»·ÈÎÎñ½±Àø Def_Run_Around_Reward_Exp = "run_around_exp" #ÅÜ»·ÈÎÎñµÄ½±Àø Def_Run_Around_Reward_ExpPoint = "run_around_exp_point" #ÅÜ»·ÈÎÎñµÄ½±Àø Def_Run_Around_Reward_Money = "run_around_money" #ÅÜ»·ÈÎÎñµÄ¸øÇ® Def_Run_Around_Reward_FamilyHornor = "run_around_familyhornor" #ÅÜ»·ÈÎÎñµÄÏÉÃ˹±Ï×½±Àø Def_Run_Around_Reward_Multiple = "run_around_multiple" #ÅÜ»·ÈÎÎñµÄ½±Àø·­±¶Êý Def_Task_Reward_Per = "reward_per" #ÁìÈ¡ÈÎÎñ½±Àø±¶Êý°Ù·Ö±È; 150´ú±í1.5±¶ #ÅÜ»·½áÊø×´Ì¬ Def_Run_Around_Over_1 = 1 Def_Run_Around_Over_2 = 2 Def_Run_Around_Over_3 = 3 #1. xmlûÓе÷ÓùýSetStateº¯Êý #2. Íæ¼Ò֮ǰûÓдËÈÎÎñ #ÔòÔÚÕâÀï°Ñµ±Ç°ÈÎÎñ֪ͨ¸øÍæ¼Ò #·ÀÖ¹Á¬ÐøÍ¨Öª2´Î, µ¼ÖÂÍæ¼ÒµÄÈÎÎñ²éѯÁбíÖÐÓÐ2¸öÏàͬÈÎÎñ __PlayerSetState = False #------------------------------------------------- ## ÍÚ±¦¹ã²¥ÐÅÏ¢. # # PyClassÀàµÄÏêϸ˵Ã÷. class TreasureNotifyContent: LV = 0 Content = None MissionID = 0 #--------------------------------------------------------------------- ## ÈÝÆ÷³õʼ»¯, LV,Content,MissionID # @param self ÀàʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ÈÝÆ÷³õʼ»¯, LV,Content,MissionID def __init__(self): self.LV = 0 self.Content = str() self.MissionID = 0 TreasureNotifyContentList = list() #Type = TreasureNotifyContent #--------------------------------------------------------------------- ##³õʼ»¯ÍÚ±¦¹ã²¥ÐÅÏ¢Áбí # @param ÎÞ # @return ·µ»ØÖµÎÞÒâÒå # @remarks ³õʼ»¯ÍÚ±¦¹ã²¥ÐÅÏ¢Áбí TreasureNotifyContentList = list() #Type = TreasureNotifyContent def InitTreasureNotifyContentList(): global TreasureNotifyContentList TreasureNotifyContentList = list() return #--------------------------------------------------------------------- ##»ñÈ¡ÍÚ±¦¹ã²¥ÐÅÏ¢Áбí # @param ÎÞ # @return ·µ»ØÖµ, ÍÚ±¦¹ã²¥ÐÅÏ¢Áбí # @remarks »ñÈ¡ÍÚ±¦¹ã²¥ÐÅÏ¢Áбí TreasureNotifyContentList = list() #Type = TreasureNotifyContent def GetTreasureNotifyContentList(): return TreasureNotifyContentList #------------------------------------------------- #eggxp TalkContent = IPY_GameWorld.IPY_TalkMsg() #MissionDescription = IPY_GameWorld.IPY_MissionDescription() MissionDescription = IPY_GameWorld.IPY_MissionDesc() CurrentPlayerAnswer = str() CurrentKillNPC = None #ËùÓÐÈÎÎñµÄË÷Òý FindQuestFunc = None #¹¦ÄÜnpcµÄ¶Ô»° FunctionNPCTalk = None #ĬÈ϶Ի°Êý¾Ý FindDefaultTalkFunc = None #ÈÎÎñ¶Ô»°Á´ QuestTrig = None #ÈÎÎñĬÈÏÃèÊö QuestDescriptions = None #ËùÓÐÈÎÎñʼþ AllQuestsEvents = None #--------------------------------------------------------------------- ##ÉèÖÃÈ«¾ÖÈÎÎñ # @param allQuestsEvents ËùÓÐÈÎÎñʼþ # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸³ÖµÈ«¾Ö±äÁ¿AllQuestsEvents = allQuestsEvents def SetAllQuestsEvents(allQuestsEvents): global AllQuestsEvents AllQuestsEvents = allQuestsEvents #--------------------------------------------------------------------- ##ÉèÖÃÈ«¾ÖÈÎÎñ²éÕÒº¯Êý # @param questIndex ÈÎÎñË÷Òý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸³ÖµÈ«¾Ö±äÁ¿FindQuestFunc = QuestCommon.SetFindQuestFunc def SetFindQuestFunc(questIndex): global FindQuestFunc FindQuestFunc = questIndex QuestCommon.SetFindQuestFunc(questIndex) #--------------------------------------------------------------------- ##ÉèÖù¦ÄÜNPC¶Ô»° # @param funcTalk ÈÎÎñ¶Ô»°Êý¾Ý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸³ÖµÈ«¾Ö±äÁ¿FunctionNPCTalk = funcTalk def SetFunctionNPCTalk(funcTalk): global FunctionNPCTalk FunctionNPCTalk = funcTalk #--------------------------------------------------------------------- ##ÉèÖù¦ÄÜNPCĬÈ϶Ի° # @param funcTalk ÈÎÎñ¶Ô»°Ä¬ÈÏÊý¾Ý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸³ÖµÈ«¾Ö±äÁ¿FindDefaultTalkFunc = defaultTalk def SetFindDefaultTalkFunc(defaultTalk): global FindDefaultTalkFunc FindDefaultTalkFunc = defaultTalk #--------------------------------------------------------------------- ##ÉèÖû÷ɱµÄNPC # @param curNPC NPCʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸³ÖµÈ«¾Ö±äÁ¿CurrentKillNPC = curNPC def SetKillNPC(curNPC): global CurrentKillNPC CurrentKillNPC = curNPC #--------------------------------------------------------------------- ##ÈÎÎñÌø×ª # @param questTrig ÈÎÎñÌø×ªÐÅÏ¢ # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸³ÖµÈ«¾Ö±äÁ¿QuestTrig = questTrig def SetQuestTrig(questTrig): global QuestTrig QuestTrig = questTrig #--------------------------------------------------------------------- ##ÈÎÎñÃèÊö # @param questDescriptions ÈÎÎñÃèÊö # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¸³ÖµÈ«¾Ö±äÁ¿QuestDescriptions = questDescriptions def SetQuestDescriptions(questDescriptions): global QuestDescriptions QuestDescriptions = questDescriptions #--------------------------------------------------------------------- ##»ñÈ¡Íæ¼Òµ±Ç°µã»÷µÄNPC # @param curPlayer Íæ¼ÒʵÀý # @return ·µ»ØÖµ, NPCʵÀý # @remarks »ñÈ¡Íæ¼Òµ±Ç°µã»÷µÄNPC def GetPlayerTalkNPC(curPlayer): #µÃµ½Íæ¼ÒµÄ¶ÔÏóNPC tagObj = curPlayer.GetActionObj() if tagObj == None: #ûÓÐÄ¿±ê return None if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC: return None curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex()) return curNPC #--------------------------------------------------------------------- ##»ñÈ¡Íæ¼Òµ±Ç°µã»÷µÄNPC̸»°ÄÚÈÝ # @param curPlayer Íæ¼ÒʵÀý # @return ·µ»ØÖµ, ̸»°ÄÚÈÝ, ²Ëµ¥Ñ¡Ïî # @remarks »ñÈ¡Íæ¼Òµ±Ç°µã»÷µÄNPC̸»°ÄÚÈÝ def GetTalkContent(curPlayer): global TalkContent TalkContent.Clear() #µÃµ½Íæ¼ÒµÄ¶ÔÏóNPC curNPC = GetPlayerTalkNPC(curPlayer) if curNPC == None: #ûÓÐÕâ¸öNPC return TalkContent, None funcTalkDict = FunctionNPCTalk funcType = curNPC.GetFunctionType() if funcTalkDict.has_key(funcType) != True: return TalkContent, None menuList = list() for menu in funcTalkDict[funcType].Menus: if QuestRunnerValue.RunMenuCheck(curPlayer, menu.Check, menu.CheckArgs) != True: continue menuList.append(menu.Code) return TalkContent, menuList #--------------------------------------------------------------------- ##ÔËÐÐÈÎÎñʼþµÄËùÓнڵã # @param curPlayer Íæ¼ÒʵÀý # @param curMissionID ÈÎÎñID # @param questEventLoader ÈÎÎñʼþÊý¾Ý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ÔËÐÐÈÎÎñʼþµÄËùÓнڵã def RunAllQuest(curPlayer, curMissionID, questEventLoader): if questEventLoader == None or questEventLoader.IsEmpty(): #ûÓÐʼþ GameWorld.Log("ûÓÐʼþ" , curPlayer.GetPlayerID()) return #-------------------------event½Úµã------------------- eventNode = questEventLoader.FindNode("event") if eventNode == None or eventNode.IsEmpty(): GameWorld.Log("·ÃÎÊʼþ²»´æÔÚevent" , curPlayer.GetPlayerID()) return #2009.8.26ÈÕ #ÏÈÅж¨ÓÐûÓÐÕâ¸öÈÎÎñ, Èç¹ûûÓÐÕâ¸öÈÎÎñ, ɾ³ý if curMissionID != 0: #2009.8.27ÐÞ¸Ä #0ÈÎÎñÊÇÌØÊâ´¥·¢, ²»É¾³ý questData = FindQuestFunc(curMissionID) if questData == None: #ûÓÐÕâ¸öÈÎÎñ, ·µ»Ø GameWorld.Log("RunAllQuest, ÕÒ²»µ½ÈÎÎñ%s ɾ³ýÈÎÎñÊý¾Ý" % curMissionID , curPlayer.GetPlayerID()) #2009.10.9ÈÕÐÞÕý #ÔËÐе½ÕâÀïµÄʱºò, Íæ¼Ò¿ÉÄܸù±¾Ã»Õâ¸öÈÎÎñ. Èç¹ûÔÚÏÂÃæ´¥·¢É¾³ý, »á±¨c++¾¯¸æ #ËùÒÔÒª¼ÓÉÏÅж¨ if curPlayer.FindMission(curMissionID): curPlayer.DelMission(curMissionID) return curMission = curPlayer.FindMission(curMissionID) #-------------------------quest½Úµã------------------- global __PlayerSetState for i in range(0, eventNode.GetChildCount()): #±éÀúÈÎÎñÁбí, ÕÒµ½Õâ¸öÈËÎï¿ÉÒÔÖ´ÐеÄÈÎÎñ questNode = eventNode.GetChild(i) if eventNode == None or questNode.IsEmpty(): #ûÓÐÈÎÎñ½Úµã GameWorld.Log("ûÓÐÈÎÎñ½Úµã" , curPlayer.GetPlayerID()) return #2008.12.22 #¼ÓÉÏÏÂÃæÒ»¾ä, »áÔÚOnDayµÄʱºò, Èç¹ûÍæ¼Òµ±Ç°ÕýÔÚ¶Ô»°, ¶Ô»°ÐèÒª½øÐÐDoType_Run_Embranchment²Ù×÷ #»á¿¨×¡ #curPlayer.SetCurrentQuestNode(questNode) #-------------------------embranchment½Úµã------------------- #µÃµ½ÁËÈËÎﵱǰÔËÐеÄÈÎÎñ, ¿ªÊ¼ÔËÐиÃÈÎÎñµÄ¶Ô»°·ÖÖ§ for j in range(0, questNode.GetChildCount()): embranchmentNode = questNode.GetChild(j) if embranchmentNode == None or embranchmentNode.IsEmpty(): #ÕÒ²»µ½·ÖÖ§½Úµã GameWorld.Log("RunAllQuest ÕÒ²»µ½·ÖÖ§½Úµã" , curPlayer.GetPlayerID()) return # attributeID = questNode.GetAttribute("id") # if attributeID == "": # #ÊÇComment # continue # curMissionID = int(attributeID) result = __CanRunEmbranchmentNode(curPlayer, curMission, embranchmentNode) #GameWorld.Log("result = %s, xml = %s"%(result, embranchmentNode.GetXML())) if result != True: continue answersNode = embranchmentNode.FindChildNode("answers") actionsNode = None if answersNode and (not answersNode.IsEmpty()): actionsNode = __FindAnswerActionNode(curPlayer, curMission, answersNode) if actionsNode == None or actionsNode.IsEmpty(): continue #GameWorld.Log("%s-------------------"%curMissionID) needNotifyMission = False if curMission == None: #Íæ¼ÒûÓÐÕâ¸öÿÈÕÈÎÎñ, Ìí¼ÓÿÈÕÈÎÎñ¸øËû needNotifyMission = True curMission = QuestCommon.AddNewMission(curPlayer, curMissionID) runResult = False runResult = RunEmbranchmentNode(curPlayer, curMission, embranchmentNode, actionsNode) # try: # runResult = RunEmbranchmentNode(curPlayer, curMission, embranchmentNode, actionsNode) # except Exception: # GameWorld.Log("RunEmbranchmentNode Error : curPlayer = %d, curMission = %d, embranchmentNode = %s"%(curPlayer.GetPlayerID(), curMissionID, embranchmentNode.GetXML())) # raise Exception("RunEmbranchmentNode Error") #1. xmlûÓе÷ÓùýSetStateº¯Êý #2. Íæ¼Ò֮ǰûÓдËÈÎÎñ #ÔòÔÚÕâÀï°Ñµ±Ç°ÈÎÎñ֪ͨ¸øÍæ¼Ò #·ÀÖ¹Á¬ÐøÍ¨Öª2´Î, µ¼ÖÂÍæ¼ÒµÄÈÎÎñ²éѯÁбíÖÐÓÐ2¸öÏàͬÈÎÎñ curMission = curPlayer.FindMission(curMissionID) if curMission == None: #2009.3.9 18:02 #´ËʱÈÎÎñÒѾ­É¾³ýÁË(ÔËÐÐÁËOver) ²»ÓÃÍ¨ÖªÍæ¼ÒÈÎÎñ״̬ÁË break if needNotifyMission and not __PlayerSetState : EventShell.NotifyOneMission(curPlayer, curMission) #2009.8.26ÈÕ #ÔÚEventShell.NotifyOneMission»áɾ³ýÈÎÎñ #ËùÒÔÔÚÕâÀïÒªÔÙȡһ´Î. ·ñÔò»áµ¼ÖÂcurMission Aµô curMission = curPlayer.FindMission(curMissionID) __PlayerSetState = False if runResult: break return True #--------------------------------------------------------------------- ##ϵͳµ¯³öµÄÈÎÎñ¶Ô»°, ûÓÐÈÎÎñÃû³ÆÑ¡Ôñ·ç¸ñ # @param curPlayer Íæ¼ÒʵÀý # @param questEventLoader ÈÎÎñʼþÊý¾Ý # @return ·µ»ØÖµ, ÊÇ·ñÖ´Ðгɹ¦ # @remarks ϵͳµ¯³öµÄÈÎÎñ¶Ô»°, ûÓÐÈÎÎñÃû³ÆÑ¡Ôñ·ç¸ñ def RunFunctionQuest(curPlayer, questEventLoader): if questEventLoader == None or questEventLoader.IsEmpty(): #ûÓÐʼþ GameWorld.Log("ûÓÐʼþ" , curPlayer.GetPlayerID()) return #-------------------------event½Úµã------------------- eventNode = questEventLoader.FindNode("event") if eventNode.IsEmpty(): GameWorld.Log("·ÃÎÊʼþ²»´æÔÚevent" , curPlayer.GetPlayerID()) return curPlayer.SetCurrentXMLNode(eventNode) #-------------------------quest½Úµã------------------- # curMission = None questNode = None # nonQuestNode = None # curMission = curPlayer.FindMission(curMissionID) # if curMission == None: # return # # if curMission.GetState() == -1: # return for i in range(0, eventNode.GetChildCount()): questNode = eventNode.GetChild(i) curPlayer.SetCurrentQuestNode(questNode) for i in range(0, questNode.GetChildCount()): embranchmentNode = questNode.GetChild(i) if embranchmentNode == None or embranchmentNode.IsEmpty(): #ÕÒ²»µ½·ÖÖ§½Úµã GameWorld.Log("RunFunctionQuest ÕÒ²»µ½·ÖÖ§½Úµã" , curPlayer.GetPlayerID()) return if RunEmbranchmentNode(curPlayer, None, embranchmentNode) == True: #GameWorld.Log("ÔÚµÚ %d ¸ö½ÚµãÔËÐгɹ¦"%(i)) # isRunMission = True return True else: #GameWorld.Log("ÔÚµÚ %d ¸ö½ÚµãÔËÐÐʧ°Ü %s"%(i, questNode.GetXML())) pass return True #--------------------------------------------------------------------- ##ϵͳµ¯³öµÄÈÎÎñ¶Ô»°, ûÓÐÈÎÎñÃû³ÆÑ¡Ôñ·ç¸ñ # @param curPlayer Íæ¼ÒʵÀý # @param curMissionID ÈÎÎñID # @param questEventLoader ÈÎÎñʼþÊý¾Ý # @return ·µ»ØÖµÎÞÒâÒå # @remarks ϵͳµ¯³öµÄÈÎÎñ¶Ô»°, ûÓÐÈÎÎñÃû³ÆÑ¡Ôñ·ç¸ñ def RunQuest(curPlayer, curMissionID, questEventLoader): timeClock = time.clock() if questEventLoader == None or questEventLoader.IsEmpty(): #ûÓÐʼþ GameWorld.Log("ûÓÐʼþ" , curPlayer.GetPlayerID()) return #-------------------------event½Úµã------------------- eventNode = questEventLoader.FindNode("event") if eventNode == None or eventNode.IsEmpty(): GameWorld.Log("·ÃÎÊʼþ²»´æÔÚevent" , curPlayer.GetPlayerID()) return curPlayer.SetCurrentXMLNode(eventNode) #-------------------------quest½Úµã------------------- # curMission = None questNode = None # nonQuestNode = None curMission = curPlayer.FindMission(curMissionID) if curMission == None: return if curMission.GetState() == ChConfig.Def_Mission_State_Over: return for i in range(0, eventNode.GetChildCount()): questNode = eventNode.GetChild(i) #2009.9.27 #bug: Íæ¼ÒÔÚ½»ÈÎÎñµÄʱºò, ´¥·¢ÁËÆäËûµÄɱ¹ÖÈÎÎñ, #µ¼ÖÂCurrentQuestNode±»ÖØÖÃÁË #½â¾ö: ²»ÄÜÖ±½ÓSetCurrentQuestNode #Ôö¼ÓÅж¨ #curPlayer.SetCurrentQuestNode(questNode) for i in range(0, questNode.GetChildCount()): embranchmentNode = questNode.GetChild(i) if embranchmentNode == None or embranchmentNode.IsEmpty(): #ÕÒ²»µ½·ÖÖ§½Úµã GameWorld.Log("RunQuest ÕÒ²»µ½·ÖÖ§½Úµã" , curPlayer.GetPlayerID()) return if RunEmbranchmentNode(curPlayer, curMission, embranchmentNode) == True: #GameWorld.Log("ÔÚµÚ %d ¸ö½ÚµãÔËÐгɹ¦"%(i)) # isRunMission = True #=============================================================================== # c++´úÂë, WaitEvent»áÖÃm_CurrentMissionID, ÓÃÕâ¸öÖµÀ´Åж¨ # void Player::WaitEvent(int missionID, IPY_XMLNode curNode) # { # m_CurrentMissionID = missionID; # m_CurrentEventNode = curNode; # } #=============================================================================== talkMissionID = curPlayer.GetCurrentMissionID() if talkMissionID != 0 and talkMissionID == curMissionID: #Ö»Óеȴý¶Ô»°×´Ì¬²¢ÇÒÊǵ±Ç°¶Ô»°µÄÈÎÎñ£¬²ÅÉ趨QuestÖ¸Õë curPlayer.SetCurrentQuestNode(questNode) return True else: #GameWorld.Log("ÔÚµÚ %d ¸ö½ÚµãÔËÐÐʧ°Ü %s"%(i, questNode.GetXML())) pass #¼Ç¼ÈÎÎñÏà¹ØÐÅÏ¢ GameLogInfo.LogInfo_MissionTime(timeClock) GameLogInfo.LogInfo_MissionCount(1) return True #--------------------------------------------------------------------- #=============================================================================== # Íæ¼ÒºÍNPC¶Ô»°¹ý³Ì: # 1. NPC¶Ô»°ÏÔʾ (RunQuestOnVisit) # ÈÎÎñ - XXX # ÈÎÎñ - XXX # # 2. (Íæ¼ÒÑ¡Ôñ)ÈÎÎñ-xxxÖ®ºó (Answer_MissionSelect) # ¿ªÊ¼ÔËÐÐÕâ¸öNPCµÄxmlÎļþ #=============================================================================== ##ϵͳµ¯³öµÄÈÎÎñ¶Ô»°, ûÓÐÈÎÎñÃû³ÆÑ¡Ôñ·ç¸ñ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curTrigMission ÈÎÎñÊý¾Ý # @param npcID NPCID # @return ·µ»ØÖµ, key = ("on_visit", "%d.xml"%0) # @remarks ϵͳµ¯³öµÄÈÎÎñ¶Ô»°, ûÓÐÈÎÎñÃû³ÆÑ¡Ôñ·ç¸ñ def GetVisitNPCKey(curPlayer, curMission, curTrigMission, npcID): #Ëæ»ú·ÃÎÊNPCÅж¨ key = ("on_visit", "%d.xml" % 0) if curTrigMission.QuestsEvent.has_key(key) : if npcID == curMission.GetProperty(QuestCommon.Def_Visit_Npc_ID): return key #Õý³£·ÃÎÊNPCÅж¨ key = ("on_visit", "%d.xml" % npcID) if curTrigMission.QuestsEvent.has_key(key) : return key return ##½øÈëÔٴζԻ°Âß¼­ # @param curPlayer Íæ¼ÒʵÀý # @return ¶Ô»°³É¹¦Óë·ñ # @remarks ½øÈëÔٴζԻ°Âß¼­ def TalkAgain(curPlayer): #»ñµÃ¶Ô»°¶ÔÏóNPC curActionObj = curPlayer.GetActionObj() if curActionObj == None: return False if curActionObj.GetGameObjType() != IPY_GameWorld.gotNPC: return False curActionNPC = GameWorld.GetNPCManager().GetNPCByIndex(curActionObj.GetIndex()) npcID = curActionNPC.GetNPCID() #ÕÒµ½Íæ¼ÒÉíÉÏËùÓÐÄܺÍÕâ¸öNPC¶Ô»°µÄÈÎÎñ for i in range(curPlayer.GetMissionCount()): curMission = curPlayer.GetMissionByIndex(i) #δ½Ó ºÍ ¿É½»µÄÈÎÎñ¿ÉÒÔÔÙ¶Ô»° if curMission.GetState() not in \ [ChConfig.Def_Mission_State_NoAccept, ChConfig.Def_Mission_State_CanComplete]: continue missionID = curMission.GetMissionID() curTrigMission = FindQuestFunc(missionID) if curTrigMission == None: continue if curTrigMission.Type == QuestCommon.Def_GM_Active_Mission_Type: #Õâ¸öÈÎÎñÊǽÚÈÕÈÎÎñ, ÐèÒªGM¿ªÆôµÄ if not GameWorld.GetGameWorld().IsEventActive(missionID): continue key = GetVisitNPCKey(curPlayer, curMission, curTrigMission, npcID) if key == None: #ÎÞ´Ëkey continue runResult = False allNodelist = curTrigMission.QuestsEvent[key].GetXMLEventLoader().GetNodeList() eventNode = allNodelist.FindNode("event") if eventNode == None or eventNode.IsEmpty(): GameWorld.Log("·ÃÎÊʼþ²»´æÔÚevent" , curPlayer.GetPlayerID()) return False #-------------------------quest½Úµã------------------- for i in range(0, eventNode.GetChildCount()): #±éÀúÈÎÎñÁбí, ÕÒµ½Õâ¸öÈËÎï¿ÉÒÔÖ´ÐеÄÈÎÎñ questNode = eventNode.GetChild(i) curPlayer.SetCurrentQuestNode(questNode) for i in range(0, questNode.GetChildCount()): embranchmentNode = questNode.GetChild(i) if CanDoQuestNodeTalk(curPlayer, curMission, embranchmentNode): runResult = True break if not runResult: #²»ÄÜÔËÐÐÈÎÎñ continue #¿ÉÒÔÔٴζԻ°£¬½øÐжԻ°Âß¼­ GameWorld.DebugLog("ÔٴνøÈë¶Ô»°¶Ô»°£¡ %s %s" % key) if not RunQuestOnVisit(curPlayer, npcID): GameWorld.Log("%sÈÎÎñ¼ÌÐø¶Ô»°Ö´ÐÐʧ°Ü" % (npcID) , curPlayer.GetPlayerID()) return False return True return False ##ÔٴζԻ°»òÍ˳ö¶Ô»°Âß¼­ # @param curPlayer Íæ¼ÒʵÀý # @return ÎÞ # @remarks ÔٴζԻ°»òÍ˳ö¶Ô»°Âß¼­ def DoTalkOrExit(curPlayer): #ÊÇ·ñ¼ÌÐø¶Ô»° if TalkAgain(curPlayer): return EventShell.DoExitEvent(curPlayer) #--------------------------------------------------------------------- ##ºÍNPC¶Ô»°, µÚÒ»¾ä¶Ô»°Òªµ¯³öÈÎÎñÃû³Æ, È»ºóÑ¡Ôñ # @param curPlayer Íæ¼ÒʵÀý # @param npcID NPCID # @param addFuncMenu ÊÇ·ñÔö¼ÓËùÓеĶԻ°(¹¦ÄܶԻ°) # @return ·µ»ØÖµ, ÊÇ·ñ¶Ô»°³É¹¦ # @remarks ºÍNPC¶Ô»°, µÚÒ»¾ä¶Ô»°Òªµ¯³öÈÎÎñÃû³Æ, È»ºóÑ¡Ôñ def RunQuestOnVisit(curPlayer, npcID, addFuncMenu=True): timeClock = time.clock() #¶Ô»°¸ñʽ: #msg = Ïл° answer = ÈÎÎñÃû³Æ talkContent, menuList = GetTalkContent(curPlayer) talkContent.SetMsg(__GetDefaultTalkContent(curPlayer, npcID)) #ÕÒµ½Íæ¼ÒÉíÉÏËùÓÐÄܺÍÕâ¸öNPC¶Ô»°µÄÈÎÎñ for i in range(curPlayer.GetMissionCount()): curMission = curPlayer.GetMissionByIndex(i) if curMission.GetState() == ChConfig.Def_Mission_State_Over: continue missionID = curMission.GetMissionID() curTrigMission = FindQuestFunc(missionID) if curTrigMission == None: continue if curTrigMission.Type == QuestCommon.Def_GM_Active_Mission_Type: #Õâ¸öÈÎÎñÊǽÚÈÕÈÎÎñ, ÐèÒªGM¿ªÆôµÄ if not GameWorld.GetGameWorld().IsEventActive(missionID): continue key = GetVisitNPCKey(curPlayer, curMission, curTrigMission, npcID) if key == None: #ÎÞ´Ëkey continue ######################¼ì²éÄܲ»ÄÜÔËÐзÖÖ§½Úµã, Èç¹ûÄÜ, ¼ÓÔÚµÚÒ»´Î¶Ô»°ÖÐ################# runResult = False allNodelist = curTrigMission.QuestsEvent[key].GetXMLEventLoader().GetNodeList() eventNode = allNodelist.FindNode("event") if eventNode == None or eventNode.IsEmpty(): GameWorld.Log("·ÃÎÊʼþ²»´æÔÚevent" , curPlayer.GetPlayerID()) return #-------------------------quest½Úµã------------------- for i in range(0, eventNode.GetChildCount()): #±éÀúÈÎÎñÁбí, ÕÒµ½Õâ¸öÈËÎï¿ÉÒÔÖ´ÐеÄÈÎÎñ questNode = eventNode.GetChild(i) curPlayer.SetCurrentQuestNode(questNode) if curMission == None: continue if curMission.GetState() == ChConfig.Def_Mission_State_Over: continue for i in range(0, questNode.GetChildCount()): embranchmentNode = questNode.GetChild(i) if CanDoQuestNodeTalk(curPlayer, curMission, embranchmentNode) == True: runResult = True break if runResult != True: #²»ÄÜÔËÐÐÈÎÎñ continue name = curTrigMission.Code talkContent.AddAnswer(name) if menuList != None: for menu in menuList: TalkContent.AddAnswer(menu) talkContent.AddAnswer('c') #ÉèÖÃÍæ¼ÒÈÎÎñ״̬ curPlayer.SetEventState(TYPE_Event_Select) # if talkContent.GetAnswerCount() == 1: # curPlayer.TalkMessage("", talkContent) # else: curPlayer.Talk(0, "", talkContent) #¼Ç¼ÈÎÎñÏà¹ØÐÅÏ¢ GameLogInfo.LogInfo_MissionTime(timeClock) GameLogInfo.LogInfo_MissionCount(1) return True #--------------------------------------------------------------------- ##ÊÇ·ñÄܹ»ÔËÐнڵã¶Ô»° # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param embranchmentNode ½ÚµãÊý¾Ý # @return ·µ»ØÖµÕæ, ¼ì²éͨ¹ý # @remarks ÊÇ·ñÄܹ»ÔËÐнڵã¶Ô»° def CanDoQuestNodeTalk(curPlayer, curMission, embranchmentNode): #------------------------È¡µÃ/УÑéÌõ¼þ----------------------------- conditionsNode = embranchmentNode.FindChildNode("conditions") if conditionsNode == None or conditionsNode.IsEmpty(): #ûÓÐÌõ¼þÔ¼Êø GameWorld.Log("CanDoQuestNodeTalk ûÓÐÌõ¼þÔ¼Êø" , curPlayer.GetPlayerID()) return True for i in range(0, conditionsNode.GetChildCount()): #È¡µÃµ±Ç°Ìõ¼þ½Úµã curConditionNode = conditionsNode.GetChild(i) # GameWorld.Log(str(curConditionNode.GetXML())) if AnswerConditionJudge(curPlayer, curMission, curConditionNode) != True: #Ö´ÐÐÌõ¼þУÑéʧ°Ü, ²»ÔËÐÐÕâ¸ö·ÖÖ§ # GameWorld.Log("ÔÚÕâ¸öxml³ö´í : %s"%(curConditionNode.GetXML())) return return True ##-------------------------------------ÈÎÎñ´«ËÍ------------------------------------------------- ###ÈÎÎñ´«ËÍ»ñµÃÈÎÎñÃèÊö,ÍÚ±¦ ## @param curPlayer Íæ¼ÒʵÀý ## @param curMission ÈÎÎñʵÀý ## @return ·µ»ØÖµ, ÈÎÎñÃèÊö ## @remarks ÈÎÎñ´«ËÍ»ñµÃÈÎÎñÃèÊö,ÍÚ±¦ #def GetMsgNode_NPCID(curPlayer, curMission): # movePos = [] # if FindQuestFunc(curMission.GetMissionID()) == None: # return None # # descriptIndex = curMission.GetDescriptionIndex() # # questList = FindQuestFunc(curMission.GetMissionID()).QuestDescriptionList # if descriptIndex >= len(questList) or descriptIndex < 0: # return None # # MsgNode = questList[descriptIndex].MsgNode # if MsgNode == None or MsgNode.IsEmpty(): # return None # # for i in range(MsgNode.GetChildCount()): # curNode = MsgNode.GetChild(i) # if curNode == None or curNode.IsEmpty(): # return None # # if curNode.GetNodeName().lower() != 'a': # continue # # moveStr = curNode.GetAttribute("href") # #ûÓÐ×ø±êºÍNPC£¬·µ»Ø # if moveStr == "": # return None # # movelist = moveStr.split(',') # #ÿÈÕÈÎÎñÌØÊâ´¦Àí # if movelist[1] == "(!day_event_id!)": # npcID = curMission.GetProperty(QuestCommon.Def_Day_Event_ID) # movePos = [npcID] # # #ÒÆ¶¯NPC # elif len(movelist) == 2: # npcID = int(moveStr.split(',')[1]) # movePos = [npcID] # # #ÍÚ±¦ # elif len(movelist) == 3: # #»ñµÃÈÎÎñÍÚ±¦×ø±ê # moveMapID = curMission.GetProperty('mapid') # movePosX = curMission.GetProperty('posx') # movePosY = curMission.GetProperty('posy') # movePos = [ moveMapID, movePosX, movePosY ] # else: # return None # # return movePos #***************************************************************************** #--------------------------------------------------------------------- ##ÉèÖÃÏûÏ¢ÌáʾÁбíGetMsgPar # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param talkContent ̸»°ÐÅÏ¢ # @param msgNode ÏûÏ¢½Úµã # @return ·µ»ØÖµÎÞÒâÒå # @remarks ÉèÖÃÏûÏ¢ÌáʾÁбíGetMsgPar def __SetNPCTalkMsg(curPlayer, curMission, talkContent, msgNode): talkContent.SetMsg(msgNode.GetAttribute("code")) #ÉèÖÃMsgÖеIJÎÊý msgPar = talkContent.GetMsgPar() msgPar.Clear() text = msgNode.GetXML() parseList = QuestCommon.DealWithInPut(text) if len(parseList) == 0: return #---warning: ·þÎñ¶Ë msgParÏûÏ¢ÖÐÖ»´æstrÀàÐÍ Ã»ÓÐintÀàÐÍ£¬¿Í»§¶ËûÓжÔint´¦Àí£¨08 01·â°ü£©--- for i in range(0, len(parseList)): parseList[i] = QuestRunnerValue.GetNPCTalkReplaceValue(curPlayer, curMission, parseList[i]) for item in parseList: if type(item) == int: msgPar.AddInt(item) else: msgPar.AddStr(item) #--------------------------------------------------------------------- ##Ö´ÐпնԻ°( ÒѾ­²»Ê¹Óà ) # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param embranchmentNode ½ÚµãÊý¾Ý # @param talkContent ̸»°ÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÖ´Ðгɹ¦ # @remarks Ö´ÐпնԻ°( ÒѾ­²»Ê¹Óà ) def DoNoneQuestNodeTalk(curPlayer, curMission, embranchmentNode, talkContent): #------------------------È¡µÃ/УÑéÌõ¼þ----------------------------- conditionsNode = embranchmentNode.FindChildNode("conditions") if conditionsNode == None or conditionsNode.IsEmpty(): #ûÓÐÌõ¼þÔ¼Êø GameWorld.Log("DoNoneQuestNodeTalk ûÓÐÌõ¼þÔ¼Êø" , curPlayer.GetPlayerID()) return True for i in range(0, conditionsNode.GetChildCount()): #È¡µÃµ±Ç°Ìõ¼þ½Úµã curConditionNode = conditionsNode.GetChild(i) # GameWorld.Log(str(curConditionNode.GetXML())) if AnswerConditionJudge(curPlayer, curMission, curConditionNode) != True: #Ö´ÐÐÌõ¼þУÑéʧ°Ü, ²»ÔËÐÐÕâ¸ö·ÖÖ§ # GameWorld.Log("ÔÚÕâ¸öxml³ö´í : %s"%(curConditionNode.GetXML())) return #------------------------Ö´ÐжԻ°----------------------------- talkNode = embranchmentNode.FindChildNode("talk") if talkNode == None or talkNode.IsEmpty(): return msgNode = talkNode.FindChildNode("msg") npcID = talkNode.GetAttribute("id") if npcID == "": npcID = 0 else: npcID = int(npcID) #talkContent.SetMsg(ReplaceNPCTalkText(curPlayer, curMission, msgNode.GetXML())) __SetNPCTalkMsg(curPlayer, curMission, talkContent, msgNode) talkAnswersNode = talkNode.FindChildNode("talk_answers") for i in range(0, talkAnswersNode.GetChildCount()): talkNode = talkAnswersNode.GetChild(i) answerText = talkNode.GetAttribute("code") talkContent.AddAnswer(answerText) return True #--------------------------------------------------------------------- ##ÊÇ·ñ¿ÉÒÔ´¥·¢½ÚµãÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param conditionsNode Ìõ¼þ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñͨ¹ý # @remarks ÊÇ·ñ¿ÉÒÔ´¥·¢½ÚµãÐÅÏ¢ def __CanRunCondition(curPlayer, curMission, conditionsNode): for i in range(0, conditionsNode.GetChildCount()): #È¡µÃµ±Ç°Ìõ¼þ½Úµã curConditionNode = conditionsNode.GetChild(i) #GameWorld.Log(str(curConditionNode.GetXML())) if AnswerConditionJudge(curPlayer, curMission, curConditionNode) != True: #Ö´ÐÐÌõ¼þУÑéʧ°Ü, ²»ÔËÐÐÕâ¸ö·ÖÖ§ #GameWorld.Log("ÔÚÕâ¸öxml³ö´í : %s"%(curConditionNode.GetXML())) return False return True #--------------------------------------------------------------------- ##µÃµ½Ä¬È϶Ի°µÄÄÚÈÝ # @param curPlayer Íæ¼ÒʵÀý # @param npcID NPCID # @return ·µ»ØÖµ, ĬÈ϶Ի°Êý¾Ý # @remarks µÃµ½Ä¬È϶Ի°µÄÄÚÈÝ def __GetDefaultTalkContent(curPlayer, npcID): curDefaultTalk = FindDefaultTalkFunc(npcID) if not curDefaultTalk : return GameWorld.Log("ûÓжԻ°!!!!" , curPlayer.GetPlayerID()) talkNode = curDefaultTalk.GetNodeList() eventNode = talkNode.FindNode("event") if eventNode == None or eventNode.IsEmpty(): GameWorld.Log("ûÓÐĬÈ϶Ի°½Úµã __GetDefaultTalkContent" , curPlayer.GetPlayerID()) return eventNode = eventNode.FindChildNode("quest") for i in range(eventNode.GetChildCount()): curEmbranchment = eventNode.GetChild(i) conditionsNode = curEmbranchment.FindChildNode("conditions") if conditionsNode != None and (not conditionsNode.IsEmpty()): if __CanRunCondition(curPlayer, None, conditionsNode) != True: continue #¿ÉÒÔÔËÐзÖÖ§½Úµã, ·µ»ØËµ»°ÄÚÈÝ talkNode = curEmbranchment.FindChildNode("talk") talkIndex = random.randint(0, talkNode.GetChildCount() - 1) msgNode = talkNode.GetChild(talkIndex) #ÐÞ¸Ä, ¶Ô»°¸ÄΪ´úÂëÐÎʽ #return msgNode.GetXML() return msgNode.GetAttribute("code") #--------------------------------------------------------------------- ##ÊÇ·ñ¿ÉÒÔÔËÐзÖÖ§½ÚµãÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param embranchmentNode ·ÖÖ§½ÚµãÊý¾Ý # @return ·µ»ØÖµ, ÊÇ·ñÑé֤ͨ¹ý # @remarks ÊÇ·ñ¿ÉÒÔÔËÐзÖÖ§½ÚµãÐÅÏ¢ def __CanRunEmbranchmentNode(curPlayer, curMission, embranchmentNode): #------------------------È¡µÃ/УÑéÌõ¼þ----------------------------- conditionsNode = embranchmentNode.FindChildNode("conditions") if conditionsNode == None or conditionsNode.IsEmpty(): #ûÓÐÌõ¼þÔ¼Êø #GameWorld.Log("__CanRunEmbranchmentNode ûÓÐÌõ¼þÔ¼Êø" , curPlayer.GetPlayerID()) return True result = __CanRunCondition(curPlayer, curMission, conditionsNode) #GameWorld.Log("__CanRunCondition result = %s "%result) return result #--------------------------------------------------------------------- #=============================================================================== # #ÔËÐзÖÖ§½Úµã # #ÔÚRunAllµÄʱºò, »áÕÒµ½actionsNode½Úµã, ÔÚÕâÖÖÇé¿öÏÂ, Ö±½Ó°ÑactionsNode½Úµã´«Èë # #ÔÚÔËÐеÄʱºò, ²»½øÐмì²é. ±ÜÃâÖØ¸´µÄ¼ì²é #=============================================================================== ##ÔËÐзÖÖ§½Úµã # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param embranchmentNode ·ÖÖ§½ÚµãÊý¾Ý # @param actionsNode ´«ÈëµÄ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÔËÐгɹ¦ # @remarks ÔÚRunAllµÄʱºò, »áÕÒµ½actionsNode½Úµã, ÔÚÕâÖÖÇé¿öÏÂ, Ö±½Ó°ÑactionsNode½Úµã´«Èë, ÔÚÔËÐеÄʱºò, ²»½øÐмì²é. ±ÜÃâÖØ¸´µÄ¼ì²é def RunEmbranchmentNode(curPlayer, curMission, embranchmentNode, actionsNode=None): #------------------------È¡µÃ/УÑéÌõ¼þ----------------------------- if (actionsNode == None or actionsNode.IsEmpty()) and __CanRunEmbranchmentNode(curPlayer, curMission, embranchmentNode) != True: return #------------------------Ö´ÐжԻ°----------------------------- global TalkContent TalkContent.Clear() talkNode = embranchmentNode.FindChildNode("talk") answersNode = embranchmentNode.FindChildNode("answers") #----------------------Pre Answer Ä£¿é------------------ preAnswer = embranchmentNode.FindChildNode("pre_answers") if preAnswer != None and (not preAnswer.IsEmpty()): #µ¯³ö´°¿ÚÁ¢¼´×öʼþ __RunAnswerAction(curPlayer, curMission, preAnswer) #------------------------------------------------------- if talkNode == None or talkNode.IsEmpty(): # GameWorld.Log(answersNode.GetXML()) #ûÓÐ̸»°»Ø´ð, Ö±½ÓÔËÐлشð·ÖÖ§(on_kill) if actionsNode == None or actionsNode.IsEmpty(): __RunAnswerAction(curPlayer, curMission, answersNode) else: __DoAnswerActionNode(curPlayer, curMission, actionsNode) return True #----------------------talk_answers Ä£¿é------------------ msgNode = talkNode.FindChildNode("msg") style = talkNode.GetAttribute("style") npcName = talkNode.GetAttribute("name_code") __SetNPCTalkMsg(curPlayer, curMission, TalkContent, msgNode) talkAnswersNode = talkNode.FindChildNode("talk_answers") for i in range(0, talkAnswersNode.GetChildCount()): talkNode = talkAnswersNode.GetChild(i) answerText = talkNode.GetAttribute("code") TalkContent.AddAnswer(answerText) missionID = 0 if curMission != None: missionID = curMission.GetMissionID() if style == "select": curPlayer.Talk(missionID , npcName, TalkContent) elif style == "msg": curPlayer.TalkMessage(missionID , npcName, TalkContent) elif style == "pic": curPlayer.TalkPic(missionID , npcName, TalkContent) elif style == "info": curPlayer.TalkInfo(missionID , npcName, TalkContent) # elif style == "replacemsg": # #ÐèÒª×öÌæ»»µÄÏûÏ¢ # TalkContent = GetMissionReplaceMsg(TalkContent, curMission) # curPlayer.TalkMessage(npcName, TalkContent) else: GameWorld.Log("talk ·ç¸ñ²»ÕýÈ· : %s missionID = %s -> %s" % (style , missionID, embranchmentNode.GetXML()), curPlayer.GetPlayerID()) if answersNode == None or answersNode.IsEmpty(): #»Ø´ð½ÚµãΪ¿Õ GameWorld.Log('»Ø´ð½ÚµãΪ¿ÕcurMission.GetMissionID() = %d' % curMission.GetMissionID() , curPlayer.GetPlayerID()) # if waitEvent == True: # EventShell.DoExitEvent(curPlayer) return #===±£´æÔËÐÐÏÖ³¡, µÈ´ýÍæ¼Ò»ØÓ¦=================================== missionID = 0 if curMission != None: missionID = curMission.GetMissionID() #if curPlayer.GetPlayerAction() == IPY_GameWorld.paEvent: curPlayer.SetEventState(TYPE_Event_Do) curPlayer.WaitEvent(missionID, answersNode) return True #------------------------------ÈÎÎñ״̬1: ̸»°Ñ¡Ôñ----------------TYPE_Event_Select #--------------------------------------------------------------------- ##¶Ô»°_ÈÎÎñÑ¡Ôñ # @param curPlayer Íæ¼ÒʵÀý # @param answer ¶Ô»°Ñ¡Ïî # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¶Ô»°_ÈÎÎñÑ¡Ôñ def Answer_MissionSelect(curPlayer, answer): #-------------------------embranchment½Úµã------------------- missionID = GameWorld.ToIntDef(answer) if missionID == 0: Answer_Do(curPlayer, answer) return #Íæ¼ÒºÍNPCµÚÒ»´Î¶Ô»°, µ¯³öµÄÈÎÎñ curMission = curPlayer.FindMission(missionID) if curMission == None: GameWorld.Log("Íæ¼ÒÎÞÕâ¸öÈÎÎñ%d" % missionID , curPlayer.GetPlayerID()) EventShell.DoExitEvent(curPlayer) return if curMission.GetState() == ChConfig.Def_Mission_State_Over: GameWorld.Log("Íæ¼ÒÈÎÎñ%dÒѾ­Íê³É" % missionID , curPlayer.GetPlayerID()) return if FindQuestFunc(missionID) == None: return curNPC = GetPlayerTalkNPC(curPlayer) if curNPC == None: return curTrigMission = FindQuestFunc(missionID) key = GetVisitNPCKey(curPlayer, curMission, curTrigMission, curNPC.GetNPCID()) if not curTrigMission.QuestsEvent.has_key(key) : GameWorld.Log("Can't Find missionID = %d, %s" % (missionID, str(key)) , curPlayer.GetPlayerID()) return RunQuest(curPlayer, missionID, curTrigMission.QuestsEvent[key].GetXMLEventLoader().GetNodeList()) #------------------------------ÈÎÎñ״̬2: »ØÓ¦-------------------TYPE_Event_Do #--------------------------------------------------------------------- ##¶Ô»°_ÈÎÎñ»ØÓ¦ # @param curPlayer Íæ¼ÒʵÀý # @param answer ¶Ô»°Ñ¡Ïî # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¶Ô»°_ÈÎÎñ»ØÓ¦ def Answer_Do(curPlayer, answer): global CurrentPlayerAnswer answersNode = curPlayer.GetWaitEvent() if answersNode == None or answersNode.IsEmpty(): GameWorld.Log("µÈ´ýʼþΪ¿Õ" , curPlayer.GetPlayerID()) EventShell.DoExitEvent(curPlayer) return False curMissionID = curPlayer.GetCurrentMissionID() curMission = None if curMissionID != 0: curMission = curPlayer.FindMission(curMissionID) if curMission == None: GameWorld.Log("ÕÒ²»µ½ÈÎÎñID : %d" % (curMissionID) , curPlayer.GetPlayerID()) EventShell.DoExitEvent(curPlayer) return False CurrentPlayerAnswer = answer __RunAnswerAction(curPlayer, curMission, answersNode) #--------------------------------------------------------------------- ##¶Ô»°_ÆÕͨ¶Ô»° # @param curPlayer Íæ¼ÒʵÀý # @param answer ¶Ô»°Ñ¡Ïî # @return ·µ»ØÖµÎÞÒâÒå # @remarks ¶Ô»°_ÆÕͨ¶Ô»° def RunPlayerAnswer(curPlayer, answer): if curPlayer.GetEventState() == 0: EventShell.DoExitEvent(curPlayer) GameWorld.Log("Íæ¼Ò»Ø´ð²»ÔÚÈÎÎñ״̬ curPlayer.GetEventState() == 0" , curPlayer.GetPlayerID()) return if curPlayer.GetEventState() == TYPE_Event_Select: #ÈÎÎñÑ¡Ôñ Answer_MissionSelect(curPlayer, answer) elif curPlayer.GetEventState() == TYPE_Event_Do: #ÈÎÎñ»Ø»° Answer_Do(curPlayer, answer) #--------------------------------------------------------------------- ##²éÕÒ¶Ô»°½ÚµãÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param answersNode »Ø»°½Úµã # @return ·µ»ØÖµ, ¶Ô»°½ÚµãÐÅÏ¢ # @remarks ²éÕÒ¶Ô»°½ÚµãÐÅÏ¢ def __FindAnswerActionNode(curPlayer, curMission, answersNode): if answersNode == None or answersNode.IsEmpty(): #ûÓÐÌõ¼þÔ¼Êø GameWorld.Log("__FindAnswerActionNode ûÓлشð½ÚµãÔ¼Êø" , curPlayer.GetPlayerID()) return for i in range(0, answersNode.GetChildCount()): #------------------------Ö´Ðж¯×÷----------------------------- answerNode = answersNode.GetChild(i) conditionsNode = answerNode.FindChildNode("answer_conditions") runResult = True if conditionsNode != None and (not conditionsNode.IsEmpty()): for j in range(0, conditionsNode.GetChildCount()): curConditionNode = conditionsNode.GetChild(j) if AnswerConditionJudge(curPlayer, curMission, curConditionNode) != True: #Ö´ÐÐÌõ¼þУÑéʧ°Ü, ²»ÔËÐÐÕâ¸ö·ÖÖ§ runResult = False #GameWorld.Log("missionID = %d, Ö´ÐÐÌõ¼þУÑéʧ°Ü, ²»ÔËÐÐÕâ¸ö·ÖÖ§ %s"%(curMission.GetMissionID(), curConditionNode.GetXML())) break if runResult != True: continue actionsNode = answerNode.FindChildNode("answer_actions") return actionsNode return #--------------------------------------------------------------------- ##Ö´ÐжԻ°½ÚµãÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param answersNode »Ø»°½Úµã # @return ·µ»ØÖµ, ÎÞÒâÒå # @remarks Ö´ÐжԻ°½ÚµãÐÅÏ¢ def __DoAnswerActionNode(curPlayer, curMission, actionsNode): if actionsNode == None or actionsNode.IsEmpty(): GameWorld.Log('__DoAnswerActionNodeÕÒ²»µ½»Ø´ð½Úµã! ÈÎÎñID=%s' % (0 if curMission == None else curMission.GetMissionID())) return QuestCommon.SetMissionBeDeleted(0) missionID = 0 if curMission != None: missionID = curMission.GetMissionID() for j in range(0, actionsNode.GetChildCount()): curActionNode = actionsNode.GetChild(j) # if curMission ==None: # DoAction(curPlayer,None, curActionNode) DoAction(curPlayer, curMission, curActionNode) #²»Çå³þ¾ßÌåÂß¼­ÎªÊ²Ã´ÒªÉèÖÃÈÎÎñɾ³ý±êʶ£¬ÈÔÒª¼ÌÐøÖ´ÐÐÈÎÎñ½Úµã£¬ÀíÂÛÉϻᱨ´í #Ìí¼Ó·À·¶ÊÇ·ñµ±Ç°ÈÎÎñ±»É¾³ý£¬ÔÝʱ±£Áô´úÂë if QuestCommon.IsDeleteMission() == 1 and curPlayer.FindMission(missionID) == None: curMission = None return #--------------------------------------------------------------------- ##Ö´ÐжԻ°½ÚµãÐÅÏ¢ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param answersNode »Ø»°½Úµã # @return ·µ»ØÖµ, ÎÞÒâÒå # @remarks Ö´ÐжԻ°½ÚµãÐÅÏ¢ def __RunAnswerAction(curPlayer, curMission, answersNode): actionsNode = __FindAnswerActionNode(curPlayer, curMission, answersNode) if actionsNode == None or actionsNode.IsEmpty(): GameWorld.DebugLog('__RunAnswerActionÕÒ²»µ½»Ø´ð½Úµã--%s'%curMission.GetMissionID()) return __DoAnswerActionNode(curPlayer, curMission, actionsNode) return True #========================== Ìõ¼þÅж¨½Ó¿Ú ConditionType_ ======================================= #ÀàÐÍ -> Differ//²»µÈÓÚ,Equal//µÈÓÚ,Less//СÓÚ,Great//´óÓÚ #--------------------------------------------------------------------- ##ÅжÏÈÎÎñ״̬ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Var(curPlayer, curMission, curConditionNode): #var ÐÍÌõ¼þ½ÚµãµÄÅж¨ (ÈÎÎñÌõ¼þ (state, kill_byid_...)) conditionType = curConditionNode.GetAttribute("type") conditionName = curConditionNode.GetAttribute("name") dict_value = curConditionNode.GetAttribute("dict_value") dict_id = GameWorld.ToIntDef(curConditionNode.GetAttribute("dict_id"), 0) replace_value = curConditionNode.GetAttribute("replace_value") conditionValue = curConditionNode.GetAttribute("value") conditionID = curConditionNode.GetAttribute("id") diff = curConditionNode.GetAttribute("diff") if diff != "": diff = int(diff) if dict_value != "": #Ä¿±êÈÎÎñ if dict_id: tmpMission = curPlayer.FindMission(dict_id) if tmpMission == None: return conditionValue = tmpMission.GetProperty(dict_value) else: conditionValue = curMission.GetProperty(dict_value) elif replace_value != "": #ÐèÒªÌæ»»µÄ conditionValue = int(QuestRunnerValue.GetNPCTalkReplaceValue(curPlayer, curMission, replace_value)) else: conditionValue = int(conditionValue) #Ä¿±êÈÎÎñ tagMission = curMission if conditionID != "": conditionID = int(conditionID) tagMission = curPlayer.FindMission(conditionID) curValue = 0 if tagMission == None and conditionName.lower() == 'state': #ÌØÊâÇå¿Õ´¦Àí, Èç¹ûûÓÐÈÎÎñ, stateΪ0 curValue = 0 elif tagMission == None: GameWorld.DebugLog("ûÓÐÄ¿±êÈÎÎñ %s" % conditionID , curPlayer.GetPlayerID()) return else: curValue = QuestRunnerValue.GetValue(curPlayer, tagMission, conditionName) return QuestRunnerValue.GetEval(conditionType, curValue, conditionValue, diff) #--------------------------------------------------------------------- ##Åжϱ³°ü¿Õ¸ñ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Space(curPlayer, curMission, curConditionNode): #¸ñʽ conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") conditionBag = curConditionNode.GetAttribute("bag") if conditionBag == "": curBag = IPY_GameWorld.rptItem else: curBag = int(conditionBag) value = ItemControler.GetItemPackSpace(curPlayer, curBag) return QuestRunnerValue.GetEval(conditionType, value, conditionValue) #--------------------------------------------------------------------- ##ÅжÏÊÇ·ñÓÐͨѶ°²È«Ëø # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Tellock(curPlayer, curMission, curConditionNode): #»ñȡͨѶ°²È«Ëø¼¤»î״̬£¬0δ֪£¬1ÒÑ¿ªÍ¨£¬2δ¿ªÍ¨ return (curPlayer.GetTelLockState() == 1) #--------------------------------------------------------------------- ##ÅжÏÈÎÎñÎïÆ·µôÂ伸ÂÊ[²»¿ÉÓÃÔڻشðÅжÏ] # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Probability(curPlayer, curMission, curConditionNode): rate = int(curConditionNode.GetAttribute("value")) point = GameWorld.ToIntDef(curConditionNode.GetAttribute("point"), 100) return GameWorld.CanHappen(rate, point) #--------------------------------------------------------------------- ##ÅжÏÊÇ·ñÓµÓмÒ×å # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Family(curPlayer, curMission, curConditionNode): #ÅжϼÒ×å if curPlayer.GetFamilyID() != 0 : return True return False #--------------------------------------------------------------------- ##ÅжÏÊÇ·ñÓµÓÐÂíÆ¥ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Horse(curPlayer, curMission, curConditionNode): #ÅжÏÂíÆ¥ conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") roleEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) #=========================================================================== # itemRideHorse = roleEquipPack.GetAt(IPY_GameWorld.retHorse) # #ÎÞÂíÆ¥ # if not ItemCommon.CheckItemCanUse( itemRideHorse ): # value = 0 # else: # value = 1 #=========================================================================== value = 1 return QuestRunnerValue.GetEval(conditionType, value, conditionValue) ##ÅжÏÊÇ·ñ´©´÷ij²¿Î»(·ÇʱЧ) # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Equip(curPlayer, curMission, curConditionNode): equipPlace = int(curConditionNode.GetAttribute("value")) roleEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) curEquip = roleEquipPack.GetAt(equipPlace) if curEquip.IsEmpty(): return False if curEquip.GetEndureReduceType(): return False return True #--------------------------------------------------------------------- ##Ôö¼Ó¼Ò×åÏà¹ØÖµ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def DoType_Add_Family_Value(curPlayer, curMission, curActionNode): #Ôö¼Ó¼Ò×åÏà¹ØÖµ curPlayerFamilyID = curPlayer.GetFamilyID() if not curPlayerFamilyID: return # ¼Ò×åÈÙÓþÔÝÓÃÓÚÓÀºãÏîÄ¿¼Ò×å×êʯÓã¬ÈÙÓþÂß¼­ÔÝÆÁ±Î 20160606 by hxp # addFamilyHornor = GameWorld.ToIntDef(curActionNode.GetAttribute("hornorValue"), 0) # #Ôö¼Ó¼Ò×å¹±Ï× # if addFamilyHornor != 0: # PlayerFamily.SendPack_GameServer_AddFamilyDetail(curPlayer, addFamilyHornor = addFamilyHornor, resion=ShareDefine.Def_AddFAVReason_DoFamilyMisson) addFamilyMoney = GameWorld.ToIntDef(curActionNode.GetAttribute("familyMoney"), 0) #Ôö¼Ó¼Ò×å×ʽð if addFamilyMoney != 0: PlayerFamily.SendPack_GameServer_AddFamilyDetail(curPlayer, addFamilyMoney=addFamilyMoney, resion=ShareDefine.Def_AddFAVReason_DoFamilyMisson) return #--------------------------------------------------------------------- ##Ôö¼ÓÍæ¼ÒXPÖµ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def DoType_Add_Player_Xp(curPlayer, curMission, curActionNode): #Ôö¼ÓÍæ¼ÒÏà¹ØÖµ xpValue = curActionNode.GetAttribute("value") if xpValue != "": #ÉèÖÃÍæ¼ÒxpÖµ openLV, addXPValue, maxXPValue = ReadChConfig.GetEvalChConfig('PlayerXP') curXp = min(int(xpValue), maxXPValue) curPlayer.SetDict(ChConfig.Def_PlayerKey_RecordXPValue, curXp) curPlayer.SetXP(curXp) return #--------------------------------------------------------------------- ##¼Ò×åÉý¼¶. # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ÎÞ·µ»ØÖµ # @remarks ¼Ò×åÉý¼¶ def DoType_Familylvup(curPlayer, curMission, curActionNode): curPlayer.GameServer_LVUpFamily() return #--------------------------------------------------------------------- ##¸ÅÂʵôÂ䣨×îµÍɱ¹Ö) # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Drop_Result(curPlayer, curMission, curConditionNode): #³õʼµôÂÊ rate = int(curConditionNode.GetAttribute("rate")) #×îСɱ¹ÖÊýÁ¿ minMonsterCount = int(curConditionNode.GetAttribute("minMonsterCount")) #µ±Ç°É±¹ÖÊýÁ¿ curMonsterCountStr = curConditionNode.GetAttribute("curMonsterCount") curMonsterCount = int(curMission.GetProperty(curMonsterCountStr)) if curMonsterCount < minMonsterCount : return False return GameWorld.CanHappen(rate, 100) #--------------------------------------------------------------------- ##¸ÅÂʵôÂä, ºÍɱ¹ÖÊýÄ¿ÓйØ(×î¸ßɱ¹Ö) # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Drop_Form(curPlayer, curMission, curConditionNode): #³õʼµôÂÊ rate = float(curConditionNode.GetAttribute("rate")) / 100 #×î´óÊýÁ¿ maxItem = float(curConditionNode.GetAttribute("maxItem")) #µ±Ç°µÃµ½ÎïÆ·ÊýÄ¿ curItemCountStr = curConditionNode.GetAttribute("curItem") curItemCount = float(curMission.GetProperty(curItemCountStr)) #×î´óɱ¹ÖÊýÁ¿ maxMonsterCount = float(curConditionNode.GetAttribute("maxMonsterCount")) #µ±Ç°É±¹ÖÊýÁ¿ curMonsterCountStr = curConditionNode.GetAttribute("curMonsterCount") curMonsterCount = float(curMission.GetProperty(curMonsterCountStr)) + 1 #GameWorld.Log("rate = %f, maxItem = %f, curItemCount = %f, curMonsterCount = %f"%( # rate, maxItem, curItemCount, curMonsterCount)) if curMonsterCount >= maxMonsterCount: #ɱ¹ÖÊýÁ¿ÒÑÂú, Ò»¶¨µôÂä return True #**************************************** #³õʼ±ØµôÂä¸öÊý baseDropCount = float(maxItem / 10) #GameWorld.Log("³õʼ±ØµôÂä¸öÊý : %s"%str(baseDropCount)) #³õʼ±ØµôÂäɱ¹ÖÊý dropMonsterCount = float(maxMonsterCount / 10) #GameWorld.Log("³õʼ±ØµôÂäɱ¹ÖÊý : %s"%str(dropMonsterCount)) #**************************************** realRate = eval(ChConfig.Def_Event_Drop_Formula) * 100 #GameWorld.Log("ɱ¹ÖµôÂÊ : %s"%str(realRate)) #ת»»ÎªÕûÐÍ realRate = int(realRate) #×îÖÕ½á¹û calcResult = GameWorld.CanHappen(realRate, 100) #GameWorld.Log("×îÖÕµôÂÊ : %s"%str(calcResult)) return calcResult #--------------------------------------------------------------------- ##Åжϱ³°ü»ñµÃÄÜ·ñ¿Éµþ¼ÓÈÎÎñÎïÆ· # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Can_Put(curPlayer, curMission, curConditionNode): curItemID = GameWorld.ToIntDef(curConditionNode.GetAttribute("id"), 0) if curItemID == 0: curItemID = curMission.GetProperty(QuestCommon.Def_Item_ID) curItemCount = int(curConditionNode.GetAttribute("count")) noBind = GameWorld.ToIntDef(curConditionNode.GetAttribute("nobind"), 0) #ĬÈÏÈÎÎñÎïÆ·Îª°ó¶¨£¬·Ç°ó¶¨ÌØÊâ´¦Àí bind = 1 if noBind == 1: bind = 0 #ÈÎÎñÎïÆ·¾ùΪ°ó¶¨ÎïÆ· itemControl = ItemControler.PlayerItemControler(curPlayer) expectResult = int(curConditionNode.GetAttribute("result")) result = itemControl.CanPutInItem(IPY_GameWorld.rptItem, curItemID, curItemCount, bind) if int(result) == expectResult: return True return False #--------------------------------------------------------------------- ##²éÕÒº¯Êý # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Find(curPlayer, curMission, curConditionNode): conditionName = curConditionNode.GetAttribute("name") id = int(curConditionNode.GetAttribute("id")) #ÆÚÍû½á¹û expectResult = int(curConditionNode.GetAttribute("result")) result = QuestRunnerValue.GetFind(curPlayer, conditionName, id) if int(result) == expectResult: return True return False #--------------------------------------------------------------------- ##ÊÇ·ñÓµÓÐÖ¸¶¨¼¼ÄÜTypeIDµÄ¼¼ÄÜ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Skill(curPlayer, curMission, curConditionNode): #¸ñʽ ²é¿´Íæ¼ÒÓÐÎÞ¼¼ÄÜ skillTypeStr = curConditionNode.GetAttribute("skilltype") if not skillTypeStr: GameWorld.ErrLog("XML Have_Skill id = %sΪ¿Õ£¡" % (skillTypeStr)) return False return curPlayer.GetSkillManager().FindSkillBySkillTypeID(int(skillTypeStr)) #--------------------------------------------------------------------- ##ÅжÏÓÐÎÞBUFF # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Buff(curPlayer, curMission, curConditionNode): # skillTypeID = int(curConditionNode.GetAttribute("id")) value = int(curConditionNode.GetAttribute("value")) curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID) if not curSkill: GameWorld.ErrLog("ConditionType_Have_BuffÒì³££¬skillTypeID = %s" % skillTypeID) return buffType = SkillCommon.GetBuffType(curSkill) buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType) #ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö if buffTuple == (): return buffManager = buffTuple[0] buff = buffManager.FindBuff(skillTypeID) if buff == None: return 0 == value return 1 == value #--------------------------------------------------------------------- ##buffÊ£Óàʱ¼äÅÐ¶Ï # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Skill_Remain_Time(curPlayer, curMission, curConditionNode): conditionType = curConditionNode.GetAttribute("type") conditionValue = int(curConditionNode.GetAttribute("time")) id = int(curConditionNode.GetAttribute("id")) buffState = curPlayer.GetIncBuff() curPlayerbuff = buffState.FindBuff(id) if curPlayerbuff == None: values = 0 else: values = curPlayerbuff.GetRemainTime() return QuestRunnerValue.GetEval(conditionType, values, conditionValue) #--------------------------------------------------------------------- ##ÊÇ·ñºÍïÚ³µÔÚͬһµØÍ¼ÅÐ¶Ï # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Truck_In_Around(curPlayer, curMission, curConditionNode): # conditionType = curConditionNode.GetAttribute("type") playerTruck = curPlayer.GetTruck() conditionValue = int(curConditionNode.GetAttribute("value")) if playerTruck != None: values = 1 else: values = 0 return QuestRunnerValue.GetEval(conditionType, values, conditionValue) #--------------------------------------------------------------------- ##²Ö¿âµÈ¼¶ÅÐ¶Ï # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Warehouse_Lv(curPlayer, curMission, curConditionNode): #¸ñʽ curWarehouseLV = curPlayer.GetWarehouseLV() lv = int(curConditionNode.GetAttribute("lv")) conditionType = curConditionNode.GetAttribute("type") return QuestRunnerValue.GetEval(conditionType, curWarehouseLV, lv) #--------------------------------------------------------------------- ##Åжϱ³°üÖÐÎïÆ·ÊýÁ¿ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Item_Count(curPlayer, curMission, curConditionNode): dict_id = curConditionNode.GetAttribute("dict_id") dict_value = curConditionNode.GetAttribute("dict_value") if dict_id == "": id = int(curConditionNode.GetAttribute("id")) else: id = curMission.GetProperty(dict_id) #GameWorld.Log("ÈÎÎñID£º%d"%(id)) if dict_value == "": conditionValue = int(curConditionNode.GetAttribute("value")) else: conditionValue = curMission.GetProperty(dict_value) conditionType = curConditionNode.GetAttribute("type") value = ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptItem, id) return QuestRunnerValue.GetEval(conditionType, value, conditionValue) #--------------------------------------------------------------------- ##ÅжÏÊýÁ¿ÊÇ·ñ×ã¹»(¿ÉÑéÖ¤°ó¶¨) # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Item_Isbind_Count(curPlayer, curMission, curConditionNode): # 0£ºÃ»°ó¶¨ 1£º°ó¶¨ itemID = GameWorld.ToIntDef(curConditionNode.GetAttribute("id")) conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value")) isBind = GameWorld.ToIntDef(curConditionNode.GetAttribute("isbind")) curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) findItemCount = 0 for i in range(0, curPack.GetCount()): item = curPack.GetAt(i) if not ItemCommon.CheckItemCanUse(item): continue if item.GetItemTypeID() != itemID: continue #ÐèÒª²éÕҷǰó¶¨ÎïÆ·£¬²éÕÒÎïÆ·ºÍËùÐèÎïÆ·°ó¶¨ÊôÐÔÏàͬ if isBind == 0 and item.GetIsBind() != isBind: continue #ÀÛ»ý²éÕÒÎïÆ·ÊýÁ¿ findItemCount += item.GetCount() if findItemCount >= conditionValue: #ÊýÁ¿Âú×ã·µ»Ø #GameWorld.Log("²éÕҳɹ¦£¬ÐèÒªÊýÁ¿£º%s£¬ÕÒµ½ÊýÁ¿£º%s"%(conditionValue,findItemCount)) return True return #--------------------------------------------------------------------- ##ɾ³ýÎïÆ· # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def DoType_Del_Item_Bind(curPlayer, curMission, curActionNode): #¸ñʽ0:²»°ó 1£º°ó itemID = GameWorld.ToIntDef(curActionNode.GetAttribute("id")) conditionValue = GameWorld.ToIntDef(curActionNode.GetAttribute("value")) isBind = GameWorld.ToIntDef(curActionNode.GetAttribute("isbind")) #PlayerControl.NotifyCode(curPlayer, "LostRes", [itemID,conditionValue]) inputGuidList = [] ItemControler.DelPlayerItem_Bind(curPlayer, IPY_GameWorld.rptItem, itemID, conditionValue, isBind, delEventItem=True, guidList=inputGuidList) guidStr = '' for guid in inputGuidList: guidStr += ' %s' % guid #31. Òòʼþ„h³ý ͬÉÏ if not curMission: missionID = 0 else: missionID = curMission.GetMissionID() #µÈ¼¶´¥·¢OSS¼Ç¼ if GameWorld.IsMissonDR(curPlayer): dataDict = {"ItemID":itemID, "ItemCount":conditionValue, "IsBind":isBind, "MissionID":missionID} DataRecordPack.DR_DeleteItem(curPlayer, "Event_Del_Item_Bind", dataDict) #--------------------------------------------------------------------- ##¼ì²âÎïÆ·±³°üºÍ×°±¸À¸ÊÇ·ñÓдËÎïÆ· # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ def ConditionType_Have_Item(curPlayer, curMission, curConditionNode): # itemID = GameWorld.ToIntDef(curConditionNode.GetAttribute("id"), 0) count = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0) if itemID <= 0: GameWorld.ErrLog('ConditionType_Have_Item itemID = %s, error' % (itemID)) return packList = curConditionNode.GetAttribute("packtype").split(',') conditionType = curConditionNode.GetAttribute("type") #ÏȾÀ´íÒ»´Î tmpList = [] for typeStr in packList: packType = GameWorld.ToIntDef(typeStr, 0) if packType <= 0 or packType >= ShareDefine.rptMax: GameWorld.ErrLog("ConditionType_Have_Item Ìîд±³°ü·¶Î§´íÎó %s" % packList) return tmpList.append(packType) value = 0 for packType in tmpList: value += ItemControler.FindPlayerItemCountByItemID(curPlayer, packType, itemID) return QuestRunnerValue.GetEval(conditionType, value, count) #--------------------------------------------------------------------- ##¼ì²âÊÇ·ñÓµÓÐïÚ³µÑº½ð # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Truck_Money(curPlayer, curMission, curConditionNode): #¸ñʽ conditionValue = int(curConditionNode.GetAttribute("value")) truck_money = int(curMission.GetProperty("day_event_truck_money")) result = PlayerControl.HaveMoney(curPlayer, curPlayer.GetUseSilverType(), truck_money) return conditionValue == result #--------------------------------------------------------------------- ##¼ì²âHP°Ù·Ö±È(°Ù·Ö±È) # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Get_Hp_Percent(curPlayer, curMission, curConditionNode): conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") curPlayerHP = curPlayer.GetHP() conditionHP = curPlayer.GetMaxHP() * conditionValue / 100 return QuestRunnerValue.GetEval(conditionType, curPlayerHP, conditionHP) #--------------------------------------------------------------------- ##¸ù¾ÝIDÉ±Ëæ»ú¹Ö # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Kill_Rand_Npc_By_Id(curPlayer, curMission, curConditionNode): # def ConditionType_Have_Weapon(curPlayer, curMission, curConditionNode): conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") PlayerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) curWeapon = PlayerEquip.GetAt(ShareDefine.retWeapon) curWeapon2 = PlayerEquip.GetAt(ShareDefine.retWeapon2) result = not (curWeapon.IsEmpty() and curWeapon2.IsEmpty()) #GameWorld.Log('conditionValue = %s, result = %s'%(conditionValue, result)) return QuestRunnerValue.GetEval(conditionType, result, conditionValue) #--------------------------------------------------------------------- ##ÎåÐÐÊôÐÔÅж¨ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Player_Type(curPlayer, curMission, curConditionNode): conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") value = curPlayer.GetPlayerType() return QuestRunnerValue.GetEval(conditionType, value, conditionValue) #--------------------------------------------------------------------- ##µÈ¼¶´¥·¢Åж¨ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Lv(curPlayer, curMission, curConditionNode): conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") value = curPlayer.GetLV() return QuestRunnerValue.GetEval(conditionType, value, conditionValue) def ConditionType_Createroledays(curPlayer, curMission, curConditionNode): #ÅжÏÍæ¼Ò´´½ÇÌì # conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") value = GameWorld.GetCreateRoleDays(curPlayer) return QuestRunnerValue.GetEval(conditionType, value, conditionValue) #--------------------------------------------------------------------- ##ÅжÏÉíÉÏÊÇ·ñÓÐijÖÖÀàÐÍÈÎÎñ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Job_Mission(curPlayer, curMission, curConditionNode): #¸ñʽ conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") type = int(curConditionNode.GetAttribute("missiontype")) for i in range(0, curPlayer.GetMissionCount()): curMission = curPlayer.GetMissionByIndex(i) taskID = curMission.GetMissionID() if FindQuestFunc(taskID) == None: continue taskType = FindQuestFunc(taskID).Type if taskType == type: value = 1 else: value = 0 return QuestRunnerValue.GetEval(conditionType, value, conditionValue) #--------------------------------------------------------------------- ##Íæ¼ÒÊÇ·ñÔÚÖ¸¶¨µÄµØÍ¼ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Map_Id(curPlayer, curMission, curConditionNode): #¸ñʽ: value = curPlayer.GetMapID() conditionType = curConditionNode.GetAttribute("type") conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value"), 0) mapList = curConditionNode.GetAttribute("maplist") #µ¥Ò»µØÍ¼ if conditionValue != 0: return QuestRunnerValue.GetEval(conditionType, value, conditionValue) #¶àµØÍ¼ mapList = mapList.split(',') for map in mapList: if value == int(map): return True return False #--------------------------------------------------------------------- ##Íæ¼ÒÊÇ·ñÓµÓÐ×ã¹»»õ±Ò # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Money(curPlayer, curMission, curConditionNode): #¸ñʽ value = curConditionNode.GetAttribute("value") check = curConditionNode.GetAttribute("check") if value != "": conditionValue = int(value) elif check != "": conditionValue = int(QuestRunnerValue.GetNPCTalkReplaceValue(curPlayer, curMission, check)) maxItemCnt = GameWorld.ToIntDef(curConditionNode.GetAttribute("maxItem"), 0) itemID = GameWorld.ToIntDef(curConditionNode.GetAttribute("itemID"), 0) if maxItemCnt and itemID: #δÊÕ¼¯µÄµÀ¾ß¸öÊý³ËÒÔµ¥¼Û haveCnt = ItemControler.FindPlayerItemCountByItemID(curPlayer, IPY_GameWorld.rptItem, itemID) conditionValue = max(0, maxItemCnt-haveCnt)*conditionValue conditionType = curConditionNode.GetAttribute("type") moneyType = int(curConditionNode.GetAttribute("moneytype")) #GameWorld.Log(' conditionValue=%s,maxItemCnt=%s,itemID=%s'%(conditionValue,maxItemCnt,itemID)) goldValue = curPlayer.GetGold() goldPaperValue = curPlayer.GetGoldPaper() silverValue = PlayerControl.GetSilver(curPlayer) if moneyType == IPY_GameWorld.TYPE_Price_Gold_Money: return QuestRunnerValue.GetEval(conditionType, goldValue, conditionValue) elif moneyType == IPY_GameWorld.TYPE_Price_Gold_Paper: return QuestRunnerValue.GetEval(conditionType, goldPaperValue, conditionValue) elif moneyType == IPY_GameWorld.TYPE_Price_Silver_Money: return QuestRunnerValue.GetEval(conditionType, silverValue, conditionValue) elif moneyType == ShareDefine.TYPE_Price_Gold_Paper_Money: return QuestRunnerValue.GetEval(conditionType, goldValue + goldPaperValue, conditionValue) else: GameWorld.Log("ÈÎÎñ = %s , moneytype = %sÌî´íÀ­" % (curMission.GetMissionID() , moneyType) , curPlayer.GetPlayerID()) return #--------------------------------------------------------------------- ##Íæ¼ÒÊÇ·ñÓµÓÐÉèÖÃÐǼ¶µÄ»õ±Ò # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Set_Mission_Star_Have_Money(curPlayer, curMission, curConditionNode): missionID = curMission.GetMissionID() curMissionData = FindQuestFunc(missionID) if not curMissionData: return False missionType = curMissionData.Type Def_Around_Star = GetRunKey(missionType, Key_Around_Star) moneyType, costFormat = ReadChConfig.GetEvalChConfig("RunAround_SetStarCost") reLV = curPlayer.GetLV() reExp = 0 reMoney = 0 aroundStar = curMission.GetProperty(Def_Around_Star) moneyPrice = int(eval(costFormat)) if moneyType == IPY_GameWorld.TYPE_Price_Gold_Money: return curPlayer.GetGold() >= moneyPrice if moneyType == IPY_GameWorld.TYPE_Price_Gold_Paper: return curPlayer.GetGoldPaper() >= moneyPrice if moneyType == IPY_GameWorld.TYPE_Price_Silver_Money: return PlayerControl.GetSilver(curPlayer) >= moneyPrice if moneyType == IPY_GameWorld.TYPE_Price_Silver_Paper: return curPlayer.GetSilverPaper() >= moneyPrice return False #--------------------------------------------------------------------- ##Çå³ýÐéÈõÐèÒª»õ±Ò # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Clearbornbuff_Have_Money(curPlayer, curMission, curConditionNode): return 0 ##ŵØÒ½ÉúÅжϽðÇ® # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Health_Have_Money(curPlayer, curMission, curConditionNode): moneyType = int(curConditionNode.GetAttribute("moneytype")) price = QuestRunnerValue.GetHealthLostMoney(curPlayer) return PlayerControl.HaveMoney(curPlayer, moneyType, price, False) #--------------------------------------------------------------------- ##ÊÇ·ñÊÇÆÚÍûµÄÖ°Òµ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Check_Job(curPlayer, curMission, curConditionNode): conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") value = curPlayer.GetJob() return QuestRunnerValue.GetEval(conditionType, value, conditionValue) #--------------------------------------------------------------------- ##ÊÇ·ñÊÇÆÚÍûµÄ»Ø´ð # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Answer(curPlayer, curMission, curConditionNode): conditionValue = curConditionNode.GetAttribute("value") conditionType = curConditionNode.GetAttribute("type") answer = CurrentPlayerAnswer answer = answer.lower() conditionValue = conditionValue.lower() return QuestRunnerValue.GetEval(conditionType, answer, conditionValue) #--------------------------------------------------------------------- ##ÊÇ·ñÊÇÆÚÍûµÄæô³µÊ¼þID # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Truck_Event_Id(curPlayer, curMission, curConditionNode): id = int(curConditionNode.GetAttribute("id")) if curPlayer.GetTruckEventID() == id: return True return False #--------------------------------------------------------------------- ##ÊÇ·ñÉíÉÏÓÐÆÚÍûµÄÈÎÎñ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Find_Mission(curPlayer, curMission, curConditionNode): #¸ñʽ conditionID = GameWorld.ToIntDef(curConditionNode.GetAttribute("id"), 0) if conditionID == 0: return False curMission = curPlayer.FindMission(conditionID) curResult = 0 conditionResult = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0) if curMission == None: curResult = 0 return curResult == conditionResult curResult = 1 return curResult == conditionResult #--------------------------------------------------------------------- ##ÊÇ·ñÓÐÈÎÎñ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Mission(curPlayer, curMission, curConditionNode): #¸ñʽ conditionID = GameWorld.ToIntDef(curConditionNode.GetAttribute("id"), 0) if conditionID == 0: #ÅжÏËùÓÐÈÎÎñ for i in range(0, curPlayer.GetMissionCount()): curMission = curPlayer.GetMissionByIndex(i) if not (curMission == None or curMission.GetState() == ChConfig.Def_Mission_State_Over): return False return True curMission = curPlayer.FindMission(conditionID) curResult = 0 conditionResult = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0) if curMission == None: curResult = 0 return curResult == conditionResult curState = curMission.GetState() if curState in [ChConfig.Def_Mission_State_NoAccept, ChConfig.Def_Mission_State_Over]: curResult = 0 return curResult == conditionResult curResult = 1 return curResult == conditionResult #--------------------------------------------------------------------- ##ÅжÏÊÇ·ñÓÐÆ¥ÅäÌõ¼þµÄÈÎÎñÀàÐÍ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Mission_Type(curPlayer, curMission, curConditionNode): conditionValue = GameWorld.ToIntDef(curConditionNode.GetAttribute("value")) missiontype = GameWorld.ToIntDef(curConditionNode.GetAttribute("missiontype")) stateList = eval("[%s]" % curConditionNode.GetAttribute("state")) nostateList = eval("[%s]" % curConditionNode.GetAttribute("nostate")) GameWorld.DebugLog("Have_Mission_Type conditionValue=%s,missiontype=%s,stateList=%s,nostateList=%s" % (conditionValue, missiontype, stateList, nostateList)) haveCondMission = 0 for i in range(curPlayer.GetMissionCount()): mission = curPlayer.GetMissionByIndex(i) taskID = mission.GetMissionID() curMissionData = FindQuestFunc(taskID) if not curMissionData: GameWorld.DebugLog(" taskID=%s is None!" % taskID) continue taskType = curMissionData.Type if taskType != missiontype: GameWorld.DebugLog(" taskID=%s,taskType(%s) != missiontype(%s)" % (taskID, taskType, missiontype)) continue missionState = mission.GetState() if stateList and missionState not in stateList: GameWorld.DebugLog(" taskID=%s,missionState=%s not in stateList=%s" % (taskID, missionState, stateList)) continue if nostateList and missionState in nostateList: GameWorld.DebugLog(" taskID=%s,missionState=%s in nostateList=%s" % (taskID, missionState, nostateList)) continue haveCondMission = 1 GameWorld.DebugLog(" taskID=%s,taskType=%s,missionState=%s OK!" % (taskID, taskType, missionState)) break GameWorld.DebugLog(" haveCondMission=%s" % (haveCondMission)) return haveCondMission == conditionValue #--------------------------------------------------------------------- ##µ±Ç°ÈÎÎñ²½ÖèÊÇ·ñ¿ÉÒÔɾ³ýÈÎÎñÎïÆ· # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Can_Del_Mission_Item(curPlayer, curMission, curConditionNode): result = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0) #ÅжÏËùÓÐÈÎÎñ for i in range(0, curPlayer.GetMissionCount()): curMission = curPlayer.GetMissionByIndex(i) if curMission == None: continue if curMission.GetState() > 0: return False == result return True == result #--------------------------------------------------------------------- ##ÊÇ·ñÓжÓÎé # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Team(curPlayer, curMission, curConditionNode): #¸ñʽ curPlayerTeam = curPlayer.GetTeam() if curPlayerTeam == None: return True return False #--------------------------------------------------------------------- ##ÊÇ·ñ¿ÉÒÔ¿ªÊ¼À­ïÚÈÎÎñ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Can_Start_Truck(curPlayer, curMission, curConditionNode): # 0:²»¿É½Ó 1£º¿É½Ó conditionValue = int(curConditionNode.GetAttribute("value")) if PlayerTruck.PlayerInMapHaveTruck(curPlayer): #Íæ¼ÒÔÚµØÍ¼ÖÐÓÐæô³µ return conditionValue == 0 truckState = curPlayer.GetTruckState() #ïÚ³µÎ´½ÓºÍ¶ªÊ§¶¼¿É½Ó if truckState == IPY_GameWorld.tusNull or truckState == IPY_GameWorld.tusDisappear: return conditionValue == 1 return conditionValue == 0 #--------------------------------------------------------------------- ##ÊÇ·ñÊÇÆÚÍûµÄæô³µ×´Ì¬ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Truck_State(curPlayer, curMission, curConditionNode): conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") return QuestRunnerValue.GetEval(conditionType, curPlayer.GetTruckState(), conditionValue) #--------------------------------------------------------------------- ##ÊÇ·ñ¶ÓÔ±±ØÐëÔÚͬһµØÍ¼ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Team_State(curPlayer, curMission, curConditionNode): result = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 0) curPlayerTeam = curPlayer.GetTeam() if curPlayerTeam == None: return False == result #¶ÓÎéû³¬¹ý2ÈË£¨¶ÓÎéÈËÊýÅжÏÊǶ¼ÔÚͬһµØÍ¼£© if curPlayerTeam.GetMemberCount() < 2: return False == result return True == result #--------------------------------------------------------------------- ##ÊÇ·ñÓÐ×é¶Ó # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Is_Team_State(curPlayer, curMission, curConditionNode): # conditionValue = int(curConditionNode.GetAttribute("value")) conditionType = curConditionNode.GetAttribute("type") return QuestRunnerValue.GetEval(conditionType, curPlayer.GetTeamID(), conditionValue) #--------------------------------------------------------------------- ##ÊÇ·ñÓÐïÚ³µÔÚ¸½¼þ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Truck_Near(curPlayer, curMission, curConditionNode): curTruck = curPlayer.GetTruck() if curTruck == None: return False #»ñµÃÍæ¼ÒºÍïÚ³µ¼äµÄ¾àÀë dist = GameWorld.GetDist(curTruck.GetPosX(), curTruck.GetPosY(), curPlayer.GetPosX(), curPlayer.GetPosY()) #ïÚ³µÍ£Ö¹ if dist > ChConfig.Def_PlayerTruckEventDist: return False return True #--------------------------------------------------------------------- ##ÎïÆ·±³°üÖÐÊÇ·ñÓÐÁбíÎïÆ·ÖеÄÎïÆ· # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Have_Item_List(curPlayer, curMission, curConditionNode): #¸ñʽ ItemID = curConditionNode.GetAttribute("id") #»ñµÃÎïÆ·Áбí ItemIDList = ItemID.split("/") #»ñµÃÍæ¼Ò±³°üÎïÆ· PlayerItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) #±éÀúÎïÆ·Áбí for i in range(0, len(ItemIDList)): haveItemID = int(ItemIDList[i]) #±éÀúÍæ¼Ò±³°ü for j in range(0, PlayerItem.GetCount()): curItem = PlayerItem.GetAt(j) curItemID = curItem.GetItemTypeID() if haveItemID != curItemID : continue else: return True return False #--------------------------------------------------------------------- ##²Ö¿âÖÐÊÇ·ñÓÐÆÚÍûµÄÎïÆ· # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Warehouse_Have_Item(curPlayer, curMission, curConditionNode): #¸ñʽ itemID = int(curConditionNode.GetAttribute("id")) result = int(curConditionNode.GetAttribute("result")) #»ñµÃ²Ö¿â±³°ü rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptWarehouse) #»ñµÃµÚÒ»¸ñÎïÆ· item = rolePack.GetAt(0) if not ItemCommon.CheckItemCanUse(item): return False == result if item.GetItemTypeID() != itemID : return False == result return True == result #--------------------------------------------------------------------- ##ÊÇ·ñÊǼÒ×峤 # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks def ConditionType_Family_Leader(curPlayer, curMission, curConditionNode): # result:0²»ÊÇ×峤£¬1ÊÇ£¨Ä¬ÈÏ1£© result = GameWorld.ToIntDef(curConditionNode.GetAttribute("result"), 1) memberLV = curPlayer.GetFamilyMemberLV() if memberLV != IPY_GameWorld.fmlLeader: return 0 == result return 1 == result #--------------------------------------------------------------------- ##ÊÇ·ñÊÇÔÚÆÚÍûµÄʱ¼ä¶ÎÄÚ # @param curPlayer Íæ¼ÒʵÀý # @param curMission ÈÎÎñʵÀý # @param curConditionNode ½ÚµãÐÅÏ¢ # @return ·µ»ØÖµ, ÊÇ·ñÅжϳɹ¦ # @remarks